Changeset 1403 for trunk/LMDZ.MARS/libf/filtrez
- Timestamp:
- Mar 31, 2015, 3:49:07 PM (10 years ago)
- Location:
- trunk/LMDZ.MARS/libf/filtrez
- Files:
-
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/filtrez/coefils.h
r38 r1403 1 COMMON/coefils/jfiltnu,jfiltsu,jfiltnv,jfiltsv,sddu(iim),sddv(iim) 2 * ,unsddu(iim),unsddv(iim),coefilu(iim,jjm),coefilv(iim,jjm),3 * modfrstu(jjm),modfrstv(jjm),eignfnu(iim,iim),eignfnv(iim,iim)4 *,coefilu2(iim,jjm),coefilv2(iim,jjm)5 c1 COMMON/coefils/jfiltnu,jfiltsu,jfiltnv,jfiltsv,sddu(iim),sddv(iim)& 2 & ,unsddu(iim),unsddv(iim),coefilu(iim,jjm),coefilv(iim,jjm), & 3 & modfrstu(jjm),modfrstv(jjm),eignfnu(iim,iim),eignfnv(iim,iim) & 4 & ,coefilu2(iim,jjm),coefilv2(iim,jjm) 5 !c 6 6 INTEGER jfiltnu,jfiltsu,jfiltnv,jfiltsv,modfrstu,modfrstv 7 7 REAL sddu,sddv,unsddu,unsddv,coefilu,coefilv,eignfnu,eignfnv -
trunk/LMDZ.MARS/libf/filtrez/filtreg_mod.F90
r1401 r1403 1 MODULE filtreg_mod 2 3 CONTAINS 4 1 5 SUBROUTINE inifilr 2 c 3 c... H. Upadhyaya, O.Sharma ...4 c 6 ! 7 ! ... H. Upadhyaya, O.Sharma ... 8 ! 5 9 IMPLICIT NONE 6 c 7 cversion 3 .....8 9 cCorrection le 28/10/97 P. Le Van .10 c-------------------------------------------------------------------10 ! 11 ! version 3 ..... 12 13 ! Correction le 28/10/97 P. Le Van . 14 ! ------------------------------------------------------------------- 11 15 #include "dimensions.h" 12 16 #include "paramet.h" 13 17 #include "parafilt.h" 14 c-------------------------------------------------------------------18 ! ------------------------------------------------------------------- 15 19 #include "comgeom.h" 16 20 #include "coefils.h" … … 20 24 REAL dlonu(iim),dlatu(jjm) 21 25 REAL rlamda( iim ), eignvl( iim ) 22 c 26 ! 23 27 24 28 REAL lamdamax,pi,cof … … 26 30 REAL dymin,dxmin,colat0 27 31 REAL eignft(iim,iim), coff 28 REAL matriceun,matriceus,matricevn,matricevs,matrinvn,matrinvs 29 COMMON/matrfil/matriceun(iim,iim,nfilun),matriceus(iim,iim,nfilus) 30 , , matricevn(iim,iim,nfilvn),matricevs(iim,iim,nfilvs)31 ,, matrinvn(iim,iim,nfilun),matrinvs (iim,iim,nfilus)32 REAL matriceun,matriceus,matricevn,matricevs,matrinvn,matrinvs 33 COMMON/matrfil/matriceun(iim,iim,nfilun),matriceus(iim,iim,nfilus) & 34 , matricevn(iim,iim,nfilvn),matricevs(iim,iim,nfilvs) & 35 , matrinvn(iim,iim,nfilun),matrinvs (iim,iim,nfilus) 32 36 #ifdef CRAY 33 37 INTEGER ISMIN … … 37 41 #endif 38 42 EXTERNAL inifgn 39 c 40 c------------------------------------------------------------41 cThis routine computes the eigenfunctions of the laplacien42 con the stretched grid, and the filtering coefficients43 c44 cWe designate:45 ceignfn eigenfunctions of the discrete laplacien46 ceigenvl eigenvalues47 cjfiltn indexof the last scalar line filtered in NH48 cjfilts index of the first line filtered in SH49 cmodfrst index of the mode from where modes are filtered50 cmodemax maximum number of modes ( im )51 ccoefil filtering coefficients ( lamda_max*cos(rlat)/lamda )52 csdd SQRT( dx )53 c54 cthe modes are filtered from modfrst to modemax55 c56 c-----------------------------------------------------------57 c 43 ! 44 ! ------------------------------------------------------------ 45 ! This routine computes the eigenfunctions of the laplacien 46 ! on the stretched grid, and the filtering coefficients 47 ! 48 ! We designate: 49 ! eignfn eigenfunctions of the discrete laplacien 50 ! eigenvl eigenvalues 51 ! jfiltn indexof the last scalar line filtered in NH 52 ! jfilts index of the first line filtered in SH 53 ! modfrst index of the mode from where modes are filtered 54 ! modemax maximum number of modes ( im ) 55 ! coefil filtering coefficients ( lamda_max*cos(rlat)/lamda ) 56 ! sdd SQRT( dx ) 57 ! 58 ! the modes are filtered from modfrst to modemax 59 60 !----------------------------------------------------------- 61 ! 58 62 59 63 pi = 2. * ASIN( 1. ) … … 62 66 dlonu(i) = xprimu( i ) 63 67 ENDDO 64 c 68 ! 65 69 CALL inifgn(eignvl) 66 c 70 ! 67 71 print *,' EIGNVL ' 68 72 PRINT 250,eignvl 69 73 250 FORMAT( 1x,5e13.6) 70 c 71 ccompute eigenvalues and eigenfunctions72 c 73 c 74 c.................................................................75 c 76 ccompute the filtering coefficients for scalar lines and77 cmeridional wind v-lines78 c 79 cwe filter all those latitude lines where coefil < 180 cNO FILTERING AT POLES81 c 82 ccolat0 is to be used when alpha (stretching coefficient)83 cis set equal to zero for the regular grid case84 c 85 c....... Calcul de colat0 .........86 c..... colat0 = minimum de ( 0.5, min dy/ min dx ) ...87 c 88 c 74 ! 75 ! compute eigenvalues and eigenfunctions 76 ! 77 ! 78 !................................................................. 79 ! 80 ! compute the filtering coefficients for scalar lines and 81 ! meridional wind v-lines 82 ! 83 ! we filter all those latitude lines where coefil < 1 84 ! NO FILTERING AT POLES 85 ! 86 ! colat0 is to be used when alpha (stretching coefficient) 87 ! is set equal to zero for the regular grid case 88 ! 89 ! ....... Calcul de colat0 ......... 90 ! ..... colat0 = minimum de ( 0.5, min dy/ min dx ) ... 91 ! 92 ! 89 93 DO 45 j = 1,jjm 90 94 dlatu( j ) = rlatu( j ) - rlatu( j+1 ) 91 95 45 CONTINUE 92 c 96 ! 93 97 #ifdef CRAY 94 98 iymin = ISMIN( jjm, dlatu, 1 ) … … 106 110 ENDDO 107 111 #endif 108 c 109 c 112 ! 113 ! 110 114 colat0 = MIN( 0.5, dymin/dxmin ) 111 c 115 ! 112 116 IF( .NOT.fxyhypb.AND.ysinus ) THEN 113 117 colat0 = 0.6 114 c...... a revoir pour ysinus ! .......118 ! ...... a revoir pour ysinus ! ....... 115 119 alphax = 0. 116 120 ENDIF 117 c 121 ! 118 122 PRINT 50, colat0,alphax 119 123 50 FORMAT(/15x,' Inifilr colat0 alphax ',2e16.7) 120 c 124 ! 121 125 IF(alphax.EQ.1. ) THEN 122 126 PRINT *,' Inifilr alphax doit etre < a 1. Corriger ' 123 127 STOP 124 128 ENDIF 125 c 129 ! 126 130 lamdamax = iim / ( pi * colat0 * ( 1. - alphax ) ) 127 131 128 cc ... Correction le 28/10/97 ( P.Le Van ) ..129 c 132 !c ... Correction le 28/10/97 ( P.Le Van ) .. 133 ! 130 134 DO 71 i = 2,iim 131 135 rlamda( i ) = lamdamax/ SQRT( ABS( eignvl(i) ) ) 132 136 71 CONTINUE 133 c 137 ! 134 138 135 139 DO 72 j = 1,jjm … … 142 146 72 CONTINUE 143 147 144 c 145 c... Determination de jfiltnu,jfiltnv,jfiltsu,jfiltsv ....146 c.........................................................147 c 148 ! 149 ! ... Determination de jfiltnu,jfiltnv,jfiltsu,jfiltsv .... 150 ! ......................................................... 151 ! 148 152 modemax = iim 149 153 150 cccc imx = modemax - 4 * (modemax/iim)154 !ccc imx = modemax - 4 * (modemax/iim) 151 155 152 156 imx = iim 153 c 157 ! 154 158 PRINT *,' TRUNCATION AT ',imx 155 c 159 ! 156 160 DO 75 j = 2, jjm/2+1 157 161 cof = COS( rlatu(j) )/ colat0 … … 162 166 cof = COS( rlatu(jjp1-j+1) )/ colat0 163 167 IF ( cof .LT. 1. ) THEN 164 IF( rlamda(imx) * COS(rlatu(jjp1-j+1) ).LT.1. ) 165 $jfiltsu= jjp1-j+1168 IF( rlamda(imx) * COS(rlatu(jjp1-j+1) ).LT.1. ) & 169 jfiltsu= jjp1-j+1 166 170 ENDIF 167 171 75 CONTINUE 168 c 172 ! 169 173 DO 76 j = 1, jjm/2 170 174 cof = COS( rlatv(j) )/ colat0 … … 175 179 cof = COS( rlatv(jjm-j+1) )/ colat0 176 180 IF ( cof .LT. 1. ) THEN 177 IF( rlamda(imx) * COS(rlatv(jjm-j+1) ).LT.1. ) 178 $jfiltsv= jjm-j+1181 IF( rlamda(imx) * COS(rlatv(jjm-j+1) ).LT.1. ) & 182 jfiltsv= jjm-j+1 179 183 ENDIF 180 184 76 CONTINUE 181 c185 ! 182 186 183 187 IF( jfiltnu.LE.0 .OR. jfiltnu.GT. jjm/2 +1 ) THEN … … 201 205 ENDIF 202 206 203 PRINT *,' jfiltnv jfiltsv jfiltnu jfiltsu ' , 204 *jfiltnv,jfiltsv,jfiltnu,jfiltsu205 206 c207 c... Determination de coefilu,coefilv,n=modfrstu,modfrstv ....208 c................................................................209 c 210 c 207 PRINT *,' jfiltnv jfiltsv jfiltnu jfiltsu ' , & 208 jfiltnv,jfiltsv,jfiltnu,jfiltsu 209 210 ! 211 ! ... Determination de coefilu,coefilv,n=modfrstu,modfrstv .... 212 !................................................................ 213 ! 214 ! 211 215 DO 77 j = 1,jjm 212 216 modfrstu( j ) = iim 213 217 modfrstv( j ) = iim 214 218 77 CONTINUE 215 c 219 ! 216 220 DO 84 j = 2,jfiltnu 217 221 DO 81 k = 2,modemax … … 221 225 GOTO 84 222 226 82 modfrstu( j ) = k 223 c 227 ! 224 228 kf = modfrstu( j ) 225 229 DO 83 k = kf , modemax … … 229 233 83 CONTINUE 230 234 84 CONTINUE 231 c232 c 235 ! 236 ! 233 237 DO 89 j = 1,jfiltnv 234 c 238 ! 235 239 DO 86 k = 2,modemax 236 240 cof = rlamda(k) * COS( rlatv(j) ) … … 239 243 GOTO 89 240 244 87 modfrstv( j ) = k 241 c 245 ! 242 246 kf = modfrstv( j ) 243 247 DO 88 k = kf , modemax … … 246 250 coefilv2(k,j) = cof*cof - 1. 247 251 88 CONTINUE 248 c 252 ! 249 253 89 CONTINUE 250 c 254 ! 251 255 DO 94 j = jfiltsu,jjm 252 256 DO 91 k = 2,modemax … … 256 260 GOTO 94 257 261 92 modfrstu( j ) = k 258 c 262 ! 259 263 kf = modfrstu( j ) 260 264 DO 93 k = kf , modemax … … 264 268 93 CONTINUE 265 269 94 CONTINUE 266 c270 ! 267 271 DO 99 j = jfiltsv,jjm 268 272 DO 96 k = 2,modemax … … 272 276 GOTO 99 273 277 97 modfrstv( j ) = k 274 c 278 ! 275 279 kf = modfrstv( j ) 276 280 DO 98 k = kf , modemax … … 280 284 98 CONTINUE 281 285 99 CONTINUE 282 c 286 ! 283 287 284 288 IF(jfiltnv.GE.jjm/2 .OR. jfiltnu.GE.jjm/2)THEN … … 287 291 IF(jfiltnu.EQ.jfiltsu)jfiltsu=1+jfiltnu 288 292 289 PRINT *,'jfiltnv jfiltsv jfiltnu jfiltsu' , 290 *jfiltnv,jfiltsv,jfiltnu,jfiltsu293 PRINT *,'jfiltnv jfiltsv jfiltnu jfiltsu' , & 294 jfiltnv,jfiltsv,jfiltnu,jfiltsu 291 295 ENDIF 292 296 … … 298 302 299 303 IF( nfilun.LT. jfiltnu ) THEN 300 PRINT *,' le parametre nfilun utilise pour la matrice ', 301 *' matriceun est trop petit ! '304 PRINT *,' le parametre nfilun utilise pour la matrice ', & 305 ' matriceun est trop petit ! ' 302 306 PRINT *,'Le changer dans parafilt.h et le mettre a ',jfiltnu 303 PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' 304 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1305 *,jfiltnv,jjm-jfiltsv+1307 PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' & 308 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 309 ,jfiltnv,jjm-jfiltsv+1 306 310 STOP 307 311 ENDIF 308 312 IF( nfilun.GT. jfiltnu+ 2 ) THEN 309 PRINT *,' le parametre nfilun utilise pour la matrice ', 310 *' matriceun est trop grand ! Gachis de memoire ! '313 PRINT *,' le parametre nfilun utilise pour la matrice ', & 314 ' matriceun est trop grand ! Gachis de memoire ! ' 311 315 PRINT *,'Le changer dans parafilt.h et le mettre a ',jfiltnu 312 PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' 313 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1314 *,jfiltnv,jjm-jfiltsv+1315 cSTOP316 PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' & 317 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 318 ,jfiltnv,jjm-jfiltsv+1 319 ! STOP 316 320 ENDIF 317 321 IF( nfilus.LT. jjm - jfiltsu +1 ) THEN 318 PRINT *,' le parametre nfilus utilise pour la matrice ', 319 *' matriceus est trop petit ! '320 PRINT *,' Le changer dans parafilt.h et le mettre a ', 321 *jjm - jfiltsu + 1322 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 323 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1324 *,jfiltnv,jjm-jfiltsv+1322 PRINT *,' le parametre nfilus utilise pour la matrice ', & 323 ' matriceus est trop petit ! ' 324 PRINT *,' Le changer dans parafilt.h et le mettre a ', & 325 jjm - jfiltsu + 1 326 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 327 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 328 ,jfiltnv,jjm-jfiltsv+1 325 329 STOP 326 330 ENDIF 327 331 IF( nfilus.GT. jjm - jfiltsu + 3 ) THEN 328 PRINT *,' le parametre nfilus utilise pour la matrice ', 329 *' matriceus est trop grand ! '330 PRINT *,' Le changer dans parafilt.h et le mettre a ' , 331 *jjm - jfiltsu + 1332 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 333 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1334 *,jfiltnv,jjm-jfiltsv+1335 cSTOP332 PRINT *,' le parametre nfilus utilise pour la matrice ', & 333 ' matriceus est trop grand ! ' 334 PRINT *,' Le changer dans parafilt.h et le mettre a ' , & 335 jjm - jfiltsu + 1 336 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 337 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 338 ,jfiltnv,jjm-jfiltsv+1 339 ! STOP 336 340 ENDIF 337 341 IF( nfilvn.LT. jfiltnv ) THEN 338 PRINT *,' le parametre nfilvn utilise pour la matrice ', 339 *' matricevn est trop petit ! '342 PRINT *,' le parametre nfilvn utilise pour la matrice ', & 343 ' matricevn est trop petit ! ' 340 344 PRINT *,'Le changer dans parafilt.h et le mettre a ',jfiltnv 341 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 342 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1343 *,jfiltnv,jjm-jfiltsv+1345 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 346 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 347 ,jfiltnv,jjm-jfiltsv+1 344 348 STOP 345 349 ENDIF 346 350 IF( nfilvn.GT. jfiltnv+ 2 ) THEN 347 PRINT *,' le parametre nfilvn utilise pour la matrice ', 348 *' matricevn est trop grand ! Gachis de memoire ! '351 PRINT *,' le parametre nfilvn utilise pour la matrice ', & 352 ' matricevn est trop grand ! Gachis de memoire ! ' 349 353 PRINT *,'Le changer dans parafilt.h et le mettre a ',jfiltnv 350 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 351 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1352 *,jfiltnv,jjm-jfiltsv+1353 cSTOP354 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 355 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 356 ,jfiltnv,jjm-jfiltsv+1 357 ! STOP 354 358 ENDIF 355 359 IF( nfilvs.LT. jjm - jfiltsv +1 ) THEN 356 PRINT *,' le parametre nfilvs utilise pour la matrice ', 357 *' matricevs est trop petit ! Le changer dans parafilt.h '358 PRINT *,' Le changer dans parafilt.h et le mettre a ' 359 *, jjm - jfiltsv + 1360 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 361 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1362 *,jfiltnv,jjm-jfiltsv+1360 PRINT *,' le parametre nfilvs utilise pour la matrice ', & 361 ' matricevs est trop petit ! Le changer dans parafilt.h ' 362 PRINT *,' Le changer dans parafilt.h et le mettre a ' & 363 , jjm - jfiltsv + 1 364 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 365 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 366 ,jfiltnv,jjm-jfiltsv+1 363 367 STOP 364 368 ENDIF 365 369 IF( nfilvs.GT. jjm - jfiltsv + 3 ) THEN 366 PRINT *,' le parametre nfilvs utilise pour la matrice ', 367 *' matricevs est trop grand ! Gachis de memoire ! '368 PRINT *,' Le changer dans parafilt.h et le mettre a ' 369 *, jjm - jfiltsv + 1370 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' 371 * ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1372 *,jfiltnv,jjm-jfiltsv+1373 cSTOP374 ENDIF 375 376 c377 c...................................................................378 c 379 c... Calcul de la matrice filtre 'matriceu' pour les champs situes380 csur la grille scalaire ........381 c...................................................................382 c 370 PRINT *,' le parametre nfilvs utilise pour la matrice ', & 371 ' matricevs est trop grand ! Gachis de memoire ! ' 372 PRINT *,' Le changer dans parafilt.h et le mettre a ' & 373 , jjm - jfiltsv + 1 374 PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' & 375 ,'doivent etre egaux successivement a ',jfiltnu,jjm-jfiltsu+1 & 376 ,jfiltnv,jjm-jfiltsv+1 377 ! STOP 378 ENDIF 379 380 ! 381 ! ................................................................... 382 ! 383 ! ... Calcul de la matrice filtre 'matriceu' pour les champs situes 384 ! sur la grille scalaire ........ 385 ! ................................................................... 386 ! 383 387 DO j = 2, jfiltnu 384 388 … … 394 398 #else 395 399 #ifdef BLAS 396 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 397 $eignfnv, iim, eignft, iim, 0.0, matriceun(1,1,j), iim)400 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 401 eignfnv, iim, eignft, iim, 0.0, matriceun(1,1,j), iim) 398 402 #else 399 403 DO k = 1, iim … … 401 405 matriceun(i,k,j) = 0.0 402 406 DO ii = 1, iim 403 matriceun(i,k,j) = matriceun(i,k,j) 404 .+ eignfnv(i,ii)*eignft(ii,k)407 matriceun(i,k,j) = matriceun(i,k,j) & 408 + eignfnv(i,ii)*eignft(ii,k) 405 409 ENDDO 406 410 ENDDO … … 424 428 #else 425 429 #ifdef BLAS 426 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 427 $ eignfnv, iim, eignft, iim, 0.0,428 $matriceus(1,1,j-jfiltsu+1), iim)430 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 431 eignfnv, iim, eignft, iim, 0.0, & 432 matriceus(1,1,j-jfiltsu+1), iim) 429 433 #else 430 434 DO k = 1, iim … … 432 436 matriceus(i,k,j-jfiltsu+1) = 0.0 433 437 DO ii = 1, iim 434 matriceus(i,k,j-jfiltsu+1) = matriceus(i,k,j-jfiltsu+1) 435 .+ eignfnv(i,ii)*eignft(ii,k)438 matriceus(i,k,j-jfiltsu+1) = matriceus(i,k,j-jfiltsu+1) & 439 + eignfnv(i,ii)*eignft(ii,k) 436 440 ENDDO 437 441 ENDDO … … 442 446 ENDDO 443 447 444 c...................................................................445 c 446 c... Calcul de la matrice filtre 'matricev' pour les champs situes447 csur la grille de V ou de Z ........448 c...................................................................449 c 448 ! ................................................................... 449 ! 450 ! ... Calcul de la matrice filtre 'matricev' pour les champs situes 451 ! sur la grille de V ou de Z ........ 452 ! ................................................................... 453 ! 450 454 DO j = 1, jfiltnv 451 455 … … 461 465 #else 462 466 #ifdef BLAS 463 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 464 $eignfnu, iim, eignft, iim, 0.0, matricevn(1,1,j), iim)467 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 468 eignfnu, iim, eignft, iim, 0.0, matricevn(1,1,j), iim) 465 469 #else 466 470 DO k = 1, iim … … 468 472 matricevn(i,k,j) = 0.0 469 473 DO ii = 1, iim 470 matricevn(i,k,j) = matricevn(i,k,j) 471 .+ eignfnu(i,ii)*eignft(ii,k)474 matricevn(i,k,j) = matricevn(i,k,j) & 475 + eignfnu(i,ii)*eignft(ii,k) 472 476 ENDDO 473 477 ENDDO … … 491 495 #else 492 496 #ifdef BLAS 493 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 494 $ eignfnu, iim, eignft, iim, 0.0,495 $matricevs(1,1,j-jfiltsv+1), iim)497 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 498 eignfnu, iim, eignft, iim, 0.0, & 499 matricevs(1,1,j-jfiltsv+1), iim) 496 500 #else 497 501 DO k = 1, iim … … 499 503 matricevs(i,k,j-jfiltsv+1) = 0.0 500 504 DO ii = 1, iim 501 matricevs(i,k,j-jfiltsv+1) = matricevs(i,k,j-jfiltsv+1) 502 .+ eignfnu(i,ii)*eignft(ii,k)505 matricevs(i,k,j-jfiltsv+1) = matricevs(i,k,j-jfiltsv+1) & 506 + eignfnu(i,ii)*eignft(ii,k) 503 507 ENDDO 504 508 ENDDO … … 509 513 ENDDO 510 514 511 c...................................................................512 c 513 c... Calcul de la matrice filtre 'matrinv' pour les champs situes514 csur la grille scalaire , pour le filtre inverse ........515 c...................................................................516 c 515 ! ................................................................... 516 ! 517 ! ... Calcul de la matrice filtre 'matrinv' pour les champs situes 518 ! sur la grille scalaire , pour le filtre inverse ........ 519 ! ................................................................... 520 ! 517 521 DO j = 2, jfiltnu 518 522 … … 528 532 #else 529 533 #ifdef BLAS 530 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 531 $eignfnv, iim, eignft, iim, 0.0, matrinvn(1,1,j), iim)534 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 535 eignfnv, iim, eignft, iim, 0.0, matrinvn(1,1,j), iim) 532 536 #else 533 537 DO k = 1, iim … … 535 539 matrinvn(i,k,j) = 0.0 536 540 DO ii = 1, iim 537 matrinvn(i,k,j) = matrinvn(i,k,j) 538 .+ eignfnv(i,ii)*eignft(ii,k)541 matrinvn(i,k,j) = matrinvn(i,k,j) & 542 + eignfnv(i,ii)*eignft(ii,k) 539 543 ENDDO 540 544 ENDDO … … 558 562 #else 559 563 #ifdef BLAS 560 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, 561 $eignfnv, iim, eignft, iim, 0.0, matrinvs(1,1,j-jfiltsu+1), iim)564 CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, & 565 eignfnv, iim, eignft, iim, 0.0, matrinvs(1,1,j-jfiltsu+1), iim) 562 566 #else 563 567 DO k = 1, iim … … 565 569 matrinvs(i,k,j-jfiltsu+1) = 0.0 566 570 DO ii = 1, iim 567 matrinvs(i,k,j-jfiltsu+1) = matrinvs(i,k,j-jfiltsu+1) 568 .+ eignfnv(i,ii)*eignft(ii,k)571 matrinvs(i,k,j-jfiltsu+1) = matrinvs(i,k,j-jfiltsu+1) & 572 + eignfnv(i,ii)*eignft(ii,k) 569 573 ENDDO 570 574 ENDDO … … 575 579 ENDDO 576 580 577 c...................................................................578 579 c 581 ! ................................................................... 582 583 ! 580 584 334 FORMAT(1x,24i3) 581 585 755 FORMAT(1x,6f10.3,i3) 582 586 583 587 RETURN 584 END 588 END SUBROUTINE inifilr 589 590 END MODULE filtreg_mod -
trunk/LMDZ.MARS/libf/filtrez/parafilt.h
r38 r1403 1 1 INTEGER nfilun, nfilus, nfilvn, nfilvs 2 c 3 c48 32 19 non-zoom:4 cPARAMETER (nfilun=30,nfilus=30,nfilvn=30,nfilvs=30)5 cPARAMETER (nfilun=6, nfilus=5, nfilvn=5, nfilvs=5)6 cPARAMETER (nfilun=15, nfilus=8, nfilvn=14, nfilvs=8)7 cPARAMETER (nfilun=24, nfilus=23, nfilvn=24, nfilvs=24)8 cmaf -debug PARAMETER (nfilun=2, nfilus=1, nfilvn=2, nfilvs=2)9 c 10 c 11 c96 49 11 non-zoom:12 ccc PARAMETER (nfilun=9, nfilus=8, nfilvn=8, nfilvs=8)13 c 14 c 15 c144 73 11 non-zoom:16 ccc PARAMETER (nfilun=13, nfilus=12, nfilvn=12, nfilvs=12)17 c 18 c192 143 19 non-zoom:19 cPARAMETER (nfilun=13, nfilus=12, nfilvn=13, nfilvs=13)20 cPARAMETER (nfilun=15, nfilus=14, nfilvn=14, nfilvs=14) !!NO fxyhyper21 cPARAMETER (nfilun=18, nfilus=17, nfilvn=17, nfilvs=17) !!NO fxyhyper2 ! 3 ! 48 32 19 non-zoom: 4 ! PARAMETER (nfilun=30,nfilus=30,nfilvn=30,nfilvs=30) 5 ! PARAMETER (nfilun=6, nfilus=5, nfilvn=5, nfilvs=5) 6 ! PARAMETER (nfilun=15, nfilus=8, nfilvn=14, nfilvs=8) 7 ! PARAMETER (nfilun=24, nfilus=23, nfilvn=24, nfilvs=24) 8 !maf -debug PARAMETER (nfilun=2, nfilus=1, nfilvn=2, nfilvs=2) 9 ! 10 ! 11 ! 96 49 11 non-zoom: 12 !cc PARAMETER (nfilun=9, nfilus=8, nfilvn=8, nfilvs=8) 13 ! 14 ! 15 ! 144 73 11 non-zoom: 16 !cc PARAMETER (nfilun=13, nfilus=12, nfilvn=12, nfilvs=12) 17 ! 18 ! 192 143 19 non-zoom: 19 ! PARAMETER (nfilun=13, nfilus=12, nfilvn=13, nfilvs=13) 20 ! PARAMETER (nfilun=15, nfilus=14, nfilvn=14, nfilvs=14) !!NO fxyhyper 21 ! PARAMETER (nfilun=18, nfilus=17, nfilvn=17, nfilvs=17) !!NO fxyhyper 22 22 !! PARAMETER (nfilun=9,nfilus=8,nfilvn=8,nfilvs=8) 23 23 PARAMETER (nfilun=9,nfilus=9,nfilvn=9,nfilvs=9) 24 c96 72 19 non-zoom:25 ccc PARAMETER (nfilun=12, nfilus=11, nfilvn=12, nfilvs=12)26 c 27 cPARAMETER ( nfilun=20, nfilus=20, nfilvn=20, nfilvs=20 )28 cPARAMETER ( nfilun=8, nfilus=7, nfilvn=7, nfilvs=7 )29 c 30 c 31 cIci , on a exagere les nombres de lignes de latitudes a filtrer .32 c 33 cLa premiere fois que le Gcm rentrera dans le Filtre ,34 c 35 cil indiquera les bonnes valeurs de nfilun , nflius, nfilvn et36 c 37 cnfilvs a mettre . Il suffira alors de changer ces valeurs dans38 c 39 cParameter ci-dessus et de relancer le run .24 ! 96 72 19 non-zoom: 25 !cc PARAMETER (nfilun=12, nfilus=11, nfilvn=12, nfilvs=12) 26 ! 27 ! PARAMETER ( nfilun=20, nfilus=20, nfilvn=20, nfilvs=20 ) 28 ! PARAMETER ( nfilun=8, nfilus=7, nfilvn=7, nfilvs=7 ) 29 ! 30 ! 31 ! Ici , on a exagere les nombres de lignes de latitudes a filtrer . 32 ! 33 ! La premiere fois que le Gcm rentrera dans le Filtre , 34 ! 35 ! il indiquera les bonnes valeurs de nfilun , nflius, nfilvn et 36 ! 37 ! nfilvs a mettre . Il suffira alors de changer ces valeurs dans 38 ! 39 ! Parameter ci-dessus et de relancer le run . 40 40
Note: See TracChangeset
for help on using the changeset viewer.