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
88 REAL,
PARAMETER :: gamma = 1.4
89 REAL,
PARAMETER :: q = 1.5
94 REAL,
PARAMETER :: soundspeed = pi*gn*sigma0/
omega
95 REAL,
PARAMETER :: height = soundspeed/
omega
97 INTEGER,
PARAMETER :: phys = euler_isotherm
99 INTEGER,
PARAMETER :: mgeo = cartesian
100 INTEGER,
PARAMETER :: xres = 64
101 INTEGER,
PARAMETER :: yres = 64
102 INTEGER,
PARAMETER :: zres = 16
104 REAL :: domainx = 40.0
105 REAL :: domainy = 40.0
106 REAL :: domainz = 10.0
108 INTEGER,
PARAMETER :: onum = 10
110 CHARACTER(LEN=256),
PARAMETER :: odir =
"./"
111 CHARACTER(LEN=256),
PARAMETER :: ofname =
"sblintheo3D"
113 CLASS(
fosite),
ALLOCATABLE :: sim
121 CALL sim%InitFosite()
124 CALL initdata(sim%Mesh, sim%Physics, sim%Timedisc%pvar, sim%Timedisc%cvar)
126 ok = .NOT.sim%aborted
135tap_check(ok,
"stoptime reached")
145 TYPE(dict_typ),
POINTER :: config
147 TYPE(dict_typ),
POINTER :: mesh,physics,fluxes,boundary,&
148 grav,sources,timedisc,datafile
149 REAL :: XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX
163 physics => dict(
"problem" / euler_isotherm, &
165 "units" / geometrical)
167 physics => dict(
"problem" / euler, &
169 "units" / geometrical)
171 CALL sim%Error(
"sblintheo3D::MakeConfig",
"unsupported physics")
176 "meshtype" / midpoint, &
178 "shearingbox" / shearsheet_direction, &
189 "decomposition"/ (/ 1, -1, 1/), &
190 "output/rotation" / 0, &
191 "output/volume" / 0, &
201 "bottomer" / reflecting,&
202 "topper" / reflecting)
208 "variables" / primitive, &
209 "limiter" / vanleer &
215 "self/gtype" / sboxspectral, &
216 "self/output/accel" / 0, &
217 "self/output/potential" / 0 &
227 "method" / dormand_prince, &
230 "dtlimit" / 1.0e-40, &
232 "maxiter" / 100000000)
236 "fileformat" / vtk, &
237 "filename" / (trim(odir) // trim(ofname)), &
243 "physics" / physics, &
245 "boundary" / boundary, &
246 "sources" / sources, &
247 "timedisc" / timedisc, &
248 "datafile" / datafile &
256 CLASS(mesh_base),
INTENT(IN) :: Mesh
257 CLASS(physics_base),
INTENT(IN) :: Physics
258 CLASS(marray_compound),
POINTER,
INTENT(INOUT) :: pvar,cvar
265 kx = -2*(2*pi/domainx)
270 SELECT TYPE(p => pvar)
271 TYPE IS(statevector_eulerisotherm)
273 p%velocity%data1d(:) = 0.0
274 IF(mesh%shear_dir.EQ.2)
THEN
275 p%density%data3d(:,:,:) = (sigma0 &
276 + delsigma*cos(kx*mesh%bcenter(:,:,:,1) &
277 + ky*mesh%bcenter(:,:,:,2)))/(sqrt(2*pi)*height) &
278 *exp(-0.5*(mesh%bcenter(:,:,:,3)/height)**2)
279 p%velocity%data4d(:,:,:,2) = -q*
omega*mesh%bcenter(:,:,:,1)
280 ELSE IF(mesh%shear_dir.EQ.1)
THEN
281 p%density%data3d(:,:,:) = (sigma0 &
282 + delsigma*cos(kx*mesh%bcenter(:,:,:,2) &
283 - ky*mesh%bcenter(:,:,:,1)))/(sqrt(2*pi)*height) &
284 *exp(-0.5*(mesh%bcenter(:,:,:,3)/height)**2)
285 p%velocity%data4d(:,:,:,1) = q*
omega*mesh%bcenter(:,:,:,2)
287 p%density%data1d(:) = p%density%data1d(:) / mesh%dz
288 TYPE IS(statevector_euler)
289 IF(mesh%shear_dir.EQ.2)
THEN
290 p%density%data3d(:,:,:) = (sigma0 &
291 + delsigma*cos(kx*mesh%bcenter(:,:,:,1) &
292 + ky*mesh%bcenter(:,:,:,2)))/(sqrt(2*pi)*height) &
293 *exp(-0.5*(mesh%bcenter(:,:,:,3)/height)**2)
294 p%velocity%data4d(:,:,:,2) = -q*
omega*mesh%bcenter(:,:,:,1)
295 ELSE IF(mesh%shear_dir.EQ.1)
THEN
296 p%density%data3d(:,:,:) = (sigma0 &
297 + delsigma*cos(kx*mesh%bcenter(:,:,:,2) &
298 - ky*mesh%bcenter(:,:,:,1)))/(sqrt(2*pi)*height) &
299 *exp(-0.5*(mesh%bcenter(:,:,:,3)/height)**2)
300 p%velocity%data4d(:,:,:,1) = q*
omega*mesh%bcenter(:,:,:,2)
302 p%density%data1d(:) = p%density%data1d(:) / mesh%dz
303 p%pressure%data1d(:) = soundspeed**2 / gamma * p%density%data1d(:)
305 CALL physics%Error(
"sblintheo3D::InitData",
"only (non-)isothermal HD supported")
308 CALL physics%Convert2Conservative(pvar,cvar)
309 CALL mesh%Info(
" DATA-----> initial condition: " // &
310 "Linear Theory Test - 3D Shearingbox")
subroutine initdata(Mesh, Physics, Fluxes, Timedisc)
subroutine makeconfig(Sim, config)
pure real function, dimension(size(ephir%data2d, dim=1)) omega(ephir, velocity)