GENERIC MODULESIUnit (RT,UU,UUList,DB);
I have collected some more units that are not suited for output but may be used for input in future
PROCEDURECreateDatabase ():DB.T= VAR db:DB.T; CONST percent = FLOAT(0.01D0,RT.T); fourth = FLOAT(0.25D0,RT.T); half = FLOAT(0.50D0,RT.T); threefourth = FLOAT(0.75D0,RT.T); sixty = FLOAT(60.0D0,RT.T); daySecs = sixty*sixty*FLOAT(24.0D0,RT.T); (* 86400.0D0 *) yearSecs = daySecs*FLOAT(365.2422D0,RT.T); earthAcc = FLOAT(9.80665D0,RT.T); K2 = FLOAT(1024.0D0,RT.T); deg180 = FLOAT(180.0D0,RT.T); grad200 = FLOAT(200.0D0,RT.T); radPerDeg = RT.Pi/deg180; radPerGrad = RT.Pi/grad200; bytesize = FLOAT(8.0D0,RT.T); mach = FLOAT(332.0D0,RT.T); speedoflight = FLOAT(299792458.0D0,RT.T); electronVolt = FLOAT(1.602D-19,RT.T); calorien = FLOAT(4.19D0,RT.T); horsePower = FLOAT(736.0D0,RT.T); pico = FLOAT(1.0D-12,RT.T); nano = FLOAT(1.0D-9,RT.T); micro = FLOAT(1.0D-6,RT.T); milli = FLOAT(1.0D-3,RT.T); centi = FLOAT(1.0D-2,RT.T); deci = FLOAT(1.0D-1,RT.T); one = FLOAT(1.0D0,RT.T);
deca = FLOAT(1.0D1,RT.T);
hecto = FLOAT(1.0D2,RT.T); kilo = FLOAT(1.0D3,RT.T); mega = FLOAT(1.0D6,RT.T); giga = FLOAT(1.0D9,RT.T); TYPE SUA = DB.ScaledUnitInitArray; SU = DB.ScaledUnitInit; CONST IsUnit = DB.ScaledUnitFlagSet{DB.ScaledUnitFlags.IsUnit}; DefScale = DB.ScaledUnitFlagSet{DB.ScaledUnitFlags.Default}; Independent = UU.FlagSet{UU.Flags.Independent}; BEGIN DB.AddUnit(db,noUnit,scales:=SUA{ SU{"pi", RT.Pi}, SU{"e", RT.E},
SU{i
, 0.,1.},
SU{"%", percent}, SU{"¼", fourth}, SU{"½", half}, SU{"¾", threefourth} }); DB.AddUnit(db,angle,scales:=SUA{ SU{"''", radPerDeg/(sixty*sixty), flags := IsUnit}, SU{"'", radPerDeg/(sixty), flags := IsUnit}, SU{"grad", radPerGrad}, SU{"°", radPerDeg, flags := IsUnit+DefScale}, SU{"rad", one} }); DB.AddUnit(db,frequency,flags:=Independent,scales:=SUA{ SU{"bpm", one/sixty}, SU{"Hz", one, flags := IsUnit+DefScale}, SU{"kHz", kilo, flags := IsUnit}, SU{"MHz", mega, flags := IsUnit}, SU{"GHz", giga, flags := IsUnit} }); DB.AddUnit(db,time,scales:=SUA{ SU{"us", micro, flags := IsUnit}, SU{"ms", milli, flags := IsUnit}, SU{"s", one, flags := IsUnit+DefScale}, SU{"min", sixty, flags := IsUnit}, SU{"h", sixty*sixty, flags := IsUnit}, SU{"d", daySecs, flags := IsUnit}, SU{"a", yearSecs, flags := IsUnit} }); DB.AddUnit(db,length,scales:=SUA{ SU{"nm", nano, flags := IsUnit}, SU{"um", micro, flags := IsUnit}, SU{"mm", milli, flags := IsUnit}, SU{"cm", centi, flags := IsUnit}, SU{"dm", deci, flags := IsUnit}, SU{"m", one, flags := IsUnit+DefScale}, SU{"km", kilo, flags := IsUnit} }); DB.AddUnit(db,area,scales:=SUA{ SU{"ha", hecto*hecto} }); DB.AddUnit(db,volume,scales:=SUA{ SU{"ml", milli*milli}, SU{"cl", milli*centi}, SU{"l", milli} }); DB.AddUnit(db,speed,scales:=SUA{ SU{"mach", mach}, SU{"c", speedoflight} }); DB.AddUnit(db,acceleration,scales:=SUA{ SU{"G", earthAcc} }); DB.AddUnit(db,mass,scales:=SUA{ SU{"ug", nano, flags := IsUnit}, SU{"mg", micro, flags := IsUnit}, SU{"g", milli, flags := IsUnit}, SU{"kg", one, flags := IsUnit+DefScale}, SU{"dt", hecto, flags := IsUnit}, SU{"t", kilo, flags := IsUnit}, SU{"kt", mega, flags := IsUnit} }); DB.AddUnit(db,force,scales:=SUA{ SU{"N", one, flags := IsUnit+DefScale}, SU{"kp", earthAcc}, SU{"kN", kilo, flags := IsUnit} }); DB.AddUnit(db,pressure,scales:=SUA{ SU{"Pa", one, flags := IsUnit+DefScale}, SU{"mbar", hecto}, SU{"kPa", kilo, flags := IsUnit}, SU{"bar", hecto*kilo} }); DB.AddUnit(db,energy,scales:=SUA{ SU{"eV", electronVolt}, SU{"J", one, flags := IsUnit+DefScale}, SU{"cal", calorien}, SU{"kJ", kilo, flags := IsUnit}, SU{"kcal", kilo*calorien} }); DB.AddUnit(db,power,scales:=SUA{ SU{"mW", milli, flags := IsUnit}, SU{"W", one, flags := IsUnit+DefScale}, SU{"HP", horsePower}, SU{"kW", kilo, flags := IsUnit} }); DB.AddUnit(db,charge,scales:=SUA{ SU{"C", one, flags := IsUnit+DefScale} }); DB.AddUnit(db,current,scales:=SUA{ SU{"uA", micro, flags := IsUnit}, SU{"mA", milli, flags := IsUnit}, SU{"A", one, flags := IsUnit+DefScale} }); DB.AddUnit(db,voltage,scales:=SUA{ SU{"mV", milli, flags := IsUnit}, SU{"V", one, flags := IsUnit+DefScale}, SU{"kV", kilo, flags := IsUnit}, SU{"MV", mega, flags := IsUnit}, SU{"GV", giga, flags := IsUnit} }); DB.AddUnit(db,resistance,scales:=SUA{ SU{"Ohm", one, flags := IsUnit+DefScale}, SU{"kOhm", kilo, flags := IsUnit}, SU{"MOhm", mega, flags := IsUnit} }); DB.AddUnit(db,capacity,scales:=SUA{ SU{"pF", pico, flags := IsUnit}, SU{"nF", nano, flags := IsUnit}, SU{"uF", micro, flags := IsUnit+DefScale} }); DB.AddUnit(db,temperature,scales:=SUA{ SU{"K", one, flags := IsUnit+DefScale} }); DB.AddUnit(db,information,scales:=SUA{ SU{"bit", one, flags := IsUnit+DefScale}, SU{"B", bytesize, flags := IsUnit}, SU{"kB", kilo*bytesize}, SU{"KB", K2*bytesize, flags := IsUnit}, SU{"MB", K2*K2*bytesize, flags := IsUnit}, SU{"GB", K2*K2*K2*bytesize, flags := IsUnit} }); DB.AddUnit(db,datarate,flags:=Independent,scales:=SUA{ SU{"baud", one, flags := IsUnit+DefScale}, SU{"kbaud", kilo}, SU{"Kbaud", K2, flags := IsUnit}, SU{"Mbaud", K2*K2, flags := IsUnit}, SU{"Gbaud", K2*K2*K2, flags := IsUnit} }); (* put the list in the right order *) db.first := UUList.ReverseD(db.first); RETURN db; END CreateDatabase; BEGIN END SIUnit.