shift_field.f90 2.27 KB
 Matthias Langer committed Nov 28, 2012 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 ``````subroutine shift_field(field,nxf,nyf,nzfmax,nzf,nmax,n) ! i/o i i i i i i !***************************************************************************** ! * ! This subroutine shifts global fields by nxshift grid cells, in order to * ! facilitate all sorts of nested wind fields, or output grids, which, * ! without shifting, would overlap with the domain "boundary". * ! * ! Author: A. Stohl * ! * ! 3 July 2002 * ! * !***************************************************************************** ! * ! Variables: * ! * ! Constants: * ! * !***************************************************************************** use par_mod implicit none integer :: nxf,nyf,nzf,n,ix,jy,kz,ixs,nzfmax,nmax real :: field(0:nxmax-1,0:nymax-1,nzfmax,nmax),xshiftaux(0:nxmax-1) ! Loop over y and z !****************** do kz=1,nzf do jy=0,nyf-1 ! Shift the data !*************** if (nxshift.ne.0) then do ix=0,nxf-1 if (ix.ge.nxshift) then ixs=ix-nxshift else ixs=nxf-nxshift+ix endif xshiftaux(ixs)=field(ix,jy,kz,n) end do do ix=0,nxf-1 field(ix,jy,kz,n)=xshiftaux(ix) end do endif ! Repeat the westernmost grid cells at the easternmost domain "boundary" !*********************************************************************** field(nxf,jy,kz,n)=field(0,jy,kz,n) end do end do end subroutine shift_field``````