diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bcad0d96b..4c42a0b055 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added weatherData HowTo for Copernicus ERA5 data [#967](https://github.com/ie3-institute/simona/issues/967) - Add some quote to 'printGoodbye' [#997](https://github.com/ie3-institute/simona/issues/997) - Add unapply method for ThermalHouseResults [#934](https://github.com/ie3-institute/simona/issues/934) +- Added `ApparentPower` to differentiate between different power types [#794](https://github.com/ie3-institute/simona/issues/794) ### Changed - Adapted to changed data source in PSDM [#435](https://github.com/ie3-institute/simona/issues/435) diff --git a/src/main/scala/edu/ie3/simona/agent/em/EmAgent.scala b/src/main/scala/edu/ie3/simona/agent/em/EmAgent.scala index 3d98612c18..4168da3955 100644 --- a/src/main/scala/edu/ie3/simona/agent/em/EmAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/em/EmAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.em import edu.ie3.datamodel.models.input.EmInput import edu.ie3.datamodel.models.result.system.{EmResult, FlexOptionsResult} -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.BaseStateData.FlexControlledData import edu.ie3.simona.config.SimonaConfig.EmRuntimeConfig import edu.ie3.simona.event.ResultEvent @@ -409,7 +409,7 @@ object EmAgent { // After initialization, there are no results yet. val maybeResult = inactiveCore.getResults .reduceOption { (power1, power2) => - ApparentPower(power1.p + power2.p, power1.q + power2.q) + ComplexPower(power1.p + power2.p, power1.q + power2.q) } maybeResult.foreach { result => diff --git a/src/main/scala/edu/ie3/simona/agent/em/EmDataCore.scala b/src/main/scala/edu/ie3/simona/agent/em/EmDataCore.scala index cb8a73294d..a851f8ff69 100644 --- a/src/main/scala/edu/ie3/simona/agent/em/EmDataCore.scala +++ b/src/main/scala/edu/ie3/simona/agent/em/EmDataCore.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.em import edu.ie3.simona.agent.em.EmAgent.Actor import edu.ie3.simona.agent.em.FlexCorrespondenceStore.WithTime -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.exceptions.CriticalFailureException import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage._ import edu.ie3.simona.util.SimonaConstants.INIT_SIM_TICK @@ -163,7 +163,7 @@ object EmDataCore { /** Returns relevant results for all connected agents. */ - def getResults: Iterable[ApparentPower] = + def getResults: Iterable[ComplexPower] = correspondences.store.values.flatMap(_.receivedResult.map(_.get)) } diff --git a/src/main/scala/edu/ie3/simona/agent/em/FlexCorrespondenceStore.scala b/src/main/scala/edu/ie3/simona/agent/em/FlexCorrespondenceStore.scala index 5d69a5190a..8d4a12445c 100644 --- a/src/main/scala/edu/ie3/simona/agent/em/FlexCorrespondenceStore.scala +++ b/src/main/scala/edu/ie3/simona/agent/em/FlexCorrespondenceStore.scala @@ -10,7 +10,7 @@ import edu.ie3.simona.agent.em.FlexCorrespondenceStore.{ FlexCorrespondence, WithTime, } -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.{ IssueFlexControl, ProvideFlexOptions, @@ -88,7 +88,7 @@ final case class FlexCorrespondenceStore( */ def updateResult( modelUuid: UUID, - result: ApparentPower, + result: ComplexPower, tick: Long, ): FlexCorrespondenceStore = updateCorrespondence( @@ -124,7 +124,7 @@ object FlexCorrespondenceStore { final case class FlexCorrespondence( receivedFlexOptions: Option[WithTime[ProvideFlexOptions]] = None, issuedCtrlMsg: Option[WithTime[IssueFlexControl]] = None, - receivedResult: Option[WithTime[ApparentPower]] = None, + receivedResult: Option[WithTime[ComplexPower]] = None, ) /** Wrapper that allows storing a tick with an object diff --git a/src/main/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentals.scala index 927007bb47..12b0e9657c 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentals.scala @@ -23,8 +23,8 @@ import edu.ie3.simona.agent.participant.ParticipantAgent.StartCalculationTrigger import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals.RelevantResultValues import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, - ApparentPowerAndHeat, + ComplexPower, + ComplexPowerAndHeat, EnrichableData, PrimaryDataWithApparentPower, } @@ -799,7 +799,7 @@ protected trait ParticipantAgentFundamentals[ flexStateData.emAgent ! FlexResult( baseStateData.modelUuid, - result.primaryData.toApparentPower, + result.primaryData.toComplexPower, ) flexStateData.emAgent ! FlexCompletion( @@ -1739,8 +1739,8 @@ protected trait ParticipantAgentFundamentals[ baseStateData.foreseenDataTicks, ) - averageResult.toApparentPower match { - case ApparentPower(p, q) => + averageResult.toComplexPower match { + case ComplexPower(p, q) => stay() using nextStateData replying AssetPowerChangedMessage(p, q) } } @@ -2003,14 +2003,14 @@ object ParticipantAgentFundamentals { * The averaged apparent power */ def averageApparentPower( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, log: LoggingAdapter, - ): ApparentPower = { + ): ComplexPower = { val p = QuantityUtil.average[Power, Energy]( tickToResults.map { case (tick, pd) => tick -> pd.p @@ -2034,8 +2034,8 @@ object ParticipantAgentFundamentals { case Some(qFunc) => // NOTE: The type conversion to Megawatts is done to satisfy the methods type constraints // and is undone after unpacking the results - tick -> Megawatts(qFunc(pd.toApparentPower.p).toMegavars) - case None => tick -> Megawatts(pd.toApparentPower.q.toMegavars) + tick -> Megawatts(qFunc(pd.toComplexPower.p).toMegavars) + case None => tick -> Megawatts(pd.toComplexPower.q.toMegavars) } }, windowStart, @@ -2051,7 +2051,7 @@ object ParticipantAgentFundamentals { zeroMVAr } - ApparentPower(p, q) + ComplexPower(p, q) } /** Determine the average apparent power within the given tick window @@ -2068,20 +2068,20 @@ object ParticipantAgentFundamentals { * The averaged apparent power */ def averageApparentPowerAndHeat( - tickToResults: Map[Long, ApparentPowerAndHeat], + tickToResults: Map[Long, ComplexPowerAndHeat], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, log: LoggingAdapter, - ): ApparentPowerAndHeat = { + ): ComplexPowerAndHeat = { - val tickToResultsApparentPower: Map[Long, ApparentPower] = + val tickToResultsApparentPower: Map[Long, ComplexPower] = tickToResults.map { case (tick, pd) => ( tick, - ApparentPower(Megawatts(pd.p.toMegawatts), Megavars(pd.q.toMegavars)), + ComplexPower(Megawatts(pd.p.toMegawatts), Megavars(pd.q.toMegavars)), ) } @@ -2109,7 +2109,7 @@ object ParticipantAgentFundamentals { zeroMW } - ApparentPowerAndHeat(apparentPower.p, apparentPower.q, qDot) + ComplexPowerAndHeat(apparentPower.p, apparentPower.q, qDot) } } diff --git a/src/main/scala/edu/ie3/simona/agent/participant/data/Data.scala b/src/main/scala/edu/ie3/simona/agent/participant/data/Data.scala index cb56e1af92..7da7b04c5c 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/data/Data.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/data/Data.scala @@ -7,13 +7,13 @@ package edu.ie3.simona.agent.participant.data import edu.ie3.datamodel.models.value._ -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.quantities.interfaces.EnergyPrice -import edu.ie3.util.scala.quantities.{Kilovars, Megavars, ReactivePower} -import squants.energy.{Power, Kilowatts, Megawatts} -import tech.units.indriya.ComparableQuantity import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{Kilovars, ReactivePower} +import squants.energy.{Kilowatts, Power} +import tech.units.indriya.ComparableQuantity import java.time.ZonedDateTime import scala.jdk.OptionConverters.RichOptional @@ -36,7 +36,7 @@ object Data { */ sealed trait PrimaryData extends Data { val p: Power - def toApparentPower: ApparentPower + def toComplexPower: ComplexPower } object PrimaryData { @@ -61,7 +61,7 @@ object Data { val qDot: Power } - val ZERO_POWER: ApparentPower = ApparentPower(zeroMW, zeroMVAr) + val ZERO_POWER: ComplexPower = ComplexPower(zeroMW, zeroMVAr) /** Active power as participant simulation result * @@ -70,15 +70,15 @@ object Data { */ final case class ActivePower(override val p: Power) extends PrimaryData - with EnrichableData[ApparentPower] { - override def toApparentPower: ApparentPower = - ApparentPower( + with EnrichableData[ComplexPower] { + override def toComplexPower: ComplexPower = + ComplexPower( p, zeroMVAr, ) - override def add(q: ReactivePower): ApparentPower = - ApparentPower(p, q) + override def add(q: ReactivePower): ComplexPower = + ComplexPower(p, q) } /** Active and Reactive power as participant simulation result @@ -88,13 +88,13 @@ object Data { * @param q * Reactive power */ - final case class ApparentPower( + final case class ComplexPower( override val p: Power, override val q: ReactivePower, - ) extends PrimaryDataWithApparentPower[ApparentPower] { - override def toApparentPower: ApparentPower = this + ) extends PrimaryDataWithApparentPower[ComplexPower] { + override def toComplexPower: ComplexPower = this - override def withReactivePower(q: ReactivePower): ApparentPower = + override def withReactivePower(q: ReactivePower): ComplexPower = copy(q = q) } @@ -110,15 +110,15 @@ object Data { override val qDot: Power, ) extends PrimaryData with Heat - with EnrichableData[ApparentPowerAndHeat] { - override def toApparentPower: ApparentPower = - ApparentPower( + with EnrichableData[ComplexPowerAndHeat] { + override def toComplexPower: ComplexPower = + ComplexPower( p, zeroMVAr, ) - override def add(q: ReactivePower): ApparentPowerAndHeat = - ApparentPowerAndHeat(p, q, qDot) + override def add(q: ReactivePower): ComplexPowerAndHeat = + ComplexPowerAndHeat(p, q, qDot) } /** Apparent power and heat demand as participant simulation result @@ -130,16 +130,16 @@ object Data { * @param qDot * Heat demand */ - final case class ApparentPowerAndHeat( + final case class ComplexPowerAndHeat( override val p: Power, override val q: ReactivePower, override val qDot: Power, - ) extends PrimaryDataWithApparentPower[ApparentPowerAndHeat] + ) extends PrimaryDataWithApparentPower[ComplexPowerAndHeat] with Heat { - override def toApparentPower: ApparentPower = - ApparentPower(p, q) + override def toComplexPower: ComplexPower = + ComplexPower(p, q) - override def withReactivePower(q: ReactivePower): ApparentPowerAndHeat = + override def withReactivePower(q: ReactivePower): ComplexPowerAndHeat = copy(q = q) } @@ -150,7 +150,7 @@ object Data { (hs.getP.toScala, hs.getQ.toScala, hs.getHeatDemand.toScala) match { case (Some(p), Some(q), Some(qDot)) => Success( - ApparentPowerAndHeat( + ComplexPowerAndHeat( Kilowatts( p.to(PowerSystemUnits.KILOWATT).getValue.doubleValue ), @@ -173,7 +173,7 @@ object Data { (s.getP.toScala, s.getQ.toScala) match { case (Some(p), Some(q)) => Success( - ApparentPower( + ComplexPower( Kilowatts( p.to(PowerSystemUnits.KILOWATT).getValue.doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/agent/participant/data/primary/PrimaryDataService.scala b/src/main/scala/edu/ie3/simona/agent/participant/data/primary/PrimaryDataService.scala index 33cb4b7519..92c4e510d3 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/data/primary/PrimaryDataService.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/data/primary/PrimaryDataService.scala @@ -6,10 +6,10 @@ package edu.ie3.simona.agent.participant.data.primary -import org.apache.pekko.actor.ActorRef import edu.ie3.simona.agent.participant.data.Data.PrimaryData -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.DataService +import org.apache.pekko.actor.ActorRef /** Enum-like trait to denote possible external data sources for systems */ @@ -23,5 +23,5 @@ object PrimaryDataService { * actor reference of the actual source */ final case class DummyPrimaryService(override val actorRef: ActorRef) - extends PrimaryDataService[ApparentPower] + extends PrimaryDataService[ComplexPower] } diff --git a/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgent.scala index cdab067fa7..5b37ae70e3 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.evcs import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService @@ -46,7 +46,7 @@ object EvcsAgent { initStateData: ParticipantInitializeStateData[ EvcsInput, EvcsRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -68,26 +68,26 @@ class EvcsAgent( initStateData: ParticipantInitializeStateData[ EvcsInput, EvcsRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], EvcsInput, EvcsRuntimeConfig, EvcsModel, ](scheduler, initStateData) with EvcsAgentFundamentals { - override val alternativeResult: ApparentPower = ZERO_POWER + override val alternativeResult: ComplexPower = ZERO_POWER when(Idle) { case Event( EvFreeLotsRequest(tick), modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -99,7 +99,7 @@ class EvcsAgent( case Event( DepartingEvsRequest(tick, departingEvs), modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -116,11 +116,11 @@ class EvcsAgent( case Event( EvFreeLotsRequest(tick), - stateData: DataCollectionStateData[ApparentPower], + stateData: DataCollectionStateData[ComplexPower], ) => stateData.baseStateData match { case modelStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -135,11 +135,11 @@ class EvcsAgent( case Event( DepartingEvsRequest(tick, departingEvs), - stateData: DataCollectionStateData[ApparentPower], + stateData: DataCollectionStateData[ComplexPower], ) => stateData.baseStateData match { case modelStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -168,13 +168,13 @@ class EvcsAgent( * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ], - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgentFundamentals.scala index 8894a511ff..9cf2f747d8 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/evcs/EvcsAgentFundamentals.scala @@ -16,7 +16,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.grid.GridAgentMessages.AssetPowerChangedMessage import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.Data.SecondaryData import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorExtEvDataService @@ -70,17 +70,17 @@ import scala.reflect.{ClassTag, classTag} protected trait EvcsAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], EvcsInput, EvcsRuntimeConfig, EvcsModel, ] { this: EvcsAgent => - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] /** Determines the needed base state data in dependence of the foreseen * simulation mode of the agent. @@ -117,7 +117,7 @@ protected trait EvcsAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -138,7 +138,7 @@ protected trait EvcsAgentFundamentals ) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -185,7 +185,7 @@ protected trait EvcsAgentFundamentals override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -199,7 +199,7 @@ protected trait EvcsAgentFundamentals override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -238,7 +238,7 @@ protected trait EvcsAgentFundamentals def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -248,7 +248,7 @@ protected trait EvcsAgentFundamentals setPower: Power, ): ( EvcsState, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { /* Calculate the power */ @@ -259,7 +259,7 @@ protected trait EvcsAgentFundamentals voltage, ) val result = AccompaniedSimulationResult( - ApparentPower(setPower, reactivePower), + ComplexPower(setPower, reactivePower), Seq.empty[ResultEntity], ) @@ -276,14 +276,14 @@ protected trait EvcsAgentFundamentals override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, ], EvcsState, Dimensionless, - ) => ApparentPower = + ) => ComplexPower = (_, _, _, _) => throw new InvalidRequestException( "Evcs model cannot be run without secondary data." @@ -312,7 +312,7 @@ protected trait EvcsAgentFundamentals */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -320,7 +320,7 @@ protected trait EvcsAgentFundamentals lastModelState: EvcsState, tick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = { + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = { /* extract EV data from secondary data, which should have been requested and received before */ baseStateData.receivedSecondaryDataStore .getOrElse(tick, Map.empty) @@ -353,7 +353,7 @@ protected trait EvcsAgentFundamentals protected def handleFreeLotsRequest( tick: Long, modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -387,13 +387,13 @@ protected trait EvcsAgentFundamentals tick: Long, requestedDepartingEvs: Seq[UUID], baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, ], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -484,12 +484,12 @@ protected trait EvcsAgentFundamentals tick: Long, scheduler: ActorRef, modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, ], - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = { + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = { val relevantData = createCalcRelevantData(modelBaseStateData, tick) @@ -567,12 +567,12 @@ protected trait EvcsAgentFundamentals */ override def determineReply( requestTick: Long, - baseStateData: BaseStateData[ApparentPower], - mostRecentRequest: Option[(Long, ApparentPower)], + baseStateData: BaseStateData[ComplexPower], + mostRecentRequest: Option[(Long, ComplexPower)], nodalVoltage: squants.Dimensionless, updatedVoltageValueStore: ValueStore[squants.Dimensionless], - alternativeResult: ApparentPower, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = { + alternativeResult: ComplexPower, + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = { /* No fast reply possible --> Some calculations have to be made */ mostRecentRequest match { case Some((lastRequestTick, _)) if lastRequestTick > requestTick => @@ -584,7 +584,7 @@ protected trait EvcsAgentFundamentals /* Repetitive request for the same tick, but with different voltage */ baseStateData match { case modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -628,7 +628,7 @@ protected trait EvcsAgentFundamentals val updatedBaseStateData = baseStateData match { case modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -695,15 +695,15 @@ protected trait EvcsAgentFundamentals */ override def handleCalculatedResult( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, ], - result: AccompaniedSimulationResult[ApparentPower], + result: AccompaniedSimulationResult[ComplexPower], currentTick: Long, ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -730,7 +730,7 @@ protected trait EvcsAgentFundamentals baseStateData.copy( resultValueStore = updatedResultValueStore ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, @@ -757,12 +757,12 @@ protected trait EvcsAgentFundamentals lastState: EvcsState, currentTick: Long, modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, EvcsRelevantData, EvcsState, EvcsModel, ], - ): ValueStore[ApparentPower] = { + ): ValueStore[ComplexPower] = { val voltage = modelBaseStateData.voltageValueStore .last(currentTick) @@ -794,7 +794,7 @@ protected trait EvcsAgentFundamentals ValueStore.updateValueStore( resultValueStore, result.getTime.toTick(modelBaseStateData.startDate), - ApparentPower( + ComplexPower( Megawatts(result.getP.to(MEGAWATT).getValue.doubleValue), Megavars(result.getQ.to(MEGAVAR).getValue.doubleValue), ), @@ -816,7 +816,7 @@ protected trait EvcsAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new EvcsResult( dateTime, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgent.scala index 9b5b681f90..38826657e2 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.fixedfeedin import edu.ie3.datamodel.models.input.system.FixedFeedInInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.ParticipantStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.ParticipantInitializeStateData import edu.ie3.simona.config.SimonaConfig.FixedFeedInRuntimeConfig @@ -23,7 +23,7 @@ object FixedFeedInAgent { initStateData: ParticipantInitializeStateData[ FixedFeedInInput, FixedFeedInRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -42,14 +42,14 @@ class FixedFeedInAgent( initStateData: ParticipantInitializeStateData[ FixedFeedInInput, FixedFeedInRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], FixedFeedInInput, FixedFeedInRuntimeConfig, FixedFeedInModel, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgentFundamentals.scala index 0b8845d80c..2ed0495610 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/fixedfeedin/FixedFeedInAgentFundamentals.scala @@ -16,7 +16,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.Data.SecondaryData @@ -65,18 +65,18 @@ import scala.reflect.{ClassTag, classTag} protected trait FixedFeedInAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], FixedFeedInInput, FixedFeedInRuntimeConfig, FixedFeedInModel, ] { this: FixedFeedInAgent => - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] - override val alternativeResult: ApparentPower = ZERO_POWER + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] + override val alternativeResult: ComplexPower = ZERO_POWER /** Determines the needed base state data in dependence of the foreseen * simulation mode of the agent. @@ -113,7 +113,7 @@ protected trait FixedFeedInAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -145,7 +145,7 @@ protected trait FixedFeedInAgentFundamentals ).filterNot(_ == lastTickInSimulation) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -190,7 +190,7 @@ protected trait FixedFeedInAgentFundamentals override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -199,7 +199,7 @@ protected trait FixedFeedInAgentFundamentals override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -225,7 +225,7 @@ protected trait FixedFeedInAgentFundamentals def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -235,7 +235,7 @@ protected trait FixedFeedInAgentFundamentals setPower: squants.Power, ): ( ConstantState.type, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { /* Calculate result */ @@ -246,7 +246,7 @@ protected trait FixedFeedInAgentFundamentals voltage, ) val result = AccompaniedSimulationResult( - ApparentPower(setPower, reactivePower), + ComplexPower(setPower, reactivePower), Seq.empty[ResultEntity], ) @@ -259,17 +259,17 @@ protected trait FixedFeedInAgentFundamentals override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = ( + ) => ComplexPower = ( currentTick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -314,7 +314,7 @@ protected trait FixedFeedInAgentFundamentals */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, FixedFeedInModel, @@ -322,7 +322,7 @@ protected trait FixedFeedInAgentFundamentals lastModelState: ConstantState.type, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = throw new InvalidRequestException( "Request to calculate power with secondary data cannot be processed in a fixed feed in agent." ) @@ -341,13 +341,13 @@ protected trait FixedFeedInAgentFundamentals * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, @@ -370,7 +370,7 @@ protected trait FixedFeedInAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new FixedFeedInResult( dateTime, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgent.scala index 0be0c2877b..7861575ef5 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.hp import edu.ie3.datamodel.models.input.system.HpInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.statedata.ParticipantStateData @@ -24,7 +24,7 @@ object HpAgent { initStateData: ParticipantInitializeStateData[ HpInput, HpRuntimeConfig, - ApparentPowerAndHeat, + ComplexPowerAndHeat, ], listener: Iterable[ActorRef], ): Props = @@ -46,15 +46,15 @@ class HpAgent( initStateData: ParticipantInitializeStateData[ HpInput, HpRuntimeConfig, - ApparentPowerAndHeat, + ComplexPowerAndHeat, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, ParticipantStateData[ - ApparentPowerAndHeat + ComplexPowerAndHeat ], HpInput, HpRuntimeConfig, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala index 58b9c402b1..6a9d80cf58 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/hp/HpAgentFundamentals.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.hp.HpAgent.neededServices import edu.ie3.simona.agent.participant.statedata.BaseStateData.{ @@ -64,18 +64,18 @@ import scala.reflect.{ClassTag, classTag} trait HpAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, - ParticipantStateData[ApparentPowerAndHeat], + ParticipantStateData[ComplexPowerAndHeat], HpInput, HpRuntimeConfig, HpModel, ] { this: HpAgent => - override protected val pdClassTag: ClassTag[ApparentPowerAndHeat] = - classTag[ApparentPowerAndHeat] - override val alternativeResult: ApparentPowerAndHeat = ApparentPowerAndHeat( + override protected val pdClassTag: ClassTag[ComplexPowerAndHeat] = + classTag[ComplexPowerAndHeat] + override val alternativeResult: ComplexPowerAndHeat = ComplexPowerAndHeat( zeroMW, zeroMVAr, zeroMW, @@ -88,14 +88,14 @@ trait HpAgentFundamentals override val calculateModelPowerFunc: ( Long, BaseStateData.ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, ], HpState, Dimensionless, - ) => ApparentPowerAndHeat = + ) => ComplexPowerAndHeat = (_, _, _, _) => throw new InvalidRequestException( "Heat pump model cannot be run without secondary data." @@ -103,7 +103,7 @@ trait HpAgentFundamentals override protected def createInitialState( baseStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -139,7 +139,7 @@ trait HpAgentFundamentals def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -149,7 +149,7 @@ trait HpAgentFundamentals setPower: squants.Power, ): ( HpState, - AccompaniedSimulationResult[ApparentPowerAndHeat], + AccompaniedSimulationResult[ComplexPowerAndHeat], FlexChangeIndicator, ) = { /* Determine needed information */ @@ -220,7 +220,7 @@ trait HpAgentFundamentals */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -228,7 +228,7 @@ trait HpAgentFundamentals lastModelState: HpState, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPowerAndHeat]] = { + ): FSM.State[AgentState, ParticipantStateData[ComplexPowerAndHeat]] = { /* Determine needed information */ val voltage = @@ -331,7 +331,7 @@ trait HpAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): BaseStateData.ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -360,7 +360,7 @@ trait HpAgentFundamentals ) ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -399,7 +399,7 @@ trait HpAgentFundamentals override protected def createCalcRelevantData( baseStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpRelevantData, HpState, HpModel, @@ -480,13 +480,13 @@ trait HpAgentFundamentals * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPowerAndHeat], + tickToResults: Map[Long, ComplexPowerAndHeat], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ], - ): ApparentPowerAndHeat = + ): ComplexPowerAndHeat = ParticipantAgentFundamentals.averageApparentPowerAndHeat( tickToResults, windowStart, @@ -509,7 +509,7 @@ trait HpAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPowerAndHeat, + result: ComplexPowerAndHeat, ): SystemParticipantResult = new HpResult( dateTime, uuid, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgent.scala index 338547efbc..67607acbf1 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.load import edu.ie3.datamodel.models.input.system.LoadInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.load.LoadAgentFundamentals.{ FixedLoadAgentFundamentals, ProfileLoadAgentFundamentals, @@ -36,7 +36,7 @@ object LoadAgent { initStateData: ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -58,7 +58,7 @@ object LoadAgent { initStateData: ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends LoadAgent[ @@ -72,7 +72,7 @@ object LoadAgent { initStateData: ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends LoadAgent[ @@ -86,7 +86,7 @@ object LoadAgent { initStateData: ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends LoadAgent[ @@ -108,14 +108,14 @@ abstract class LoadAgent[LD <: LoadRelevantData, LM <: LoadModel[LD]]( initStateData: ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, LD, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], LoadInput, LoadRuntimeConfig, LM, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgentFundamentals.scala index 71c48b340d..e01c463115 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/load/LoadAgentFundamentals.scala @@ -16,7 +16,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.Data.SecondaryData @@ -76,18 +76,18 @@ import scala.reflect.{ClassTag, classTag} protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ LD ]] extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, LD, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], LoadInput, LoadRuntimeConfig, LM, ] { this: LoadAgent[LD, LM] => - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] - override val alternativeResult: ApparentPower = ZERO_POWER + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] + override val alternativeResult: ComplexPower = ZERO_POWER /** Determines the needed base state data in dependence of the foreseen * simulation mode of the agent. @@ -124,7 +124,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, LD, ConstantState.type, LM, @@ -174,7 +174,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ SortedSet.empty[Long] } - ParticipantModelBaseStateData[ApparentPower, LD, ConstantState.type, LM]( + ParticipantModelBaseStateData[ComplexPower, LD, ConstantState.type, LM]( simulationStartDate, simulationEndDate, model, @@ -231,7 +231,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, LD, ConstantState.type, LM, @@ -255,7 +255,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, LD, ConstantState.type, LM, @@ -265,7 +265,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ setPower: squants.Power, ): ( ConstantState.type, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { /* Calculate result */ @@ -276,7 +276,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ voltage, ) val result = AccompaniedSimulationResult( - ApparentPower(setPower, reactivePower), + ComplexPower(setPower, reactivePower), Seq.empty[ResultEntity], ) @@ -309,7 +309,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, LD, ConstantState.type, LM, @@ -317,7 +317,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ lastModelState: ConstantState.type, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = throw new InconsistentStateException( s"Load model is not able to calculate power with secondary data." ) @@ -336,13 +336,13 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, @@ -365,7 +365,7 @@ protected trait LoadAgentFundamentals[LD <: LoadRelevantData, LM <: LoadModel[ override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new LoadResult( dateTime, @@ -406,7 +406,7 @@ object LoadAgentFundamentals { override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedLoadRelevantData.type, ConstantState.type, FixedLoadModel, @@ -422,17 +422,17 @@ object LoadAgentFundamentals { override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedLoadRelevantData.type, ConstantState.type, FixedLoadModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = ( + ) => ComplexPower = ( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedLoadRelevantData.type, ConstantState.type, FixedLoadModel, @@ -470,7 +470,7 @@ object LoadAgentFundamentals { override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, ProfileRelevantData, ConstantState.type, ProfileLoadModel, @@ -488,14 +488,14 @@ object LoadAgentFundamentals { override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, ProfileRelevantData, ConstantState.type, ProfileLoadModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = (tick, baseStateData, _, voltage) => { + ) => ComplexPower = (tick, baseStateData, _, voltage) => { val profileRelevantData = createCalcRelevantData(baseStateData, tick) @@ -530,7 +530,7 @@ object LoadAgentFundamentals { override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, RandomRelevantData, ConstantState.type, RandomLoadModel, @@ -548,14 +548,14 @@ object LoadAgentFundamentals { override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, RandomRelevantData, ConstantState.type, RandomLoadModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = (tick, baseStateData, _, voltage) => { + ) => ComplexPower = (tick, baseStateData, _, voltage) => { val profileRelevantData = createCalcRelevantData(baseStateData, tick) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgent.scala index bf6f5db3b7..a46f7478a8 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.pv import edu.ie3.datamodel.models.input.system.PvInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.statedata.ParticipantStateData @@ -25,7 +25,7 @@ object PvAgent { initStateData: ParticipantInitializeStateData[ PvInput, PvRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -54,14 +54,14 @@ class PvAgent( initStateData: ParticipantInitializeStateData[ PvInput, PvRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], PvInput, PvRuntimeConfig, PvModel, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgentFundamentals.scala index 52f0a76e24..b7107d6233 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/pv/PvAgentFundamentals.scala @@ -16,7 +16,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.Data.SecondaryData @@ -67,18 +67,18 @@ import scala.reflect.{ClassTag, classTag} protected trait PvAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], PvInput, PvRuntimeConfig, PvModel, ] { this: PvAgent => - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] - override val alternativeResult: ApparentPower = ZERO_POWER + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] + override val alternativeResult: ComplexPower = ZERO_POWER /** Determines the needed base state data in dependence of the foreseen * simulation mode of the agent. @@ -115,7 +115,7 @@ protected trait PvAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -136,7 +136,7 @@ protected trait PvAgentFundamentals ) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -181,7 +181,7 @@ protected trait PvAgentFundamentals override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -191,7 +191,7 @@ protected trait PvAgentFundamentals override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -263,7 +263,7 @@ protected trait PvAgentFundamentals override def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -273,7 +273,7 @@ protected trait PvAgentFundamentals setPower: squants.Power, ): ( ConstantState.type, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { /* Calculate result */ @@ -284,7 +284,7 @@ protected trait PvAgentFundamentals voltage, ) val result = AccompaniedSimulationResult( - ApparentPower(setPower, reactivePower), + ComplexPower(setPower, reactivePower), Seq.empty[ResultEntity], ) @@ -301,14 +301,14 @@ protected trait PvAgentFundamentals override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = + ) => ComplexPower = (_, _, _, _) => throw new InvalidRequestException( "Pv model cannot be run without secondary data." @@ -337,7 +337,7 @@ protected trait PvAgentFundamentals */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, PvRelevantData, ConstantState.type, PvModel, @@ -345,7 +345,7 @@ protected trait PvAgentFundamentals lastModelState: ConstantState.type, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = { + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = { val voltage = getAndCheckNodalVoltage(baseStateData, currentTick) @@ -384,13 +384,13 @@ protected trait PvAgentFundamentals * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, @@ -413,7 +413,7 @@ protected trait PvAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new PvResult( dateTime, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/statedata/BaseStateData.scala b/src/main/scala/edu/ie3/simona/agent/participant/statedata/BaseStateData.scala index 9627ee1578..b6ebd99841 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/statedata/BaseStateData.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/statedata/BaseStateData.scala @@ -68,8 +68,9 @@ trait BaseStateData[+PD <: PrimaryDataWithApparentPower[PD]] val resultValueStore: ValueStore[PD] /** A store, holding information of the lastly requested and provided results. - * The request from the grid always targets at [[ApparentPower]], but for the - * sake of traceability, the whole averaged result ist stored + * The request from the grid always targets at + * [[edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower]], + * but for the sake of traceability, the whole averaged result ist stored */ val requestValueStore: ValueStore[PD] diff --git a/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgent.scala index f38328ea3b..84eda8c92b 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.storage import edu.ie3.datamodel.models.input.system.StorageInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.ParticipantStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.ParticipantInitializeStateData import edu.ie3.simona.config.SimonaConfig.StorageRuntimeConfig @@ -25,7 +25,7 @@ object StorageAgent { initStateData: ParticipantInitializeStateData[ StorageInput, StorageRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -50,14 +50,14 @@ class StorageAgent( initStateData: ParticipantInitializeStateData[ StorageInput, StorageRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], StorageInput, StorageRuntimeConfig, StorageModel, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgentFundamentals.scala index 574cbbfbf7..bfa312e68a 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/storage/StorageAgentFundamentals.scala @@ -17,7 +17,7 @@ import edu.ie3.simona.agent.participant.ParticipantAgent.getAndCheckNodalVoltage import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService @@ -65,19 +65,19 @@ import scala.reflect.{ClassTag, classTag} trait StorageAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], StorageInput, StorageRuntimeConfig, StorageModel, ] { this: StorageAgent => - override val alternativeResult: ApparentPower = ZERO_POWER + override val alternativeResult: ComplexPower = ZERO_POWER - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] /** Abstract definition, individual implementations found in individual agent * fundamental classes @@ -93,7 +93,7 @@ trait StorageAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -113,7 +113,7 @@ trait StorageAgentFundamentals ) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -162,7 +162,7 @@ trait StorageAgentFundamentals override protected def createInitialState( baseStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -175,7 +175,7 @@ trait StorageAgentFundamentals override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -187,14 +187,14 @@ trait StorageAgentFundamentals override val calculateModelPowerFunc: ( Long, BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, ], StorageState, Dimensionless, - ) => ApparentPower = + ) => ComplexPower = (_, _, _, _) => throw new InvalidRequestException( "Storage model cannot be run without secondary data." @@ -202,7 +202,7 @@ trait StorageAgentFundamentals override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -216,13 +216,13 @@ trait StorageAgentFundamentals ) override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ], - ): ApparentPower = ParticipantAgentFundamentals.averageApparentPower( + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, windowEnd, @@ -233,7 +233,7 @@ trait StorageAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new StorageResult( dateTime, uuid, @@ -256,15 +256,15 @@ trait StorageAgentFundamentals */ override protected def handleCalculatedResult( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, ], - result: AccompaniedSimulationResult[ApparentPower], + result: AccompaniedSimulationResult[ComplexPower], currentTick: Long, ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -325,7 +325,7 @@ trait StorageAgentFundamentals override def handleControlledPowerChange( tick: Long, baseStateData: BaseStateData.ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, StorageRelevantData, StorageState, StorageModel, @@ -335,7 +335,7 @@ trait StorageAgentFundamentals setPower: Power, ): ( StorageState, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { val (updatedState, flexChangeIndicator) = @@ -350,9 +350,9 @@ trait StorageAgentFundamentals voltage, ) - val apparentPower = ApparentPower(updatedSetPower, reactivePower) + val apparentPower = ComplexPower(updatedSetPower, reactivePower) - val result: AccompaniedSimulationResult[ApparentPower] = + val result: AccompaniedSimulationResult[ComplexPower] = AccompaniedSimulationResult(apparentPower, Seq.empty[ResultEntity]) (updatedState, result, flexChangeIndicator) diff --git a/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgent.scala b/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgent.scala index 957d48a28f..f8858ded76 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgent.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgent.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.agent.participant.wec import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.simona.agent.participant.ParticipantAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.statedata.ParticipantStateData @@ -25,7 +25,7 @@ object WecAgent { initStateData: ParticipantInitializeStateData[ WecInput, WecRuntimeConfig, - ApparentPower, + ComplexPower, ], listener: Iterable[ActorRef], ): Props = @@ -54,14 +54,14 @@ class WecAgent( initStateData: ParticipantInitializeStateData[ WecInput, WecRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], WecInput, WecRuntimeConfig, WecModel, diff --git a/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgentFundamentals.scala b/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgentFundamentals.scala index 5b43263925..1cbe2e7cf3 100644 --- a/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgentFundamentals.scala +++ b/src/main/scala/edu/ie3/simona/agent/participant/wec/WecAgentFundamentals.scala @@ -16,7 +16,7 @@ import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgent._ import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.Data.SecondaryData @@ -62,18 +62,18 @@ import scala.reflect.{ClassTag, classTag} protected trait WecAgentFundamentals extends ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], WecInput, WecRuntimeConfig, WecModel, ] { this: WecAgent => - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] - override val alternativeResult: ApparentPower = ZERO_POWER + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] + override val alternativeResult: ComplexPower = ZERO_POWER /** Determines the needed base state data in dependence of the foreseen * simulation mode of the agent. @@ -110,7 +110,7 @@ protected trait WecAgentFundamentals outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -131,7 +131,7 @@ protected trait WecAgentFundamentals ) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -176,7 +176,7 @@ protected trait WecAgentFundamentals override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -186,7 +186,7 @@ protected trait WecAgentFundamentals override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -239,7 +239,7 @@ protected trait WecAgentFundamentals def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -249,7 +249,7 @@ protected trait WecAgentFundamentals setPower: squants.Power, ): ( ConstantState.type, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = { /* Calculate result */ @@ -260,7 +260,7 @@ protected trait WecAgentFundamentals voltage, ) val result = AccompaniedSimulationResult( - ApparentPower(setPower, reactivePower), + ComplexPower(setPower, reactivePower), Seq.empty[ResultEntity], ) @@ -277,18 +277,18 @@ protected trait WecAgentFundamentals override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, ], ConstantState.type, Dimensionless, - ) => ApparentPower = + ) => ComplexPower = ( _: Long, _: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -323,7 +323,7 @@ protected trait WecAgentFundamentals */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -331,7 +331,7 @@ protected trait WecAgentFundamentals lastModelState: ConstantState.type, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = { + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = { val voltage = getAndCheckNodalVoltage(baseStateData, currentTick) @@ -370,13 +370,13 @@ protected trait WecAgentFundamentals * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ Power => ReactivePower ] = None, - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, @@ -399,7 +399,7 @@ protected trait WecAgentFundamentals override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new WecResult( dateTime, diff --git a/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatParticipant.scala b/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatParticipant.scala index eb51174cb5..b9476aae14 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatParticipant.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatParticipant.scala @@ -6,7 +6,7 @@ package edu.ie3.simona.model.participant -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.util.scala.quantities.DefaultQuantities._ import squants.{Dimensionless, Power} @@ -14,13 +14,13 @@ trait ApparentPowerAndHeatParticipant[ CD <: CalcRelevantData, MS <: ModelState, ] { - this: SystemParticipant[CD, ApparentPowerAndHeat, MS] => + this: SystemParticipant[CD, ComplexPowerAndHeat, MS] => override def calculatePower( tick: Long, voltage: Dimensionless, modelState: MS, data: CD, - ): ApparentPowerAndHeat = { + ): ComplexPowerAndHeat = { val apparentPower = calculateApparentPower(tick, voltage, modelState, data) val heat = @@ -29,7 +29,7 @@ trait ApparentPowerAndHeatParticipant[ else zeroMW - ApparentPowerAndHeat(apparentPower.p, apparentPower.q, heat) + ComplexPowerAndHeat(apparentPower.p, apparentPower.q, heat) } /** Calculate the heat of the asset. As for electrical assets, positive values diff --git a/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerParticipant.scala b/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerParticipant.scala index d1d71a58ac..e630c7fb5c 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerParticipant.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/ApparentPowerParticipant.scala @@ -6,16 +6,16 @@ package edu.ie3.simona.model.participant -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import squants.Dimensionless trait ApparentPowerParticipant[CD <: CalcRelevantData, MS <: ModelState] { - this: SystemParticipant[CD, ApparentPower, MS] => + this: SystemParticipant[CD, ComplexPower, MS] => override def calculatePower( tick: Long, voltage: Dimensionless, modelState: MS, data: CD, - ): ApparentPower = + ): ComplexPower = calculateApparentPower(tick, voltage, modelState, data) } diff --git a/src/main/scala/edu/ie3/simona/model/participant/BMModel.scala b/src/main/scala/edu/ie3/simona/model/participant/BMModel.scala index e1c9ed715a..6f93742eeb 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/BMModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/BMModel.scala @@ -6,7 +6,7 @@ package edu.ie3.simona.model.participant -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.participant.BMModel.BMCalcRelevantData import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.control.QControl @@ -14,7 +14,7 @@ import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.ProvideFlexOptio import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ -import edu.ie3.util.scala.quantities.EnergyPrice +import edu.ie3.util.scala.quantities.{ApparentPower, EnergyPrice} import squants.energy.Megawatts import squants.{Dimensionless, Money, Power, Temperature} @@ -29,8 +29,8 @@ final case class BMModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, - cosPhi: Double, + sRated: ApparentPower, + cosPhiRated: Double, private val node: String, private val isCostControlled: Boolean, private val opex: Money, @@ -38,7 +38,7 @@ final case class BMModel( private val loadGradient: Double, ) extends SystemParticipant[ BMCalcRelevantData, - ApparentPower, + ComplexPower, ConstantState.type, ]( uuid, @@ -46,7 +46,7 @@ final case class BMModel( operationInterval, qControl, sRated, - cosPhi, + cosPhiRated, ) with ApparentPowerParticipant[BMCalcRelevantData, ConstantState.type] { @@ -59,7 +59,7 @@ final case class BMModel( voltage: Dimensionless, modelState: ConstantState.type, data: BMCalcRelevantData, - ): ApparentPower = { + ): ComplexPower = { val result = super.calculatePower(tick, voltage, modelState, data) _lastPower = Some(result.p) @@ -195,9 +195,9 @@ final case class BMModel( isCostControlled && avgOpex.value.doubleValue() < feedInTariff.value .doubleValue() ) - sRated * cosPhi * (-1) + sRated.toActivePower(cosPhiRated) * -1 else - sRated * usage * eff * cosPhi * (-1) + sRated.toActivePower(cosPhiRated) * usage * eff * -1 } /** Applies the load gradient to the electrical output @@ -212,12 +212,12 @@ final case class BMModel( _lastPower match { case None => pEl case Some(lastPowerVal) => - val pElDeltaMaxAbs = sRated * cosPhi * loadGradient + val pElDeltaMaxAbs = sRated.toActivePower(cosPhiRated) * loadGradient pEl - lastPowerVal match { case pElDelta if pElDelta > pElDeltaMaxAbs => lastPowerVal + pElDeltaMaxAbs - case pElDelta if pElDelta < (pElDeltaMaxAbs * (-1)) => + case pElDelta if pElDelta < (pElDeltaMaxAbs * -1) => lastPowerVal - pElDeltaMaxAbs case _ => pEl diff --git a/src/main/scala/edu/ie3/simona/model/participant/ChpModel.scala b/src/main/scala/edu/ie3/simona/model/participant/ChpModel.scala index c0336b0ddc..e48909bd91 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/ChpModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/ChpModel.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.model.participant import edu.ie3.datamodel.models.input.system.ChpInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.ChpModel._ import edu.ie3.simona.model.participant.ModelState.ConstantState @@ -17,8 +17,12 @@ import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.ProvideFlexOptio import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval -import edu.ie3.util.scala.quantities.DefaultQuantities import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{ + ApparentPower, + DefaultQuantities, + Kilovoltamperes, +} import squants.energy.Kilowatts import squants.{Energy, Power, Seconds, Time} @@ -50,11 +54,11 @@ final case class ChpModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, pThermal: Power, storage: ThermalStorage with MutableStorage, -) extends SystemParticipant[ChpRelevantData, ApparentPower, ConstantState.type]( +) extends SystemParticipant[ChpRelevantData, ComplexPower, ConstantState.type]( uuid, id, operationInterval, @@ -64,7 +68,7 @@ final case class ChpModel( ) with ApparentPowerParticipant[ChpRelevantData, ConstantState.type] { - val pRated: Power = sRated * cosPhiRated + val pRated: Power = sRated.toActivePower(cosPhiRated) /** As this is a state-full model (with respect to the current operation * condition and its thermal storage), the power calculation operates on the @@ -387,9 +391,9 @@ object ChpModel { scaledInput.getId, operationInterval, qControl, - Kilowatts( + Kilovoltamperes( scaledInput.getType.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/FixedFeedInModel.scala b/src/main/scala/edu/ie3/simona/model/participant/FixedFeedInModel.scala index d5cd82c731..0501fcb025 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/FixedFeedInModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/FixedFeedInModel.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.model.participant import com.typesafe.scalalogging.LazyLogging import edu.ie3.datamodel.models.input.system.FixedFeedInInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.config.SimonaConfig import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.CalcRelevantData.FixedRelevantData @@ -18,8 +18,8 @@ import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.ProvideFlexOptio import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.Power -import squants.energy.Kilowatts import java.time.ZonedDateTime import java.util.UUID @@ -44,11 +44,11 @@ final case class FixedFeedInModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, ) extends SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ]( uuid, @@ -71,8 +71,7 @@ final case class FixedFeedInModel( override def calculateActivePower( modelState: ConstantState.type, data: FixedRelevantData.type = FixedRelevantData, - ): Power = - sRated * (-1) * cosPhiRated + ): Power = sRated.toActivePower(cosPhiRated) * -1 override def determineFlexOptions( data: FixedRelevantData.type, @@ -115,9 +114,9 @@ object FixedFeedInModel extends LazyLogging { scaledInput.getId, operationInterval, QControl.apply(scaledInput.getqCharacteristics), - Kilowatts( + Kilovoltamperes( scaledInput.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/HpModel.scala b/src/main/scala/edu/ie3/simona/model/participant/HpModel.scala index 1bd5287c75..98d18d9ce3 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/HpModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/HpModel.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.model.participant import edu.ie3.datamodel.models.input.system.HpInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.HpModel.{HpRelevantData, HpState} import edu.ie3.simona.model.participant.control.QControl @@ -21,6 +21,7 @@ import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMin import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.energy.{KilowattHours, Kilowatts} import squants.{Energy, Power, Temperature} @@ -55,13 +56,13 @@ final case class HpModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, pThermal: Power, thermalGrid: ThermalGrid, ) extends SystemParticipant[ HpRelevantData, - ApparentPowerAndHeat, + ComplexPowerAndHeat, HpState, ]( uuid, @@ -73,8 +74,7 @@ final case class HpModel( ) with ApparentPowerAndHeatParticipant[HpRelevantData, HpState] { - private val pRated: Power = - sRated * cosPhiRated + private val pRated: Power = sRated.toActivePower(cosPhiRated) /** As this is a state-full model (with respect to the current operation * condition and inner temperature), the power calculation operates on the @@ -312,7 +312,7 @@ final case class HpModel( updatedHpState.activePower val upperBoundary = if (canOperate) - sRated * cosPhiRated + sRated.toActivePower(cosPhiRated) else zeroKW @@ -347,7 +347,7 @@ final case class HpModel( setPower: Power, ): (HpState, FlexChangeIndicator) = { /* If the setpoint value is above 50 % of the electrical power, turn on the heat pump otherwise turn it off */ - val turnOn = setPower > (sRated * cosPhiRated * 0.5) + val turnOn = setPower > (sRated.toActivePower(cosPhiRated) * 0.5) val updatedHpState = calcState( lastState, @@ -393,9 +393,9 @@ object HpModel { scaledInput.getId, operationInterval, qControl, - Kilowatts( + Kilovoltamperes( scaledInput.getType.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), @@ -496,9 +496,9 @@ object HpModel { scaledInput.getId, operationInterval, qControl, - Kilowatts( + Kilovoltamperes( scaledInput.getType.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/PvModel.scala b/src/main/scala/edu/ie3/simona/model/participant/PvModel.scala index 78508c91d5..5d83478da0 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/PvModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/PvModel.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.model.participant import edu.ie3.datamodel.models.input.system.PvInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.PvModel.PvRelevantData @@ -18,7 +18,6 @@ import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities._ import squants._ -import squants.energy.Kilowatts import squants.space.{Degrees, SquareMeters} import squants.time.Minutes import tech.units.indriya.unit.Units._ @@ -33,7 +32,7 @@ final case class PvModel private ( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, private val lat: Angle, private val lon: Angle, @@ -42,7 +41,7 @@ final case class PvModel private ( private val alphaE: Angle, private val gammaE: Angle, private val moduleSurface: Area = SquareMeters(1d), -) extends SystemParticipant[PvRelevantData, ApparentPower, ConstantState.type]( +) extends SystemParticipant[PvRelevantData, ComplexPower, ConstantState.type]( uuid, id, operationInterval, @@ -55,15 +54,16 @@ final case class PvModel private ( /** Override sMax as the power output of a pv unit could become easily up to * 10% higher than the sRated value found in the technical sheets */ - override val sMax: Power = sRated * 1.1 + override val sMax: ApparentPower = sRated * 1.1 /** Permissible maximum active power feed in (therefore negative) */ - protected val pMax: Power = sMax * cosPhiRated * -1d + protected val pMax: Power = sMax.toActivePower(cosPhiRated) * -1d /** Reference yield at standard testing conditions (STC) */ private val yieldSTC = WattsPerSquareMeter(1000d) - private val activationThreshold = sRated * cosPhiRated * 0.001 * -1d + private val activationThreshold = + sRated.toActivePower(cosPhiRated) * 0.001 * -1d /** Calculate the active power behaviour of the model * @@ -241,7 +241,7 @@ final case class PvModel private ( /** Calculates the sunrise hour angle omegaSR given omegaSS. */ private val calcSunriseAngleOmegaSR = - (omegaSS: Angle) => omegaSS * (-1) + (omegaSS: Angle) => omegaSS * -1 /** Calculates the solar altitude angle alphaS which represents the angle * between the horizontal and the line to the sun, that is, the complement of @@ -691,9 +691,8 @@ final case class PvModel private ( eTotalInWhPerSM * moduleSurface.toSquareMeters * etaConv.toEach * (genCorr * tempCorr) /* Calculate the foreseen active power output without boundary condition adaptions */ - val proposal = sRated * (-1) * ( - actYield / irradiationSTC - ) * cosPhiRated + val proposal = + sRated.toActivePower(cosPhiRated) * -1 * (actYield / irradiationSTC) /* Do sanity check, if the proposed feed in is above the estimated maximum to be apparent active power of the plant */ if (proposal < pMax) @@ -771,9 +770,9 @@ object PvModel { scaledInput.getId, operationInterval, QControl(scaledInput.getqCharacteristics), - Kilowatts( + Kilovoltamperes( scaledInput.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/StorageModel.scala b/src/main/scala/edu/ie3/simona/model/participant/StorageModel.scala index 82744e7824..0c730a962b 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/StorageModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/StorageModel.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.model.participant import edu.ie3.datamodel.models.input.system.StorageInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.StorageModel.{ RefTargetSocParams, @@ -20,6 +20,7 @@ import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMin import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.energy.{KilowattHours, Kilowatts} import squants.{Dimensionless, Each, Energy, Power, Seconds} @@ -31,14 +32,14 @@ final case class StorageModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, eStorage: Energy, pMax: Power, eta: Dimensionless, initialSoc: Double, targetSoc: Option[Double], -) extends SystemParticipant[StorageRelevantData, ApparentPower, StorageState]( +) extends SystemParticipant[StorageRelevantData, ComplexPower, StorageState]( uuid, id, operationInterval, @@ -103,7 +104,7 @@ final case class StorageModel( voltage: Dimensionless, modelState: StorageState, data: StorageRelevantData, - ): ApparentPower = + ): ComplexPower = throw new NotImplementedError( "Storage model cannot calculate power without flexibility control." ) @@ -354,9 +355,9 @@ object StorageModel { scaledInput.getId, operationInterval, QControl.apply(scaledInput.getqCharacteristics), - Kilowatts( + Kilovoltamperes( scaledInput.getType.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/SystemParticipant.scala b/src/main/scala/edu/ie3/simona/model/participant/SystemParticipant.scala index f245923356..1aa4377f8e 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/SystemParticipant.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/SystemParticipant.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.model.participant import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, PrimaryDataWithApparentPower, } import edu.ie3.simona.model.SystemComponent @@ -15,13 +15,9 @@ import edu.ie3.simona.model.participant.control.QControl import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.ProvideFlexOptions import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ -import edu.ie3.util.scala.quantities.{ - DefaultQuantities, - Megavars, - ReactivePower, -} +import edu.ie3.util.scala.quantities._ import squants.Dimensionless -import squants.energy.{Kilowatts, Power} +import squants.energy.Power import java.util.UUID @@ -55,7 +51,7 @@ abstract class SystemParticipant[ id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, ) extends SystemComponent(uuid, id, operationInterval) { @@ -64,7 +60,7 @@ abstract class SystemParticipant[ * overwritten if the system participant's apparent power can be higher than * sRated. */ - protected val sMax: Power = sRated + protected val sMax: ApparentPower = sRated /** Calculate the power behaviour based on the given data. * @@ -102,17 +98,17 @@ abstract class SystemParticipant[ voltage: Dimensionless, modelState: MS, data: CD, - ): ApparentPower = { + ): ComplexPower = { if (isInOperation(tick)) { val activePower = calculateActivePower(modelState, data) val reactivePower = calculateReactivePower(activePower, voltage) - ApparentPower( + ComplexPower( activePower, reactivePower, ) } else { - ApparentPower( + ComplexPower( DefaultQuantities.zeroMW, DefaultQuantities.zeroMVAr, ) @@ -212,7 +208,7 @@ abstract class SystemParticipant[ reactivePower: ReactivePower, ): ReactivePower = { { - val apparentPower: Power = Kilowatts( + val apparentPower: ApparentPower = Kilovoltamperes( Math .sqrt( Math.pow(activePower.toKilowatts, 2) + Math @@ -232,8 +228,8 @@ abstract class SystemParticipant[ s"in correspondence to the existing active power $activePower." ) - val powerSquaredDifference = Math.pow(sMax.toMegawatts, 2) - - Math.pow(activePower.toMegawatts, 2) + val powerSquaredDifference = Math.pow(sMax.toMegavoltamperes, 2) - Math + .pow(activePower.toMegawatts, 2) if (powerSquaredDifference < 0) { logger.warn( diff --git a/src/main/scala/edu/ie3/simona/model/participant/WecModel.scala b/src/main/scala/edu/ie3/simona/model/participant/WecModel.scala index 4ecc4e5b5b..50f26708e7 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/WecModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/WecModel.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.model.participant import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.WecModel.{ @@ -23,8 +23,9 @@ import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMin import edu.ie3.util.quantities.PowerSystemUnits._ import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants._ -import squants.energy.{Kilowatts, Watts} +import squants.energy.Watts import squants.mass.{Kilograms, KilogramsPerCubicMeter} import squants.motion.{MetersPerSecond, Pressure} import squants.space.SquareMeters @@ -60,11 +61,11 @@ final case class WecModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, rotorArea: Area, betzCurve: WecCharacteristic, -) extends SystemParticipant[WecRelevantData, ApparentPower, ConstantState.type]( +) extends SystemParticipant[WecRelevantData, ComplexPower, ConstantState.type]( uuid, id, operationInterval, @@ -95,7 +96,7 @@ final case class WecModel( wecData: WecRelevantData, ): Power = { val activePower = determinePower(wecData) - val pMax = sMax * cosPhiRated + val pMax = sMax.toActivePower(cosPhiRated) (if (activePower > pMax) { logger.warn( @@ -274,8 +275,8 @@ object WecModel { scaledInput.getId, operationInterval, QControl(scaledInput.getqCharacteristics), - Kilowatts( - scaledInput.getType.getsRated.to(KILOWATT).getValue.doubleValue + Kilovoltamperes( + scaledInput.getType.getsRated.to(KILOVOLTAMPERE).getValue.doubleValue ), scaledInput.getType.getCosPhiRated, SquareMeters( diff --git a/src/main/scala/edu/ie3/simona/model/participant/control/QControl.scala b/src/main/scala/edu/ie3/simona/model/participant/control/QControl.scala index 391d4bca7c..7c998cbc4e 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/control/QControl.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/control/QControl.scala @@ -13,7 +13,7 @@ import edu.ie3.simona.model.system.Characteristic import edu.ie3.simona.model.system.Characteristic.XYPair import edu.ie3.util.quantities.PowerSystemUnits.PU import edu.ie3.util.scala.quantities.DefaultQuantities._ -import edu.ie3.util.scala.quantities.{Megavars, ReactivePower} +import edu.ie3.util.scala.quantities.{ApparentPower, Megavars, ReactivePower} import squants.{Dimensionless, Each, Power} import tech.units.indriya.AbstractUnit @@ -44,7 +44,7 @@ sealed trait QControl { * The function */ def activeToReactivePowerFunc( - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, nodalVoltage: Dimensionless, ): Power => ReactivePower @@ -117,7 +117,7 @@ object QControl { * The function */ override def activeToReactivePowerFunc( - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, nodalVoltage: Dimensionless, ): Power => ReactivePower = { activePower: Power => @@ -169,19 +169,19 @@ object QControl { * The function */ override def activeToReactivePowerFunc( - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, nodalVoltage: Dimensionless, ): Power => ReactivePower = { activePower: Power => + // Q = sqrt(S^2 - P^2) val qMaxFromP = Megavars( - sqrt( - pow(sRated.toMegawatts, 2) - - pow(activePower.toMegawatts, 2) - ) + sqrt(pow(sRated.toMegavoltamperes, 2) - pow(activePower.toMegawatts, 2)) ) - val qFromCharacteristic = - q(nodalVoltage, Megavars((sRated * sin(acos(cosPhiRated))).toMegawatts)) + val qFromCharacteristic = q( + nodalVoltage, + sRated.toReactivePower(cosPhiRated), + ) qMaxPossible(qMaxFromP, qFromCharacteristic) } @@ -244,13 +244,13 @@ object QControl { * The function */ override def activeToReactivePowerFunc( - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, nodalVoltage: Dimensionless, ): Power => ReactivePower = { activePower: Power => /* cosphi( P / P_N ) = cosphi( P / (S_N * cosphi_rated) ) */ val pInPu = - activePower / (sRated * cosPhiRated) + activePower / sRated.toActivePower(cosPhiRated) val instantCosPhi = cosPhi(Each(pInPu)) _cosPhiMultiplication(instantCosPhi.value.doubleValue, activePower) } diff --git a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala index f928af2fcf..7883557dbe 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvModelWrapper.scala @@ -9,7 +9,8 @@ package edu.ie3.simona.model.participant.evcs import edu.ie3.simona.api.data.ev.model.EvModel import edu.ie3.util.quantities.PowerSystemUnits._ import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble -import squants.energy.{KilowattHours, Kilowatts} +import squants.Power +import squants.energy.{Energy, KilowattHours, Kilowatts} import java.util.UUID @@ -26,19 +27,23 @@ import java.util.UUID * The wrapped [[EvModel]] */ final case class EvModelWrapper( - storedEnergy: squants.Energy, + storedEnergy: Energy, private val original: EvModel, ) { def uuid: UUID = original.getUuid def id: String = original.getId - lazy val sRatedAc: squants.Power = - Kilowatts(original.getSRatedAC.to(KILOWATT).getValue.doubleValue) - lazy val sRatedDc: squants.Power = - Kilowatts(original.getSRatedDC.to(KILOWATT).getValue.doubleValue) - lazy val eStorage: squants.Energy = KilowattHours( + + lazy val pRatedAc: Power = Kilowatts( + original.getSRatedAC.to(KILOWATT).getValue.doubleValue + ) + lazy val pRatedDc: Power = Kilowatts( + original.getSRatedDC.to(KILOWATT).getValue.doubleValue + ) + lazy val eStorage: Energy = KilowattHours( original.getEStorage.to(KILOWATTHOUR).getValue.doubleValue ) + def departureTick: Long = original.getDepartureTick /** Unwrapping the original [[EvModel]] while also updating the diff --git a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvcsModel.scala b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvcsModel.scala index 1d9325eccf..30b3f0a249 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/evcs/EvcsModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/evcs/EvcsModel.scala @@ -11,7 +11,7 @@ import edu.ie3.datamodel.models.ElectricCurrentType import edu.ie3.datamodel.models.input.system.EvcsInput import edu.ie3.datamodel.models.input.system.`type`.evcslocation.EvcsLocationType import edu.ie3.datamodel.models.result.system.{EvResult, EvcsResult} -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.SystemComponent import edu.ie3.simona.model.participant.control.QControl import edu.ie3.simona.model.participant.evcs.EvcsModel._ @@ -32,6 +32,7 @@ import edu.ie3.util.quantities.PowerSystemUnits._ import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble import edu.ie3.util.scala.OperationInterval import edu.ie3.util.scala.quantities.DefaultQuantities._ +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.energy.Kilowatts import squants.time.Seconds import squants.{Dimensionless, Energy, Power} @@ -73,7 +74,7 @@ final case class EvcsModel( operationInterval: OperationInterval, simulationStartDate: ZonedDateTime, qControl: QControl, - sRated: Power, + sRated: ApparentPower, currentType: ElectricCurrentType, cosPhiRated: Double, chargingPoints: Int, @@ -81,7 +82,7 @@ final case class EvcsModel( vehicle2grid: Boolean, strategy: ChargingStrategy.Value, lowestEvSoc: Double, -) extends SystemParticipant[EvcsRelevantData, ApparentPower, EvcsState]( +) extends SystemParticipant[EvcsRelevantData, ComplexPower, EvcsState]( uuid, id, operationInterval, @@ -500,12 +501,12 @@ final case class EvcsModel( ): Power = { val evPower = currentType match { case ElectricCurrentType.AC => - ev.sRatedAc + ev.pRatedAc case ElectricCurrentType.DC => - ev.sRatedDc + ev.pRatedDc } /* Limit the charging power to the minimum of ev's and evcs' permissible power */ - evPower.min(sRated) + evPower.min(sRated.toActivePower(1.0)) } override def calculatePower( @@ -513,7 +514,7 @@ final case class EvcsModel( voltage: Dimensionless, modelState: EvcsState, data: EvcsRelevantData, - ): ApparentPower = + ): ComplexPower = throw new NotImplementedError( "Use calculateNewScheduling() or chargeEv() instead." ) @@ -750,7 +751,7 @@ final case class EvcsModel( if (setPower > zeroKW) maxPower else - maxPower * (-1) + maxPower * -1 val chargingTicks = calcFlexOptionsChange(ev, power) val endTick = Math.min(currentTick + chargingTicks, ev.departureTick) @@ -819,7 +820,7 @@ final case class EvcsModel( (targetEnergy - ev.storedEnergy) / power } else - (ev.storedEnergy - (ev.eStorage * lowestEvSoc)) / (power * (-1)) + (ev.storedEnergy - (ev.eStorage * lowestEvSoc)) / (power * -1) Math.round(timeUntilFullOrEmpty.toSeconds) } @@ -1066,8 +1067,8 @@ object EvcsModel { operationInterval, simulationStartDate, QControl(scaledInput.getqCharacteristics), - Kilowatts( - scaledInput.getType.getsRated.to(KILOWATT).getValue.doubleValue + Kilovoltamperes( + scaledInput.getType.getsRated.to(KILOVOLTAMPERE).getValue.doubleValue ), scaledInput.getType.getElectricCurrentType, scaledInput.getCosPhiRated, diff --git a/src/main/scala/edu/ie3/simona/model/participant/load/FixedLoadModel.scala b/src/main/scala/edu/ie3/simona/model/participant/load/FixedLoadModel.scala index cc4bc82c65..48ef0d4eb7 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/load/FixedLoadModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/load/FixedLoadModel.scala @@ -17,8 +17,8 @@ import edu.ie3.simona.model.participant.load.LoadReference.{ } import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.Power -import squants.energy.Kilowatts import squants.time.Days import java.util.UUID @@ -45,7 +45,7 @@ final case class FixedLoadModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, reference: LoadReference, ) extends LoadModel[FixedLoadRelevantData.type]( @@ -95,9 +95,9 @@ object FixedLoadModel { scaledInput.getId, operationInterval, QControl(scaledInput.getqCharacteristics()), - Kilowatts( + Kilovoltamperes( scaledInput.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ), diff --git a/src/main/scala/edu/ie3/simona/model/participant/load/LoadModel.scala b/src/main/scala/edu/ie3/simona/model/participant/load/LoadModel.scala index 183f1dc5ae..6eb5a6fd0d 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/load/LoadModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/load/LoadModel.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.model.participant.load import com.typesafe.scalalogging.LazyLogging import edu.ie3.datamodel.models.input.system.LoadInput -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.model.participant.CalcRelevantData.LoadRelevantData import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.control.QControl @@ -21,7 +21,7 @@ import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.ProvideFlexOptio import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval -import squants.energy.Kilowatts +import edu.ie3.util.scala.quantities.{ApparentPower, Kilovoltamperes} import squants.{Energy, Power} import java.util.UUID @@ -36,9 +36,9 @@ abstract class LoadModel[D <: LoadRelevantData]( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, -) extends SystemParticipant[D, ApparentPower, ConstantState.type]( +) extends SystemParticipant[D, ComplexPower, ConstantState.type]( uuid, id, operationInterval, @@ -89,14 +89,14 @@ object LoadModel extends LazyLogging { inputModel: LoadInput, activePower: Power, safetyFactor: Double = 1d, - ): Power = { - val sRated = Kilowatts( + ): ApparentPower = { + val sRated = Kilovoltamperes( inputModel.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue ) - val pRated = sRated * inputModel.getCosPhiRated + val pRated = sRated.toActivePower(inputModel.getCosPhiRated) val referenceScalingFactor = activePower / pRated sRated * referenceScalingFactor * safetyFactor } @@ -132,10 +132,12 @@ object LoadModel extends LazyLogging { profileMaxPower: Power, profileEnergyScaling: Energy, safetyFactor: Double = 1d, - ): Power = { - (profileMaxPower / inputModel.getCosPhiRated) * ( + ): ApparentPower = { + val power = (profileMaxPower / inputModel.getCosPhiRated) * ( energyConsumption / profileEnergyScaling ) * safetyFactor + + Kilovoltamperes(power.toKilowatts) } } diff --git a/src/main/scala/edu/ie3/simona/model/participant/load/profile/LoadProfileStore.scala b/src/main/scala/edu/ie3/simona/model/participant/load/profile/LoadProfileStore.scala index 63e4a0d4a5..209d9349c8 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/load/profile/LoadProfileStore.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/load/profile/LoadProfileStore.scala @@ -18,6 +18,7 @@ import edu.ie3.simona.model.participant.load.profile.LoadProfileStore.{ } import edu.ie3.simona.model.participant.load.{DayType, profile} import org.apache.commons.csv.CSVFormat +import squants.Power import squants.energy.{KilowattHours, Watts} import java.io.{InputStreamReader, Reader} @@ -88,7 +89,7 @@ class LoadProfileStore private (val reader: Reader) { */ def maxPower( loadProfile: StandardLoadProfile - ): squants.Power = { + ): Power = { maxParamMap.get(loadProfile) match { case Some(value) => Watts(value) diff --git a/src/main/scala/edu/ie3/simona/model/participant/load/profile/ProfileLoadModel.scala b/src/main/scala/edu/ie3/simona/model/participant/load/profile/ProfileLoadModel.scala index e94f50867f..e30390bb74 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/load/profile/ProfileLoadModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/load/profile/ProfileLoadModel.scala @@ -15,6 +15,7 @@ import edu.ie3.simona.model.participant.load.LoadReference._ import edu.ie3.simona.model.participant.load.profile.ProfileLoadModel.ProfileRelevantData import edu.ie3.simona.model.participant.load.{LoadModel, LoadReference} import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.ApparentPower import squants.Power import java.time.ZonedDateTime @@ -44,7 +45,7 @@ final case class ProfileLoadModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, loadProfile: StandardLoadProfile, reference: LoadReference, diff --git a/src/main/scala/edu/ie3/simona/model/participant/load/random/RandomLoadModel.scala b/src/main/scala/edu/ie3/simona/model/participant/load/random/RandomLoadModel.scala index 4409d62cf2..bb0d95a9c8 100644 --- a/src/main/scala/edu/ie3/simona/model/participant/load/random/RandomLoadModel.scala +++ b/src/main/scala/edu/ie3/simona/model/participant/load/random/RandomLoadModel.scala @@ -17,6 +17,7 @@ import edu.ie3.simona.model.participant.load.random.RandomLoadModel.RandomReleva import edu.ie3.simona.model.participant.load.{DayType, LoadModel, LoadReference} import edu.ie3.util.TimeUtil import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.ApparentPower import squants.Power import squants.energy.{KilowattHours, Kilowatts, Watts} @@ -50,7 +51,7 @@ final case class RandomLoadModel( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, reference: LoadReference, ) extends LoadModel[RandomRelevantData]( @@ -168,7 +169,7 @@ object RandomLoadModel { * active power. * * @return - * Reference power to use for later model calculations + * Reference active power to use for later model calculations */ private val randomMaxPower: Power = Watts(159d) diff --git a/src/main/scala/edu/ie3/simona/ontology/messages/flex/FlexibilityMessage.scala b/src/main/scala/edu/ie3/simona/ontology/messages/flex/FlexibilityMessage.scala index 9a946de85e..662c11e2d2 100644 --- a/src/main/scala/edu/ie3/simona/ontology/messages/flex/FlexibilityMessage.scala +++ b/src/main/scala/edu/ie3/simona/ontology/messages/flex/FlexibilityMessage.scala @@ -8,7 +8,7 @@ package edu.ie3.simona.ontology.messages.flex import edu.ie3.datamodel.models.input.AssetInput import edu.ie3.simona.agent.em.EmAgent -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.scheduler.ScheduleLock.ScheduleKey import org.apache.pekko.actor.typed.ActorRef import squants.Power @@ -128,7 +128,7 @@ object FlexibilityMessage { */ final case class FlexResult( override val modelUuid: UUID, - result: ApparentPower, + result: ComplexPower, ) extends FlexResponse /** Message sent by flex options providers indicating that the diff --git a/src/main/scala/edu/ie3/simona/ontology/messages/services/PrimaryDataMessage.scala b/src/main/scala/edu/ie3/simona/ontology/messages/services/PrimaryDataMessage.scala index 4721af5f2f..f78e1f5fe4 100644 --- a/src/main/scala/edu/ie3/simona/ontology/messages/services/PrimaryDataMessage.scala +++ b/src/main/scala/edu/ie3/simona/ontology/messages/services/PrimaryDataMessage.scala @@ -6,7 +6,7 @@ package edu.ie3.simona.ontology.messages.services -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.ontology.messages.services.ServiceMessage.ProvisionMessage import org.apache.pekko.actor.ActorRef @@ -14,7 +14,7 @@ sealed trait PrimaryDataMessage object PrimaryDataMessage { - /** Provides primary data in the form of [[ApparentPower]] + /** Provides primary data in the form of [[ComplexPower]] * * @param tick * Tick, the data belongs to @@ -27,8 +27,8 @@ object PrimaryDataMessage { final case class ApparentPowerProvisionMessage( override val tick: Long, override val serviceRef: ActorRef, - override val data: ApparentPower, + override val data: ComplexPower, override val nextDataTick: Option[Long], - ) extends ProvisionMessage[ApparentPower] + ) extends ProvisionMessage[ComplexPower] with PrimaryDataMessage } diff --git a/src/main/scala/edu/ie3/util/scala/quantities/ApparentPower.scala b/src/main/scala/edu/ie3/util/scala/quantities/ApparentPower.scala new file mode 100644 index 0000000000..2fe765ce9b --- /dev/null +++ b/src/main/scala/edu/ie3/util/scala/quantities/ApparentPower.scala @@ -0,0 +1,108 @@ +/* + * © 2022. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ + +package edu.ie3.util.scala.quantities + +import squants._ +import squants.energy._ +import squants.time.Time + +import scala.math.{acos, sin} +import scala.util.Try + +/** Class that represents an apparent power. An apparent power is the absolute + * value of the complex power (|S|). + * @param value + * power value + * @param unit + * of the power + */ +final class ApparentPower private ( + val value: Double, + val unit: ApparentPowerUnit, +) extends Quantity[ApparentPower] { + + def dimension: ApparentPower.type = ApparentPower + + def toMillivoltamperes: Double = to(Millivoltamperes) + def toVoltamperes: Double = to(Voltamperes) + def toKilovoltamperes: Double = to(Kilovoltamperes) + def toMegavoltamperes: Double = to(Megavoltamperes) + def toGigavoltamperes: Double = to(Gigavoltamperes) + + /** Method to convert this apparent power into a [[Power]] using a given + * cosPhi. + * @param cosPhi + * cosine of the corresponding angle + * @return + * the resulting active power + */ + def toActivePower(cosPhi: Double): Power = Watts(toVoltamperes * cosPhi) + + /** Method to convert this apparent power into a [[ReactivePower]] using a + * given cosPhi. + * @param cosPhi + * cosine of the corresponding angle + * @return + * the resulting reactive power + */ + def toReactivePower(cosPhi: Double): ReactivePower = { + // Q = |S| * sin(φ), φ = acos(cosPhi) + Vars(toVoltamperes * sin(acos(cosPhi))) + } +} + +object ApparentPower extends Dimension[ApparentPower] { + private[quantities] def apply[A](n: A, unit: ApparentPowerUnit)(implicit + num: Numeric[A] + ) = new ApparentPower(num.toDouble(n), unit) + def apply(energy: Energy, time: Time): ApparentPower = + apply(energy.toWattHours / time.toHours, Voltamperes) + def apply(value: Any): Try[ApparentPower] = parse(value) + + def name = "Power" + def primaryUnit: Voltamperes.type = Voltamperes + def siUnit: Voltamperes.type = Voltamperes + def units: Set[UnitOfMeasure[ApparentPower]] = + Set( + Voltamperes, + Millivoltamperes, + Kilovoltamperes, + Megavoltamperes, + Gigavoltamperes, + ) +} + +trait ApparentPowerUnit + extends UnitOfMeasure[ApparentPower] + with UnitConverter { + def apply[A](n: A)(implicit num: Numeric[A]): ApparentPower = + ApparentPower(n, this) +} + +object Millivoltamperes extends ApparentPowerUnit with SiUnit { + val conversionFactor: Double = MetricSystem.Milli + val symbol = "mVA" +} + +object Voltamperes extends ApparentPowerUnit with PrimaryUnit with SiUnit { + val symbol = "VA" +} + +object Kilovoltamperes extends ApparentPowerUnit with SiUnit { + val conversionFactor: Double = MetricSystem.Kilo + val symbol = "kVA" +} + +object Megavoltamperes extends ApparentPowerUnit with SiUnit { + val conversionFactor: Double = MetricSystem.Mega + val symbol = "MVA" +} + +object Gigavoltamperes extends ApparentPowerUnit with SiUnit { + val conversionFactor: Double = MetricSystem.Giga + val symbol = "GVA" +} diff --git a/src/test/scala/edu/ie3/simona/agent/em/EmAgentSpec.scala b/src/test/scala/edu/ie3/simona/agent/em/EmAgentSpec.scala index fb550a9a77..c0b8f93489 100644 --- a/src/test/scala/edu/ie3/simona/agent/em/EmAgentSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/em/EmAgentSpec.scala @@ -7,7 +7,7 @@ package edu.ie3.simona.agent.em import edu.ie3.datamodel.models.result.system.EmResult -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.config.SimonaConfig.EmRuntimeConfig import edu.ie3.simona.event.ResultEvent import edu.ie3.simona.event.ResultEvent.{ @@ -159,7 +159,7 @@ class EmAgentSpec pvAgent.expectMessage(IssueNoControl(0)) emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-5d), Kilovars(-0.5d)), + result = ComplexPower(Kilowatts(-5d), Kilovars(-0.5d)), ) emAgent ! FlexCompletion( modelUuid = pvInput.getUuid, @@ -174,7 +174,7 @@ class EmAgentSpec } emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(5d), Kilovars(0.1d)), + result = ComplexPower(Kilowatts(5d), Kilovars(0.1d)), ) emAgent ! FlexCompletion( modelUuid = evcsInput.getUuid, @@ -220,7 +220,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(0d), Kilovars(0d)), + result = ComplexPower(Kilowatts(0d), Kilovars(0d)), ) emAgent ! FlexCompletion(modelUuid = evcsInput.getUuid) @@ -307,7 +307,7 @@ class EmAgentSpec // send completions emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-5d), Kilovars(-0.5d)), + result = ComplexPower(Kilowatts(-5d), Kilovars(-0.5d)), ) emAgent ! FlexCompletion( modelUuid = pvInput.getUuid, @@ -316,7 +316,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(5d), Kilovars(0.1d)), + result = ComplexPower(Kilowatts(5d), Kilovars(0.1d)), ) scheduler.expectNoMessage() @@ -361,7 +361,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-3d), Kilovars(-0.06d)), + result = ComplexPower(Kilowatts(-3d), Kilovars(-0.06d)), ) emAgent ! FlexCompletion( @@ -378,7 +378,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(3d), Kilovars(0.06d)), + result = ComplexPower(Kilowatts(3d), Kilovars(0.06d)), ) emAgent ! FlexCompletion( modelUuid = evcsInput.getUuid, @@ -470,7 +470,7 @@ class EmAgentSpec // send completions emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-5d), Kilovars(-0.5d)), + result = ComplexPower(Kilowatts(-5d), Kilovars(-0.5d)), ) emAgent ! FlexCompletion( modelUuid = pvInput.getUuid, @@ -479,7 +479,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(5d), Kilovars(0.1d)), + result = ComplexPower(Kilowatts(5d), Kilovars(0.1d)), ) scheduler.expectNoMessage() @@ -534,7 +534,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-3d), Kilovars(-0.06d)), + result = ComplexPower(Kilowatts(-3d), Kilovars(-0.06d)), ) emAgent ! FlexCompletion( modelUuid = pvInput.getUuid @@ -549,7 +549,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(3d), Kilovars(0.06d)), + result = ComplexPower(Kilowatts(3d), Kilovars(0.06d)), ) emAgent ! FlexCompletion( modelUuid = evcsInput.getUuid // revoking tick 600 @@ -696,7 +696,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = pvInput.getUuid, - result = ApparentPower(Kilowatts(-5), Kilovars(-0.5)), + result = ComplexPower(Kilowatts(-5), Kilovars(-0.5)), ) emAgent ! FlexCompletion( modelUuid = pvInput.getUuid, @@ -712,7 +712,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(11), Kilovars(1.1)), + result = ComplexPower(Kilowatts(11), Kilovars(1.1)), ) emAgent ! FlexCompletion( modelUuid = evcsInput.getUuid, @@ -762,7 +762,7 @@ class EmAgentSpec emAgent ! FlexResult( modelUuid = evcsInput.getUuid, - result = ApparentPower(Kilowatts(5.0), Kilovars(0.5)), + result = ComplexPower(Kilowatts(5.0), Kilovars(0.5)), ) emAgent ! FlexCompletion( modelUuid = evcsInput.getUuid, diff --git a/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala index 9b1502bce4..4d3c444156 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/EvcsAgentModelCalculationSpec.scala @@ -20,7 +20,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorExtEvDataService import edu.ie3.simona.agent.participant.evcs.EvcsAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData @@ -122,7 +122,7 @@ class EvcsAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ EvcsInput, EvcsRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = evcsInputModel, modelConfig = modelConfig, @@ -186,7 +186,7 @@ class EvcsAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ EvcsInput, EvcsRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = evcsInputModel, modelConfig = modelConfig, @@ -315,7 +315,7 @@ class EvcsAgentModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower](resolution) + requestValueStore shouldBe ValueStore[ComplexPower](resolution) /* Additional information */ awaitRegistrationResponsesFrom shouldBe Iterable(evService.ref) @@ -394,11 +394,11 @@ class EvcsAgentModelCalculationSpec inside(evcsAgent.stateData) { case baseStateData: ParticipantModelBaseStateData[_, _, _, _] => baseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -1172,7 +1172,7 @@ class EvcsAgentModelCalculationSpec resultValueStore shouldBe ValueStore( resolution ) - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution ) case unrecognized => @@ -1355,9 +1355,9 @@ class EvcsAgentModelCalculationSpec maxPower, ) => modelUuid shouldBe evcsInputModelQv.getUuid - referencePower shouldBe ev900.sRatedAc - minPower shouldBe ev900.sRatedAc // battery is empty - maxPower shouldBe ev900.sRatedAc + referencePower shouldBe ev900.pRatedAc + minPower shouldBe ev900.pRatedAc // battery is empty + maxPower shouldBe ev900.pRatedAc } resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => @@ -1472,9 +1472,9 @@ class EvcsAgentModelCalculationSpec maxPower, ) => modelUuid shouldBe evcsInputModelQv.getUuid - referencePower shouldBe ev4500.sRatedAc - minPower shouldBe ev900.sRatedAc // battery is empty - maxPower shouldBe ev4500.sRatedAc + referencePower shouldBe ev4500.pRatedAc + minPower shouldBe ev900.pRatedAc // battery is empty + maxPower shouldBe ev4500.pRatedAc } resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => @@ -1522,9 +1522,9 @@ class EvcsAgentModelCalculationSpec maxPower, ) => modelUuid shouldBe evcsInputModelQv.getUuid - referencePower shouldBe ev4500.sRatedAc + referencePower shouldBe ev4500.pRatedAc minPower shouldBe Kilowatts(0.0) // battery is exactly at margin - maxPower shouldBe ev4500.sRatedAc + maxPower shouldBe ev4500.pRatedAc } resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => @@ -1609,7 +1609,9 @@ class EvcsAgentModelCalculationSpec ) => modelUuid shouldBe evcsInputModelQv.getUuid refPower shouldBe combinedChargingPowerSq - minPower shouldBe ev4500.sRatedAc * -1 // battery of earlier ev is above lowest soc now + + // battery of earlier ev is above lowest soc now + minPower shouldBe ev4500.pRatedAc * -1 maxPower shouldBe combinedChargingPowerSq } @@ -1759,7 +1761,7 @@ class EvcsAgentModelCalculationSpec ) => modelUuid shouldBe evcsInputModelQv.getUuid referencePower shouldBe combinedChargingPowerSq - minPower shouldBe ev4500.sRatedAc * -1 // battery of ev11700 is below lowest soc now + minPower shouldBe ev4500.pRatedAc * -1 // battery of ev11700 is below lowest soc now maxPower shouldBe combinedChargingPowerSq } @@ -1955,9 +1957,9 @@ class EvcsAgentModelCalculationSpec maxPower, ) => modelUuid shouldBe evcsInputModelQv.getUuid - referencePower shouldBe ev4500.sRatedAc + referencePower shouldBe ev4500.pRatedAc minPower shouldBe Kilowatts(0d) - maxPower shouldBe ev4500.sRatedAc + maxPower shouldBe ev4500.pRatedAc } resultListener.expectMsgPF() { case FlexOptionsResultEvent(flexResult) => @@ -2016,7 +2018,7 @@ class EvcsAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ EvcsInput, EvcsRuntimeConfig, - ApparentPower, + ComplexPower, ]( evcsInputModel, modelConfig = modelConfig, diff --git a/src/test/scala/edu/ie3/simona/agent/participant/FixedFeedInAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/FixedFeedInAgentModelCalculationSpec.scala index bdaac6d366..c8bcdd13b5 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/FixedFeedInAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/FixedFeedInAgentModelCalculationSpec.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.fixedfeedin.FixedFeedInAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ @@ -105,7 +105,7 @@ class FixedFeedInAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ FixedFeedInInput, FixedFeedInRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -221,7 +221,7 @@ class FixedFeedInAgentModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution ) case _ => @@ -270,11 +270,11 @@ class FixedFeedInAgentModelCalculationSpec inside(fixedFeedAgent.stateData) { case baseStateData: ParticipantModelBaseStateData[_, _, _, _] => baseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) @@ -324,7 +324,7 @@ class FixedFeedInAgentModelCalculationSpec baseStateData.resultValueStore.last(0L) match { case Some((tick, entry)) => tick shouldBe 0L - inside(entry) { case ApparentPower(p, q) => + inside(entry) { case ComplexPower(p, q) => p should approximate(Megawatts(-268.603e-6)) q should approximate(Megavars(0.0)) } diff --git a/src/test/scala/edu/ie3/simona/agent/participant/HpAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/HpAgentModelCalculationSpec.scala index 03007b225a..68ff601380 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/HpAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/HpAgentModelCalculationSpec.scala @@ -14,7 +14,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.hp.HpAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData @@ -121,7 +121,7 @@ class HpAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ HpInput, HpRuntimeConfig, - ApparentPowerAndHeat, + ComplexPowerAndHeat, ]( inputModel = hpInput, modelConfig = modelConfig, @@ -186,7 +186,7 @@ class HpAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ HpInput, HpRuntimeConfig, - ApparentPowerAndHeat, + ComplexPowerAndHeat, ]( inputModel = hpInput, thermalGrid = defaultThermalGrid, @@ -318,7 +318,7 @@ class HpAgentModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPowerAndHeat]( + requestValueStore shouldBe ValueStore[ComplexPowerAndHeat]( resolution ) @@ -403,11 +403,11 @@ class HpAgentModelCalculationSpec inside(hpAgent.stateData) { case modelBaseStateData: ParticipantModelBaseStateData[_, _, _, _] => modelBaseStateData.requestValueStore shouldBe ValueStore[ - ApparentPowerAndHeat + ComplexPowerAndHeat ]( resolution, SortedMap( - 0L -> ApparentPowerAndHeat( + 0L -> ComplexPowerAndHeat( Megawatts(0.0), Megavars(0.0), Megawatts(0.0), @@ -539,7 +539,7 @@ class HpAgentModelCalculationSpec 0L, fail("Expected a simulation result for tick 900."), ) match { - case ApparentPowerAndHeat(p, q, qDot) => + case ComplexPowerAndHeat(p, q, qDot) => p should approximate(Megawatts(0d)) q should approximate(Megavars(0d)) qDot should approximate(Megawatts(0d)) @@ -667,7 +667,7 @@ class HpAgentModelCalculationSpec 0L, fail("Expected a simulation result for tick 0."), ) match { - case ApparentPowerAndHeat(p, q, qDot) => + case ComplexPowerAndHeat(p, q, qDot) => p should approximate(Megawatts(0d)) q should approximate(Megavars(0d)) qDot should approximate(Megawatts(0d)) diff --git a/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentFixedModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentFixedModelCalculationSpec.scala index a93d492e4b..ddb97cd27b 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentFixedModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentFixedModelCalculationSpec.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.load.LoadAgent.FixedLoadAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ @@ -99,7 +99,7 @@ class LoadAgentFixedModelCalculationSpec val initStateData = ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -215,7 +215,7 @@ class LoadAgentFixedModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution ) case _ => @@ -264,11 +264,11 @@ class LoadAgentFixedModelCalculationSpec inside(loadAgent.stateData) { case baseStateData: ParticipantModelBaseStateData[_, _, _, _] => baseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) @@ -318,7 +318,7 @@ class LoadAgentFixedModelCalculationSpec baseStateData.resultValueStore.last(0L) match { case Some((tick, entry)) => tick shouldBe 0L - inside(entry) { case ApparentPower(p, q) => + inside(entry) { case ComplexPower(p, q) => p should approximate(Megawatts(268.603e-6)) q should approximate(Megavars(0.0)) } diff --git a/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentProfileModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentProfileModelCalculationSpec.scala index 2e9a180fea..6615308552 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentProfileModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/LoadAgentProfileModelCalculationSpec.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.load.LoadAgent.ProfileLoadAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ @@ -99,7 +99,7 @@ class LoadAgentProfileModelCalculationSpec val initStateData = ParticipantInitializeStateData[ LoadInput, LoadRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -215,7 +215,7 @@ class LoadAgentProfileModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution ) case _ => @@ -264,11 +264,11 @@ class LoadAgentProfileModelCalculationSpec inside(loadAgent.stateData) { case baseStateData: ParticipantModelBaseStateData[_, _, _, _] => baseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) @@ -318,7 +318,7 @@ class LoadAgentProfileModelCalculationSpec baseStateData.resultValueStore.last(0L) match { case Some((tick, entry)) => tick shouldBe 0L - inside(entry) { case ApparentPower(p, q) => + inside(entry) { case ComplexPower(p, q) => p should approximate(Megawatts(84.000938e-6)) q should approximate(Megavars(0.0)) } diff --git a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgent2ListenerSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgent2ListenerSpec.scala index b061ae512d..dcfa3b2cb1 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgent2ListenerSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgent2ListenerSpec.scala @@ -17,7 +17,7 @@ import edu.ie3.simona.agent.participant.ParticipantAgent.{ FinishParticipantSimulation, RequestAssetPowerMessage, } -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.ParticipantInitializeStateData import edu.ie3.simona.config.SimonaConfig import edu.ie3.simona.config.SimonaConfig.BaseRuntimeConfig @@ -87,12 +87,12 @@ class ParticipantAgent2ListenerSpec val initStateData: NotifierConfig => ParticipantInitializeStateData[ SystemParticipantInput, BaseRuntimeConfig, - ApparentPower, + ComplexPower, ] = outputConfig => ParticipantInitializeStateData[ SystemParticipantInput, BaseRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = mockInputModel, modelConfig = mock[BaseRuntimeConfig], diff --git a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentExternalSourceSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentExternalSourceSpec.scala index 27823d38df..041052ee5f 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentExternalSourceSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentExternalSourceSpec.scala @@ -23,8 +23,8 @@ import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessag import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ ActivePower, ActivePowerAndHeat, - ApparentPower, - ApparentPowerAndHeat, + ComplexPower, + ComplexPowerAndHeat, } import edu.ie3.simona.agent.participant.statedata.BaseStateData.FromOutsideBaseStateData import edu.ie3.simona.agent.participant.statedata.DataCollectionStateData @@ -97,7 +97,7 @@ class ParticipantAgentExternalSourceSpec private val mockModel = mock[SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ]] when(mockModel.getUuid).thenReturn(testUUID) @@ -128,7 +128,7 @@ class ParticipantAgentExternalSourceSpec val initStateData = ParticipantInitializeStateData[ SystemParticipantInput, BaseRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = mockInputModel, modelConfig = mock[BaseRuntimeConfig], @@ -216,9 +216,9 @@ class ParticipantAgentExternalSourceSpec mockAgent.stateData match { case baseStateData: FromOutsideBaseStateData[SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower] => + ], ComplexPower] => /* Only check the awaited next data ticks, as the rest has yet been checked */ baseStateData.foreseenDataTicks shouldBe Map( primaryServiceProxy.ref -> Some(4711L) @@ -279,10 +279,10 @@ class ParticipantAgentExternalSourceSpec _, requestValueStore, ) => - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -322,7 +322,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 900L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(0.0), Kilovars(900.0), ), @@ -336,9 +336,9 @@ class ParticipantAgentExternalSourceSpec case DataCollectionStateData( baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower], + ], ComplexPower], expectedSenders, isYetTriggered, ) => @@ -350,7 +350,7 @@ class ParticipantAgentExternalSourceSpec /* The yet sent data is also registered */ expectedSenders shouldBe Map( primaryServiceProxy.ref -> Some( - ApparentPower( + ComplexPower( Kilowatts(0.0), Kilovars(900.0), ) @@ -376,14 +376,14 @@ class ParticipantAgentExternalSourceSpec mockAgent.stateData match { case baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower] => + ], ComplexPower] => /* The new data is apparent in the result value store */ baseStateData.resultValueStore match { case ValueStore(_, store) => store shouldBe Map( - 900L -> ApparentPower( + 900L -> ComplexPower( Kilowatts(0.0), Kilovars(900.0), ) @@ -426,9 +426,9 @@ class ParticipantAgentExternalSourceSpec case DataCollectionStateData( baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower], + ], ComplexPower], expectedSenders, isYetTriggered, ) => @@ -454,7 +454,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 900L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(0.0), Kilovars(900.0), ), @@ -470,14 +470,14 @@ class ParticipantAgentExternalSourceSpec mockAgent.stateData match { case baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower] => + ], ComplexPower] => /* The new data is apparent in the result value store */ baseStateData.resultValueStore match { case ValueStore(_, store) => store shouldBe Map( - 900L -> ApparentPower( + 900L -> ComplexPower( Kilowatts(0.0), Kilovars(900.0), ) @@ -527,7 +527,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 900L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(0.0), Kilovars(900.0), ), @@ -554,13 +554,13 @@ class ParticipantAgentExternalSourceSpec "correctly determine the reactive power function when trivial reactive power is requested" in { val baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower] = FromOutsideBaseStateData[SystemParticipant[ + ], ComplexPower] = FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower]( + ], ComplexPower]( mockModel, defaultSimulationStart, defaultSimulationEnd, @@ -585,13 +585,13 @@ class ParticipantAgentExternalSourceSpec "correctly determine the reactive power function from model when requested" in { val baseStateData: FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower] = FromOutsideBaseStateData[SystemParticipant[ + ], ComplexPower] = FromOutsideBaseStateData[SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, - ], ApparentPower]( + ], ComplexPower]( mockModel, defaultSimulationStart, defaultSimulationEnd, @@ -635,7 +635,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 900L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(100.0), Kilovars(33.0), ), @@ -651,7 +651,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 1800L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(150.0), Kilovars(49.0), ), @@ -667,7 +667,7 @@ class ParticipantAgentExternalSourceSpec ProvidePrimaryDataMessage( 2700L, primaryServiceProxy.ref, - ApparentPower( + ComplexPower( Kilowatts(200.0), Kilovars(66.0), ), @@ -738,7 +738,7 @@ class ParticipantAgentExternalSourceSpec "fail" in { val data = Map( primaryServiceProxy.ref -> Some( - ApparentPowerAndHeat( + ComplexPowerAndHeat( Kilowatts(0.0), Kilovars(0.0), Kilowatts(0.0), @@ -748,7 +748,7 @@ class ParticipantAgentExternalSourceSpec participantAgent.prepareData(data, reactivePowerFunction) match { case Failure(exception: IllegalStateException) => - exception.getMessage shouldBe "Got the wrong primary data. Expected: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ApparentPower, got: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ApparentPowerAndHeat" + exception.getMessage shouldBe "Got the wrong primary data. Expected: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ComplexPower, got: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ComplexPowerAndHeat" case Failure(exception) => fail(s"Failed with wrong exception:\n\t$exception") case Success(_) => fail("Was meant to fail, but succeeded") @@ -769,7 +769,7 @@ class ParticipantAgentExternalSourceSpec participantAgent.prepareData(data, reactivePowerFunction) match { case Failure(exception: IllegalStateException) => - exception.getMessage shouldBe "Received primary data cannot be enriched to expected data. Expected: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ApparentPower, got: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ActivePowerAndHeat, enriched to: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ApparentPowerAndHeat" + exception.getMessage shouldBe "Received primary data cannot be enriched to expected data. Expected: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ComplexPower, got: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ActivePowerAndHeat, enriched to: edu.ie3.simona.agent.participant.data.Data$PrimaryData$ComplexPowerAndHeat" case Failure(exception) => fail(s"Failed with wrong exception:\n\t$exception") case Success(_) => fail("Was meant to fail, but succeeded") @@ -784,7 +784,7 @@ class ParticipantAgentExternalSourceSpec ) participantAgent.prepareData(data, reactivePowerFunction) match { - case Success(ApparentPower(p, q)) => + case Success(ComplexPower(p, q)) => p should approximate(Megawatts(0.0)) q should approximate(Megavars(0.0)) case Success(value) => @@ -808,7 +808,7 @@ class ParticipantAgentExternalSourceSpec data, (p: squants.Power) => Kilovars(p.toKilowatts * tan(acos(0.9))), ) match { - case Success(ApparentPower(p, q)) => + case Success(ComplexPower(p, q)) => p should approximate(Kilowatts(100.0)) q should approximate(Kilovars(48.43221)) case Success(value) => diff --git a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentalsSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentalsSpec.scala index 10a2652e9d..26058683b3 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentalsSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentFundamentalsSpec.scala @@ -6,16 +6,12 @@ package edu.ie3.simona.agent.participant -import org.apache.pekko.actor.ActorRef.noSender -import org.apache.pekko.actor.{ActorRef, ActorSystem} -import org.apache.pekko.testkit.TestFSMRef -import org.apache.pekko.util.Timeout import breeze.numerics.pow import com.typesafe.config.ConfigFactory import edu.ie3.datamodel.models.input.system.SystemParticipantInput import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.ParticipantAgentFundamentals.RelevantResultValues -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.ParticipantInitializeStateData @@ -27,8 +23,8 @@ import edu.ie3.simona.exceptions.agent.{ InconsistentStateException, } import edu.ie3.simona.model.participant.CalcRelevantData.FixedRelevantData -import edu.ie3.simona.model.participant.SystemParticipant import edu.ie3.simona.model.participant.ModelState.ConstantState +import edu.ie3.simona.model.participant.SystemParticipant import edu.ie3.simona.model.participant.control.QControl.CosPhiFixed import edu.ie3.simona.model.participant.load.FixedLoadModel.FixedLoadRelevantData import edu.ie3.simona.model.participant.load.{FixedLoadModel, LoadReference} @@ -36,13 +32,22 @@ import edu.ie3.simona.test.common.AgentSpec import edu.ie3.simona.test.common.model.participant.LoadTestData import edu.ie3.util.TimeUtil import edu.ie3.util.scala.OperationInterval -import edu.ie3.util.scala.quantities.{Megavars, ReactivePower, Vars} +import edu.ie3.util.scala.quantities.{ + Kilovoltamperes, + Megavars, + ReactivePower, + Vars, +} +import org.apache.pekko.actor.ActorRef.noSender +import org.apache.pekko.actor.{ActorRef, ActorSystem} +import org.apache.pekko.testkit.TestFSMRef +import org.apache.pekko.util.Timeout import org.mockito.Mockito.when import org.scalatest.PrivateMethodTester import org.scalatest.prop.{TableDrivenPropertyChecks, TableFor3, TableFor5} import org.scalatestplus.mockito.MockitoSugar -import squants.{Each, Power} import squants.energy.{Kilowatts, Megawatts, Watts} +import squants.{Each, Power} import java.util.UUID import java.util.concurrent.TimeUnit @@ -77,7 +82,7 @@ class ParticipantAgentFundamentalsSpec /* Get one instance of the mock for participant agent */ private val mockAgentTestRef: TestFSMRef[AgentState, ParticipantStateData[ - ApparentPower + ComplexPower ], ParticipantAgentMock] = TestFSMRef( new ParticipantAgentMock( @@ -85,7 +90,7 @@ class ParticipantAgentFundamentalsSpec initStateData = mock[ParticipantInitializeStateData[ SystemParticipantInput, BaseRuntimeConfig, - ApparentPower, + ComplexPower, ]], ) ) @@ -93,35 +98,35 @@ class ParticipantAgentFundamentalsSpec private val powerValues = Map( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(1.0), Megavars(0.0), ), - 1L -> ApparentPower( + 1L -> ComplexPower( Megawatts(2.0), Megavars(1.0), ), - 3L -> ApparentPower( + 3L -> ComplexPower( Megawatts(3.0), Megavars(2.0), ), - 4L -> ApparentPower( + 4L -> ComplexPower( Megawatts(5.0), Megavars(4.0), ), - 7L -> ApparentPower( + 7L -> ComplexPower( Megawatts(3.0), Megavars(2.0), ), - 8L -> ApparentPower( + 8L -> ComplexPower( Megawatts(6.0), Megavars(5.0), ), - 9L -> ApparentPower( + 9L -> ComplexPower( Megawatts(6.0), Megavars(5.0), ), - 10L -> ApparentPower( + 10L -> ComplexPower( Megawatts(4.0), Megavars(3.0), ), @@ -321,7 +326,7 @@ class ParticipantAgentFundamentalsSpec None, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.8666666666666667)) q should approximate(Megavars(0.5333333333333334)) } @@ -336,7 +341,7 @@ class ParticipantAgentFundamentalsSpec None, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(4.571428571428573)) q should approximate(Megavars(3.571428571428571)) } @@ -351,7 +356,7 @@ class ParticipantAgentFundamentalsSpec None, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(4.571428571428573)) q should approximate(Megavars(3.571428571428571)) } @@ -366,7 +371,7 @@ class ParticipantAgentFundamentalsSpec activeToReactivePowerFuncOpt, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.8666666666666667)) q should approximate(Megavars(2.8666666666666667)) } @@ -381,7 +386,7 @@ class ParticipantAgentFundamentalsSpec activeToReactivePowerFuncOpt, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(4.571428571428573)) q should approximate(Megavars(21.71428571428571)) } @@ -396,7 +401,7 @@ class ParticipantAgentFundamentalsSpec activeToReactivePowerFuncOpt, ) apparentPower match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(4.571428571428573)) q should approximate(Megavars(21.71428571428571)) } @@ -409,27 +414,27 @@ class ParticipantAgentFundamentalsSpec val resultValueStore = ValueStore( 900, SortedMap( - 800L -> ApparentPower( + 800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1000L -> ApparentPower( + 1000L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1200L -> ApparentPower( + 1200L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1400L -> ApparentPower( + 1400L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1600L -> ApparentPower( + 1600L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1800L -> ApparentPower( + 1800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), @@ -438,7 +443,7 @@ class ParticipantAgentFundamentalsSpec val requestValueStore = ValueStore( 900, SortedMap( - 900L -> ApparentPower( + 900L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -454,27 +459,27 @@ class ParticipantAgentFundamentalsSpec 900L, 1800L, Map( - 800L -> ApparentPower( + 800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1000L -> ApparentPower( + 1000L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1200L -> ApparentPower( + 1200L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1400L -> ApparentPower( + 1400L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1600L -> ApparentPower( + 1600L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), - 1800L -> ApparentPower( + 1800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ), @@ -488,7 +493,7 @@ class ParticipantAgentFundamentalsSpec val resultValueStore = ValueStore( 900, SortedMap( - 800L -> ApparentPower( + 800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -497,7 +502,7 @@ class ParticipantAgentFundamentalsSpec val requestValueStore = ValueStore( 900, SortedMap( - 900L -> ApparentPower( + 900L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -513,7 +518,7 @@ class ParticipantAgentFundamentalsSpec 900L, 1800L, Map( - 800L -> ApparentPower( + 800L -> ComplexPower( Megawatts(0.0), Megavars(0.0), ) @@ -526,7 +531,7 @@ class ParticipantAgentFundamentalsSpec "Determining the applicable nodal voltage" should { "deliver the correct voltage" in { val baseStateData = ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedLoadRelevantData.type, ConstantState.type, FixedLoadModel, @@ -538,7 +543,7 @@ class ParticipantAgentFundamentalsSpec "test_load", OperationInterval(0L, 1800L), CosPhiFixed(0.95), - Kilowatts(100.0), + Kilovoltamperes(100.0), 0.95, LoadReference.ActivePower(Kilowatts(95.0)), ), @@ -563,7 +568,7 @@ class ParticipantAgentFundamentalsSpec "throw an error, if no nodal voltage is available" in { val baseStateData = ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedLoadRelevantData.type, ConstantState.type, FixedLoadModel, @@ -575,7 +580,7 @@ class ParticipantAgentFundamentalsSpec "test_load", OperationInterval(0L, 1800L), CosPhiFixed(0.95), - Kilowatts(100.0), + Kilovoltamperes(100.0), 0.95, LoadReference.ActivePower(Kilowatts(95.0)), ), @@ -615,25 +620,25 @@ case object ParticipantAgentFundamentalsSpec extends MockitoSugar { additionalActivationTicks: SortedSet[Long], foreseenDataTicks: Map[ActorRef, Option[Long]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - SystemParticipant[FixedRelevantData.type, ApparentPower, ConstantState.type], + SystemParticipant[FixedRelevantData.type, ComplexPower, ConstantState.type], ] = { val modelMock = mock[SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ]] when(modelMock.getUuid).thenReturn(UUID.randomUUID()) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ]( diff --git a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentMock.scala b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentMock.scala index 8087993f01..c3c77e2292 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentMock.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/ParticipantAgentMock.scala @@ -6,14 +6,12 @@ package edu.ie3.simona.agent.participant -import org.apache.pekko.actor.{ActorRef, FSM, Props} -import org.apache.pekko.actor.typed.{ActorRef => TypedActorRef} import edu.ie3.datamodel.models.input.system.SystemParticipantInput import edu.ie3.datamodel.models.result.ResultEntity import edu.ie3.datamodel.models.result.system.SystemParticipantResult import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ - ApparentPower, + ComplexPower, ZERO_POWER, } import edu.ie3.simona.agent.participant.data.Data.SecondaryData @@ -45,7 +43,14 @@ import edu.ie3.simona.model.participant.{ } import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage.FlexResponse import edu.ie3.util.quantities.QuantityUtils.RichQuantityDouble -import edu.ie3.util.scala.quantities.{Kilovars, Megavars, ReactivePower} +import edu.ie3.util.scala.quantities.{ + Kilovars, + Kilovoltamperes, + Megavars, + ReactivePower, +} +import org.apache.pekko.actor.typed.{ActorRef => TypedActorRef} +import org.apache.pekko.actor.{ActorRef, FSM, Props} import org.mockito.ArgumentMatchers.any import org.mockito.Mockito import org.mockito.Mockito.doReturn @@ -68,38 +73,38 @@ class ParticipantAgentMock( initStateData: ParticipantInitializeStateData[ SystemParticipantInput, SimonaConfig.BaseRuntimeConfig, - ApparentPower, + ComplexPower, ], override val listener: Iterable[ActorRef] = Iterable.empty[ActorRef], ) extends ParticipantAgent[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], SystemParticipantInput, SimonaConfig.BaseRuntimeConfig, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ](scheduler, initStateData) with ParticipantAgentFundamentals[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - ParticipantStateData[ApparentPower], + ParticipantStateData[ComplexPower], SystemParticipantInput, SimonaConfig.BaseRuntimeConfig, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ] { - override protected val pdClassTag: ClassTag[ApparentPower] = - classTag[ApparentPower] - override val alternativeResult: ApparentPower = ZERO_POWER + override protected val pdClassTag: ClassTag[ComplexPower] = + classTag[ComplexPower] + override val alternativeResult: ComplexPower = ZERO_POWER /** Partial function, that is able to transfer * [[ParticipantModelBaseStateData]] (holding the actual calculation model) @@ -108,20 +113,20 @@ class ParticipantAgentMock( override val calculateModelPowerFunc: ( Long, ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ], ConstantState.type, squants.Dimensionless, - ) => ApparentPower = (_, _, _, _) => + ) => ComplexPower = (_, _, _, _) => // output different from default (0, 0) - ApparentPower( + ComplexPower( Megawatts(2.0), Megavars(1.0), ) @@ -144,19 +149,19 @@ class ParticipantAgentMock( */ override def calculatePowerWithSecondaryDataAndGoToIdle( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ], modelState: ConstantState.type, currentTick: Long, scheduler: ActorRef, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = throw new InvalidRequestException( "Request to calculate power with secondary data cannot be processed for this mock agent." ) @@ -196,35 +201,35 @@ class ParticipantAgentMock( outputConfig: NotifierConfig, maybeEmAgent: Option[TypedActorRef[FlexResponse]], ): ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, - SystemParticipant[FixedRelevantData.type, ApparentPower, ConstantState.type], + SystemParticipant[FixedRelevantData.type, ComplexPower, ConstantState.type], ] = { val func = CosPhiFixed(0.95).activeToReactivePowerFunc( - Kilowatts(0.0), + Kilovoltamperes(0.0), 0.95d, Each(1.0), ) val participant: SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ] = mock[SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ]] doReturn(func).when(participant).activeToReactivePowerFunc(any()) ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ]( @@ -267,13 +272,13 @@ class ParticipantAgentMock( simulationEndDate: ZonedDateTime, ): SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ] = { val mockModel = mock[SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ]] val uuid = inputModel.electricalInputModel.getUuid @@ -283,12 +288,12 @@ class ParticipantAgentMock( override protected def createInitialState( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ] @@ -297,12 +302,12 @@ class ParticipantAgentMock( override protected def createCalcRelevantData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, FixedRelevantData.type, ConstantState.type, SystemParticipant[ FixedRelevantData.type, - ApparentPower, + ComplexPower, ConstantState.type, ], ], @@ -320,9 +325,9 @@ class ParticipantAgentMock( * [[Idle]] with updated result values */ override def finalizeTickAfterPF( - baseStateData: BaseStateData[ApparentPower], + baseStateData: BaseStateData[ComplexPower], currentTick: Long, - ): FSM.State[AgentState, ParticipantStateData[ApparentPower]] = + ): FSM.State[AgentState, ParticipantStateData[ComplexPower]] = goto(Idle) using baseStateData /** Determine the average result within the given tick window @@ -339,13 +344,13 @@ class ParticipantAgentMock( * The averaged result */ override def averageResults( - tickToResults: Map[Long, ApparentPower], + tickToResults: Map[Long, ComplexPower], windowStart: Long, windowEnd: Long, activeToReactivePowerFuncOpt: Option[ squants.Power => ReactivePower ] = None, - ): ApparentPower = + ): ComplexPower = ParticipantAgentFundamentals.averageApparentPower( tickToResults, windowStart, @@ -368,7 +373,7 @@ class ParticipantAgentMock( override protected def buildResult( uuid: UUID, dateTime: ZonedDateTime, - result: ApparentPower, + result: ComplexPower, ): SystemParticipantResult = new SystemParticipantResult( dateTime, @@ -395,12 +400,12 @@ class ParticipantAgentMock( override def handleControlledPowerChange( tick: Long, baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, CalcRelevantData.FixedRelevantData.type, ModelState.ConstantState.type, SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ModelState.ConstantState.type, ], ], @@ -409,12 +414,12 @@ class ParticipantAgentMock( setPower: squants.Power, ): ( ModelState.ConstantState.type, - AccompaniedSimulationResult[ApparentPower], + AccompaniedSimulationResult[ComplexPower], FlexChangeIndicator, ) = ( ConstantState, AccompaniedSimulationResult( - ApparentPower( + ComplexPower( Kilowatts(0.0), Kilovars(0.0), ), @@ -446,7 +451,7 @@ class ParticipantAgentMock( nodalVoltage: squants.Dimensionless, model: SystemParticipant[ CalcRelevantData.FixedRelevantData.type, - ApparentPower, + ComplexPower, ModelState.ConstantState.type, ], ): ModelState.ConstantState.type = modelState @@ -458,7 +463,7 @@ object ParticipantAgentMock { initStateData: ParticipantInitializeStateData[ SystemParticipantInput, SimonaConfig.BaseRuntimeConfig, - ApparentPower, + ComplexPower, ], ): Props = Props( diff --git a/src/test/scala/edu/ie3/simona/agent/participant/PvAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/PvAgentModelCalculationSpec.scala index 4d480f154c..071a5fa2c7 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/PvAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/PvAgentModelCalculationSpec.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.pv.PvAgent import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData @@ -122,7 +122,7 @@ class PvAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ PvInput, PvRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -186,7 +186,7 @@ class PvAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ PvInput, PvRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -314,7 +314,7 @@ class PvAgentModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower](resolution) + requestValueStore shouldBe ValueStore[ComplexPower](resolution) /* Additional information */ awaitRegistrationResponsesFrom shouldBe Iterable(weatherService.ref) @@ -397,11 +397,11 @@ class PvAgentModelCalculationSpec inside(pvAgent.stateData) { case baseStateData: ParticipantModelBaseStateData[_, _, _, _] => baseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) @@ -509,7 +509,7 @@ class PvAgentModelCalculationSpec 0L, fail("Expected a simulation result for tick 900."), ) match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.0)) q should approximate(Megavars(0.0)) } @@ -613,7 +613,7 @@ class PvAgentModelCalculationSpec 0L, fail("Expected a simulation result for tick 0."), ) match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.0)) q should approximate(Megavars(0.0)) } diff --git a/src/test/scala/edu/ie3/simona/agent/participant/RichValueSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/RichValueSpec.scala index 5710c15417..0c8b16b35b 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/RichValueSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/RichValueSpec.scala @@ -18,8 +18,8 @@ import edu.ie3.simona.agent.participant.data.Data.PrimaryData import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ ActivePower, ActivePowerAndHeat, - ApparentPower, - ApparentPowerAndHeat, + ComplexPower, + ComplexPowerAndHeat, RichValue, } import edu.ie3.simona.test.common.UnitSpec @@ -116,7 +116,7 @@ class RichValueSpec extends UnitSpec with TableDrivenPropertyChecks { Quantities.getQuantity(50d, PowerSystemUnits.KILOWATT), Quantities.getQuantity(25d, PowerSystemUnits.KILOVAR), ), - ApparentPower( + ComplexPower( Kilowatts(50d), Kilovars(25d), ), @@ -127,7 +127,7 @@ class RichValueSpec extends UnitSpec with TableDrivenPropertyChecks { Quantities.getQuantity(25d, PowerSystemUnits.KILOVAR), Quantities.getQuantity(12.5, PowerSystemUnits.KILOWATT), ), - ApparentPowerAndHeat( + ComplexPowerAndHeat( Kilowatts(50d), Kilovars(25d), Kilowatts(12.5), diff --git a/src/test/scala/edu/ie3/simona/agent/participant/StorageAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/StorageAgentModelCalculationSpec.scala index 06035ed30d..aa4d1984e5 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/StorageAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/StorageAgentModelCalculationSpec.scala @@ -13,7 +13,7 @@ import edu.ie3.datamodel.models.result.system.StorageResult import edu.ie3.simona.agent.ValueStore import edu.ie3.simona.agent.grid.GridAgentMessages.AssetPowerChangedMessage import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.ParticipantStateData.{ ParticipantInitializeStateData, @@ -110,7 +110,7 @@ class StorageAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ StorageInput, StorageRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = storageInputQv, modelConfig = modelConfig, @@ -219,7 +219,7 @@ class StorageAgentModelCalculationSpec resultValueStore shouldBe ValueStore( resolution ) - requestValueStore shouldBe ValueStore[ApparentPower]( + requestValueStore shouldBe ValueStore[ComplexPower]( resolution ) case unrecognized => @@ -271,11 +271,11 @@ class StorageAgentModelCalculationSpec inside(storageAgent.stateData) { case modelBaseStateData: ParticipantModelBaseStateData[_, _, _, _] => modelBaseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) diff --git a/src/test/scala/edu/ie3/simona/agent/participant/WecAgentModelCalculationSpec.scala b/src/test/scala/edu/ie3/simona/agent/participant/WecAgentModelCalculationSpec.scala index 2bcac7bc3c..01d8e24c29 100644 --- a/src/test/scala/edu/ie3/simona/agent/participant/WecAgentModelCalculationSpec.scala +++ b/src/test/scala/edu/ie3/simona/agent/participant/WecAgentModelCalculationSpec.scala @@ -15,7 +15,7 @@ import edu.ie3.simona.agent.grid.GridAgentMessages.{ AssetPowerUnchangedMessage, } import edu.ie3.simona.agent.participant.ParticipantAgent.RequestAssetPowerMessage -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPower +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPower import edu.ie3.simona.agent.participant.data.secondary.SecondaryDataService.ActorWeatherService import edu.ie3.simona.agent.participant.statedata.BaseStateData.ParticipantModelBaseStateData import edu.ie3.simona.agent.participant.statedata.DataCollectionStateData @@ -125,7 +125,7 @@ class WecAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ WecInput, WecRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, simulationStartDate = simulationStartDate, @@ -193,7 +193,7 @@ class WecAgentModelCalculationSpec val initStateData = ParticipantInitializeStateData[ WecInput, WecRuntimeConfig, - ApparentPower, + ComplexPower, ]( inputModel = voltageSensitiveInput, modelConfig = modelConfig, @@ -291,7 +291,7 @@ class WecAgentModelCalculationSpec SortedMap(0L -> Each(1.0)), ) resultValueStore shouldBe ValueStore(resolution) - requestValueStore shouldBe ValueStore[ApparentPower](resolution) + requestValueStore shouldBe ValueStore[ComplexPower](resolution) /* Additional information */ awaitRegistrationResponsesFrom shouldBe Iterable(weatherService.ref) @@ -315,7 +315,7 @@ class WecAgentModelCalculationSpec wecAgent.stateName shouldBe Idle wecAgent.stateData match { case baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -376,17 +376,17 @@ class WecAgentModelCalculationSpec inside(wecAgent.stateData) { case modelBaseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, ] => modelBaseStateData.requestValueStore shouldBe ValueStore[ - ApparentPower + ComplexPower ]( resolution, SortedMap( - 0L -> ApparentPower( + 0L -> ComplexPower( Megawatts(0d), Megavars(0d), ) @@ -452,7 +452,7 @@ class WecAgentModelCalculationSpec wecAgent.stateData match { case DataCollectionStateData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -488,7 +488,7 @@ class WecAgentModelCalculationSpec wecAgent.stateName shouldBe Idle wecAgent.stateData match { case baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -509,7 +509,7 @@ class WecAgentModelCalculationSpec 900L, fail("Expected a simulation result for tick 900."), ) match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.0)) q should approximate(Megavars(0.0)) } @@ -558,7 +558,7 @@ class WecAgentModelCalculationSpec wecAgent.stateData match { case DataCollectionStateData( baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -607,7 +607,7 @@ class WecAgentModelCalculationSpec wecAgent.stateName shouldBe Idle wecAgent.stateData match { case baseStateData: ParticipantModelBaseStateData[ - ApparentPower, + ComplexPower, WecRelevantData, ConstantState.type, WecModel, @@ -628,7 +628,7 @@ class WecAgentModelCalculationSpec 900L, fail("Expected a simulation result for tick 900."), ) match { - case ApparentPower(p, q) => + case ComplexPower(p, q) => p should approximate(Megawatts(0.0)) q should approximate(Megavars(0.0)) } diff --git a/src/test/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatSpec.scala index 6e8556d6ca..e47c309c37 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/ApparentPowerAndHeatSpec.scala @@ -6,17 +6,22 @@ package edu.ie3.simona.model.participant -import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ApparentPowerAndHeat +import edu.ie3.simona.agent.participant.data.Data.PrimaryData.ComplexPowerAndHeat import edu.ie3.simona.model.participant.ApparentPowerAndHeatSpec.ApparentPowerAndHeatMock import edu.ie3.simona.model.participant.CalcRelevantData.FixedRelevantData import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.control.QControl.CosPhiFixed -import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage +import edu.ie3.simona.ontology.messages.flex.MinMaxFlexibilityMessage.ProvideMinMaxFlexOptions import edu.ie3.simona.test.common.UnitSpec import edu.ie3.util.scala.OperationInterval -import edu.ie3.util.scala.quantities.{Megavars, ReactivePower, Vars} -import squants.energy.{Kilowatts, Megawatts, Watts} +import edu.ie3.util.scala.quantities.{ + Kilovoltamperes, + Megavars, + ReactivePower, + Vars, +} +import squants.energy.{Megawatts, Watts} import squants.{Each, Power} import java.util.UUID @@ -33,7 +38,7 @@ class ApparentPowerAndHeatSpec extends UnitSpec { ConstantState, FixedRelevantData, ) match { - case ApparentPowerAndHeat(p, q, qDot) => + case ComplexPowerAndHeat(p, q, qDot) => p should approximate(Megawatts(0d)) q should approximate(Megavars(0d)) qDot should approximate(Megawatts(0d)) @@ -48,7 +53,7 @@ class ApparentPowerAndHeatSpec extends UnitSpec { ConstantState, FixedRelevantData, ) match { - case ApparentPowerAndHeat(p, q, qDot) => + case ComplexPowerAndHeat(p, q, qDot) => p should approximate(Megawatts(43d)) q should approximate(Megavars(0d)) qDot should approximate(Megawatts(42d)) @@ -62,14 +67,14 @@ object ApparentPowerAndHeatSpec { object ApparentPowerAndHeatMock extends SystemParticipant[ FixedRelevantData.type, - ApparentPowerAndHeat, + ComplexPowerAndHeat, ConstantState.type, ]( UUID.randomUUID(), "ParticipantMock", OperationInterval.apply(0L, 42L), CosPhiFixed(0.97), - Kilowatts(42d), + Kilovoltamperes(42d), 0.97, ) with ApparentPowerAndHeatParticipant[ diff --git a/src/test/scala/edu/ie3/simona/model/participant/BMModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/BMModelSpec.scala index 011dbb9567..9aa118c0b3 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/BMModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/BMModelSpec.scala @@ -11,7 +11,7 @@ import edu.ie3.simona.model.participant.ModelState.ConstantState import edu.ie3.simona.model.participant.control.QControl import edu.ie3.simona.test.common.UnitSpec import edu.ie3.util.scala.OperationInterval -import edu.ie3.util.scala.quantities.EuroPerKilowatthour +import edu.ie3.util.scala.quantities.{EuroPerKilowatthour, Kilovoltamperes} import squants.energy.{Kilowatts, Megawatts} import squants.market.EUR import squants.thermal.Celsius @@ -21,7 +21,7 @@ import java.time.ZonedDateTime import java.util.UUID /** Test class that tries to cover all special cases of the current - * implementation of the {@link BMModel} + * implementation of the [[BMModel]] * * Test results have been calculated on paper using equations from wiki: * https://wiki.ie3.e-technik.tu-dortmund.de/!simona/model:bm_model @@ -38,7 +38,7 @@ class BMModelSpec extends UnitSpec { "BM Model Test", OperationInterval(0L, 86400L), QControl(new CosPhiFixed("cosPhiFixed:{(0.0,1.0)}")), - Kilowatts(190), + Kilovoltamperes(190), 1d, "MockNode", isCostControlled = true, @@ -164,7 +164,7 @@ class BMModelSpec extends UnitSpec { "BM Model Test", OperationInterval(0L, 86400L), QControl(new CosPhiFixed("cosPhiFixed:{(0.0,1.0)}")), - Kilowatts(190), + Kilovoltamperes(190), 1d, "MockNode", isCostControlled = true, @@ -174,7 +174,7 @@ class BMModelSpec extends UnitSpec { ) val pElCalc = bmModel.calculateElOutput(usage, eff) - pElCalc.value should be(Kilowatts(pElSol).value +- 1e-4) + pElCalc should approximate(Kilowatts(pElSol)) } } @@ -306,7 +306,7 @@ class BMModelSpec extends UnitSpec { "BM Model Test", OperationInterval(0L, 86400L), QControl(new CosPhiFixed("cosPhiFixed:{(0.0,1.0)}")), - Kilowatts(190), + Kilovoltamperes(190), 1d, "MockNode", costControlled, diff --git a/src/test/scala/edu/ie3/simona/model/participant/ChpModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/ChpModelSpec.scala index 2d4a66da85..91a72ddd63 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/ChpModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/ChpModelSpec.scala @@ -6,9 +6,9 @@ package edu.ie3.simona.model.participant +import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.ChpInput import edu.ie3.datamodel.models.input.system.`type`.ChpTypeInput -import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.system.characteristic.CosPhiFixed import edu.ie3.datamodel.models.input.thermal.{ CylindricalStorageInput, @@ -105,7 +105,7 @@ class ChpModelSpec "ChpModel", null, null, - Kilowatts(100), + Kilovoltamperes(100), 0.95, Kilowatts(50), thermalStorage, diff --git a/src/test/scala/edu/ie3/simona/model/participant/FixedFeedInModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/FixedFeedInModelSpec.scala index 3447a39d7c..be5dc6ac69 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/FixedFeedInModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/FixedFeedInModelSpec.scala @@ -15,8 +15,14 @@ import edu.ie3.simona.test.common.{DefaultTestData, UnitSpec} import edu.ie3.simona.util.ConfigUtil import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.quantities.PowerSystemUnits.MEGAVOLTAMPERE +import edu.ie3.util.scala.quantities.{ + ApparentPower, + Kilovoltamperes, + Megavoltamperes, + Voltamperes, +} import org.scalatest.PrivateMethodTester -import squants.energy.{Kilowatts, Megawatts, Watts} +import squants.energy.Kilowatts class FixedFeedInModelSpec extends UnitSpec @@ -24,9 +30,10 @@ class FixedFeedInModelSpec with DefaultTestData with PrivateMethodTester { - private implicit val powerTolerance: squants.Power = Watts( + // Equals to 1 VA power + private implicit val powerTolerance: ApparentPower = Voltamperes( 1.0 - ) // Equals to 1 W power + ) "The fixed feed in model object" should { @@ -63,7 +70,7 @@ class FixedFeedInModelSpec operationInterval shouldBe defaultOperationInterval qControl shouldBe QControl(fixedFeedInput.getqCharacteristics) sRated should approximate( - Megawatts( + Megavoltamperes( fixedFeedInput.getsRated().to(MEGAVOLTAMPERE).getValue.doubleValue ) ) @@ -85,10 +92,10 @@ class FixedFeedInModelSpec fixedFeedInput.getId, defaultOperationInterval, QControl.apply(fixedFeedInput.getqCharacteristics()), - Kilowatts( + Kilovoltamperes( fixedFeedInput .getsRated() - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue() ), diff --git a/src/test/scala/edu/ie3/simona/model/participant/PvModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/PvModelSpec.scala index 660852e28b..157ff0a041 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/PvModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/PvModelSpec.scala @@ -14,7 +14,9 @@ import edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils import edu.ie3.simona.test.common.{DefaultTestData, UnitSpec} import edu.ie3.util.quantities.PowerSystemUnits._ import edu.ie3.util.scala.quantities.{ + ApparentPower, Irradiation, + Kilovoltamperes, Megavars, ReactivePower, WattHoursPerSquareMeter, @@ -92,6 +94,9 @@ class PvModelSpec extends UnitSpec with GivenWhenThen with DefaultTestData { private implicit val angleTolerance: Angle = Radians(1e-10) private implicit val irradiationTolerance: Irradiation = WattHoursPerSquareMeter(1e-10) + private implicit val apparentPowerTolerance: ApparentPower = Kilovoltamperes( + 1e-10 + ) private implicit val powerTolerance: Power = Kilowatts(1e-10) private implicit val reactivePowerTolerance: ReactivePower = Megavars(1e-10) diff --git a/src/test/scala/edu/ie3/simona/model/participant/SystemParticipantSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/SystemParticipantSpec.scala index 0c36be3e9c..02036d6a62 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/SystemParticipantSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/SystemParticipantSpec.scala @@ -15,7 +15,12 @@ import edu.ie3.simona.model.participant.control.QControl import edu.ie3.simona.test.common.UnitSpec import edu.ie3.simona.test.common.model.MockParticipant import edu.ie3.util.scala.OperationInterval -import edu.ie3.util.scala.quantities.{Kilovars, Megavars, ReactivePower} +import edu.ie3.util.scala.quantities.{ + Kilovars, + Kilovoltamperes, + Megavars, + ReactivePower, +} import org.scalatest.matchers.should.Matchers import squants._ import squants.energy._ @@ -52,7 +57,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { "System participant calculateQ Test", OperationInterval(0L, 86400L), QControl(new CosPhiFixed(varCharacteristicString)), - Kilowatts(200), + Kilovoltamperes(200), 1d, ) val power = Kilowatts(pVal) @@ -92,7 +97,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { QControl( new CosPhiP(varCharacteristicString) ), - Kilowatts(102), + Kilovoltamperes(102), 1d, ) val power = Kilowatts(pVal) @@ -130,13 +135,12 @@ class SystemParticipantSpec extends UnitSpec with Matchers { QControl( new CosPhiP(varCharacteristicString) ), - Kilowatts(101), + Kilovoltamperes(101), 1d, ) val power = Kilowatts(pVal) val qCalc = loadMock.calculateReactivePower(power, adjustedVoltage) qCalc should approximate(qSol) - } } @@ -146,7 +150,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { "System participant calculateQ Test", OperationInterval(0L, 86400L), QControl(new QV("qV:{(0.93,-1),(0.97,0),(1,0),(1.03,0),(1.07,1)}")), - Kilowatts(200), + Kilovoltamperes(200), 0.98, ) @@ -177,7 +181,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { "System participant calculateQ Test", OperationInterval(0L, 86400L), QControl(new QV("qV:{(0.93,-1),(0.97,0),(1,0),(1.03,0),(1.07,1)}")), - Kilowatts(200), + Kilovoltamperes(200), 1d, ) @@ -208,7 +212,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { "System participant calculateQ Test", OperationInterval(0L, 86400L), QControl(new QV("qV:{(0.93,-1),(0.97,0),(1,0),(1.03,0),(1.07,1)}")), - Kilowatts(200), + Kilovoltamperes(200), 0.95, ) @@ -240,7 +244,7 @@ class SystemParticipantSpec extends UnitSpec with Matchers { "System participant calculateQ Test", OperationInterval(0L, 86400L), QControl(new QV("qV:{(0.93,-1),(0.97,0),(1,0),(1.03,0),(1.07,1)}")), - Kilowatts(200), + Kilovoltamperes(200), 0.95, ) diff --git a/src/test/scala/edu/ie3/simona/model/participant/WecModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/WecModelSpec.scala index 82f69d3b0d..52fbbee023 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/WecModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/WecModelSpec.scala @@ -95,7 +95,7 @@ class WecModelSpec extends UnitSpec with DefaultTestData { wecModel.rotorArea.toSquareMeters shouldBe (typeInput.getRotorArea.toSystemUnit.getValue .doubleValue() +- 1e-5) wecModel.cosPhiRated shouldBe typeInput.getCosPhiRated - wecModel.sRated.toWatts shouldBe (typeInput.getsRated.toSystemUnit.getValue + wecModel.sRated.toVoltamperes shouldBe (typeInput.getsRated.toSystemUnit.getValue .doubleValue() +- 1e-5) wecModel.betzCurve shouldBe WecModel.WecCharacteristic.apply( inputModel.getType.getCpCharacteristic diff --git a/src/test/scala/edu/ie3/simona/model/participant/evcs/EvcsModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/evcs/EvcsModelSpec.scala index 358090b0a3..67d757c55e 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/evcs/EvcsModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/evcs/EvcsModelSpec.scala @@ -188,8 +188,8 @@ class EvcsModelSpec actualEv.uuid shouldBe ev.uuid actualEv.id shouldBe ev.id - actualEv.sRatedAc shouldBe ev.sRatedAc - actualEv.sRatedDc shouldBe ev.sRatedDc + actualEv.pRatedAc shouldBe ev.pRatedAc + actualEv.pRatedDc shouldBe ev.pRatedDc actualEv.eStorage shouldBe ev.eStorage actualEv.storedEnergy should approximate( KilowattHours(expectedStored) @@ -812,7 +812,7 @@ class EvcsModelSpec modelUuid shouldBe evcsModel.getUuid refPower should approximate(Kilowatts(5.0)) // one hour left minPower should approximate(Kilowatts(0d)) // no v2g allowed! - maxPower should approximate(ev1.sRatedAc) + maxPower should approximate(ev1.pRatedAc) } } diff --git a/src/test/scala/edu/ie3/simona/model/participant/evcs/uncontrolled/MaximumPowerChargingSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/evcs/uncontrolled/MaximumPowerChargingSpec.scala index a53b82981e..39f9a52564 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/evcs/uncontrolled/MaximumPowerChargingSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/evcs/uncontrolled/MaximumPowerChargingSpec.scala @@ -85,7 +85,7 @@ class MaximumPowerChargingSpec ScheduleEntry( offset, offset + expectedDuration, - ev.sRatedAc, + ev.pRatedAc, ) ) ) diff --git a/src/test/scala/edu/ie3/simona/model/participant/load/FixedLoadModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/load/FixedLoadModelSpec.scala index 1682d21b0c..6a75bd93e5 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/load/FixedLoadModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/load/FixedLoadModelSpec.scala @@ -16,9 +16,10 @@ import edu.ie3.simona.model.participant.load.LoadReference.{ import edu.ie3.simona.test.common.input.LoadInputTestData import edu.ie3.simona.test.common.{DefaultTestData, UnitSpec} import edu.ie3.util.quantities.PowerSystemUnits +import edu.ie3.util.scala.quantities.Kilovoltamperes import org.scalatest.prop.TableDrivenPropertyChecks import squants.Power -import squants.energy.{KilowattHours, Kilowatts, Watts} +import squants.energy.{KilowattHours, Watts} class FixedLoadModelSpec extends UnitSpec @@ -50,9 +51,9 @@ class FixedLoadModelSpec loadInput.getId, defaultOperationInterval, QControl.apply(loadInput.getqCharacteristics), - Kilowatts( + Kilovoltamperes( loadInput.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue() ), @@ -84,9 +85,9 @@ class FixedLoadModelSpec loadInput.getId, defaultOperationInterval, QControl.apply(loadInput.getqCharacteristics), - Kilowatts( + Kilovoltamperes( loadInput.getsRated - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue() ), @@ -119,7 +120,7 @@ class FixedLoadModelSpec LazyList.iterate(0.0)(_ + 0.1).takeWhile(_ <= 2.0) scales.foreach { scale => - val scaledSRated = Kilowatts( + val scaledSRated = Kilovoltamperes( loadInput.getsRated .to(PowerSystemUnits.KILOWATT) .getValue diff --git a/src/test/scala/edu/ie3/simona/model/participant/load/LoadModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/load/LoadModelSpec.scala index 8d29d36b32..cca01b7904 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/load/LoadModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/load/LoadModelSpec.scala @@ -11,6 +11,7 @@ import edu.ie3.simona.model.participant.load.profile.ProfileLoadModel import edu.ie3.simona.model.participant.load.random.RandomLoadModel import edu.ie3.simona.test.common.UnitSpec import edu.ie3.simona.test.common.input.LoadInputTestData +import edu.ie3.util.scala.quantities.{ApparentPower, Voltamperes} import org.scalatest.PrivateMethodTester import org.scalatest.prop.TableDrivenPropertyChecks import squants.energy.{KilowattHours, Power, Watts} @@ -21,7 +22,7 @@ class LoadModelSpec with PrivateMethodTester with TableDrivenPropertyChecks { - private implicit val powerTolerance: Power = Watts(1e-3) + private implicit val powerTolerance: ApparentPower = Voltamperes(1e-3) "The load model object" should { @@ -32,27 +33,31 @@ class LoadModelSpec ( LoadReference.ActivePower(Watts(268.6)), 1d, - Watts(282.7368), + Voltamperes(282.7368), ), ( LoadReference.EnergyConsumption(KilowattHours(3000.0)), 1d, - Watts(848.2105), + Voltamperes(848.2105), ), ( LoadReference.ActivePower(Watts(268.6)), 1.5d, - Watts(424.1053), + Voltamperes(424.1053), ), ( LoadReference.EnergyConsumption(KilowattHours(3000.0)), 1.5d, - Watts(1272.3158), + Voltamperes(1272.3158), ), ) forAll(params) { - (reference: LoadReference, scaling: Double, expectedSRated: Power) => + ( + reference: LoadReference, + scaling: Double, + expectedSRated: ApparentPower, + ) => { val actual = ProfileLoadModel( loadInput, @@ -91,27 +96,31 @@ class LoadModelSpec ( LoadReference.ActivePower(Watts(268.6)), 1d, - Watts(311.0105), + Voltamperes(311.0105), ), ( LoadReference.EnergyConsumption(KilowattHours(3000.0)), 1d, - Watts(770.8076), + Voltamperes(770.8076), ), ( LoadReference.ActivePower(Watts(268.6)), 1.5d, - Watts(466.5158), + Voltamperes(466.5158), ), ( LoadReference.EnergyConsumption(KilowattHours(3000.0)), 1.5d, - Watts(1156.2114), + Voltamperes(1156.2114), ), ) forAll(params) { - (reference: LoadReference, scaling: Double, expectedSRated: Power) => + ( + reference: LoadReference, + scaling: Double, + expectedSRated: ApparentPower, + ) => { val actual = RandomLoadModel( loadInput, diff --git a/src/test/scala/edu/ie3/simona/model/participant/load/LoadProfileStoreSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/load/LoadProfileStoreSpec.scala index 358da83a31..6b5d7ee5b2 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/load/LoadProfileStoreSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/load/LoadProfileStoreSpec.scala @@ -16,6 +16,7 @@ import edu.ie3.simona.model.participant.load.profile.{ } import edu.ie3.simona.test.common.UnitSpec import edu.ie3.util.TimeUtil +import edu.ie3.util.scala.quantities.Voltamperes import org.scalatest.PrivateMethodTester import org.scalatest.prop.TableDrivenPropertyChecks import squants.energy.{KilowattHours, Watts} diff --git a/src/test/scala/edu/ie3/simona/model/participant/load/ProfileLoadModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/load/ProfileLoadModelSpec.scala index 74077a250b..0cd81c66b5 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/load/ProfileLoadModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/load/ProfileLoadModelSpec.scala @@ -21,8 +21,8 @@ import edu.ie3.simona.model.participant.load.profile.ProfileLoadModel import edu.ie3.simona.test.common.UnitSpec import edu.ie3.util.TimeUtil import edu.ie3.util.quantities.PowerSystemUnits +import edu.ie3.util.scala.quantities.{ApparentPower, Voltamperes} import org.scalatest.prop.TableDrivenPropertyChecks -import squants.Power import squants.energy.{KilowattHours, Watts} import tech.units.indriya.quantity.Quantities @@ -30,7 +30,7 @@ import java.util.UUID class ProfileLoadModelSpec extends UnitSpec with TableDrivenPropertyChecks { - private implicit val tolerance: Power = Watts(1d) + private implicit val tolerance: ApparentPower = Voltamperes(1d) "Having a profile load model" when { val loadInput = @@ -78,38 +78,38 @@ class ProfileLoadModelSpec extends UnitSpec with TableDrivenPropertyChecks { ( BdewStandardLoadProfile.H0, ActivePower(Watts(268.6)), - Watts(282.74d), + Voltamperes(282.74d), ), ( BdewStandardLoadProfile.H0, EnergyConsumption( KilowattHours(3000d) ), - Watts(848.22d), + Voltamperes(848.22d), ), ( BdewStandardLoadProfile.L0, ActivePower(Watts(268.6)), - Watts(282.74d), + Voltamperes(282.74d), ), ( BdewStandardLoadProfile.L0, EnergyConsumption( KilowattHours(3000d) ), - Watts(759.158d), + Voltamperes(759.158d), ), ( BdewStandardLoadProfile.G0, ActivePower(Watts(268.6)), - Watts(282.74d), + Voltamperes(282.74d), ), ( BdewStandardLoadProfile.G0, EnergyConsumption( KilowattHours(3000d) ), - Watts(759.158d), + Voltamperes(759.158d), ), ) ) { (profile, reference, expectedSRated) => diff --git a/src/test/scala/edu/ie3/simona/model/participant/load/RandomLoadModelSpec.scala b/src/test/scala/edu/ie3/simona/model/participant/load/RandomLoadModelSpec.scala index 08457fc4c8..eb57409b0d 100644 --- a/src/test/scala/edu/ie3/simona/model/participant/load/RandomLoadModelSpec.scala +++ b/src/test/scala/edu/ie3/simona/model/participant/load/RandomLoadModelSpec.scala @@ -26,15 +26,19 @@ import edu.ie3.simona.model.participant.load.random.{ import edu.ie3.simona.test.common.UnitSpec import edu.ie3.util.TimeUtil import edu.ie3.util.quantities.PowerSystemUnits +import edu.ie3.util.scala.quantities.{ + ApparentPower, + Kilovoltamperes, + Voltamperes, +} import org.scalatest.prop.TableDrivenPropertyChecks -import squants.Power -import squants.energy.{KilowattHours, Kilowatts, Watts} +import squants.energy.{KilowattHours, Watts} import tech.units.indriya.quantity.Quantities import java.util.UUID class RandomLoadModelSpec extends UnitSpec with TableDrivenPropertyChecks { - implicit val tolerance: Power = Watts(1d) + implicit val tolerance: ApparentPower = Voltamperes(1d) "Having a random load model" when { val loadInput = new LoadInput( @@ -78,11 +82,11 @@ class RandomLoadModelSpec extends UnitSpec with TableDrivenPropertyChecks { val testData = Table( ("reference", "expectedSRated"), - (ActivePower(Watts(268.6)), Watts(311.0105263157895d)), - (EnergyConsumption(KilowattHours(2000d)), Watts(513.871737d)), + (ActivePower(Watts(268.6)), Voltamperes(311.0105263157895d)), + (EnergyConsumption(KilowattHours(2000d)), Voltamperes(513.871737d)), ) - forAll(testData) { (reference, expectedSRated: Power) => + forAll(testData) { (reference, expectedSRated: ApparentPower) => val actual = RandomLoadModel( loadInput, foreSeenOperationInterval, @@ -102,10 +106,10 @@ class RandomLoadModelSpec extends UnitSpec with TableDrivenPropertyChecks { loadInput.getId, foreSeenOperationInterval, QControl.apply(loadInput.getqCharacteristics()), - Kilowatts( + Kilovoltamperes( loadInput .getsRated() - .to(PowerSystemUnits.KILOWATT) + .to(PowerSystemUnits.KILOVOLTAMPERE) .getValue .doubleValue() ), diff --git a/src/test/scala/edu/ie3/simona/service/primary/PrimaryServiceWorkerSqlIT.scala b/src/test/scala/edu/ie3/simona/service/primary/PrimaryServiceWorkerSqlIT.scala index 2b7023daa3..9a50b4fce9 100644 --- a/src/test/scala/edu/ie3/simona/service/primary/PrimaryServiceWorkerSqlIT.scala +++ b/src/test/scala/edu/ie3/simona/service/primary/PrimaryServiceWorkerSqlIT.scala @@ -15,7 +15,7 @@ import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy import edu.ie3.datamodel.models.value.{HeatAndSValue, PValue} import edu.ie3.simona.agent.participant.data.Data.PrimaryData.{ ActivePower, - ApparentPowerAndHeat, + ComplexPowerAndHeat, } import edu.ie3.simona.config.SimonaConfig.Simona.Input.Primary.SqlParams import edu.ie3.simona.ontology.messages.Activation @@ -107,7 +107,7 @@ class PrimaryServiceWorkerSqlIT ), uuidPqh, 0L, - ApparentPowerAndHeat( + ComplexPowerAndHeat( Kilowatts(1000.0), Kilovars(329.0), Kilowatts(8000.0), diff --git a/src/test/scala/edu/ie3/simona/test/common/input/HpInputTestData.scala b/src/test/scala/edu/ie3/simona/test/common/input/HpInputTestData.scala index c2f5fed9ea..a2ec9c70b0 100644 --- a/src/test/scala/edu/ie3/simona/test/common/input/HpInputTestData.scala +++ b/src/test/scala/edu/ie3/simona/test/common/input/HpInputTestData.scala @@ -23,6 +23,7 @@ import edu.ie3.simona.model.thermal.ThermalHouse.ThermalHouseState import edu.ie3.simona.model.thermal._ import edu.ie3.util.quantities.PowerSystemUnits import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.Kilovoltamperes import squants.energy.{KilowattHours, Kilowatts} import squants.thermal.Celsius import squants.{Power, Temperature} @@ -61,7 +62,7 @@ trait HpInputTestData extends NodeInputTestData with ThermalGridTestData { "HpModel", OperationInterval.apply(0L, 86400L), QControl.CosPhiFixed(0.95), - Kilowatts(100d), + Kilovoltamperes(100d), 0.95, Kilowatts(15d), thermalGrid, diff --git a/src/test/scala/edu/ie3/simona/test/common/model/MockParticipant.scala b/src/test/scala/edu/ie3/simona/test/common/model/MockParticipant.scala index ad407dbfb4..fdd518cb4b 100644 --- a/src/test/scala/edu/ie3/simona/test/common/model/MockParticipant.scala +++ b/src/test/scala/edu/ie3/simona/test/common/model/MockParticipant.scala @@ -16,6 +16,7 @@ import edu.ie3.simona.model.participant.{ } import edu.ie3.simona.ontology.messages.flex.FlexibilityMessage import edu.ie3.util.scala.OperationInterval +import edu.ie3.util.scala.quantities.ApparentPower import squants.Dimensionless import squants.energy._ @@ -26,11 +27,11 @@ class MockParticipant( id: String, operationInterval: OperationInterval, qControl: QControl, - sRated: Power, + sRated: ApparentPower, cosPhiRated: Double, ) extends SystemParticipant[ CalcRelevantData, - Data.PrimaryData.ApparentPower, + Data.PrimaryData.ComplexPower, ModelState, ]( uuid, @@ -46,7 +47,7 @@ class MockParticipant( voltage: Dimensionless, state: ModelState, data: CalcRelevantData, - ): Data.PrimaryData.ApparentPower = { + ): Data.PrimaryData.ComplexPower = { super.calculateApparentPower(tick, voltage, state, data) }