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 |
---|