// take a sample of this liquid to be used to make the solution up to // a particular total volume func SampleForTotalVolume(l wtype.Liquid, v wunit.Volume) *wtype.LHComponent { ret := wtype.NewLHComponent() ret.CName = l.Name() ret.Tvol = v.RawValue() ret.Vunit = v.Unit().PrefixedSymbol() ret.LContainer = l.Container().(*wtype.LHWell) ret.CName = l.Name() ret.Extra = l.GetExtra() ret.Smax = l.GetSmax() ret.Visc = l.GetVisc() return ret }
func (lhc *LHComponent) Sample(v wunit.Volume) Liquid { // need to jig around with units a bit here // Should probably just make Vunit, Cunit etc. wunits anyway meas := wunit.ConcreteMeasurement{lhc.Vol, wunit.ParsePrefixedUnit(lhc.Vunit)} // we need some logic potentially if v.SIValue() > meas.SIValue() { wutil.Error(errors.New(fmt.Sprintf("LHComponent ID: %s Not enough volume for sample", lhc.ID))) } else if v.SIValue() == meas.SIValue() { return lhc } smp := CopyLHComponent(lhc) // need a convention here smp.Vol = v.RawValue() smp.Vunit = v.Unit().PrefixedSymbol() meas.Subtract(&v.ConcreteMeasurement) lhc.Vol = meas.RawValue() return smp }