Changeset 5609 for LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
- Timestamp:
- Apr 13, 2025, 7:10:19 PM (8 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
r5602 r5609 328 328 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 329 329 !-- LSCP - aviation and contrails variables 330 cfa_seri, qta_seri, d_cfa_dyn, d_qta_dyn, &331 d_q_avi, flight_dist, flight_h2o, &332 qice_cont,Tcritcont, qcritcont, potcontfraP, potcontfraNP, &330 cfa_seri, pcf_seri, qva_seri, qia_seri, d_cfa_dyn, d_pcf_dyn, d_qva_dyn, d_qia_dyn, & 331 d_q_avi, flight_dist, flight_h2o, qice_perscont, & 332 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 333 333 cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & 334 334 conttau, contemi, contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont, & … … 518 518 ! 519 519 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional) 520 INTEGER,SAVE :: ivap, iliq, isol, ibs, icf, iqvc, icfa, i qta521 !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, iqvc, icfa, i qta)520 INTEGER,SAVE :: ivap, iliq, isol, ibs, icf, iqvc, icfa, ipcf, iqia, iqva 521 !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, iqvc, icfa, ipcf, iqia, iqva) 522 522 ! 523 523 ! … … 1363 1363 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1364 1364 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 1365 icf = strIdx(tracers(:)%name, addPhase('H2O', 'f')) 1366 iqvc = strIdx(tracers(:)%name, addPhase('H2O', 'c')) 1367 icfa = strIdx(tracers(:)%name, addPhase('H2O', 'a')) 1368 iqta = strIdx(tracers(:)%name, addPhase('H2O', 'q')) 1365 icf = strIdx(tracers(:)%name, 'CLDFRA') 1366 iqvc = strIdx(tracers(:)%name, 'CLDVAP_g') 1367 icfa = strIdx(tracers(:)%name, 'CONTFRA') 1368 ipcf = strIdx(tracers(:)%name, 'PERSCONTFRA') 1369 iqva = strIdx(tracers(:)%name, 'CONTWATER_g') 1370 iqia = strIdx(tracers(:)%name, 'CONTWATER_s') 1369 1371 ! CALL init_etat0_limit_unstruct 1370 1372 ! IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 1414 1416 ENDIF 1415 1417 1416 IF (ok_ice_supersat.AND.(nqo.LT.5)) THEN 1417 WRITE (lunout, *) ' ok_ice_supersat=y requires 5 H2O tracers ', & 1418 '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c) but nqo=', nqo, '. Might as well stop here.' 1418 IF (ok_ice_supersat.AND.((icf.EQ.0).OR.(iqvc.EQ.0))) THEN 1419 WRITE (lunout, *) ' ok_ice_supersat=y requires 5 tracers ', & 1420 '(H2O_g, H2O_l, H2O_s, CLDFRA, CLDVAP_g) but not all are ', & 1421 'provided. Might as well stop here.' 1419 1422 abort_message='see above' 1420 1423 CALL abort_physic(modname,abort_message,1) … … 1433 1436 ENDIF 1434 1437 1435 IF (ok_plane_contrail.AND.(nqo.LT.6)) THEN 1436 WRITE (lunout, *) ' ok_plane_contrail=y requires 6 H2O tracers ', & 1437 '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c, H2O_a) but nqo=', nqo, '. Might as well stop here.' 1438 IF (ok_plane_contrail.AND.((icfa.EQ.0).OR.(iqva.EQ.0).OR.(iqia.EQ.0).OR.(ipcf.EQ.0))) THEN 1439 WRITE (lunout, *) ' ok_plane_contrail=y requires 8 tracers ', & 1440 '(H2O_g, H2O_l, H2O_s, CLDFRA, CLDVAP_g, CONTFRA, PERSCONTFRA, CONTWATER_s) ', & 1441 'but not all are provided. Might as well stop here.' 1438 1442 abort_message='see above' 1439 1443 CALL abort_physic(modname,abort_message,1) … … 1446 1450 ENDIF 1447 1451 1448 IF (ok_bs) THEN 1449 IF ((ok_ice_supersat.AND.nqo .LT.6).OR.(.NOT.ok_ice_supersat.AND.nqo.LT.4)) THEN 1450 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1451 'but nqo=', nqo 1452 abort_message='see above' 1453 CALL abort_physic(modname,abort_message, 1) 1454 ENDIF 1455 ENDIF 1452 IF (ok_bs.AND.(nqo.LT.4)) THEN 1453 WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', & 1454 'but nqo=', nqo 1455 abort_message='see above' 1456 CALL abort_physic(modname,abort_message, 1) 1457 ENDIF 1456 1458 1457 1459 Ncvpaseq1 = 0 … … 1631 1633 rnebcon(:,:) = 0.0 1632 1634 clwcon(:,:) = 0.0 1635 !--AB for prognostic clouds 1636 cwcon0(:,:) = 0.0 1637 cwcon(:,:) = 0.0 1633 1638 1634 1639 ! … … 2454 2459 q_seri(i,k) = qx(i,k,ivap) 2455 2460 ql_seri(i,k) = qx(i,k,iliq) 2461 qs_seri(i,k) = 0. 2456 2462 qbs_seri(i,k)= 0. 2457 2463 cf_seri(i,k) = 0. 2458 2464 qvc_seri(i,k)= 0. 2459 2465 cfa_seri(i,k)= 0. 2460 qta_seri(i,k)= 0. 2466 pcf_seri(i,k)= 0. 2467 qva_seri(i,k)= 0. 2468 qia_seri(i,k)= 0. 2461 2469 !CR: ATTENTION, on rajoute la variable glace 2462 IF (nqo.EQ.2) THEN !--vapour and liquid only 2463 qs_seri(i,k) = 0. 2464 ELSE IF (nqo.EQ.3) THEN !--vapour, liquid and ice 2470 IF (nqo .GE. 3) THEN !--vapour, liquid and ice 2465 2471 qs_seri(i,k) = qx(i,k,isol) 2466 E LSE IF (nqo.GE.4) THEN !--vapour, liquid, ice, blowing snow, cloud fraction and cloudy water vapor to total water vapor ratio2467 qs_seri(i,k) = qx(i,k,isol)2468 IF (ok_ice_supersat) THEN2469 cf_seri(i,k) = qx(i,k,icf)2470 qvc_seri(i,k) = qx(i,k,iqvc)2471 ENDIF2472 IF (ok_plane_contrail) THEN2473 cfa_seri(i,k) = qx(i,k,icfa)2474 qta_seri(i,k) = qx(i,k,iqta)2475 ENDIF2476 IF (ok_bs) THEN2477 qbs_seri(i,k)= qx(i,k,ibs)2478 ENDIF2472 ENDIF 2473 IF (ok_bs) THEN 2474 qbs_seri(i,k) = qx(i,k,ibs) 2475 ENDIF 2476 IF (ok_ice_supersat) THEN 2477 cf_seri(i,k) = qx(i,k,icf) 2478 qvc_seri(i,k) = qx(i,k,iqvc) 2479 ENDIF 2480 IF (ok_plane_contrail) THEN 2481 cfa_seri(i,k) = qx(i,k,icfa) 2482 pcf_seri(i,k) = qx(i,k,ipcf) 2483 qva_seri(i,k) = qx(i,k,iqva) 2484 qia_seri(i,k) = qx(i,k,iqia) 2479 2485 ENDIF 2480 2486 ENDDO … … 2552 2558 d_qvc_dyn(:,:)= (qvc_seri(:,:)-qvc_ancien(:,:))/phys_tstep 2553 2559 d_cfa_dyn(:,:)= (cfa_seri(:,:)-cfa_ancien(:,:))/phys_tstep 2554 d_qta_dyn(:,:)= (qta_seri(:,:)-qta_ancien(:,:))/phys_tstep 2560 d_pcf_dyn(:,:)= (pcf_seri(:,:)-pcf_ancien(:,:))/phys_tstep 2561 d_qva_dyn(:,:)= (qva_seri(:,:)-qva_ancien(:,:))/phys_tstep 2562 d_qia_dyn(:,:)= (qia_seri(:,:)-qia_ancien(:,:))/phys_tstep 2555 2563 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2556 2564 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2575 2583 d_qvc_dyn(:,:)= 0.0 2576 2584 d_cfa_dyn(:,:)= 0.0 2577 d_qta_dyn(:,:)= 0.0 2585 d_pcf_dyn(:,:)= 0.0 2586 d_qva_dyn(:,:)= 0.0 2587 d_qia_dyn(:,:)= 0.0 2578 2588 d_q_dyn2d(:) = 0.0 2579 2589 d_ql_dyn2d(:) = 0.0 … … 2700 2710 qi_seri_lscp(i,k) = qs_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2701 2711 qvc_seri(i,k) = qvc_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2702 qta_seri(i,k) = qta_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2712 qva_seri(i,k) = qva_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2713 qia_seri(i,k) = qia_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2703 2714 ELSE 2704 2715 ql_seri_lscp(i,k) = 0. 2705 2716 qi_seri_lscp(i,k) = 0. 2706 2717 qvc_seri(i,k) = 0. 2707 qta_seri(i,k) = 0. 2718 qva_seri(i,k) = 0. 2719 qia_seri(i,k) = 0. 2708 2720 ENDIF 2709 2721 ENDDO … … 3927 3939 DO i = 1, klon 3928 3940 qvc_seri(i,k) = qvc_seri(i,k) * q_seri(i,k) 3941 cwcon0(i,k) = zqsat(i,k) 3929 3942 ENDDO 3930 3943 ENDDO … … 3933 3946 DO k = 1, klev 3934 3947 DO i = 1, klon 3935 qta_seri(i,k) = qta_seri(i,k) * q_seri(i,k) 3948 qva_seri(i,k) = qva_seri(i,k) * q_seri(i,k) 3949 qia_seri(i,k) = qia_seri(i,k) * q_seri(i,k) 3936 3950 ENDDO 3937 3951 ENDDO … … 3945 3959 3946 3960 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, & 3947 t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, &3948 ptconv, rnebcon 0, clwcon0, ratqs, sigma_qtherm, &3961 t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, ratqs, sigma_qtherm, & 3962 ptconv, rnebcon, cwcon, clwcon, rnebcon0, cwcon0, clwcon0, & 3949 3963 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 3950 3964 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & … … 3960 3974 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 3961 3975 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 3962 cfa_seri, qta_seri, flight_dist, flight_h2o, &3963 qice_ cont, Tcritcont, qcritcont, potcontfraP, potcontfraNP, &3976 cfa_seri, pcf_seri, qva_seri, qia_seri, flight_dist, flight_h2o, & 3977 qice_perscont, Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 3964 3978 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, & 3965 3979 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, & … … 3967 3981 dqised, dcfsed, dqvcsed) 3968 3982 3983 IF (ok_ice_supersat) cwcon(:,:) = cwcon0(:,:) 3969 3984 3970 3985 ELSE … … 4513 4528 zfice, dNovrN, ptconv, rnebcon, clwcon, & 4514 4529 !--AB contrails 4515 cfa_seri, qice_cont, cldfra_nocont, cldtau_nocont, cldemi_nocont, &4516 c onttau, contemi, cldh_nocont, contcov, &4530 cfa_seri, pcf_seri, qia_seri, qice_perscont, cldfra_nocont, & 4531 cldtau_nocont, cldemi_nocont, conttau, contemi, cldh_nocont, contcov, & 4517 4532 fiwp_nocont, fiwc_nocont, ref_ice_nocont) 4518 4533 … … 5709 5724 d_qx(i,k,isol) = ( qs_seri(i,k) - qx(i,k,isol) ) / phys_tstep 5710 5725 ENDIF 5711 !--ice_supersat: nqo=5, we add cloud fraction and cloudy water vapor to total water vapor ratio 5712 IF (nqo.ge.5 .and. ok_ice_supersat) THEN 5726 IF (ok_bs) THEN 5727 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5728 ENDIF 5729 IF (ok_ice_supersat) THEN 5713 5730 d_qx(i,k,icf) = ( cf_seri(i,k) - qx(i,k,icf) ) / phys_tstep 5714 5731 d_qx(i,k,iqvc) = ( qvc_seri(i,k) - qx(i,k,iqvc) ) / phys_tstep 5715 IF (nqo.ge.6 .and. ok_plane_contrail) THEN5716 d_qx(i,k,icfa) = ( cfa_seri(i,k) - qx(i,k,icfa) ) / phys_tstep5717 d_qx(i,k,iqta) = ( qta_seri(i,k) - qx(i,k,iqta) ) / phys_tstep5718 ENDIF5719 5732 ENDIF 5720 5721 IF (nqo.ge.4 .and. ok_bs) THEN 5722 d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep 5733 IF (ok_plane_contrail) THEN 5734 d_qx(i,k,icfa) = ( cfa_seri(i,k) - qx(i,k,icfa) ) / phys_tstep 5735 d_qx(i,k,ipcf) = ( pcf_seri(i,k) - qx(i,k,ipcf) ) / phys_tstep 5736 d_qx(i,k,iqva) = ( qva_seri(i,k) - qx(i,k,iqva) ) / phys_tstep 5737 d_qx(i,k,iqia) = ( qia_seri(i,k) - qx(i,k,iqia) ) / phys_tstep 5723 5738 ENDIF 5724 5725 5739 ENDDO 5726 5740 ENDDO … … 5754 5768 qvc_ancien(:,:)= qvc_seri(:,:) 5755 5769 cfa_ancien(:,:)= cfa_seri(:,:) 5756 qta_ancien(:,:)= qta_seri(:,:) 5770 pcf_ancien(:,:)= pcf_seri(:,:) 5771 qva_ancien(:,:)= qva_seri(:,:) 5772 qia_ancien(:,:)= qia_seri(:,:) 5757 5773 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5758 5774 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
Note: See TracChangeset
for help on using the changeset viewer.