97 REAL,
PARAMETER :: gn = 1.0
98 INTEGER,
PARAMETER :: units = geometrical
100 REAL,
PARAMETER ::
omega = 1.0
101 REAL,
PARAMETER :: sigma0 = 1.0
102 REAL,
PARAMETER :: tsim = 20./
omega
103 REAL,
PARAMETER :: gamma = 2.0
104 REAL,
PARAMETER :: beta_c = 10.0
106 REAL,
PARAMETER :: q = 1.5
108 INTEGER,
PARAMETER :: mgeo = cartesian
109 INTEGER,
PARAMETER :: shear_direction = 1
110 INTEGER,
PARAMETER :: xres = 256
111 INTEGER,
PARAMETER :: yres = 256
112 INTEGER,
PARAMETER :: zres = 1
113 REAL :: domainx = 200.0
114 REAL :: domainy = 200.0
116 INTEGER,
PARAMETER :: onum = 20
118 CHARACTER(LEN=256),
PARAMETER :: odir =
"./"
119 CHARACTER(LEN=256),
PARAMETER :: ofname =
"shearingsheet"
121 CLASS(
fosite),
ALLOCATABLE :: sim
127CALL asl_library_initialize()
133CALL initdata(sim%Mesh, sim%Physics, sim%Timedisc%pvar, sim%Timedisc%cvar)
139CALL asl_library_finalize()
149 TYPE(dict_typ),
POINTER :: config
152 TYPE(dict_typ),
POINTER :: mesh,physics,fluxes,grav,cooling, &
153 sources,timedisc,datafile
154 REAL :: XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX, SOUNDSPEED
164 soundspeed = pi*gn*sigma0/
omega
170 "units" / geometrical &
175 "meshtype" / midpoint, &
178 "shearingbox" / shear_direction, &
179 "decomposition" / (/ 1, -1, 1/), &
196 "variables" / primitive, &
197 "limiter" / vanleer &
203 "self/gtype" / sboxspectral, &
204 "self/output/phi" / 0, &
205 "self/output/accel_x" / 0, &
206 "self/output/Fmass2D" / 0, &
207 "self/output/accel_y" / 0 &
212 "stype" / disk_cooling, &
213 "method" / gammie_sb, &
214 "output/Qcool" / 1, &
220 "cooling" / cooling, &
226 "method" / dormand_prince, &
230 "output/external_sources" / 0, &
231 "output/density_cvar" / 0, &
232 "output/energy" / 0, &
233 "output/xmomentum" / 0, &
234 "output/ymomentum" / 0, &
236 "output/geometrical_sources" / 0, &
237 "maxiter" / 100000000, &
243 "fileformat" / vtk, &
244 "filepath" / trim(odir), &
245 "filename" / trim(ofname), &
252 "physics" / physics, &
254 "sources" / sources, &
255 "timedisc" / timedisc, &
256 "datafile" / datafile &
263 CLASS(mesh_base),
INTENT(IN) :: Mesh
264 CLASS(physics_base),
INTENT(IN) :: Physics
265 CLASS(marray_compound),
POINTER,
INTENT(INOUT) :: pvar,cvar
269 REAL,
ALLOCATABLE :: rands(:,:,:)
274 SELECT TYPE(p => pvar)
275 TYPE IS(statevector_euler)
277 soundspeed = pi*physics%Constants%GN*sigma0/
omega
279 DO concurrent(i=1:
SIZE(p%density%data1d))
280 p%density%data1d(i) = sigma0
281 p%pressure%data1d(i) = 2.5**2*pi*pi* &
282 physics%Constants%GN**2.*sigma0**3./(gamma*
omega**2)
290 CALL asl_random_create(rng, asl_randommethod_mt19937_64)
291 CALL asl_random_distribute_uniform(rng)
292 n = (mesh%IGMAX-mesh%IGMIN+1)*(mesh%JGMAX-mesh%JGMIN+1)*(mesh%KGMAX-mesh%KGMIN+1)
294 ALLOCATE(rands(mesh%IGMIN:mesh%IGMAX,mesh%JGMIN:mesh%JGMAX,mesh%KGMIN:mesh%KGMAX),stat=err)
295 IF (err.NE.0)
CALL physics%Error(
"shearingsheet::InitData",
"Memory allocation failed")
297 IF (mesh%shear_dir.EQ.2)
THEN
299 CALL random_number(rands)
301 CALL asl_random_generate_d(rng, n, rands)
303 DO concurrent(i=mesh%IGMIN:mesh%IGMAX,j=mesh%JGMIN:mesh%JGMAX,k=mesh%KGMIN:mesh%KGMAX)
304 p%velocity%data4d(i,j,k,1) = (rands(i,j,k)-0.5)*0.1*soundspeed
308 CALL random_number(rands)
310 CALL asl_random_generate_d(rng, n, rands)
312 DO concurrent(i=mesh%IGMIN:mesh%IGMAX,j=mesh%JGMIN:mesh%JGMAX,k=mesh%KGMIN:mesh%KGMAX)
313 p%velocity%data4d(i,j,k,2) = -q*
omega*mesh%bcenter(i,j,k,1) &
314 + (rands(i,j,k)-0.5)*0.1*soundspeed
316 ELSE IF (mesh%shear_dir.EQ.1)
THEN
318 CALL random_number(rands)
320 CALL asl_random_generate_d(rng, n, rands)
322 DO concurrent(i=mesh%IGMIN:mesh%IGMAX,j=mesh%JGMIN:mesh%JGMAX,k=mesh%KGMIN:mesh%KGMAX)
323 p%velocity%data4d(i,j,k,1) = q*
omega*mesh%bcenter(i,j,k,2) &
324 + (rands(i,j,k)-0.5)*0.1*soundspeed
328 CALL random_number(rands)
330 CALL asl_random_generate_d(rng, n, rands)
332 DO concurrent(i=mesh%IGMIN:mesh%IGMAX,j=mesh%JGMIN:mesh%JGMAX,k=mesh%KGMIN:mesh%KGMAX)
333 p%velocity%data4d(i,j,k,2) = (rands(i,j,k)-0.5)*0.1*soundspeed
338 CALL physics%Error(
"shear::InitData",
"only non-isothermal HD supported")
341 CALL asl_random_destroy(rng)
344 CALL physics%Convert2Conservative(pvar,cvar)
345 CALL mesh%Info(
" DATA-----> initial condition: " // &
346 "Standard run shearingsheet")
353 CLASS(physics_base),
INTENT(IN) :: Physics
354 INTEGER :: i, n, clock
355 INTEGER,
DIMENSION(:),
ALLOCATABLE :: seed
359 CALL random_seed(
size = n)
361 CALL system_clock(count=clock)
362 seed = clock + 37 * (/ (i - 1, i = 1, n) /)
364 seed = seed + physics%GetRank()
366 CALL random_seed(put = seed)
subroutine initdata(Mesh, Physics, Fluxes, Timedisc)
subroutine makeconfig(Sim, config)
subroutine initrandseed(Physics)
pure real function, dimension(size(ephir%data2d, dim=1)) omega(ephir, velocity)