27 integer,
protected,
public ::
u_ = 1
28 integer,
protected,
public ::
v_ = 2
29 integer,
protected,
public ::
w_ = 3
35 double precision,
public,
protected ::
dtreacpar = 0.5d0
39 integer :: number_of_species = 2
40 integer :: equation_type = 1
41 integer,
parameter :: eq_gray_scott = 1
42 integer,
parameter :: eq_schnakenberg = 2
43 integer,
parameter :: eq_brusselator = 3
44 integer,
parameter :: eq_logistic = 4
45 integer,
parameter :: eq_analyt_hunds = 5
46 integer,
parameter :: eq_belousov_fn = 6
47 integer,
parameter :: eq_ext_brusselator = 7
48 integer,
parameter :: eq_lorenz = 8
49 integer,
parameter :: eq_no_reac = 9
52 double precision,
public,
protected ::
d1 = 0.05d0
54 double precision,
public,
protected ::
d2 = 1.0d0
56 double precision,
public,
protected ::
d3 = 1.0d0
62 double precision,
public,
protected ::
a1(^nd) = 0.0d0
64 double precision,
public,
protected ::
a2(^nd) = 0.0d0
66 double precision,
public,
protected ::
a3(^nd) = 0.0d0
69 double precision,
public,
protected ::
sb_alpha = 0.1305d0
70 double precision,
public,
protected ::
sb_beta = 0.7695d0
71 double precision,
public,
protected ::
sb_kappa = 100.0d0
74 double precision,
public,
protected ::
gs_f = 0.046d0
76 double precision,
public,
protected ::
gs_k = 0.063d0
79 double precision,
public,
protected ::
br_a = 4.5d0
80 double precision,
public,
protected ::
br_b = 8.0d0
81 double precision,
public,
protected ::
br_c = 1.0d0
82 double precision,
public,
protected ::
br_d = 1.0d0
85 double precision,
public,
protected ::
lg_lambda = 1.0d0
89 double precision,
public,
protected ::
bzfn_delta = 1.0d0
91 double precision,
public,
protected ::
bzfn_mu = 1.0d0
94 double precision,
public,
protected ::
lor_r = 28.0d0
96 double precision,
public,
protected ::
lor_sigma = 10.0d0
98 double precision,
public,
protected ::
lor_b = 8.0d0 / 3.0d0
101 logical :: ard_source_split = .false.
112 subroutine ard_params_read(files)
114 character(len=*),
intent(in) :: files(:)
117 namelist /ard_list/
d1,
d2,
d3,
adv_pow,
a1,
a2,
a3,
sb_alpha,
sb_beta,
sb_kappa, &
122 do n = 1,
size(files)
123 open(
unitpar, file=trim(files(n)), status=
'old')
124 read(
unitpar, ard_list,
end=111)
131 equation_type = eq_gray_scott
132 number_of_species = 2
133 case (
"schnakenberg")
134 equation_type = eq_schnakenberg
135 number_of_species = 2
137 equation_type = eq_brusselator
138 number_of_species = 2
140 equation_type = eq_logistic
141 number_of_species = 1
142 case (
"analyt_hunds")
143 equation_type = eq_analyt_hunds
144 number_of_species = 1
145 case (
"belousov_fieldnoyes")
146 equation_type = eq_belousov_fn
147 number_of_species = 3
148 case (
"ext_brusselator")
149 equation_type = eq_ext_brusselator
150 number_of_species = 3
152 equation_type = eq_lorenz
153 number_of_species = 3
155 equation_type = eq_no_reac
156 number_of_species = 1
158 call mpistop(
"Unknown equation_name (valid: gray-scott, schnakenberg, ...)")
161 end subroutine ard_params_read
166 integer,
intent(in) :: fh
167 integer,
parameter :: n_par = 0
168 integer,
dimension(MPI_STATUS_SIZE) :: st
172 call mpi_file_write(fh, n_par, 1, mpi_integer, st, er)
189 allocate(start_indices(number_species),stop_indices(number_species))
193 u_ = var_set_fluxvar(
"u",
"u")
194 if (number_of_species >= 2)
then
195 v_ = var_set_fluxvar(
"v",
"v")
197 if (number_of_species >= 3)
then
198 w_ = var_set_fluxvar(
"w",
"w")
204 stop_indices(1)=nwflux
211 call mpistop(
"phys_check error: flux_type has wrong shape")
237 integer :: n, i, iw, species_list(number_of_species)
241 select case(number_of_species)
244 if (
d1 == 0.0d0)
then
245 write(*, *)
"Diffusion coefficient cannot be zero in IMEX scheme"
246 call mpistop(
"Zero diffusion in IMEX scheme")
249 species_list = [
u_,
v_]
250 if ((
d1 == 0.0d0) .or. (
d2 == 0.0d0))
then
251 write(*, *)
"Diffusion coefficient cannot be zero in IMEX scheme"
252 call mpistop(
"Zero diffusion in IMEX scheme")
255 species_list = [
u_,
v_,
w_]
256 if ((
d1 == 0.0d0) .or. (
d2 == 0.0d0) .or. (
d3 == 0.0d0))
then
257 write(*, *)
"Diffusion coefficient cannot be zero in IMEX scheme"
258 call mpistop(
"Zero diffusion in IMEX scheme")
262 do i = 1, number_of_species
274 ard_mg_bc(i, n)%bc_type = mg_bc_dirichlet
283 if (.not.
associated(
ard_mg_bc(i, n)%boundary_cond))
then
284 write(*,
"(A,I0,A,I0,A)")
"typeboundary(", iw,
",", n, &
285 ") is 'special', but the corresponding method " // &
286 "ard_mg_bc(i, n)%boundary_cond is not set"
287 call mpistop(
"ard_mg_bc(i, n)%boundary_cond not set")
290 write(*,*)
"ard_check_params warning: unknown boundary type"
291 ard_mg_bc(i, n)%bc_type = mg_bc_dirichlet
302 integer,
intent(in) :: ixI^L, ixO^L
303 double precision,
intent(inout) :: w(ixI^S, nw)
304 double precision,
intent(in) :: x(ixI^S, 1:^ND)
311 integer,
intent(in) :: ixI^L, ixO^L
312 double precision,
intent(inout) :: w(ixI^S, nw)
313 double precision,
intent(in) :: x(ixI^S, 1:^ND)
320 integer,
intent(in) :: ixI^L, ixO^L, idim
321 double precision,
intent(in) :: w(ixI^S, nw), x(ixI^S, 1:^ND)
322 double precision,
intent(inout) :: cmax(ixI^S)
324 cmax(ixo^s) = abs(
a1(idim) * w(ixo^s,
u_)**(
adv_pow-1))
325 if (number_of_species >= 2)
then
326 cmax(ixo^s) = max(cmax(ixo^s), abs(
a2(idim) * w(ixo^s,
v_)**(
adv_pow-1)))
328 if (number_of_species >= 3)
then
329 cmax(ixo^s) = max(cmax(ixo^s), abs(
a3(idim) * w(ixo^s,
w_)**(
adv_pow-1)))
334 subroutine ard_get_cbounds(wLC, wRC, wLp, wRp, x, ixI^L, ixO^L, idim,Hspeed, cmax, cmin)
337 integer,
intent(in) :: ixI^L, ixO^L, idim
338 double precision,
intent(in) :: wLC(ixI^S, nw), wRC(ixI^S,nw)
339 double precision,
intent(in) :: wLp(ixI^S, nw), wRp(ixI^S,nw)
340 double precision,
intent(in) :: x(ixI^S, 1:^ND)
341 double precision,
intent(in) :: Hspeed(ixI^S,1:number_species)
342 double precision,
intent(inout) :: cmax(ixI^S,1:number_species)
343 double precision,
intent(inout),
optional :: cmin(ixI^S,1:number_species)
345 double precision :: wmean(ixI^S,nw)
351 if (
present(cmin))
then
352 cmin(ixo^s,1) = min(
a1(idim) * wmean(ixo^s,
u_)**(
adv_pow-1), zero)
353 cmax(ixo^s,1) = max(
a1(idim) * wmean(ixo^s,
u_)**(
adv_pow-1), zero)
354 if (number_of_species >= 2)
then
355 cmin(ixo^s,1) = min(cmin(ixo^s,1),
a2(idim) * wmean(ixo^s,
v_)**(
adv_pow-1))
356 cmax(ixo^s,1) = max(cmax(ixo^s,1),
a2(idim) * wmean(ixo^s,
v_)**(
adv_pow-1))
358 if (number_of_species >= 3)
then
359 cmin(ixo^s,1) = min(cmin(ixo^s,1),
a3(idim) * wmean(ixo^s,
w_)**(
adv_pow-1))
360 cmax(ixo^s,1) = max(cmax(ixo^s,1),
a3(idim) * wmean(ixo^s,
w_)**(
adv_pow-1))
363 cmax(ixo^s,1) = maxval(abs(
a1(idim) * wmean(ixo^s,
u_)**(
adv_pow-1)))
364 if (number_of_species >=2)
then
365 cmax(ixo^s,1) = max(cmax(ixo^s,1), maxval(abs(
a2(idim) * wmean(ixo^s,
v_)**(
adv_pow-1))))
367 if (number_of_species >=3)
then
368 cmax(ixo^s,1) = max(cmax(ixo^s,1), maxval(abs(
a3(idim) * wmean(ixo^s,
w_)**(
adv_pow-1))))
376 integer,
intent(in) :: ixI^L, ixO^L
377 double precision,
intent(in) :: dx^D, x(ixI^S, 1:^ND)
378 double precision,
intent(in) :: w(ixI^S, 1:nw)
379 double precision,
intent(inout) :: dtnew
380 double precision :: maxrate
381 double precision :: maxD
382 double precision :: maxA
389 if (number_of_species >= 2)
then
392 if (number_of_species >= 3)
then
395 dtnew = min(dtnew,
dtdiffpar * minval([ dx^d ])**2 / (2 *
ndim * maxd))
398 select case (equation_type)
400 maxrate = max(maxval(w(ixo^s,
v_))**2 +
gs_f, &
402 case (eq_schnakenberg)
403 maxrate = max(maxval(abs(w(ixo^s,
v_) * w(ixo^s,
u_) - 1)), &
404 maxval(w(ixo^s,
u_))**2)
405 case (eq_brusselator)
406 maxrate = max( maxval(w(ixo^s,
u_)*w(ixo^s,
v_) - (
br_b+1)), &
407 maxval(w(ixo^s,
u_)**2) )
408 case (eq_ext_brusselator)
409 maxrate = max( maxval(w(ixo^s,
u_)*w(ixo^s,
v_) - (
br_b+1)) +
br_c, &
410 maxval(w(ixo^s,
u_)**2) )
411 maxrate = max(maxrate,
br_d)
414 case (eq_analyt_hunds)
415 maxrate = maxval(w(ixo^s,
u_)*abs(1 - w(ixo^s,
u_))) /
d1
416 case (eq_belousov_fn)
429 call mpistop(
"Unknown equation type")
439 integer,
intent(in) :: ixI^L, ixO^L, idim
440 double precision,
intent(in) :: wC(ixI^S, 1:nw)
441 double precision,
intent(in) :: w(ixI^S, 1:nw)
442 double precision,
intent(in) :: x(ixI^S, 1:^ND)
443 double precision,
intent(out) :: f(ixI^S, nwflux)
446 if (number_of_species >=2)
then
449 if (number_of_species >=3)
then
462 integer,
intent(in) :: ixI^L, ixO^L
463 double precision,
intent(in) :: qdt, x(ixI^S, 1:^ND)
464 double precision,
intent(inout) :: wCT(ixI^S, 1:nw), w(ixI^S, 1:nw)
471 integer,
intent(in) :: ixI^L, ixO^L
472 double precision,
intent(in) :: qdt
473 double precision,
intent(in) :: wCT(ixI^S, 1:nw), x(ixI^S, 1:ndim)
474 double precision,
intent(inout) :: w(ixI^S, 1:nw)
475 double precision :: lpl_u(ixO^S), lpl_v(ixO^S), lpl_w(ixO^S)
476 logical,
intent(in) :: qsourcesplit
477 logical,
intent(inout) :: active
478 double precision,
intent(in),
optional :: wCTprim(ixI^S, 1:nw)
481 if (qsourcesplit .eqv. ard_source_split)
then
484 if (number_of_species >= 2)
then
487 if (number_of_species >= 3)
then
497 select case (equation_type)
499 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u - &
500 wct(ixo^s,
u_) * wct(ixo^s,
v_)**2 + &
501 gs_f * (1 - wct(ixo^s,
u_)))
502 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v + &
503 wct(ixo^s,
u_) * wct(ixo^s,
v_)**2 - &
505 case (eq_schnakenberg)
506 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
508 wct(ixo^s,
u_)**2 * wct(ixo^s,
v_)))
509 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v &
511 case (eq_brusselator)
512 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
514 + wct(ixo^s,
u_)**2 * wct(ixo^s,
v_))
515 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v &
516 +
br_b * wct(ixo^s,
u_) - wct(ixo^s,
u_)**2 * wct(ixo^s,
v_))
517 case (eq_ext_brusselator)
518 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
520 + wct(ixo^s,
u_)**2 * wct(ixo^s,
v_) &
522 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v &
524 - wct(ixo^s,
u_)**2 * wct(ixo^s,
v_))
525 w(ixo^s,
w_) = w(ixo^s,
w_) + qdt * (
d3 * lpl_w &
528 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
530 case (eq_analyt_hunds)
531 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
532 + 1.0d0/
d1 * w(ixo^s,
u_)**2 * (1 - w(ixo^s,
u_)))
533 case (eq_belousov_fn)
534 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
536 - wct(ixo^s,
u_)*wct(ixo^s,
w_) + wct(ixo^s,
u_) &
537 - wct(ixo^s,
u_)**2))
538 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v &
539 + wct(ixo^s,
u_) - wct(ixo^s,
v_))
540 w(ixo^s,
w_) = w(ixo^s,
w_) + qdt * (
d3 * lpl_w &
545 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt * (
d1 * lpl_u &
548 w(ixo^s,
v_) = w(ixo^s,
v_) + qdt * (
d2 * lpl_v &
549 +
lor_r * wct(ixo^s,
u_) - wct(ixo^s,
v_) &
550 - wct(ixo^s,
u_)*wct(ixo^s,
w_))
552 w(ixo^s,
w_) = w(ixo^s,
w_) + qdt * (
d3 * lpl_w &
553 + wct(ixo^s,
u_)*wct(ixo^s,
v_) -
lor_b * wct(ixo^s,
w_))
555 w(ixo^s,
u_) = w(ixo^s,
u_) + qdt *
d1 * lpl_u
557 call mpistop(
"Unknown equation type")
570 integer,
intent(in) :: ixI^L, ixO^L
571 double precision,
intent(in) :: var(ixI^S)
572 double precision,
intent(out) :: lpl(ixO^S)
573 integer :: idir, jxO^L, hxO^L
574 double precision :: h_inv2
579 hxo^l=ixo^l-
kr(idir,^
d);
580 jxo^l=ixo^l+
kr(idir,^
d);
582 lpl(ixo^s) = lpl(ixo^s) + h_inv2 * &
583 (var(jxo^s) - 2 * var(ixo^s) + var(hxo^s))
586 call mpistop(
"ard_laplacian not implemented in this geometry")
593 integer,
intent(in) :: ixI^L, ixO^L
594 double precision,
intent(inout) :: w(ixI^S, 1:nw)
596 double precision :: lpl_u(ixO^S), lpl_v(ixO^S), lpl_w(ixO^S)
599 if (number_of_species >= 2)
then
602 if (number_of_species >= 3)
then
606 w(ixo^s,
u_) =
d1*lpl_u
607 if (number_of_species >= 2)
then
608 w(ixo^s,
v_) =
d2*lpl_v
610 if (number_of_species >= 3)
then
611 w(ixo^s,
w_) =
d3*lpl_w
619 type(state),
target :: psa(max_blocks)
620 double precision,
intent(in) :: qtC
622 integer :: iigrid, igrid, level
628 do iigrid=1,igridstail; igrid=igrids(iigrid);
641 type(state),
target :: psa(max_blocks)
642 type(state),
target :: psb(max_blocks)
643 double precision,
intent(in) :: qdt
644 double precision,
intent(in) :: qtC
645 double precision,
intent(in) :: dtfactor
648 double precision :: res, max_residual, lambda
650 integer :: iw_to,iw_from
651 integer :: iigrid, igrid, id
658 if (qdt <
dtmin)
then
660 print *,
'skipping implicit solve: dt too small!'
665 max_residual = 1
d-7/qdt
667 mg%operator_type = mg_helmholtz
668 call mg_set_methods(mg)
670 if (.not. mg%is_allocated)
call mpistop(
"multigrid tree not allocated yet")
673 lambda = 1/(dtfactor * qdt *
d1)
674 call helmholtz_set_lambda(lambda)
677 call mg_copy_to_tree(
u_, mg_irhs, factor=-lambda, state_from=psb)
678 call mg_copy_to_tree(
u_, mg_iphi, state_from=psb)
680 call mg_fas_fmg(mg, .true., max_res=res)
682 call mg_fas_vcycle(mg, max_res=res)
683 if (res < max_residual)
exit
686 call mg_copy_from_tree_gc(mg_iphi,
u_, state_to=psa)
690 if (number_of_species >= 2)
then
691 lambda = 1/(dtfactor * qdt *
d2)
692 call helmholtz_set_lambda(lambda)
695 call mg_copy_to_tree(
v_, mg_irhs, factor=-lambda, state_from=psb)
696 call mg_copy_to_tree(
v_, mg_iphi, state_from=psb)
698 call mg_fas_fmg(mg, .true., max_res=res)
700 call mg_fas_vcycle(mg, max_res=res)
701 if (res < max_residual)
exit
704 call mg_copy_from_tree_gc(mg_iphi,
v_, state_to=psa)
709 if (number_of_species >= 3)
then
710 lambda = 1/(dtfactor * qdt *
d3)
711 call helmholtz_set_lambda(lambda)
713 call mg_copy_to_tree(
w_, mg_irhs, factor=-lambda, state_from=psb)
714 call mg_copy_to_tree(
w_, mg_iphi, state_from=psb)
716 call mg_fas_fmg(mg, .true., max_res=res)
718 call mg_fas_vcycle(mg, max_res=res)
719 if (res < max_residual)
exit
722 call mg_copy_from_tree_gc(mg_iphi,
w_, state_to=psa)
subroutine mpistop(message)
Exit MPI-AMRVAC with an error message.
Module containing the physics routines for advection-reaction-diffusion equations.
subroutine ard_get_flux(wC, w, x, ixIL, ixOL, idim, f)
double precision, public, protected br_a
Parameters for Brusselator model.
double precision, dimension(^nd), public, protected a3
Advection coefficients for third species (w) (if applicable)
double precision, public, protected lg_lambda
Parameter for logistic model (Fisher / KPP equation)
double precision, public, protected gs_k
Kill rate for Gray-Scott model.
integer, public, protected v_
For 2 or more equations.
subroutine ard_get_dt(w, ixIL, ixOL, dtnew, dxD, x)
double precision, public, protected sb_alpha
Parameters for Schnakenberg model.
double precision, public, protected gs_f
Feed rate for Gray-Scott model.
double precision, public, protected sb_beta
double precision, public, protected br_b
subroutine ard_get_cmax(w, x, ixIL, ixOL, idim, cmax)
double precision, public, protected br_c
subroutine, public ard_phys_init()
subroutine ard_get_cbounds(wLC, wRC, wLp, wRp, x, ixIL, ixOL, idim, Hspeed, cmax, cmin)
double precision, public, protected sb_kappa
character(len=20), public, protected equation_name
Name of the system to be solved.
integer, public, protected u_
Indices of the unknowns.
double precision, public, protected lor_b
Parameter for Lorenz system (aspect ratio of the convection rolls)
double precision, public, protected dtreacpar
Parameter with which to multiply the reaction timestep restriction.
double precision, public, protected bzfn_mu
double precision, public, protected lor_sigma
Parameter for Lorenz system (Prandtl number)
integer, public, protected adv_pow
Power of the unknown in the advection term (1 for linear)
subroutine ard_laplacian(ixIL, ixOL, var, lpl)
Compute the Laplacian using a standard second order scheme. For now this method only works in slab ge...
double precision, public, protected d1
Diffusion coefficient for first species (u)
double precision, public, protected d2
Diffusion coefficient for second species (v) (if applicable)
type(mg_bc_t), dimension(3, mg_num_neighbors), public ard_mg_bc
Boundary condition information for the multigrid method.
double precision, public, protected bzfn_epsilon
Parameters for the Field-Noyes model of the Belousov-Zhabotinsky reaction.
logical, public, protected ard_particles
Whether particles module is added.
double precision, public, protected lor_r
Parameter for Lorenz system (Rayleigh number)
double precision, dimension(^nd), public, protected a2
Advection coefficients for second species (v) (if applicable)
subroutine put_laplacians_onegrid(ixIL, ixOL, w)
double precision, public, protected d3
Diffusion coefficient for third species (w) (if applicable)
double precision, public, protected bzfn_lambda
subroutine ard_write_info(fh)
Write this modules parameters to a snapshot.
integer, public, protected w_
For 3 or more equations.
subroutine ard_implicit_update(dtfactor, qdt, qtC, psa, psb)
Implicit solve of psa=psb+dtfactor*dt*F_im(psa)
subroutine ard_add_source(qdt, ixIL, ixOL, wCT, w, x, qsourcesplit, active, wCTprim)
subroutine ard_check_params
double precision, dimension(^nd), public, protected a1
Advection coefficients for first species (u)
subroutine ard_to_primitive(ixIL, ixOL, w, x)
double precision, public, protected bzfn_delta
subroutine ard_evaluate_implicit(qtC, psa)
inplace update of psa==>F_im(psa)
subroutine ard_add_source_geom(qdt, ixIL, ixOL, wCT, w, x)
subroutine ard_to_conserved(ixIL, ixOL, w, x)
double precision, public, protected br_d
Module with basic grid data structures.
This module contains definitions of global parameters and variables and some generic functions/subrou...
double precision dtdiffpar
For resistive MHD, the time step is also limited by the diffusion time: .
integer, parameter unitpar
file handle for IO
integer, parameter bc_asymm
double precision global_time
The global simulation time.
logical use_imex_scheme
whether IMEX in use or not
integer, dimension(3, 3) kr
Kronecker delta tensor.
integer, dimension(:, :), allocatable typeboundary
Array indicating the type of boundary condition per variable and per physical boundary.
integer, parameter ndim
Number of spatial dimensions for grid variables.
logical use_particles
Use particles module or not.
character(len=std_len), dimension(:), allocatable par_files
Which par files are used as input.
integer mype
The rank of the current MPI task.
integer, dimension(:), allocatable, parameter d
integer ndir
Number of spatial dimensions (components) for vector variables.
integer ixm
the mesh range (within a block with ghost cells)
logical slab
Cartesian geometry or not.
integer, parameter bc_periodic
integer, parameter bc_special
boundary condition types
double precision, dimension(:,:), allocatable rnode
Corner coordinates.
integer, parameter bc_cont
integer, parameter bc_symm
logical use_multigrid
Use multigrid (only available in 2D and 3D)
double precision dtmin
Stop the simulation when the time step becomes smaller than this value.
double precision, dimension(ndim) dxlevel
Module to couple the octree-mg library to AMRVAC. This file uses the VACPP preprocessor,...
Module containing all the particle routines.
subroutine particles_init()
Initialize particle data and parameters.
This module defines the procedures of a physics module. It contains function pointers for the various...
procedure(sub_convert), pointer phys_to_primitive
procedure(sub_write_info), pointer phys_write_info
procedure(sub_get_flux), pointer phys_get_flux
procedure(sub_evaluate_implicit), pointer phys_evaluate_implicit
logical phys_req_diagonal
Whether the physics routines require diagonal ghost cells, for example for computing a curl.
procedure(sub_get_cbounds), pointer phys_get_cbounds
procedure(sub_get_dt), pointer phys_get_dt
procedure(sub_add_source_geom), pointer phys_add_source_geom
procedure(sub_check_params), pointer phys_check_params
integer, parameter flux_default
Indicates a normal flux.
integer, dimension(:, :), allocatable flux_type
Array per direction per variable, which can be used to specify that certain fluxes have to be treated...
procedure(sub_convert), pointer phys_to_conserved
character(len=name_len) physics_type
String describing the physics type of the simulation.
procedure(sub_implicit_update), pointer phys_implicit_update
procedure(sub_add_source), pointer phys_add_source
procedure(sub_get_cmax), pointer phys_get_cmax
logical phys_energy
Solve energy equation or not.
integer nwflux
Number of flux variables.
The data structure that contains information about a tree node/grid block.