44
55package com.alliander.open.measure
66
7+ import com.alliander.open.measure.Current.Companion.ampere
78import com.alliander.open.measure.Energy.Companion.joule
89import com.alliander.open.measure.Power.Companion.watt
910import com.alliander.open.measure.Time.Companion.seconds
11+ import com.alliander.open.measure.Voltage.Companion.volt
1012import java.math.BigDecimal
1113
14+ @JvmName(" powerTimesTime" )
1215operator fun Measure<Power>.times (duration : Measure <Time >): Measure <Energy > {
13- val p = this `as ` watt
14- val dt = duration `as ` seconds
16+ val p = this `in ` watt
17+ val dt = duration `in ` seconds
18+ return Measure (p * dt, joule)
19+ }
20+
21+ @JvmName(" currentTimesVoltage" )
22+ operator fun Measure<Current>.times (voltage : Measure <Voltage >): Measure <Power > {
23+ val i = this `in ` ampere
24+ val v = voltage `in ` volt
25+ return Measure (i * v, watt)
26+ }
27+
28+ @JvmName(" voltageTimesCurrent" )
29+ operator fun Measure<Voltage>.times (current : Measure <Current >): Measure <Power > {
30+ val v = this `in ` volt
31+ val i = current `in ` ampere
32+ return Measure (i * v, watt)
33+ }
34+
35+ @JvmName(" powerDivVoltage" )
36+ operator fun Measure<Power>.div (voltage : Measure <Voltage >): Measure <Current > {
37+ val p = this `in ` watt
38+ val v = voltage `in ` volt
39+ return Measure (p / v, ampere)
40+ }
41+
42+ @JvmName(" powerDivCurrent" )
43+ operator fun Measure<Power>.div (current : Measure <Current >): Measure <Voltage > {
44+ val p = this `in ` watt
45+ val i = current `in ` ampere
46+ return Measure (p / i, volt)
47+ }
48+
49+ class Voltage (suffix : String , ratio : BigDecimal = BigDecimal .ONE ) : Units(suffix, ratio) {
50+ companion object {
51+ val volt = Voltage (" V" )
52+ val kiloVolt = Voltage (" kV" , 1_000 .toBigDecimal())
53+ }
54+ }
1555
16- return Measure (p.amount * dt.amount, joule)
56+ class Current (suffix : String , ratio : BigDecimal = BigDecimal .ONE ) : Units(suffix, ratio) {
57+ companion object {
58+ val ampere = Current (" A" )
59+ val kiloAmpere = Current (" kA" , 1_000 .toBigDecimal())
60+ }
1761}
1862
1963class Power (suffix : String , ratio : BigDecimal = BigDecimal .ONE ) : Units(suffix, ratio) {
@@ -30,7 +74,7 @@ class Energy(suffix: String, ratio: BigDecimal = BigDecimal.ONE) : Units(suffix,
3074 val kiloJoule = Energy (" kJ" , 1_000 .toBigDecimal())
3175 val megaJoule = Energy (" MJ" , 1_000_000 .toBigDecimal())
3276 val kiloWattHour = Energy (" kWh" , 3_600_000 .toBigDecimal())
33- val megaWattHour = Energy (" mWh " , 3_600_000_000 .toBigDecimal())
77+ val megaWattHour = Energy (" MWh " , 3_600_000_000 .toBigDecimal())
3478 }
3579}
3680
@@ -41,4 +85,3 @@ class Time(suffix: String, ratio: BigDecimal = BigDecimal.ONE) : Units(suffix, r
4185 val hours = Time (" h" , 3_600 .toBigDecimal())
4286 }
4387}
44-
0 commit comments