Changeset 5224 for LMDZ6/branches/Amaury_dev/libf/phylmdiso
- Timestamp:
- Sep 24, 2024, 10:47:17 AM (4 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/phylmdiso
- Files:
-
- 1 deleted
- 3 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmdiso/lmdz_lscp_condensation.f90
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/LMDZ6/trunk/libf/phylmdiso/lmdz_lscp_condensation.F90 merged eligible /LMDZ4/branches/LMDZ4-dev/libf/phylmdiso/lmdz_lscp_condensation.F90 1074-1276,1281-1284 /LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmdiso/lmdz_lscp_condensation.F90 1293-1401 /LMDZ5/branches/LMDZ5V1.0-dev/libf/phylmdiso/lmdz_lscp_condensation.F90 1436-1453 /LMDZ5/branches/LMDZ5V2.0-dev/libf/phylmdiso/lmdz_lscp_condensation.F90 1456-1491 /LMDZ5/branches/LMDZ_tree_FC/libf/phylmdiso/lmdz_lscp_condensation.F90 2924-2946 /LMDZ6/branches/LMDZ_ECRad/libf/phylmdiso/lmdz_lscp_condensation.F90 4175-4488 /LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/lmdz_lscp_condensation.F90 4660-4721 /LMDZ6/branches/Ocean_skin/libf/phylmdiso/lmdz_lscp_condensation.F90 3428-4369 /LMDZ6/branches/blowing_snow/libf/phylmdiso/lmdz_lscp_condensation.F90 4485-4522
r5223 r5224 1 link ../phylmd/lmdz_lscp_condensation. F901 link ../phylmd/lmdz_lscp_condensation.f90 -
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
LMDZ6/branches/Amaury_dev/libf/phylmdiso/phyetat0_mod.F90
r5221 r5224 1 ! $Id: phyetat0.F90 3890 2021-05-05 15:15:06Z jyg $2 3 1 MODULE phyetat0_mod 4 2 USE lmdz_abort_physic, ONLY: abort_physic … … 26 24 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 27 25 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 28 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, & 26 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, & 27 cf_ancien, rvc_ancien, radpas, radsol, rain_fall, ratqs, & 29 28 rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & 30 29 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & … … 421 420 ancien_ok=ancien_ok.AND.phyetat0_get(ql_ancien,"QLANCIEN","QLANCIEN",0.) 422 421 ancien_ok=ancien_ok.AND.phyetat0_get(qs_ancien,"QSANCIEN","QSANCIEN",0.) 423 ancien_ok=ancien_ok.AND.phyetat0_get(rneb_ancien,"RNEBANCIEN","RNEBANCIEN",0.)424 422 ancien_ok=ancien_ok.AND.phyetat0_get(u_ancien,"UANCIEN","UANCIEN",0.) 425 423 ancien_ok=ancien_ok.AND.phyetat0_get(v_ancien,"VANCIEN","VANCIEN",0.) … … 437 435 ENDIF 438 436 437 ! cas specifique des variables de la sursaturation par rapport a la glace 438 IF ( ok_ice_supersat ) THEN 439 ancien_ok=ancien_ok.AND.phyetat0_get(cf_ancien,"CFANCIEN","CFANCIEN",0.) 440 ancien_ok=ancien_ok.AND.phyetat0_get(rvc_ancien,"RVCANCIEN","RVCANCIEN",0.) 441 ELSE 442 cf_ancien(:,:)=0. 443 rvc_ancien(:,:)=0. 444 ENDIF 445 439 446 ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain 440 447 ! dummy values (as is the case when generated by ce0l, … … 443 450 (maxval(ql_ancien)==minval(ql_ancien)) .OR. & 444 451 (maxval(qs_ancien)==minval(qs_ancien)) .OR. & 445 (maxval(rneb_ancien)==minval(rneb_ancien)) .OR. &446 452 (maxval(prw_ancien)==minval(prw_ancien)) .OR. & 447 453 (maxval(prlw_ancien)==minval(prlw_ancien)) .OR. & … … 456 462 ancien_ok=.FALSE. 457 463 ENDIF 464 ENDIF 465 466 IF ( ok_ice_supersat ) THEN 467 IF ( (maxval(cf_ancien)==minval(cf_ancien)) .OR. & 468 (maxval(rvc_ancien)==minval(rvc_ancien)) ) THEN 469 ancien_ok=.false. 470 ENDIF 458 471 ENDIF 459 472 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/phyredem.F90
r5158 r5224 19 19 zval, rugoro, t_ancien, q_ancien, & 20 20 prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 21 ql_ancien, qs_ancien, qbs_ancien, u_ancien, & 22 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, & 21 ql_ancien, qs_ancien, qbs_ancien, cf_ancien, & 22 rvc_ancien, u_ancien, v_ancien, & 23 clwcon, rnebcon, ratqs, pbl_tke, & 23 24 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & 24 25 wake_deltat, wake_deltaq, wake_s, wake_dens, & … … 266 267 CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien) 267 268 CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien) 269 ENDIF 270 271 IF ( ok_ice_supersat ) THEN 272 CALL put_field(pass,"CFANCIEN", "CFANCIEN", cf_ancien) 273 CALL put_field(pass,"RVCANCIEN", "RVCANCIEN", rvc_ancien) 268 274 ENDIF 269 275 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/physiq_mod.F90
r5221 r5224 1 2 ! $Id: physiq_mod.F90 3908 2021-05-20 07:11:13Z idelkadi $3 4 !#define IO_DEBUG5 1 MODULE physiq_mod 6 2 … … 72 68 USE tracinca_mod, ONLY: config_inca 73 69 USE tropopause_m, ONLY: dyn_tropopause 74 USE ice_sursat_mod, ONLY: flight_init, airplane75 70 USE lmdz_vampir 76 71 USE lmdz_writefield_phy … … 181 176 ! [Variables internes non sauvegardees de la physique] 182 177 ! Variables locales pour effectuer les appels en serie 183 t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, & 178 t_seri,q_seri,ql_seri,qs_seri,qbs_seri, & 179 u_seri,v_seri,cf_seri,rvc_seri,tr_seri, & 180 rhcl, & 184 181 qx_seri, & ! CR 185 182 rhcl, & 186 183 ! Dynamic tendencies (diagnostics) 187 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, & 184 d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn, & 185 d_u_dyn,d_v_dyn,d_cf_dyn,d_rvc_dyn,d_tr_dyn, & 188 186 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 189 187 ! Physic tendencies … … 360 358 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & 361 359 distcltop, temp_cltop, & 362 zqsatl, zqsats, & 363 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 360 !-- LSCP - condensation and ice supersaturation variables 361 qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, & 362 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 363 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 364 !-- LSCP - aviation and contrails variables 364 365 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 366 dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, & 367 ! 365 368 cldemi, & 366 369 cldfra, cldtau, fiwc, & … … 578 581 ! reevap -> je commente les 2 lignes au dessus et je laisse la definition 579 582 ! plutot dans infotrac_phy 580 INTEGER,SAVE :: irneb, ibs 581 !$OMP THREADPRIVATE(irneb, ibs )583 INTEGER,SAVE :: irneb, ibs, icf,irvc 584 !$OMP THREADPRIVATE(irneb, ibs, icf,irvc) 582 585 583 586 … … 1450 1453 iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 1451 1454 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1452 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))1453 1455 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1456 icf = strIdx(tracers(:)%name, addPhase('H2O', 'f')) 1457 irvc = strIdx(tracers(:)%name, addPhase('H2O', 'c')) 1454 1458 ! CALL init_etat0_limit_unstruct 1455 !IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)1459 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) 1456 1460 !CR:nvelles variables convection/poches froides 1457 1461 … … 1508 1512 ENDIF 1509 1513 1510 IF (ok_ice_su rsat.AND.(iflag_ice_thermo==0)) THEN1511 WRITE (lunout, *) ' ok_ice_su rsat=y requires iflag_ice_thermo=1 as well'1514 IF (ok_ice_supersat.AND.(iflag_ice_thermo==0)) THEN 1515 WRITE (lunout, *) ' ok_ice_supersat=y requires iflag_ice_thermo=1 as well' 1512 1516 abort_message='see above' 1513 1517 CALL abort_physic(modname,abort_message,1) 1514 1518 ENDIF 1515 1519 1516 IF (ok_ice_su rsat.AND.(nqo<4)) THEN1517 WRITE (lunout, *) ' ok_ice_su rsat=y requires 4 H2O tracers ', &1518 '(H2O_g, H2O_l, H2O_s, H2O_ r) but nqo=', nqo, '. Might as well stop here.'1520 IF (ok_ice_supersat.AND.(nqo<5)) THEN 1521 WRITE (lunout, *) ' ok_ice_supersat=y requires 4 H2O tracers ', & 1522 '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c) but nqo=', nqo, '. Might as well stop here.' 1519 1523 abort_message='see above' 1520 1524 CALL abort_physic(modname,abort_message,1) 1521 1525 ENDIF 1522 1526 1523 IF (ok_plane_h2o.AND..NOT.ok_ice_su rsat) THEN1524 WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_su rsat=y '1527 IF (ok_plane_h2o.AND..NOT.ok_ice_supersat) THEN 1528 WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_supersat=y ' 1525 1529 abort_message='see above' 1526 1530 CALL abort_physic(modname,abort_message,1) 1527 1531 ENDIF 1528 1532 1529 IF (ok_plane_contrail.AND..NOT.ok_ice_su rsat) THEN1530 WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_su rsat=y '1533 IF (ok_plane_contrail.AND..NOT.ok_ice_supersat) THEN 1534 WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_supersat=y ' 1531 1535 abort_message='see above' 1532 1536 CALL abort_physic(modname,abort_message,1) … … 1538 1542 CALL abort_physic(modname,abort_message, 1) 1539 1543 #endif 1540 IF ((ok_ice_su rsat.AND.nqo <5).OR.(.NOT.ok_ice_sursat.AND.nqo<4)) THEN1544 IF ((ok_ice_supersat.AND.nqo <6).OR.(.NOT.ok_ice_supersat.AND.nqo<4)) THEN 1541 1545 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1542 1546 'but nqo=', nqo … … 1981 1985 RG,RD,RCPD,RKAPPA,RLVTT,RETV) 1982 1986 CALL ratqs_ini(klon,klev,iflag_thermals,lunout,nbsrf,is_lic,is_ter,RG,RV,RD,RCPD,RLSTT,RLVTT,RTT) 1983 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) 1987 CALL lscp_ini(pdtphys,lunout,prt_level,ok_ice_supersat,iflag_ratqs,fl_cor_ebil, & 1988 RCPD,RLSTT,RLVTT,RLMLT,RVTMP2,RTT,RD,RV,RG,RPI,EPS_W) 1984 1989 CALL blowing_snow_ini(RCPD, RLSTT, RLVTT, RLMLT, & 1985 1990 RVTMP2, RTT,RD,RG, RV, RPI) … … 2458 2463 sollwdown(:)) 2459 2464 2465 !--Init for LSCP - condensation 2466 ratio_qi_qtot(:,:) = 0. 2460 2467 2461 2468 … … 2565 2572 q_seri(i,k) = qx(i,k,ivap) 2566 2573 ql_seri(i,k) = qx(i,k,iliq) 2567 qbs_seri(i,k) = 0. 2574 qbs_seri(i,k)= 0. 2575 cf_seri(i,k) = 0. 2576 rvc_seri(i,k)= 0. 2568 2577 !CR: ATTENTION, on rajoute la variable glace 2569 2578 IF (nqo==2) THEN !--vapour and liquid only 2570 2579 qs_seri(i,k) = 0. 2571 rneb_seri(i,k) = 0.2572 2580 ELSE IF (nqo==3) THEN !--vapour, liquid and ice 2573 2581 qs_seri(i,k) = qx(i,k,isol) 2574 rneb_seri(i,k) = 0. 2575 ELSE IF (nqo>=4) THEN !--vapour, liquid, ice and rneb and blowing snow 2582 ELSE IF (nqo>=4) THEN !--vapour, liquid, ice, blowing snow, cloud fraction and cloudy water vapor to total water vapor ratio 2576 2583 qs_seri(i,k) = qx(i,k,isol) 2577 IF (ok_ice_sursat) THEN 2578 rneb_seri(i,k) = qx(i,k,irneb) 2584 IF (ok_ice_supersat) THEN 2585 cf_seri(i,k) = qx(i,k,icf) 2586 rvc_seri(i,k) = qx(i,k,irvc) 2579 2587 ENDIF 2580 2588 IF (ok_bs) THEN … … 2748 2756 d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep 2749 2757 d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep 2750 d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2758 d_qbs_dyn(:,:)= (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep 2759 d_cf_dyn(:,:) = (cf_seri(:,:)-cf_ancien(:,:))/phys_tstep 2760 d_rvc_dyn(:,:)= (rvc_seri(:,:)-rvc_ancien(:,:))/phys_tstep 2751 2761 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2752 2762 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2760 2770 IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep 2761 2771 ! !! RomP <<< 2762 !!d_rneb_dyn(:,:)=(rneb_seri(:,:)-rneb_ancien(:,:))/phys_tstep2763 d_rneb_dyn(:,:)=0.02764 2772 2765 2773 #ifdef ISO … … 2843 2851 d_ql_dyn(:,:) = 0.0 2844 2852 d_qs_dyn(:,:) = 0.0 2853 d_qbs_dyn(:,:)= 0.0 2854 d_cf_dyn(:,:) = 0.0 2855 d_rvc_dyn(:,:)= 0.0 2845 2856 d_q_dyn2d(:) = 0.0 2846 2857 d_ql_dyn2d(:) = 0.0 … … 2869 2880 IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0 2870 2881 ! !! RomP <<< 2871 d_rneb_dyn(:,:)=0.02872 d_qbs_dyn(:,:)=0.02873 2882 ancien_ok = .TRUE. 2874 2883 #ifdef ISO … … 2980 2989 ! "zmasse" changes a little.) 2981 2990 ENDIF 2991 ENDIF 2992 2993 !-- Needed for LSCP - condensation and ice supersaturation 2994 IF (ok_ice_supersat) THEN 2995 DO k = 1, klev 2996 DO i = 1, klon 2997 IF ( ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) > 0. ) THEN 2998 ratio_qi_qtot(i,k) = qs_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2999 rvc_seri(i,k) = rvc_seri(i,k) * q_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 3000 ELSE 3001 ratio_qi_qtot(i,k) = 0. 3002 rvc_seri(i,k) = 0. 3003 ENDIF 3004 ENDDO 3005 ENDDO 2982 3006 ENDIF 2983 3007 … … 5013 5037 5014 5038 !--mise à jour de flight_m et flight_h2o dans leur module 5015 IF (ok_plane_h2o .OR. ok_plane_contrail) THEN5016 CALL airplane(debut,pphis,pplay,paprs,t_seri)5017 ENDIF5039 !IF (ok_plane_h2o .OR. ok_plane_contrail) THEN 5040 ! CALL airplane(debut,pphis,pplay,paprs,t_seri) 5041 !ENDIF 5018 5042 5019 5043 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, & 5020 5044 t_seri, q_seri,qs_ini,ptconv,ratqs, & 5021 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &5045 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 5022 5046 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & 5023 5047 radocond, picefra, rain_lsc, snow_lsc, & … … 5025 5049 prfl, psfl, rhcl, & 5026 5050 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 5027 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, & 5028 pbl_tke(:,:,is_ave), pbl_eps(:,:,is_ave), qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 5029 Tcontr, qcontr, qcontr2, fcontrN, fcontrP , & 5051 iflag_ice_thermo, distcltop, temp_cltop, & 5052 pbl_tke(:,:,is_ave), pbl_eps(:,:,is_ave), & 5053 cell_area, & 5054 cf_seri, rvc_seri, u_seri, v_seri, & 5055 qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, & 5056 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 5057 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 5058 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 5059 dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, & 5030 5060 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, & 5031 5061 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, & … … 7072 7102 d_qx(i,k,isol) = ( qs_seri(i,k) - qx(i,k,isol) ) / phys_tstep 7073 7103 ENDIF 7074 !--ice_sursat: nqo=4, on ajoute rneb 7075 IF (nqo>=4 .AND. ok_ice_sursat) THEN 7076 d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep 7104 !--ice_supersat: nqo=5, we add cloud fraction and cloudy water vapor to total water vapor ratio 7105 IF (nqo>=5 .and. ok_ice_supersat) THEN 7106 d_qx(i, k, icf) = (cf_seri(i, k) - qx(i, k, icf)) / phys_tstep 7107 d_qx(i, k, irvc) = (rvc_seri(i, k) - qx(i, k, irvc)) / phys_tstep 7077 7108 ENDIF 7078 7109 … … 7080 7111 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 7081 7112 ENDIF 7082 7083 7113 7084 7114 ENDDO … … 7126 7156 ql_ancien(:,:) = ql_seri(:,:) 7127 7157 qs_ancien(:,:) = qs_seri(:,:) 7128 qbs_ancien(:,:) = qbs_seri(:,:) 7129 rneb_ancien(:,:) = rneb_seri(:,:) 7158 qbs_ancien(:,:)= qbs_seri(:,:) 7159 cf_ancien(:,:) = cf_seri(:,:) 7160 rvc_ancien(:,:)= rvc_seri(:,:) 7130 7161 #ifdef ISO 7131 7162 xt_ancien(:,:,:)=xt_seri(:,:,:)
Note: See TracChangeset
for help on using the changeset viewer.