78 REAL,
PARAMETER :: gn = 1.0
81 INTEGER,
PARAMETER :: shearsheet_direction = 1
83 REAL,
PARAMETER ::
omega = 1.0
84 REAL,
PARAMETER :: sigma0 = 1.0
85 REAL,
PARAMETER :: delsigma = sigma0*5.0e-4
86 REAL,
PARAMETER :: tsim = 4.54845485/
omega
87 REAL,
PARAMETER :: gamma = 2.0
88 REAL,
PARAMETER :: q = 1.5
93 REAL,
PARAMETER :: soundspeed = pi*gn*sigma0/
omega
95 INTEGER,
PARAMETER :: mgeo = cartesian
96 INTEGER,
PARAMETER :: xres = 128
97 INTEGER,
PARAMETER :: yres = 128
98 INTEGER,
PARAMETER :: zres = 1
99 REAL,
PARAMETER :: thickness = 0e-5
101 REAL :: domainx = 40.0
102 REAL :: domainy = 40.0
104 INTEGER,
PARAMETER :: onum = 10
106 CHARACTER(LEN=256),
PARAMETER :: odir =
"./"
107 CHARACTER(LEN=256),
PARAMETER :: ofname =
"sblintheo"
109 CLASS(
fosite),
ALLOCATABLE :: sim
117 CALL sim%InitFosite()
120 CALL initdata(sim%Mesh, sim%Physics, sim%Timedisc%pvar, sim%Timedisc%cvar)
124 IF (sim%Mesh%dz.GT.0.0)
THEN
125 maximum = maxval(sim%Timedisc%pvar%data4d(:,:,:,sim%Physics%DENSITY))*sim%Mesh%dz - sigma0
127 maximum = maxval(sim%Timedisc%pvar%data4d(:,:,:,sim%Physics%DENSITY)) - sigma0
133 tap_check_close(maximum, 0.02395931, 0.0003,
"First max. < 3e-4 deviation")
143 TYPE(dict_typ),
POINTER :: config
145 TYPE(dict_typ),
POINTER :: mesh,physics,fluxes,&
146 grav,sources,timedisc,datafile
147 REAL :: XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX
155 zmin = -0.5*thickness*domainx
156 zmax = +0.5*thickness*domainx
160 "problem" / euler_isotherm, &
162 "units" / geometrical &
167 "meshtype" / midpoint, &
169 "shearingbox" / shearsheet_direction, &
180 "decomposition"/ (/ 1, -1, 1/), &
181 "output/rotation" / 0, &
182 "output/volume" / 0, &
192 "variables" / primitive, &
193 "limiter" / vanleer &
199 "self/gtype" / sboxspectral, &
200 "self/output/accel" / 1, &
201 "self/output/potential" / 1 &
211 "method" / dormand_prince, &
214 "dtlimit" / 1.0e-40, &
216 "maxiter" / 100000000)
220 "fileformat" / vtk, &
221 "filename" / (trim(odir) // trim(ofname)), &
227 "physics" / physics, &
229 "sources" / sources, &
230 "timedisc" / timedisc, &
231 "datafile" / datafile &
240 CLASS(mesh_base),
INTENT(IN) :: Mesh
241 CLASS(physics_base),
INTENT(IN) :: Physics
242 CLASS(marray_compound),
POINTER,
INTENT(INOUT) :: pvar,cvar
249 kx = -2*(2*pi/domainx)
253 SELECT TYPE(p => pvar)
254 TYPE IS(statevector_eulerisotherm)
255 IF(mesh%shear_dir.EQ.2)
THEN
256 p%density%data3d(:,:,:) = sigma0 &
257 + delsigma*cos(kx*mesh%bcenter(:,:,:,1) + ky*mesh%bcenter(:,:,:,2))
258 p%velocity%data2d(:,1) = 0.0
259 p%velocity%data4d(:,:,:,2) = -q*
omega*mesh%bcenter(:,:,:,1)
260 ELSE IF(mesh%shear_dir.EQ.1)
THEN
261 p%density%data3d(:,:,:) = sigma0 &
262 + delsigma*cos(kx*mesh%bcenter(:,:,:,2) - ky*mesh%bcenter(:,:,:,1))
263 p%velocity%data4d(:,:,:,1) = q*
omega*mesh%bcenter(:,:,:,2)
264 p%velocity%data2d(:,2) = 0.0
268 IF (mesh%dz.GT.0.0) p%density%data1d(:) = p%density%data1d(:) / mesh%dz
269 TYPE IS(statevector_euler)
270 IF(mesh%shear_dir.EQ.2)
THEN
271 p%density%data3d(:,:,:) = sigma0 &
272 + delsigma*cos(kx*mesh%bcenter(:,:,:,1) + ky*mesh%bcenter(:,:,:,2))
273 p%velocity%data2d(:,1) = 0.0
274 p%velocity%data4d(:,:,:,2) = -q*
omega*mesh%bcenter(:,:,:,1)
275 ELSE IF(mesh%shear_dir.EQ.1)
THEN
276 p%density%data3d(:,:,:) = sigma0 &
277 + delsigma*cos(kx*mesh%bcenter(:,:,:,2) - ky*mesh%bcenter(:,:,:,1))
278 p%velocity%data4d(:,:,:,1) = q*
omega*mesh%bcenter(:,:,:,2)
279 p%velocity%data2d(:,2) = 0.0
281 p%pressure%data3d(:,:,:) = soundspeed**2 * sigma0 / gamma
284 IF (mesh%dz.GT.0.0)
THEN
285 p%density%data1d(:) = p%density%data1d(:) / mesh%dz
286 p%pressure%data1d(:) = p%pressure%data1d(:) / mesh%dz
289 CALL physics%Error(
"sblintheo::InitData",
"only (non-)isothermal HD supported")
292 CALL physics%Convert2Conservative(pvar,cvar)
296 CALL mesh%Info(
" DATA-----> initial condition: " // &
297 "Linear Theory Test - Shearingsheet")
subroutine initdata(Mesh, Physics, Fluxes, Timedisc)
subroutine makeconfig(Sim, config)
pure real function, dimension(size(ephir%data2d, dim=1)) omega(ephir, velocity)