Changeset 3356 for LMDZ6/branches/DYNAMICO-conv/libf/phylmd/physiq_mod.F90
- Timestamp:
- Jun 29, 2018, 12:31:11 PM (6 years ago)
- Location:
- LMDZ6/branches/DYNAMICO-conv
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/DYNAMICO-conv
- Property svn:mergeinfo changed
-
LMDZ6/branches/DYNAMICO-conv/libf/phylmd/physiq_mod.F90
r3355 r3356 63 63 ! 64 64 d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, & 65 d_t_vdf_w,d_q_vdf_w, &66 d_t_vdf_x,d_q_vdf_x, &67 65 d_ts, & 68 66 ! … … 127 125 slab_wfbils, tpot, tpote, & 128 126 ue, uq, ve, vq, zxffonte, & 127 uwat, vwat, & 129 128 zxfqcalving, zxfluxlat, & 130 129 zxrunofflic, & … … 135 134 zxfluxlat_x, zxfluxlat_w, & 136 135 ! 137 d tvdf_x, dtvdf_w, &138 d qvdf_x, dqvdf_w, &136 d_t_vdf_x, d_t_vdf_w, & 137 d_q_vdf_x, d_q_vdf_w, & 139 138 pbl_tke_input, & 140 139 t_therm, q_therm, u_therm, v_therm, & … … 144 143 ! 145 144 wake_k, & 146 al e_wake, alp_wake, &145 alp_wake, & 147 146 wake_h, wake_omg, & 148 147 ! tendencies of delta T and delta q: … … 153 152 d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection 154 153 ! tendencies of wake fractional area and wake number per unit area: 155 d_s_wk, d_dens_ wk, &! due to wakes156 !!! d_s_vdf, d_dens_ vdf, &! due to vertical diffusion157 !!! d_s_the, d_dens_ the, &! due to thermals154 d_s_wk, d_dens_a_wk, d_dens_wk, & ! due to wakes 155 !!! d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion 156 !!! d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals 158 157 ! 159 ptconv, &158 ptconv, ratqsc, & 160 159 wbeff, convoccur, zmax_th, & 161 160 sens, flwp, fiwp, & 162 al e_bl_stat,alp_bl_conv,alp_bl_det, &161 alp_bl_conv,alp_bl_det, & 163 162 alp_bl_fluct_m,alp_bl_fluct_tke, & 164 163 alp_bl_stat, n2, s2, & 165 164 proba_notrig, random_notrig, & 166 ! 167 dnwd, dnwd0, & 168 upwd, omega, & 165 cv_gen, & 166 ! 167 dnwd0, & 168 omega, & 169 169 epmax_diag, & 170 171 ! Deep convective variables used in phytrac 172 pmflxr, pmflxs, & 173 wdtrainA, wdtrainM, & 174 upwd, dnwd, & 170 175 ep, & 176 da, mp, & 177 phi, & 178 wght_cvfd, & 179 phi2, & 180 d1a, dam, & 181 ev, & 182 elij, & 183 clw, & 184 epmlmMm, eplaMm, & 185 sij, & 186 171 187 cldemi, & 172 188 cldfra, cldtau, fiwc, & … … 181 197 fsolsw, wfbils, wfbilo, & 182 198 wfevap, wfrain, wfsnow, & 183 pmflxr, pmflxs, prfl, & 184 psfl, fraca, Vprecip, & 199 prfl, psfl, fraca, Vprecip, & 185 200 zw2, & 186 201 … … 192 207 qwriteSTD, twriteSTD, rhwriteSTD, & !pour calcul_STDlev.h 193 208 194 wdtrainA, wdtrainM, &195 209 beta_prec, & 196 210 rneb, & … … 333 347 INTEGER igout 334 348 !====================================================================== 335 ! Clef controlant l'activation du cycle diurne:349 ! Clef iflag_cycle_diurne controlant l'activation du cycle diurne: 336 350 ! en attente du codage des cles par Fred 337 INTEGER iflag_cycle_diurne338 PARAMETER (iflag_cycle_diurne=1)351 ! iflag_cycle_diurne est initialise par conf_phys et se trouve 352 ! dans clesphys.h (IM) 339 353 !====================================================================== 340 354 ! Modele thermique du sol, a activer pour le cycle diurne: … … 446 460 REAL dtadd(klon,klev) 447 461 448 ! Variables pour le transport convectif449 real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)450 real wght_cvfd(klon,klev)451 462 #ifndef CPP_XIOS 452 463 REAL, SAVE :: missing_val=nf90_fill_real 453 464 #endif 454 ! Variables pour le lessivage convectif 455 ! RomP >>> 456 real phi2(klon,klev,klev) 457 real d1a(klon,klev),dam(klon,klev) 458 real ev(klon,klev) 459 real clw(klon,klev),elij(klon,klev,klev) 460 real epmlmMm(klon,klev,klev),eplaMm(klon,klev) 461 ! RomP <<< 465 !! Variables moved to phys_local_var_mod 466 !! ! Variables pour le transport convectif 467 !! real da(klon,klev),phi(klon,klev,klev),mp(klon,klev) 468 !! real wght_cvfd(klon,klev) 469 !! ! Variables pour le lessivage convectif 470 !! ! RomP >>> 471 !! real phi2(klon,klev,klev) 472 !! real d1a(klon,klev),dam(klon,klev) 473 !! real ev(klon,klev) 474 !! real clw(klon,klev),elij(klon,klev,klev) 475 !! real epmlmMm(klon,klev,klev),eplaMm(klon,klev) 476 !! ! RomP <<< 462 477 !IM definition dynamique o_trac dans phys_output_open 463 478 ! type(ctrl_out) :: o_trac(nqtot) … … 534 549 INTEGER k_upper_cv 535 550 !------------------------------------------------------------------ 551 ! Compteur de l'occurence de cvpas=1 552 INTEGER Ncvpaseq1 553 SAVE Ncvpaseq1 554 !$OMP THREADPRIVATE(Ncvpaseq1) 536 555 ! 537 556 !========================================================================== … … 549 568 ! variables supplementaires de concvl 550 569 REAL Tconv(klon,klev) 551 REAL sij(klon,klev,klev) 570 !! variable moved to phys_local_var_mod 571 !! REAL sij(klon,klev,klev) 552 572 !! ! 553 573 !! ! variables pour tester la conservation de l'energie dans concvl … … 624 644 REAL, SAVE :: alp_offset 625 645 !$OMP THREADPRIVATE(alp_offset) 646 REAL, SAVE :: dtcon_multistep_max=1.e6 647 !$OMP THREADPRIVATE(dtcon_multistep_max) 648 REAL, SAVE :: dqcon_multistep_max=1.e6 649 !$OMP THREADPRIVATE(dqcon_multistep_max) 650 626 651 627 652 ! … … 874 899 INTEGER :: flag_inhib_tend = 0 ! 0 is the default value 875 900 !! INTEGER :: flag_inhib_tend = 2 901 ! 902 ! Logical switch to a bug : reseting to 0 convective variables at the 903 ! begining of physiq. 904 LOGICAL, SAVE :: ok_bug_cv_trac = .TRUE. 905 !$OMP THREADPRIVATE(ok_bug_cv_trac) 906 ! 907 ! Logical switch to a bug : changing wake_deltat when thermals are active 908 ! even when there are no wakes. 909 LOGICAL, SAVE :: ok_bug_split_th = .TRUE. 910 !$OMP THREADPRIVATE(ok_bug_split_th) 876 911 877 912 ! … … 886 921 INTEGER kcbot(klon), kctop(klon), kdtop(klon) 887 922 ! 888 REAL ratqsc(klon,klev)889 923 real ratqsbas,ratqshaut,tau_ratqs 890 924 save ratqsbas,ratqshaut,tau_ratqs … … 1111 1145 REAL, dimension(klon, klev) :: cldfrarad ! fraction nuageuse 1112 1146 1147 !lwoff=y : offset LW CRE for radiation code and other schemes 1148 REAL, SAVE :: betalwoff 1149 !OMP THREADPRIVATE(betalwoff) 1150 ! 1113 1151 INTEGER :: nbtr_tmp ! Number of tracer inside concvl 1114 1152 REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac … … 1125 1163 logical, parameter :: mass_fixer=.false. 1126 1164 real qql1(klon),qql2(klon),corrqql 1165 1166 REAL pi 1167 1168 pi = 4. * ATAN(1.) 1127 1169 1128 1170 ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter" … … 1204 1246 ENDIF 1205 1247 1248 Ncvpaseq1 = 0 1206 1249 dnwd0=0.0 1207 1250 ftd=0.0 … … 1211 1254 pbase=0 1212 1255 !IM 180608 1213 1214 1256 1215 1257 itau_con=0 … … 1237 1279 IF (debut) THEN 1238 1280 CALL suphel ! initialiser constantes et parametres phys. 1281 ! tau_gl : constante de rappel de la temperature a la surface de la glace - en 1282 tau_gl=5. 1283 CALL getin_p('tau_gl', tau_gl) 1284 ! tau_gl : constante de rappel de la temperature a la surface de la glace - en 1285 ! secondes 1286 tau_gl=86400.*tau_gl 1287 print*,'debut physiq_mod tau_gl=',tau_gl 1239 1288 CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond) 1240 1289 CALL getin_p('random_notrig_max',random_notrig_max) … … 1245 1294 ! 2 => convective adjustment and state variables are changed 1246 1295 CALL getin_p('iflag_adjwk',iflag_adjwk) 1296 CALL getin_p('dtcon_multistep_max',dtcon_multistep_max) 1297 CALL getin_p('dqcon_multistep_max',dqcon_multistep_max) 1247 1298 CALL getin_p('oliqmax',oliqmax) 1248 1299 CALL getin_p('oicemax',oicemax) … … 1254 1305 ! in rrtm/suphec.F90 (and rvtmp2 is set to 0). 1255 1306 CALL getin_p('ok_bad_ecmwf_thermo',ok_bad_ecmwf_thermo) 1307 CALL getin_p('ok_bug_cv_trac',ok_bug_cv_trac) 1308 CALL getin_p('ok_bug_split_th',ok_bug_split_th) 1256 1309 fl_ebil = 0 ! by default, conservation diagnostics are desactivated 1257 1310 CALL getin_p('fl_ebil',fl_ebil) … … 1328 1381 print*,'iflag_coupl,iflag_clos,iflag_wake', & 1329 1382 iflag_coupl,iflag_clos,iflag_wake 1330 print*,'iflag_ CYCLE_DIURNE', iflag_cycle_diurne1383 print*,'iflag_cycle_diurne', iflag_cycle_diurne 1331 1384 ! 1332 1385 IF (iflag_con.EQ.2.AND.iflag_cld_th.GT.-1) THEN … … 1379 1432 print *,'physiq, nbapp_cv, nbapp_wk ',nbapp_cv,nbapp_wk 1380 1433 IF (MOD(NINT(86400./phys_tstep),nbapp_cv).EQ.0) THEN 1381 cvpas = NINT( 86400./phys_tstep)/nbapp_cv 1434 cvpas_0 = NINT( 86400./phys_tstep)/nbapp_cv 1435 cvpas = cvpas_0 1382 1436 print *,'physiq, cvpas ',cvpas 1383 1437 ELSE … … 1510 1564 !jyg< 1511 1565 IF (klon_glo==1) THEN 1512 pbl_tke(:,:,is_ave) = 0. 1513 DO nsrf=1,nbsrf 1514 DO k = 1,klev+1 1515 pbl_tke(:,k,is_ave) = pbl_tke(:,k,is_ave) & 1516 +pctsrf(:,nsrf)*pbl_tke(:,k,nsrf) 1517 ENDDO 1518 ENDDO 1566 IF (iflag_pbl > 1) THEN 1567 pbl_tke(:,:,is_ave) = 0. 1568 DO nsrf=1,nbsrf 1569 DO k = 1,klev+1 1570 pbl_tke(:,k,is_ave) = pbl_tke(:,k,is_ave) & 1571 +pctsrf(:,nsrf)*pbl_tke(:,k,nsrf) 1572 ENDDO 1573 ENDDO 1574 ELSE ! (iflag_pbl > 1) 1575 pbl_tke(:,:,:) = 0. 1576 ENDIF ! (iflag_pbl > 1) 1519 1577 ELSE 1520 1578 pbl_tke(:,:,is_ave) = 0. !ym missing init : maybe must be initialized in the same way that for klon_glo==1 ?? … … 1686 1744 1687 1745 #ifdef CPP_XIOS 1688 !--setting up swaero_diag to TRUE in XIOS case 1689 IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. & 1690 xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. & 1691 xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR. & 1692 (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. & 1693 xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0")))) & 1694 !!!--for now these fields are not in the XML files so they are omitted 1695 !!! xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) & 1696 swaero_diag=.TRUE. 1697 1698 !--setting up dryaod_diag to TRUE in XIOS case 1699 DO naero = 1, naero_tot-1 1700 IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE. 1701 ENDDO 1702 ! 1703 !--setting up ok_4xCO2atm to TRUE in XIOS case 1704 IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. & 1705 xios_field_is_active("rsutcs4co2").OR.xios_field_is_active("rlutcs4co2").OR. & 1706 xios_field_is_active("rsu4co2").OR.xios_field_is_active("rsucs4co2").OR. & 1707 xios_field_is_active("rsd4co2").OR.xios_field_is_active("rsdcs4co2").OR. & 1708 xios_field_is_active("rlu4co2").OR.xios_field_is_active("rlucs4co2").OR. & 1709 xios_field_is_active("rld4co2").OR.xios_field_is_active("rldcs4co2")) & 1710 ok_4xCO2atm=.TRUE. 1746 ! Need to put this initialisation after phyetat0 as in the coupled model the XIOS context is only 1747 ! initialised at that moment 1748 ! Get "missing_val" value from XML files (from temperature variable) 1749 !$OMP MASTER 1750 CALL xios_get_field_attr("temp",default_value=missing_val_omp) 1751 !$OMP END MASTER 1752 !$OMP BARRIER 1753 missing_val=missing_val_omp 1711 1754 #endif 1712 1755 … … 1824 1867 WRITE(*,*)'lat2_beta=',lat2_beta 1825 1868 WRITE(*,*)'mskocean_beta=',mskocean_beta 1869 1870 !lwoff=y : offset LW CRE for radiation code and other schemes 1871 !lwoff=y : betalwoff=1. 1872 betalwoff=0. 1873 IF (ok_lwoff) THEN 1874 betalwoff=1. 1875 ENDIF 1876 WRITE(*,*)'ok_lwoff=',ok_lwoff 1877 ! 1878 !lwoff=y to begin only sollw and sollwdown are set up to CS values 1879 sollw = sollw + betalwoff * (sollw0 - sollw) 1880 sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - & 1881 sollwdown(:)) 1826 1882 ENDIF 1827 1883 ! … … 1890 1946 ENDDO 1891 1947 ENDDO 1892 da(:,:)=0.1893 mp(:,:)=0.1894 phi(:,:,:)=0.1895 ! RomP >>>1896 phi2(:,:,:)=0.1897 1948 beta_prec_fisrt(:,:)=0. 1898 1949 beta_prec(:,:)=0. 1899 epmlmMm(:,:,:)=0. 1900 eplaMm(:,:)=0. 1901 d1a(:,:)=0. 1902 dam(:,:)=0. 1903 pmflxr=0. 1904 pmflxs=0. 1905 ! RomP <<< 1950 ! 1951 ! Output variables from the convective scheme should not be set to 0 1952 ! since convection is not always called at every time step. 1953 IF (ok_bug_cv_trac) THEN 1954 da(:,:)=0. 1955 mp(:,:)=0. 1956 phi(:,:,:)=0. 1957 ! RomP >>> 1958 phi2(:,:,:)=0. 1959 epmlmMm(:,:,:)=0. 1960 eplaMm(:,:)=0. 1961 d1a(:,:)=0. 1962 dam(:,:)=0. 1963 pmflxr(:,:)=0. 1964 pmflxs(:,:)=0. 1965 ! RomP <<< 1966 ENDIF 1906 1967 1907 1968 ! … … 2080 2141 IF(adjust_tropopause) THEN 2081 2142 CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz), & 2082 ro3i, press_edg_climoz, paprs, wo, time_climoz, &2083 longitude_deg, latitude_deg, press_cen_climoz,&2143 ro3i, 'C', press_cen_climoz, pplay, wo, paprs(:,1), & 2144 time_climoz , longitude_deg, latitude_deg, & 2084 2145 dyn_tropopause(t_seri, ztsol, paprs, pplay, rot)) 2085 2146 ELSE 2086 CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz), & 2087 ro3i, press_edg_climoz, paprs, wo, time_climoz) 2147 CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz), & 2148 ro3i, 'C', press_cen_climoz, pplay, wo, paprs(:,1), & 2149 time_climoz ) 2088 2150 END IF 2089 2151 ! Convert from mole fraction of ozone to column density of ozone in a … … 2197 2259 END SELECT 2198 2260 ENDIF 2261 sza_o = ACOS (rmu0) *180./pi 2199 2262 2200 2263 IF (mydebug) THEN … … 2234 2297 !!jyg IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,2) .eq. 1) THEN 2235 2298 IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,10) .ge. 1) THEN 2236 print *,'debut du splitting de la PBL' 2299 print *,'debut du splitting de la PBL, wake_s = ', wake_s(:) 2300 print *,'debut du splitting de la PBL, wake_deltat = ', wake_deltat(:,1) 2301 print *,'debut du splitting de la PBL, wake_deltaq = ', wake_deltaq(:,1) 2237 2302 ENDIF 2238 2303 ! !! … … 2246 2311 gustiness(1:klon)=0 2247 2312 ELSE IF (iflag_gusts==1) THEN 2248 do i = 1, klon2249 gustiness(i)=f_gust_bl*ale_bl(i)+f_gust_wk*ale_wake(i)2250 enddo2313 gustiness(1:klon)=f_gust_bl*ale_bl(1:klon)+f_gust_wk*ale_wake(1:klon) 2314 ELSE IF (iflag_gusts==2) THEN 2315 gustiness(1:klon)=f_gust_bl*ale_bl_stat(1:klon)+f_gust_wk*ale_wake(1:klon) 2251 2316 ! ELSE IF (iflag_gusts==2) THEN 2252 2317 ! do i = 1, klon … … 2323 2388 d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:) 2324 2389 CALL add_wake_tend & 2325 (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy)2390 (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy) 2326 2391 ELSE 2327 2392 d_deltat_vdf(:,:) = 0. … … 2465 2530 ! Appel de la convection tous les "cvpas" 2466 2531 ! 2467 IF (MOD(itapcv,cvpas).EQ.0) THEN 2468 2532 !!jyg IF (MOD(itapcv,cvpas).EQ.0) THEN 2533 !! print *,' physiq : itapcv, cvpas, itap-1, cvpas_0 ', & 2534 !! itapcv, cvpas, itap-1, cvpas_0 2535 IF (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itap-1,cvpas_0).EQ.0) THEN 2536 2537 ! 2538 ! Mettre a zero des variables de sortie (pour securite) 2539 ! 2540 pmflxr(:,:) = 0. 2541 pmflxs(:,:) = 0. 2542 wdtrainA(:,:) = 0. 2543 wdtrainM(:,:) = 0. 2544 upwd(:,:) = 0. 2545 dnwd(:,:) = 0. 2546 ep(:,:) = 0. 2547 da(:,:)=0. 2548 mp(:,:)=0. 2549 wght_cvfd(:,:)=0. 2550 phi(:,:,:)=0. 2551 phi2(:,:,:)=0. 2552 epmlmMm(:,:,:)=0. 2553 eplaMm(:,:)=0. 2554 d1a(:,:)=0. 2555 dam(:,:)=0. 2556 elij(:,:,:)=0. 2557 ev(:,:)=0. 2558 clw(:,:)=0. 2559 sij(:,:,:)=0. 2560 ! 2469 2561 IF (iflag_con.EQ.1) THEN 2470 2562 abort_message ='reactiver le call conlmd dans physiq.F' … … 2539 2631 IF (iflag_adjwk == 2) THEN 2540 2632 CALL add_wake_tend & 2541 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy)2633 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy) 2542 2634 ENDIF ! (iflag_adjwk == 2) 2543 2635 ENDIF ! (iflag_adjwk >= 1) … … 2568 2660 ! Calculate the upmost level of deep convection loops: k_upper_cv 2569 2661 ! (near 22 km) 2570 izero = klon/2+1/klon2571 2662 k_upper_cv = klev 2663 !izero = klon/2+1/klon 2664 !DO k = klev,1,-1 2665 ! IF (pphi(izero,k) > 22.e4) k_upper_cv = k 2666 !ENDDO 2667 ! FH : nouveau calcul base sur un profil global sans quoi 2668 ! le modele etait sensible au decoupage de domaines 2572 2669 DO k = klev,1,-1 2573 IF ( pphi(izero,k) > 22.e4) k_upper_cv = k2670 IF (-7*log(presnivs(k)/presnivs(1)) > 25.) k_upper_cv = k 2574 2671 ENDDO 2575 2672 IF (prt_level .ge. 5) THEN … … 2615 2712 clwcon0=qcondc 2616 2713 pmfu(:,:)=upwd(:,:)+dnwd(:,:) 2617 2714 ! 2715 !jyg< 2716 ! If convective tendencies are too large, then call convection 2717 ! every time step 2718 cvpas = cvpas_0 2719 DO k=1,k_upper_cv 2720 DO i=1,klon 2721 IF (d_t_con(i,k) > 6.721 .AND. d_t_con(i,k) < 6.722 .AND.& 2722 d_q_con(i,k) > -.0002171 .AND. d_q_con(i,k) < -.0002170) THEN 2723 dtcon_multistep_max = 3. 2724 dqcon_multistep_max = 0.02 2725 ENDIF 2726 ENDDO 2727 ENDDO 2728 ! 2729 DO k=1,k_upper_cv 2730 DO i=1,klon 2731 !! IF (abs(d_t_con(i,k)) > 0.24 .OR. & 2732 !! abs(d_q_con(i,k)) > 2.e-2) THEN 2733 IF (abs(d_t_con(i,k)) > dtcon_multistep_max .OR. & 2734 abs(d_q_con(i,k)) > dqcon_multistep_max) THEN 2735 cvpas = 1 2736 !! print *,'physiq1, i,k,d_t_con(i,k),d_q_con(i,k) ', & 2737 !! i,k,d_t_con(i,k),d_q_con(i,k) 2738 ENDIF 2739 ENDDO 2740 ENDDO 2741 !!! Ligne a ne surtout pas remettre sans avoir murement reflechi (jyg) 2742 !!! call bcast(cvpas) 2743 !!! ------------------------------------------------------------ 2744 !>jyg 2745 ! 2618 2746 DO i = 1, klon 2619 IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+ 12747 IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+cvpas 2620 2748 ENDDO 2621 2749 ! … … 2725 2853 proba_notrig(:) = 1. 2726 2854 itapcv = 0 2727 ENDIF ! (MOD(itapcv,cvpas).EQ.0 )2855 ENDIF ! (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itapcv,cvpas_0).EQ.0) 2728 2856 ! 2729 2857 itapcv = itapcv+1 2858 ! 2859 ! Compter les steps ou cvpas=1 2860 IF (cvpas == 1) THEN 2861 Ncvpaseq1 = Ncvpaseq1+1 2862 ENDIF 2863 IF (mod(itap,1000) == 0) THEN 2864 print *,' physiq, nombre de steps ou cvpas = 1 : ', Ncvpaseq1 2865 ENDIF 2730 2866 2731 2867 !!!jyg Appel diagnostique a add_phys_tend pour tester la conservation de … … 2849 2985 t_seri, q_seri, omega, & 2850 2986 dt_dwn, dq_dwn, M_dwn, M_up, & 2851 dt_a, dq_a, &2852 sigd, &2853 wake_deltat, wake_deltaq, wake_s, wake_dens, &2987 dt_a, dq_a, cv_gen, & 2988 sigd, cin, & 2989 wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens, & 2854 2990 wake_dth, wake_h, & 2855 2991 !! wake_pe, wake_fip, wake_gfl, & … … 2861 2997 wake_omg, wake_dp_deltomg, & 2862 2998 wake_spread, wake_Cstar, d_deltat_wk_gw, & 2863 d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_ wk)2999 d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk) 2864 3000 ! 2865 3001 !jyg Reinitialize itapwk when wakes have been called … … 2880 3016 2881 3017 CALL add_wake_tend & 2882 (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_ wk, wake_k, &3018 (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk, wake_k, & 2883 3019 'wake', abortphy) 2884 3020 call prt_enerbil('wake',itap) 2885 3021 ENDIF ! (iflag_wake_tend .GT. 0.) 3022 ! 3023 IF (prt_level .GE. 10) THEN 3024 print *,' physiq, after calwake, wake_s: ',wake_s(:) 3025 print *,' physiq, after calwake, wake_deltat: ',wake_deltat(:,1) 3026 print *,' physiq, after calwake, wake_deltaq: ',wake_deltaq(:,1) 3027 ENDIF 2886 3028 2887 3029 IF (iflag_alp_wk_cond .GT. 0.) THEN … … 3011 3153 ENDDO 3012 3154 ! 3013 CALL add_wake_tend & 3014 (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy) 3155 IF (ok_bug_split_th) THEN 3156 CALL add_wake_tend & 3157 (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy) 3158 ELSE 3159 CALL add_wake_tend & 3160 (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wake_k, 'the', abortphy) 3161 ENDIF 3015 3162 call prt_enerbil('the',itap) 3016 3163 ! … … 3026 3173 ale_bl_trig, ale_bl_stat, ale_bl, & 3027 3174 alp_bl, alp_bl_stat, & 3028 proba_notrig, random_notrig )3175 proba_notrig, random_notrig, cv_gen) 3029 3176 !>jyg 3030 3177 … … 3488 3635 tausum_aero, drytausum_aero, tau3d_aero) 3489 3636 #endif 3637 3638 IF (flag_aerosol .EQ. 7) THEN 3639 CALL MACv2SP(pphis,pplay,paprs,longitude_deg,latitude_deg, & 3640 tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm) 3641 ENDIF 3642 3490 3643 ! 3491 3644 ELSE IF (NSW.EQ.2) THEN … … 3542 3695 ! 3543 3696 !--WMO criterion to determine tropopause 3544 CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg)3697 CALL stratosphere_mask(missing_val, pphis, t_seri, pplay, latitude_deg) 3545 3698 ! 3546 3699 !--STRAT AEROSOL … … 3582 3735 #ifdef CPP_StratAer 3583 3736 !--compute stratospheric mask 3584 CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg)3737 CALL stratosphere_mask(missing_val, pphis, t_seri, pplay, latitude_deg) 3585 3738 !--interactive strat aerosols 3586 3739 CALL calcaerosolstrato_rrtm(pplay,t_seri,paprs,debut) … … 3612 3765 #endif 3613 3766 ENDIF 3614 CALL newmicro ( ok_cdnc, bl95_b0, bl95_b1, &3767 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 3615 3768 paprs, pplay, t_seri, cldliq, cldfra, & 3616 3769 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & … … 3642 3795 ! global 3643 3796 ! 3797 !IM 251017 begin 3798 ! print*,'physiq betaCRF global zdtime=',zdtime 3799 !IM 251017 end 3644 3800 DO k=1, klev 3645 3801 DO i=1, klon … … 3756 3912 print *,' ->radlwsw, number 1 ' 3757 3913 ENDIF 3914 3758 3915 ! 3759 3916 CALL radlwsw & … … 3772 3929 tau_aero_lw_rrtm, & 3773 3930 cldtaupirad,new_aod, & 3931 ! zqsat, flwcrad, fiwcrad, & 3774 3932 zqsat, flwc, fiwc, & 3775 3933 ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, & … … 3778 3936 sollwdown, & 3779 3937 topsw0,toplw0,solsw0,sollw0, & 3780 lwdn 0, lwdn, lwup0, lwup, &3781 swdn 0, swdn, swup0, swup, &3938 lwdnc0, lwdn0, lwdn, lwupc0, lwup0, lwup, & 3939 swdnc0, swdn0, swdn, swupc0, swup0, swup, & 3782 3940 topswad_aero, solswad_aero, & 3783 3941 topswai_aero, solswai_aero, & … … 3794 3952 ZSWFT0_i, ZFSDN0, ZFSUP0) 3795 3953 3954 !lwoff=y, betalwoff=1. : offset LW CRE for radiation code and other 3955 !schemes 3956 toplw = toplw + betalwoff * (toplw0 - toplw) 3957 sollw = sollw + betalwoff * (sollw0 - sollw) 3958 lwdn = lwdn + betalwoff * (lwdn0 - lwdn) 3959 lwup = lwup + betalwoff * (lwup0 - lwup) 3960 sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - & 3961 sollwdown(:)) 3962 cool = cool + betalwoff * (cool0 - cool) 3963 3796 3964 #ifndef CPP_XIOS 3797 3965 !--OB 30/05/2016 modified 21/10/2016 … … 3800 3968 !--this is necessary to get the right swaero at first step 3801 3969 !--but only in the case of no XIOS as XIOS is covered elsewhere 3970 IF (debut) swaerofree_diag = .FALSE. 3802 3971 IF (debut) swaero_diag = .FALSE. 3803 3972 IF (debut) dryaod_diag = .FALSE. … … 3805 3974 !--as for swaero_diag, see above 3806 3975 IF (debut) ok_4xCO2atm = .FALSE. 3807 #endif 3976 3808 3977 ! 3809 3978 !IM 2eme calcul radiatif pour le cas perturbe ou au moins un … … 3816 3985 RCFC11_per.NE.RCFC11_act.OR. & 3817 3986 RCFC12_per.NE.RCFC12_act) ok_4xCO2atm =.TRUE. 3987 #endif 3818 3988 ! 3819 3989 IF (ok_4xCO2atm) THEN … … 3844 4014 tau_aero_lw_rrtm, & 3845 4015 cldtaupi,new_aod, & 4016 ! zqsat, flwcrad, fiwcrad, & 3846 4017 zqsat, flwc, fiwc, & 3847 4018 ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, & … … 3850 4021 sollwdownp, & 3851 4022 topsw0p,toplw0p,solsw0p,sollw0p, & 3852 lwdn 0p, lwdnp, lwup0p, lwupp, &3853 swdn 0p, swdnp, swup0p, swupp, &4023 lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp, & 4024 swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp, & 3854 4025 topswad_aerop, solswad_aerop, & 3855 4026 topswai_aerop, solswai_aerop, & … … 3865 4036 ZLWFT0_i, ZFLDN0, ZFLUP0, & 3866 4037 ZSWFT0_i, ZFSDN0, ZFSUP0) 3867 endif 3868 ! 4038 endif !ok_4xCO2atm 3869 4039 ENDIF ! aerosol_couple 3870 4040 itaprad = 0 … … 4257 4427 4258 4428 4259 CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,p bl_tke)4429 CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,pctsrf,pbl_tke) 4260 4430 4261 4431 … … 4412 4582 ! 4413 4583 CALL transp (paprs,zxtsol, & 4414 t_seri, q_seri, u_seri, v_seri, zphi, &4415 ve, vq, ue, uq )4584 t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, & 4585 ve, vq, ue, uq, vwat, uwat) 4416 4586 ! 4417 4587 !IM global posePB BEG … … 4709 4879 #endif 4710 4880 4881 ! On remet des variables a .false. apres un premier appel 4882 if (debut) then 4883 #ifdef CPP_XIOS 4884 swaero_diag=.FALSE. 4885 swaerofree_diag=.FALSE. 4886 dryaod_diag=.FALSE. 4887 ok_4xCO2atm= .FALSE. 4888 ! write (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm 4889 4890 IF (is_master) then 4891 !--setting up swaero_diag to TRUE in XIOS case 4892 IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. & 4893 xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. & 4894 xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR. & 4895 (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. & 4896 xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0")))) & 4897 !!!--for now these fields are not in the XML files so they are omitted 4898 !!! xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) & 4899 swaero_diag=.TRUE. 4900 4901 !--setting up swaerofree_diag to TRUE in XIOS case 4902 IF (xios_field_is_active("SWdnSFCcleanclr").OR.xios_field_is_active("SWupSFCcleanclr").OR. & 4903 xios_field_is_active("SWupTOAcleanclr").OR.xios_field_is_active("rsucsaf").OR. & 4904 xios_field_is_active("rsdcsaf") .OR. xios_field_is_active("LWdnSFCcleanclr").OR. & 4905 xios_field_is_active("LWupTOAcleanclr")) & 4906 swaerofree_diag=.TRUE. 4907 4908 !--setting up dryaod_diag to TRUE in XIOS case 4909 DO naero = 1, naero_tot-1 4910 IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE. 4911 ENDDO 4912 ! 4913 !--setting up ok_4xCO2atm to TRUE in XIOS case 4914 IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. & 4915 xios_field_is_active("rsutcs4co2").OR.xios_field_is_active("rlutcs4co2").OR. & 4916 xios_field_is_active("rsu4co2").OR.xios_field_is_active("rsucs4co2").OR. & 4917 xios_field_is_active("rsd4co2").OR.xios_field_is_active("rsdcs4co2").OR. & 4918 xios_field_is_active("rlu4co2").OR.xios_field_is_active("rlucs4co2").OR. & 4919 xios_field_is_active("rld4co2").OR.xios_field_is_active("rldcs4co2")) & 4920 ok_4xCO2atm=.TRUE. 4921 endif 4922 !$OMP BARRIER 4923 call bcast(swaero_diag) 4924 call bcast(swaerofree_diag) 4925 call bcast(dryaod_diag) 4926 call bcast(ok_4xCO2atm) 4927 ! write (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm 4928 #endif 4929 endif 4711 4930 4712 4931 !==================================================================== … … 4745 4964 IF (is_omp_master) CALL xios_context_finalize 4746 4965 #endif 4966 print *,' physiq fin, nombre de steps ou cvpas = 1 : ', Ncvpaseq1 4747 4967 ENDIF 4748 4968
Note: See TracChangeset
for help on using the changeset viewer.