Skip to content

Commit

Permalink
Merge #186
Browse files Browse the repository at this point in the history
186: Restructure main to have single update function r=charleskawczynski a=charleskawczynski

This PR restructures `main.jl` so that there is a single update function. This means that
```julia
        TC.zero_tendencies(self.GMV)
        Cases.update_surface(self.Case, self.GMV, self.TS)
        Cases.update_forcing(self.Case, self.GMV, self.TS)
        Cases.update_radiation(self.Case, self.GMV, self.TS)

        TC.update(self.GMV, self.TS)
        TC.update_GMV_diagnostics(self.Turb, self.GMV)
```
moves inside `TC.update`. This way, we can decompose `TC.update` into
 - Update aux (compute diagnostic and non-local quantities)
 - Compute RHS (compute `tendencies`, not `new`)
 - Solve eqs (`values = values + Δt*tendencies` + implicit solves)


Co-authored-by: Charles Kawczynski <kawczynski.charles@gmail.com>
  • Loading branch information
bors[bot] and charleskawczynski committed Aug 30, 2021
2 parents 47a392f + be9a5f9 commit 230dcd2
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 138 deletions.
84 changes: 42 additions & 42 deletions integration_tests/utils/Cases.jl
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@ function TC.io(self::CasesBase, Stats::NetCDFIO_Stats, ::BaseCase)
write_ts(Stats, "ustar", self.Sur.ustar)
end

