--- trunk/libf/dyn3d/grid_noro_m.f90 2008/07/25 19:59:34 13 +++ trunk/libf/phylmd/Orography/grid_noro_m.f90 2011/09/23 12:28:01 52 @@ -1,11 +1,7 @@ module grid_noro_m - ! Clean: no C preprocessor directive, no include line - implicit none - private mva9 - contains SUBROUTINE grid_noro(xdata, ydata, zdata, x, y, zphi, zmea, zstd, zsig, & @@ -41,8 +37,8 @@ ! (d) use dimens_m, only: iim, jjm - use comconst, only: pi - use numer_rec, only: assert + use nr_util, only: assert, pi + use mva9_m, only: mva9 REAL, intent(in):: xdata(:), ydata(:) ! coordinates of input field REAL, intent(in):: zdata(:, :) ! input field @@ -59,7 +55,7 @@ REAL, intent(out):: zpic(:, :) ! Maximum altitude real, intent(out):: zval(:, :) ! Minimum altitude - real, intent(out):: mask(:, :) + real, intent(out):: mask(:, :) ! fraction of land ! Variables local to the procedure: @@ -141,7 +137,7 @@ zusn(i, jusn+2)=zusn(i+iusn/2, jusn+1) zusn(i+iusn/2+iext, jusn+2)=zusn(i, jusn+1) ENDDO - ! + ! COMPUTE LIMITS OF MODEL GRIDPOINT AREA ! ( REGULAR GRID) @@ -190,7 +186,7 @@ ENDDO ! SUMMATION OVER GRIDPOINT AREA - ! + zleny=pi/real(jusn)*rad xincr=pi/2./real(jusn) DO ii = 1, iim+1 @@ -255,7 +251,7 @@ zxtzy(ii, jj)=zxtzy(ii, jj)/weight(ii, jj) ztz(ii, jj) =ztz(ii, jj)/weight(ii, jj) ! Standard deviation: - zstd(ii, jj)=sqrt(AMAX1(0., ztz(ii, jj)-zmea(ii, jj)**2)) + zstd(ii, jj)=sqrt(MAX(0., ztz(ii, jj) - zmea(ii, jj)**2)) ENDDO ENDDO @@ -274,13 +270,13 @@ ! FIRST FILTER, MOVING AVERAGE OVER 9 POINTS. - CALL MVA9(zmea, iim+1, jjm+1) - CALL MVA9(zstd, iim+1, jjm+1) - CALL MVA9(zpic, iim+1, jjm+1) - CALL MVA9(zval, iim+1, jjm+1) - CALL MVA9(zxtzx, iim+1, jjm+1) - CALL MVA9(zxtzy, iim+1, jjm+1) - CALL MVA9(zytzy, iim+1, jjm+1) + CALL MVA9(zmea) + CALL MVA9(zstd) + CALL MVA9(zpic) + CALL MVA9(zval) + CALL MVA9(zxtzx) + CALL MVA9(zxtzy) + CALL MVA9(zytzy) ! Masque prenant en compte maximum de terre ! On seuil a 10% de terre de terre car en dessous les parametres @@ -324,13 +320,13 @@ zllmval=AMAX1(zval(ii, jj), zllmval) ENDDO ENDDO - print *, ' MEAN ORO:', zllmmea - print *, ' ST. DEV.:', zllmstd - print *, ' PENTE:', zllmsig - print *, ' ANISOTROP:', zllmgam - print *, ' ANGLE:', zminthe, zllmthe - print *, ' pic:', zllmpic - print *, ' val:', zllmval + print *, 'MEAN ORO: ', zllmmea + print *, 'ST. DEV.: ', zllmstd + print *, 'PENTE: ', zllmsig + print *, 'ANISOTROP: ', zllmgam + print *, 'ANGLE: ', zminthe, zllmthe + print *, 'pic: ', zllmpic + print *, 'val: ', zllmval ! gamma and theta a 1. and 0. at poles zmea(iim+1, :)=zmea(1, :) @@ -396,76 +392,4 @@ END SUBROUTINE grid_noro - !****************************************** - - SUBROUTINE MVA9(X, IMAR, JMAR) - - ! From dyn3d/grid_noro.F, v 1.1.1.1 2004/05/19 12:53:06 - - ! MAKE A MOVING AVERAGE OVER 9 GRIDPOINTS OF THE X FIELDS - - integer, intent(in):: imar, jmar - REAL, intent(inout):: X(IMAR, JMAR) - - integer, PARAMETER:: ISMo=300, JSMo=200 - real XF(ISMo, JSMo) - real WEIGHTpb(-1:1, -1:1) - real sum - integer i, is, js, j - - if(imar>ismo) stop 'surdimensionner ismo dans mva9 (grid_noro)' - if(jmar>jsmo) stop 'surdimensionner jsmo dans mva9 (grid_noro)' - - SUM=0. - DO IS=-1, 1 - DO JS=-1, 1 - WEIGHTpb(IS, JS)=1./FLOAT((1+IS**2)*(1+JS**2)) - SUM=SUM+WEIGHTpb(IS, JS) - ENDDO - ENDDO - - DO IS=-1, 1 - DO JS=-1, 1 - WEIGHTpb(IS, JS)=WEIGHTpb(IS, JS)/SUM - ENDDO - ENDDO - - DO J=2, JMAR-1 - DO I=2, IMAR-1 - XF(I, J)=0. - DO IS=-1, 1 - DO JS=-1, 1 - XF(I, J)=XF(I, J)+X(I+IS, J+JS)*WEIGHTpb(IS, JS) - ENDDO - ENDDO - ENDDO - ENDDO - - DO J=2, JMAR-1 - XF(1, J)=0. - IS=IMAR-1 - DO JS=-1, 1 - XF(1, J)=XF(1, J)+X(IS, J+JS)*WEIGHTpb(-1, JS) - ENDDO - DO IS=0, 1 - DO JS=-1, 1 - XF(1, J)=XF(1, J)+X(1+IS, J+JS)*WEIGHTpb(IS, JS) - ENDDO - ENDDO - XF(IMAR, J)=XF(1, J) - ENDDO - - DO I=1, IMAR - XF(I, 1)=XF(I, 2) - XF(I, JMAR)=XF(I, JMAR-1) - ENDDO - - DO I=1, IMAR - DO J=1, JMAR - X(I, J)=XF(I, J) - ENDDO - ENDDO - - END SUBROUTINE MVA9 - end module grid_noro_m