6 SUBROUTINE grid_noro(imdep, jmdep, xdata, ydata, zdata,
8 . zphi,zmea,zstd,zsig,zgam,zthe,
59 parameter(iusn=2160,jusn=1080,iext=216, epsfra = 1.e-5)
60 #include "dimensions.h"
61 REAL xusn(iusn+2*iext),yusn(jusn+2)
62 REAL zusn(iusn+2*iext,jusn+2)
65 REAL xdata(imdep),ydata(jmdep)
66 REAL zdata(imdep,jmdep)
72 REAL ztz(
iim+1,jjm+1),zxtzx(
iim+1,jjm+1)
73 REAL zytzy(
iim+1,jjm+1),zxtzy(
iim+1,jjm+1)
74 REAL weight(
iim+1,jjm+1)
78 REAL zxtzxusn(iusn+2*iext,jusn+2),zytzyusn(iusn+2*iext,jusn+2)
79 REAL zxtzyusn(iusn+2*iext,jusn+2)
80 REAL x(imar+1),y(jmar),zphi(imar+1,jmar)
81 REAL zmea(imar+1,jmar),zstd(imar+1,jmar)
82 REAL zmea0(imar+1,jmar)
83 REAL zsig(imar+1,jmar),zgam(imar+1,jmar),zthe(imar+1,jmar)
84 REAL zpic(imar+1,jmar),zval(imar+1,jmar)
86 real mask(imar+1,jmar), mask_tmp(imar+1,jmar)
87 real num_tot(2200,1100),num_lan(2200,1100)
89 REAL a(2200),b(2200),
c(1100),d(1100)
92 print *,
' parametres de l orographie a l echelle sous maille'
95 zdeltay=2.*xpi/
REAL(jusn)*
rad
100 if (maxval(mask) == -99999 .and. minval(mask) == -99999)
then
104 write(*,*)
'Masque lu', masque_lu
109 if(
iim.ne.imar) stop
'Problem dim. x'
110 if(jjm.ne.jmar-1) stop
'Problem dim. y'
111 IF (imar.GT.2200 .OR. jmar.GT.1100)
THEN
112 print*,
'imar or jmar too big', imar, jmar
116 IF(imdep.ne.iusn.or.jmdep.ne.jusn)
then
117 print *,
' imdep or jmdep bad dimensions:',imdep,jmdep
121 IF(imar+1.ne.
iim+1.or.jmar.ne.jjm+1)
THEN
122 print *,
' imar or jmar bad dimensions:',imar,jmar
138 zusn(
i+iext,
j+1)=zdata(
i,
j)
139 xusn(
i+iext)=xdata(
i)
142 zusn(
i,
j+1)=zdata(iusn-iext+
i,
j)
143 xusn(
i)=xdata(iusn-iext+
i)-2.*xpi
144 zusn(iusn+iext+
i,
j+1)=zdata(
i,
j)
145 xusn(iusn+iext+
i)=xdata(
i)+2.*xpi
149 yusn(1)=ydata(1)+(ydata(1)-ydata(2))
150 yusn(jusn+2)=ydata(jusn)+(ydata(jusn)-ydata(jusn-1))
152 zusn(
i,1)=zusn(
i+iusn/2,2)
153 zusn(
i+iusn/2+iext,1)=zusn(
i,2)
154 zusn(
i,jusn+2)=zusn(
i+iusn/2,jusn+1)
155 zusn(
i+iusn/2+iext,jusn+2)=zusn(
i,jusn+1)
161 a(1) =
x(1) - (
x(2)-
x(1))/2.0
162 b(1) = (
x(1)+
x(2))/2.0
165 b(
i) = (
x(
i)+
x(
i+1))/2.0
168 b(imar+1) =
x(imar+1) + (
x(imar+1)-
x(imar))/2.0
170 c(1) = y(1) - (y(2)-y(1))/2.0
171 d(1) = (y(1)+y(2))/2.0
174 d(
j) = (y(
j)+y(
j+1))/2.0
177 d(jmar) = y(jmar) + (y(jmar)-y(jmar-1))/2.0
197 DO i = 1, iusn+2*iext
206 zdeltax=zdeltay*cos(yusn(
j))
207 DO i = 2, iusn+2*iext-1
208 zytzyusn(
i,
j)=(zusn(
i,
j+1)-zusn(
i,
j-1))**2/zdeltay**2
209 zxtzxusn(
i,
j)=(zusn(
i+1,
j)-zusn(
i-1,
j))**2/zdeltax**2
210 zxtzyusn(
i,
j)=(zusn(
i,
j+1)-zusn(
i,
j-1))/zdeltay
211 * *(zusn(
i+1,
j)-zusn(
i-1,
j))/zdeltax
217 zleny=xpi/
REAL(jusn)*
rad
218 xincr=xpi/2./
REAL(jusn)
226 zlenx=zleny*cos(yusn(
j))
227 zdeltax=zdeltay*cos(yusn(
j))
228 zbordnor=(
c(jj)-yusn(
j)+xincr)*
rad
229 zbordsud=(yusn(
j)-d(jj)+xincr)*
rad
231 * amin1(zbordnor,zbordsud,zleny))
233 DO i = 2, iusn+2*iext-1
234 zbordest=(xusn(
i)-a(
ii)+xincr)*
rad*cos(yusn(
j))
235 zbordoue=(b(
ii)+xincr-xusn(
i))*
rad*cos(yusn(
j))
237 * amin1(zbordest,zbordoue,zlenx))
239 num_tot(
ii,jj)=num_tot(
ii,jj)+1.0
240 if(zusn(
i,
j).ge.1.)num_lan(
ii,jj)=num_lan(
ii,jj)+1.0
241 weight(
ii,jj)=weight(
ii,jj)+weighx*weighy
242 zxtzx(
ii,jj)=zxtzx(
ii,jj)+zxtzxusn(
i,
j)*weighx*weighy
243 zytzy(
ii,jj)=zytzy(
ii,jj)+zytzyusn(
i,
j)*weighx*weighy
244 zxtzy(
ii,jj)=zxtzy(
ii,jj)+zxtzyusn(
i,
j)*weighx*weighy
245 ztz(
ii,jj) =ztz(
ii,jj) +zusn(
i,
j)*zusn(
i,
j)*weighx*weighy
247 zmea(
ii,jj) =zmea(
ii,jj)+zusn(
i,
j)*weighx*weighy
249 zpic(
ii,jj)=amax1(zpic(
ii,jj),zusn(
i,
j))
251 zval(
ii,jj)=amin1(zval(
ii,jj),zusn(
i,
j))
274 IF (weight(
ii,jj) .NE. 0.0)
THEN
281 if (.not. masque_lu)
then
282 mask(
ii,jj) = num_lan(
ii,jj)/num_tot(
ii,jj)
285 zmea(
ii,jj)=zmea(
ii,jj)/weight(
ii,jj)
286 zxtzx(
ii,jj)=zxtzx(
ii,jj)/weight(
ii,jj)
287 zytzy(
ii,jj)=zytzy(
ii,jj)/weight(
ii,jj)
288 zxtzy(
ii,jj)=zxtzy(
ii,jj)/weight(
ii,jj)
289 ztz(
ii,jj) =ztz(
ii,jj)/weight(
ii,jj)
291 zstd(
ii,jj)=sqrt(amax1(0.,ztz(
ii,jj)-zmea(
ii,jj)**2))
293 print*,
'probleme,ii,jj=',
ii,jj
301 zxtzx(
ii,1)=zxtzx(
ii,2)
302 zxtzx(
ii,jmar)=zxtzx(
ii,jmar-1)
303 zxtzy(
ii,1)=zxtzy(
ii,2)
304 zxtzy(
ii,jmar)=zxtzy(
ii,jmar-1)
305 zytzy(
ii,1)=zytzy(
ii,2)
306 zytzy(
ii,jmar)=zytzy(
ii,jmar-1)
313 zmea0(:,:) = zmea(:,:)
325 WHERE(mask .GE. 0.1) mask_tmp = 1.
329 IF (weight(
ii,jj) .NE. 0.0)
THEN
331 xk=(zxtzx(
ii,jj)+zytzy(
ii,jj))/2.
332 xl=(zxtzx(
ii,jj)-zytzy(
ii,jj))/2.
334 xp=xk-sqrt(xl**2+xm**2)
335 xq=xk+sqrt(xl**2+xm**2)
339 if(abs(xm).le.xw) xm=xw*sign(1.,xm)
353 zsig(
ii,jj)=sqrt(xq)*mask_tmp(
ii,jj)
355 zgam(
ii,jj)=xp/xq*mask_tmp(
ii,jj)
357 zthe(
ii,jj)=57.29577951*atan2(xm,xl)/2.*mask_tmp(
ii,jj)
360 zphi(
ii,jj)=zmea0(
ii,jj)*mask_tmp(
ii,jj)
362 zmea(
ii,jj)=zmea(
ii,jj)*mask_tmp(
ii,jj)
363 zpic(
ii,jj)=zpic(
ii,jj)*mask_tmp(
ii,jj)
364 zval(
ii,jj)=zval(
ii,jj)*mask_tmp(
ii,jj)
365 zstd(
ii,jj)=zstd(
ii,jj)*mask_tmp(
ii,jj)
373 zllmmea=amax1(zmea(
ii,jj),zllmmea)
374 zllmstd=amax1(zstd(
ii,jj),zllmstd)
375 zllmsig=amax1(zsig(
ii,jj),zllmsig)
376 zllmgam=amax1(zgam(
ii,jj),zllmgam)
377 zllmthe=amax1(zthe(
ii,jj),zllmthe)
378 zminthe=amin1(zthe(
ii,jj),zminthe)
379 zllmpic=amax1(zpic(
ii,jj),zllmpic)
380 zllmval=amax1(zval(
ii,jj),zllmval)
383 print *,
' MEAN ORO:',zllmmea
384 print *,
' ST. DEV.:',zllmstd
385 print *,
' PENTE:',zllmsig
386 print *,
' ANISOTROP:',zllmgam
387 print *,
' ANGLE:',zminthe,zllmthe
388 print *,
' pic:',zllmpic
389 print *,
' val:',zllmval
395 zmea(imar+1,jj)=zmea(1,jj)
396 zphi(imar+1,jj)=zphi(1,jj)
397 zpic(imar+1,jj)=zpic(1,jj)
398 zval(imar+1,jj)=zval(1,jj)
399 zstd(imar+1,jj)=zstd(1,jj)
400 zsig(imar+1,jj)=zsig(1,jj)
401 zgam(imar+1,jj)=zgam(1,jj)
402 zthe(imar+1,jj)=zthe(1,jj)
420 zweinor=zweinor+ weight(
ii, 1)
421 zweisud=zweisud+ weight(
ii,jmar)
422 zmeanor=zmeanor+zmea(
ii, 1)*weight(
ii, 1)
423 zmeasud=zmeasud+zmea(
ii,jmar)*weight(
ii,jmar)
424 zstdnor=zstdnor+zstd(
ii, 1)*weight(
ii, 1)
425 zstdsud=zstdsud+zstd(
ii,jmar)*weight(
ii,jmar)
426 zsignor=zsignor+zsig(
ii, 1)*weight(
ii, 1)
427 zsigsud=zsigsud+zsig(
ii,jmar)*weight(
ii,jmar)
428 zpicnor=zpicnor+zpic(
ii, 1)*weight(
ii, 1)
429 zpicsud=zpicsud+zpic(
ii,jmar)*weight(
ii,jmar)
430 zvalnor=zvalnor+zval(
ii, 1)*weight(
ii, 1)
431 zvalsud=zvalsud+zval(
ii,jmar)*weight(
ii,jmar)
435 zmea(
ii, 1)=zmeanor/zweinor
436 zmea(
ii,jmar)=zmeasud/zweisud
437 zphi(
ii, 1)=zmeanor/zweinor
438 zphi(
ii,jmar)=zmeasud/zweisud
439 zpic(
ii, 1)=zpicnor/zweinor
440 zpic(
ii,jmar)=zpicsud/zweisud
441 zval(
ii, 1)=zvalnor/zweinor
442 zval(
ii,jmar)=zvalsud/zweisud
443 zstd(
ii, 1)=zstdnor/zweinor
444 zstd(
ii,jmar)=zstdsud/zweisud
445 zsig(
ii, 1)=zsignor/zweinor
446 zsig(
ii,jmar)=zsigsud/zweisud
460 REAL x(imar,jmar),xf(imar,jmar)
461 real weightpb(-1:1,-1:1)
467 weightpb(is,js)=1./
REAL((1+is**2)*(1+js**2))
468 sum=sum+weightpb(is,js)
477 weightpb(is,js)=weightpb(is,js)/sum
486 xf(
i,
j)=xf(
i,
j)+
x(
i+is,
j+js)*weightpb(is,js)
496 xf(1,
j)=xf(1,
j)+
x(is,
j+js)*weightpb(-1,js)
500 xf(1,
j)=xf(1,
j)+
x(1+is,
j+js)*weightpb(is,js)
508 xf(
i,jmar)=xf(
i,jmar-1)