Changeset 3411 for LMDZ6/branches/DYNAMICO-conv/libf/phylmd/wake.F90
- Timestamp:
- Nov 5, 2018, 3:24:59 PM (7 years ago)
- Location:
- LMDZ6/branches/DYNAMICO-conv
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/DYNAMICO-conv
- Property svn:mergeinfo changed
/LMDZ6/trunk removed
- Property svn:mergeinfo changed
-
LMDZ6/branches/DYNAMICO-conv/libf/phylmd/wake.F90
r3356 r3411 4 4 SUBROUTINE wake(znatsurf, p, ph, pi, dtime, & 5 5 te0, qe0, omgb, & 6 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen,&7 sigd_con, Cin,&8 deltatw, deltaqw, sigmaw, awdens, wdens, &! state variables6 dtdwn, dqdwn, amdwn, amup, dta, dqa, & 7 sigd_con, & 8 deltatw, deltaqw, sigmaw, wdens, & ! state variables 9 9 dth, hw, wape, fip, gfl, & 10 10 dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, & 11 11 dtke, dqke, omg, dp_deltomg, spread, cstar, & 12 12 d_deltat_gw, & 13 d_deltatw2, d_deltaqw2, d_sigmaw2, d_ awdens2, d_wdens2)! tendencies13 d_deltatw2, d_deltaqw2, d_sigmaw2, d_wdens2) ! tendencies 14 14 15 15 … … 48 48 ! dtls : large scale temperature tendency due to wake 49 49 ! dqls : large scale humidity tendency due to wake 50 ! hw : wake top hight (given by hw*deltatw(1)/2=wape)50 ! hw : hauteur de la poche 51 51 ! dp_omgb : vertical gradient of large scale omega 52 ! awdens : densite de poches actives53 52 ! wdens : densite de poches 54 53 ! omgbdth: flux of Delta_Theta transported by LS omega … … 73 72 ! dta : source de chaleur due courants satures et detrain (K/s) 74 73 ! dqa : source d'humidite due aux courants satures et detra (kg/kg/s) 75 ! wgen : number of wakes generated per unit area and per sec (/m^2/s)76 74 ! amdwn: flux de masse total des descentes, par unite de 77 ! 75 ! surface de la maille (kg/m2/s) 78 76 ! amup : flux de masse total des ascendances, par unite de 79 ! surface de la maille (kg/m2/s) 80 ! sigd_con: 81 ! Cin : convective inhibition 77 ! surface de la maille (kg/m2/s) 82 78 ! p : pressions aux milieux des couches (Pa) 83 79 ! ph : pressions aux interfaces (Pa) … … 109 105 ! deltatw0 : deltatw initial 110 106 ! deltaqw0 : deltaqw initial 111 ! hw0 : wake top hight (defined as the altitude at which deltatw=0) 107 ! hw0 : hw initial 108 ! sigmaw0: sigmaw initial 112 109 ! amflux : horizontal mass flux through wake boundary 113 110 ! wdens_ref: initial number of wakes per unit area (3D) or per … … 136 133 REAL, DIMENSION (klon, klev), INTENT(IN) :: amdwn, amup 137 134 REAL, DIMENSION (klon, klev), INTENT(IN) :: dta, dqa 138 REAL, DIMENSION (klon), INTENT(IN) :: wgen139 135 REAL, DIMENSION (klon), INTENT(IN) :: sigd_con 140 REAL, DIMENSION (klon), INTENT(IN) :: Cin141 136 142 137 ! … … 145 140 REAL, DIMENSION (klon, klev), INTENT(INOUT) :: deltatw, deltaqw 146 141 REAL, DIMENSION (klon), INTENT(INOUT) :: sigmaw 147 REAL, DIMENSION (klon), INTENT(INOUT) :: awdens148 142 REAL, DIMENSION (klon), INTENT(INOUT) :: wdens 149 143 … … 155 149 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtls, dqls 156 150 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtke, dqke 157 REAL, DIMENSION (klon, klev), INTENT(OUT) :: spread ! unused (jyg)151 REAL, DIMENSION (klon, klev), INTENT(OUT) :: spread 158 152 REAL, DIMENSION (klon, klev), INTENT(OUT) :: omgbdth, omg 159 153 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dp_omgb, dp_deltomg … … 163 157 ! Tendencies of state variables 164 158 REAL, DIMENSION (klon, klev), INTENT(OUT) :: d_deltatw2, d_deltaqw2 165 REAL, DIMENSION (klon), INTENT(OUT) :: d_sigmaw2, d_ awdens2, d_wdens2159 REAL, DIMENSION (klon), INTENT(OUT) :: d_sigmaw2, d_wdens2 166 160 167 161 ! Variables internes … … 171 165 INTEGER, SAVE :: igout 172 166 !$OMP THREADPRIVATE(igout) 167 REAL :: alon 173 168 LOGICAL, SAVE :: first = .TRUE. 174 169 !$OMP THREADPRIVATE(first) … … 181 176 !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol) 182 177 183 REAL, SAVE :: tau_cv184 !$OMP THREADPRIVATE(tau_cv)185 REAL, SAVE :: rzero, aa0 ! minimal wake radius and area186 !$OMP THREADPRIVATE(rzero, aa0)187 188 178 LOGICAL, SAVE :: flag_wk_check_trgl 189 179 !$OMP THREADPRIVATE(flag_wk_check_trgl) 190 180 INTEGER, SAVE :: iflag_wk_check_trgl 191 181 !$OMP THREADPRIVATE(iflag_wk_check_trgl) 192 INTEGER, SAVE :: iflag_wk_pop_dyn193 !$OMP THREADPRIVATE(iflag_wk_pop_dyn)194 182 195 183 REAL :: delta_t_min 196 184 INTEGER :: nsub 197 185 REAL :: dtimesub 198 REAL :: wdensmin 199 REAL, SAVE :: sigmad, hwmin, wapecut, cstart 200 !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart) 186 REAL :: sigmad, hwmin, wapecut 201 187 REAL :: sigmaw_max 202 188 REAL :: dens_rate … … 209 195 REAL, DIMENSION (klon, klev) :: deltaqw0 210 196 REAL, DIMENSION (klon, klev) :: te, qe 197 REAL, DIMENSION (klon) :: sigmaw0 211 198 !! REAL, DIMENSION (klon) :: sigmaw1 212 213 ! Variables liees a la dynamique de population214 REAL, DIMENSION(klon) :: act215 REAL, DIMENSION(klon) :: rad_wk, tau_wk_inv216 REAL, DIMENSION(klon) :: f_shear217 REAL, DIMENSION(klon) :: drdt218 REAL, DIMENSION(klon) :: d_sig_gen, d_sig_death, d_sig_col219 REAL, DIMENSION(klon) :: wape1_act, wape2_act220 LOGICAL, DIMENSION (klon) :: kill_wake221 INTEGER, SAVE :: iflag_wk_act222 !$OMP THREADPRIVATE(iflag_wk_act)223 REAL :: drdt_pos224 REAL :: tau_wk_inv_min225 199 226 200 ! Variables pour les GW … … 230 204 REAL, DIMENSION (klon, klev) :: tgw 231 205 232 ! Variables li ees au calcul de hw206 ! Variables liées au calcul de hw 233 207 REAL, DIMENSION (klon) :: ptop_provis, ptop, ptop_new 234 208 REAL, DIMENSION (klon) :: sum_dth … … 237 211 INTEGER, DIMENSION (klon) :: ktop, kupper 238 212 239 ! Variables li ees au test de la forme triangulaire du profil de Delta_theta213 ! Variables liées au test de la forme triangulaire du profil de Delta_theta 240 214 REAL, DIMENSION (klon) :: sum_half_dth 241 215 REAL, DIMENSION (klon) :: dz_half … … 244 218 REAL, DIMENSION (klon, klev) :: d_deltatw, d_deltaqw 245 219 REAL, DIMENSION (klon, klev) :: d_te, d_qe 246 REAL, DIMENSION (klon) :: d_awdens, d_wdens247 220 REAL, DIMENSION (klon) :: d_sigmaw, alpha 248 221 REAL, DIMENSION (klon) :: q0_min, q1_min … … 255 228 INTEGER ::isubstep, k, i 256 229 257 REAL :: wdens_targ258 230 REAL :: sigmaw_targ 259 231 … … 301 273 REAL, DIMENSION (klon, klev) :: detr 302 274 303 REAL, DIMENSION(klon) :: sigmaw_in ! pour les prints 304 REAL, DIMENSION(klon) :: awdens_in, wdens_in ! pour les prints 275 REAL, DIMENSION(klon) :: sigmaw_in ! pour les prints 305 276 306 277 ! ------------------------------------------------------------------------- … … 313 284 ! ------------------------------------------------------------------------- 314 285 315 !! DATA wapecut, sigmad, hwmin/5., .02, 10./ 316 DATA wapecut, sigmad, hwmin/1., .02, 10./ 317 !! DATA wdensmin/1.e-12/ 318 DATA wdensmin/1.e-14/ 286 DATA wapecut, sigmad, hwmin/5., .02, 10./ 319 287 ! cc nrlmd 320 288 DATA sigmaw_max/0.4/ 321 289 DATA dens_rate/0.1/ 322 DATA rzero /5000./323 290 ! cc 324 291 ! Longueur de maille (en m) … … 326 293 327 294 ! ALON = 3.e5 328 ! alon = 1.E6 329 330 ! Provisionnal; to be suppressed when f_shear is parameterized 331 f_shear(:) = 1. ! 0. for strong shear, 1. for weak shear 295 alon = 1.E6 332 296 333 297 … … 336 300 ! coefgw : Coefficient pour les ondes de gravité 337 301 ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE) 338 ! wdens : Densité surfacique de poche froide302 ! wdens : Densité de poche froide par maille 339 303 ! ------------------------------------------------------------------------- 340 304 … … 357 321 crep_sol = 1.0 358 322 359 aa0 = 3.14*rzero*rzero360 361 tau_cv = 4000.362 363 323 ! cc nrlmd Lecture du fichier wake_param.data 364 324 stark=0.33 365 325 CALL getin_p('stark',stark) 366 cstart = stark*sqrt(2.*wapecut)367 368 326 alpk=0.25 369 327 CALL getin_p('alpk',alpk) … … 376 334 CALL getin_p('wdens_ref_l',wdens_ref(2)) !wake number per unit area ; land 377 335 !>jyg 378 iflag_wk_pop_dyn = 0379 CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed380 ! and wdens prognostic381 iflag_wk_act = 0382 CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0.383 ! 1: act(:)=1.384 ! 2: act(:)=f(Wape)385 336 coefgw=4. 386 337 CALL getin_p('coefgw',coefgw) … … 393 344 WRITE(*,*) 'wdens_ref_l=', wdens_ref(2) 394 345 !>jyg 395 WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn396 WRITE(*,*) 'iflag_wk_act',iflag_wk_act397 346 WRITE(*,*) 'coefgw=', coefgw 398 347 … … 408 357 endif 409 358 410 IF (iflag_wk_pop_dyn == 0) THEN411 359 ! Initialisation de toutes des densites a wdens_ref. 412 360 ! Les densites peuvent evoluer si les poches debordent 413 361 ! (voir au tout debut de la boucle sur les substeps) 414 !jyg< 415 !! wdens(:) = wdens_ref 416 DO i = 1,klon 417 wdens(i) = wdens_ref(znatsurf(i)+1) 418 ENDDO 419 !>jyg 420 ENDIF ! (iflag_wk_pop_dyn == 0) 362 !jyg< 363 !! wdens(:) = wdens_ref 364 DO i = 1,klon 365 wdens(i) = wdens_ref(znatsurf(i)+1) 366 ENDDO 367 !>jyg 421 368 422 369 ! print*,'stark',stark … … 468 415 d_deltatw2(:,:) = 0. 469 416 d_deltaqw2(:,:) = 0. 470 471 IF (iflag_wk_act == 0) THEN472 act(:) = 0.473 ELSEIF (iflag_wk_act == 1) THEN474 act(:) = 1.475 ENDIF476 477 417 !! DO i = 1, klon 478 418 !! sigmaw_in(i) = sigmaw(i) … … 485 425 ! print*, 'sigmaw,sigd_con', sigmaw, sigd_con 486 426 ! ENDIF 487 IF (iflag_wk_pop_dyn >=1) THEN488 DO i = 1, klon489 wdens_targ = max(wdens(i),wdensmin)490 d_wdens2(i) = wdens_targ - wdens(i)491 wdens(i) = wdens_targ492 END DO493 ELSE494 DO i = 1, klon495 d_awdens2(i) = 0.496 d_wdens2(i) = 0.497 END DO498 ENDIF ! (iflag_wk_pop_dyn >=1)499 !500 427 DO i = 1, klon 501 428 ! c sigmaw(i) = amax1(sigmaw(i),sigd_con(i)) … … 507 434 sigmaw(i) = sigmaw_targ 508 435 !>jyg 509 END DO 510 511 ! 512 IF (iflag_wk_pop_dyn >= 1) THEN 513 awdens_in(:) = awdens(:) 514 wdens_in(:) = wdens(:) 515 !! wdens(:) = wdens(:) + wgen(:)*dtime 516 !! d_wdens2(:) = wgen(:)*dtime 517 !! ELSE 518 ENDIF ! (iflag_wk_pop_dyn >= 1) 519 520 wape(:) = 0. 521 wape2(:) = 0. 522 d_sigmaw(:) = 0. 523 ktopw(:) = 0 436 sigmaw0(i) = sigmaw(i) 437 wape(i) = 0. 438 wape2(i) = 0. 439 d_sigmaw(i) = 0. 440 d_wdens2(i) = 0. 441 ktopw(i) = 0 442 END DO 524 443 ! 525 444 !<jyg … … 914 833 gwake(i) = .FALSE. 915 834 ELSE 916 hw(i) = hw0(i)917 835 cstar(i) = stark*sqrt(2.*wape(i)) 918 836 gwake(i) = .TRUE. … … 973 891 ! cc On calcule pour cela une densité wdens0 pour laquelle on 974 892 ! aurait un entrainement nul --- 975 !jyg<976 ! Dans la configuration avec wdens prognostique, il s'agit d'un cas ou977 ! les poches sont insuffisantes pour accueillir tout le flux de masse978 ! des descentes unsaturees. Nous faisons alors l'hypothese que la979 ! convection profonde cree directement de nouvelles poches, sans passer980 ! par les thermiques. La nouvelle valeur de wdens est alors imposée.981 982 893 DO i = 1, klon 983 894 ! c print *,' isubstep,wk_adv(i),cstar(i),wape(i) ', … … 988 899 wdens0 = (sigmaw(i)/(4.*3.14))* & 989 900 ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2) 990 IF (prt_level >= 10) THEN991 print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i)', &992 omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i), ph(i,1)-pupper(i)993 ENDIF994 901 IF (wdens(i)<=wdens0*1.1) THEN 995 IF (iflag_wk_pop_dyn >= 1) THEN996 d_wdens2(i) = d_wdens2(i) + wdens0 - wdens(i)997 ENDIF998 902 wdens(i) = wdens0 999 903 END IF 1000 END IF 1001 END DO 904 ! c print*,'omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i) 905 ! c $ ,ph(i,1)-pupper(i)', 906 ! c $ omg(i,kupper(i)+1),wdens0,wdens(i),cstar(i) 907 ! c $ ,ph(i,1)-pupper(i) 908 END IF 909 END DO 910 911 ! cc nrlmd 1002 912 1003 913 DO i = 1, klon 1004 914 IF (wk_adv(i)) THEN 1005 915 gfl(i) = 2.*sqrt(3.14*wdens(i)*sigmaw(i)) 1006 rad_wk(i) = sqrt(sigmaw(i)/(3.14*wdens(i)))1007 916 !jyg< 1008 917 !! sigmaw(i) = amin1(sigmaw(i), sigmaw_max) … … 1014 923 END DO 1015 924 1016 IF (iflag_wk_pop_dyn >= 1) THEN 1017 1018 IF (iflag_wk_act ==2) THEN 1019 DO i = 1, klon 1020 IF (wk_adv(i)) THEN 1021 wape1_act(i) = abs(cin(i)) 1022 wape2_act(i) = 2.*wape1_act(i) + 1. 1023 act(i) = min(1., max(0., (wape(i)-wape1_act(i)) / (wape2_act(i)-wape1_act(i)) )) 1024 ENDIF ! (wk_adv(i)) 1025 ENDDO 1026 ENDIF ! (iflag_wk_act ==2) 1027 1028 1029 DO i = 1, klon 1030 IF (wk_adv(i)) THEN 1031 !! tau_wk(i) = max(rad_wk(i)/(3.*cstar(i))*((cstar(i)/cstart)**1.5 - 1), 100.) 1032 tau_wk_inv(i) = max( (3.*cstar(i))/(rad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.) 1033 tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub) 1034 drdt(i) = (cstar(i) - wgen(i)*(sigmaw(i)/wdens(i)-aa0)/gfl(i)) / & 1035 (1 + 2*f_shear(i)*(2.*sigmaw(i)-aa0*wdens(i)) - 2.*sigmaw(i)) 1036 !! (1 - 2*sigmaw(i)*(1.-f_shear(i))) 1037 drdt_pos=max(drdt(i),0.) 1038 1039 !! d_wdens(i) = ( wgen(i)*(1.+2.*(sigmaw(i)-sigmad)) & 1040 !! - wdens(i)*tau_wk_inv_min & 1041 !! - 2.*gfl(i)*wdens(i)*Cstar(i) )*dtimesub 1042 d_awdens(i) = ( wgen(i) - (1./tau_cv)*(awdens(i) - act(i)*wdens(i)) )*dtimesub 1043 d_wdens(i) = ( wgen(i) - (wdens(i)-awdens(i))*tau_wk_inv_min - & 1044 2.*wdens(i)*gfl(i)*drdt_pos )*dtimesub 1045 d_wdens(i) = max(d_wdens(i), wdensmin-wdens(i)) 1046 1047 !! d_sigmaw(i) = ( (1.-2*f_shear(i)*sigmaw(i))*(gfl(i)*Cstar(i)+wgen(i)*sigmad/wdens(i)) & 1048 !! + 2.*f_shear(i)*wgen(i)*sigmaw(i)**2/wdens(i) & 1049 !! - sigmaw(i)*tau_wk_inv_min )*dtimesub 1050 d_sig_gen(i) = wgen(i)*aa0 1051 d_sig_death(i) = - sigmaw(i)*(1.-awdens(i)/wdens(i))*tau_wk_inv_min 1052 !! d_sig_col(i) = - 2*f_shear(i)*sigmaw(i)*gfl(i)*drdt_pos 1053 d_sig_col(i) = - 2*f_shear(i)*(2.*sigmaw(i)-wdens(i)*aa0)*gfl(i)*drdt_pos 1054 d_sigmaw(i) = ( d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + gfl(i)*cstar(i) )*dtimesub 1055 d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i)) 1056 ENDIF 1057 ENDDO 1058 1059 IF (prt_level >= 10) THEN 1060 print *,'wake, cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) ', & 1061 cstar(1), cstar(1)/cstart, rad_wk(1), tau_wk_inv(1), drdt(1) 1062 print *,'wake, wdens(1), awdens(1), act(1), d_awdens(1) ', & 1063 wdens(1), awdens(1), act(1), d_awdens(1) 1064 print *,'wake, wgen, -(wdens-awdens)*tau_wk_inv, -2.*wdens*gfl*drdt_pos, d_wdens ', & 1065 wgen(1), -(wdens(1)-awdens(1))*tau_wk_inv(1), -2.*wdens(1)*gfl(1)*drdt_pos, d_wdens(1) 1066 print *,'wake, d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) ', & 1067 d_sig_gen(1), d_sig_death(1), d_sig_col(1), d_sigmaw(1) 1068 ENDIF 1069 1070 ELSE ! (iflag_wk_pop_dyn >= 1) 1071 1072 ! cc nrlmd 1073 1074 DO i = 1, klon 1075 IF (wk_adv(i)) THEN 1076 ! cc nrlmd Introduction du taux de mortalité des poches et 1077 ! test sur sigmaw_max=0.4 1078 ! cc d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub 1079 IF (sigmaw(i)>=sigmaw_max) THEN 1080 death_rate(i) = gfl(i)*cstar(i)/sigmaw(i) 1081 ELSE 1082 death_rate(i) = 0. 1083 END IF 1084 1085 d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* & 1086 dtimesub 1087 ! $ - nat_rate(i)*sigmaw(i)*dtimesub 1088 ! c print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 1089 ! c $ death_rate(i),ktop(i),kupper(i)', 1090 ! c $ d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 1091 ! c $ death_rate(i),ktop(i),kupper(i) 1092 1093 ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub 1094 ! sigmaw(i) =min(sigmaw(i),0.99) !!!!!!!! 1095 ! wdens = wdens0/(10.*sigmaw) 1096 ! sigmaw =max(sigmaw,sigd_con) 1097 ! sigmaw =max(sigmaw,sigmad) 1098 END IF 1099 END DO 1100 1101 ENDIF ! (iflag_wk_pop_dyn >= 1) 1102 925 DO i = 1, klon 926 IF (wk_adv(i)) THEN 927 ! cc nrlmd Introduction du taux de mortalité des poches et 928 ! test sur sigmaw_max=0.4 929 ! cc d_sigmaw(i) = gfl(i)*Cstar(i)*dtimesub 930 IF (sigmaw(i)>=sigmaw_max) THEN 931 death_rate(i) = gfl(i)*cstar(i)/sigmaw(i) 932 ELSE 933 death_rate(i) = 0. 934 END IF 935 936 d_sigmaw(i) = gfl(i)*cstar(i)*dtimesub - death_rate(i)*sigmaw(i)* & 937 dtimesub 938 ! $ - nat_rate(i)*sigmaw(i)*dtimesub 939 ! c print*, 'd_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 940 ! c $ death_rate(i),ktop(i),kupper(i)', 941 ! c $ d_sigmaw(i),sigmaw(i),gfl(i),Cstar(i),wape(i), 942 ! c $ death_rate(i),ktop(i),kupper(i) 943 944 ! sigmaw(i) =sigmaw(i) + gfl(i)*Cstar(i)*dtimesub 945 ! sigmaw(i) =min(sigmaw(i),0.99) !!!!!!!! 946 ! wdens = wdens0/(10.*sigmaw) 947 ! sigmaw =max(sigmaw,sigd_con) 948 ! sigmaw =max(sigmaw,sigmad) 949 END IF 950 END DO 1103 951 1104 952 ! calcul de la difference de vitesse verticale poche - zone non perturbee … … 1375 1223 1376 1224 ! Increment state variables 1377 !jyg<1378 IF (iflag_wk_pop_dyn >= 1) THEN1379 DO k = 1, klev1380 DO i = 1, klon1381 IF (wk_adv(i) .AND. k<=kupper(i)) THEN1382 detr(i,k) = - d_sig_death(i) - d_sig_col(i)1383 entr(i,k) = d_sig_gen(i)1384 ENDIF1385 ENDDO1386 ENDDO1387 ELSE ! (iflag_wk_pop_dyn >= 1)1388 DO k = 1, klev1389 DO i = 1, klon1390 IF (wk_adv(i) .AND. k<=kupper(i)) THEN1391 detr(i, k) = 0.1392 1393 entr(i, k) = 0.1394 ENDIF1395 ENDDO1396 ENDDO1397 ENDIF ! (iflag_wk_pop_dyn >= 1)1398 1399 1400 1225 1401 1226 DO k = 1, klev … … 1439 1264 ! cc nrlmd Prise en compte du taux de mortalité 1440 1265 ! cc Définitions de entr, detr 1441 !jyg< 1442 !! detr(i, k) = 0. 1443 !! 1444 !! entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + & 1445 !! sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1446 !! 1447 entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + & 1448 sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1449 !>jyg 1450 spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i) 1451 1266 detr(i, k) = 0. 1267 1268 entr(i, k) = detr(i, k) + gfl(i)*cstar(i) + & 1269 sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1270 1271 spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i) 1452 1272 ! cc spread(i,k) = 1453 1273 ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/ … … 1564 1384 END DO 1565 1385 END DO 1566 !1567 1386 DO i = 1, klon 1568 1387 IF (wk_adv(i)) THEN 1569 1388 sigmaw(i) = sigmaw(i) + d_sigmaw(i) 1389 !jyg< 1570 1390 d_sigmaw2(i) = d_sigmaw2(i) + d_sigmaw(i) 1571 END IF1572 END DO1573 !jyg<1574 IF (iflag_wk_pop_dyn >= 1) THEN1575 DO i = 1, klon1576 IF (wk_adv(i)) THEN1577 awdens(i) = awdens(i) + d_awdens(i)1578 wdens(i) = wdens(i) + d_wdens(i)1579 d_awdens2(i) = d_awdens2(i) + d_awdens(i)1580 d_wdens2(i) = d_wdens2(i) + d_wdens(i)1581 END IF1582 END DO1583 DO i = 1, klon1584 IF (wk_adv(i)) THEN1585 wdens_targ = max(wdens(i),wdensmin)1586 d_wdens2(i) = d_wdens2(i) + wdens_targ - wdens(i)1587 wdens(i) = wdens_targ1588 !1589 wdens_targ = min( max(awdens(i),0.), wdens(i) )1590 d_awdens2(i) = d_awdens2(i) + wdens_targ - awdens(i)1591 awdens(i) = wdens_targ1592 END IF1593 END DO1594 DO i = 1, klon1595 IF (wk_adv(i)) THEN1596 sigmaw_targ = max(sigmaw(i),sigmad)1597 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i)1598 sigmaw(i) = sigmaw_targ1599 END IF1600 END DO1601 ENDIF ! (iflag_wk_pop_dyn >= 1)1602 1391 !>jyg 1392 END IF 1393 END DO 1603 1394 1604 1395 … … 2110 1901 ! ENDDO 2111 1902 ! cc 2112 2113 !jyg<2114 IF (iflag_wk_pop_dyn >= 1) THEN2115 DO i = 1, klon2116 kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &2117 .NOT. ok_qx_qw(i) .OR. (wdens(i) < 2.*wdensmin)2118 ENDDO2119 ELSE ! (iflag_wk_pop_dyn >= 1)2120 DO i = 1, klon2121 kill_wake(i) = ((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. &2122 .NOT. ok_qx_qw(i)2123 ENDDO2124 ENDIF ! (iflag_wk_pop_dyn >= 1)2125 !>jyg2126 2127 1903 DO k = 1, klev 2128 1904 DO i = 1, klon 2129 !!jyg IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2130 !!jyg .NOT. ok_qx_qw(i)) THEN 2131 IF (kill_wake(i)) THEN 1905 1906 ! cc nrlmd On maintient désormais constant sigmaw en régime 1907 ! permanent 1908 ! cc IF ((sigmaw(i).GT.sigmaw_max).or. 1909 IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. & 1910 .NOT. ok_qx_qw(i)) THEN 2132 1911 ! cc 2133 1912 dtls(i, k) = 0. … … 2137 1916 d_deltatw2(i,k) = -deltatw0(i,k) 2138 1917 d_deltaqw2(i,k) = -deltaqw0(i,k) 2139 END IF ! (kill_wake(i))2140 END DO 2141 END DO 2142 2143 DO i = 1, klon2144 !!jyg IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=wapecut)) .OR. (ktopw(i)<=2) .OR. & 2145 !!jyg .NOT. ok_qx_qw(i)) THEN 2146 IF (kill_wake(i)) THEN1918 END IF 1919 END DO 1920 END DO 1921 1922 ! cc nrlmd On maintient désormais constant sigmaw en régime permanent 1923 DO i = 1, klon 1924 IF (((wape(i)>=wape2(i)) .AND. (wape2(i)<=1.0)) .OR. (ktopw(i)<=2) .OR. & 1925 .NOT. ok_qx_qw(i)) THEN 2147 1926 ktopw(i) = 0 2148 1927 wape(i) = 0. 2149 1928 cstar(i) = 0. 2150 !!jyg Outside subroutine "Wake" hw , wdensand sigmaw are zero when there are no wakes1929 !!jyg Outside subroutine "Wake" hw and sigmaw are zero when there are no wakes 2151 1930 !! hw(i) = hwmin !jyg 2152 1931 !! sigmaw(i) = sigmad !jyg 2153 1932 hw(i) = 0. !jyg 1933 sigmaw(i) = 0. !jyg 2154 1934 fip(i) = 0. 2155 !! sigmaw(i) = 0. !jyg 2156 sigmaw_targ = 0. 2157 d_sigmaw2(i) = d_sigmaw2(i) + sigmaw_targ - sigmaw(i) 2158 sigmaw(i) = sigmaw_targ 2159 IF (iflag_wk_pop_dyn >= 1) THEN 2160 !! awdens(i) = 0. 2161 !! wdens(i) = 0. 2162 wdens_targ = 0. 2163 d_wdens2(i) = wdens_targ - wdens(i) 2164 wdens(i) = wdens_targ 2165 wdens_targ = 0. 2166 d_awdens2(i) = wdens_targ - awdens(i) 2167 awdens(i) = wdens_targ 2168 ENDIF ! (iflag_wk_pop_dyn >= 1) 2169 ELSE ! (kill_wake(i)) 1935 ELSE 2170 1936 wape(i) = wape2(i) 2171 1937 cstar(i) = cstar2(i) 2172 END IF ! (kill_wake(i))1938 END IF 2173 1939 ! c print*,'wape wape2 ktopw OK_qx_qw =', 2174 1940 ! c $ wape(i),wape2(i),ktopw(i),OK_qx_qw(i) … … 2206 1972 DO i = 1, klon 2207 1973 d_sigmaw2(i) = d_sigmaw2(i)/dtime 2208 d_awdens2(i) = d_awdens2(i)/dtime2209 1974 d_wdens2(i) = d_wdens2(i)/dtime 2210 1975 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.