Changeset 5159 for LMDZ6/branches/Amaury_dev/libf/phylmd/Dust
- Timestamp:
- Aug 2, 2024, 9:58:25 PM (6 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/phylmd/Dust
- Files:
-
- 36 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/aeropt_spl.f90
r5144 r5159 7 7 taue550_dust, taue670_dust, taue865_dust, & 8 8 taue550_dustsco, taue670_dustsco, taue865_dustsco) 9 ! 9 10 10 USE dimphy 11 11 USE infotrac 12 12 USE lmdz_yomcst 13 13 14 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 14 15 IMPLICIT NONE 15 ! 16 16 17 INCLUDE "chem.h" 17 INCLUDE "dimensions.h" 18 ! 18 19 19 20 ! Arguments: 20 ! 21 21 22 !======================== INPUT ================================== 22 23 REAL :: zdz(klon, klev) … … 87 88 88 89 DATA RH_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./ 89 ! 90 90 91 IF (ok_chimeredust) THEN 91 92 !JE20150212<< : changes in ustar in dustmod changes emission distribution … … 126 127 DO k = 1, klev 127 128 DO i = 1, klon 128 ! 129 129 130 rh = MIN(RHcl(i, k) * 100., RH_MAX) 130 131 RH_num = INT(rh / 10. + 1.) … … 237 238 238 239 239 ! 240 240 241 IF(id_coss>0) burden_ss(i) = burden_ss(i) & 241 242 + tr_seri(i, k, id_coss) * 1.e6 * 1.e3 * zdz(i, k) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/bcscav_spl.f90
r5144 r5159 5 5 USE lmdz_yomcst 6 6 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 !===================================================================== … … 12 13 !===================================================================== 13 14 ! 14 INCLUDE "dimensions.h" 15 15 16 INCLUDE "chem.h" 16 ! 17 17 18 REAL :: pdtime, alpha_r, alpha_s, R_r, R_s 18 19 PARAMETER (R_r = 0.001) !--mean raindrop radius (m) … … 24 25 REAL :: x(klon, klev) ! q de traceur 25 26 REAL :: dx(klon, klev) ! tendance de traceur 26 ! 27 27 28 !--variables locales 28 29 INTEGER :: i, k 29 30 REAL :: pr, ps, ice, water 30 ! 31 31 32 !------------------------------------------ 32 ! 33 33 34 ! NHL 34 35 ! Auxiliary variables defined to deal with the fact that precipitation -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/bl_for_dms.f90
r5153 r5159 6 6 USE lmdz_yomcst 7 7 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 8 9 IMPLICIT NONE 9 10 INCLUDE "FCTTRE.h" 10 ! 11 11 12 !=================================================================== 12 13 ! Auteur : E. Cosme … … 22 23 !=================================================================== 23 24 ! 24 INCLUDE "dimensions.h" 25 ! 25 26 26 27 ! Arguments : 27 28 REAL :: u(klon, klev) ! vent zonal … … 36 37 REAL :: ustar(klon) ! vitesse de friction 37 38 REAL :: obklen(klon) ! longueur de Monin-Obukhov 38 ! 39 39 40 ! Locales : 40 41 REAL :: vk … … 53 54 54 55 55 ! 56 56 57 !====================================================================== 57 ! 58 58 59 ! Calculer les hauteurs de chaque couche 59 ! 60 60 61 ! JE20150707 r2es=611.14 *18.0153/28.9644 61 62 DO i = 1, klon … … 72 73 73 74 DO i = 1, klon 74 ! 75 75 76 zdelta = MAX(0., SIGN(1., RTT - tsol(i))) 76 77 zcvm5 = R5LES * RLVTT * (1. - zdelta) + R5IES * RLSTT * zdelta … … 80 81 zcor = 1. / (1. - retv * zxqs) 81 82 zxqs = zxqs * zcor 82 ! 83 83 84 zx_alf1 = 1.0 84 85 zx_alf2 = 1.0 - zx_alf1 … … 98 99 ustar(i) = SQRT(taux**2 + tauy**2) 99 100 ustar(i) = MAX(SQRT(ustar(i)), 0.01) 100 ! 101 101 102 ENDDO 102 ! 103 103 104 DO i = 1, klon 104 105 obklen(i) = -t(i, 1) * ustar(i)**3 / (RG * vk * heatv(i)) 105 106 ENDDO 106 ! 107 107 108 END SUBROUTINE -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/blcloud_scav.f90
r5144 r5159 10 10 USE lmdz_yomcst 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 14 INCLUDE "dimensions.h" 16 15 17 INCLUDE "chem.h" 16 INCLUDE "paramet.h"17 18 18 19 !============================= INPUT =================================== … … 40 41 41 42 DO it = 1, nbtr 42 ! 43 43 44 DO j = 1, klev 44 45 DO i = 1, klon … … 47 48 ENDDO 48 49 ENDDO 49 ! 50 50 51 !nhl CALL bcscav_spl(pdtphys,prfl,psfl,alpha_r(it),alpha_s(it), 51 52 !nhl . tr_seri(1,1,it),d_tr(1,1,it)) 52 53 CALL bcscav_spl(pdtphys, prfl, psfl, alpha_r(it), alpha_s(it), & 53 54 aux_var1, aux_var2) 54 ! 55 55 56 DO j = 1, klev 56 57 DO i = 1, klon … … 67 68 ENDDO 68 69 ENDDO 69 ! 70 70 71 DO i = 1, klon 71 72 DO j = 1, klev … … 74 75 ENDDO 75 76 ENDDO 76 ! 77 77 78 IF (lminmax) THEN 78 79 CALL minmaxqfi(aux_var1, qmin, qmax, 'depot humide bc lsc') 79 80 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide bc lsc') 80 81 ENDIF 81 ! 82 82 83 !-scheme for convective scavenging 83 ! 84 84 85 !nhl CALL bcscav_spl(pdtphys,pmflxr,pmflxs,alpha_r(it),alpha_s(it), 85 86 !nhl . tr_seri(1,1,it),d_tr(1,1,it)) … … 89 90 90 91 91 ! 92 92 93 DO i = 1, klon 93 94 DO j = 1, klev … … 96 97 ENDDO 97 98 ENDDO 98 ! 99 99 100 DO k = 1, klev 100 101 DO i = 1, klon … … 104 105 ENDDO 105 106 ENDDO 106 ! 107 107 108 IF (lminmax) THEN 108 109 DO j = 1, klev … … 119 120 ENDDO 120 121 ENDIF 121 ! 122 ! 122 123 123 124 ENDDO !--boucle sur it 124 ! 125 125 126 END SUBROUTINE blcloud_scav -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/blcloud_scav_lsc.f90
r5144 r5159 10 10 USE lmdz_yomcst 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 14 INCLUDE "dimensions.h" 16 15 17 INCLUDE "chem.h" 16 INCLUDE "paramet.h" 18 17 19 18 20 !============================= INPUT =================================== … … 40 42 41 43 DO it = 1, nbtr 42 ! 44 43 45 DO j = 1, klev 44 46 DO i = 1, klon … … 47 49 ENDDO 48 50 ENDDO 49 ! 51 50 52 !nhl CALL bcscav_spl(pdtphys,prfl,psfl,alpha_r(it),alpha_s(it), 51 53 !nhl . tr_seri(1,1,it),d_tr(1,1,it)) 52 54 CALL bcscav_spl(pdtphys, prfl, psfl, alpha_r(it), alpha_s(it), & 53 55 aux_var1, aux_var2) 54 ! 56 55 57 DO j = 1, klev 56 58 DO i = 1, klon … … 67 69 ENDDO 68 70 ENDDO 69 ! 71 70 72 DO i = 1, klon 71 73 DO j = 1, klev … … 74 76 ENDDO 75 77 ENDDO 76 ! 78 77 79 IF (lminmax) THEN 78 80 CALL minmaxqfi(aux_var1, qmin, qmax, 'depot humide bc lsc') 79 81 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide bc lsc') 80 82 ENDIF 81 ! 83 82 84 !-scheme for convective scavenging 83 ! 85 84 86 !nhl CALL bcscav_spl(pdtphys,pmflxr,pmflxs,alpha_r(it),alpha_s(it), 85 87 !nhl . tr_seri(1,1,it),d_tr(1,1,it)) … … 90 92 91 93 92 ! 94 93 95 DO i = 1, klon 94 96 DO j = 1, klev … … 97 99 ENDDO 98 100 ENDDO 99 ! 101 100 102 DO k = 1, klev 101 103 DO i = 1, klon … … 105 107 ENDDO 106 108 ENDDO 107 ! 109 108 110 IF (lminmax) THEN 109 111 DO j = 1, klev … … 120 122 ENDDO 121 123 ENDIF 122 ! 123 ! 124 125 124 126 ENDDO !--boucle sur it 125 ! 127 126 128 END SUBROUTINE blcloud_scav_lsc -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/cltrac_spl.f90
r5144 r5159 3 3 USE dimphy 4 4 USE lmdz_yomcst 5 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 5 6 6 7 IMPLICIT NONE … … 27 28 ! flux_tr--output-R- flux de tr 28 29 !====================================================================== 29 INCLUDE "dimensions.h"30 30 REAL :: dtime 31 31 REAL :: coef(klon, klev) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/cm3_to_kg.f90
r5144 r5159 6 6 USE lmdz_yomcst 7 7 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 8 9 IMPLICIT NONE 9 10 10 INCLUDE "dimensions.h" 11 11 12 12 13 REAL :: t_seri(klon, klev), pplay(klon, klev) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/coarsemission.f90
r5144 r5159 32 32 USE lmdz_yomcst 33 33 34 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 35 USE lmdz_paramet 34 36 IMPLICIT NONE 35 37 36 INCLUDE "dimensions.h" 38 37 39 INCLUDE "chem.h" 38 40 INCLUDE "chem_spla.h" 39 INCLUDE "paramet.h" 41 40 42 41 43 !============================== INPUT ================================== … … 56 58 REAL, DIMENSION(klon), INTENT(IN) :: wstar, Ale_bl, ale_wake 57 59 58 ! 60 59 61 !------------------------- Scaling Parameters -------------------------- 60 ! 62 61 63 INTEGER :: iregion_dust(klon) !Defines dust regions 62 64 REAL :: scale_param_ssacc !Scaling parameter for Fine Sea Salt … … 90 92 !---------------------------- SEA SALT emissions ------------------------ 91 93 REAL :: lmt_sea_salt(klon, ss_bins) !Sea salt 0.03-8.0 um 92 ! 94 93 95 !--------vent 10 m CEPMMT 94 ! 96 95 97 REAL :: dust_ec(klon) 96 98 … … 104 106 105 107 ! avgdryrate=300./365.*pdtphys/86400. 106 ! 108 107 109 ! DO i=1, klon 108 ! 110 109 111 ! IF (cly(i).LT.9990..AND.wth(i).LT.9990.) THEN 110 112 ! zprecipinsoil(i)=zprecipinsoil(i) + 111 113 ! . (pmflxr(i,1)+pmflxs(i,1)+prfl(i,1)+psfl(i,1))*pdtphys 112 ! 114 113 115 ! clyfac=MIN(16., cly(i)*0.4+8.) ![mm] max amount of water hold in top soil 114 116 ! drying=avgdryrate*exp(0.03905491* 115 117 ! . exp(0.17446*(t_seri(i,1)-273.15))) ! [mm] 116 118 ! zprecipinsoil(i)=min(max(0.,zprecipinsoil(i)-drying),clyfac) ! [mm] 117 ! 119 118 120 ! ENDIF 119 ! 121 120 122 ! ENDDO 121 ! 123 122 124 ! ==================== CALCULATING DUST EMISSIONS ====================== 123 ! 125 124 126 ! IF (lminmax) THEN 125 127 DO j = 1, nbtr … … 133 135 ! ENDIF 134 136 135 ! 137 136 138 IF (.NOT. ok_chimeredust) THEN 137 139 DO i = 1, klon … … 259 261 pct_ocean(i) = pctsrf(i, is_oce) 260 262 ENDDO 261 ! 263 262 264 ! IF (lminmax) THEN 263 265 DO j = 1, nbtr … … 287 289 IF(id_coss>0) flux_tr(i, id_coss) = & 288 290 scale_param_sscoa * lmt_sea_salt(i, 2) * 1.e4 * 1.e3 !mg/m2/s 289 ! 291 290 292 flux_sparam_ssfine(i) = scale_param_ssacc * & 291 293 lmt_sea_salt(i, 1) * 1.e4 * 1.e3 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/condsurfc.f90
r5134 r5159 5 5 USE dimphy 6 6 USE netcdf, ONLY: nf90_close, nf90_noerr, nf90_inq_varid, nf90_open, nf90_nowrite, nf90_get_var 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 … … 10 11 ! -------------------------------------------------------- 11 12 12 INCLUDE "dimensions.h" 13 13 14 14 15 REAL :: lmt_bcff(klon), lmt_bcbb(klon), lmt_bc_penner(klon) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/condsurfc_new.f90
r5134 r5159 7 7 USE dimphy 8 8 USE netcdf, ONLY: nf90_get_var, nf90_close, nf90_noerr, nf90_inq_varid, nf90_open, nf90_nowrite 9 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 9 10 IMPLICIT NONE 10 11 … … 12 13 ! -------------------------------------------------------- 13 14 14 INCLUDE "dimensions.h" 15 15 16 16 17 REAL :: lmt_bcff(klon), lmt_bcnff(klon), lmt_bcba(klon) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/condsurfs.f90
r5134 r5159 6 6 USE netcdf, ONLY: nf90_close, nf90_noerr, nf90_inq_varid, nf90_open, & 7 7 nf90_nowrite, nf90_get_var 8 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 8 9 IMPLICIT NONE 9 10 … … 11 12 ! -------------------------------------------------------- 12 13 13 INCLUDE "dimensions.h" 14 14 15 15 16 REAL :: lmt_so2h(klon), lmt_so2b(klon), lmt_so2bb(klon) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/condsurfs_new.f90
r5134 r5159 10 10 USE dimphy 11 11 USE netcdf, ONLY: nf90_get_var, nf90_inq_varid, nf90_close, nf90_noerr, nf90_open, nf90_nowrite 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 12 13 IMPLICIT NONE 13 14 … … 15 16 ! -------------------------------------------------------- 16 17 17 INCLUDE "dimensions.h" 18 18 19 19 20 REAL :: lmt_so2b(klon), lmt_so2h(klon), lmt_so2nff(klon) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/deposition.f90
r5144 r5159 11 11 USE lmdz_yomcst 12 12 13 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 14 USE lmdz_paramet 13 15 IMPLICIT NONE 14 16 15 INCLUDE "dimensions.h" 17 16 18 INCLUDE "chem.h" 17 INCLUDE "paramet.h" 19 18 20 19 21 !----------------------------- INPUT ----------------------------------- … … 53 55 ENDDO 54 56 ENDDO 55 ! 57 56 58 END SUBROUTINE deposition -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/finemission.f90
r5144 r5159 17 17 USE lmdz_yomcst 18 18 19 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 20 USE lmdz_paramet 19 21 IMPLICIT NONE 20 22 21 INCLUDE "dimensions.h" 23 22 24 INCLUDE "chem.h" 23 INCLUDE "paramet.h" 25 24 26 25 27 INTEGER :: i, k, kminbc, kmaxbc … … 28 30 REAL :: zalt(klon, klev) 29 31 REAL :: zdz(klon, klev) 30 ! 32 31 33 !------------------------- Scaling Parameters -------------------------- 32 ! 34 33 35 INTEGER :: nbreg_ind, nbreg_bb 34 36 INTEGER :: iregion_ind(klon) !Defines regions for SO2, BC & OM … … 71 73 scale_param_ff(iregion_ind(i)) * lmt_omff(i) & 72 74 ) * 1.e4 !g/m2/s 73 ! 75 74 76 IF(id_fine>0) flux_tr(i, id_fine) = flux_tr(i, id_fine) + & 75 77 (scale_param_ff(iregion_ind(i)) * lmt_bcff(i) + & !mg/m2/s 76 78 scale_param_ff(iregion_ind(i)) * lmt_omff(i) & 77 79 ) * 1.e4 * 1.e3 !mg/m2/s 78 ! 80 79 81 flux_sparam_ff(i) = flux_sparam_ff(i) + & 80 82 scale_param_ff(iregion_ind(i)) * & … … 87 89 scale_param_bb(iregion_bb(i)) * lmt_ombb_l(i) & !g/m2/s 88 90 ) * 1.e4 !g/m2/s 89 ! 91 90 92 IF(id_fine>0) flux_tr(i, id_fine) = flux_tr(i, id_fine) + & 91 93 (scale_param_bb(iregion_bb(i)) * lmt_bcbb_l(i) + & !mg/m2/s … … 94 96 scale_param_bb(iregion_bb(i)) * lmt_ombb_h(i) & !mg/m2/s 95 97 ) * 1.e4 * 1.e3 !mg/m2/s 96 ! 98 97 99 flux_sparam_bb(i) = flux_sparam_bb(i) + & 98 100 scale_param_bb(iregion_bb(i)) * (lmt_bcbb_l(i) + & … … 103 105 (lmt_bcnff(i) + lmt_bcba(i) + lmt_omnff(i) + & 104 106 lmt_omnat(i) + lmt_omba(i)) * 1.e4 !g/m2/s 105 ! 107 106 108 IF(id_fine>0) flux_tr(i, id_fine) = flux_tr(i, id_fine) + & 107 109 (lmt_bcnff(i) + lmt_omnff(i) + lmt_omnat(i) + & 108 110 lmt_omba(i) + lmt_bcba(i)) * 1.e4 * 1.e3 !mg/m2/s 109 ! 111 110 112 flux_sparam_ff(i) = flux_sparam_ff(i) + & 111 113 (lmt_omba(i) + lmt_bcba(i)) * 1.e4 * 1.e3 … … 118 120 ! Sources hautes de BC/OM 119 121 120 ! 122 121 123 ! HIGH LEVEL EMISSIONS OF SO2 ARE IN PRECUREMISSION.F 122 ! 124 123 125 k = 2 !introducing emissions in level 2 124 126 !nhl DO i = 1, klon 125 ! 127 126 128 !nhl tr_seri(i,k,id_fine)=tr_seri(i,k,id_fine)+scale_param_ff(iregion_ind(i))* 127 129 !nhl . (lmt_bcff_h(i)+lmt_omff_h(i))/zdz(i,k)/100.*pdtphys 128 ! 130 129 131 !nhl ENDDO 130 132 … … 132 134 DO i = 1, klon 133 135 zzdz = zalt(i, kmaxbc + 1) - zalt(i, kminbc) 134 ! 136 135 137 IF (iregion_bb(i) >0) THEN 136 138 IF(id_fine>0) tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) + & … … 139 141 / zzdz / 100. * pdtphys 140 142 ENDIF 141 ! 143 142 144 ENDDO 143 145 ENDDO 144 ! 146 145 147 END SUBROUTINE finemission -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/gastoparticle.f90
r5144 r5159 10 10 USE lmdz_yomcst 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 12 13 IMPLICIT NONE 13 14 ! 14 INCLUDE "dimensions.h" 15 15 16 INCLUDE "chem.h" 16 17 INCLUDE "chem_spla.h" 17 ! 18 18 19 REAL :: pdtphys 19 20 REAL :: zrho(klon, klev) … … 32 33 REAL :: tend2d(klon, klev) 33 34 INTEGER :: id_prec, id_fine 34 ! 35 35 36 !------------------------- Scaling Parameter -------------------------- 36 ! 37 37 38 ! REAL scale_param_so4(klon) !Scaling parameter for sulfate 38 39 39 40 INTEGER :: i, k 40 41 REAL :: tau_chem !---chemical lifetime in s 41 ! 42 42 43 !------------------------- Variables to save -------------------------- 43 ! 44 44 45 !nhl REAL fluxso4chem(klon,klev) 45 46 !nhl REAL flux_sparam_sulf(klon,klev) … … 47 48 !====================================================================== 48 49 pi = atan(1.) * 4. 49 ! 50 50 51 IF (id_prec>0 .AND. id_fine>0) THEN 51 52 DO k = 1, klev 52 53 DO i = 1, klon 53 ! 54 54 55 ! tau_chem=scale_param_so4(i)*86400.*(8.-5.*cos(xlat(i)*pi/180.)) !tchemfctn2 55 56 !nhl tau_chem=86400.*(8.-5.*cos(xlat(i)*pi/180.)) !tchemfctn2 … … 58 59 !nhl tend=(1.-exp(-pdtphys/tau_chem)) 59 60 !nhl tend=scale_param_so4(i) !as this it works 60 ! 61 61 62 tr_seri(i, k, id_prec) = tr_seri(i, k, id_prec) - tend 62 63 tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) + & 63 64 tend / RNAVO * masse_ammsulfate !--gAER/KgAir 64 65 tend2d(i, k) = tend 65 ! 66 66 67 !nhl fluxso4chem(i,k) = tend/RNAVO*masse_ammsulfate 67 68 !nhl flux_sparam_sulf(i,k) = tend/RNAVO*masse_ammsulfate -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/incloud_scav.f90
r5144 r5159 10 10 USE lmdz_yomcst 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 14 INCLUDE "dimensions.h"15 16 INCLUDE "chem.h" 16 INCLUDE "paramet.h" 17 17 18 18 19 !============================= INPUT =================================== … … 44 45 45 46 DO it = 1, nbtr 46 ! 47 47 48 DO i = 1, klon 48 49 aux_var2(i) = his_dhlsc(i, it) … … 54 55 ENDDO 55 56 ENDDO 56 ! 57 57 58 IF (lminmax) THEN 58 59 CALL minmaxqfi(aux_var1, qmin, qmax, 'avt inscav') 59 60 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'avt inscav') 60 61 ENDIF 61 ! 62 62 63 !nhl CALL inscav_spl(pdtphys,it,masse(it),henry(it),kk(it),0.5e-3, 63 64 !nhl . prfl,psfl,zrho,zdz,t_seri,tr_seri(1,1,it), … … 65 66 CALL inscav_spl(pdtphys, it, masse(it), henry(it), kk(it), 0.5e-3, & 66 67 prfl, psfl, zrho, zdz, t_seri, aux_var1, aux_var2) 67 ! 68 68 69 IF (lminmax) THEN 69 70 CALL minmaxqfi(aux_var1, qmin, qmax, 'depot humide lsc') 70 71 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide lsc') 71 72 ENDIF 72 ! 73 ! 73 74 74 75 !-scheme for convective in-cloud scavenging 75 ! 76 76 77 !nhl CALL inscav_spl(pdtphys,it,masse(it),henry(it),kk(it),1.e-3, 77 78 !nhl . pmflxr,pmflxs,zrho,zdz,t_seri,tr_seri(1,1,it), … … 79 80 CALL inscav_spl(pdtphys, it, masse(it), henry(it), kk(it), 1.e-3, & 80 81 pmflxr, pmflxs, zrho, zdz, t_seri, aux_var1, aux_var3) 81 ! 82 82 83 IF (lminmax) THEN 83 84 CALL minmaxqfi(aux_var1, qmin, qmax, 'depot humide con') 84 85 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide con') 85 86 ENDIF 86 ! 87 87 88 DO j = 1, klev 88 89 DO i = 1, klon … … 95 96 ENDDO 96 97 97 ! 98 98 99 ENDDO !--boucle sur it 99 100 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/incloud_scav_lsc.f90
r5144 r5159 10 10 USE lmdz_yomcst 11 11 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 14 INCLUDE "dimensions.h" 16 15 17 INCLUDE "chem.h" 16 INCLUDE "paramet.h" 18 17 19 18 20 !============================= INPUT =================================== … … 43 45 EXTERNAL minmaxqfi, inscav_spl 44 46 DO it = 1, nbtr 45 ! 47 46 48 DO i = 1, klon 47 49 aux_var2(i) = his_dhlsc(i, it) … … 53 55 ENDDO 54 56 ENDDO 55 ! 57 56 58 IF (lminmax) THEN 57 59 CALL minmaxqfi(aux_var1, qmin, qmax, 'avt inscav') 58 60 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'avt inscav') 59 61 ENDIF 60 ! 62 61 63 !nhl CALL inscav_spl(pdtphys,it,masse(it),henry(it),kk(it),0.5e-3, 62 64 !nhl . prfl,psfl,zrho,zdz,t_seri,tr_seri(1,1,it), … … 64 66 CALL inscav_spl(pdtphys, it, masse(it), henry(it), kk(it), 0.5e-3, & 65 67 prfl, psfl, zrho, zdz, t_seri, aux_var1, aux_var2) 66 ! 68 67 69 IF (lminmax) THEN 68 70 CALL minmaxqfi(aux_var1, qmin, qmax, 'depot humide lsc') 69 71 !nhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide lsc') 70 72 ENDIF 71 ! 72 ! 73 74 73 75 !-scheme for convective in-cloud scavenging 74 ! 76 75 77 !nhl CALL inscav_spl(pdtphys,it,masse(it),henry(it),kk(it),1.e-3, 76 78 !nhl . pmflxr,pmflxs,zrho,zdz,t_seri,tr_seri(1,1,it), … … 79 81 ! print *,'JE inscav0' 80 82 ! IF (iflag_con.LT.3) THEN 81 ! 83 82 84 ! print *,'JE inscav1' 83 85 ! print *,'iflag_con',iflag_con 84 86 ! CALL inscav_spl(pdtphys,it,masse(it),henry(it),kk(it),1.e-3, 85 87 ! . pmflxr,pmflxs,zrho,zdz,t_seri,aux_var1,aux_var3) 86 ! 88 87 89 !c 88 90 ! IF (lminmax) THEN 89 91 ! CALL minmaxqfi(aux_var1,qmin,qmax,'depot humide con') 90 92 !cnhl CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'depot humide con') 91 ! 93 92 94 ! ENDIF 93 ! 95 94 96 ! ENDIF ! iflag_con 95 97 96 ! 98 97 99 ! print *,'JE inscav2' 98 100 DO j = 1, klev … … 106 108 ENDDO 107 109 108 ! 110 109 111 ENDDO !--boucle sur it 110 112 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/inscav_spl.f90
r5144 r5159 5 5 USE lmdz_yomcst 6 6 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 !===================================================================== … … 12 13 !===================================================================== 13 14 ! 14 INCLUDE "dimensions.h" 15 15 16 INCLUDE "chem.h" 16 ! 17 17 18 INTEGER :: it 18 19 REAL :: pdtime ! pas de temps (s) … … 32 33 REAL :: x(klon, klev) ! q de traceur 33 34 REAL :: his_dh(klon) ! tendance de traceur integre verticalement 34 ! 35 35 36 !--variables locales 36 37 INTEGER :: i, k 37 ! 38 38 39 REAL :: dx ! tendance de traceur 39 40 REAL :: f_a !--rapport de la phase aqueuse a la phase gazeuse … … 54 55 !--101.325 m3/l x Pa/atm 55 56 !--R Pa.m3/mol/K 56 ! 57 57 58 !------------------------------------------ 58 ! 59 59 60 !nhl IF (it.EQ.2.OR.it.EQ.3) THEN !--aerosol ! AS IT WAS FIRST 60 61 IF (it==2.OR.it==3.OR.it==4) THEN !--aerosol … … 63 64 frac = frac_gas 64 65 ENDIF 65 ! 66 66 67 IF (it==1) THEN 67 68 DO k = 1, klev … … 97 98 STOP 98 99 ENDIF 99 ! 100 100 101 ! NHL 101 102 ! Auxiliary variables defined to deal with the fact that precipitation -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/kg_to_cm3.f90
r5144 r5159 5 5 USE lmdz_yomcst 6 6 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 9 INCLUDE "dimensions.h" 10 10 11 11 12 REAL :: t_seri(klon, klev), pplay(klon, klev) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/lsc_scav_orig.F90
r5142 r5159 14 14 USE lmdz_YOECUMF 15 15 16 IMPLICIT NONE 16 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 17 IMPLICIT NONE 17 18 !===================================================================== 18 19 ! Objet : depot humide (lessivage et evaporation) de traceurs … … 22 23 !===================================================================== 23 24 24 INCLUDE "dimensions.h" 25 25 26 INCLUDE "chem.h" 26 27 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/lsc_scav_spl.F90
r5142 r5159 16 16 USE lmdz_YOECUMF 17 17 18 IMPLICIT NONE 18 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 19 IMPLICIT NONE 19 20 !===================================================================== 20 21 ! Objet : depot humide (lessivage et evaporation) de traceurs … … 25 26 ! SPLA version taken from trunk revision 2041 26 27 27 INCLUDE "dimensions.h" 28 28 29 INCLUDE "chem.h" 29 30 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/minmaxqfi2.f90
r5158 r5159 1 1 SUBROUTINE minmaxqfi2(zq, qmin, qmax, comment) 2 ! 2 3 3 USE dimphy 4 4 USE infotrac 5 5 USE lmdz_libmath, ONLY: ismax, ismin 6 6 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 9 INCLUDE "dimensions.h" 10 10 11 11 12 ! CHARACTER*20 comment -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/minmaxsource.f90
r5158 r5159 5 5 USE lmdz_libmath, ONLY: ismax, ismin 6 6 7 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 8 IMPLICIT NONE 8 9 9 INCLUDE "dimensions.h" 10 10 11 11 12 ! CHARACTER*20 comment -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/neutral.f90
r5158 r5159 26 26 ! be 0. The flux is then set to 0. 27 27 !---------------------------------------------------------------------- 28 ! 28 29 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 29 30 USE dimphy 30 INCLUDE "dimensions.h" 31 ! 31 32 32 33 REAL :: u10_mps(klon), ustar_mps(klon), obklen_m(klon) 33 34 REAL :: u10n_mps(klon) … … 36 37 ! pour etre coherent avec vk de bl_for_dms.F 37 38 parameter (pi = 3.141592653589793, von_karman = 0.35) 38 ! 39 39 40 REAL :: phi, phi_inv, phi_inv_sq, f1, f2, f3, dum1, psi 40 41 INTEGER :: i -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/nightingale.f90
r5144 r5159 2 2 cdragh, cdragm, t, q, ftsol, tsol, & 3 3 pctsrf, lmt_dmsconc, lmt_dms) 4 ! 4 5 5 USE dimphy 6 6 USE indice_sol_mod 7 7 USE lmdz_yomcst 8 8 9 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 9 10 IMPLICIT NONE 10 11 ! 11 INCLUDE "dimensions.h" 12 ! 12 13 13 14 REAL :: u(klon, klev), v(klon, klev) 14 15 REAL :: u_10m(klon), v_10m(klon) … … 22 23 REAL :: lmt_dmsconc(klon) ! concentration oceanique DMS 23 24 REAL :: lmt_dms(klon) ! flux de DMS 24 ! 25 25 26 REAL :: ustar(klon), obklen(klon) 26 27 REAL :: u10(klon), u10n(klon) … … 28 29 REAL :: t1, t2, t3, t4, viscosity_kin, diffusivity, schmidt 29 30 INTEGER :: i 30 ! 31 31 32 CALL bl_for_dms(u, v, paprs, pplay, cdragh, cdragm, & 32 33 t, q, tsol, ustar, obklen) 33 ! 34 34 35 DO i = 1, klon 35 36 u10(i) = SQRT(u_10m(i)**2 + v_10m(i)**2) 36 37 ENDDO 37 ! 38 38 39 CALL neutral(u10, ustar, obklen, u10n) 39 ! 40 40 41 DO i = 1, klon 41 ! 42 42 43 ! tvelocity - transfer velocity, also known as kw (cm/s) 43 44 ! schmidt_corr - Schmidt number correction factor (dimensionless) … … 47 48 ! volatile tracers.' Glob. Biogeochem. Cycles, 14:373-387, 2000. 48 49 ! compute transfer velocity using u10neutral 49 ! 50 50 51 tvelocity = 0.222 * u10n(i) * u10n(i) + 0.333 * u10n(i) 51 ! 52 52 53 ! above expression gives tvelocity in cm/hr. convert to cm/s. 1hr =3600 sec 53 54 … … 74 75 schmidt = viscosity_kin / diffusivity 75 76 schmidt_corr = (schmidt / 600.)**(-.5) 76 ! 77 77 78 lmt_dms(i) = tvelocity * pctsrf(i, is_oce) & 78 79 * lmt_dmsconc(i) / 1.0e12 * schmidt_corr * RNAVO 79 ! 80 80 81 IF (lmt_dmsconc(i)<=1.e-20) lmt_dms(i) = 0.0 81 ! 82 82 83 ENDDO 83 ! 84 84 85 END SUBROUTINE nightingale -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/phys_output_write_spl_mod.F90
r5139 r5159 400 400 USE lmdz_compbl, ONLY: iflag_pbl, iflag_pbl_split, iflag_order2_sollw, ifl_pbltree 401 401 402 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 402 403 IMPLICIT NONE 403 404 404 405 ! INCLUDE "temps.h" 405 INCLUDE "dimensions.h" 406 406 407 407 408 ! Input -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/phytracr_spl_mod.F90
r5158 r5159 800 800 USE lmdz_alpale 801 801 USE lmdz_yoethf 802 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 803 USE lmdz_paramet 802 804 803 805 IMPLICIT NONE … … 814 816 !! et c'est encore different avec le parser de DC ? 815 817 !====================================================================== 816 INCLUDE "dimensions.h"817 818 INCLUDE "chem.h" 818 819 INCLUDE "chem_spla.h" 819 INCLUDE "paramet.h"820 820 821 821 !====================================================================== -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/precuremission.f90
r5144 r5159 22 22 USE lmdz_yomcst 23 23 24 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 25 USE lmdz_paramet 24 26 IMPLICIT NONE 25 27 26 INCLUDE "dimensions.h" 28 27 29 INCLUDE "chem.h" 28 30 INCLUDE "chem_spla.h" 29 INCLUDE "paramet.h" 31 30 32 31 33 !============================= INPUT =================================== … … 48 50 LOGICAL :: edgar, bateau 49 51 INTEGER :: id_prec, id_fine 50 ! 52 51 53 !------------------------- Scaling Parameters -------------------------- 52 ! 54 53 55 INTEGER :: nbreg_ind, nbreg_bb 54 56 INTEGER :: iregion_ind(klon) !Defines regions for SO2, BC & OM … … 56 58 REAL :: scale_param_bb(nbreg_bb) !Scaling parameter for biomas burning 57 59 REAL :: scale_param_ind(nbreg_ind) !Scaling parameter for industrial emissions 58 ! 60 59 61 !============================= OUTPUT ================================== 60 ! 62 61 63 REAL :: source_tr(klon, nbtr) 62 64 REAL :: flux_tr(klon, nbtr) … … 112 114 + scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) * 1.e4 & 113 115 * frach2sofso2 ! molec/m2/s 114 ! 116 115 117 IF(id_fine>0) source_tr(i, id_fine) = & 116 118 source_tr(i, id_fine) + (1 - fracso2emis) & 117 119 * scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) & 118 120 * 1.e4 * masse_ammsulfate / RNAVO ! g/m2/s 119 ! 121 120 122 IF(id_prec>0) flux_tr(i, id_prec) = flux_tr(i, id_prec) + (& 121 123 scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + & … … 126 128 * fracso2emis & 127 129 ) * 1.e4 / RNAVO * masse_s * 1.e3 ! mgS/m2/s 128 ! 130 129 131 IF(id_fine>0) flux_tr(i, id_fine) = & 130 132 flux_tr(i, id_fine) + (1 - fracso2emis) & … … 132 134 lmt_so2ff_h(i)) & 133 135 * 1.e4 / RNAVO * masse_ammsulfate * 1.e3 ! mgS/m2/s 134 ! 136 135 137 flux_sparam_ind(i) = flux_sparam_ind(i) + (1 - fracso2emis) & 136 138 * scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + & … … 143 145 * scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) & 144 146 * (1. - pctsrf(i, is_oce)) * 1.e4 145 ! 147 146 148 IF(id_fine>0) source_tr(i, id_fine) = & 147 149 source_tr(i, id_fine) + (1 - fracso2emis) & … … 149 151 (1. - pctsrf(i, is_oce)) * 1.e4 * & 150 152 masse_ammsulfate / RNAVO ! g/m2/s 151 ! 153 152 154 IF(id_prec>0) flux_tr(i, id_prec) = flux_tr(i, id_prec) + & 153 155 (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) & … … 155 157 * (1. - pctsrf(i, is_oce)) * fracso2emis & 156 158 * 1.e4 / RNAVO * masse_s * 1.e3 ! mgS/m2/s 157 ! 159 158 160 IF(id_fine>0) flux_tr(i, id_fine) = & 159 161 flux_tr(i, id_fine) + (1 - fracso2emis) & … … 162 164 * (1. - pctsrf(i, is_oce)) & 163 165 * 1.e4 / RNAVO * masse_ammsulfate * 1.e3 ! mgS/m2/s 164 ! 166 165 167 flux_sparam_bb(i) = & 166 168 scale_param_bb(iregion_bb(i)) * (lmt_so2bb_l(i) + & … … 179 181 + (lmt_h2sbio(i) & 180 182 + lmt_dms(i) + lmt_dmsbio(i)) * 1.e4 ! molec/m2/s 181 ! 183 182 184 IF(id_fine>0) source_tr(i, id_fine) = source_tr(i, id_fine) & 183 185 + (1 - fracso2emis) & 184 186 * (lmt_so2ba(i) + lmt_so2nff(i)) * 1.e4 * & 185 187 masse_ammsulfate / RNAVO ! g/m2/s 186 ! 188 187 189 IF(id_prec>0) flux_tr(i, id_prec) = flux_tr(i, id_prec) & 188 190 + (lmt_h2sbio(i) & … … 191 193 + lmt_dms(i) + lmt_dmsbio(i)) & 192 194 * 1.e4 / RNAVO * masse_s * 1.e3 ! mgS/m2/s 193 ! 195 194 196 IF(id_fine>0) flux_tr(i, id_fine) = flux_tr(i, id_fine) & 195 197 + (1 - fracso2emis) & 196 198 * (lmt_so2ba(i) + lmt_so2nff(i)) & 197 199 * 1.e4 / RNAVO * masse_ammsulfate * 1.e3 ! mgS/m2/s 198 ! 200 199 201 flux_sparam_ind(i) = flux_sparam_ind(i) + (1 - fracso2emis) & 200 202 * lmt_so2nff(i) & 201 203 * 1.e4 / RNAVO * masse_ammsulfate * 1.e3 ! mgS/m2/s 202 ! 204 203 205 ENDDO 204 206 … … 228 230 ! Sources hautes de SO2 229 231 230 ! 232 231 233 !--only GEIA SO2 emissions has high emissions 232 234 !--unit: molec/cm2/s divided by layer height (in cm) multiplied by timestep 233 ! 235 234 236 k = 2 !introducing emissions in level 2 235 237 DO i = 1, klon 236 ! 238 237 239 IF (iregion_bb(i)>0) THEN 238 240 IF(id_prec>0) tr_seri(i, k, id_prec) = & … … 240 242 * scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i) & 241 243 / zdz(i, k) / 100. * pdtphys 242 ! 244 243 245 IF(id_fine>0) tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) & 244 246 + (1. - fracso2emis) & … … 253 255 * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i)) & 254 256 / zdz(i, k) / 100. * pdtphys 255 ! 257 256 258 IF(id_fine>0) tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) & 257 259 + (1. - fracso2emis) & … … 259 261 * masse_ammsulfate / RNAVO / zdz(i, k) / 100. * pdtphys !g/cm3 260 262 ENDIF 261 ! 263 262 264 ENDDO 263 265 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/read_dust.f90
r5117 r5159 4 4 USE lmdz_phys_para 5 5 USE netcdf, ONLY: nf90_get_var, nf90_nowrite, nf90_open, nf90_inq_varid 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 6 8 IMPLICIT NONE 7 9 8 INCLUDE "dimensions.h" 9 INCLUDE "paramet.h" 10 11 10 12 11 13 INTEGER :: step, nbjour -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/read_newemissions.f90
r5119 r5159 1 1 ! Routine to read the emissions of the different species 2 ! 2 3 3 SUBROUTINE read_newemissions(julien, jH_emi, edgar, flag_dms, & 4 4 debutphy, & … … 24 24 USE lmdz_ssum_scopy, ONLY: scopy 25 25 26 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 27 USE lmdz_paramet 26 28 IMPLICIT NONE 27 29 28 INCLUDE "dimensions.h" 29 INCLUDE 'paramet.h' 30 31 30 32 INCLUDE 'chem.h' 31 33 INCLUDE 'chem_spla.h' … … 43 45 REAL :: xlon(klon) ! longitudes pour chaque point 44 46 45 ! 47 46 48 ! Emissions: 47 49 ! --------- 48 ! 50 49 51 !---------------------------- SEA SALT & DUST emissions ------------------------ 50 52 REAL :: lmt_sea_salt(klon, ss_bins) !Sea salt 0.03-8.0 um !NOT SAVED OK … … 100 102 REAL, SAVE, ALLOCATABLE :: lmt_dms(:) ! emissions de dms 101 103 !$OMP THREADPRIVATE(lmt_dms) 102 ! 104 103 105 ! Lessivage 104 106 ! --------- 105 ! 107 106 108 REAL :: pmflxr(klon, klev + 1), pmflxs(klon, klev + 1) !--convection 107 109 REAL :: prfl(klon, klev + 1), psfl(klon, klev + 1) !--large-scale 108 110 ! REAL pmflxr(klon,klev), pmflxs(klon,klev) !--convection 109 111 ! REAL prfl(klon,klev), psfl(klon,klev) !--large-scale 110 ! 112 111 113 ! Variable interne 112 114 ! ---------------- 113 ! 115 114 116 INTEGER :: icount 115 117 REAL :: tau_1, tau_2 116 118 REAL :: max_flux, min_flux 117 119 INTRINSIC MIN, MAX 118 ! 120 119 121 ! JE: Changes due to new pdtphys in new physics. 120 122 ! REAL windintime ! time in hours of the wind input files resolution … … 145 147 IF (.NOT. ALLOCATED(lmt_dms)) ALLOCATE(lmt_dms(klon)) 146 148 ! end je nov2013 147 ! 149 148 150 !*********************************************************************** 149 151 ! DUST EMISSIONS 150 152 !*********************************************************************** 151 ! 153 152 154 IF (debutphy) THEN 153 155 !---Fields are read only at the beginning of the period … … 233 235 dust_ec(i) = tau_1 * dust_ec1(i) + tau_2 * dust_ec2(i) 234 236 ENDDO 235 ! 237 236 238 !JE IF (test_vent.EQ.(6*2)) THEN 237 239 !JE PRINT *,'6 hrs interval reached' … … 251 253 ! . ,jH_vent 252 254 ! endJEi 253 ! 255 254 256 avgdryrate = 300. / 365. * pdtphys / 86400. 255 ! 257 256 258 DO i = 1, klon 257 ! 259 258 260 IF (cly(i)<9990..AND.wth(i)<9990.) THEN 259 261 zprecipinsoil(i) = zprecipinsoil(i) + & 260 262 (pmflxr(i, 1) + pmflxs(i, 1) + prfl(i, 1) + psfl(i, 1)) * pdtphys 261 ! 263 262 264 clyfac = MIN(16., cly(i) * 0.4 + 8.) ![mm] max amount of water hold in top soil 263 265 drying = avgdryrate * exp(0.03905491 * & … … 282 284 ENDIF 283 285 ENDDO 284 ! 286 285 287 print *, 'Total N of grids with surpressed emission = ', icount 286 288 print *, 'dust_ec = ', SUM(dust_ec), MINVAL(dust_ec), & … … 295 297 296 298 IF (lafinphy) THEN 297 ! 299 298 300 CALL gather(zprecipinsoil, zprecipinsoil_glo) 299 301 !$OMP MASTER … … 307 309 !$OMP END MASTER 308 310 !$OMP BARRIER 309 ! 311 310 312 ENDIF 311 ! 313 312 314 !*********************************************************************** 313 315 ! SEA SALT EMISSIONS 314 316 !*********************************************************************** 315 ! 317 316 318 DO i = 1, klon 317 319 pct_ocean(i) = pctsrf(i, is_oce) … … 322 324 ! print *,'SUM, MAX & MIN Sea Salt = ',SUM(lmt_sea_salt), 323 325 ! . MAXVAL(lmt_sea_salt),MINVAL(lmt_sea_salt) 324 ! 326 325 327 !*********************************************************************** 326 328 ! SULFUR & CARBON EMISSIONS -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/read_surface.F90
r5158 r5159 10 10 USE iophy 11 11 USE netcdf, ONLY:nf90_inq_varid,nf90_noerr,nf90_get_var,nf90_nowrite,nf90_inq_varid,nf90_open 12 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 13 USE lmdz_paramet 12 14 IMPLICIT NONE 13 15 14 INCLUDE "dimensions.h" 15 INCLUDE "paramet.h" 16 17 16 18 17 19 CHARACTER*10 name -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/read_vent.f90
r5158 r5159 4 4 USE lmdz_phys_para 5 5 USE netcdf, ONLY: nf90_get_var, nf90_open, nf90_inq_varid, nf90_nowrite 6 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 7 USE lmdz_paramet 6 8 IMPLICIT NONE 7 INCLUDE "dimensions.h" 8 INCLUDE "paramet.h" 9 10 9 11 10 12 INTEGER :: step, nbjour -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/seasalt.f90
r5144 r5159 1 1 ! This SUBROUTINE estimateis Sea Salt emission fluxes over 2 2 ! Oceanic surfaces. 3 ! 3 4 4 SUBROUTINE seasalt(v_10m, u_10m, pct_ocean, lmt_sea_salt) 5 5 … … 8 8 USE lmdz_yomcst 9 9 10 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 10 11 IMPLICIT NONE 11 12 ! 12 INCLUDE "dimensions.h" 13 13 14 INCLUDE "chem.h" 14 15 INCLUDE "chem_spla.h" 15 ! 16 16 17 INTEGER :: i, bin !local variables 17 18 REAL :: pct_ocean(klon) !hfraction of Ocean in each grid … … 22 23 23 24 REAL :: wind, ocean 24 ! 25 25 26 !------Sea salt emission fluxes for each size bin calculated 26 27 !------based on on parameterisation of Gong et al. (1997). … … 29 30 !------Fluxes at various wind speeds (@10 m from sea 30 31 !------surfaces are estimated using relationship: F=flux*U_10^3.14 31 ! 32 32 33 !nhl for size bin of 0.03-0.5 and 0.5-20 33 34 DATA sea_salt_flux/4.5E-09, 8.7E-7/ … … 36 37 w_speed_10m(i) = (v_10m(i)**2.0 + u_10m(i)**2.0)**0.5 37 38 ENDDO 38 ! 39 39 40 DO bin = 1, ss_bins 40 41 wind = 0.0 -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/sediment_mod.f90
r5144 r5159 1 1 !----- This SUBROUTINE calculates the sedimentation flux of Tracers 2 ! 2 3 3 SUBROUTINE sediment_mod(t_seri, pplay, zrho, paprs, time_step, RHcl, & 4 4 id_coss, id_codu, id_scdu, & … … 7 7 sed_ss3D, sed_dust3D, sed_dustsco3D, tr_seri) 8 8 !nhl . xlon,xlat, 9 ! 9 10 10 USE dimphy 11 11 USE infotrac … … 13 13 USE lmdz_yomcst 14 14 15 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 15 16 IMPLICIT NONE 16 17 ! 17 INCLUDE "dimensions.h" 18 18 19 INCLUDE "chem.h" 19 ! 20 20 21 REAL :: RHcl(klon, klev) ! humidite relative ciel clair 21 22 REAL :: tr_seri(klon, klev, nbtr) !conc of tracers … … 38 39 REAL :: xlon(klon) ! longitudes pour chaque point 39 40 INTEGER :: id_coss, id_codu, id_scdu 40 ! 41 41 42 !------local variables 42 ! 43 43 44 INTEGER :: i, k, nbre_RH 44 45 PARAMETER(nbre_RH = 12) 45 ! 46 46 47 REAL :: lambda, ss_g 47 48 REAL :: mmd_ss !mass median diameter of SS (um) … … 55 56 REAL :: zdz(klon, klev) ! layers height (m) 56 57 REAL :: temp ! temperature in degree Celius 57 ! 58 58 59 INTEGER :: RH_num 59 60 REAL :: RH_MAX, DELTA, rh, RH_tab(nbre_RH) 60 61 PARAMETER (RH_MAX = 95.) 61 ! 62 62 63 DATA RH_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./ 63 ! 64 ! 64 65 65 66 DATA rho_ss/2160., 2160., 2160., 2160, 1451.6, 1367.9, & 66 67 1302.9, 1243.2, 1182.7, 1149.5, 1111.6, 1063.1/ 67 ! 68 68 69 DATA ss_growth_f/0.503, 0.503, 0.503, 0.503, 0.724, 0.782, & 69 70 0.838, 0.905, 1.000, 1.072, 1.188, 1.447/ 70 ! 71 ! 71 72 72 73 mmd_ss = 12.7 !dia -um at 80% for bin 0.5-20 um but 90% of real mmd 73 74 ! obsolete mmd_dust=2.8 !micrometer for bin 0.5-20 and 0.5-10 um … … 95 96 96 97 rho_dust = 2600. !kg/m3 97 ! 98 98 99 !--------- Air viscosity (poise=0.1 kg/m-sec)----------- 99 ! 100 100 101 DO k = 1, klev 101 102 DO i = 1, klon 102 ! 103 103 104 zdz(i, k) = (paprs(i, k) - paprs(i, k + 1)) / zrho(i, k) / RG 104 ! 105 105 106 temp = t_seri(i, k) - RTT 106 ! 107 107 108 IF (temp<0.) THEN 108 109 air_visco(i, k) = (1.718 + 0.0049 * temp - 1.2e-5 * temp * temp) * 1.e-4 … … 110 111 air_visco(i, k) = (1.718 + 0.0049 * temp) * 1.e-4 111 112 ENDIF 112 ! 113 113 114 ENDDO 114 115 ENDDO 115 ! 116 116 117 !--------- for Sea Salt ------------------- 117 ! 118 ! 119 ! 118 119 120 120 121 IF(id_coss>0) THEN 121 122 DO k = 1, klev 122 123 DO i = 1, klon 123 ! 124 124 125 !---cal. correction factor hygroscopic growth of aerosols 125 ! 126 126 127 rh = MIN(RHcl(i, k) * 100., RH_MAX) 127 128 RH_num = INT(rh / 10. + 1.) … … 129 130 IF (rh>90.) RH_num = 11 130 131 DELTA = (rh - RH_tab(RH_num)) / (RH_tab(RH_num + 1) - RH_tab(RH_num)) 131 ! 132 132 133 ss_g = ss_growth_f(rh_num) + & 133 134 DELTA * (ss_growth_f(RH_num + 1) - ss_growth_f(RH_num)) … … 135 136 rho_ss1 = rho_ss(rh_num) + & 136 137 DELTA * (rho_ss(RH_num + 1) - rho_ss(RH_num)) 137 ! 138 138 139 v_stokes = RG * (rho_ss1 - zrho(i, k)) * & !m/sec 139 140 (mmd_ss * ss_g) * (mmd_ss * ss_g) * & 140 141 1.e-12 / (18.0 * air_visco(i, k) / 10.) 141 ! 142 142 143 lambda = 6.6 * 1.e-8 * (103125 / pplay(i, k)) * (t_seri(i, k) / 293.15) 143 ! 144 144 145 CC = 1.0 + 1.257 * lambda / (mmd_ss * ss_g) / 1.e6 ! C-correction factor 145 ! 146 146 147 v_sed = v_stokes * CC ! m/sec !orig 147 ! 148 148 149 !---------check for v_sed*dt<zdz 149 ! 150 150 151 IF (v_sed * time_step>zdz(i, k)) THEN 151 152 v_sed = zdz(i, k) / time_step 152 153 ENDIF 153 ! 154 154 155 v_dep_ss(i, k) = v_sed 155 156 sed_flux(i, k) = tr_seri(i, k, id_coss) * v_sed !g/cm3*m/sec 156 157 !sed_ss3D(i,k)= -sed_flux(i,k)/zdz(i,k) !g/cm3*sec !!!!!!! 157 158 ! conc_sed_ss3D(i,k)=sed_flux(i,k)*1.e6 !g/m3*sec !!!!!!! 158 ! 159 ENDDO !klon 160 ENDDO !klev 161 ! 159 160 ENDDO !klon 161 ENDDO !klev 162 162 163 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 163 164 sed_ss3D(:, :) = 0.0 ! initialisation … … 169 170 ENDDO !klon 170 171 ENDDO !klev 171 ! 172 172 173 DO k = 1, klev - 1 173 174 DO i = 1, klon … … 186 187 187 188 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 188 ! 189 189 190 DO i = 1, klon 190 191 sed_ss(i) = sed_flux(i, 1) * 1.e6 * 1.e3 !--unit mg/m2/s … … 195 196 ENDDO 196 197 ENDIF 197 ! 198 198 199 ! 199 200 200 201 !--------- For dust ------------------ 201 ! 202 ! 202 203 203 204 IF(id_codu>0) THEN 204 205 DO k = 1, klev 205 206 DO i = 1, klon 206 ! 207 207 208 v_stokes = RG * (rho_dust - zrho(i, k)) * & !m/sec 208 209 mmd_dust * mmd_dust * & 209 210 1.e-12 / (18.0 * air_visco(i, k) / 10.) 210 ! 211 211 212 lambda = 6.6 * 1.e-8 * (103125 / pplay(i, k)) * (t_seri(i, k) / 293.15) 212 213 CC = 1.0 + 1.257 * lambda / (mmd_dust) / 1.e6 !dimensionless 213 214 v_sed = v_stokes * CC !m/sec 214 ! 215 215 216 !---------check for v_sed*dt<zdz 216 ! 217 217 218 IF (v_sed * time_step>zdz(i, k)) THEN 218 219 v_sed = zdz(i, k) / time_step 219 220 ENDIF 220 221 221 ! 222 222 223 v_dep_dust(i, k) = v_sed 223 224 sed_flux(i, k) = tr_seri(i, k, id_codu) * v_sed !g/cm3.m/sec 224 225 !sed_dust3D(i,k)= -sed_flux(i,k)/zdz(i,k) !g/cm3*sec !!!!!!! 225 ! 226 226 227 ENDDO !klon 227 228 ENDDO !klev … … 237 238 ENDDO !klev 238 239 239 ! 240 240 241 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 241 242 … … 246 247 ENDDO !klon 247 248 ENDDO !klev 248 ! 249 249 250 DO k = 1, klev 250 251 DO i = 1, klon … … 266 267 267 268 !--------- For scoarse dust ------------------ 268 ! 269 ! 269 270 270 271 IF(id_scdu>0) THEN 271 272 DO k = 1, klev 272 273 DO i = 1, klon 273 ! 274 274 275 v_stokes = RG * (rho_dust - zrho(i, k)) * & !m/sec 275 276 mmd_dustsco * mmd_dustsco * & 276 277 1.e-12 / (18.0 * air_visco(i, k) / 10.) 277 ! 278 278 279 lambda = 6.6 * 1.e-8 * (103125 / pplay(i, k)) * (t_seri(i, k) / 293.15) 279 280 CC = 1.0 + 1.257 * lambda / (mmd_dustsco) / 1.e6 !dimensionless 280 281 v_sed = v_stokes * CC !m/sec 281 ! 282 282 283 !---------check for v_sed*dt<zdz 283 284 … … 286 287 ENDIF 287 288 288 ! 289 289 290 v_dep_dustsco(i, k) = v_sed 290 291 sed_flux(i, k) = tr_seri(i, k, id_scdu) * v_sed !g/cm3.m/sec 291 292 !sed_dustsco3D(i,k)= -sed_flux(i,k)/zdz(i,k) !g/cm3*sec !!!!!!! 292 ! 293 293 294 ENDDO !klon 294 295 ENDDO !klev … … 303 304 ENDDO !klon 304 305 ENDDO !klev 305 ! 306 306 307 DO k = 1, klev - 1 307 308 DO i = 1, klon … … 320 321 321 322 322 ! 323 323 324 DO i = 1, klon 324 325 sed_dustsco(i) = sed_flux(i, 1) * 1.e6 * 1.e3 !--unit mg/m2/s -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/tiedqneg.f90
r5134 r5159 2 2 3 3 USE dimphy 4 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 4 5 IMPLICIT NONE 5 6 !====================================================================== … … 15 16 !====================================================================== 16 17 17 INCLUDE "dimensions.h" 18 18 19 REAL :: pres_h(klon, klev + 1) 19 20 REAL :: q(klon, klev) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/trconvect.f90
r5144 r5159 9 9 USE lmdz_yomcst 10 10 11 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 12 USE lmdz_paramet 11 13 IMPLICIT NONE 12 14 13 INCLUDE "dimensions.h" 15 14 16 INCLUDE "chem.h" 15 INCLUDE "paramet.h" 17 16 18 17 19 !============================= INPUT =================================== … … 42 44 43 45 DO it = 1, nbtr 44 ! 46 45 47 DO i = 1, klon 46 48 dtrconv(i, it) = 0.0 … … 53 55 ENDDO 54 56 55 ! 57 56 58 !nhl CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, 57 59 !nhl . pplay, paprs, tr_seri(1,1,it), d_tr(1,1,it) ) 58 60 CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, & 59 61 pplay, paprs, aux_var1, aux_var2) 60 ! 62 61 63 CALL tiedqneg(paprs, aux_var1, aux_var2) 62 64 !nhl CALL tiedqneg(paprs,tr_seri(1,1,it), d_tr(1,1,it)) … … 67 69 ENDDO 68 70 ENDDO 69 ! 71 70 72 DO k = 1, klev 71 73 DO i = 1, klon … … 77 79 ENDDO 78 80 ENDDO 79 ! 81 80 82 !nhl CALL kg_to_cm3(pplay,t_seri,d_tr(1,1,it)) 81 83 CALL kg_to_cm3(pplay, t_seri, aux_var2) … … 109 111 ENDDO 110 112 ENDIF 111 ! 113 112 114 ENDDO 113 115
Note: See TracChangeset
for help on using the changeset viewer.