MPI-AMRVAC 3.2
The MPI - Adaptive Mesh Refinement - Versatile Advection Code (development version)
Loading...
Searching...
No Matches
mod_eos.t
Go to the documentation of this file.
1!> Equation of state for AMRVAC, handled through a single eos_container object.
2!>
3!> Two gas models (eos_type):
4!> FI -- fully ionised ideal gas (constant gamma, mu).
5!> LTE -- local thermodynamic equilibrium with partial ionisation of H (+He),
6!> via one of three interchangeable methods (eos_method):
7!> state -- per-quantity (T,p,ne/nH,eint/p) Saha-equilibrium tables,
8!> PCHIP/bilinear interpolated ('tables' accepted as legacy alias).
9!> entropy -- bicubic-Hermite reconstruction (see mod_eos_lte_entropy).
10!> analytic -- on-the-fly hydrogen Saha solve, helium neutral (saha_* routines).
11!> Tables are generated offline and read as binary; their axes are
12!> (log10 nH, log10 eint/nH) in code units after the unit shift applied
13!> in eos_finalise. ionE optionally folds ionisation energy into eint.
14!>
15!> The code-unit normalisation is kept so an FI atmosphere recovers R = 1;
16!> update_eos_LTE relies on this. update_eos refreshes the cached EoS fields
17!> (Te, ne) once per RK substep, and for boundary cells via update_eos_4_bc;
18!> call eos%update_eos manually before any extra output.
19!>
20!> Jack Jenkins (27.01.2026); legacy EoS type 1: uniform tabulated (by Chris Osborne) H(+He) LTE EoS, in
21!> consultation with Damien Przybylski (MURaM). Routed through legacy usr_Rfactor approach.
22!> Jack Jenkins (05.05.2026); EoS type 2 finished, now separate module that each hd/mhd physics module
23!> from upstream/amrvac3.3 route through.
24!> Jack Jenkins (11.05.2026); Benchmarked curvature-density-hybrid-tabulated EoS tables.
25!> Jack Jenkins (25.05.2026); Single curvature-density-tabulated entropy potential EoS prototyped. Validated
26!> gamma(T) against Ballester et al. 2001 to ~ 1.1% .
27!> Jack Jenkins (16.06.2026); Folded in fld, ffhd, and new partial_ionisation modules to be EoS compliant
28!> and refactored for readability.
29
30module mod_eos
37 use mod_eos_fi
38 use mod_eos_lte
42 use mod_comm_lib, only: mpistop
43
44 implicit none
45 private
46
47 character(len=std_len) :: AMRVAC_DIR
48
49 !> The EoS state object (eos) and the cached-log10(nH) wextra index
50 !> (iw_log_nH) now live in mod_eos_container so every EoS sub-module can
51 !> reach them; re-export here so existing `use mod_eos` callers still see them.
52 public :: eos, iw_log_nh
53
54 !> Lifecycle (called from amrvac.t)
56 !> Type-agnostic helpers, safe in any eos_type. The mode-specific scalar
57 !> kernels (LTE T/y/p/eint/gamma1, saha_*, the PI state/eint/csound2 backend
58 !> and fl-port shims) are deliberately NOT re-exported here: the hd/mhd/ffhd
59 !> seams reach them via their sub-modules (mod_eos_lte / mod_eos_lte_saha /
60 !> mod_eos_pi), and each kernel mpistops if called under the wrong
61 !> eos_type/method. So `use mod_eos` no longer exposes mode-specific routines.
63 !> Ideal-gas Gamma_1 (returns eos%gamma); bound to phys_get_gamma1 for FI and
64 !> no-energy PI, valid in any ideal-gas context, so kept on the facade.
65 public :: get_gamma1_fi
66 !> The EoS hooks of a conduction fluid, shared by the hd, mhd and ffhd bindings
67 public :: eos_bind_tc
68
69 !> Untimed targets of the timed eos% wrappers
70 procedure(convert_condition), pointer :: to_primitive_impl => null(), &
71 to_conserved_impl => null()
72 procedure(update_eos_spaces), pointer :: update_eos_impl => null()
73 procedure(get_eos_variable_alt), pointer :: pthermal_impl => null(), csound2_impl => null(), &
74 tfromei_impl => null()
75
76contains
77
78 !> Lifecycle: read and validate parameters, allocate, load and finalise
79 !> the chosen backend. Called from amrvac.t.
80 !> Read this module"s parameters from a file
81 subroutine eos_read_params(files)
82 character(len=*), intent(in) :: files(:)
83 integer :: n
84
85 !> Namelist mirror variables: the parfile uses these simple names
86 !> (e.g. eos_type='FI'); they are committed to eos% in one block after
87 !> the read. Derived eos% quantities (gamma_minus_1, method_id, ...) are
88 !> NOT mirrored here -- they are computed from these inputs below.
89 character(len=std_len) :: eos_type, table_location
90 character(len=20) :: eos_method, gamma1_method, p2eint_method, pi_table
91 double precision :: He_abundance, gamma
92 logical :: ionE
93
94 namelist /eos_list/ eos_type, table_location, ione, he_abundance, gamma, &
95 eos_method, gamma1_method, p2eint_method, pi_table
96
97 !> defaults
98 eos_type = 'FI'
99 eos_method = 'state'
100 pi_table = 'chromosphere'
101 gamma1_method = 'exact'
102 p2eint_method = 'table'
103 ione = .false.
104 he_abundance = 0.1d0
105 gamma = 5.0d0/3.0d0
106 call get_environment_variable("AMRVAC_DIR", amrvac_dir)
107 table_location = trim(amrvac_dir)//"/src/tables/eos_tables/uniform256/"
108
109 !> read parfile(s): each successive file overrides the previous
110 do n = 1, size(files)
111 open(unitpar, file=trim(files(n)), status="old")
112 read(unitpar, eos_list, end=111)
113 111 close(unitpar)
114 end do
115
116 !> commit raw inputs to eos% (plain copies, no logic)
117 eos%eos_type = eos_type
118 eos%method = eos_method
119 eos%pi_table = pi_table
120 eos%gamma1_method = gamma1_method
121 eos%p2eint_method = p2eint_method
122 eos%table_location = table_location
123 eos%He_abundance = he_abundance
124 eos%gamma = gamma
125 eos%ionE = ione
126
127 !> derive secondary quantities from the raw inputs
128 eos%gamma_minus_1 = eos%gamma - 1.0d0
129 eos%inv_gamma = 1.0d0 / eos%gamma
130 if (abs(eos%gamma_minus_1) > 1.0d-12) then
131 eos%inv_gamma_minus_1 = 1.0d0 / eos%gamma_minus_1
132 else
133 eos%inv_gamma_minus_1 = 0.0d0
134 end if
135 eos%nH2rhoFactor = 1.0d0 !> FI default; (m)hd_physical_units may reset
136 select case (eos%method)
137 case ('analytic'); eos%method_id = eos_analytic
138 case ('entropy'); eos%method_id = eos_entropy
139 case default; eos%method_id = eos_state
140 end select
141 select case (eos%eos_type)
142 case ('LTE'); eos%type_id = eos_type_lte
143 case ('PI'); eos%type_id = eos_type_pi
144 case default; eos%type_id = eos_type_fi
145 end select
146
147 !> report
148 if (mype == 0) then
149 write(*,*) "EoS type: "//trim(eos%eos_type)
150 if (eos%eos_type == 'LTE') &
151 write(*,*) "EoS table location: "//trim(eos%table_location)
152 end if
153
154 !> validate / coerce (all consistency guards live in one place)
155 call eos_validate_params()
156
157 end subroutine eos_read_params
158
159 !> Validate and coerce the parsed eos_list against the chosen eos_type /
160 !> method. Grouped by concern so the rules are readable in one block (rather
161 !> than interleaved with the field copies in eos_read_params). May coerce
162 !> eos% fields (e.g. FI forces ionE=.false.) and mpistop on illegal combos.
163 subroutine eos_validate_params()
164
165 !> eos_type x ionE
166 if (eos%eos_type == 'FI' .and. eos%ionE) then
167 eos%ionE = .false.
168 if(mype==0) write(*,*) "WARNING: eos_type = 'FI' requires ionE = .false."
169 end if
170
171 !> PI ('partial approximations') table selector
172 if (eos%eos_type == 'PI') then
173 select case (trim(eos%pi_table))
174 case ('chromosphere','flare','prominence')
175 ! valid
176 case default
177 call mpistop("eos_type='PI': pi_table must be "// &
178 "'chromosphere', 'flare', or 'prominence'")
179 end select
180 !> ionisation-energy mode (ionE) is supported only for the T-only
181 !> tables; the prominence table is (T,p)-dependent -> no-energy only.
182 !> This also gates the only PI configuration that cannot model He
183 !> ionisation energy: the chromosphere/flare energy paths now fold
184 !> the He ionisation energy into eint (mod_eos_pi_tables,
185 !> ionization_eps_ion_of_degrees), consistent with the He electron
186 !> count already in the R-factor, so He>0 energy mode is allowed there.
187 if (eos%ionE .and. trim(eos%pi_table) == 'prominence') then
188 call mpistop("eos_type='PI' with ionE=T requires a T-only table "// &
189 "(chromosphere or flare); prominence is no-energy only")
190 end if
191 if(mype==0) write(*,*) "EoS PI table: "//trim(eos%pi_table)// &
192 ", ionE=", eos%ionE
193 end if
194
195 !> eos_method validity and eos_type x method ('tables' kept as a legacy
196 !> alias for 'state' -- both decode to EOS_STATE via the case default).
197 if (eos%method /= 'analytic' .and. eos%method /= 'state' &
198 .and. eos%method /= 'tables' .and. eos%method_id /= eos_entropy) then
199 call mpistop("Unknown eos_method: "//trim(eos%method)// &
200 " (expected 'state', 'analytic', or 'entropy')")
201 end if
202 if (eos%eos_type == 'FI' .and. eos%method_id == eos_analytic) then
203 call mpistop("eos_method='analytic' requires eos_type='LTE'")
204 end if
205
206 !> gamma1_method validity
207 if (eos%gamma1_method /= 'exact' .and. eos%gamma1_method /= 'effective' &
208 .and. eos%gamma1_method /= 'constant') then
209 call mpistop("Unknown gamma1_method: "//trim(eos%gamma1_method)// &
210 " (expected 'exact', 'effective', or 'constant')")
211 end if
212
213 !> analytic-method caveats (hydrogen Saha, helium neutral)
214 if (eos%method_id == eos_analytic) then
215 if (eos%He_abundance > 0.0d0 .and. mype == 0) write(*,*) &
216 "eos_method='analytic' keeps helium neutral, He_abundance=", eos%He_abundance
217 ! effective gamma1 needs T,neOnH tables -> not available analytically
218 if (eos%gamma1_method == 'effective') then
219 if (mype == 0) write(*,*) &
220 "WARNING: gamma1_method='effective' not applicable with analytic EoS."
221 if (mype == 0) write(*,*) &
222 " Falling back to gamma1_method='exact' (analytic 2D table)."
223 eos%gamma1_method = 'exact'
224 end if
225 if (.not. eos%ionE .and. mype == 0) then
226 write(*,*) "WARNING: eos_method='analytic' without ionE"
227 write(*,*) " reduces to ideal gas. Consider eos_type='FI'."
228 end if
229 end if
230
231 !> LTE+ionE effective-gamma1 note
232 if (eos%eos_type == 'LTE' .and. eos%ionE .and. &
233 eos%gamma1_method == 'effective') then
234 if (mype == 0) write(*,*) &
235 "NOTE: gamma1_method='effective' builds gamma_eff = 1+p/eint table."
236 end if
237
238 end subroutine eos_validate_params
239
240 !> Phase 'create' (before units are known): allocate the EoS object, read
241 !> its &eos_list parameters, and load the raw tables for the chosen method.
242 !> The getters wired here must be live before (m)hd_link_eos runs.
243 subroutine eos_init()
244 allocate(eos)
245 call eos_read_params(par_files)
246
247 !> Type-agnostic getters: always live (eos% pointer targets).
248 eos%get_rho => get_rho
249 eos%get_nH => get_nh
250 eos%get_ne_nH => get_ne_nh
251
252 !> Per-type create-phase init (each owns its raw table loads / pointer
253 !> wiring that must be live before (m)hd_link_eos runs), in the matching
254 !> mod_eos_<TYPE> module.
255 select case (eos%eos_type)
256 case ('FI'); call eos_init_fi()
257 case ('LTE'); call eos_init_lte()
258 case ('PI'); call eos_init_pi()
259 case default
260 call mpistop('eos_init: eos_type '//trim(eos%eos_type)//' not recognised')
261 end select
262 end subroutine eos_init
263
264 !> Phase 'commit' (after units are known): finalise the dispatch for the
265 !> loaded physics -- wire the method's runtime pointers and finalise its
266 !> tables. The cross-module wiring that follows (into the ghost-cell update
267 !> and the physics source terms) is done by the caller in amrvac.t, so the
268 !> EoS never reaches back into those modules.
269 !> Finalise the EoS once units are set: dispatch on eos_type to the per-type
270 !> finaliser (each owns its pointer wiring + backend table loading, living in
271 !> mod_eos_fi / mod_eos_lte / mod_eos_pi), then wire the shared total-energy
272 !> temperature getter. Called from amrvac.t after phys init.
273 subroutine eos_finalise()
274 if (.not. allocated(eos)) &
275 call mpistop('eos_finalise: eos not allocated')
276
277 ! Decoded here, not at read time: physics init may still override the
278 ! method (hd well-balanced forces 'bisect')
279 eos%p2eint_bisect = (eos%p2eint_method == 'bisect')
280
281 select case (eos%eos_type)
282 case ('LTE')
283 call eos_finalise_lte()
284 case ('FI')
285 call eos_finalise_fi()
286 case ('PI')
287 call eos_finalise_pi()
288 case default
289 call mpistop('eos_finalise: eos_type '//trim(eos%eos_type)//' not recognised')
290 end select
291
292 eos%get_temperature_from_etot => get_temperature_from_etot
293 ! The eint/nH floor of every LTE path: the forward-table edge, or 100 K of neutral gas
294 ! under analytic, which has no tables
295 if (eos%type_id == eos_type_lte) then
296 if (eos%method_id == eos_analytic) then
297 eos%eint_nH_min = eos%inv_gamma_minus_1 * 100.0d0 / unit_temperature
298 else
299 eos%eint_nH_min = 10.0d0**eos%T%var2_min
300 end if
301 end if
302 call eos_time_dispatch()
303 end subroutine eos_finalise
304
305 !> Put the EoS operations behind timed wrappers, on the eos% pointers and on the phys_
306 !> pointers bound to the same routines, so every caller is counted once. Runs before the
307 !> ghost-cell and source-term modules copy these pointers
308 subroutine eos_time_dispatch()
310
311 if (associated(eos%to_primitive)) then
312 to_primitive_impl => eos%to_primitive
313 eos%to_primitive => timed_to_primitive
314 if (associated(phys_to_primitive, to_primitive_impl)) &
315 phys_to_primitive => timed_to_primitive
316 end if
317 if (associated(eos%to_conserved)) then
318 to_conserved_impl => eos%to_conserved
319 eos%to_conserved => timed_to_conserved
320 if (associated(phys_to_conserved, to_conserved_impl)) &
321 phys_to_conserved => timed_to_conserved
322 end if
323 if (associated(eos%get_thermal_pressure)) then
324 pthermal_impl => eos%get_thermal_pressure
325 eos%get_thermal_pressure => timed_pthermal
326 if (associated(phys_get_pthermal, pthermal_impl)) phys_get_pthermal => timed_pthermal
327 end if
328 if (associated(eos%update_eos)) then
329 update_eos_impl => eos%update_eos
330 eos%update_eos => timed_update_eos
331 end if
332 if (associated(eos%get_csound2)) then
333 csound2_impl => eos%get_csound2
334 eos%get_csound2 => timed_csound2
335 end if
336 if (associated(eos%get_temperature_from_eint)) then
337 tfromei_impl => eos%get_temperature_from_eint
338 eos%get_temperature_from_eint => timed_tfromei
339 end if
340 end subroutine eos_time_dispatch
341
342 !> Each wrapper imports nw itself: taken from the host, it makes ifx 2026.2 crash on reading mod_eos.mod
343 subroutine timed_to_primitive(ixI^L, ixO^L, w, x)
344 use mod_variables, only: nw
345 integer, intent(in) :: ixi^l, ixo^l
346 double precision, intent(inout) :: w(ixi^s, nw)
347 double precision, intent(in) :: x(ixi^s, 1:ndim)
348 call eos_timer_start()
349 call to_primitive_impl(ixi^l, ixo^l, w, x)
350 call eos_timer_stop(timeeos_conv)
351 end subroutine timed_to_primitive
352
353 subroutine timed_to_conserved(ixI^L, ixO^L, w, x)
354 use mod_variables, only: nw
355 integer, intent(in) :: ixi^l, ixo^l
356 double precision, intent(inout) :: w(ixi^s, nw)
357 double precision, intent(in) :: x(ixi^s, 1:ndim)
358 call eos_timer_start()
359 call to_conserved_impl(ixi^l, ixo^l, w, x)
360 call eos_timer_stop(timeeos_conv)
361 end subroutine timed_to_conserved
362
363 subroutine timed_update_eos(ixI^L, ixO^L, w, x)
364 use mod_variables, only: nw
365 integer, intent(in) :: ixi^l, ixo^l
366 double precision, intent(inout) :: w(ixi^s, nw)
367 double precision, intent(in) :: x(ixi^s, 1:ndim)
368 call eos_timer_start()
369 call update_eos_impl(ixi^l, ixo^l, w, x)
370 call eos_timer_stop(timeeos_update)
371 end subroutine timed_update_eos
372
373 subroutine timed_pthermal(w, x, ixI^L, ixO^L, res)
374 use mod_variables, only: nw
375 integer, intent(in) :: ixi^l, ixo^l
376 double precision, intent(in) :: w(ixi^s, nw), x(ixi^s, 1:ndim)
377 double precision, intent(out) :: res(ixi^s)
378 call eos_timer_start()
379 call pthermal_impl(w, x, ixi^l, ixo^l, res)
380 call eos_timer_stop(timeeos_pthermal)
381 end subroutine timed_pthermal
382
383 subroutine timed_csound2(w, x, ixI^L, ixO^L, res)
384 use mod_variables, only: nw
385 integer, intent(in) :: ixi^l, ixo^l
386 double precision, intent(in) :: w(ixi^s, nw), x(ixi^s, 1:ndim)
387 double precision, intent(out) :: res(ixi^s)
388 call eos_timer_start()
389 call csound2_impl(w, x, ixi^l, ixo^l, res)
390 call eos_timer_stop(timeeos_csound)
391 end subroutine timed_csound2
392
393 subroutine timed_tfromei(w, x, ixI^L, ixO^L, res)
394 use mod_variables, only: nw
395 integer, intent(in) :: ixi^l, ixo^l
396 double precision, intent(in) :: w(ixi^s, nw), x(ixi^s, 1:ndim)
397 double precision, intent(out) :: res(ixi^s)
398 call eos_timer_start()
399 call tfromei_impl(w, x, ixi^l, ixo^l, res)
400 call eos_timer_stop(timeeos_tfromei)
401 end subroutine timed_tfromei
402
403 subroutine prepare_eos_w_fields(psx)
404 ! The array is assumed shape: the bound max_blocks also crashes ifx 2026.2 on reading mod_eos.mod
405 type(state), intent(inout) :: psx(:)
406 integer :: iigrid, igrid
407
408 ! fill eos space of all grids, including ghost cells (boundaries)
409 !$OMP PARALLEL DO PRIVATE(igrid)
410 do iigrid=1,igridstail_active; igrid=igrids_active(iigrid);
411 call eos%update_eos(ixg^ll,ixg^ll,psx(igrid)%w,psx(igrid)%x)
412 end do
413 !$OMP END PARALLEL DO
414
415 end subroutine prepare_eos_w_fields
416
417 !> The EoS hooks of the conduction fluid fl. sat_R_variable is false when R is the constant 1,
418 !> in which case saturation takes ciso2 = T
419 subroutine eos_bind_tc(fl, sat_R_variable)
421 type(tc_fluid), intent(inout) :: fl
422 logical, intent(in) :: sat_r_variable
423 fl%get_temperature_from_conserved => eos%get_temperature_from_etot
424 if (eos%eos_type == 'LTE' .and. eos%ionE) then
425 ! the fast bilinear T lookup of the STS substeps, which also returns ciso2
426 fl%get_temperature_ciso2_from_eint => get_temperature_from_eint_fast_lte
427 else
428 fl%get_temperature_from_eint => eos%get_temperature_from_eint
429 fl%sat_R_variable = sat_r_variable
430 end if
431 fl%get_rho => eos%get_rho
432 fl%get_ne_nH => eos%get_ne_nH
433 fl%get_var_Rfactor => eos%get_Rfactor
434 fl%inv_gamma_minus_1 = eos%inv_gamma_minus_1
435 fl%nH2rhoFactor = eos%nH2rhoFactor
436 fl%log_T_floor = eos_get_log_t_floor()
437 fl%eint_from_T => eint_nh_from_t
438 end subroutine eos_bind_tc
439
440end module mod_eos
441!> Needs a line after to pass the preprocesor
subroutine, public mpistop(message)
Exit MPI-AMRVAC with an error message.
EoS state container – the single thermodynamic authority for AMRVAC.
integer, parameter, public eos_analytic
integer, parameter, public eos_type_pi
integer, parameter, public eos_type_fi
EoS-type selector, decoded once from eoseos_type into eostype_id. Used by the mode-specific kernels t...
integer, parameter, public eos_state
slot interfaces, for routines that hold or wrap an EoS slot
integer, parameter, public eos_entropy
type(eos_container), allocatable, public eos
The single EoS state object, allocated in eos_init and shared (read-mostly) across all EoS sub-module...
integer, parameter, public eos_type_lte
integer, public iw_log_nh
wextra index for the cached log10(nH) used during STS substeps (-1 = not allocated)....
FI (fully-ionised, constant-gamma) EoS kernels for the eos% family.
Definition mod_eos_fi.t:10
subroutine, public get_gamma1_fi(w, x, ixil, ixol, gamma1)
Gamma_1 for the fully-ionised ideal gas: constant eosgamma.
Definition mod_eos_fi.t:57
Interpolation kernels for the EoS tables (pure math; no EoS state).
Analytic hydrogen Saha EoS with neutral helium (eos_method == 'analytic').
Shared LTE lookup-table infrastructure (build/IO; not on the hot path).
LTE (Saha-table) EoS kernels and finalise for the eos% family.
Definition mod_eos_lte.t:12
PI (partial-ionisation, eos_type='PI') arm of the eos% family.
Definition mod_eos_pi.t:27
subroutine, public eos_finalise_pi()
PI arm of eos_finalise (after unit_* are set): ride FI's ideal-gas getter set and RR=1 normalisation ...
Definition mod_eos_pi.t:82
subroutine, public eos_init_pi()
Lifecycle (PI arms of the eos_init / eos_finalise dispatchers). The eos% block getters (update_eos_PI...
Definition mod_eos_pi.t:73
Shared EoS accessors (EoS-type-agnostic) for the eos% family.
subroutine, public get_ne_nh(ixil, ixol, w, x, ne, nh)
Return electron and hydrogen number densities in code units. For LTE (iw_ne allocated): ne from Saha ...
double precision function, public eos_get_log_t_floor()
Lower log10(T) bound for the (rho,T) inverse table; FI (no tables) floors at log10(smalldouble)....
Equation of state for AMRVAC, handled through a single eos_container object.
Definition mod_eos.t:30
subroutine, public eos_init()
Phase 'create' (before units are known): allocate the EoS object, read its &eos_list parameters,...
Definition mod_eos.t:244
subroutine, public prepare_eos_w_fields(psx)
Definition mod_eos.t:404
subroutine, public eos_bind_tc(fl, sat_r_variable)
The EoS hooks of the conduction fluid fl. sat_R_variable is false when R is the constant 1,...
Definition mod_eos.t:420
subroutine, public eos_finalise()
Phase 'commit' (after units are known): finalise the dispatch for the loaded physics – wire the metho...
Definition mod_eos.t:274
This module contains definitions of global parameters and variables and some generic functions/subrou...
integer, parameter unitpar
file handle for IO
integer mype
The rank of the current MPI task.
double precision, dimension(:), allocatable, parameter d
This module defines the procedures of a physics module. It contains function pointers for the various...
Definition mod_physics.t:4
procedure(sub_convert), pointer phys_to_primitive
Definition mod_physics.t:52
procedure(sub_get_pthermal), pointer phys_get_pthermal
Definition mod_physics.t:77
procedure(sub_convert), pointer phys_to_conserved
Definition mod_physics.t:51
Thermal conduction for HD and MHD or RHD and RMHD or twofl (plasma-neutral) module Adaptation of mod_...
subroutine eos_timer_start()
Open an EoS timing window; inside an OpenMP parallel region the EoS is not timed.
Definition mod_timing.t:45
double precision timeeos_update
Definition mod_timing.t:12
double precision timeeos_pthermal
Definition mod_timing.t:15
double precision timeeos_conv
Definition mod_timing.t:14
subroutine eos_timer_stop(acc)
Close an EoS timing window, adding its time to acc when it is the outermost.
Definition mod_timing.t:52
double precision timeeos_csound
Definition mod_timing.t:13
double precision timeeos_tfromei
Definition mod_timing.t:16
integer nw
Total number of variables.