45 REAL,
PARAMETER :: gn = 1.0
46 REAL,
PARAMETER :: mcentral = 1.0
47 REAL,
PARAMETER :: sigma0 = 1.0
48 REAL,
PARAMETER :: m = 10.
49 REAL,
PARAMETER ::
omega = 0.
51 REAL,
PARAMETER :: p0 = 2.0*pi/1.0
52 REAL,
PARAMETER :: p = 3
53 REAL,
PARAMETER :: t = p*p0
55 REAL,
PARAMETER :: gamma = 5./3.
57 REAL,
PARAMETER :: rmin = 0.5
58 REAL,
PARAMETER :: rmax = 1.5
60 INTEGER,
PARAMETER :: gravenergysource = 1
61 INTEGER,
PARAMETER :: xres = 64
62 INTEGER,
PARAMETER :: yres = 4*xres
63 INTEGER,
PARAMETER :: onum = p * 10
65 CLASS(
fosite),
ALLOCATABLE :: sim
72CALL initdata(sim%Timedisc, sim%Mesh, sim%Physics, sim%Fluxes)
82 TYPE(dict_typ),
POINTER :: config
85 TYPE(dict_typ),
POINTER :: mesh,boundary,timedisc,datafile,&
86 sources,fluxes,pmass,physics,damping,vis,pot
91 "units" / geometrical)
96 "variables" / primitive, &
100 "meshtype" / midpoint, &
101 "geometry" / cylindrical, &
112 "decomposition" / (/ 1, -1/), &
113 "output/volume" / 1,&
115 "output/rotation" / 1,&
119 "western" / custom, &
120 "eastern" / custom, &
121 "southern" / periodic, &
122 "northern" / periodic, &
123 "bottomer" / reflecting, &
124 "topper" / reflecting)
127 "gtype" / pointmass, &
128 "potential" / newton, &
145 "grav/stype" / gravity, &
147 "grav/output/accel" / 1, &
148 "grav/pmass" / pmass)
153 "tol_rel" / 1.0e-3, &
154 "tol_abs" / (/ 0., 1.e-3, 1.e-3, 0. /), &
157 "dtlimit" / 1.0e-10, &
158 "maxiter" / 2000000000, &
159 "output/xmomentum" / 1, &
160 "output/ymomentum" / 1, &
161 "output/energy" / 1, &
163 "output/geometrical_sources" / 1, &
164 "output/external_sources" / 1, &
166 "output/fluxes" / 1, &
171 "fileformat" / vtk, &
172 "filename" /
"keplerianvortex", &
176 "physics" / physics, &
179 "boundary" / boundary, &
180 "sources" / sources, &
181 "timedisc" / timedisc, &
182 "datafile" / datafile)
190 CLASS(timedisc_base),
INTENT(INOUT) :: Timedisc
191 CLASS(mesh_base),
INTENT(IN) :: Mesh
192 CLASS(physics_base),
INTENT(INOUT) :: Physics
193 CLASS(fluxes_base),
INTENT(INOUT) :: Fluxes
196 REAL,
DIMENSION(Mesh%IGMIN:Mesh%IGMAX,Mesh%JGMIN:Mesh%JGMAX,Mesh%KGMIN:Mesh%KGMAX) &
197 :: dvr, dvphi, x, y, phi, r
199 INTEGER :: dir,j,ig,i,k
201 x = mesh%bccart(:,:,:,1)
202 y = mesh%bccart(:,:,:,2)
204 IF(gravenergysource.EQ.0)
THEN
205 CALL timedisc%Error(
"keplerianvortex:InitData",
"GravEnergySource=0 is currently not supported")
210 SELECT TYPE (pvar => timedisc%pvar)
211 CLASS IS(statevector_euler)
212 SELECT TYPE (cvar => timedisc%cvar)
213 CLASS IS(statevector_euler)
214 cvar%density%data3d(:,:,:) = sigma0
215 cvar%momentum%data4d(:,:,:,1:physics%VDIM) = 0.
217 CALL physics%Convert2Primitive(cvar,pvar)
219 pvar%pressure%data3d(:,:,:) = 1./(gamma*m**2)
221 pvar%velocity%data4d(:,:,:,1:physics%VDIM) = &
222 pvar%velocity%data4d(:,:,:,1:physics%VDIM) &
223 + timedisc%GetCentrifugalVelocity(mesh,physics,sim%Fluxes,sim%Sources,(/0.,0.,1./))
230 SELECT TYPE(bwest => timedisc%Boundary%boundary(west)%p)
231 CLASS IS (boundary_custom)
232 CALL bwest%SetCustomBoundaries(mesh,physics, &
233 (/custom_reflect,custom_reflneg,custom_kepler,custom_reflect/))
235 SELECT TYPE(beast => timedisc%Boundary%boundary(east)%p)
236 CLASS IS (boundary_custom)
237 CALL beast%SetCustomBoundaries(mesh,physics, &
238 (/custom_reflect,custom_reflneg,custom_kepler,custom_reflect/))
243 phi = mesh%center(:,:,:,2)
246 r = sqrt(x**2 + y**2)
248 dvr = kappa * exp(-r**2/h**2) * (-y*cos(phi) + x*sin(phi))
249 dvphi = kappa * exp(-r**2/h**2) * ( y*sin(phi) + x*cos(phi))
251 SELECT TYPE (pvar => timedisc%pvar)
252 CLASS IS(statevector_euler)
253 SELECT TYPE (cvar => timedisc%cvar)
254 CLASS IS(statevector_euler)
255 pvar%velocity%data4d(:,:,:,1) = pvar%velocity%data4d(:,:,:,1) + dvr
256 pvar%velocity%data4d(:,:,:,2) = pvar%velocity%data4d(:,:,:,2) + dvphi
260 CALL physics%Convert2Conservative(timedisc%pvar,timedisc%cvar)
subroutine initdata(Mesh, Physics, Fluxes, Timedisc)
subroutine makeconfig(Sim, config)
pure real function, dimension(size(ephir%data2d, dim=1)) omega(ephir, velocity)