Changeset 5098 for LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer
- Timestamp:
- Jul 22, 2024, 6:53:44 PM (7 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/aer_sedimnt.F90
r5087 r5098 22 22 USE infotrac_phy 23 23 USE aerophys 24 USE YOMCST24 USE lmdz_yomcst 25 25 26 26 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/calcaerosolstrato_rrtm.F90
r5082 r5098 9 9 USE dimphy 10 10 USE temps_mod 11 USE YOMCST11 USE lmdz_yomcst 12 12 13 13 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/coagulate.F90
r5087 r5098 28 28 USE phys_local_var_mod, ONLY: DENSO4, DENSO4B, f_r_wet, f_r_wetB 29 29 USE strataer_local_var_mod, ONLY: flag_new_strat_compo 30 USE lmdz_yomcst 30 31 31 32 IMPLICIT NONE … … 83 84 REAL :: EvdW 84 85 85 include "YOMCST.h"86 87 86 ! ff(i,j,k): Volume fraction of Vi,j that is partitioned to each model bin k 88 87 ! just need to be calculated in model initialization because mdw(:) size is fixed -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/cond_evap_tstep_mod.F90
r5087 r5098 28 28 USE aerophys 29 29 USE infotrac_phy 30 USE YOMCST, ONLY : RPI30 USE lmdz_yomcst, ONLY : RPI 31 31 USE sulfate_aer_mod, ONLY : wph2so4, surftension, solh2so4, rpmvh2so4 32 32 USE strataer_local_var_mod, ONLY : ALPH2SO4, RRSI 33 33 34 34 IMPLICIT NONE 35 35 36 36 REAL, PARAMETER :: third=1./3. 37 37 … … 177 177 USE aerophys 178 178 USE infotrac_phy 179 USE YOMCST, ONLY : RPI179 USE lmdz_yomcst, ONLY : RPI 180 180 USE strataer_local_var_mod, ONLY : ALPH2SO4, RRSI 181 181 … … 290 290 USE aerophys 291 291 USE infotrac_phy 292 USE YOMCST, ONLY : RPI292 USE lmdz_yomcst, ONLY : RPI 293 293 USE strataer_local_var_mod, ONLY : RRSI,Vbin 294 294 -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/interp_sulf_input.F90
r5088 r5098 18 18 USE infotrac_phy 19 19 USE aerophys 20 USE YOMCST20 USE lmdz_yomcst 21 21 USE strataer_local_var_mod, ONLY : flag_newclim_file,flag_verbose_strataer 22 22 -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/micphy_tstep.F90
r5087 r5098 13 13 USE cond_evap_tstep_mod 14 14 USE sulfate_aer_mod, ONLY : STRAACT 15 USE YOMCST, ONLY : RPI, RD, RG15 USE lmdz_yomcst, ONLY : RPI, RD, RG 16 16 USE print_control_mod, ONLY: lunout 17 17 USE strataer_local_var_mod ! contains also RRSI and Vbin -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/miecalc_aer.F90
r5087 r5098 20 20 USE infotrac_phy, ONLY : nbtr, nbtr_bin, nbtr_sulgas, id_SO2_strat 21 21 USE dimphy 22 USE YOMCST, ONLY : RG, RPI22 USE lmdz_yomcst , ONLY : RG, RPI 23 23 USE mod_phys_lmdz_para, only: gather, scatter, bcast 24 24 USE mod_grid_phy_lmdz, ONLY : klon_glo -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/nucleation_tstep_mod.F90
r5087 r5098 11 11 USE infotrac_phy 12 12 USE strataer_local_var_mod, ONLY : flag_new_nucl 13 USE lmdz_yomcst 13 14 14 15 IMPLICIT NONE … … 37 38 REAL airn ! Air molecule concentration in (cm-3) NOT IN USE 38 39 REAL ipr ! Ion pair production rate (cm-3 s-1) NOT IN USE 39 40 include "YOMCST.h"41 40 42 41 ! call nucleation routine … … 332 331 333 332 USE aerophys 333 USE lmdz_yomcst 334 334 335 335 IMPLICIT NONE … … 385 385 DOUBLE PRECISION :: xloss ! Ion loss rate 386 386 DOUBLE PRECISION :: recomb ! Ion-ion recombination rate 387 388 include "YOMCST.h"389 387 390 388 !--- 0) Initializations: -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/ocs_to_so2.F90
r5082 r5098 7 7 USE aerophys 8 8 USE infotrac_phy 9 USE YOMCST, ONLY : RG9 USE lmdz_yomcst, ONLY : RG 10 10 USE phys_local_var_mod, ONLY : OCS_lifetime, budg_3D_ocs_to_so2, budg_ocs_to_so2 11 11 USE strataer_local_var_mod, ONLY : flag_min_rreduce -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/so2_to_h2so4.F90
r5087 r5098 7 7 USE aerophys 8 8 USE infotrac_phy 9 USE YOMCST, ONLY : RG, RD9 USE lmdz_yomcst, ONLY : RG, RD 10 10 ! lifetime (sec) et O3_clim (VMR) 11 11 USE phys_local_var_mod, ONLY : SO2_lifetime, H2SO4_lifetime, O3_clim, budg_3D_so2_to_h2so4, budg_so2_to_h2so4 -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/stratH2O_methox.F90
r5088 r5098 19 19 USE infotrac_phy 20 20 USE aerophys 21 USE YOMCST21 USE lmdz_yomcst 22 22 USE strataer_local_var_mod, ONLY : flag_newclim_file 23 23 24 24 IMPLICIT NONE 25 25 26 26 include "dimensions.h" 27 27 -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/strataer_emiss_mod.F90
r5082 r5098 219 219 USE print_control_mod, ONLY : lunout 220 220 USE strataer_local_var_mod 221 222 INCLUDE "YOMCST.h" !--RPI 221 USE lmdz_yomcst, ONLY: RPI 223 222 224 223 ! local var -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/strataer_local_var_mod.F90
r5082 r5098 1 1 MODULE strataer_local_var_mod 2 ! This module contains strato microphysic model parameters & variables3 2 ! This module contains strato microphysic model parameters & variables 3 4 4 IMPLICIT NONE 5 5 6 6 !============= GENERAL PARAMS ============= 7 7 !flag for type emission scenario: (0) background aer ; (1) volcanic eruption with Sulfur ; 8 8 !(2,3) strato aer injections (SAI) ; (4) volcanic eruption chimistry; (5) rocket 9 INTEGER, SAVE :: flag_emit9 INTEGER, SAVE :: flag_emit 10 10 !$OMP THREADPRIVATE(flag_emit) 11 11 12 12 ! flag for emission altitude distribution: (0) gaussian; (1) uniform 13 INTEGER, SAVE :: flag_emit_distrib13 INTEGER, SAVE :: flag_emit_distrib 14 14 !$OMP THREADPRIVATE(flag_emit_distrib) 15 15 16 16 ! flag to choose nucleation nucleation method 17 LOGICAL, SAVE :: flag_new_nucl ! T=new routine from A. Maattanen (LATMOS), F=older routine from H. Vehkamäki (FMI)17 LOGICAL, SAVE :: flag_new_nucl ! T=new routine from A. Maattanen (LATMOS), F=older routine from H. Vehkamäki (FMI) 18 18 !$OMP THREADPRIVATE(flag_new_nucl) 19 19 20 20 ! Use relative humidity from 2D model stratospheric H2O because LMDz is too dry in the stratosphere 21 21 ! (no CH4 oxidation) 22 LOGICAL, SAVE :: flag_H2O2d_nucleation22 LOGICAL, SAVE :: flag_H2O2d_nucleation 23 23 !$OMP THREADPRIVATE(flag_H2O2d_nucleation) 24 24 25 25 ! OH reduction from SO2. OH is reduced when its reaction with SO2 competes sufficiently with its reaction 26 26 ! with O3 (Bekki, 1995). As a result, SO2 lifetime is extended. 2D model O3 climatologies are needed. 27 LOGICAL, SAVE :: flag_OH_reduced27 LOGICAL, SAVE :: flag_OH_reduced 28 28 !$OMP THREADPRIVATE(flag_OH_reduced) 29 29 30 30 ! H2SO4 photolysis: H2SO4 is converted into SO2 by complex photolytic processes. Here simplified approach 31 31 ! by setting H2SO4 cross-sections = 0.3*HCl cross-sections (Rinsland et al., 1995) 32 LOGICAL, SAVE :: flag_H2SO4_photolysis32 LOGICAL, SAVE :: flag_H2SO4_photolysis 33 33 !$OMP THREADPRIVATE(flag_H2SO4_photolysis) 34 34 35 35 ! flag for minimum lifetime (=1.5 pdt phys) 36 LOGICAL, SAVE :: flag_min_rreduce36 LOGICAL, SAVE :: flag_min_rreduce 37 37 !$OMP THREADPRIVATE(flag_min_rreduce) 38 38 39 39 ! flag to read new climato (O3, H2O & H2SO4_LIFET) 40 LOGICAL, SAVE :: flag_newclim_file40 LOGICAL, SAVE :: flag_newclim_file 41 41 !$OMP THREADPRIVATE(flag_newclim_file) 42 42 43 43 ! flag to choose new H2SO4 density and weight percent from Tabazadeh et al. (1994). 44 LOGICAL, SAVE :: flag_new_strat_compo44 LOGICAL, SAVE :: flag_new_strat_compo 45 45 !$OMP THREADPRIVATE(flag_new_strat_compo) 46 46 47 47 ! Verbose mode to get more print info 48 48 LOGICAL, SAVE :: flag_verbose_strataer 49 49 !$OMP THREADPRIVATE(flag_verbose_strataer) 50 51 50 51 52 52 !============= NUCLEATION VARS ============= 53 53 ! MOLECULAR ACCOMODATION OF H2SO4 (Raes and Van Dingen) 54 REAL, SAVE:: ALPH2SO4 ! H2SO4 accommodation coefficient [condensation/evaporation]54 REAL, SAVE :: ALPH2SO4 ! H2SO4 accommodation coefficient [condensation/evaporation] 55 55 !$OMP THREADPRIVATE(ALPH2SO4) 56 56 57 57 ! flag to constraint nucleation rate in a lat/pres box 58 LOGICAL, SAVE :: flag_nuc_rate_box ! Nucleation rate limit or not to a lat/pres58 LOGICAL, SAVE :: flag_nuc_rate_box ! Nucleation rate limit or not to a lat/pres 59 59 !$OMP THREADPRIVATE(flag_nuc_rate_box) 60 REAL, SAVE:: nuclat_min ! min lat to activate nuc rate61 REAL, SAVE:: nuclat_max ! max lat to activate nuc rate62 REAL, SAVE:: nucpres_min ! min pres to activate nuc rate63 REAL, SAVE:: nucpres_max ! max pres to activate nuc rate60 REAL, SAVE :: nuclat_min ! min lat to activate nuc rate 61 REAL, SAVE :: nuclat_max ! max lat to activate nuc rate 62 REAL, SAVE :: nucpres_min ! min pres to activate nuc rate 63 REAL, SAVE :: nucpres_max ! max pres to activate nuc rate 64 64 !$OMP THREADPRIVATE(nuclat_min, nuclat_max, nucpres_min, nucpres_max) 65 65 66 LOGICAL, SAVE :: ok_qemiss66 LOGICAL, SAVE :: ok_qemiss 67 67 !$OMP THREADPRIVATE(ok_qemiss) 68 INTEGER, SAVE :: flh2o ! ds stratemit : flh2o =0 (tr_seri), flh2o=1 (dq)68 INTEGER, SAVE :: flh2o ! ds stratemit : flh2o =0 (tr_seri), flh2o=1 (dq) 69 69 !$OMP THREADPRIVATE(flh2o) 70 71 REAL, ALLOCATABLE,SAVE :: budg_emi(:,:) !DIMENSION(klon,n)70 71 REAL, ALLOCATABLE, SAVE :: budg_emi(:, :) !DIMENSION(klon,n) 72 72 !$OMP THREADPRIVATE(budg_emi) 73 74 73 74 75 75 !============= EMISSION VARS ============= 76 76 !--flag_emit=1 OR == 4 -- Volcanic eruption(s) 77 INTEGER, SAVE:: nErupt ! number of eruptions specs78 REAL, SAVE:: injdur ! volcanic injection duration77 INTEGER, SAVE :: nErupt ! number of eruptions specs 78 REAL, SAVE :: injdur ! volcanic injection duration 79 79 !$OMP THREADPRIVATE(nErupt, injdur) 80 INTEGER, ALLOCATABLE,SAVE :: year_emit_vol(:) ! year of emission date81 INTEGER, ALLOCATABLE,SAVE :: mth_emit_vol(:) ! month of emission date82 INTEGER, ALLOCATABLE,SAVE :: day_emit_vol(:) ! day of emission date80 INTEGER, ALLOCATABLE, SAVE :: year_emit_vol(:) ! year of emission date 81 INTEGER, ALLOCATABLE, SAVE :: mth_emit_vol(:) ! month of emission date 82 INTEGER, ALLOCATABLE, SAVE :: day_emit_vol(:) ! day of emission date 83 83 !$OMP THREADPRIVATE(year_emit_vol, mth_emit_vol, day_emit_vol) 84 REAL, ALLOCATABLE,SAVE:: altemiss_vol(:) ! emission altitude in m85 REAL, ALLOCATABLE,SAVE:: sigma_alt_vol(:) ! standard deviation of emission altitude in m84 REAL, ALLOCATABLE, SAVE :: altemiss_vol(:) ! emission altitude in m 85 REAL, ALLOCATABLE, SAVE :: sigma_alt_vol(:) ! standard deviation of emission altitude in m 86 86 !$OMP THREADPRIVATE(altemiss_vol, sigma_alt_vol) 87 INTEGER, ALLOCATABLE,SAVE :: ponde_lonlat_vol(:) ! lon/lat ponderation factor88 REAL, ALLOCATABLE,SAVE:: xlat_min_vol(:) ! min latitude of volcano in degree89 REAL, ALLOCATABLE,SAVE:: xlat_max_vol(:) ! max latitude of volcano in degree90 REAL, ALLOCATABLE,SAVE:: xlon_min_vol(:) ! min longitude of volcano in degree91 REAL, ALLOCATABLE,SAVE:: xlon_max_vol(:) ! max longitude of volcano in degree87 INTEGER, ALLOCATABLE, SAVE :: ponde_lonlat_vol(:) ! lon/lat ponderation factor 88 REAL, ALLOCATABLE, SAVE :: xlat_min_vol(:) ! min latitude of volcano in degree 89 REAL, ALLOCATABLE, SAVE :: xlat_max_vol(:) ! max latitude of volcano in degree 90 REAL, ALLOCATABLE, SAVE :: xlon_min_vol(:) ! min longitude of volcano in degree 91 REAL, ALLOCATABLE, SAVE :: xlon_max_vol(:) ! max longitude of volcano in degree 92 92 !$OMP THREADPRIVATE(ponde_lonlat_vol, xlat_min_vol, xlat_max_vol, xlon_min_vol, xlon_max_vol) 93 93 94 94 !--flag_emit=1 95 INTEGER, SAVE :: nAerErupt ! number Aerosol95 INTEGER, SAVE :: nAerErupt ! number Aerosol 96 96 !$OMP THREADPRIVATE(nAerErupt) 97 REAL, ALLOCATABLE,SAVE:: m_sulf_emiss_vol(:) ! emitted sulfur mass in kgS, e.g. 7Tg(S)=14Tg(SO2)98 REAL, ALLOCATABLE,SAVE :: m_aer_emiss_vol(:,:)97 REAL, ALLOCATABLE, SAVE :: m_sulf_emiss_vol(:) ! emitted sulfur mass in kgS, e.g. 7Tg(S)=14Tg(SO2) 98 REAL, ALLOCATABLE, SAVE :: m_aer_emiss_vol(:, :) 99 99 !$OMP THREADPRIVATE(m_sulf_emiss_vol,m_aer_emiss_vol) 100 100 101 101 !--flag_emit=2 --SAI 102 REAL, SAVE:: m_aer_emiss_sai ! emitted sulfur mass in kgS, eg 1e9=1TgS, 1e10=10TgS103 REAL, SAVE:: altemiss_sai ! emission altitude in m104 REAL, SAVE:: sigma_alt_sai ! standard deviation of emission altitude in m102 REAL, SAVE :: m_aer_emiss_sai ! emitted sulfur mass in kgS, eg 1e9=1TgS, 1e10=10TgS 103 REAL, SAVE :: altemiss_sai ! emission altitude in m 104 REAL, SAVE :: sigma_alt_sai ! standard deviation of emission altitude in m 105 105 !$OMP THREADPRIVATE(m_aer_emiss_sai, altemiss_sai, sigma_alt_sai) 106 INTEGER, SAVE:: year_emit_sai_start107 INTEGER, SAVE:: year_emit_sai_end108 INTEGER, SAVE:: mth_emit_sai_start109 INTEGER, SAVE:: mth_emit_sai_end110 INTEGER, SAVE:: day_emit_sai_start111 INTEGER, SAVE:: day_emit_sai_end106 INTEGER, SAVE :: year_emit_sai_start 107 INTEGER, SAVE :: year_emit_sai_end 108 INTEGER, SAVE :: mth_emit_sai_start 109 INTEGER, SAVE :: mth_emit_sai_end 110 INTEGER, SAVE :: day_emit_sai_start 111 INTEGER, SAVE :: day_emit_sai_end 112 112 !$OMP THREADPRIVATE(year_emit_sai_start, year_emit_sai_end) 113 113 !$OMP THREADPRIVATE(mth_emit_sai_start, mth_emit_sai_end) 114 114 !$OMP THREADPRIVATE(day_emit_sai_start, day_emit_sai_end) 115 REAL, SAVE:: xlat_sai ! latitude of SAI in degree116 REAL, SAVE:: xlon_sai ! longitude of SAI in degree115 REAL, SAVE :: xlat_sai ! latitude of SAI in degree 116 REAL, SAVE :: xlon_sai ! longitude of SAI in degree 117 117 !$OMP THREADPRIVATE(xlat_sai, xlon_sai) 118 118 119 119 !--flag_emit=3 -- SAI 120 REAL, SAVE:: xlat_max_sai ! maximum latitude of SAI in degrees121 REAL, SAVE:: xlat_min_sai ! minimum latitude of SAI in degrees120 REAL, SAVE :: xlat_max_sai ! maximum latitude of SAI in degrees 121 REAL, SAVE :: xlat_min_sai ! minimum latitude of SAI in degrees 122 122 !$OMP THREADPRIVATE(xlat_min_sai,xlat_max_sai) 123 123 124 124 !--flag_emit=4 -- volc species 125 INTEGER, SAVE:: nSpeciesErupt ! number of species Repr126 INTEGER, ALLOCATABLE,SAVE :: id_species(:) ! indice species Repr127 REAL, ALLOCATABLE,SAVE :: m_species_emiss_vol(:,:) ! emitted species125 INTEGER, SAVE :: nSpeciesErupt ! number of species Repr 126 INTEGER, ALLOCATABLE, SAVE :: id_species(:) ! indice species Repr 127 REAL, ALLOCATABLE, SAVE :: m_species_emiss_vol(:, :) ! emitted species 128 128 !$OMP THREADPRIVATE(nSpeciesErupt,id_species,m_species_emiss_vol) 129 INTEGER, ALLOCATABLE,SAVE :: id_HCl130 INTEGER, ALLOCATABLE,SAVE :: id_HBr131 INTEGER, ALLOCATABLE,SAVE :: id_NOx132 INTEGER, ALLOCATABLE,SAVE :: id_H2O129 INTEGER, ALLOCATABLE, SAVE :: id_HCl 130 INTEGER, ALLOCATABLE, SAVE :: id_HBr 131 INTEGER, ALLOCATABLE, SAVE :: id_NOx 132 INTEGER, ALLOCATABLE, SAVE :: id_H2O 133 133 !$OMP THREADPRIVATE(id_HCl,id_HBr,id_NOx,id_H2O) 134 REAL, ALLOCATABLE,SAVE :: m_Chlore_emiss_vol(:) ! emitted Chlore mass135 REAL, ALLOCATABLE,SAVE:: m_Brome_emiss_vol(:) ! emitted Brome mass136 REAL, ALLOCATABLE,SAVE:: m_NOx_emiss_vol(:) ! emitted NOx mass137 REAL, ALLOCATABLE,SAVE:: m_H2O_emiss_vol(:) ! emitted H2O mass138 REAL, ALLOCATABLE,SAVE:: m_H2O_emiss_vol_daily(:)134 REAL, ALLOCATABLE, SAVE :: m_Chlore_emiss_vol(:) ! emitted Chlore mass 135 REAL, ALLOCATABLE, SAVE :: m_Brome_emiss_vol(:) ! emitted Brome mass 136 REAL, ALLOCATABLE, SAVE :: m_NOx_emiss_vol(:) ! emitted NOx mass 137 REAL, ALLOCATABLE, SAVE :: m_H2O_emiss_vol(:) ! emitted H2O mass 138 REAL, ALLOCATABLE, SAVE :: m_H2O_emiss_vol_daily(:) 139 139 !$OMP THREADPRIVATE(m_Chlore_emiss_vol,m_Brome_emiss_vol,m_NOx_emiss_vol,m_H2O_emiss_vol) 140 140 !$OMP THREADPRIVATE(m_H2O_emiss_vol_daily) 141 141 142 142 !--flag_emit=5 -- Rockets Emitted 143 INTEGER, SAVE 143 INTEGER, SAVE :: ifreqroc ! frequence (=2 ex: tous les 2 mois) 144 144 !$OMP THREADPRIVATE(ifreqroc) 145 INTEGER, ALLOCATABLE,SAVE :: day_emit_roc(:) ! day of emission date145 INTEGER, ALLOCATABLE, SAVE :: day_emit_roc(:) ! day of emission date 146 146 !$OMP THREADPRIVATE(day_emit_roc) 147 148 REAL, ALLOCATABLE,SAVE:: RRSI(:) ! radius [cm] for each aerosol size149 REAL, ALLOCATABLE,SAVE :: Vbin(:) ! volume [m3] for each aerosol size147 148 REAL, ALLOCATABLE, SAVE :: RRSI(:) ! radius [cm] for each aerosol size 149 REAL, ALLOCATABLE, SAVE :: Vbin(:) ! volume [m3] for each aerosol size 150 150 !$OMP THREADPRIVATE(RRSI, Vbin) 151 REAL, SAVE:: dlat, dlon ! delta latitude and d longitude of grid in degree151 REAL, SAVE :: dlat, dlon ! delta latitude and d longitude of grid in degree 152 152 !$OMP THREADPRIVATE(dlat, dlon) 153 153 154 154 CONTAINS 155 155 156 156 SUBROUTINE strataer_init() 157 USE ioipsl_getin_p_mod, ONLY 158 USE print_control_mod, ONLY 159 USE mod_phys_lmdz_para, ONLY 160 USE infotrac_phy, ONLY: id_OCS_strat, id_SO2_strat,id_H2SO4_strat,nbtr_sulgas,nbtr_bin161 USE phys_local_var_mod, ONLY 157 USE ioipsl_getin_p_mod, ONLY: getin_p 158 USE print_control_mod, ONLY: lunout 159 USE mod_phys_lmdz_para, ONLY: is_master 160 USE infotrac_phy, ONLY: id_OCS_strat, id_SO2_strat, id_H2SO4_strat, nbtr_sulgas, nbtr_bin 161 USE phys_local_var_mod, ONLY: mdw 162 162 USE aerophys, ONLY: mdwmin, V_rat 163 USE YOMCST , ONLY: RPI164 163 USE lmdz_yomcst, ONLY: RPI 164 165 165 INTEGER :: it 166 167 WRITE(lunout, *) 'IN STRATAER_LOCAL_VAR INIT WELCOME!'168 166 167 WRITE(lunout, *) 'IN STRATAER_LOCAL_VAR INIT WELCOME!' 168 169 169 !============= Check Sulfur aerosols ID ============= 170 WRITE(lunout, *) 'STRATAER_LOCAL_VAR INIT: id_OCS_strat=',id_OCS_strat,' id_SO2_strat=',id_SO2_strat,' id_H2SO4_strat=',id_H2SO4_strat171 170 WRITE(lunout, *) 'STRATAER_LOCAL_VAR INIT: id_OCS_strat=', id_OCS_strat, ' id_SO2_strat=', id_SO2_strat, ' id_H2SO4_strat=', id_H2SO4_strat 171 172 172 IF(id_OCS_strat < 0 .OR. id_OCS_strat > nbtr_sulgas) THEN 173 WRITE(lunout,*) 'ERROR : OCS index id_OCS_strat=',id_OCS_strat,' is negative or superior than the total sulfur gases !'174 CALL abort_physic('strataer_local_var_mod','Wrong OCS index, check your tracer.def file.',1)173 WRITE(lunout, *) 'ERROR : OCS index id_OCS_strat=', id_OCS_strat, ' is negative or superior than the total sulfur gases !' 174 CALL abort_physic('strataer_local_var_mod', 'Wrong OCS index, check your tracer.def file.', 1) 175 175 ELSEIF(id_SO2_strat < 0 .OR. id_SO2_strat > nbtr_sulgas) THEN 176 WRITE(lunout,*) 'ERROR : SO2 index id_SO2_strat=',id_SO2_strat,' is negative or superior than the total sulfur gases !'177 CALL abort_physic('strataer_local_var_mod','Wrong SO2 index, check your tracer.def file.',1)176 WRITE(lunout, *) 'ERROR : SO2 index id_SO2_strat=', id_SO2_strat, ' is negative or superior than the total sulfur gases !' 177 CALL abort_physic('strataer_local_var_mod', 'Wrong SO2 index, check your tracer.def file.', 1) 178 178 ELSEIF(id_H2SO4_strat < 0 .OR. id_H2SO4_strat > nbtr_sulgas) THEN 179 WRITE(lunout,*) 'ERROR : H2SO4 index id_H2SO4_strat=',id_H2SO4_strat,' is negative or superior than the total sulfur gases !'180 CALL abort_physic('strataer_local_var_mod','Wrong H2SO4 index, check your tracer.def file.',1)181 ENDIF 182 179 WRITE(lunout, *) 'ERROR : H2SO4 index id_H2SO4_strat=', id_H2SO4_strat, ' is negative or superior than the total sulfur gases !' 180 CALL abort_physic('strataer_local_var_mod', 'Wrong H2SO4 index, check your tracer.def file.', 1) 181 ENDIF 182 183 183 !============= Init params ============= 184 184 flag_emit = 0 ! Background (default) … … 191 191 flag_H2SO4_photolysis = .FALSE. ! H2SO4 photolysis (default: No) 192 192 flag_min_rreduce = .TRUE. ! Minimum lifetime=1.5 pdt phys (default: Yes) 193 flag_new_strat_compo = .TRUE. ! H2SO4/H2O weight percent & density routine (default: S. Bekki)193 flag_new_strat_compo = .TRUE. ! H2SO4/H2O weight percent & density routine (default: S. Bekki) 194 194 ok_qemiss = .FALSE. ! H2O emission flag 195 195 196 196 ! nuc init 197 197 ALPH2SO4 = 0.1 198 198 flag_nuc_rate_box = .FALSE. 199 nuclat_min =0 ; nuclat_max=0200 nucpres_min =0 ; nucpres_max=0201 199 nuclat_min = 0 ; nuclat_max = 0 200 nucpres_min = 0 ; nucpres_max = 0 201 202 202 ! emiss init 203 203 nErupt = 0 ! eruption number 204 204 injdur = 0 ! init injection duration 205 205 nAerErupt = 1 ; nSpeciesErupt = 1 206 ifreqroc =2 ; flh2o=0207 206 ifreqroc = 2 ; flh2o = 0 207 208 208 !============= Read params ============= 209 CALL getin_p('flag_emit', flag_emit)210 CALL getin_p('flag_emit_distrib', flag_emit_distrib)211 CALL getin_p('flag_verbose_strataer', flag_verbose_strataer)212 CALL getin_p('flag_new_nucl', flag_new_nucl)213 CALL getin_p('flag_newclim_file', flag_newclim_file)214 CALL getin_p('flag_H2O2d_nucleation', flag_H2O2d_nucleation)215 CALL getin_p('flag_OH_reduced', flag_OH_reduced)216 CALL getin_p('flag_H2SO4_photolysis', flag_H2SO4_photolysis)217 CALL getin_p('flag_min_rreduce', flag_min_rreduce)218 CALL getin_p('flag_new_strat_compo', flag_new_strat_compo)219 CALL getin_p('ok_qemiss', ok_qemiss)220 209 CALL getin_p('flag_emit', flag_emit) 210 CALL getin_p('flag_emit_distrib', flag_emit_distrib) 211 CALL getin_p('flag_verbose_strataer', flag_verbose_strataer) 212 CALL getin_p('flag_new_nucl', flag_new_nucl) 213 CALL getin_p('flag_newclim_file', flag_newclim_file) 214 CALL getin_p('flag_H2O2d_nucleation', flag_H2O2d_nucleation) 215 CALL getin_p('flag_OH_reduced', flag_OH_reduced) 216 CALL getin_p('flag_H2SO4_photolysis', flag_H2SO4_photolysis) 217 CALL getin_p('flag_min_rreduce', flag_min_rreduce) 218 CALL getin_p('flag_new_strat_compo', flag_new_strat_compo) 219 CALL getin_p('ok_qemiss', ok_qemiss) 220 221 221 !============= Test flag coherence ============= 222 222 IF (.NOT. flag_newclim_file) THEN 223 224 WRITE(lunout,*) 'ERROR : flag_newclim_file=',flag_newclim_file, &225 ' whereas flag_H2SO4_photolysis=',flag_H2SO4_photolysis,', flag_OH_reduced=',flag_OH_reduced, &226 ' and flag_H2O2d_nucleation=',flag_H2O2d_nucleation227 CALL abort_physic('strataer_local_var_mod','Incompatible options in physiq_def file !',1)228 229 230 WRITE(lunout,*) 'Warning : flag_min_rreduce will be ignored with old climato file !'231 232 ENDIF 233 223 IF (flag_H2SO4_photolysis .OR. flag_OH_reduced .OR. flag_H2O2d_nucleation) THEN 224 WRITE(lunout, *) 'ERROR : flag_newclim_file=', flag_newclim_file, & 225 ' whereas flag_H2SO4_photolysis=', flag_H2SO4_photolysis, ', flag_OH_reduced=', flag_OH_reduced, & 226 ' and flag_H2O2d_nucleation=', flag_H2O2d_nucleation 227 CALL abort_physic('strataer_local_var_mod', 'Incompatible options in physiq_def file !', 1) 228 ENDIF 229 IF(flag_min_rreduce) THEN 230 WRITE(lunout, *) 'Warning : flag_min_rreduce will be ignored with old climato file !' 231 ENDIF 232 ENDIF 233 234 234 !============= Print params ============= 235 235 IF (is_master) THEN 236 WRITE(lunout,*) 'flag_emit = ',flag_emit237 WRITE(lunout,*) 'IN STRATAER : flag_new_nucl = ',flag_new_nucl238 WRITE(lunout,*) 'IN STRATAER : flag_newclim_file = ',flag_newclim_file239 WRITE(lunout,*) 'IN STRATAER : flag_emit_distrib = ',flag_emit_distrib240 WRITE(lunout,*) 'IN STRATAER : flag_verbose_strataer = ',flag_verbose_strataer241 242 WRITE(lunout,*) 'IN STRATAER : flag_H2O2d_nucleation = ',flag_H2O2d_nucleation243 WRITE(lunout,*) 'IN STRATAER : flag_OH_reduced = ',flag_OH_reduced244 WRITE(lunout,*) 'IN STRATAER : flag_H2SO4_photolysis = ',flag_H2SO4_photolysis245 WRITE(lunout,*) 'IN STRATAER : flag_min_rreduce = ',flag_min_rreduce246 WRITE(lunout,*) 'IN STRATAER : flag_new_strat_compo = ',flag_new_strat_compo247 WRITE(lunout,*) 'IN STRATAER : ok_qemiss = ',ok_qemiss248 236 WRITE(lunout, *) 'flag_emit = ', flag_emit 237 WRITE(lunout, *) 'IN STRATAER : flag_new_nucl = ', flag_new_nucl 238 WRITE(lunout, *) 'IN STRATAER : flag_newclim_file = ', flag_newclim_file 239 WRITE(lunout, *) 'IN STRATAER : flag_emit_distrib = ', flag_emit_distrib 240 WRITE(lunout, *) 'IN STRATAER : flag_verbose_strataer = ', flag_verbose_strataer 241 IF (flag_emit == 1 .OR. flag_emit == 4) THEN 242 WRITE(lunout, *) 'IN STRATAER : flag_H2O2d_nucleation = ', flag_H2O2d_nucleation 243 WRITE(lunout, *) 'IN STRATAER : flag_OH_reduced = ', flag_OH_reduced 244 WRITE(lunout, *) 'IN STRATAER : flag_H2SO4_photolysis = ', flag_H2SO4_photolysis 245 WRITE(lunout, *) 'IN STRATAER : flag_min_rreduce = ', flag_min_rreduce 246 WRITE(lunout, *) 'IN STRATAER : flag_new_strat_compo = ', flag_new_strat_compo 247 WRITE(lunout, *) 'IN STRATAER : ok_qemiss = ', ok_qemiss 248 ENDIF 249 249 ENDIF ! if master 250 250 251 251 !--initialising dry diameters to geometrically spaced mass/volume (see Jacobson 1994) 252 mdw(1) =mdwmin252 mdw(1) = mdwmin 253 253 IF (V_rat<1.62) THEN ! compensate for dip in second bin for lower volume ratio 254 mdw(2)=mdw(1)*2.**(1./3.)255 DO it=3, nbtr_bin256 mdw(it)=mdw(it-1)*V_rat**(1./3.)257 254 mdw(2) = mdw(1) * 2.**(1. / 3.) 255 DO it = 3, nbtr_bin 256 mdw(it) = mdw(it - 1) * V_rat**(1. / 3.) 257 ENDDO 258 258 ELSE 259 DO it=2, nbtr_bin260 mdw(it)=mdw(it-1)*V_rat**(1./3.)261 262 ENDIF 263 IF (is_master) WRITE(lunout, *) 'init mdw=', mdw264 259 DO it = 2, nbtr_bin 260 mdw(it) = mdw(it - 1) * V_rat**(1. / 3.) 261 ENDDO 262 ENDIF 263 IF (is_master) WRITE(lunout, *) 'init mdw=', mdw 264 265 265 ! compute particle radius RRSI [cm] and volume Vbin [m3] from diameter mdw [m] 266 266 ALLOCATE(RRSI(nbtr_bin), Vbin(nbtr_bin)) 267 268 DO it =1,nbtr_bin269 270 RRSI(it)=mdw(it)/2.*100.271 272 Vbin(it)=4.0*RPI*((mdw(it)/2.)**3)/3.0267 268 DO it = 1, nbtr_bin 269 ! [cm] 270 RRSI(it) = mdw(it) / 2. * 100. 271 ! [m3] 272 Vbin(it) = 4.0 * RPI * ((mdw(it) / 2.)**3) / 3.0 273 273 ENDDO 274 274 275 275 IF (is_master) THEN 276 WRITE(lunout,*) 'init RRSI=', RRSI277 WRITE(lunout,*) 'init Vbin=', Vbin278 ENDIF 279 280 WRITE(lunout, *) 'IN STRATAER INIT END'281 276 WRITE(lunout, *) 'init RRSI=', RRSI 277 WRITE(lunout, *) 'init Vbin=', Vbin 278 ENDIF 279 280 WRITE(lunout, *) 'IN STRATAER INIT END' 281 282 282 END SUBROUTINE strataer_init 283 283 284 284 END MODULE strataer_local_var_mod -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/stratdistrib.F90
r5087 r5098 6 6 USE dimphy, ONLY : klon,klev 7 7 USE strataer_local_var_mod 8 USE YOMCST, only : RPI8 USE lmdz_yomcst, only : RPI 9 9 10 10 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/stratemit.F90
r5087 r5098 10 10 USE phys_cal_mod 11 11 USE phys_local_var_mod, ONLY: d_q_emiss 12 USE YOMCST, only : RD, RPI, RG12 USE lmdz_yomcst, only : RD, RPI, RG 13 13 USE geometry_mod, ONLY : cell_area, boundslat 14 14 USE aerophys -
LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/traccoag_mod.F90
r5087 r5098 24 24 USE sulfate_aer_mod 25 25 USE phys_local_var_mod, ONLY: stratomask 26 USE YOMCST26 USE lmdz_yomcst 27 27 USE print_control_mod, ONLY: lunout 28 28 USE strataer_local_var_mod
Note: See TracChangeset
for help on using the changeset viewer.