Changeset 3198 for LMDZ6/trunk/libf/phylmd/flott_gwd_rando_m.F90
- Timestamp:
- Feb 12, 2018, 1:24:03 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/flott_gwd_rando_m.F90
r2665 r3198 18 18 use dimphy, only: klon, klev 19 19 use assert_m, only: assert 20 USE ioipsl_getin_p_mod, ONLY : getin_p 21 USE vertical_layers_mod, ONLY : presnivs 22 20 23 include "YOMCST.h" 21 24 include "clesphys.h" … … 103 106 REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels 104 107 REAL PSEC ! Security to avoid division by 0 pressure 105 REAL PHM1(KLON, KLEV + 1) ! 1/Press at 1/2 levels106 108 REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels 107 109 REAL BVSEC ! Security to avoid negative BVF 110 REAL RAN_NUM_1,RAN_NUM_2,RAN_NUM_3 111 112 REAL, DIMENSION(klev+1) ::HREF 113 114 LOGICAL, SAVE :: gwd_reproductibilite_mpiomp=.true. 115 LOGICAL, SAVE :: firstcall = .TRUE. 116 !$OMP THREADPRIVATE(firstcall,gwd_reproductibilite_mpiomp) 117 118 CHARACTER (LEN=20) :: modname='flott_gwd_rando' 119 CHARACTER (LEN=80) :: abort_message 120 121 122 123 IF (firstcall) THEN 124 ! Cle introduite pour resoudre un probleme de non reproductibilite 125 ! Le but est de pouvoir tester de revenir a la version precedenete 126 ! A eliminer rapidement 127 CALL getin_p('gwd_reproductibilite_mpiomp',gwd_reproductibilite_mpiomp) 128 IF (NW+3*NA>=KLEV) THEN 129 abort_message = 'NW+3*NA>=KLEV Probleme pour generation des ondes' 130 CALL abort_physic (modname,abort_message,1) 131 ENDIF 132 firstcall=.false. 133 ENDIF 134 108 135 109 136 !----------------------------------------------------------------- … … 156 183 ZOISEC = 1.E-6 ! Security FOR 0 INTRINSIC FREQ 157 184 185 IF (1==0) THEN 158 186 !ONLINE 159 187 call assert(klon == (/size(pp, 1), size(tt, 1), size(uu, 1), & … … 167 195 "FLOTT_GWD_RANDO klev") 168 196 !END ONLINE 197 ENDIF 169 198 170 199 IF(DELTAT < DTIME)THEN … … 183 212 DO LL = 2, KLEV 184 213 PH(:, LL) = EXP((LOG(PP(:, LL)) + LOG(PP(:, LL - 1))) / 2.) 185 PHM1(:, LL) = 1. / PH(:, LL) 186 end DO 187 214 end DO 188 215 PH(:, KLEV + 1) = 0. 189 PHM1(:, KLEV + 1) = 1. / PSEC190 216 PH(:, 1) = 2. * PP(:, 1) - PH(:, 2) 191 217 192 218 ! Launching altitude 219 220 !Pour revenir a la version non reproductible en changeant le nombre de process 221 IF (gwd_reproductibilite_mpiomp) THEN 222 ! Reprend la formule qui calcule PH en fonction de PP=play 223 DO LL = 2, KLEV 224 HREF(LL) = EXP((LOG(presnivs(LL)) + LOG(presnivs(LL - 1))) / 2.) 225 end DO 226 HREF(KLEV + 1) = 0. 227 HREF(1) = 2. * presnivs(1) - HREF(2) 228 ELSE 229 HREF(1:KLEV)=PH(KLON/2,1:KLEV) 230 ENDIF 193 231 194 232 LAUNCH=0 195 233 LTROP =0 196 234 DO LL = 1, KLEV 197 IF ( PH(KLON / 2, LL) / PH(KLON / 2,1) > XLAUNCH) LAUNCH = LL235 IF (HREF(LL) / HREF(1) > XLAUNCH) LAUNCH = LL 198 236 ENDDO 199 237 DO LL = 1, KLEV 200 IF ( PH(KLON / 2, LL) / PH(KLON / 2,1) > XTROP) LTROP = LL238 IF (HREF(LL) / HREF(1) > XTROP) LTROP = LL 201 239 ENDDO 240 !LAUNCH=22 ; LTROP=33 241 ! print*,'LAUNCH=',LAUNCH,'LTROP=',LTROP 202 242 203 243 ! Log pressure vert. coordinate … … 245 285 ! waves characteristics in an almost stochastic way 246 286 247 JW = 0 248 DO JP = 1, NP 249 DO JK = 1, NK 250 DO JO = 1, NO 251 JW = JW + 1 287 DO JW = 1, NW 252 288 ! Angle 253 289 DO II = 1, KLON 254 290 ! Angle (0 or PI so far) 255 ZP(JW, II) = (SIGN(1., 0.5 - MOD(TT(II, JW) * 10., 1.)) + 1.) & 291 RAN_NUM_1=MOD(TT(II, JW) * 10., 1.) 292 RAN_NUM_2= MOD(TT(II, JW) * 100., 1.) 293 ZP(JW, II) = (SIGN(1., 0.5 - RAN_NUM_1) + 1.) & 256 294 * RPI / 2. 257 295 ! Horizontal wavenumber amplitude 258 ZK(JW, II) = KMIN + (KMAX - KMIN) * MOD(TT(II, JW) * 100., 1.)296 ZK(JW, II) = KMIN + (KMAX - KMIN) *RAN_NUM_2 259 297 ! Horizontal phase speed 260 298 CPHA = 0. 261 299 DO JJ = 1, NA 300 RAN_NUM_3=MOD(TT(II, JW+3*JJ)**2, 1.) 262 301 CPHA = CPHA + & 263 CMAX*2.*(MOD(TT(II, JW+3*JJ)**2, 1.)-0.5)*SQRT(3.)/SQRT(NA*1.)302 CMAX*2.*(RAN_NUM_3 -0.5)*SQRT(3.)/SQRT(NA*1.) 264 303 END DO 265 304 IF (CPHA.LT.0.) THEN … … 276 315 RUW0(JW, II) = RUWMAX 277 316 ENDDO 278 end DO 279 end DO 280 end DO 317 ENDDO 281 318 282 319 ! 4. COMPUTE THE FLUXES … … 417 454 ENDDO 418 455 456 419 457 END SUBROUTINE FLOTT_GWD_RANDO 420 458
Note: See TracChangeset
for help on using the changeset viewer.