33 REAL,
DIMENSION(:),
INTENT(IN)::pzs
34 REAL,
DIMENSION(:),
INTENT(OUT)::psso_slope
54 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zmap
55 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zzs
56 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zsso_slope
57 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zzs_xy
58 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zzsl
59 REAL,
DIMENSION(:),
ALLOCATABLE :: zxhat
60 REAL,
DIMENSION(:),
ALLOCATABLE :: zyhat
63 REAL,
DIMENSION(:),
ALLOCATABLE :: zdx
64 REAL,
DIMENSION(:),
ALLOCATABLE :: zdy
67 REAL,
PARAMETER :: xpi=4.*atan(1.)
68 INTEGER,
PARAMETER :: jphext = 1
70 INTEGER :: iib, iie, ijb, ije
86 CALL
get_grid_dim(ug%CGRID,
SIZE(ug%XGRID_PAR),ug%XGRID_PAR,grect,ix,iy)
100 CALL
get_mesh_dim(ug%CGRID,
SIZE(ug%XGRID_PAR),ix*iy,ug%XGRID_PAR,zdx,zdy,ug%XMESH_SIZE)
109 IF (
SIZE(pzs) /= ix * iy)
RETURN
117 ALLOCATE(zzsl(innx,inny))
121 zzs(jx,jy) = pzs( jx + (jy-1)*ix )
125 zzsl(2:innx-1,2:inny-1) = zzs(:,:)
126 zzsl(1,:) = zzsl(2,:)
127 zzsl(innx,:) = zzsl(innx-1,:)
128 zzsl(:,1) = zzsl(:,2)
129 zzsl(:,inny) = zzsl(:,inny-1)
137 ALLOCATE(zzs_xy(innx,inny))
139 zzs_xy(2:innx,2:inny) = 0.25*( zzsl(2:innx,2:inny) + zzsl(1:innx-1,2:inny) &
140 + zzsl(2:innx,1:inny-1) + zzsl(1:innx-1,1:inny-1) )
142 zzs_xy(1,:) = zzs_xy(2,:)
143 zzs_xy(:,1) = zzs_xy(:,2)
149 ALLOCATE(zxhat(innx))
150 ALLOCATE(zyhat(inny))
153 zxhat(jx) = zdx(1)*jx
156 zyhat(jy) = zdy(1)*jy
168 ALLOCATE(zmap(innx,inny))
170 ALLOCATE(zsso_slope(ix,iy))
189 zdzsdx=( 2.* zzsl(ji,jj) &
190 - (zzs_xy(ji,jj)+zzs_xy(ji,jj+1)) ) &
191 / (zxhat(ji+1)-zxhat(ji)) * zmap(ji,jj)
192 zdzsdy=( zzs_xy(ji,jj+1) - zzs_xy(ji,jj) ) &
193 / (zyhat(jj+1)-zyhat(jj)) * zmap(ji,jj)
195 zdzsdx=( zzs_xy(ji+1,jj+1) -zzs_xy(ji,jj+1)) &
196 / (zxhat(ji+1)-zxhat(ji)) * zmap(ji,jj)
197 zdzsdy=( (zzs_xy(ji+1,jj+1)+zzs_xy(ji,jj+1)) &
198 - 2.* zzsl(ji,jj) ) &
199 / (zyhat(jj+1)-zyhat(jj)) * zmap(ji,jj)
201 zdzsdx=( (zzs_xy(ji+1,jj)+zzs_xy(ji+1,jj+1)) &
202 - 2.* zzsl(ji,jj) ) &
203 / (zxhat(ji+1)-zxhat(ji)) * zmap(ji,jj)
204 zdzsdy=( zzs_xy(ji+1,jj+1) - zzs_xy(ji+1,jj) ) &
205 / (zyhat(jj+1)-zyhat(jj)) * zmap(ji,jj)
207 zdzsdx=( zzs_xy(ji+1,jj) - zzs_xy(ji,jj) ) &
208 / (zxhat(ji+1)-zxhat(ji)) * zmap(ji,jj)
209 zdzsdy=( 2.* zzsl(ji,jj) &
210 - (zzs_xy(ji+1,jj)+zzs_xy(ji,jj)) ) &
211 / (zyhat(jj+1)-zyhat(jj)) * zmap(ji,jj)
216 zdzsdx=min(2.0,max(-2.0,zdzsdx))
217 zdzsdy=min(2.0,max(-2.0,zdzsdy))
220 zsurf=zsurf+0.25*sqrt(1. + zdzsdx**2 + zdzsdy**2)
225 zsso_slope(ji-jphext,jj-jphext)=sqrt(zsurf**2-1)
236 psso_slope( jx + (jy-1)*ix )=zsso_slope(jx,jy)
subroutine get_grid_dim(HGRID, KGRID_PAR, PGRID_PAR, ORECT, KDIM1, KDIM2)
subroutine get_mesh_dim(HGRID, KGRID_PAR, KL, PGRID_PAR, PDX, PDY, PMESHSIZE)
subroutine explicit_slope(UG, PZS, PSSO_SLOPE)