update_surface(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing
update_forcing(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing
update_radiation(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing
TC.update_surface(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing
TC.update_forcing(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing
TC.update_radiation(self::CasesBase, GMV::GridMeanVariables, TS::TimeStepping, ::BaseCase) = nothing

#####
##### Soares
Expand Down Expand Up @@ -238,14 +238,14 @@ end
function TC.io(self::CasesBase{Soares}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end
function update_surface(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end
function update_forcing(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end

function update_radiation(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{Soares}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -338,13 +338,13 @@ function TC.io(self::CasesBase{Nieuwstadt}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end
function update_forcing(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{Nieuwstadt}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -481,10 +481,10 @@ TC.initialize_io(self::CasesBase{Bomex}, Stats::NetCDFIO_Stats) = initialize_io(

TC.io(self::CasesBase{Bomex}, Stats::NetCDFIO_Stats) = io(self, Stats, BaseCase())

update_surface(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Sur, GMV)
TC.update_surface(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Sur, GMV)

update_forcing(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Fo, GMV)
update_radiation(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Rad, GMV)
TC.update_forcing(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Fo, GMV)
TC.update_radiation(self::CasesBase{Bomex}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Rad, GMV)

#####
##### life_cycle_Tan2018
Expand Down Expand Up @@ -635,7 +635,7 @@ end
function TC.io(self::CasesBase{life_cycle_Tan2018}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end
function update_surface(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
param_set = TC.parameter_set(GMV)
g = CPP.grav(param_set)
weight = 1.0
Expand All @@ -651,10 +651,10 @@ function update_surface(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariab
)
update(self.Sur, GMV)
end
function update_forcing(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{life_cycle_Tan2018}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -773,14 +773,14 @@ end
function TC.io(self::CasesBase{Rico}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end
function update_surface(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end

function update_forcing(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{Rico}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1067,7 +1067,7 @@ function TC.io(self::CasesBase{TRMM_LBA}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)
self.Sur.lhf = 554.0 * max(0, cos/ 2 * ((5.25 * 3600.0 - TS.t) / 5.25 / 3600.0)))^1.3
self.Sur.shf = 270.0 * max(0, cos/ 2 * ((5.25 * 3600.0 - TS.t) / 5.25 / 3600.0)))^1.5
update(self.Sur, GMV)
Expand All @@ -1076,7 +1076,7 @@ function update_surface(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::T
self.Sur.rho_vflux = 0.0
end

function update_forcing(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)

Gr = self.Fo.Gr
ind2 = Int(ceil(TS.t / 600.0)) + 1
Expand Down Expand Up @@ -1106,7 +1106,7 @@ function update_forcing(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::T

end

function update_radiation(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{TRMM_LBA}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1196,7 +1196,7 @@ function TC.io(self::CasesBase{ARM_SGP}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
t_Sur_in = off_arr([0.0, 4.0, 6.5, 7.5, 10.0, 12.5, 14.5]) .* 3600 #LES time is in sec
SH = off_arr([-30.0, 90.0, 140.0, 140.0, 100.0, -10, -10]) # W/m^2
LH = off_arr([5.0, 250.0, 450.0, 500.0, 420.0, 180.0, 0.0]) # W/m^2
Expand All @@ -1215,7 +1215,7 @@ function update_surface(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::Ti
self.Sur.rho_vflux = 0.0
end

function update_forcing(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
t_in = off_arr([0.0, 3.0, 6.0, 9.0, 12.0, 14.5]) .* 3600.0 #LES time is in sec
AT_in = off_arr([0.0, 0.0, 0.0, -0.08, -0.016, -0.016]) ./ 3600.0 # Advective forcing for theta [K/h] converted to [K/sec]
RT_in = off_arr([-0.125, 0.0, 0.0, 0.0, 0.0, -0.1]) ./ 3600.0 # Radiative forcing for theta [K/h] converted to [K/sec]
Expand All @@ -1235,7 +1235,7 @@ function update_forcing(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::Ti
update(self.Fo, GMV)
end

function update_radiation(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{ARM_SGP}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1364,14 +1364,14 @@ function TC.io(self::CasesBase{GATE_III}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV) # here lhf and shf are needed for calcualtion of bflux in surface and thus u_star
end

function update_forcing(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{GATE_III}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1518,14 +1518,14 @@ function TC.io(self::CasesBase{DYCOMS_RF01}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
io(self.Fo, Stats)
end
function update_surface(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end
function update_forcing(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end

function update_radiation(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{DYCOMS_RF01}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1619,15 +1619,15 @@ function TC.io(self::CasesBase{GABLS}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
self.Sur.Tsurface = 265.0 - (0.25 / 3600.0) * TS.t
update(self.Sur, GMV)
end

function update_forcing(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{GABLS}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1723,13 +1723,13 @@ end
function TC.io(self::CasesBase{SP}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end
function update_surface(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end
function update_forcing(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{SP}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1866,14 +1866,14 @@ function TC.io(self::CasesBase{DryBubble}, Stats::NetCDFIO_Stats)
io(self, Stats, BaseCase())
end

function update_surface(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_surface(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Sur, GMV)
end

function update_forcing(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_forcing(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Fo, GMV)
end
function update_radiation(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
function TC.update_radiation(self::CasesBase{DryBubble}, GMV::GridMeanVariables, TS::TimeStepping)
update(self.Rad, GMV)
end

Expand Down Expand Up @@ -1984,9 +1984,9 @@ TC.initialize_io(self::CasesBase{LES_driven_SCM}, Stats::NetCDFIO_Stats) = initi

TC.io(self::CasesBase{LES_driven_SCM}, Stats::NetCDFIO_Stats) = io(self, Stats, BaseCase())

update_surface(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Sur, GMV)
TC.update_surface(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Sur, GMV)

update_forcing(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Fo, GMV)
update_radiation(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Rad, GMV)
TC.update_forcing(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Fo, GMV)
TC.update_radiation(self::CasesBase{LES_driven_SCM}, GMV::GridMeanVariables, TS::TimeStepping) = update(self.Rad, GMV)

end
9 changes: 2 additions & 7 deletions integration_tests/utils/main.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ function TurbulenceConvection.initialize(self::Simulation1d, namelist)
TC = TurbulenceConvection
Cases.initialize_reference(self.Case, self.Gr, self.Ref, self.Stats)
Cases.initialize_profiles(self.Case, self.Gr, self.GMV, self.Ref)

Cases.initialize_surface(self.Case, self.Gr, self.Ref)
Cases.initialize_forcing(self.Case, self.Gr, self.Ref, self.GMV)
Cases.initialize_radiation(self.Case, self.Gr, self.Ref, self.GMV)

TC.initialize(self.Turb, self.Case, self.GMV, self.Ref, self.TS)
TC.initialize_io(self)
TC.io(self)
Expand All @@ -48,15 +50,8 @@ function run(self::Simulation1d)
iter = 0
TC.open_files(self.Stats) # #removeVarsHack
while self.TS.t <= self.TS.t_max
TC.zero_tendencies(self.GMV)
Cases.update_surface(self.Case, self.GMV, self.TS)
Cases.update_forcing(self.Case, self.GMV, self.TS)
Cases.update_radiation(self.Case, self.GMV, self.TS)
TC.update(self.Turb, self.GMV, self.Case, self.TS)
TC.update(self.TS)
# Apply the tendencies, also update the BCs and diagnostic thermodynamics
TC.update(self.GMV, self.TS)
TC.update_GMV_diagnostics(self.Turb, self.GMV)

if mod(iter, 100) == 0
progress = self.TS.t / self.TS.t_max
Expand Down
Loading

0 comments on commit 230dcd2

Please sign in to comment.