12 character(len=*),
intent(in) :: files(:)
18 open(
unitpar, file=trim(files(n)), status=
"old")
19 read(
unitpar, grav_list,
end=111)
36 energy,qsourcesplit,active)
40 integer,
intent(in) :: ixI^L, ixO^L
41 double precision,
intent(in) :: qdt, x(ixI^S,1:ndim)
42 double precision,
intent(in) :: wCT(ixI^S,1:nw)
43 double precision,
intent(inout) :: w(ixI^S,1:nw)
44 logical,
intent(in) :: energy,qsourcesplit
45 logical,
intent(inout) :: active
48 double precision :: gravity_field(ixI^S,ndim)
54 write(*,*)
"mod_usr.t: please point usr_gravity to a subroutine"
55 write(*,*)
"like the phys_gravity in mod_usr_methods.t"
56 call mpistop(
"gravity_add_source: usr_gravity not defined")
62 w(ixo^s,iw_mom(idim)) = w(ixo^s,iw_mom(idim)) &
63 + qdt * gravity_field(ixo^s,idim) * wct(ixo^s,iw_rho)
65 if(iw_equi_rho>0)
then
66 w(ixo^s,iw_e)=w(ixo^s,iw_e) &
67 + qdt * gravity_field(ixo^s,idim) *&
68 wct(ixo^s,iw_mom(idim))/(wct(ixo^s,iw_rho)+
block%equi_vars(ixo^s,iw_equi_rho,0))*&
72 w(ixo^s,iw_e)=w(ixo^s,iw_e) &
73 + qdt * gravity_field(ixo^s,idim) * wct(ixo^s,iw_mom(idim))
85 integer,
intent(in) :: ixI^L, ixO^L
86 double precision,
intent(in) :: dx^D, x(ixI^S,1:ndim), w(ixI^S,1:nw)
87 double precision,
intent(inout) :: dtnew
89 double precision :: dxinv(1:ndim), max_grav
92 double precision :: gravity_field(ixI^S,ndim)
94 ^d&dxinv(^d)=one/dx^d;
97 write(*,*)
"mod_usr.t: please point usr_gravity to a subroutine"
98 write(*,*)
"like the phys_gravity in mod_usr_methods.t"
99 call mpistop(
"gravity_get_dt: usr_gravity not defined")
105 max_grav = maxval(abs(gravity_field(ixo^s,idim)))
106 max_grav = max(max_grav, epsilon(1.0d0))
107 dtnew = min(dtnew, 1.0d0 / sqrt(max_grav * dxinv(idim)))
subroutine mpistop(message)
Exit MPI-AMRVAC with an error message.
This module contains definitions of global parameters and variables and some generic functions/subrou...
type(state), pointer block
Block pointer for using one block and its previous state.
integer, parameter unitpar
file handle for IO
character(len=std_len), dimension(:), allocatable par_files
Which par files are used as input.
Module for including gravity in (magneto)hydrodynamics simulations.
logical grav_split
source split or not
subroutine gravity_get_dt(w, ixIL, ixOL, dtnew, dxD, x)
subroutine gravity_add_source(qdt, ixIL, ixOL, wCT, w, x, energy, qsourcesplit, active)
w[iw]=w[iw]+qdt*S[wCT,qtC,x] where S is the source based on wCT within ixO
subroutine grav_params_read(files)
Read this module's parameters from a file.
subroutine gravity_init()
Initialize the module.
Module with all the methods that users can customize in AMRVAC.
procedure(phys_gravity), pointer usr_gravity