Changeset 3411 for LMDZ6/branches/DYNAMICO-conv/libf/phylmd/physiq_mod.F90
- Timestamp:
- Nov 5, 2018, 3:24:59 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/trunk removed
- Property svn:mergeinfo changed
-
LMDZ6/branches/DYNAMICO-conv/libf/phylmd/physiq_mod.F90
r3356 r3411 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, & 65 67 d_ts, & 66 68 ! … … 125 127 slab_wfbils, tpot, tpote, & 126 128 ue, uq, ve, vq, zxffonte, & 127 uwat, vwat, &128 129 zxfqcalving, zxfluxlat, & 129 130 zxrunofflic, & … … 134 135 zxfluxlat_x, zxfluxlat_w, & 135 136 ! 136 d _t_vdf_x, d_t_vdf_w, &137 d _q_vdf_x, d_q_vdf_w, &137 dtvdf_x, dtvdf_w, & 138 dqvdf_x, dqvdf_w, & 138 139 pbl_tke_input, & 139 140 t_therm, q_therm, u_therm, v_therm, & … … 143 144 ! 144 145 wake_k, & 145 al p_wake, &146 ale_wake, alp_wake, & 146 147 wake_h, wake_omg, & 147 148 ! tendencies of delta T and delta q: … … 152 153 d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection 153 154 ! tendencies of wake fractional area and wake number per unit area: 154 d_s_wk, d_dens_ a_wk, d_dens_wk, &! due to wakes155 !!! d_s_vdf, d_dens_ a_vdf, d_dens_vdf, &! due to vertical diffusion156 !!! d_s_the, d_dens_ a_the, d_dens_the, &! due to thermals155 d_s_wk, d_dens_wk, & ! due to wakes 156 !!! d_s_vdf, d_dens_vdf, & ! due to vertical diffusion 157 !!! d_s_the, d_dens_the, & ! due to thermals 157 158 ! 158 ptconv, ratqsc,&159 ptconv, & 159 160 wbeff, convoccur, zmax_th, & 160 161 sens, flwp, fiwp, & 161 al p_bl_conv,alp_bl_det, &162 ale_bl_stat,alp_bl_conv,alp_bl_det, & 162 163 alp_bl_fluct_m,alp_bl_fluct_tke, & 163 164 alp_bl_stat, n2, s2, & 164 165 proba_notrig, random_notrig, & 165 cv_gen, & 166 ! 167 dnwd0, & 168 omega, & 166 ! 167 dnwd, dnwd0, & 168 upwd, omega, & 169 169 epmax_diag, & 170 171 ! Deep convective variables used in phytrac172 pmflxr, pmflxs, &173 wdtrainA, wdtrainM, &174 upwd, dnwd, &175 170 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 187 171 cldemi, & 188 172 cldfra, cldtau, fiwc, & … … 197 181 fsolsw, wfbils, wfbilo, & 198 182 wfevap, wfrain, wfsnow, & 199 prfl, psfl, fraca, Vprecip, & 183 pmflxr, pmflxs, prfl, & 184 psfl, fraca, Vprecip, & 200 185 zw2, & 201 186 … … 207 192 qwriteSTD, twriteSTD, rhwriteSTD, & !pour calcul_STDlev.h 208 193 194 wdtrainA, wdtrainM, & 209 195 beta_prec, & 210 196 rneb, & … … 347 333 INTEGER igout 348 334 !====================================================================== 349 ! Clef iflag_cycle_diurnecontrolant l'activation du cycle diurne:335 ! Clef controlant l'activation du cycle diurne: 350 336 ! en attente du codage des cles par Fred 351 ! iflag_cycle_diurne est initialise par conf_phys et se trouve352 ! dans clesphys.h (IM)337 INTEGER iflag_cycle_diurne 338 PARAMETER (iflag_cycle_diurne=1) 353 339 !====================================================================== 354 340 ! Modele thermique du sol, a activer pour le cycle diurne: … … 460 446 REAL dtadd(klon,klev) 461 447 448 ! Variables pour le transport convectif 449 real da(klon,klev),phi(klon,klev,klev),mp(klon,klev) 450 real wght_cvfd(klon,klev) 462 451 #ifndef CPP_XIOS 463 452 REAL, SAVE :: missing_val=nf90_fill_real 464 453 #endif 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 <<< 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 <<< 477 462 !IM definition dynamique o_trac dans phys_output_open 478 463 ! type(ctrl_out) :: o_trac(nqtot) … … 549 534 INTEGER k_upper_cv 550 535 !------------------------------------------------------------------ 551 ! Compteur de l'occurence de cvpas=1552 INTEGER Ncvpaseq1553 SAVE Ncvpaseq1554 !$OMP THREADPRIVATE(Ncvpaseq1)555 536 ! 556 537 !========================================================================== … … 568 549 ! variables supplementaires de concvl 569 550 REAL Tconv(klon,klev) 570 !! variable moved to phys_local_var_mod 571 !! REAL sij(klon,klev,klev) 551 REAL sij(klon,klev,klev) 572 552 !! ! 573 553 !! ! variables pour tester la conservation de l'energie dans concvl … … 644 624 REAL, SAVE :: alp_offset 645 625 !$OMP THREADPRIVATE(alp_offset) 646 REAL, SAVE :: dtcon_multistep_max=1.e6647 !$OMP THREADPRIVATE(dtcon_multistep_max)648 REAL, SAVE :: dqcon_multistep_max=1.e6649 !$OMP THREADPRIVATE(dqcon_multistep_max)650 651 626 652 627 ! … … 899 874 INTEGER :: flag_inhib_tend = 0 ! 0 is the default value 900 875 !! INTEGER :: flag_inhib_tend = 2 901 !902 ! Logical switch to a bug : reseting to 0 convective variables at the903 ! 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 active908 ! even when there are no wakes.909 LOGICAL, SAVE :: ok_bug_split_th = .TRUE.910 !$OMP THREADPRIVATE(ok_bug_split_th)911 876 912 877 ! … … 921 886 INTEGER kcbot(klon), kctop(klon), kdtop(klon) 922 887 ! 888 REAL ratqsc(klon,klev) 923 889 real ratqsbas,ratqshaut,tau_ratqs 924 890 save ratqsbas,ratqshaut,tau_ratqs … … 1145 1111 REAL, dimension(klon, klev) :: cldfrarad ! fraction nuageuse 1146 1112 1147 !lwoff=y : offset LW CRE for radiation code and other schemes1148 REAL, SAVE :: betalwoff1149 !OMP THREADPRIVATE(betalwoff)1150 !1151 1113 INTEGER :: nbtr_tmp ! Number of tracer inside concvl 1152 1114 REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac … … 1163 1125 logical, parameter :: mass_fixer=.false. 1164 1126 real qql1(klon),qql2(klon),corrqql 1165 1166 REAL pi1167 1168 pi = 4. * ATAN(1.)1169 1127 1170 1128 ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter" … … 1246 1204 ENDIF 1247 1205 1248 Ncvpaseq1 = 01249 1206 dnwd0=0.0 1250 1207 ftd=0.0 … … 1254 1211 pbase=0 1255 1212 !IM 180608 1213 1256 1214 1257 1215 itau_con=0 … … 1279 1237 IF (debut) THEN 1280 1238 CALL suphel ! initialiser constantes et parametres phys. 1281 ! tau_gl : constante de rappel de la temperature a la surface de la glace - en1282 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 - en1285 ! secondes1286 tau_gl=86400.*tau_gl1287 print*,'debut physiq_mod tau_gl=',tau_gl1288 1239 CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond) 1289 1240 CALL getin_p('random_notrig_max',random_notrig_max) … … 1294 1245 ! 2 => convective adjustment and state variables are changed 1295 1246 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)1298 1247 CALL getin_p('oliqmax',oliqmax) 1299 1248 CALL getin_p('oicemax',oicemax) … … 1305 1254 ! in rrtm/suphec.F90 (and rvtmp2 is set to 0). 1306 1255 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)1309 1256 fl_ebil = 0 ! by default, conservation diagnostics are desactivated 1310 1257 CALL getin_p('fl_ebil',fl_ebil) … … 1381 1328 print*,'iflag_coupl,iflag_clos,iflag_wake', & 1382 1329 iflag_coupl,iflag_clos,iflag_wake 1383 print*,'iflag_ cycle_diurne', iflag_cycle_diurne1330 print*,'iflag_CYCLE_DIURNE', iflag_cycle_diurne 1384 1331 ! 1385 1332 IF (iflag_con.EQ.2.AND.iflag_cld_th.GT.-1) THEN … … 1432 1379 print *,'physiq, nbapp_cv, nbapp_wk ',nbapp_cv,nbapp_wk 1433 1380 IF (MOD(NINT(86400./phys_tstep),nbapp_cv).EQ.0) THEN 1434 cvpas_0 = NINT( 86400./phys_tstep)/nbapp_cv 1435 cvpas = cvpas_0 1381 cvpas = NINT( 86400./phys_tstep)/nbapp_cv 1436 1382 print *,'physiq, cvpas ',cvpas 1437 1383 ELSE … … 1564 1510 !jyg< 1565 1511 IF (klon_glo==1) THEN 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) 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 1577 1519 ELSE 1578 1520 pbl_tke(:,:,is_ave) = 0. !ym missing init : maybe must be initialized in the same way that for klon_glo==1 ?? … … 1744 1686 1745 1687 #ifdef CPP_XIOS 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 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. 1754 1711 #endif 1755 1712 … … 1867 1824 WRITE(*,*)'lat2_beta=',lat2_beta 1868 1825 WRITE(*,*)'mskocean_beta=',mskocean_beta 1869 1870 !lwoff=y : offset LW CRE for radiation code and other schemes1871 !lwoff=y : betalwoff=1.1872 betalwoff=0.1873 IF (ok_lwoff) THEN1874 betalwoff=1.1875 ENDIF1876 WRITE(*,*)'ok_lwoff=',ok_lwoff1877 !1878 !lwoff=y to begin only sollw and sollwdown are set up to CS values1879 sollw = sollw + betalwoff * (sollw0 - sollw)1880 sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - &1881 sollwdown(:))1882 1826 ENDIF 1883 1827 ! … … 1946 1890 ENDDO 1947 1891 ENDDO 1892 da(:,:)=0. 1893 mp(:,:)=0. 1894 phi(:,:,:)=0. 1895 ! RomP >>> 1896 phi2(:,:,:)=0. 1948 1897 beta_prec_fisrt(:,:)=0. 1949 1898 beta_prec(:,:)=0. 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 1899 epmlmMm(:,:,:)=0. 1900 eplaMm(:,:)=0. 1901 d1a(:,:)=0. 1902 dam(:,:)=0. 1903 pmflxr=0. 1904 pmflxs=0. 1905 ! RomP <<< 1967 1906 1968 1907 ! … … 2141 2080 IF(adjust_tropopause) THEN 2142 2081 CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz), & 2143 ro3i, 'C', press_cen_climoz, pplay, wo, paprs(:,1), &2144 time_climoz , longitude_deg, latitude_deg,&2082 ro3i, press_edg_climoz, paprs, wo, time_climoz, & 2083 longitude_deg, latitude_deg, press_cen_climoz, & 2145 2084 dyn_tropopause(t_seri, ztsol, paprs, pplay, rot)) 2146 2085 ELSE 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 ) 2086 CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz), & 2087 ro3i, press_edg_climoz, paprs, wo, time_climoz) 2150 2088 END IF 2151 2089 ! Convert from mole fraction of ozone to column density of ozone in a … … 2259 2197 END SELECT 2260 2198 ENDIF 2261 sza_o = ACOS (rmu0) *180./pi2262 2199 2263 2200 IF (mydebug) THEN … … 2297 2234 !!jyg IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,2) .eq. 1) THEN 2298 2235 IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,10) .ge. 1) THEN 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) 2236 print *,'debut du splitting de la PBL' 2302 2237 ENDIF 2303 2238 ! !! … … 2311 2246 gustiness(1:klon)=0 2312 2247 ELSE IF (iflag_gusts==1) THEN 2313 gustiness(1:klon)=f_gust_bl*ale_bl(1:klon)+f_gust_wk*ale_wake(1:klon)2314 ELSE IF (iflag_gusts==2) THEN2315 gustiness(1:klon)=f_gust_bl*ale_bl_stat(1:klon)+f_gust_wk*ale_wake(1:klon)2248 do i = 1, klon 2249 gustiness(i)=f_gust_bl*ale_bl(i)+f_gust_wk*ale_wake(i) 2250 enddo 2316 2251 ! ELSE IF (iflag_gusts==2) THEN 2317 2252 ! do i = 1, klon … … 2388 2323 d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:) 2389 2324 CALL add_wake_tend & 2390 (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, ddens0,wkoccur1, 'vdf', abortphy)2325 (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy) 2391 2326 ELSE 2392 2327 d_deltat_vdf(:,:) = 0. … … 2530 2465 ! Appel de la convection tous les "cvpas" 2531 2466 ! 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 ! 2467 IF (MOD(itapcv,cvpas).EQ.0) THEN 2468 2561 2469 IF (iflag_con.EQ.1) THEN 2562 2470 abort_message ='reactiver le call conlmd dans physiq.F' … … 2631 2539 IF (iflag_adjwk == 2) THEN 2632 2540 CALL add_wake_tend & 2633 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0,wkoccur1, 'ajs_cv', abortphy)2541 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy) 2634 2542 ENDIF ! (iflag_adjwk == 2) 2635 2543 ENDIF ! (iflag_adjwk >= 1) … … 2660 2568 ! Calculate the upmost level of deep convection loops: k_upper_cv 2661 2569 ! (near 22 km) 2570 izero = klon/2+1/klon 2662 2571 k_upper_cv = klev 2663 !izero = klon/2+1/klon2664 !DO k = klev,1,-12665 ! IF (pphi(izero,k) > 22.e4) k_upper_cv = k2666 !ENDDO2667 ! FH : nouveau calcul base sur un profil global sans quoi2668 ! le modele etait sensible au decoupage de domaines2669 2572 DO k = klev,1,-1 2670 IF ( -7*log(presnivs(k)/presnivs(1)) > 25.) k_upper_cv = k2573 IF (pphi(izero,k) > 22.e4) k_upper_cv = k 2671 2574 ENDDO 2672 2575 IF (prt_level .ge. 5) THEN … … 2712 2615 clwcon0=qcondc 2713 2616 pmfu(:,:)=upwd(:,:)+dnwd(:,:) 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 ! 2617 2746 2618 DO i = 1, klon 2747 IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+ cvpas2619 IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1 2748 2620 ENDDO 2749 2621 ! … … 2853 2725 proba_notrig(:) = 1. 2854 2726 itapcv = 0 2855 ENDIF ! (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itapcv,cvpas_0).EQ.0)2727 ENDIF ! (MOD(itapcv,cvpas).EQ.0) 2856 2728 ! 2857 2729 itapcv = itapcv+1 2858 !2859 ! Compter les steps ou cvpas=12860 IF (cvpas == 1) THEN2861 Ncvpaseq1 = Ncvpaseq1+12862 ENDIF2863 IF (mod(itap,1000) == 0) THEN2864 print *,' physiq, nombre de steps ou cvpas = 1 : ', Ncvpaseq12865 ENDIF2866 2730 2867 2731 !!!jyg Appel diagnostique a add_phys_tend pour tester la conservation de … … 2985 2849 t_seri, q_seri, omega, & 2986 2850 dt_dwn, dq_dwn, M_dwn, M_up, & 2987 dt_a, dq_a, cv_gen,&2988 sigd, cin,&2989 wake_deltat, wake_deltaq, wake_s, awake_dens,wake_dens, &2851 dt_a, dq_a, & 2852 sigd, & 2853 wake_deltat, wake_deltaq, wake_s, wake_dens, & 2990 2854 wake_dth, wake_h, & 2991 2855 !! wake_pe, wake_fip, wake_gfl, & … … 2997 2861 wake_omg, wake_dp_deltomg, & 2998 2862 wake_spread, wake_Cstar, d_deltat_wk_gw, & 2999 d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_ a_wk, d_dens_wk)2863 d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk) 3000 2864 ! 3001 2865 !jyg Reinitialize itapwk when wakes have been called … … 3016 2880 3017 2881 CALL add_wake_tend & 3018 (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_ a_wk, d_dens_wk, wake_k, &2882 (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, & 3019 2883 'wake', abortphy) 3020 2884 call prt_enerbil('wake',itap) 3021 2885 ENDIF ! (iflag_wake_tend .GT. 0.) 3022 !3023 IF (prt_level .GE. 10) THEN3024 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 ENDIF3028 2886 3029 2887 IF (iflag_alp_wk_cond .GT. 0.) THEN … … 3153 3011 ENDDO 3154 3012 ! 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 3013 CALL add_wake_tend & 3014 (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy) 3162 3015 call prt_enerbil('the',itap) 3163 3016 ! … … 3173 3026 ale_bl_trig, ale_bl_stat, ale_bl, & 3174 3027 alp_bl, alp_bl_stat, & 3175 proba_notrig, random_notrig , cv_gen)3028 proba_notrig, random_notrig) 3176 3029 !>jyg 3177 3030 … … 3635 3488 tausum_aero, drytausum_aero, tau3d_aero) 3636 3489 #endif 3637 3638 IF (flag_aerosol .EQ. 7) THEN3639 CALL MACv2SP(pphis,pplay,paprs,longitude_deg,latitude_deg, &3640 tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)3641 ENDIF3642 3643 3490 ! 3644 3491 ELSE IF (NSW.EQ.2) THEN … … 3695 3542 ! 3696 3543 !--WMO criterion to determine tropopause 3697 CALL stratosphere_mask(missing_val, pphis,t_seri, pplay, latitude_deg)3544 CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg) 3698 3545 ! 3699 3546 !--STRAT AEROSOL … … 3735 3582 #ifdef CPP_StratAer 3736 3583 !--compute stratospheric mask 3737 CALL stratosphere_mask(missing_val, pphis,t_seri, pplay, latitude_deg)3584 CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg) 3738 3585 !--interactive strat aerosols 3739 3586 CALL calcaerosolstrato_rrtm(pplay,t_seri,paprs,debut) … … 3765 3612 #endif 3766 3613 ENDIF 3767 CALL newmicro ( flag_aerosol,ok_cdnc, bl95_b0, bl95_b1, &3614 CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, & 3768 3615 paprs, pplay, t_seri, cldliq, cldfra, & 3769 3616 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & … … 3795 3642 ! global 3796 3643 ! 3797 !IM 251017 begin3798 ! print*,'physiq betaCRF global zdtime=',zdtime3799 !IM 251017 end3800 3644 DO k=1, klev 3801 3645 DO i=1, klon … … 3912 3756 print *,' ->radlwsw, number 1 ' 3913 3757 ENDIF 3914 3915 3758 ! 3916 3759 CALL radlwsw & … … 3929 3772 tau_aero_lw_rrtm, & 3930 3773 cldtaupirad,new_aod, & 3931 ! zqsat, flwcrad, fiwcrad, &3932 3774 zqsat, flwc, fiwc, & 3933 3775 ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, & … … 3936 3778 sollwdown, & 3937 3779 topsw0,toplw0,solsw0,sollw0, & 3938 lwdn c0, lwdn0, lwdn, lwupc0, lwup0, lwup, &3939 swdn c0, swdn0, swdn, swupc0, swup0, swup, &3780 lwdn0, lwdn, lwup0, lwup, & 3781 swdn0, swdn, swup0, swup, & 3940 3782 topswad_aero, solswad_aero, & 3941 3783 topswai_aero, solswai_aero, & … … 3952 3794 ZSWFT0_i, ZFSDN0, ZFSUP0) 3953 3795 3954 !lwoff=y, betalwoff=1. : offset LW CRE for radiation code and other3955 !schemes3956 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 3964 3796 #ifndef CPP_XIOS 3965 3797 !--OB 30/05/2016 modified 21/10/2016 … … 3968 3800 !--this is necessary to get the right swaero at first step 3969 3801 !--but only in the case of no XIOS as XIOS is covered elsewhere 3970 IF (debut) swaerofree_diag = .FALSE.3971 3802 IF (debut) swaero_diag = .FALSE. 3972 3803 IF (debut) dryaod_diag = .FALSE. … … 3974 3805 !--as for swaero_diag, see above 3975 3806 IF (debut) ok_4xCO2atm = .FALSE. 3976 3807 #endif 3977 3808 ! 3978 3809 !IM 2eme calcul radiatif pour le cas perturbe ou au moins un … … 3985 3816 RCFC11_per.NE.RCFC11_act.OR. & 3986 3817 RCFC12_per.NE.RCFC12_act) ok_4xCO2atm =.TRUE. 3987 #endif3988 3818 ! 3989 3819 IF (ok_4xCO2atm) THEN … … 4014 3844 tau_aero_lw_rrtm, & 4015 3845 cldtaupi,new_aod, & 4016 ! zqsat, flwcrad, fiwcrad, &4017 3846 zqsat, flwc, fiwc, & 4018 3847 ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, & … … 4021 3850 sollwdownp, & 4022 3851 topsw0p,toplw0p,solsw0p,sollw0p, & 4023 lwdn c0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp, &4024 swdn c0p, swdn0p, swdnp, swupc0p, swup0p, swupp, &3852 lwdn0p, lwdnp, lwup0p, lwupp, & 3853 swdn0p, swdnp, swup0p, swupp, & 4025 3854 topswad_aerop, solswad_aerop, & 4026 3855 topswai_aerop, solswai_aerop, & … … 4036 3865 ZLWFT0_i, ZFLDN0, ZFLUP0, & 4037 3866 ZSWFT0_i, ZFSDN0, ZFSUP0) 4038 endif !ok_4xCO2atm 3867 endif 3868 ! 4039 3869 ENDIF ! aerosol_couple 4040 3870 itaprad = 0 … … 4427 4257 4428 4258 4429 CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,p ctsrf,pbl_tke)4259 CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,pbl_tke) 4430 4260 4431 4261 … … 4582 4412 ! 4583 4413 CALL transp (paprs,zxtsol, & 4584 t_seri, q_seri, ql_seri, qs_seri,u_seri, v_seri, zphi, &4585 ve, vq, ue, uq , vwat, uwat)4414 t_seri, q_seri, u_seri, v_seri, zphi, & 4415 ve, vq, ue, uq) 4586 4416 ! 4587 4417 !IM global posePB BEG … … 4879 4709 #endif 4880 4710 4881 ! On remet des variables a .false. apres un premier appel4882 if (debut) then4883 #ifdef CPP_XIOS4884 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_4xCO2atm4889 4890 IF (is_master) then4891 !--setting up swaero_diag to TRUE in XIOS case4892 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 omitted4898 !!! 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 case4902 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 case4909 DO naero = 1, naero_tot-14910 IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE.4911 ENDDO4912 !4913 !--setting up ok_4xCO2atm to TRUE in XIOS case4914 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 endif4922 !$OMP BARRIER4923 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_4xCO2atm4928 #endif4929 endif4930 4711 4931 4712 !==================================================================== … … 4964 4745 IF (is_omp_master) CALL xios_context_finalize 4965 4746 #endif 4966 print *,' physiq fin, nombre de steps ou cvpas = 1 : ', Ncvpaseq14967 4747 ENDIF 4968 4748
Note: See TracChangeset
for help on using the changeset viewer.