Changeset 5554 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Feb 21, 2025, 2:01:55 PM (3 days ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 6 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_bl_for_dms.f90
r5553 r5554 1 SUBROUTINE bl_for_dms(u,v,paprs,pplay,cdragh,cdragm & 1 MODULE lmdz_spla_bl_for_dms 2 3 CONTAINS 4 5 SUBROUTINE spla_bl_for_dms(klon,klev,u,v,paprs,pplay,cdragh,cdragm & 2 6 ,t,q,tsol,ustar,obklen) 3 USE dimphy 4 USE yomcst_mod_h 5 USE yoethf_mod_h 6 IMPLICIT NONE 7 8 USE lmdz_spla_ini, ONLY : RG,RD,RCPD,RLVTT,RLSTT,RETV,RTT, & 9 R2ES,R3IES,R3LES,R4IES,R4LES,R5IES,R5LES,RVTMP2 10 11 !USE yoethf_mod_h 7 12 ! 8 13 !=================================================================== … … 19 24 !=================================================================== 20 25 ! 26 IMPLICIT NONE 27 21 28 INCLUDE "FCTTRE.h" 29 30 ! 31 INTEGER, intent(in) :: klon,klev 22 32 ! 23 33 ! Arguments : 24 REAL :: u(klon,klev)! vent zonal25 REAL :: v(klon,klev)! vent meridien26 REAL :: paprs(klon,klev+1)! niveaux de pression aux intercouches (Pa)27 REAL :: pplay(klon,klev)! niveaux de pression aux milieux... (Pa)28 REAL :: cdragh(klon) ! coefficient de trainee pour la chaleur29 REAL :: cdragm(klon) ! coefficient de trainee pour le vent30 REAL :: t(klon,klev) ! temperature31 REAL :: q(klon,klev) ! humidite kg/kg32 REAL :: tsol(klon)! temperature du sol33 REAL :: ustar(klon)! vitesse de friction34 REAL :: obklen(klon)! longueur de Monin-Obukhov34 REAL, dimension(klon,klev), intent(in) :: u ! vent zonal 35 REAL, dimension(klon,klev), intent(in) :: v ! vent meridien 36 REAL, dimension(klon,klev+1), intent(in):: paprs ! niveaux de pression aux intercouches (Pa) 37 REAL, dimension(klon,klev), intent(in) :: pplay ! niveaux de pression aux milieux... (Pa) 38 REAL, dimension(klon,klev), intent(in) :: t ! temperature 39 REAL, dimension(klon,klev), intent(in) :: q ! humidite kg/kg 40 REAL, dimension(klon), intent(in) :: cdragh ! coefficient de trainee pour la chaleur 41 REAL, dimension(klon), intent(in) :: cdragm ! coefficient de trainee pour le vent 42 REAL, dimension(klon), intent(in) :: tsol ! temperature du sol 43 REAL, dimension(klon), intent(out) :: ustar ! vitesse de friction 44 REAL, dimension(klon), intent(out) :: obklen ! longueur de Monin-Obukhov 35 45 ! 36 46 ! Locales : … … 43 53 REAL :: zxt, zxu, zxv, zxq, zxqs, zxmod, taux, tauy 44 54 REAL :: zcor, zdelta, zcvm5 45 REAL :: z(klon,klev)55 REAL, dimension(klon,klev) :: z 46 56 REAL :: zx_alf1, zx_alf2 ! parametres pour extrapolation 47 REAL :: khfs(klon)! surface kinematic heat flux [mK/s]48 REAL :: kqfs(klon)! sfc kinematic constituent flux [m/s]49 REAL :: heatv(klon)! surface virtual heat flux57 REAL, dimension(klon) :: khfs ! surface kinematic heat flux [mK/s] 58 REAL, dimension(klon) :: kqfs ! sfc kinematic constituent flux [m/s] 59 REAL, dimension(klon) :: heatv ! surface virtual heat flux 50 60 51 61 … … 102 112 ENDDO 103 113 ! 104 END SUBROUTINE bl_for_dms 114 END SUBROUTINE spla_bl_for_dms 115 116 END MODULE lmdz_spla_bl_for_dms -
LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_gastoparticle.f90
r5553 r5554 1 SUBROUTINE gastoparticle(pdtphys,zdz,zrho,xlat,pplay,t_seri, & 1 MODULE lmdz_spla_gastoparticle 2 3 CONTAINS 4 5 SUBROUTINE spla_gastoparticle(klon,klev,nbtr,pdtphys,zdz,zrho,xlat,pplay,t_seri, & 2 6 id_prec,id_fine, & 3 7 tr_seri,his_g2pgas ,his_g2paer ) 4 8 !nhl . fluxso4chem, flux_sparam_sulf, 5 9 6 USE chem_spla_mod_h 7 USE chem_mod_h 8 USE yoecumf_mod_h 9 USE dimphy 10 USE infotrac_phy, ONLY: nbtr 11 ! USE indice_sol_mod 10 USE lmdz_spla_ini, ONLY: RNAVO,masse_s,masse_ammsulfate 12 11 13 USE yomcst_mod_h 12 !USE yoecumf_mod_h !!!! AS: pour Tiedke (Tiedtke) ; ça compile sans -->> inutile?! 13 14 14 IMPLICIT NONE 15 15 ! 16 17 16 INTEGER, intent(in) :: klon,klev ! from dimphy 17 INTEGER, intent(in) :: nbtr ! from infotrac_phy 18 18 ! 19 REAL :: pdtphys 20 REAL :: zrho(klon,klev) 21 REAL :: zdz(klon,klev) 22 REAL :: tr_seri(klon,klev,nbtr) ! traceurs 23 REAL :: tend ! tendance par espece 24 REAL :: xlat(klon) ! latitudes pour chaque point 19 INTEGER,intent(in) :: id_prec,id_fine ! JE: 20140120 20 REAL, intent(in) :: pdtphys 21 REAL, dimension(klon,klev), intent(in) :: zrho 22 REAL, dimension(klon,klev), intent(in) :: zdz 23 REAL, dimension(klon), intent(in) :: xlat ! latitudes pour chaque point 24 REAL, dimension(klon,klev), intent(in) :: pplay ! JE: 20140120 25 REAL, dimension(klon,klev), intent(in) :: t_seri ! JE: 20140120 26 REAL, dimension(klon,klev,nbtr), intent(inout) :: tr_seri ! traceurs 27 REAL, dimension(klon), intent(out) :: his_g2pgas ! JE: 20140120 28 REAL, dimension(klon), intent(out) :: his_g2paer ! JE: 20140120 29 ! local 30 REAL :: tendincm3(klon,klev) ! JE: 20140120 31 REAL :: tempvar(klon,klev) ! JE: 20140120 32 REAL :: tend2d(klon,klev) ! JE: 20140120 33 REAL :: tend ! tendance par espece 25 34 REAL :: pi 26 ! JE: 2014012027 REAL :: his_g2pgas(klon)28 REAL :: his_g2paer(klon)29 REAL :: tendincm3(klon,klev)30 REAL :: tempvar(klon,klev)31 REAL :: pplay(klon,klev)32 REAL :: t_seri(klon,klev)33 REAL :: tend2d(klon,klev)34 INTEGER :: id_prec,id_fine35 !36 35 !------------------------- Scaling Parameter -------------------------- 37 36 ! 38 37 ! REAL scale_param_so4(klon) !Scaling parameter for sulfate 39 40 38 INTEGER :: i, k 41 39 REAL :: tau_chem !---chemical lifetime in s … … 91 89 ! 92 90 RETURN 93 END SUBROUTINE gastoparticle 91 END SUBROUTINE spla_gastoparticle 92 93 END MODULE lmdz_spla_gastoparticle -
LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_ini.f90
r5505 r5554 1 1 MODULE lmdz_spla_ini 2 INTEGER, SAVE :: is_oce 3 REAL, SAVE :: RNAVO 4 !$OMP THREADPRIVATE(is_oce,RNAVO) 2 3 IMPLICIT NONE 4 5 SAVE 6 7 ! from indice_sol_mod.f90 8 INTEGER, PROTECTED :: is_oce 9 !$OMP THREADPRIVATE(is_oce) 10 11 ! from yomcst_mod_h.f90 12 REAL, PROTECTED :: RNAVO,RG,RD,RCPD,RLVTT,RLSTT,RETV,RTT 13 !$OMP THREADPRIVATE(RNAVO,RG,RD,RCPD,RLVTT,RLSTT,RETV,RTT) 14 15 ! from yoethf_mod_h.f90 16 ! COMMON *YOETHF* DERIVED CONSTANTS SPECIFIC TO ECMWF THERMODYNAMICS 17 REAL :: R2ES,R3IES,R3LES,R4IES,R4LES,R5IES,R5LES,RVTMP2 18 !$OMP THREADPRIVATE(R2ES,R3LES,R3IES,R4LES,R4IES,R5LES,R5IES,RVTMP2) 19 20 ! from chem_mod_h.f90 21 REAL, PARAMETER :: masse_s=32.0 !--g mol-1 ; molar mass sulfur-32 isotope (stable) 22 23 ! from chem_spla_mod_h.f90 24 REAL, PARAMETER :: masse_ammsulfate = 132.0 !--g mol-1 5 25 6 26 CONTAINS 7 SUBROUTINE spla_ini(is_oce_in,RNAVO_in) 27 28 SUBROUTINE spla_ini(is_oce_in, & 29 RNAVO_in,RG_in,RD_in,RCPD_in,RLVTT_in,RLSTT_in,RETV_in,RTT_in, & 30 R2ES_in,R3LES_in,R3IES_in,R4LES_in,R4IES_in,R5LES_in,R5IES_in,RVTMP2_in & 31 ) 32 8 33 IMPLICIT NONE 9 INTEGER is_oce_in 10 REAL RNAVO_in 34 35 integer, intent(in) :: is_oce_in 36 real, intent(in) :: RNAVO_in,RG_in,RD_in,RCPD_in,RLVTT_in,RLSTT_in,RETV_in,RTT_in 37 real, intent(in) :: R2ES_in,R3LES_in,R3IES_in,R4LES_in,R4IES_in,R5LES_in,R5IES_in,RVTMP2_in 38 11 39 is_oce=is_oce_in 40 12 41 RNAVO=RNAVO_in 42 RG=RG_in 43 RD=RD_in 44 RCPD=RCPD_in 45 RLVTT=RLVTT_in 46 RLSTT=RLSTT_in 47 RETV=RETV_in 48 RTT=RTT_in 49 50 R2ES=R2ES_in 51 R3LES=R3LES_in 52 R3IES=R3IES_in 53 R4LES=R4LES_in 54 R4IES=R4IES_in 55 R5LES=R5LES_in 56 R5IES=R5IES_in 57 RVTMP2=RVTMP2_in 58 13 59 END SUBROUTINE spla_ini 60 14 61 END MODULE lmdz_spla_ini -
LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_neutral.f90
r5553 r5554 1 MODULE lmdz_spla_neutral 2 CONTAINS 1 3 !*********************************************************************** 2 subroutine neutral(u10_mps,ustar_mps,obklen_m, &4 subroutine spla_neutral(klon,u10_mps,ustar_mps,obklen_m, & 3 5 u10n_mps ) 4 6 !----------------------------------------------------------------------- … … 27 29 !---------------------------------------------------------------------- 28 30 ! 29 USE dimphy30 31 ! 31 real :: u10_mps(klon),ustar_mps(klon),obklen_m(klon) 32 real :: u10n_mps(klon) 32 IMPLICIT NONE 33 ! 34 INTEGER klon 35 36 37 real, dimension(klon), intent(in) :: u10_mps, ustar_mps, obklen_m 38 real, dimension(klon), intent(out) :: u10n_mps 33 39 real :: pi,von_karman 34 40 ! parameter (pi = 3.141592653589793, von_karman = 0.4) … … 42 48 psi = 0. 43 49 do i=1,klon 44 45 if (u10_mps(i) .lt. 0.) u10_mps(i) = 0.0 50 ! Original : needs u10_mps defined as "inout" to be able to modify it here, but in reality it is only "in" 51 !if (u10_mps(i) .lt. 0.) u10_mps(i) = 0.0 52 ! Instead, STOP to check why the module is negative 53 if (u10_mps(i) .lt. 0.) STOP 'negative wind module u10 in input of spla_neutral' 46 54 47 55 if (obklen_m(i) .lt. 0.) then … … 68 76 enddo 69 77 return 70 end subroutine neutral78 end subroutine spla_neutral 71 79 !*********************************************************************** 80 END MODULE lmdz_spla_neutral -
LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_nightingale.f90
r5505 r5554 1 1 MODULE lmdz_spla_nightingale 2 2 3 CONTAINS 4 3 5 SUBROUTINE spla_nightingale(klon,klev,nbsrf,u, v, u_10m, v_10m, paprs, pplay, & 4 6 cdragh, cdragm, t, q, ftsol, tsol, & 5 7 pctsrf, lmt_dmsconc, lmt_dms) 6 8 ! 7 USE lmdz_spla_ini, ONLY: is_oce, RNAVO 9 USE lmdz_spla_ini, ONLY: is_oce, RNAVO 10 USE lmdz_spla_bl_for_dms, ONLY: spla_bl_for_dms 11 USE lmdz_spla_neutral, ONLY: spla_neutral 8 12 9 IMPLICIT NONE13 IMPLICIT NONE 10 14 ! 11 INTEGERklon,klev,nbsrf15 INTEGER, intent(in) :: klon,klev,nbsrf 12 16 ! 13 17 REAL, dimension(klon,klev), intent(in) :: u, v … … 30 34 INTEGER :: i 31 35 ! 32 CALL bl_for_dms(u, v, paprs, pplay, cdragh, cdragm, &36 CALL spla_bl_for_dms(klon, klev, u, v, paprs, pplay, cdragh, cdragm, & 33 37 t, q, tsol, ustar, obklen) 34 38 ! … … 37 41 ENDDO 38 42 ! 39 CALL neutral(u10, ustar, obklen, u10n)43 CALL spla_neutral(klon, u10, ustar, obklen, u10n) 40 44 ! 41 45 DO i=1,klon … … 84 88 ! 85 89 END SUBROUTINE spla_nightingale 90 86 91 END MODULE lmdz_spla_nightingale -
LMDZ6/trunk/libf/phylmd/Dust/phytracr_spl_mod.F90
r5337 r5554 4 4 MODULE phytracr_spl_mod 5 5 6 USE lmdz_spla_gastoparticle, ONLY : spla_gastoparticle 7 6 8 ! Recuperation des morceaux de la physique de Jeronimo specifiques 7 9 ! du modele d'aerosols d'Olivier n'co. 8 USE chem_mod_h10 USE lmdz_spla_ini, ONLY: masse_s !au lieu de USE chem_mod_h 9 11 USE chem_spla_mod_h 10 12 … … 2748 2750 ENDIF 2749 2751 2750 CALL gastoparticle(pdtphys,zdz,zrho,rlat, &2752 CALL spla_gastoparticle(klon,klev,nbtr,pdtphys,zdz,zrho,rlat, & 2751 2753 pplay,t_seri,id_prec,id_fine, & 2752 2754 tr_seri,his_g2pgas ,his_g2paer) -
LMDZ6/trunk/libf/phylmd/Dust/precuremission.f90
r5505 r5554 18 18 USE lmdz_spla_nightingale, ONLY: spla_nightingale 19 19 USE chem_spla_mod_h 20 20 USE lmdz_spla_ini, ONLY: masse_s !au lieu de USE chem_mod_h 21 21 USE dimphy 22 22 USE indice_sol_mod -
LMDZ6/trunk/libf/phylmd/chem_mod_h.f90
r5292 r5554 1 1 MODULE chem_mod_h 2 3 ! AS 20250220 : masse_s MOVED TO Dust/lmdz_spla_ini.f90 4 ! n_avogadro, masse_so4 REMOVED BECAUSE NOT USED 5 2 6 IMPLICIT NONE; PRIVATE 3 7 PUBLIC idms, iso2, iso4, ih2s, idmso, imsa, ih2o2, & 4 n_avogadro, masse_s, masse_so4,rho_water, rho_ice8 rho_water, rho_ice 5 9 6 10 INTEGER idms, iso2, iso4, ih2s, idmso, imsa, ih2o2 … … 8 12 PARAMETER (ih2s = 4, idmso = 5, imsa = 6, ih2o2 = 7) 9 13 10 REAL n_avogadro, masse_s, masse_so4, rho_water, rho_ice 11 PARAMETER (n_avogadro = 6.02E23) !--molec mol-1 12 PARAMETER (masse_s = 32.0) !--g mol-1 13 PARAMETER (masse_so4 = 96.0) !--g mol-1 14 REAL rho_water, rho_ice 14 15 PARAMETER (rho_water = 1000.0) !--kg m-3 15 16 PARAMETER (rho_ice = 500.0) !--kg m-3 -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r5518 r5554 1884 1884 IF (CPPKEY_DUST) THEN 1885 1885 ! Quand on utilise SPLA, on force iflag_phytrac=1 1886 CALL spla_ini(is_oce,RNAVO) 1886 CALL spla_ini(is_oce,RNAVO,RG,RD,RCPD,RLVTT,RLSTT,RETV,RTT, & 1887 R2ES,R3LES,R3IES,R4LES,R4IES,R5LES,R5IES,RVTMP2) 1887 1888 CALL phytracr_spl_out_init() 1888 1889 CALL phys_output_write_spl(itap, pdtphys, paprs, pphis, &
Note: See TracChangeset
for help on using the changeset viewer.