81 REAL :: velocity_offset
82 REAL,
DIMENSION(:),
POINTER :: velocity_shift
102 INTEGER,
INTENT(IN) :: dir
109 this%velocity_shift(physics%VNUM+physics%PNUM), &
112 CALL this%Error(
"boundary_shearing::InitBoundaryg",
"Unable to allocate memory.")
115 DO l=1,physics%VNUM + physics%PNUM
117 IF (mesh%shear_dir.EQ.2)
THEN
118 IF (l.EQ.physics%YVELOCITY)
THEN
119 SELECT CASE(mesh%fargo%GetType())
121 this%velocity_shift(l) = mesh%Q*mesh%OMEGA*(mesh%xmax-mesh%xmin)
123 this%velocity_shift(l) = 0.0
125 CALL this%Error(
"boundary_shearing::InitBoundary", &
126 "Shearing boundaries are only compatible without Fargo or with Fargo type 3 (shearing box).")
129 this%velocity_shift(l) = 0.0
132 ELSE IF (mesh%shear_dir.EQ.1)
THEN
133 IF (l.EQ.physics%XVELOCITY)
THEN
134 SELECT CASE(mesh%fargo%GetType())
136 this%velocity_shift(l) = mesh%Q*mesh%OMEGA*(mesh%ymax-mesh%ymin)
138 this%velocity_shift(l) = 0.0
140 CALL this%Error(
"boundary_shearing::InitBoundary", &
141 "Shearing boundaries are only compatible without Fargo or with Fargo type 3 (shearing box).")
144 this%velocity_shift(l) = 0.0
147 CALL this%Error(
"boundary_shearing::InitBoundary", &
148 "Shearing boundaries in top/south direction not allowed, yet.")
151 this%velocity_offset = mesh%Q*mesh%OMEGA*(mesh%xmax-mesh%xmin)/mesh%dy
198 REAL,
INTENT(IN) :: time
201 INTEGER :: i,j,k,l,intshift
202 REAL :: offremain,offset,offset_tmp
204 INTEGER :: status(MPI_STATUS_SIZE)
205 INTEGER :: ierror,req(4)
206 CHARACTER(LEN=80) :: str
207 REAL :: mpi_buf(2*Mesh%GNUM)
212 CALL this%boundary_periodic%SetBoundaryData(mesh,physics,time,pvar)
217 offset = -this%velocity_offset*time
219 offset = offset + mesh%JNUM
222 DO l=1,physics%VNUM+physics%PNUM
224 SELECT CASE(this%GetDirection())
227 intshift = floor(offset_tmp)
228 offremain = offset_tmp - intshift
231 pvar%data4d(mesh%IMIN-i,mesh%JMIN:mesh%JMAX,mesh%KMIN:mesh%KMAX,l) = &
232 cshift(pvar%data4d(mesh%IMIN-i,mesh%JMIN:mesh%JMAX,mesh%KMIN:mesh%KMAX,l),intshift)
234 pvar%data4d(mesh%IMIN-i,mesh%JMAX+1,:,l) = pvar%data4d(mesh%IMIN-i,mesh%JMIN,:,l)
235 DO k=mesh%KMIN,mesh%KMAX
236 DO j=mesh%JMIN,mesh%JMAX
237 pvar%data4d(mesh%IMIN-i,j,k,l) = (1.0 - offremain)*pvar%data4d(mesh%IMIN-i,j,k,l) + &
238 offremain*pvar%data4d(mesh%IMIN-i,j+1,k,l) + this%velocity_shift(l)
244 intshift = floor(offset_tmp)
245 offremain = offset_tmp - intshift
248 pvar%data4d(mesh%IMAX+i,mesh%JMIN:mesh%JMAX,mesh%KMIN:mesh%KMAX,l) = &
249 cshift(pvar%data4d(mesh%IMAX+i,mesh%JMIN:mesh%JMAX,mesh%KMIN:mesh%KMAX,l),intshift)
251 pvar%data4d(mesh%IMAX+i,mesh%JMAX+1,:,l) = pvar%data4d(mesh%IMAX+i,mesh%JMIN,:,l)
252 DO k=mesh%KMIN,mesh%KMAX
253 DO j=mesh%JMIN,mesh%JMAX
254 pvar%data4d(mesh%IMAX+i,j,k,l) = (1.0 - offremain)*pvar%data4d(mesh%IMAX+i,j,k,l) + &
255 offremain*pvar%data4d(mesh%IMAX+i,j+1,k,l) - this%velocity_shift(l)
261 intshift = floor(offset_tmp)
262 offremain = offset_tmp - intshift
265 pvar%data4d(mesh%IMIN:mesh%IMAX,mesh%JMIN-j,mesh%KMIN:mesh%KMAX,l) = &
266 cshift(pvar%data4d(mesh%IMIN:mesh%IMAX,mesh%JMIN-j,mesh%KMIN:mesh%KMAX,l),intshift)
268 pvar%data4d(mesh%IMAX+1,mesh%JMIN-j,:,l) = pvar%data4d(mesh%IMIN,mesh%JMIN-j,:,l)
269 DO k=mesh%KMIN,mesh%KMAX
270 DO i=mesh%IMIN,mesh%IMAX
271 pvar%data4d(i,mesh%JMIN-j,k,l) = (1.0 - offremain)*pvar%data4d(i,mesh%JMIN-j,k,l) + &
272 offremain*pvar%data4d(i+1,mesh%JMIN-j,k,l) - this%velocity_shift(l)
278 intshift = floor(offset_tmp)
279 offremain = offset_tmp - intshift
282 pvar%data4d(mesh%IMIN:mesh%IMAX,mesh%JMAX+j,mesh%KMIN:mesh%KMAX,l) = &
283 cshift(pvar%data4d(mesh%IMIN:mesh%IMAX,mesh%JMAX+j,mesh%KMIN:mesh%KMAX,l),intshift)
285 pvar%data4d(mesh%IMAX+1,mesh%JMAX+j,:,l) = pvar%data4d(mesh%IMIN,mesh%JMAX+j,:,l)
286 DO k=mesh%KMIN,mesh%KMAX
287 DO i=mesh%IMIN,mesh%IMAX
288 pvar%data4d(i,mesh%JMAX+j,k,l) = (1.0 - offremain)*pvar%data4d(i,mesh%JMAX+j,k,l) + &
289 offremain*pvar%data4d(i+1,mesh%JMAX+j,k,l) + this%velocity_shift(l)
308 DEALLOCATE(this%velocity_shift)
309 CALL this%Finalize_base()
integer, parameter shearing
periodic with shear for shearing sheet/box
Boundary module for periodic boundary conditions.
subroutine finalize(this)
Destructor for periodic boundary conditions.
character(len=32), parameter boundcond_name
subroutine setboundarydata(this, Mesh, Physics, time, pvar)
Applies the periodic boundary condition.
Boundary module for a shearingsheet/shearingbox. (see e.g. the standard run )
subroutine initboundary_shearing(this, Mesh, Physics, dir, config)
Constructor for shearing boundary conditions.
Dictionary for generic data types.
derived class for compound of mesh arrays
integer, parameter east
named constant for eastern boundary
integer, parameter bottom
named constant for bottom boundary
integer, parameter south
named constant for southern boundary
integer, parameter top
named constant for top boundary
integer, parameter north
named constant for northern boundary
integer, parameter west
named constant for western boundary