50 if (
eos%eos_type ==
'FI' .or.
eos%eos_type ==
'PI')
then
51 eos%to_conserved => hd_to_conserved_origin
52 eos%to_primitive => hd_to_primitive_origin
53 else if (
eos%eos_type ==
'LTE')
then
54 eos%to_conserved => hd_to_conserved_lte
55 eos%to_primitive => hd_to_primitive_lte
57 call mpistop(
'Error: Unknown HD EOS type: ' // trim(
eos%eos_type))
70 if (
eos%eos_type ==
'LTE' .and.
eos%ionE)
then
71 eos%get_csound2 => hd_get_csound2_lte
77 eos%get_csound2 => hd_get_csound2_fi
89 eos%get_Rfactor=>rfactor_from_constant_ionization
97 if (
eos%eos_type ==
'PI' .and.
eos%ionE)
then
99 call mpistop(
'PI energy EoS requires hd_energy=.true.')
100 eos%to_conserved => hd_to_conserved_pi
101 eos%to_primitive => hd_to_primitive_pi
104 eos%p_to_e => p_to_e_pi
116 if (
allocated(
tc_fl))
then
117 tc_fl%get_temperature_from_conserved =>
eos%get_temperature_from_etot
120 if (
eos%eos_type ==
'LTE' .and.
eos%ionE)
then
123 tc_fl%get_temperature_from_eint =>
eos%get_temperature_from_eint
127 tc_fl%get_var_Rfactor =>
eos%get_Rfactor
128 tc_fl%inv_gamma_minus_1 =
eos%inv_gamma_minus_1
129 tc_fl%nH2rhoFactor =
eos%nH2rhoFactor
130 tc_fl%log_T_floor = eos_get_log_t_floor()
134 if (
allocated(
rc_fl))
then
136 rc_fl%get_pthermal =>
eos%get_thermal_pressure
137 rc_fl%get_var_Rfactor =>
eos%get_Rfactor
142 rc_fl%inv_gamma_minus_1 =
eos%inv_gamma_minus_1
143 rc_fl%nH2rhoFactor =
eos%nH2rhoFactor
155 if (
eos%ionE .and.
eos%eos_type ==
'LTE')
then
165 if (
eos%eos_type ==
'PI' .and.
eos%ionE)
then
167 if (
allocated(
rc_fl))
then
175 if (
allocated(
fld_fl))
then
179 fld_fl%get_tgas =>
eos%get_temperature_from_pressure
182 end subroutine bind_eos_to_source
185 subroutine hd_to_conserved_origin(ixI^L, ixO^L, w, x)
188 integer,
intent(in) :: ixi^
l, ixo^
l
189 double precision,
intent(inout) :: w(ixi^s, nw)
190 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
196 {
do ix^db=ixomin^db,ixomax^db\}
199 w(ix^
d,
e_)=w(ix^
d,
p_)*
eos%inv_gamma_minus_1+&
207 call dust_to_conserved(ixi^l, ixo^l, w, x)
212 end subroutine hd_to_conserved_origin
215 subroutine hd_to_primitive_origin(ixI^L, ixO^L, w, x)
218 integer,
intent(in) :: ixi^
l, ixo^
l
219 double precision,
intent(inout) :: w(ixi^s, nw)
220 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
222 double precision :: inv_rho
231 {
do ix^db=ixomin^db,ixomax^db\}
232 inv_rho = 1.d0/w(ix^
d,
rho_)
238 w(ix^
d,
p_)=(
eos%gamma_minus_1)*(w(ix^
d,
e_)&
245 call dust_to_primitive(ixi^l, ixo^l, w, x)
250 end subroutine hd_to_primitive_origin
256 subroutine hd_to_conserved_lte(ixI^L, ixO^L, w, x)
259 integer,
intent(in) :: ixi^
l, ixo^
l
260 double precision,
intent(inout) :: w(ixi^s, nw)
261 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
265 call p_to_e(ixi^
l, ixo^
l, w, x)
276 end subroutine hd_to_conserved_lte
278 subroutine p_to_e(ixI^L, ixO^L, w, x)
290 integer,
intent(in) :: ixi^
l, ixo^
l
291 double precision,
intent(inout) :: w(ixi^s, nw)
292 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
295 double precision :: p_to_eint, p_over_rho
296 double precision :: nh(ixi^s), nh_in(ixi^s), p_in(ixi^s)
297 double precision :: log_eint_mid, eint_total
298 double precision :: t_solve, y_solve, eint_nh_solve
301 call eos%get_nH(w, x, ixi^
l, ixo^
l, nh)
302 nh_in(ixo^s) = dlog10(nh(ixo^s))
303 if (
eos%p2eint_method /=
'bisect')
then
304 p_in(ixo^s) = dlog10(w(ixo^s,
p_)) - nh_in(ixo^s)
308 p_to_eint =
eos%inv_gamma_minus_1
309 {
do ix^db=ixomin^db,ixomax^db\}
312 p_over_rho = w(ix^
d,
p_) / w(ix^
d,
rho_)
313 if (p_over_rho >
eos%p_rho_FI_threshold)
then
315 p_to_eint =
eos%inv_gamma_minus_1 &
316 +
eos%eion_per_nH * nh(ix^
d) / w(ix^
d,
p_)
317 w(ix^
d,
e_) = w(ix^
d,
p_)*p_to_eint + &
319 else if (
eos%method ==
'analytic')
then
322 t_solve, y_solve, eint_nh_solve)
323 w(ix^
d,
e_) = eint_nh_solve * nh(ix^
d) + &
325 else if (
eos%p2eint_method ==
'bisect')
then
331 if (
eos%method ==
'entropy')
then
335 nh_in(ix^
d), dlog10(w(ix^
d,
p_)) - nh_in(ix^
d), &
337 eint_total = nh(ix^
d) * 10.0d0**log_eint_mid
340 dlog10(w(ix^
d,
p_)), log_eint_mid)
341 eint_total = nh(ix^
d) * 10.0d0**log_eint_mid
342 eint_total = max(eint_total, &
343 nh(ix^
d) * 10.0d0**
eos%T%var2_min)
345 w(ix^
d,
e_) = eint_total + &
350 w(ix^
d,
e_) = w(ix^
d,
p_)*p_to_eint + &
354 w(ix^
d,
e_) = w(ix^
d,
p_)*p_to_eint + &
360 end subroutine p_to_e
370 subroutine hd_to_primitive_lte(ixI^L, ixO^L, w, x)
373 integer,
intent(in) :: ixi^
l, ixo^
l
374 double precision,
intent(inout) :: w(ixi^s, nw)
375 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
377 double precision :: inv_rho
378 double precision :: nh(ixi^s)
379 double precision :: log_nh(ixi^s)
380 double precision :: eint_val, eint_in, t_loc, y_loc
389 call eos%get_nH(w, x, ixi^
l, ixo^
l, nh)
393 log_nh(ixo^s) = dlog10(nh(ixo^s))
396 {
do ix^db=ixomin^db,ixomax^db\}
397 inv_rho = 1.d0/w(ix^
d,
rho_)
406 eint_val = w(ix^
d,
e_) - half*w(ix^
d,
rho_)*(^
c&w(ix^
d,
m^
c_)**2+)
408 if (
eos%method /=
'analytic')
then
409 eint_val = max(eint_val, nh(ix^
d) * 10.0d0**
eos%T%var2_min)
411 eint_val = max(eint_val, smalldouble)
412 if (eint_val * inv_rho >
eos%eint_rho_FI_threshold)
then
414 w(ix^
d,
p_) =
eos%gamma_minus_1 &
415 * (eint_val -
eos%eion_per_nH * nh(ix^
d))
418 eint_in = dlog10(eint_val) - log_nh(ix^
d)
419 w(ix^
d,
p_) = nh(ix^
d) &
423 w(ix^
d,
p_)=(
eos%gamma_minus_1)*(w(ix^
d,
e_)&
431 call dust_to_primitive(ixi^l, ixo^l, w, x)
436 end subroutine hd_to_primitive_lte
447 integer,
intent(in) :: ixi^
l, ixo^
l
448 double precision,
intent(in) :: w(ixi^s, 1:nw)
449 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
450 double precision,
intent(out):: pth(ixi^s)
452 double precision :: nh(ixi^s), ei(ixi^s), tpi, rpi
455 if (
eos%eos_type ==
'LTE')
then
457 call eos%get_nH(w, x, ixi^
l, ixo^
l, nh)
458 pth(ixo^s) = nh(ixo^s) * (1.0d0 +
eos%He_abundance &
459 + (w(ixo^s,iw_ne) / nh(ixo^s))) * w(ixo^s,iw_te)
460 else if (
eos%eos_type ==
'PI' .and.
eos%ionE)
then
464 {
do ix^db=ixomin^db,ixomax^db\}
470 pth(ixo^s) =
eos%gamma_minus_1 * phys_get_ei(w, ixi^l, ixo^l)
473 if (.not.
associated(usr_set_pthermal))
then
476 call usr_set_pthermal(w,x,ixi^l,ixo^l,pth)
480 if (fix_small_values)
then
481 {
do ix^db= ixo^lim^db\}
482 if(pth(ix^d)<small_pressure)
then
483 pth(ix^d)=small_pressure
486 else if (check_small_values)
then
487 {
do ix^db= ixo^lim^db\}
488 if(pth(ix^d)<small_pressure)
then
489 write(*,*)
"Error: small value of gas pressure",pth(ix^d),&
490 " encountered when call hd_get_pthermal"
491 write(*,*)
"Iteration: ", it,
" Time: ", global_time
492 write(*,*)
"Location: ", x(ix^d,:)
493 write(*,*)
"Cell number: ", ix^d
495 write(*,*) trim(cons_wnames(iw)),
": ",w(ix^d,iw)
497 if(trace_small_values)
write(*,*) dsqrt(pth(ix^d)-bigdouble)
498 write(*,*)
"Saving status at the previous time step"
508 subroutine hd_get_csound2_fi(w, x, ixI^L, ixO^L, cs2)
510 integer,
intent(in) :: ixi^
l, ixo^
l
511 double precision,
intent(in) :: w(ixi^s, nw)
512 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
513 double precision,
intent(out) :: cs2(ixi^s)
517 cs2(ixo^s) =
eos%gamma * w(ixo^s,
p_) / w(ixo^s,
rho_)
521 end subroutine hd_get_csound2_fi
525 subroutine hd_get_csound2_lte(w, x, ixI^L, ixO^L, cs2)
527 integer,
intent(in) :: ixi^
l, ixo^
l
528 double precision,
intent(in) :: w(ixi^s, nw)
529 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
530 double precision,
intent(out) :: cs2(ixi^s)
535 call hd_get_gamma1_lte(w, x, ixi^
l, ixo^
l, cs2)
536 {
do ix^db=ixomin^db,ixomax^db\}
537 cs2(ix^
d) = cs2(ix^
d) * w(ix^
d,
p_) / w(ix^
d,
rho_)
542 end subroutine hd_get_csound2_lte
551 subroutine p_to_e_pi(ixI^L, ixO^L, w, x)
553 integer,
intent(in) :: ixi^
l, ixo^
l
554 double precision,
intent(inout) :: w(ixi^s, nw)
555 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
556 double precision :: eint
559 {
do ix^db=ixomin^db,ixomax^db\}
565 end subroutine p_to_e_pi
568 subroutine hd_to_conserved_pi(ixI^L, ixO^L, w, x)
571 integer,
intent(in) :: ixi^
l, ixo^
l
572 double precision,
intent(inout) :: w(ixi^s, nw)
573 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
576 call p_to_e_pi(ixi^
l, ixo^
l, w, x)
581 end subroutine hd_to_conserved_pi
584 subroutine hd_to_primitive_pi(ixI^L, ixO^L, w, x)
587 integer,
intent(in) :: ixi^
l, ixo^
l
588 double precision,
intent(inout) :: w(ixi^s, nw)
589 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
590 double precision :: inv_rho, eint_val, t, rfac
597 'hd_to_primitive_PI')
600 {
do ix^db=ixomin^db,ixomax^db\}
601 inv_rho = 1.d0/w(ix^
d,
rho_)
605 eint_val = w(ix^
d,
e_) &
607 eint_val = max(eint_val, smalldouble)
613 if (
hd_dust)
call dust_to_primitive(ixi^l, ixo^l, w, x)
615 end subroutine hd_to_primitive_pi
641 subroutine hd_get_gamma1_lte(w, x, ixI^L, ixO^L, gamma1)
643 integer,
intent(in) :: ixi^
l, ixo^
l
644 double precision,
intent(in) :: w(ixi^s, nw)
645 double precision,
intent(in) :: x(ixi^s, 1:
ndim)
646 double precision,
intent(out) :: gamma1(ixi^s)
648 double precision :: nh_val, p_over_rho
651 if (
eos%gamma1_method ==
'constant')
then
652 gamma1(ixo^s) =
eos%gamma
656 {
do ix^db=ixomin^db,ixomax^db\}
657 p_over_rho = w(ix^
d,
p_) / w(ix^
d,
rho_)
658 if (p_over_rho >
eos%p_rho_FI_threshold)
then
659 gamma1(ix^
d) =
eos%gamma
661 nh_val = w(ix^
d,
rho_) /
eos%nH2rhoFactor
662 if (
eos%method ==
'analytic')
then
663 if (iw_te > 0 .and. w(ix^
d,iw_te) > 0.0d0)
then
666 gamma1(ix^
d) =
eos%gamma
670 dlog10(w(ix^
d,
p_) / nh_val))
675 end subroutine hd_get_gamma1_lte
680 subroutine rfactor_from_constant_ionization(w,x,ixI^L,ixO^L,Rfactor)
682 integer,
intent(in) :: ixi^
l, ixo^
l
683 double precision,
intent(in) :: w(ixi^s,1:nw)
684 double precision,
intent(in) :: x(ixi^s,1:
ndim)
685 double precision,
intent(out):: rfactor(ixi^s)
689 end subroutine rfactor_from_constant_ionization
694 subroutine hd_to_prolong_lte(ixI^L, ixO^L, w, x)
695 integer,
intent(in) :: ixi^l, ixo^l
696 double precision,
intent(inout) :: w(ixi^s, nw)
697 double precision,
intent(in) :: x(ixi^s, 1:ndim)
699 double precision :: inv_rho, eint_val, nh_val, log_nh, t_loc, y_loc
702 {
do ix^db=ixomin^db,ixomax^db\}
703 inv_rho = 1.d0 / w(ix^d,
rho_)
704 nh_val = w(ix^d,
rho_) /
eos%nH2rhoFactor
705 log_nh = dlog10(nh_val)
708 ^
c&w(ix^d,
m^
c_)=w(ix^d,
m^
c_)*inv_rho\
711 eint_val = w(ix^d,
e_) &
712 - half * w(ix^d,
rho_) * (^
c&w(ix^d,
m^
c_)**2+)
714 if (
eos%method /=
'analytic')
then
715 eint_val = max(eint_val, nh_val * 10.0d0**
eos%T%var2_min)
717 eint_val = max(eint_val, smalldouble)
720 if (eint_val * inv_rho >
eos%eint_rho_FI_threshold)
then
722 w(ix^d,
e_) =
eos%gamma_minus_1 &
723 * (eint_val -
eos%eion_per_nH * nh_val) &
724 / (nh_val *
eos%n_per_nH_FI)
725 else if (
eos%method ==
'analytic')
then
728 eint_val / nh_val, t_loc, y_loc)
733 dlog10(eint_val) - log_nh)
737 end subroutine hd_to_prolong_lte
741 subroutine hd_from_prolong_lte(ixI^L, ixO^L, w, x)
742 integer,
intent(in) :: ixi^l, ixo^l
743 double precision,
intent(inout) :: w(ixi^s, nw)
744 double precision,
intent(in) :: x(ixi^s, 1:ndim)
746 double precision :: t_val, eint_val, t_fi, nh_val, log_nh, log_t_min
749 t_fi = (eos%eint_rho_FI_threshold &
750 * eos%nH2rhoFactor - eos%eion_per_nH) &
751 * eos%gamma_minus_1 / eos%n_per_nH_FI
758 if (eos%method ==
'entropy')
then
759 log_t_min = eos%eintT%var2_min
761 log_t_min = eos%eint_from_T%var2_min
764 {
do ix^db=ixomin^db,ixomax^db\}
766 nh_val = w(ix^d, rho_) / eos%nH2rhoFactor
767 log_nh = dlog10(nh_val)
769 if (t_val > t_fi)
then
772 * (eos%n_per_nH_FI * t_val * eos%inv_gamma_minus_1 &
774 else if (eos%method ==
'analytic')
then
776 eint_val = saha_eint_from_nh_t(nh_val, t_val) * nh_val
779 eint_val = eint_nh_from_t(log_nh, &
780 dlog10(max(t_val, 10.0d0**log_t_min))) &
785 w(ix^d, e_) = eint_val &
786 + half * w(ix^d, rho_) * (^c&w(ix^d,m^c_)**2+)
788 ^c&w(ix^d,m^c_)=w(ix^d,rho_)*w(ix^d,m^c_)\
791 end subroutine hd_from_prolong_lte
subroutine, public mpistop(message)
Exit MPI-AMRVAC with an error message.
Module for including dust species, which interact with the gas through a drag force.
subroutine, public dust_to_primitive(ixil, ixol, w, x)
subroutine, public dust_to_conserved(ixil, ixol, w, x)
EoS state container – the single thermodynamic authority for AMRVAC.
type(eos_container), allocatable, public eos
The single EoS state object, allocated in eos_init and shared (read-mostly) across all EoS sub-module...
Entropy-method LTE EoS: every query is ONE bicubic Hermite evaluation.
subroutine, public entropy_eint_from_p_bisect(pfwd, pfwd_x, pfwd_y, pfwd_xy, eintp, eintp_x, eintp_y, eintp_xy, log_nh_code, log_p_nh_code, log_eint_nh_code)
Bisection inverse for the entropy table set: find log10(eint/nH) [code] such that p(nH,...
Analytic H-only Saha EoS (eos_method == 'analytic').
double precision function, public saha_gamma1_from_nh_t(nh_code, t_code)
Look up Gamma1 from the analytical 2D table (nH, T axes in code units). For use when eosmethod == 'an...
subroutine, public saha_t_from_nh_eint(nh_code, eint_nh_code, t_out, y_out)
Temperature inversion: given (nH, eint/nH) in CODE UNITS, find T in CODE UNITS, by bisection (guarant...
subroutine, public saha_state_from_nh_p(nh_code, p_code, t_out, y_out, eint_nh_out)
Given (nH, p) in CODE UNITS, find T and y by solving p = nH*(1+y(T))*T_code. Uses bisection on T....
LTE (Saha-table) EoS kernels and finalise for the eos% family.
double precision function, public p_nh_from_eint(log_nh, log_eint_nh)
p/nH from (log10 nH, log10 eint/nH) in code units. Returns (1+He+y)*T directly – single lookup replac...
double precision function, public p2eint_from_nh_p(nh, ponh)
Pressure-to-eint ratio from (log10 nH, log10 p/nH) in code units. Dispatches: analytic -> Saha solve ...
double precision function, public eint_nh_from_t(log_nh, log_t)
Internal energy per nH from (log10 nH, log10 T) in code units. Uses the bisection-built inverse table...
subroutine, public eint_from_p_bisect(log_nh_val, log_p_val, log_eint_nh_out)
Given log10(nH) and log10(p), find log10(eint/nH) by table-guessed bisection on the forward pressure ...
double precision function, public y_from_nh_eint(nh, eint_nh)
Ionization fraction from (log10 nH, log10 eint/nH) in code units. Dispatches: analytic -> Saha quadra...
subroutine, public get_temperature_from_eint_fast_lte(w, x, ixil, ixol, res)
subroutine, public eos_get_eintt_grid(n_nh, lg_nh_min, lg_nh_max)
log_nH grid metadata of the (log_nH, log_T) inverse table (eint from T), choosing the container by me...
double precision function, public gamma1_from_nh_p(log_nh, log_p_nh)
Gamma_1 from pressure-indexed table: (log10 nH, log10 p/nH) -> Gamma_1. For 'entropy' the conversion ...
double precision function, public t_from_nh_eint(nh, eint_nh)
Temperature from (log10 nH, log10 eint/nH) in code units. Dispatches: analytic -> Saha bisection/Newt...
PI (partial-ionisation, eos_type='PI') arm of the eos% family.
double precision function, dimension(log_nh, log_p_nh), public p2eint_pi(log_nh, log_p_nh)
eint/p factor from pressure per H: maps p -> eint = p * (this).
double precision function, dimension(log_nh, log_t), public eint_from_t_pi(log_nh, log_t)
Internal energy per H from temperature: eint/nH(T).
double precision function, dimension(log_nh, log_eint_nh), public y_from_eint_pi(log_nh, log_eint_nh)
Electron-to-hydrogen ratio ne/nH from internal energy per H. ne/nH = iz_H + A_He*iz_He*(1+iz_He) (mat...
subroutine, public get_gamma1_pi(w, x, ixil, ixol, gamma1)
Effective Gamma1 = cs2 * rho / p for the same primitive state.
subroutine, public eint_from_rho_p_pi(rho, p, eint)
Primitive pressure -> GAS internal energy (prim -> conserved direction): invert (rho,...
double precision function, dimension(log_nh, log_eint_nh), public t_from_eint_pi(log_nh, log_eint_nh)
Temperature from internal energy per H.
subroutine, public state_from_eint_pi(rho, eint, t, p, rfactor, iz_h, iz_he)
Conserved gas internal energy -> temperature, thermal pressure, R. Inverse of p_eint_from_rho_T_PI....
Equation of state for AMRVAC, handled through a single eos_container object.
subroutine, public eos_finalise()
Phase 'commit' (after units are known): finalise the dispatch for the loaded physics – wire the metho...
This module contains definitions of global parameters and variables and some generic functions/subrou...
integer, parameter ndim
Number of spatial dimensions for grid variables.
double precision, dimension(:), allocatable, parameter d
logical fix_small_values
fix small values with average or replace methods
HD <-> EoS seam: binds the eos% authority into hydrodynamics.
subroutine, public hd_get_pthermal(w, x, ixil, ixol, pth)
Calculate thermal pressure within ixO^L. For energy runs delegates to eosget_thermal_pressure; for no...
procedure(sub_convert), pointer, public hd_to_conserved
subroutine, public hd_link_eos()
Link the appropriate EOS conversion routines based on the selected EoS type.
procedure(sub_convert), pointer, public hd_to_primitive
Hydrodynamics physics module.
integer, public, protected m
logical, public, protected hd_energy
Whether an energy equation is used.
logical, public, protected hd_dust
Whether dust is added.
integer, public, protected e_
Index of the energy density (-1 if not present)
double precision, public, protected rr
type(tc_fluid), allocatable, public tc_fl
integer, public, protected c
Indices of the momentum density for the form of better vectorization.
double precision, public hd_adiab
gamma is set in &eos_list and accessed via eosgamma
integer, public, protected rho_
Whether plasma is partially ionized.
subroutine, public hd_handle_small_values(primitive, w, x, ixil, ixol, subname)
type(fld_fluid), allocatable, public fld_fl
Radiation fluid object (gas-EoS callbacks for FLD), wired in hd_link_eos.
integer, public, protected c_
type(rc_fluid), allocatable, public rc_fl
integer, public, protected p_
Index of the gas pressure (-1 if not present) should equal e_.
This module defines the procedures of a physics module. It contains function pointers for the various...
procedure(sub_check_params), pointer phys_bind_eos_to_source
procedure(sub_convert), pointer phys_to_primitive
procedure(sub_get_pthermal), pointer phys_get_gamma1
procedure(sub_get_pthermal), pointer phys_get_pthermal
procedure(sub_get_ei), pointer phys_get_ei
procedure(sub_convert), pointer phys_to_prolong
procedure(sub_convert), pointer phys_to_conserved
procedure(sub_convert), pointer phys_from_prolong
procedure(sub_get_rho), pointer phys_get_rho
module radiative cooling – add optically thin radiative cooling
subroutine build_y_mod_table(fl)
===================================================================
Module for handling problematic values in simulations, such as negative pressures.
logical, public trace_small_values
trace small values in the source file using traceback flag of compiler
double precision timeeos0
double precision timeeos_conv
double precision timeeos_csound
Module with all the methods that users can customize in AMRVAC.
procedure(rfactor), pointer usr_rfactor
procedure(hd_pthermal), pointer usr_set_pthermal