7 SUBROUTINE topodyn_lat(PRW,PDEF,PKAPPA,PKAPPAC,GTOPD)
49 USE modi_write_file_vecmap
50 USE modi_write_file_map
59 REAL,
DIMENSION(:,:),
INTENT(IN) :: PRW
60 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PDEF
61 REAL,
DIMENSION(:,:),
INTENT(OUT) :: PKAPPA
62 REAL,
DIMENSION(:),
INTENT(OUT) :: PKAPPAC
63 LOGICAL,
DIMENSION(:),
INTENT(OUT) :: GTOPD
71 REAL :: ZKVAL, ZKVALMIN, ZKVALMAX
74 REAL :: ZNDMAXAV,ZNKAV
83 REAL,
DIMENSION(NMESHT) :: ZDMAX
84 REAL,
DIMENSION(NMESHT) :: ZRW
85 REAL,
DIMENSION(NMESHT) :: ZDINI
86 REAL,
DIMENSION(NMESHT) :: ZMASK
87 REAL,
DIMENSION(NMESHT) :: ZKAPPA_PACK, ZDMAX_PACK
97 REAL(KIND=JPRB) :: ZHOOK_HANDLE
133 IF ( zrw(j1)>0.0 .AND. zrw(j1)/=
xundef)
THEN 143 WHERE (zmask == 0.0) zmask =
xundef 151 za =
nnmc(jj) * zdx**2
156 IF (zmask(j1)/=
xundef)
THEN 158 pkappa(jj,j1) = zrw(j1)
160 zdini(j1) = zdmax(j1) - zrw(j1)
162 IF ( zdini(j1) <0.0 )
THEN 164 ztmp = ztmp - zdini(j1)
169 zdav = zdav + zdini(j1)
181 WHERE ( zdini(:)>0. ) zdini(:) = zdini(:)-ztmp/(
count(zdini(:)>0.))
184 IF (inpcon >=
nnmc(jj)/1000)
THEN 199 DO WHILE ( .NOT.gfound .AND. j2.LE.
nnmc(jj) )
201 IF (zmask(j2)/=
xundef)
THEN 204 zkval = pkappa(jj,j2) * exp(
xlambda(jj,j2))
209 pkappa(jj,j2) = zkval
223 IF (zmask(j1)/=
xundef)
THEN 225 zkval = pkappa(jj,j1) * exp(
xlambda(jj,j1))
229 IF (zkval.GT.zkvalmax)
THEN 231 ELSEIF (zkval.LT.zkvalmin)
THEN 235 pkappa(jj,j1) = zkval
251 zkappa_pack(1:i_dim) = pack(pkappa(jj,1:
nnmc(jj)),zmask(1:
nnmc(jj))/=
xundef)
252 zdmax_pack(1:i_dim) = pack(zdmax(1:
nnmc(jj)),zmask(1:
nnmc(jj))/=
xundef)
254 inkappa = int((zkvalmax - zkvalmin) /
xstepk)
258 zkval = zkvalmin + (
xstepk * (j1-1))
266 IF ( zkappa_pack(j2).GE.zkval )
THEN 269 ELSEIF (zkappa_pack(j2).LE.( zkval-(zdmax_pack(j2)/zm)) )
THEN 272 zndmaxav = zndmaxav + zdmax_pack(j2)
274 znkav = znkav + zkappa_pack(j2)
282 zndmaxav = zndmaxav /
REAL(inad)
285 IF ( inpcon == inas .OR. inpcon == inad .OR. inpcon == (inad+inas))
THEN 288 znkav = znkav /
REAL(inpcon - inad - inas)
291 IF (inpcon /= 0)
THEN 292 znas =
REAL(INAS) /
REAL(inpcon)
293 znad =
REAL(INAD) /
REAL(inpcon)
296 zfunc = (1 - znas - znad) * ( zkval - znkav )
297 IF (zm /= 0.) zfunc = zfunc + (znad * (zndmaxav / zm))
299 zdif = abs( zfunc - zdav )
301 IF ( zdif.LT.zdifmin )
THEN 322 IF ( zas<1. .AND. zad<1. .AND. (zas + zad/=1.) )
THEN 324 zdav2 = (zdav - zdmaxav * zad) / (1 - zas - zad)
328 IF (zas>=1.)
WRITE(*,*)
'ALL THE AREA IS SATURATED' 329 IF (zad>=1.)
WRITE(*,*)
'ALL THE AREA HAS A MAXIMAL DEFICIT' 330 WRITE(*,*)
'ALL THE AREA',zas,zad
343 IF ( zmask(j1)/=
xundef )
THEN 345 IF ( (pkappa(jj,j1).GT.(pkappac(jj) - zdmax(j1)/zm)) .AND. (pkappa(jj,j1).LT.pkappac(jj)) )
THEN 347 pdef(jj,j1) = zm * (zkav - pkappa(jj,j1)) + zdav2
349 IF (pdef(jj,j1) < 0.0) pdef(jj,j1) = 0.0
351 ELSEIF ( pkappa(jj,j1).GE.pkappac(jj) )
THEN 356 ELSEIF ( pkappa(jj,j1).LE.(pkappac(jj) - zdmax(j1)/zm) )
THEN 358 pdef(jj,j1) = zdmax(j1)
368 pdef(jj,j1) = zdmax(j1)
377 IF (pdef(jj,j1)<0.0)
THEN 378 WRITE(*,*)
'LAMBDA=',pkappa(jj,j1),
'LAMBDAC=',pkappac(jj)
392 pdef(jj,:) = zdini(:)
real, dimension(:,:), allocatable xlambda
real, dimension(:), allocatable xmpara
real, dimension(:,:), allocatable xslop
real, dimension(:,:), allocatable xdmaxt
real, dimension(:,:), allocatable xdarea
integer, dimension(:,:), allocatable nline
subroutine flowdown(KNMC, PVAR, PCONN, KLINE)
real, dimension(:,:), allocatable xdtopt
subroutine topodyn_lat(PRW, PDEF, PKAPPA, PKAPPAC, GTOPD)
real, dimension(:), allocatable xdxt
real, dimension(:,:), allocatable xwstopt
real, dimension(:,:,:), allocatable xconn
integer, dimension(:), allocatable nnmc