8 integer,
protected,
public ::
rho_ = 1
27 subroutine nonlinear_params_read(files)
29 character(len=*),
intent(in) :: files(:)
35 open(
unitpar, file=trim(files(n)), status=
'old')
36 read(
unitpar, nonlinear_list,
end=111)
40 end subroutine nonlinear_params_read
43 subroutine nonlinear_write_info(fh)
51 integer,
intent(in) :: fh
52 integer,
dimension(MPI_STATUS_SIZE) :: st
56 call mpi_file_write(fh, 0, 1, mpi_integer, st, er)
58 end subroutine nonlinear_write_info
72 allocate(start_indices(number_species),stop_indices(number_species))
81 stop_indices(1)=nwflux
91 call mpistop(
"phys_check error: flux_type has wrong shape")
113 subroutine nonlinear_to_conserved(ixI^L, ixO^L, w, x)
115 integer,
intent(in) :: ixi^
l, ixo^
l
116 double precision,
intent(inout) :: w(ixi^s, nw)
117 double precision,
intent(in) :: x(ixi^s, 1:^nd)
120 end subroutine nonlinear_to_conserved
122 subroutine nonlinear_to_primitive(ixI^L, ixO^L, w, x)
124 integer,
intent(in) :: ixi^
l, ixo^
l
125 double precision,
intent(inout) :: w(ixi^s, nw)
126 double precision,
intent(in) :: x(ixi^s, 1:^nd)
129 end subroutine nonlinear_to_primitive
133 integer,
intent(in) :: ixi^
l, ixo^
l, idim
134 double precision,
intent(in) :: w(ixi^s, nw), x(ixi^s, 1:^nd)
135 double precision,
intent(out) :: v(ixi^s)
139 v(ixo^s)=w(ixo^s,
rho_)
141 v(ixo^s)=3.0d0*w(ixo^s,
rho_)**2
143 call mpistop(
'Undefined fluxtype: set nonlinear_flux_type to 1 or 2')
148 subroutine nonlinear_get_cmax(w, x, ixI^L, ixO^L, idim, cmax)
150 integer,
intent(in) :: ixi^
l, ixo^
l, idim
151 double precision,
intent(in) :: w(ixi^s, nw), x(ixi^s, 1:^nd)
152 double precision,
intent(inout) :: cmax(ixi^s)
156 cmax(ixo^s) = abs(cmax(ixo^s))
158 end subroutine nonlinear_get_cmax
160 subroutine nonlinear_get_cbounds(wLC, wRC, wLp, wRp, x, ixI^L, ixO^L, idim,Hspeed, cmax, cmin)
163 integer,
intent(in) :: ixi^
l, ixo^
l, idim
164 double precision,
intent(in) :: wlc(ixi^s,
nw), wrc(ixi^s,
nw)
165 double precision,
intent(in) :: wlp(ixi^s,
nw), wrp(ixi^s,
nw)
166 double precision,
intent(in) :: x(ixi^s, 1:^nd)
168 double precision,
intent(inout),
optional :: cmin(ixi^s,1:
number_species)
170 double precision :: wmean(ixi^s,
nw)
177 if (
present(cmin))
then
178 cmin(ixo^s,1) = min(cmax(ixo^s,1), zero)
179 cmax(ixo^s,1) = max(cmax(ixo^s,1), zero)
181 cmax(ixo^s,1) = maxval(abs(cmax(ixo^s,1)))
184 end subroutine nonlinear_get_cbounds
186 subroutine nonlinear_get_dt(w, ixI^L, ixO^L, dtnew, dx^D, x)
190 integer,
intent(in) :: ixi^
l, ixo^
l
191 double precision,
intent(in) ::
dx^
d, x(ixi^s, 1:^nd)
192 double precision,
intent(in) :: w(ixi^s, 1:nw)
193 double precision,
intent(inout) :: dtnew
200 end subroutine nonlinear_get_dt
203 subroutine nonlinear_get_flux(wC, w, x, ixI^L, ixO^L, idim, f)
205 integer,
intent(in) :: ixi^
l, ixo^
l, idim
206 double precision,
intent(in) :: wc(ixi^s, 1:nw)
207 double precision,
intent(in) :: w(ixi^s, 1:nw)
208 double precision,
intent(in) :: x(ixi^s, 1:^nd)
209 double precision,
intent(out) :: f(ixi^s, nwflux)
217 call mpistop(
'Undefined fluxtype: set nonlinear_flux_type to 1 or 2')
220 end subroutine nonlinear_get_flux
222 subroutine nonlinear_add_source_geom(qdt, dtfactor, ixI^L, ixO^L, wCT,wprim, w, x)
229 integer,
intent(in) :: ixi^
l, ixo^
l
230 double precision,
intent(in) :: qdt, dtfactor, x(ixi^s, 1:^nd)
231 double precision,
intent(inout) :: wct(ixi^s, 1:nw), wprim(ixi^s,1:nw),w(ixi^s, 1:nw)
233 end subroutine nonlinear_add_source_geom
235 subroutine nonlinear_add_source(qdt, dtfactor, ixI^L,ixO^L,wCT,wCTprim,w,x,qsourcesplit,active)
239 integer,
intent(in) :: ixi^
l, ixo^
l
240 double precision,
intent(in) :: qdt,dtfactor
241 double precision,
intent(in) :: wct(ixi^s, 1:nw),wctprim(ixi^s,1:nw), x(ixi^s, 1:
ndim)
242 double precision,
intent(inout) :: w(ixi^s, 1:nw)
243 logical,
intent(in) :: qsourcesplit
244 logical,
intent(inout) :: active
250 end subroutine nonlinear_add_source
This module contains definitions of global parameters and variables and some generic functions/subrou...
integer, parameter unitpar
file handle for IO
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.
double precision, dimension(:), allocatable, parameter d
integer ndir
Number of spatial dimensions (components) for vector variables.
double precision, dimension(:,:), allocatable dx
Module for including kdv source term in simulations adds over dimensions i.
subroutine kdv_add_source(qdt, ixil, ixol, wct, w, x, qsourcesplit, active)
w[iw]=w[iw]+qdt*S[wCT,qtC,x] where S is the source based on wCT within ixO
subroutine kdv_init()
Initialize the module.
subroutine kdv_get_dt(w, ixil, ixol, dtnew, dxd, x)
Module containing the physics routines for scalar nonlinear equation.
logical, public, protected nonlinear_particles
Whether particles module is added.
integer, public, protected nonlinear_flux_type
switch between burgers (i.e. rho**2) or nonconvex flux (i.e. rho**3)
logical, public, protected kdv_source_term
whether the KdV source term is added
integer, public, protected rho_
index of the single scalar unknown
subroutine, public nonlinear_phys_init()
subroutine, public nonlinear_get_v(w, x, ixil, ixol, idim, v)
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_get_cbounds), pointer phys_get_cbounds
procedure(sub_get_dt), pointer phys_get_dt
procedure(sub_add_source_geom), pointer phys_add_source_geom
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_add_source), pointer phys_add_source
procedure(sub_get_cmax), pointer phys_get_cmax
logical phys_energy
Solve energy equation or not.
integer nw
Total number of variables.
integer number_species
number of species: each species has different characterictic speeds and should be used accordingly in...
integer nwflux
Number of flux variables.