Changeset 5224 for LMDZ6/branches/Amaury_dev/libf/phylmd/physiq_mod.F90
- Timestamp:
- Sep 24, 2024, 10:47:17 AM (4 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/physiq_mod.F90
r5221 r5224 1 ! $Id$2 3 !#define IO_DEBUG4 1 MODULE physiq_mod 5 2 IMPLICIT NONE … … 70 67 USE tracinca_mod, ONLY: config_inca 71 68 USE tropopause_m, ONLY: dyn_tropopause 72 USE ice_sursat_mod, ONLY: flight_init, airplane73 69 USE lmdz_vampir 74 70 USE lmdz_writefield_phy … … 139 135 ! [Variables internes non sauvegardees de la physique] 140 136 ! Variables locales pour effectuer les appels en serie 141 t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, tr_seri, rneb_seri, & 137 t_seri,q_seri,ql_seri,qs_seri,qbs_seri, & 138 u_seri,v_seri,cf_seri,rvc_seri,tr_seri, & 142 139 rhcl, & 143 140 ! Dynamic tendencies (diagnostics) 144 d_t_dyn, d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, d_u_dyn, d_v_dyn, d_tr_dyn, d_rneb_dyn, & 141 d_t_dyn, d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, & 142 d_u_dyn, d_v_dyn,d_cf_dyn,d_rvc_dyn,d_tr_dyn, & 145 143 d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, & 146 144 ! Physic tendencies … … 314 312 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & 315 313 distcltop, temp_cltop, & 316 zqsatl, zqsats, & 317 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 314 !-- LSCP - condensation and ice supersaturation variables 315 qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, & 316 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 317 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 318 !-- LSCP - aviation and contrails variables 318 319 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 320 dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, & 321 ! 319 322 cldemi, & 320 323 cldfra, cldtau, fiwc, & … … 496 499 497 500 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 498 INTEGER, SAVE :: ivap, iliq, isol, i rneb, ibs499 !$OMP THREADPRIVATE(ivap, iliq, isol, i rneb, ibs)501 INTEGER, SAVE :: ivap, iliq, isol, ibs, icf, irvc 502 !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, irvc) 500 503 501 504 … … 1317 1320 iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 1318 1321 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1319 irneb = strIdx(tracers(:)%name, addPhase('H2O', 'r'))1320 1322 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1323 icf = strIdx(tracers(:)%name, addPhase('H2O', 'f')) 1324 irvc = strIdx(tracers(:)%name, addPhase('H2O', 'c')) 1321 1325 ! CALL init_etat0_limit_unstruct 1322 1326 ! IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1360 1364 ENDIF 1361 1365 1362 IF (ok_ice_su rsat.AND.(iflag_ice_thermo==0)) THEN1363 WRITE (lunout, *) ' ok_ice_su rsat=y requires iflag_ice_thermo=1 as well'1366 IF (ok_ice_supersat.AND.(iflag_ice_thermo==0)) THEN 1367 WRITE (lunout, *) ' ok_ice_supersat=y requires iflag_ice_thermo=1 as well' 1364 1368 abort_message = 'see above' 1365 1369 CALL abort_physic(modname, abort_message, 1) 1366 1370 ENDIF 1367 1371 1368 IF (ok_ice_su rsat.AND.(nqo<4)) THEN1369 WRITE (lunout, *) ' ok_ice_su rsat=y requires 4H2O tracers ', &1370 '(H2O_g, H2O_l, H2O_s, H2O_ r) but nqo=', nqo, '. Might as well stop here.'1372 IF (ok_ice_supersat.AND.(nqo<5)) THEN 1373 WRITE (lunout, *) ' ok_ice_supersat=y requires 5 H2O tracers ', & 1374 '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c) but nqo=', nqo, '. Might as well stop here.' 1371 1375 abort_message = 'see above' 1372 1376 CALL abort_physic(modname, abort_message, 1) 1373 1377 ENDIF 1374 1378 1375 IF (ok_plane_h2o.AND..NOT.ok_ice_su rsat) THEN1376 WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_su rsat=y '1379 IF (ok_plane_h2o.AND..NOT.ok_ice_supersat) THEN 1380 WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_supersat=y ' 1377 1381 abort_message = 'see above' 1378 1382 CALL abort_physic(modname, abort_message, 1) 1379 1383 ENDIF 1380 1384 1381 IF (ok_plane_contrail.AND..NOT.ok_ice_su rsat) THEN1382 WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_su rsat=y '1385 IF (ok_plane_contrail.AND..NOT.ok_ice_supersat) THEN 1386 WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_supersat=y ' 1383 1387 abort_message = 'see above' 1384 1388 CALL abort_physic(modname, abort_message, 1) … … 1386 1390 1387 1391 IF (ok_bs) THEN 1388 IF ((ok_ice_su rsat.AND.nqo <5).OR.(.NOT.ok_ice_sursat.AND.nqo<4)) THEN1392 IF ((ok_ice_supersat.AND.nqo <6).OR.(.NOT.ok_ice_supersat.AND.nqo<4)) THEN 1389 1393 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1390 1394 'but nqo=', nqo … … 1795 1799 RG, RD, RCPD, RKAPPA, RLVTT, RETV) 1796 1800 CALL ratqs_ini(klon, klev, iflag_thermals, lunout, nbsrf, is_lic, is_ter, RG, RV, RD, RCPD, RLSTT, RLVTT, RTT) 1797 CALL lscp_ini(pdtphys, lunout, prt_level, ok_ice_sursat, iflag_ratqs, fl_cor_ebil, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG, RV, RPI) 1801 CALL lscp_ini(pdtphys, lunout, prt_level, ok_ice_supersat, iflag_ratqs, fl_cor_ebil, & 1802 RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RV, RG, RPI, EPS_W) 1798 1803 CALL blowing_snow_ini(RCPD, RLSTT, RLVTT, RLMLT, & 1799 1804 RVTMP2, RTT, RD, RG, RV, RPI) … … 2265 2270 sollwdown(:)) 2266 2271 2272 !--Init for LSCP - condensation 2273 ratio_qi_qtot(:,:) = 0. 2274 2267 2275 ENDIF 2268 2276 … … 2361 2369 ql_seri(i, k) = qx(i, k, iliq) 2362 2370 qbs_seri(i, k) = 0. 2371 cf_seri(i, k) = 0. 2372 rvc_seri(i, k) = 0. 2363 2373 !CR: ATTENTION, on rajoute la variable glace 2364 2374 IF (nqo==2) THEN !--vapour and liquid only 2365 2375 qs_seri(i, k) = 0. 2366 rneb_seri(i, k) = 0.2367 2376 ELSE IF (nqo==3) THEN !--vapour, liquid and ice 2368 2377 qs_seri(i, k) = qx(i, k, isol) 2369 rneb_seri(i, k) = 0. 2370 ELSE IF (nqo>=4) THEN !--vapour, liquid, ice and rneb and blowing snow 2378 ELSE IF (nqo>=4) THEN !--vapour, liquid, ice, blowing snow, cloud fraction and cloudy water vapor to total water vapor ratio 2371 2379 qs_seri(i, k) = qx(i, k, isol) 2372 IF (ok_ice_sursat) THEN 2373 rneb_seri(i, k) = qx(i, k, irneb) 2374 ENDIF 2380 IF (ok_ice_supersat) THEN 2381 cf_seri(i, k) = qx(i, k, icf) 2382 rvc_seri(i, k) = qx(i, k, irvc) 2383 END IF 2375 2384 IF (ok_bs) THEN 2376 2385 qbs_seri(i, k) = qx(i, k, ibs) 2377 END IF2378 END IF2379 END DO2380 END DO2386 END IF 2387 END IF 2388 END DO 2389 END DO 2381 2390 ! Lea Raillard qs_ini for cloud phase param. 2382 2391 qs_ini(:, :) = qs_seri(:, :) … … 2450 2459 d_qs_dyn(:, :) = (qs_seri(:, :) - qs_ancien(:, :)) / phys_tstep 2451 2460 d_qbs_dyn(:, :) = (qbs_seri(:, :) - qbs_ancien(:, :)) / phys_tstep 2461 d_cf_dyn(:, :) = (cf_seri(:, :) - cf_ancien(:, :)) / phys_tstep 2462 d_rvc_dyn(:, :) = (rvc_seri(:, :) - rvc_ancien(:, :))/phys_tstep 2452 2463 CALL water_int(klon, klev, q_seri, zmasse, zx_tmp_fi2d) 2453 2464 d_q_dyn2d(:) = (zx_tmp_fi2d(:) - prw_ancien(:)) / phys_tstep … … 2461 2472 IF (nqtot > nqo) d_tr_dyn(:, :, :) = (tr_seri(:, :, :) - tr_ancien(:, :, :)) / phys_tstep 2462 2473 ! !! RomP <<< 2463 !!d_rneb_dyn(:,:)=(rneb_seri(:,:)-rneb_ancien(:,:))/phys_tstep2464 d_rneb_dyn(:, :) = 0.02465 2474 ELSE 2466 2475 d_u_dyn(:, :) = 0.0 … … 2470 2479 d_ql_dyn(:, :) = 0.0 2471 2480 d_qs_dyn(:, :) = 0.0 2481 d_qbs_dyn(:, :) = 0.0 2482 d_cf_dyn(:, :) = 0.0 2483 d_rvc_dyn(:, :) = 0.0 2472 2484 d_q_dyn2d(:) = 0.0 2473 2485 d_ql_dyn2d(:) = 0.0 … … 2477 2489 IF (nqtot > nqo) d_tr_dyn(:, :, :) = 0.0 2478 2490 ! !! RomP <<< 2479 d_rneb_dyn(:, :) = 0.02480 d_qbs_dyn(:, :) = 0.02481 2491 ancien_ok = .TRUE. 2482 2492 ENDIF … … 2585 2595 ! "zmasse" changes a little.) 2586 2596 ENDIF 2597 ENDIF 2598 2599 !-- Needed for LSCP - condensation and ice supersaturation 2600 IF (ok_ice_supersat) THEN 2601 DO k = 1, klev 2602 DO i = 1, klon 2603 IF ((q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k)) > 0.) THEN 2604 ratio_qi_qtot(i, k) = qs_seri(i, k) / (q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k)) 2605 rvc_seri(i, k) = rvc_seri(i, k) * q_seri(i, k) / (q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k)) 2606 ELSE 2607 ratio_qi_qtot(i, k) = 0. 2608 rvc_seri(i, k) = 0. 2609 ENDIF 2610 ENDDO 2611 ENDDO 2587 2612 ENDIF 2588 2613 … … 3738 3763 3739 3764 !--mise à jour de flight_m et flight_h2o dans leur module 3740 IF (ok_plane_h2o .OR. ok_plane_contrail) THEN3741 CALL airplane(debut, pphis, pplay, paprs,t_seri)3742 ENDIF3765 !IF (ok_plane_h2o .OR. ok_plane_contrail) THEN 3766 ! CALL airplane(debut,pphis,pplay,paprs,t_seri) 3767 !ENDIF 3743 3768 3744 3769 CALL lscp(klon, klev, phys_tstep, missing_val, paprs, pplay, & 3745 3770 t_seri, q_seri, qs_ini, ptconv, ratqs, & 3746 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri,&3771 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 3747 3772 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & 3748 3773 radocond, picefra, rain_lsc, snow_lsc, & … … 3750 3775 prfl, psfl, rhcl, & 3751 3776 zqasc, fraca, ztv, zpspsk, ztla, zthl, iflag_cld_th, & 3752 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, & 3753 pbl_tke(:, :, is_ave), pbl_eps(:, :, is_ave), qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 3777 iflag_ice_thermo, distcltop, temp_cltop, & 3778 pbl_tke(:, :, is_ave), pbl_eps(:, :, is_ave), & 3779 cell_area, & 3780 cf_seri, rvc_seri, u_seri, v_seri, & 3781 qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, & 3782 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 3783 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 3754 3784 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 3785 dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, & 3755 3786 cloudth_sth, cloudth_senv, cloudth_sigmath, cloudth_sigmaenv, & 3756 3787 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, & … … 5421 5452 d_qx(i, k, isol) = (qs_seri(i, k) - qx(i, k, isol)) / phys_tstep 5422 5453 ENDIF 5423 !--ice_sursat: nqo=4, on ajoute rneb 5424 IF (nqo>=4 .AND. ok_ice_sursat) THEN 5425 d_qx(i, k, irneb) = (rneb_seri(i, k) - qx(i, k, irneb)) / phys_tstep 5454 !--ice_supersat: nqo=5, we add cloud fraction and cloudy water vapor to total water vapor ratio 5455 IF (nqo>=5 .and. ok_ice_supersat) THEN 5456 d_qx(i, k, icf) = (cf_seri(i, k) - qx(i, k, icf)) / phys_tstep 5457 d_qx(i, k, irvc) = (rvc_seri(i, k) - qx(i, k, irvc)) / phys_tstep 5426 5458 ENDIF 5427 5459 … … 5458 5490 qs_ancien(:, :) = qs_seri(:, :) 5459 5491 qbs_ancien(:, :) = qbs_seri(:, :) 5460 rneb_ancien(:, :) = rneb_seri(:, :) 5492 cf_ancien(:, :) = cf_seri(:, :) 5493 rvc_ancien(:, :) = rvc_seri(:, :) 5461 5494 CALL water_int(klon, klev, q_ancien, zmasse, prw_ancien) 5462 5495 CALL water_int(klon, klev, ql_ancien, zmasse, prlw_ancien)
Note: See TracChangeset
for help on using the changeset viewer.