@@ -14,6 +14,7 @@ mutable struct Simulation{T <: SimulationModel}
14
14
console_level:: Base.CoreLogging.LogLevel
15
15
file_level:: Base.CoreLogging.LogLevel
16
16
multimachine:: Bool
17
+ frequency_reference:: Union{ConstantFrequency, ReferenceBus}
17
18
end
18
19
19
20
get_system (sim:: Simulation ) = sim. sys
@@ -31,6 +32,7 @@ function Simulation(
31
32
simulation_folder,
32
33
console_level,
33
34
file_level,
35
+ frequency_reference,
34
36
) where {T <: SimulationModel }
35
37
PSY. set_units_base_system! (sys, " DEVICE_BASE" )
36
38
@@ -50,6 +52,7 @@ function Simulation(
50
52
console_level,
51
53
file_level,
52
54
false ,
55
+ frequency_reference,
53
56
)
54
57
end
55
58
@@ -123,6 +126,7 @@ function Simulation!(
123
126
perturbations = perturbations,
124
127
console_level = get (kwargs, :console_level , Logging. Warn),
125
128
file_level = get (kwargs, :file_level , Logging. Info),
129
+ frequency_reference = get (kwargs, :frequency_reference , ReferenceBus ()),
126
130
)
127
131
128
132
build! (sim; kwargs... )
@@ -181,6 +185,7 @@ function Simulation(
181
185
perturbations = perturbations,
182
186
console_level = get (kwargs, :console_level , Logging. Warn),
183
187
file_level = get (kwargs, :file_level , Logging. Info),
188
+ frequency_reference = get (kwargs, :frequency_reference , ReferenceBus ()),
184
189
)
185
190
build! (sim; kwargs... )
186
191
if get (kwargs, :system_to_file , false )
191
196
192
197
function reset! (sim:: Simulation{T} ) where {T <: SimulationModel }
193
198
@info " Rebuilding the simulation after reset"
194
- sim. inputs = SimulationInputs (T (), get_system (sim), sim. inputs. tspan)
199
+ sim. inputs = SimulationInputs (T, get_system (sim), sim. frequency_reference)
200
+ sim. status = BUILD_INCOMPLETE
195
201
build! (sim)
196
202
@info " Simulation reset to status $(sim. status) "
197
203
return
@@ -212,12 +218,9 @@ function configure_logging(sim::Simulation, file_mode; kwargs...)
212
218
)
213
219
end
214
220
215
- function _build_inputs! (
216
- sim:: Simulation{T} ,
217
- frequency_reference,
218
- ) where {T <: SimulationModel }
221
+ function _build_inputs! (sim:: Simulation{T} ) where {T <: SimulationModel }
219
222
simulation_system = get_system (sim)
220
- sim. inputs = SimulationInputs (T, simulation_system, frequency_reference)
223
+ sim. inputs = SimulationInputs (T, simulation_system, sim . frequency_reference)
221
224
@debug " Simulation Inputs Created"
222
225
return
223
226
end
@@ -268,9 +271,7 @@ function _pre_initialize_simulation!(sim::Simulation)
268
271
)
269
272
end
270
273
else
271
- @warn (
272
- " No Pre-initialization conducted. If this is unexpected, check the initialization keywords"
273
- )
274
+ @warn (" Using existing initial conditions value for simulation initialization" )
274
275
sim. status = SIMULATION_INITIALIZED
275
276
end
276
277
return
@@ -386,9 +387,7 @@ function _build!(sim::Simulation{T}; kwargs...) where {T <: SimulationModel}
386
387
end
387
388
end
388
389
TimerOutputs. @timeit BUILD_TIMER " Build Simulation Inputs" begin
389
- f_ref = get (kwargs, :frequency_reference , ReferenceBus)
390
- _build_inputs! (sim, f_ref)
391
- # TODO : Update and store f_ref somewhere.
390
+ _build_inputs! (sim)
392
391
sim. multimachine =
393
392
get_global_vars_update_pointers (sim. inputs)[GLOBAL_VAR_SYS_FREQ_INDEX] !=
394
393
0
@@ -445,18 +444,19 @@ function build!(sim; kwargs...)
445
444
return sim. status
446
445
end
447
446
448
- function simulation_pre_step! (sim:: Simulation , reset_sim :: Bool )
447
+ function simulation_pre_step! (sim:: Simulation )
449
448
if sim. status == BUILD_FAILED
450
449
error (
451
450
" The Simulation status is $(sim. status) . Can not continue, correct your inputs and build the simulation again." ,
452
451
)
453
- elseif sim. status != BUILT && ! reset_sim
454
- error (
455
- " The Simulation status is $(sim. status) . Use keyword argument reset_simulation = true" ,
456
- )
452
+ elseif sim. status == BUILT
453
+ @debug " Simulation status is $(sim. status) ."
454
+ elseif sim. status == SIMULATION_FINALIZED
455
+ reset! (sim)
456
+ @info " The Simulation status is $(sim. status) . Resetting the simulation"
457
+ else
458
+ error (" Simulation status is $(sim. status) . Can't continue." )
457
459
end
458
-
459
- reset_sim && reset! (sim)
460
460
return
461
461
end
462
462
@@ -466,9 +466,13 @@ function _prog_meter_enabled()
466
466
(get (ENV , " RUNNING_PSID_TESTS" , nothing ) != " true" )
467
467
end
468
468
469
+ function _filter_kwargs (kwargs)
470
+ return Dict (k => v for (k, v) in kwargs if in (k, DIFFEQ_SOLVE_KWARGS))
471
+ end
472
+
469
473
function _execute! (sim:: Simulation , solver; kwargs... )
470
474
@debug " status before execute" sim. status
471
- simulation_pre_step! (sim, get (kwargs, :reset_simulation , false ) )
475
+ simulation_pre_step! (sim)
472
476
sim. status = SIMULATION_STARTED
473
477
time_log = Dict {Symbol, Any} ()
474
478
if get (kwargs, :auto_abstol , false )
@@ -490,7 +494,7 @@ function _execute!(sim::Simulation, solver; kwargs...)
490
494
progress_steps = 1 ,
491
495
advance_to_tstop = ! isempty (sim. tstops),
492
496
initializealg = SciMLBase. NoInit (),
493
- kwargs... ,
497
+ _filter_kwargs ( kwargs) ... ,
494
498
)
495
499
if solution. retcode == :Success
496
500
sim. status = SIMULATION_FINALIZED
0 commit comments