[17] | 1 | 189a190,195 |
---|
| 2 | > !!!!!!!!!!!!!! TEST NaN: ne fonction qu'avec r4 i4 |
---|
| 3 | > integer :: mask_nan = 2139095040 |
---|
| 4 | > integer :: chuck_norris |
---|
| 5 | > !!!!!!!!!!!!!! TEST NaN: ne fonction qu'avec r4 i4 |
---|
| 6 | > |
---|
| 7 | > |
---|
| 8 | 207a214,222 |
---|
| 9 | > !!!!$OMP PARALLEL DO & |
---|
| 10 | > !!!!$OMP PRIVATE ( ij ,i,j,k,its,ite,jts,jte) |
---|
| 11 | > !!!DO ij = 1 , num_tiles |
---|
| 12 | > !!! its = i_start(ij) |
---|
| 13 | > !!! ite = i_end(ij) |
---|
| 14 | > !!! jts = j_start(ij) |
---|
| 15 | > !!! jte = j_end(ij) |
---|
| 16 | > !!!ENDDO |
---|
| 17 | > !!!!$OMP END PARALLEL DO |
---|
| 18 | 249,253d263 |
---|
| 19 | < PRINT *, ips, ipe, jps, jpe |
---|
| 20 | < PRINT *, ngrid |
---|
| 21 | < |
---|
| 22 | < |
---|
| 23 | < |
---|
| 24 | 333,372c343,360 |
---|
| 25 | < !IF ((MAXVAL(t) > 500).OR.(MINVAL(t,MASK = t > 0) <= 50)) THEN |
---|
| 26 | < ! PRINT *,'****************** CRASH *******************' |
---|
| 27 | < ! PRINT *,'Irrealistic temperature...', MAXLOC(t), MINLOC(t) |
---|
| 28 | < !PRINT *, t |
---|
| 29 | < ! PRINT *,'************************************************' |
---|
| 30 | < ! STOP |
---|
| 31 | < !ENDIF |
---|
| 32 | < ! |
---|
| 33 | < !!! PB SAUF SI debug = 200 ?!!? |
---|
| 34 | < !IF (float(itimestep) > 200.) THEN ! to allow initialisation with zero-wind or constant |
---|
| 35 | < ! ! and allow some outputs to locate the NaNs :) |
---|
| 36 | < !IF ( (abs(MAXVAL(u)) == 0.) & |
---|
| 37 | < ! .OR. (MINVAL(u) > MAXVAL(u)) & |
---|
| 38 | < ! .OR. (abs(MAXVAL(v)) == 0.) & |
---|
| 39 | < ! .OR. (MINVAL(v) > MAXVAL(v)) ) THEN |
---|
| 40 | < !!IF ( (ANY(isNaN(u)) .EQV. .true.) & |
---|
| 41 | < !! .OR. (ANY(isNaN(v)) .EQV. .true.) & |
---|
| 42 | < !! .OR. (ANY(isNaN(t)) .EQV. .true.) ) THEN |
---|
| 43 | < !IF ( ANY(u*0. /= 0.) & |
---|
| 44 | < ! .OR. ANY(v*0. /= 0.) ) THEN |
---|
| 45 | < ! PRINT *,'****************** CRASH *******************' |
---|
| 46 | < ! PRINT *,'************************************************' |
---|
| 47 | < ! PRINT *,'NaN appeared in the simulation ...' |
---|
| 48 | < ! PRINT *,'...this may be due to numerical or dynamical instability' |
---|
| 49 | < ! PRINT *,'************************************************' |
---|
| 50 | < ! PRINT *,'POSSIBLE SOLUTIONS:' |
---|
| 51 | < ! PRINT *,'>> IF nonhydrostatic mode,' |
---|
| 52 | < ! PRINT *,' --> check that smdiv, emdiv and epssm are not 0.' |
---|
| 53 | < ! PRINT *,'>> IF cfl is violated, ' |
---|
| 54 | < ! PRINT *,' --> try to lower the dynamical timestep' |
---|
| 55 | < ! PRINT *,'>> IF topographical gradients are high near specified bdy,' |
---|
| 56 | < ! PRINT *,' --> try to redefine the domain' |
---|
| 57 | < ! PRINT *,'************************************************' |
---|
| 58 | < ! STOP |
---|
| 59 | < !ENDIF |
---|
| 60 | < !ENDIF |
---|
| 61 | < !IF ( ANY(isNaN(u)) & |
---|
| 62 | < ! .OR. ANY(isNaN(v)) & |
---|
| 63 | < ! .OR. ANY(isNaN(t)) ) THEN |
---|
| 64 | < ! >>> ne marche qu'avec g95 |
---|
| 65 | --- |
---|
| 66 | > chuck_norris = transfer( u(1,1,1),chuck_norris ) !! astuce J. Lefrere - test NaN or Inf |
---|
| 67 | > IF ( iand( chuck_norris,mask_nan ) == mask_nan ) THEN !! astuce J. Lefrere - test NaN or Inf |
---|
| 68 | > PRINT *, u(1,1,1) |
---|
| 69 | > PRINT *,'****************** CRASH *******************' |
---|
| 70 | > PRINT *,'************************************************' |
---|
| 71 | > PRINT *,'NaN or Inf appeared in the simulation ...' |
---|
| 72 | > PRINT *,'...this may be due to numerical or dynamical instability' |
---|
| 73 | > PRINT *,'************************************************' |
---|
| 74 | > PRINT *,'POSSIBLE SOLUTIONS:' |
---|
| 75 | > PRINT *,'>> IF nonhydrostatic mode,' |
---|
| 76 | > PRINT *,' --> check that smdiv, emdiv and epssm are not 0.' |
---|
| 77 | > PRINT *,'>> IF cfl is violated, ' |
---|
| 78 | > PRINT *,' --> try to lower the dynamical timestep' |
---|
| 79 | > PRINT *,'>> IF topographical gradients are high near specified bdy,' |
---|
| 80 | > PRINT *,' --> try to redefine the domain' |
---|
| 81 | > PRINT *,'************************************************' |
---|
| 82 | > STOP |
---|
| 83 | > ENDIF |
---|
| 84 | 379d366 |
---|
| 85 | < |
---|
| 86 | 59a60,61 |
---|
| 87 | > !INTEGER :: grandn !!MARS |
---|
| 88 | > |
---|
| 89 | 3238a3241,3277 |
---|
| 90 | > !! pour gagner encore plus de place, puisqu'en LES p et ph varient peu selon le domaine |
---|
| 91 | > !! on prend la valeur au point 1,1 car la moyenne impose du jonglage avec calc. parall. |
---|
| 92 | > IF ( (ips .eq. 1) .and. (jps .eq. 1) ) THEN |
---|
| 93 | > PRINT *, 'save profile' |
---|
| 94 | > DO kk = kps, MIN(kpe,kde-1) |
---|
| 95 | > grid%pprof(kk) = grid%ptot(ips,kk,jps) |
---|
| 96 | > grid%phprof(kk) = grid%phtot(ips,kk,jps) |
---|
| 97 | > ENDDO |
---|
| 98 | > ENDIF |
---|
| 99 | > |
---|
| 100 | > !! attention, fonctionne seulement en cas de vent nul !! |
---|
| 101 | > grid%tketot = 0.5 * (grid%u_2*grid%u_2 + grid%v_2*grid%v_2 + grid%w_2*grid%w_2) + grid%tke_2 |
---|
| 102 | > !! attention, fonctionne seulement en cas de vent nul !! |
---|
| 103 | > |
---|
| 104 | > !grandn = FLOAT(ide-ids-2+1)*FLOAT(jde-jds-2+1) |
---|
| 105 | > !DO kk = kps, MIN(kpe,kde-1) |
---|
| 106 | > ! grid%thprof(kk) = grid%t_2(ids+1,kk,jds+1) / grandn |
---|
| 107 | > ! DO jj = jds+2, jde-1 |
---|
| 108 | > ! DO ii = ids+2, ide-1 |
---|
| 109 | > ! grid%thprof(kk) = grid%thprof(kk) + grid%t_2(ii,kk,jj) / grandn |
---|
| 110 | > ! IF (grid%t_2(ii,kk,jj) .eq. 0.) print *,'zero t',ii,kk,jj |
---|
| 111 | > ! ENDDO |
---|
| 112 | > ! ENDDO |
---|
| 113 | > !ENDDO |
---|
| 114 | > |
---|
| 115 | > ! DO kk = kps, MIN(kpe,kde-1) |
---|
| 116 | > ! grid%pprof(kk) = grid%ptot(ips,kk,jps) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1) |
---|
| 117 | > ! grid%phprof(kk) = grid%phtot(ips,kk,jps) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1) |
---|
| 118 | > ! DO jj = jps+1, MIN(jpe,jde-1) |
---|
| 119 | > ! DO ii = ips+1, MIN(ipe,ide-1) |
---|
| 120 | > ! grid%pprof(kk) = grid%pprof(kk) + grid%ptot(ii,kk,jj) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1) |
---|
| 121 | > ! grid%phprof(kk) = grid%phprof(kk) + grid%phtot(ii,kk,jj) / FLOAT(MIN(ipe,ide-1) - ips + 1) / FLOAT(MIN(jpe,jde-1) - jps + 1) |
---|
| 122 | > ! IF (grid%phtot(ii,kk,jj) .eq. 0.) print *,'zero ph',ii,kk,jj |
---|
| 123 | > ! IF (grid%ptot(ii,kk,jj) .eq. 0.) print *,'zero p',ii,kk,jj |
---|
| 124 | > ! ENDDO |
---|
| 125 | > ! ENDDO |
---|
| 126 | > ! ENDDO |
---|