! etodos - things to do ! etodos - ! etodos - get the print_mosaic_stats working with mosaic2 ! etodos - !************************************************************************ ! This computer software was prepared by Battelle Memorial Institute, ! hereinafter the Contractor, under Contract No. DE-AC05-76RL0 1830 with ! the Department of Energy (DOE). NEITHER THE GOVERNMENT NOR THE ! CONTRACTOR MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY ! LIABILITY FOR THE USE OF THIS SOFTWARE. ! ! Aerosol Option: MOSAIC (Model for Simulating Aerosol Interactions & ! Chemistry) ! * Primary investigator: Rahul A. Zaveri ! * Co-investigator: Richard C. Easter, William I. Gustafson Jr. ! Last update: February 2009 ! ! Contacts: ! Rahul A. Zaveri, PhD Jerome D. Fast, PhD ! Senior Research Scientist Staff Scientist ! Pacific Northwest National Laboratory Pacific Northwest National Laboratory ! P.O. Box 999, MSIN K9-30 P.O. Box 999, MSIN K9-30 ! Richland, WA 99352 Richland, WA, 99352 ! Phone: (509) 372-6159 Phone: (509) 372-6116 ! Email: Rahul.Zaveri@pnl.gov Email: Jerome.Fast@pnl.gov ! ! Please report any bugs or problems to Rahul Zaveri, the primary author ! of the code, or Jerome Fast, the WRF-chem implementation team leader ! for PNNL. ! ! Terms of Use: ! 1) Users are requested to consult the primary author prior to ! modifying the MOSAIC code or incorporating it or its submodules in ! another code. This is meant to ensure that the any linkages and/or ! assumptions will not adversely affect the operation of MOSAIC. ! 2) The MOSAIC source code is intended for research and educational ! purposes. Users are requested to contact the primary author ! regarding the use of MOSAIC code for any commercial application. ! 3) Users preparing publications resulting from the usage of MOSAIC are ! requested to cite one or more of the references below (depending on ! the application) for proper acknowledgement. ! ! References for MOSAIC (The first one is the primary MOSAIC reference): ! * Zaveri R.A., R.C. Easter, J.D. Fast, and L.K. Peters (2008), Model ! for Simulating Aerosol Interactions and Chemistry (MOSAIC), J. ! Geophys. Res., 113, D13204, doi:10.1029/2007JD008782. ! * Zaveri R.A., R.C. Easter, and A.S. Wexler (2005), A new method for ! multi-component activity coefficients of electrolytes in aqueous ! atmospheric aerosols, J. Geophys. Res., 110, D02201, ! doi:10.1029/2004JD004681. ! * Zaveri R.A., R.C. Easter, and L.K. Peters (2005), A computationally ! efficient multicomponent equilibrium solver for aerosols (MESA), J. ! Geophys. Res., 110, D24203, doi:24203, doi:10.1029/2004JD005618. ! ! References for implementation of the aerosol optical properties and ! direct effect in WRF-Chem: ! * Fast, J.D., W.I. Gustafson Jr., R.C. Easter, R.A. Zaveri, J.C. ! Barnard, E.G. Chapman, G.A. Grell, and S.E. Peckham (2005), Evolution ! of ozone, particulates, and aerosol direct radiative forcing in the ! vicinity of Houston using a fully-coupled meteorology-chemistry- ! aerosol model, J. Geophys. Res., 111, D21305, ! doi:10.1029/2005JD006721. ! * Barnard, J.C., J.D. Fast, G. Paredes-Miranda, W.P. Arnott, et al. ! (2009), Closure on the single scattering albedo in the WRF-Chem ! framework using data from the MILAGRO campaign, Atmos. Chem. Phys., ! submitted. ! ! References for implementation of the aerosol-cloud interactions and ! indirect effects in WRF-Chem: ! * Gustafson, W. I., E. G. Chapman, S. J. Ghan, R. C. Easter, and J. D. ! Fast (2007), Impact on modeled cloud characteristics due to ! simplified treatment of uniform cloud condensation nuclei during ! NEAQS 2004, Geophys. Res. Lett., 34, L19809, L19809, ! doi:10.1029/2007GL0300321. ! * Chapman, E.G., W. I. Gustafson Jr., R. C. Easter, J. C. Barnard, ! S. J. Ghan, M. S. Pekour, and J. D. Fast (2009): Coupling aerosol- ! cloud-radiative processes in the WRF-Chem model: Investigating the ! radiative impact of elevated point sources, Atmos. Chem. Phys., 9, ! 945-964, www.atmos-chem-phys.net/9/945/2009/. ! ! Contact Jerome Fast for updates on the status of manuscripts under ! review. ! ! Additional information: ! * www.pnl.gov/atmospheric/research/wrf-chem ! ! Support: ! Funding for developing and evaluating MOSAIC was provided by the U.S. ! Department of Energy under the auspices of Atmospheric Science Program ! of the Office of Biological and Environmental Research, the NASA Earth ! Sciences Enterprise under grant NAGW 3367, and PNNL Laboratory Directed ! Research and Development program. !************************************************************************ module module_mosaic2_driver ! ! *** NOTE - when the cw species are NOT in the registry, then ! then the p_xxx_cwnn variables are not in module_state_description, ! and the following cpp directive should be commented out ! #define cw_species_are_in_registry implicit none contains !----------------------------------------------------------------------- ! ! rce 2005-feb-18 - one fix involving dcen_sect indices [now (isize,itype)] ! ! rce 2004-dec-03 - many changes associated with the new aerosol "pointer" ! variables in module_data_mosaic_asect ! nov-04 sg ! replaced amode with aer and expanded aerosol dimension ! to include type and phase ! ! rce 11-sep-2004 - numerous changes ! eliminated use of the _wrfch pointers (lptr_xxx_a_wrfch, ! lwaterptr_wrfch, numptr_wrfch); use only the _aer pointers now ! aboxtest_... variables are now in module_data_mosaic_other ! !----------------------------------------------------------------------- subroutine mosaic2_aerchem_driver( & id, curr_secs, ktau, dtstep, ktauc, dtstepc, & config_flags, & t_phy, rho_phy, p_phy, & moist, chem, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte ) use module_configure, only: grid_config_rec_type, & p_qv, p_so2, p_ho2, p_so4aj, p_corn, p_hcl, p_mtf, & p_so4_a01, p_water_a01, p_num_a01, & p_so4_a04, p_water_a04, p_num_a04 use module_state_description, only: num_moist, num_chem, param_first_scalar use module_data_mosaic_kind, only: r8 ! use module_data_mosaic_aero, only: nbin_a_max use module_data_mosaic_aero, only: nbin_a_max, msoa_flag1, msoa_vbs_info use module_data_mosaic_main, only: ntot_used use module_mosaic_aerdynam_intr, only: aerosoldynamics ! use module_mosaic_therm, only: print_mosaic_stats, & ! iprint_mosaic_fe1, iprint_mosaic_perform_stats, & ! iprint_mosaic_diag1, iprint_mosaic_input_ok use module_peg_util, only: peg_error_fatal, peg_message implicit none !----------------------------------------------------------------------- ! DESCRIPTION ! ! mosaic_aerchem_driver is the interface between wrf-chem and the ! mosaic aerosol-chemistry routine cat computes condensation/evaporation ! of trace gases to/from aerosol particles (AP). It currently treats ! water vapor and the 4 inorganic trace gases (nh3, h2so4, hno3, and hcl). ! The aerosol-chemistry routine can work with either a sectional ! (multiple size bins) or modal (multiple modes) representation. ! ! In both cases, condensation/evaporation to/from each bins/mode is ! first computed. For sectional representation, AP mass and number ! are then transferred between size bins as a result of AP ! positive/negative growth. Either a moving-center or two-moment ! algorithm can be used to compute this transfer. ! ! mosaic_aerchem_driver is organized as follows ! loop over j and i ! call mapaer_tofrom_host to map 1 column of gas and aerosol mixing ! ratios from the chem array to the rsub array (and convert units) ! call aerchemistry to do the aerosol chemistry calculations ! for timestep = dtstepc ! call mapaer_tofrom_host to map 1 column of gas and aerosol mixing ! ratios from the rsub array back to the chem array ! !----------------------------------------------------------------------- ! subr arguments integer, intent(in) :: & id, ktau, ktauc, & ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte ! id - domain index ! ktau - time step number ! ktauc - gas and aerosol chemistry time step number ! [ids:ide, kds:kde, jds:jde] - spatial (x,z,y) indices for "domain" ! [ims:ime, kms:kme, jms:jme] - spatial (x,z,y) indices for "memory" ! Most arrays that are arguments to chem_driver ! are dimensioned with these spatial indices. ! [its:ite, kts:kte, jts:jte] - spatial (x,z,y) indices for "tile" ! chem_driver and routines under it do calculations ! over these spatial indices. real(kind=8), intent(in) :: curr_secs real, intent(in) :: dtstep, dtstepc ! dtstep - main model time step (s) ! dtstepc - time step for gas and aerosol chemistry(s) real, intent(in), & dimension( ims:ime, kms:kme, jms:jme ) :: & t_phy, rho_phy, p_phy ! t_phy - temperature (K) ! rho_phy - air density (kg/m^3) ! p_phy - air pressure (Pa) real, intent(in), & dimension( ims:ime, kms:kme, jms:jme, 1:num_moist ) :: & moist ! moist - mixing ratios of moisture species (water vapor, ! cloud water, ...) (kg/kg for mass species, #/kg for number species) real, intent(inout), & dimension( ims:ime, kms:kme, jms:jme, 1:num_chem ) :: & chem ! chem - mixing ratios of trace gase (ppm) and aerosol species ! (ug/kg for mass species, #/kg for number species) type(grid_config_rec_type), intent(in) :: config_flags ! config_flags - configuration and control parameters !----------------------------------------------------------------------- ! local variables integer, parameter :: debug_level=0 integer :: i, itmpa, istat, it, j, jt, jtmpa, k, kt, l, n integer :: levdbg_err, levdbg_info integer :: i_force_dump, mode_force_dump integer :: idiagaa, idiagbb, ijkcount integer :: iter_mesa(nbin_a_max), jaerosolstate(nbin_a_max) real(r8) :: dtchem real(r8) :: tempbox, presbox, airdenbox, relhumbox, swdownbox real(r8) :: rbox(ntot_used), rbox0(ntot_used) real(r8) :: dp_dry_a(nbin_a_max), dp_wet_a(nbin_a_max) real, dimension( ims:ime, jms:jme ) :: swdown character*100 msg if ( config_flags%aerchem_onoff <= 0 ) return ! aerosol chem/dynam turned off swdown = 0.0 ! in wrf 3.5 this was passed in from chem_driver ! in wrf 3.9 it is currently not passed in and so is set to zero ! set some variables to their wrf-chem "standard" values mode_force_dump = 0 levdbg_err = 0 levdbg_info = 15 ijkcount = 0 if ((jde-jds > 2) .or. (ide-ids > 2)) then idiagaa = 0 ! not single column - set to 0 to disable all diagnostics idiagbb = 0 else idiagaa = 100 ! single column run idiagbb = 100 end if if (idiagaa > 0) print 93010, 'entered mosaic2_aerchem_driver - ktau =', ktau !rcetestc diagnostics -------------------------------------------------- if (debug_level .ge. 15 .or. idiagaa >= 100) then if (ktauc .le. 2) then print 93010, ' ' print 93010, 'rcetestc diagnostics from mosaic2_aerchem_driver' print '(a,5i9)', 'msoa_flag1, msoa_vbs_info(1:3)', msoa_flag1, msoa_vbs_info(1:3) print 93010, 'id, chem_opt, ktau, ktauc ', & id, config_flags%chem_opt, ktau, ktauc print 93020, 'dtstep, dtstepc ', & dtstep, dtstepc print 93010, 'ids/e, j, k', ids, ide, jds, jde, kds, kde print 93010, 'ims/e, j, k', ims, ime, jms, jme, kms, kme print 93010, 'its/e, j, k', its, ite, jts, jte, kts, kte print 93010, 'num_chem, param_first_scalar ', num_chem, param_first_scalar print 93010, 'p_so2, p_ho2 ', p_so2, p_ho2 print 93010, 'p_so4aj, p_corn, p_hcl, p_mtf', p_so4aj, p_corn, p_hcl, p_mtf print 93010, 'p_so4_a01, p_water, p_num_a01', p_so4_a01, p_water_a01, p_num_a01 print 93010, 'p_so4_a04, p_water, p_num_a04', p_so4_a04, p_water_a04, p_num_a04 k = kts print 93020, 't, p, rho, qv at its/kts /jts', t_phy(its,k,jts), & p_phy(its,k,jts), rho_phy(its,k,jts), moist(its,k,jts,p_qv) k = (kts + kte)/2 print 93020, 't, p, rho, qv at its/ktmi/jts', t_phy(its,k,jts), & p_phy(its,k,jts), rho_phy(its,k,jts), moist(its,k,jts,p_qv) k = kte print 93020, 't, p, rho, qv at its/kte /jts', t_phy(its,k,jts), & p_phy(its,k,jts), rho_phy(its,k,jts), moist(its,k,jts,p_qv) 93010 format( a, 8(1x,i6) ) 93020 format( a, 8(1p,e14.6) ) end if end if !rcetestc diagnostics -------------------------------------------------- ! using wrf timing routines ! iymdcur = 1 + int( curr_secs/86400._8 ) ! ihmscur = nint( mod( curr_secs, 86400._8 ) ) ! t = curr_secs ! call print_mosaic_stats( 0 ) main_jt_loop: & do jt = jts, jte main_kt_loop: & do kt = kts, kte main_it_loop: & do it = its, ite ijkcount = ijkcount + 1 dtchem = dtstepc ! mode_force_dump selects a detailed dump of gaschem at either ! first ijk grid, first ij column, all ijk, or no ijk i_force_dump = 0 ! if (mode_force_dump .eq. 10) then ! if ((it.eq.its) .and. (jt.eq.jts)) i_force_dump = 1 ! else if (mode_force_dump .eq. 100) then ! i_force_dump = 1 ! else if (mode_force_dump .eq. 77) then ! if ( (it .eq. (its+ite)/2) .and. & ! (jt .eq. (jts+jte)/2) ) i_force_dump = 1 ! end if if (idiagaa >= 100) print 93010, & 'calling mosaic2_map 0 - ktau,ktauc,id,i,k,j =', ktau, ktauc, id, it, kt, jt call mosaic2_map_tofrom_host( 0, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & it, jt, kt, & t_phy, p_phy, rho_phy, swdown, moist, chem, & rbox, tempbox, presbox, airdenbox, & relhumbox, swdownbox ) ! save initial mixrats rbox0(1:nbin_a_max) = rbox(1:nbin_a_max) ! if (i_force_dump > 0) call aerchem_debug_dump( 1, it, jt, dtchem ) if (idiagaa >= 100) print 93010, & 'calling aerosoldynamics - ktau,ktauc,id,i,k,j =', ktau, ktauc, id, it, kt, jt call aerosoldynamics( & !intent-ins idiagbb, & id, it, jt, kt, & ktau, ktauc, dtchem, & tempbox, presbox, airdenbox, relhumbox, & swdownbox, & rbox, iter_mesa, jaerosolstate, & !intent-inouts dp_dry_a, dp_wet_a ) call wrf_debug(300,"mosaic_aerchem_driver: back from aerchemistry") ! if (i_force_dump > 0) call aerchem_debug_dump( 3, it, jt, dtchem ) if (idiagaa >= 100) print 93010, & 'calling mosaic2_map 1 - ktau,ktauc,id,i,k,j =', ktau, ktauc, id, it, kt, jt call mosaic2_map_tofrom_host( 1, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & it, jt, kt, & t_phy, p_phy, rho_phy, swdown, moist, chem, & rbox, tempbox, presbox, airdenbox, & relhumbox, swdownbox ) end do main_it_loop end do main_kt_loop end do main_jt_loop ! call print_mosaic_stats( 1 ) if (idiagaa > 0) print 93010, 'leaving mosaic2_aerchem_driver - ktau =', ktau return end subroutine mosaic2_aerchem_driver !----------------------------------------------------------------------- subroutine mosaic2_map_tofrom_host( imap, & ids,ide, jds,jde, kds,kde, & ims,ime, jms,jme, kms,kme, & its,ite, jts,jte, kts,kte, & it, jt, kt, & t_phy, p_phy, rho_phy, swdown, moist, chem, & rbox, tempbox, presbox, airdenbox, & relhumbox, swdownbox ) use module_data_mosaic_kind, only: r8 use module_data_mosaic_main, only: ntot_used use module_mosaic_csuesat, only: esat_gchm use module_configure, only: p_qv, p_qc use module_state_description, only: num_moist, num_chem, param_first_scalar use module_peg_util, only: peg_error_fatal, peg_message implicit none ! subr arguments ! imap determines mapping direction (chem-->rsub if <=0, rsub-->chem if >0) integer, intent(in) :: imap ! wrf array dimensions integer, intent(in) :: ids, ide, jds, jde, kds, kde integer, intent(in) :: ims, ime, jms, jme, kms, kme integer, intent(in) :: its, ite, jts, jte, kts, kte ! do mapping for wrf i,k,j grid points = [it,kt,jt] integer, intent(in) :: it, jt, kt real, intent(in), dimension( ims:ime, kms:kme, jms:jme ) :: & t_phy, rho_phy, p_phy real, intent(in), dimension( ims:ime, jms:jme ) :: swdown real, intent(in), & dimension( ims:ime, kms:kme, jms:jme, 1:num_moist ) :: & moist real, intent(inout), & dimension( ims:ime, kms:kme, jms:jme, 1:num_chem ) :: & chem real(r8), intent(inout), dimension( ntot_used ) :: rbox real(r8), intent(inout) :: tempbox, presbox, airdenbox, relhumbox, swdownbox ! local variables integer :: l real, parameter :: eps=0.622 real :: tmp_esat, tmp_pres, tmp_rh, tmp_temp, tmp_vap, tmp_vapsat if (imap >= 1) go to 20000 ! map from chem to rbox do l = 1, ntot_used if (l >= param_first_scalar .and. l <= num_chem) then rbox(l) = max( chem(it,kt,jt,l), 0.0_r8 ) else rbox(l) = 0.0_r8 end if end do ! map state variables tempbox = t_phy(it,kt,jt) presbox = p_phy(it,kt,jt) airdenbox = rho_phy(it,kt,jt) swdownbox = swdown(it,jt) ! calculate relhum tmp_temp = t_phy(it,kt,jt) ! (deg k) tmp_pres = p_phy(it,kt,jt)*10.0 ! air pressure (dyne/cm2) tmp_esat = esat_gchm( tmp_temp ) ! saturation vapor pressure (dyne/cm2) tmp_vapsat = tmp_esat / (tmp_pres - (1.0-eps)*tmp_esat) ! sat. mix ratio (mol-h2o/mol-air) tmp_vap = moist(it,kt,jt,p_qv) / eps ! ambient mix ratio (mol-h2o/mol-air) tmp_rh = tmp_vap / max( tmp_vapsat, 1.0e-20 ) tmp_rh = max( 0.0, min( 0.98, tmp_rh ) ) !rce 2017.11.24 relhumbox = tmp_rh ! what about cloud water, and sw radiation ??? return 20000 continue ! map from rbox to chem do l = 1, ntot_used if (l >= param_first_scalar .and. l <= num_chem) then chem(it,kt,jt,l) = max( rbox(l), 0.0_r8 ) end if end do return end subroutine mosaic2_map_tofrom_host !----------------------------------------------------------------------- subroutine init_data_mosaic2_asect( id, config_flags, is_aerosol, vbs_nbin) ! ! major refactoring in jun-2015 to clean up this very old code ! before implementing external mixing ! use module_configure, only: grid_config_rec_type use module_state_description, only: num_chem use module_peg_util, only: peg_error_fatal, peg_message use module_data_mosaic_aero, only: & mcoag_flag1, mmovesect_flag1, mnewnuc_flag1, & nbin_a, nbin_a_max use module_data_mosaic_asecthp use module_data_mosaic_main, only: & naerbin, naerbin_used, naer_max, naer_tot, & ntot_max, ntot_used use module_data_mosaic_boxmod, only: name_rbox implicit none integer, intent(in) :: id integer, intent(in) :: vbs_nbin(*) type(grid_config_rec_type), intent(in) :: config_flags logical, intent(out) :: is_aerosol(num_chem) ! local variables integer :: i, itype, itmpa, j, jtmpa, l, n integer :: vbs_uq_aqsoa, vbs_uq_par character(len=200) :: msg ! dimension of rbox array (and copies of it) ntot_max = num_chem ntot_used = num_chem ! these were used in wrfscmee but may not be needed in wrf39 vbs_uq_aqsoa = 0 vbs_uq_par = 0 ! allocate and initialize name_rbox() if ( .not. allocated( name_rbox ) ) allocate( name_rbox(ntot_used) ) do l = 1, ntot_used write( name_rbox(l), '(a,i4.4,15x)' ) 'r', l end do ! ! inititialize some mosaic2 variables ! call mosaic2_wrfchem_init( 1, vbs_nbin, vbs_uq_aqsoa, vbs_uq_par ) ! set mastercomp info call peg_message( lunerr, 'call mosaic2_set_mastercomp' ) call mosaic2_set_mastercomp( ) ! set number of aerosol types call peg_message( lunerr, 'call mosaic2_set_ntype' ) call mosaic2_set_ntype( config_flags%chem_opt, lunerr ) ! set number of aerosol phases and some other phase-related variables call peg_message( lunerr, 'call mosaic2_set_nphase' ) call mosaic2_set_nphase( config_flags%chem_opt, lunerr ) ! set number of aerosol bins call peg_message( lunerr, 'call mosaic2_set_nsize' ) call mosaic2_set_nsize( config_flags%chem_opt, lunerr ) ! ! set nbin_a to total number of aerosol bins (for all types) ! n = 0 do itype = 1, ntype_aer n = n + nsize_aer(itype) end do nbin_a = n if (nbin_a .gt. nbin_a_max) then call peg_error_fatal( lunerr, & 'init_data_mosaic2_asect - nbin_a > nbin_a_maxd' ) end if naerbin = nbin_a naerbin_used = nbin_a naer_max = naer_tot*naerbin call peg_message( lunerr, 'mosaic2_set_3dbin_1dbin_ptrs' ) ! *** aer_extmix_opt has not been put into wrfscmee/Registry/registry.chem ! call mosaic2_set_3dbin_1dbin_ptrs( config_flags%chem_opt, config_flags%aer_extmix_opt, lunerr ) call mosaic2_set_3dbin_1dbin_ptrs( config_flags%chem_opt, 0, lunerr ) ! ! set section size arrays ! ! set bin (section) sizes call peg_message( lunerr, 'call mosaic2_set_bin_sizes' ) call mosaic2_set_bin_sizes( config_flags%chem_opt, lunerr ) ! ! set pointers to wrf chem-array species ! call init_data_mosaic2_ptr( id, config_flags%chem_opt, is_aerosol ) ! ! inititialize some mosaic2 variables ! call mosaic2_wrfchem_init( 2, vbs_nbin, vbs_uq_aqsoa, vbs_uq_par ) ! ! set pointers for mapping between rbox array and gas, aer, num_a, water_a arrays ! call set_rbox_gas_ptrs call set_rbox_aer_ptrs ! ! reset some "mosaic2" control variables using config_flags%mosaic_aerchem_optaa ! itmpa = max( config_flags%mosaic_aerchem_optaa, 0 ) if (itmpa >= 10000) then jtmpa = mod(itmpa,100)/10 ! 10s digit controls movesect if (jtmpa == 0) mmovesect_flag1 = 0 ! no movesect -- this turns off newnuc and coag **** if (jtmpa == 1) mmovesect_flag1 = 10 ! 1d moving-center if (jtmpa == 2) mmovesect_flag1 = 20 ! 1d linear-discrete if (jtmpa == 5) mmovesect_flag1 = 50 ! 3d moving-center if (jtmpa == 6) mmovesect_flag1 = 60 ! 3d linear-discrete for size and moving-center for wbc and kappa jtmpa = mod(itmpa,1000)/100 ! 100s digit controls newnuc if (jtmpa == 0) mnewnuc_flag1 = 0 ! no newnuc if (jtmpa == 1) mnewnuc_flag1 = 1 ! merikanto (2007) ternary if (jtmpa == 2) mnewnuc_flag1 = 2 ! vehkamaki (2002) binary if (jtmpa == 3) mnewnuc_flag1 = 3 ! wexler (1994) if (jtmpa == 5) mnewnuc_flag1 = 11 ! empirical 1st-order for pbl if (jtmpa == 6) mnewnuc_flag1 = 12 ! empirical 2nd-order for pbl jtmpa = mod(itmpa,10000)/1000 ! 1000s digit controls coag if (jtmpa == 0) mcoag_flag1 = 0 ! no coag if (jtmpa == 1) mcoag_flag1 = 1 ! 1d moving-center implicit in time (jacobson) if (jtmpa == 2) mcoag_flag1 = 10 ! 1d moving-center explicit in time if (jtmpa == 6) mcoag_flag1 = 60 ! 3d moving-center explicit in time if (ntype_aer > 1) then ! movesect and coag must use 3d methods unless they are off if (mmovesect_flag1 == 10) mmovesect_flag1 = 50 if (mmovesect_flag1 == 20) mmovesect_flag1 = 60 if (mcoag_flag1 == 1) mcoag_flag1 = 60 if (mcoag_flag1 == 10) mcoag_flag1 = 60 end if end if ! (itmpa /= 1) then write(msg,'(a,4i10)') & 'mosaic_aerchem_optaa, mmovesect_flag1, mnewnuc_flag1, mcoag_flag1 =', & config_flags%mosaic_aerchem_optaa, mmovesect_flag1, mnewnuc_flag1, mcoag_flag1 call peg_message( lunerr, 'call mosaic2_set_bin_sizes' ) ! ! csuesat initialization ! ! call init_csuesat ! ! below cloud scavenging initialization ! ! call initwet( & ! ntype_aer, nsize_aer, ncomp_aer, & ! massptr_aer, dens_aer, numptr_aer, & ! maxd_acomp, maxd_asize,maxd_atype, maxd_aphase, & ! dcen_sect, sigmag_aer, & ! waterptr_aer, dens_water_aer, & ! scavimptblvol, scavimptblnum, nimptblgrow_mind, & ! nimptblgrow_maxd, dlndg_nimptblgrow) ! ! move_sect initialization (and testing) ! ! subr move_sections( iflag, iclm, jclm, k, m ) ! call move_sections( -1, 1, 1, 1, 1 ) ! call test_move_sections( 1, 1, 1, 1, 1 ) end subroutine init_data_mosaic2_asect !----------------------------------------------------------------------- subroutine init_data_mosaic2_ptr( id, chem_opt, is_aerosol ) ! ! major refactoring in jun-2015 to clean up this very old code ! before implementing external mixing ! use module_configure use module_state_description, only: num_chem, p1st => param_first_scalar use module_data_mosaic_asecthp use module_data_mosaic_main, only: ntot_used use module_peg_util, only: peg_error_fatal, peg_message implicit none ! subr arguments integer, intent(in) :: id, chem_opt logical, intent(out) :: is_aerosol(num_chem) ! local variables integer l, ll, n integer icomp, isize, itype, iphase character*200 msg ! ! set up pointers to aerosol species in the wrf-chem "chem" array ! note: lptr=1 points to the first chem species which is "unused" ! call peg_message( lunerr, 'call mosaic2_set_all_lnw_ptr' ) call mosaic2_set_all_lnw_ptr( chem_opt, ntot_used, lunerr ) ! ! define the mastercompptr_aer pointers and the ncomp_aer ! call peg_message( lunerr, 'call mosaic2_set_ncomp' ) call mosaic2_set_ncomp( chem_opt, lunerr ) ! ! define the massptr_aer pointers species names ! call peg_message( lunerr, 'call mosaic2_set_massptr' ) call mosaic2_set_massptr( chem_opt, ntot_used, lunerr ) call peg_message( lunerr, 'done mosaic2_set_massptr' ) ! ! output wrfchem pointers ! call mosaic2_output_wrfchem_pointers( id ) ! ! check aerosol species pointers for "validity" ! ! *** this code is no longer needed ! the mosaic2_set_massptr, mosaic2_set_one_wptr, and mosaic2_set_one_lptr routines ! now check that the various pointers (massptr, numptr, waterptr, hywsptr, lptr_xxx) ! are defined for ! all sizes, phases, and types for required things ! or are defined for ! all OR no sizes, phases, and types for non-required things ! if ( 1 == 0 ) then end if ! ( 1 == 0 ) then ! ! set the "k pointer" and name_rbox() for gas species used by mosaic routines ! call mosaic2_set_gas_kptrs_names ! ! set the following ! is_aerosol() ! name_rbox() for aerosol species ! call mosaic2_set_otheraa( chem_opt, is_aerosol ) return end subroutine init_data_mosaic2_ptr !----------------------------------------------------------------------- subroutine mosaic2_wrfchem_init( ipass, vbs_nbin, vbs_uq_aqsoa, vbs_uq_par ) !---------------------------------------------------------------------------------------! ! this routine is based on Balwinders mosaic_cam_init ! ! BSINGH: This subroutine initialzies some Mosaic conastans and inpput parameters ! Called by: modal_aero_initialize_data.F90 !---------------------------------------------------------------------------------------! ! use spmd_utils, only: masterproc ! use cam_logfile, only: iulog ! use modal_aero_amicphys, only: max_mode use module_data_mosaic_kind, only: r8 use module_data_mosaic_aero, only: & alpha_ASTEM, ptol_mol_ASTEM, rtol_eqb_ASTEM, & mGAS_AER_XFER, mDYNAMIC_SOLVER, & mhyst_method, mhyst_uporlo_waterhyst, & msize_framework, msectional, & method_bcfrac, method_kappa, & maersize_init_flag1, mcoag_flag1, ifreq_coag, & mmovesect_flag1, mnewnuc_flag1, msectional_flag1, msectional_flag2, & msoa_flag1, msoa_vbs_info, & use_cam5mam_soa_params, use_cam5mam_accom_coefs use module_data_mosaic_main, only: & ipmcmos, m_partmc_mosaic, maer, mcld, mgas, & maeroptic, mphoto, mshellcore, msolar use module_data_mosaic_asecthp, only: ntype_aer, ntype_md1_aer, ntype_md2_aer use module_data_mosaic_constants, only: pi, piover4, piover6, deg2rad, third, avogad ! use physconst, only: pi_cam => pi use module_mosaic_init_aerpar, only: mosaic_init_aer_params integer, intent(in) :: ipass integer, intent(in) :: vbs_nbin(*), vbs_uq_aqsoa, vbs_uq_par ! do ipass=1 stuff so that msoa_flag1 is set at the very start if (ipass == 1) then msoa_vbs_info(:) = -99 msoa_vbs_info(1) = vbs_nbin(1) if (vbs_nbin(1) > 0) then !rce 2017.11.24 msoa_flag1 = 1000 msoa_vbs_info(2) = vbs_uq_aqsoa msoa_vbs_info(3) = vbs_uq_par else msoa_flag1 = 1 msoa_flag1 = 0 ! for testing end if print '(/a,5i9)', 'msoa_flag1, msoa_vbs_info(1:3)', msoa_flag1, msoa_vbs_info(1:3) return end if ! Initialize Mosaic constants with values from CAM constants ! nbin_a_max = max_mode !*BALLI* Ask Dick about it ! nbin_a = max_mode !Maximum # of modes is equal to # of bins in Mosaic ! if(masterproc) then ! write(iulog,*) 'mosaic_cam_init: nbin_a_max=', nbin_a_max ! endif ! pi = pi_cam !Pi value from CAM ! pi = 3.14159265358979323846_r8 ! from shr_const_mod.F90 of CAM ! piover4 = 0.25_r8 * pi ! piover6 = pi/6.0_r8 ! deg2rad = pi/180.0_r8 ! third = 1.0_r8/3.0_r8 ! avogad = 6.022e23_r8 ! use_cam5mam_soa_params = 1 ! use cam5-mam soa/soag parameter values ! use_cam5mam_accom_coefs = 1 ! use cam5-mam accomodation coefficient values use_cam5mam_soa_params = 0 ! use cam5-mam soa/soag parameter values use_cam5mam_accom_coefs = 0 ! use cam5-mam accomodation coefficient values ! BSINGH - Initialize other constants which sit in the input file of Mosaic ! and are used in the present code(**BALLI Ask Dick about it) ! mhyst_method = mhyst_force_up !rceaster !mhyst_method (1=uporlo_jhyst, 2=uporlo_waterhyst, 3=force_up, 4=force_low) mhyst_method = mhyst_uporlo_waterhyst !rceaster !mhyst_method (1=uporlo_jhyst, 2=uporlo_waterhyst, 3=force_up, 4=force_low) mGAS_AER_XFER = 1 !mGAS_AER_XFER: 1=do gas-aerosol partitioning 0=do not partition mDYNAMIC_SOLVER = 1 !mDYNAMIC_SOLVER: 1=astem 2=lsodes ! msize_framework = mmodal ! rceaster (1=modal, 2=unstructured, 3=sectional) msize_framework = msectional ! rceaster (1=modal, 2=unstructured, 3=sectional) alpha_ASTEM = 0.05 !Solver parameter. range: 0.01 - 1.0 rtol_eqb_ASTEM = 0.01 !Relative eqb tolerance. range: 0.01 - 0.03 ptol_mol_ASTEM = 0.01 !Percent mol tolerance. range: 0.01 - 1.0 ipmcmos = 0 !Additional inputs needed when ipmcmos > 0 m_partmc_mosaic = 0 !Always 0 except when in the PartMC-MOSAIC model ! BSINGH - Initialize constants to 'bigint' which sit in the input file of Mosaic ! and are NOT used in the present code(**BALLI Ask Dick about it) ! 'bigint' initialized variables will cause the code to halt on their first use ! in the cam routine, all these are set to bigint ! ntype_md1_aer = bigint !(number of aerosol types) - set this elsewhere ! ntype_md2_aer = bigint !(number of aerosol types) - set this elsewhere method_bcfrac = 1 !(only used for sectional and ntype>1) method_kappa = 11 !(only used for sectional and ntype>1) maersize_init_flag1 = 0 !(only used for sectional and ntype>1 in offline box model) ifreq_coag = 1 !(only used for sectional) do coag only when mod(itmosaic,ifreq_coag) = 0 if (ntype_aer <= 1) then mcoag_flag1 = 10 !(only used for sectional) 0=off, 10=1d jacobsen, 20=1d moving-center, 60=2-3d hybrid mmovesect_flag1 = 20 !(only used for sectional) 0=off, 10=1d moving-center, 20=1d linear-discrete, 60=2-3d hybrid else mcoag_flag1 = 60 !(only used for sectional) 0=off, 10=1d jacobsen, 20=1d moving-center, 60=2-3d hybrid mmovesect_flag1 = 60 !(only used for sectional) 0=off, 10=1d moving-center, 20=1d linear-discrete, 60=2-3d hybrid end if mnewnuc_flag1 = 3 !(only used for sectional) 0=off, 1 = merikanto (2007) ternary, 2 = vehkamaki (2002) binary ! 3 = wexler (1994), 11 = empirical 1st-order for pbl, 12 = empirical 2nd-order for pbl msectional_flag1 = 1 !(currently not used) msectional_flag2 = 0 if (ntype_aer > 1) msectional_flag2 = 1 mgas = 0 !: 1=gas chem on, 0=gas chem off** maer = 1 !: 1=aer chem on, 0=aer chem off** mcld = 0 !: 1=cld chem on, 0=cld chem off** maeroptic = 0 !: 1=aer_optical on, 0=aer_optical off ** mshellcore = 0 !: 0=no shellcore, 1=core is BC only, 2=core is BC and DUST ** msolar = 0 !: 1=diurnally varying phot, 2=fixed phot** mphoto = 0 !: 1=Rick's param 2=Yang's param** call mosaic_init_aer_params end subroutine mosaic2_wrfchem_init !----------------------------------------------------------------------- subroutine mosaic2_output_wrfchem_pointers( id ) use module_data_mosaic_asecthp use module_peg_util, only: peg_error_fatal, peg_message use module_scalar_tables, only: chem_dname_table implicit none ! subr arguments integer, intent(in) :: id ! local variables integer l, ll, lu, n, ns integer icomp, isize, itype, iphase, jt, jp character*200 msg ! ! output wrfch pointers ! 9350 format( a, 32(1x,i4) ) msg = ' ' call peg_message( lunout, msg ) msg = 'output from subr mosaic2_output_wrfchem_pointers' call peg_message( lunout, trim(msg) ) write(msg,9350) 'nphase_aer = ', nphase_aer call peg_message( lunout, trim(msg) ) do iphase=1,nphase_aer write(msg,9350) 'iphase = ', iphase call peg_message( lunout, trim(msg) ) write(msg,9350) 'ntype_aer = ', ntype_aer call peg_message( lunout, trim(msg) ) write(msg,9350) 'ncomp_aer = ', ncomp_aer call peg_message( lunout, trim(msg) ) do itype=1,ntype_aer write(msg,9350) 'itype = ', itype call peg_message( lunout, trim(msg) ) write(msg,9350) 'nsize_aer = ', nsize_aer(itype) call peg_message( lunout, trim(msg) ) jt = itype jp = iphase ns = nsize_aer(itype) lu = lunout call mosaic2_out1ptraa( "numptr_aer ", numptr_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "hyswptr_aer ", hyswptr_aer(1:ns,jt), ns, lu ) call mosaic2_out1ptraa( "waterptr_aer ", waterptr_aer(1:ns,jt), ns, lu ) call mosaic2_out1ptraa( "lptr_so4_aer ", lptr_so4_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_no3_aer ", lptr_no3_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_cl_aer ", lptr_cl_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_msa_aer ", lptr_msa_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_co3_aer ", lptr_co3_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_nh4_aer ", lptr_nh4_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_na_aer ", lptr_na_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_ca_aer ", lptr_ca_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_oin_aer ", lptr_oin_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_aro1_aer ", lptr_aro1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_aro2_aer ", lptr_aro2_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_alk1_aer ", lptr_alk1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_ole1_aer ", lptr_ole1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_api1_aer ", lptr_api1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_api2_aer ", lptr_api2_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_lim1_aer ", lptr_lim1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_lim2_aer ", lptr_lim2_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_dust_aer ", lptr_dust_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_tr1r1_aer ", lptr_tr1r1_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_oc_aer ", lptr_oc_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_bc_aer ", lptr_bc_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_tanv_aer ", lptr_tanv_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_sopnv_aer ", lptr_sopnv_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_ternv_aer ", lptr_ternv_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_seqnv_aer ", lptr_seqnv_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "lptr_sianv_aer ", lptr_sianv_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg1_b_c_aer ", lptr_pcg1_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg2_b_c_aer ", lptr_pcg2_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg3_b_c_aer ", lptr_pcg3_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg4_b_c_aer ", lptr_pcg4_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg5_b_c_aer ", lptr_pcg5_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg6_b_c_aer ", lptr_pcg6_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg7_b_c_aer ", lptr_pcg7_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg8_b_c_aer ", lptr_pcg8_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg9_b_c_aer ", lptr_pcg9_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg1_b_o_aer ", lptr_pcg1_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg2_b_o_aer ", lptr_pcg2_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg3_b_o_aer ", lptr_pcg3_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg4_b_o_aer ", lptr_pcg4_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg5_b_o_aer ", lptr_pcg5_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg6_b_o_aer ", lptr_pcg6_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg7_b_o_aer ", lptr_pcg7_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg8_b_o_aer ", lptr_pcg8_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg9_b_o_aer ", lptr_pcg9_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg1_b_c_aer ", lptr_opcg1_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg2_b_c_aer ", lptr_opcg2_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg3_b_c_aer ", lptr_opcg3_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg4_b_c_aer ", lptr_opcg4_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg5_b_c_aer ", lptr_opcg5_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg6_b_c_aer ", lptr_opcg6_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg7_b_c_aer ", lptr_opcg7_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg8_b_c_aer ", lptr_opcg8_b_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg1_b_o_aer ", lptr_opcg1_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg2_b_o_aer ", lptr_opcg2_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg3_b_o_aer ", lptr_opcg3_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg4_b_o_aer ", lptr_opcg4_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg5_b_o_aer ", lptr_opcg5_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg6_b_o_aer ", lptr_opcg6_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg7_b_o_aer ", lptr_opcg7_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg8_b_o_aer ", lptr_opcg8_b_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg1_f_c_aer ", lptr_pcg1_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg2_f_c_aer ", lptr_pcg2_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg3_f_c_aer ", lptr_pcg3_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg4_f_c_aer ", lptr_pcg4_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg5_f_c_aer ", lptr_pcg5_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg6_f_c_aer ", lptr_pcg6_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg7_f_c_aer ", lptr_pcg7_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg8_f_c_aer ", lptr_pcg8_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg9_f_c_aer ", lptr_pcg9_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg1_f_o_aer ", lptr_pcg1_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg2_f_o_aer ", lptr_pcg2_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg3_f_o_aer ", lptr_pcg3_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg4_f_o_aer ", lptr_pcg4_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg5_f_o_aer ", lptr_pcg5_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg6_f_o_aer ", lptr_pcg6_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg7_f_o_aer ", lptr_pcg7_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg8_f_o_aer ", lptr_pcg8_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_pcg9_f_o_aer ", lptr_pcg9_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg1_f_c_aer ", lptr_opcg1_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg2_f_c_aer ", lptr_opcg2_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg3_f_c_aer ", lptr_opcg3_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg4_f_c_aer ", lptr_opcg4_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg5_f_c_aer ", lptr_opcg5_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg6_f_c_aer ", lptr_opcg6_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg7_f_c_aer ", lptr_opcg7_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg8_f_c_aer ", lptr_opcg8_f_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg1_f_o_aer ", lptr_opcg1_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg2_f_o_aer ", lptr_opcg2_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg3_f_o_aer ", lptr_opcg3_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg4_f_o_aer ", lptr_opcg4_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg5_f_o_aer ", lptr_opcg5_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg6_f_o_aer ", lptr_opcg6_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg7_f_o_aer ", lptr_opcg7_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "lptr_opcg8_f_o_aer ", lptr_opcg8_f_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant1_c_aer ", lptr_ant1_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant2_c_aer ", lptr_ant2_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant3_c_aer ", lptr_ant3_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant4_c_aer ", lptr_ant4_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant1_o_aer ", lptr_ant1_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant2_o_aer ", lptr_ant2_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant3_o_aer ", lptr_ant3_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "ant4_o_aer ", lptr_ant4_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog1_c_aer ", lptr_biog1_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog2_c_aer ", lptr_biog2_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog3_c_aer ", lptr_biog3_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog4_c_aer ", lptr_biog4_c_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog1_o_aer ", lptr_biog1_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog2_o_aer ", lptr_biog2_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog3_o_aer ", lptr_biog3_o_aer(1:ns,jt,jp), ns, lu ) call mosaic2_out1ptraa( "biog4_o_aer ", lptr_biog4_o_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "iepox_aer ", lptr_iepox_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "iepoxos_aer ", lptr_iepoxos_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "tetrol_aer ", lptr_tetrol_aer(1:ns,jt,jp), ns, lu ) ! call mosaic2_out1ptraa( "gly_aer ", lptr_gly_aer(1:ns,jt,jp), ns, lu ) 9352 format( 5a ) do ll = 1, ncomp_plustracer_aer(itype) write(msg,9350) 'massptr_aer(), ll', & (massptr_aer(ll,n,itype,iphase), n=1,nsize_aer(itype)), ll call peg_message( lunout, trim(msg) ) write(msg,9352) 'chem_dname_table = ', & (chem_dname_table(id,(massptr_aer(ll,n,itype,iphase)))(1:14),n=1,4) call peg_message( lunout, trim(msg) ) end do ! ll end do ! itype end do ! iphase return end subroutine mosaic2_output_wrfchem_pointers !----------------------------------------------------------------------- subroutine mosaic2_out1ptraa( lptrname, lptr, nsz, lunout ) use module_peg_util, only: peg_message integer, intent(in) :: nsz, lunout, lptr(1:nsz) character(len=*), intent(in) :: lptrname character*200 msg 9350 format( a, 32(1x,i4) ) write(msg,9350) lptrname, lptr(1:nsz) call peg_message( lunout, trim(msg) ) return end subroutine mosaic2_out1ptraa !----------------------------------------------------------------------- subroutine mosaic2_set_gas_kptrs_names ! ! set k-pointer & name_rbox() for gases used in mosaic aerosol and lcloud chemistry routine ! use module_state_description, only: num_chem, p1st => param_first_scalar use module_configure, only: p_h2so4, p_sulf use module_peg_util, only: peg_error_fatal, peg_message use module_data_mosaic_main, only: ntot_used use module_data_mosaic_asecthp, only: & lunout, lunerr use module_data_mosaic_boxmod, only: name_rbox, & kh2so4, khno3, khcl, knh3, kmsa, ko3, & kso2, kh2o2, khcho, koh, kho2, & kno3, kno, kno2, khono, kpan, & kn2o5, kclno2, & karo1, karo2, kalk1, kole1, & kapi1, kapi2, klim1, klim2, & kpcg1_b_c, kpcg2_b_c, kpcg3_b_c, kpcg4_b_c, kpcg5_b_c, & kpcg6_b_c, kpcg7_b_c, kpcg8_b_c, kpcg9_b_c, & kpcg1_b_o, kpcg2_b_o, kpcg3_b_o, kpcg4_b_o, kpcg5_b_o, & kpcg6_b_o, kpcg7_b_o, kpcg8_b_o, kpcg9_b_o, & kpcg1_f_c, kpcg2_f_c, kpcg3_f_c, kpcg4_f_c, kpcg5_f_c, & kpcg6_f_c, kpcg7_f_c, kpcg8_f_c, kpcg9_f_c, & kpcg1_f_o, kpcg2_f_o, kpcg3_f_o, kpcg4_f_o, kpcg5_f_o, & kpcg6_f_o, kpcg7_f_o, kpcg8_f_o, kpcg9_f_o, & kopcg1_b_c, kopcg2_b_c, kopcg3_b_c, kopcg4_b_c, & kopcg5_b_c, kopcg6_b_c, kopcg7_b_c, kopcg8_b_c, & kopcg1_b_o, kopcg2_b_o, kopcg3_b_o, kopcg4_b_o, & kopcg5_b_o, kopcg6_b_o, kopcg7_b_o, kopcg8_b_o, & kopcg1_f_c, kopcg2_f_c, kopcg3_f_c, kopcg4_f_c, & kopcg5_f_c, kopcg6_f_c, kopcg7_f_c, kopcg8_f_c, & kopcg1_f_o, kopcg2_f_o, kopcg3_f_o, kopcg4_f_o, & kopcg5_f_o, kopcg6_f_o, kopcg7_f_o, kopcg8_f_o, & kant1_c, kant2_c, kant3_c, kant4_c, & kant1_o, kant2_o, kant3_o, kant4_o, & kbiog1_c, kbiog2_c, kbiog3_c, kbiog4_c, & kbiog1_o, kbiog2_o, kbiog3_o, kbiog4_o, & ksmpa, ksmpbb, & ! kiepox, kgly, & khcooh, kch3o2, kch3oh, kch3ooh implicit none ! subr arguments ! local variables integer l, ll, n character*200 msg msg = ' ' call peg_message( lunout, msg ) msg = 'output from subr mosaic2_set_gas_kptrs_names' call peg_message( lunout, trim(msg) ) ! ! set pointer and name for h2so4 ! if (p_h2so4 .ge. p1st .and. p_h2so4 .le. ntot_used) then kh2so4 = p_h2so4 else if (p_sulf .ge. p1st .and. p_sulf .le. ntot_used) then kh2so4 = p_sulf else msg = '*** subr mosaic2_set_gas_kptrs_names - ptr error for h2so4' call peg_error_fatal( lunerr, msg ) end if if ((kh2so4 .ge. p1st) .and. (kh2so4 .le. ntot_used)) then name_rbox(kh2so4 ) = 'h2so4' endif ! ! set pointer and name for other gases ! ! for ho / oh, chem_dname_table() and name_rbox() are different call mosaic2_set_one_gas_kptr_name( "ho", l ) if ((l .ge. p1st) .and. (l .le. ntot_used)) then koh = l name_rbox(koh ) = 'oh' endif call mosaic2_set_one_gas_kptr_name( "hno3", khno3 ) call mosaic2_set_one_gas_kptr_name( "nh3", knh3 ) call mosaic2_set_one_gas_kptr_name( "hcl", khcl ) call mosaic2_set_one_gas_kptr_name( "msa", kmsa ) call mosaic2_set_one_gas_kptr_name( "aro1", karo1 ) call mosaic2_set_one_gas_kptr_name( "aro2", karo2 ) call mosaic2_set_one_gas_kptr_name( "alk1", kalk1 ) call mosaic2_set_one_gas_kptr_name( "ole1", kole1 ) call mosaic2_set_one_gas_kptr_name( "api1", kapi1 ) call mosaic2_set_one_gas_kptr_name( "api2", kapi2 ) call mosaic2_set_one_gas_kptr_name( "lim1", klim1 ) call mosaic2_set_one_gas_kptr_name( "lim2", klim2 ) call mosaic2_set_one_gas_kptr_name( "n2o5", kn2o5 ) call mosaic2_set_one_gas_kptr_name( "clno2", kclno2 ) call mosaic2_set_one_gas_kptr_name( "o3", ko3 ) call mosaic2_set_one_gas_kptr_name( "pcg1_b_c", kpcg1_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg2_b_c", kpcg2_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg3_b_c", kpcg3_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg4_b_c", kpcg4_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg5_b_c", kpcg5_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg6_b_c", kpcg6_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg7_b_c", kpcg7_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg8_b_c", kpcg8_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg9_b_c", kpcg9_b_c ) call mosaic2_set_one_gas_kptr_name( "pcg1_b_o", kpcg1_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg2_b_o", kpcg2_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg3_b_o", kpcg3_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg4_b_o", kpcg4_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg5_b_o", kpcg5_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg6_b_o", kpcg6_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg7_b_o", kpcg7_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg8_b_o", kpcg8_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg9_b_o", kpcg9_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg1_b_c", kopcg1_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg2_b_c", kopcg2_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg3_b_c", kopcg3_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg4_b_c", kopcg4_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg5_b_c", kopcg5_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg6_b_c", kopcg6_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg7_b_c", kopcg7_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg8_b_c", kopcg8_b_c ) call mosaic2_set_one_gas_kptr_name( "opcg1_b_o", kopcg1_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg2_b_o", kopcg2_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg3_b_o", kopcg3_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg4_b_o", kopcg4_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg5_b_o", kopcg5_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg6_b_o", kopcg6_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg7_b_o", kopcg7_b_o ) call mosaic2_set_one_gas_kptr_name( "opcg8_b_o", kopcg8_b_o ) call mosaic2_set_one_gas_kptr_name( "pcg1_f_c", kpcg1_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg2_f_c", kpcg2_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg3_f_c", kpcg3_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg4_f_c", kpcg4_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg5_f_c", kpcg5_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg6_f_c", kpcg6_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg7_f_c", kpcg7_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg8_f_c", kpcg8_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg9_f_c", kpcg9_f_c ) call mosaic2_set_one_gas_kptr_name( "pcg1_f_o", kpcg1_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg2_f_o", kpcg2_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg3_f_o", kpcg3_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg4_f_o", kpcg4_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg5_f_o", kpcg5_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg6_f_o", kpcg6_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg7_f_o", kpcg7_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg8_f_o", kpcg8_f_o ) call mosaic2_set_one_gas_kptr_name( "pcg9_f_o", kpcg9_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg1_f_c", kopcg1_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg2_f_c", kopcg2_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg3_f_c", kopcg3_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg4_f_c", kopcg4_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg5_f_c", kopcg5_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg6_f_c", kopcg6_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg7_f_c", kopcg7_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg8_f_c", kopcg8_f_c ) call mosaic2_set_one_gas_kptr_name( "opcg1_f_o", kopcg1_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg2_f_o", kopcg2_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg3_f_o", kopcg3_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg4_f_o", kopcg4_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg5_f_o", kopcg5_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg6_f_o", kopcg6_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg7_f_o", kopcg7_f_o ) call mosaic2_set_one_gas_kptr_name( "opcg8_f_o", kopcg8_f_o ) call mosaic2_set_one_gas_kptr_name( "smpa", ksmpa ) call mosaic2_set_one_gas_kptr_name( "smpbb", ksmpbb ) ! call mosaic2_set_one_gas_kptr_name( "iepox", kiepox ) ! call mosaic2_set_one_gas_kptr_name( "gly", kgly ) call mosaic2_set_one_gas_kptr_name( "ant1_c", kant1_c ) call mosaic2_set_one_gas_kptr_name( "ant2_c", kant2_c ) call mosaic2_set_one_gas_kptr_name( "ant3_c", kant3_c ) call mosaic2_set_one_gas_kptr_name( "ant4_c", kant4_c ) call mosaic2_set_one_gas_kptr_name( "ant1_o", kant1_o ) call mosaic2_set_one_gas_kptr_name( "ant2_o", kant2_o ) call mosaic2_set_one_gas_kptr_name( "ant3_o", kant3_o ) call mosaic2_set_one_gas_kptr_name( "ant4_o", kant4_o ) call mosaic2_set_one_gas_kptr_name( "biog1_c", kbiog1_c ) call mosaic2_set_one_gas_kptr_name( "biog2_c", kbiog2_c ) call mosaic2_set_one_gas_kptr_name( "biog3_c", kbiog3_c ) call mosaic2_set_one_gas_kptr_name( "biog4_c", kbiog4_c ) call mosaic2_set_one_gas_kptr_name( "biog1_o", kbiog1_o ) call mosaic2_set_one_gas_kptr_name( "biog2_o", kbiog2_o ) call mosaic2_set_one_gas_kptr_name( "biog3_o", kbiog3_o ) call mosaic2_set_one_gas_kptr_name( "biog4_o", kbiog4_o ) call mosaic2_set_one_gas_kptr_name( "so2", kso2 ) call mosaic2_set_one_gas_kptr_name( "h2o2", kh2o2 ) call mosaic2_set_one_gas_kptr_name( "hcho", khcho ) call mosaic2_set_one_gas_kptr_name( "hcooh", khcooh ) call mosaic2_set_one_gas_kptr_name( "ho2", kho2 ) call mosaic2_set_one_gas_kptr_name( "no3", kno3 ) call mosaic2_set_one_gas_kptr_name( "no", kno ) call mosaic2_set_one_gas_kptr_name( "no2", kno2 ) call mosaic2_set_one_gas_kptr_name( "hono", khono ) call mosaic2_set_one_gas_kptr_name( "pan", kpan ) call mosaic2_set_one_gas_kptr_name( "ch3o2", kch3o2 ) call mosaic2_set_one_gas_kptr_name( "ch3oh", kch3oh ) call mosaic2_set_one_gas_kptr_name( "ch3ooh", kch3ooh ) return end subroutine mosaic2_set_gas_kptrs_names !----------------------------------------------------------------------- subroutine mosaic2_set_one_gas_kptr_name( gasname, kptr ) use module_data_mosaic_asecthp, only: lunerr, lunout use module_data_mosaic_boxmod, only: name_rbox use module_data_mosaic_main, only: ntot_used use module_state_description, only: p1st => param_first_scalar use module_peg_util, only: peg_error_fatal, peg_message integer, intent(inout) :: kptr character(len=*), intent(in) :: gasname integer :: l character(len=40) :: chemname character(len=200) :: msg chemname = gasname call mosaic2_find_chemname_in_table( chemname, l ) if (l > ntot_used) then write(msg,'(2a,2(1x,i5),2x,a)') 'mosaic2_set_one_gas_kptr_name error', & ' - l, ntot_used, gasname = ', l, ntot_used, trim(gasname) call peg_error_fatal( lunerr, msg ) end if if (l >= p1st) then kptr = l name_rbox(l) = gasname end if write(msg,'(2i12,2a)') l, kptr, ' = k', trim(chemname) call peg_message( lunout, trim(msg) ) return end subroutine mosaic2_set_one_gas_kptr_name !----------------------------------------------------------------------- subroutine set_rbox_gas_ptrs ! ! sets the rbox_gas_ptr(igas) values that are used to ! map gas species between the rbox array and the gas array ! use module_state_description, only: p1st => param_first_scalar use module_data_mosaic_aero, only: & gas_name, ngas_aerchtot, & ih2so4_g, ihno3_g, ihcl_g, inh3_g, & imsa_g, & iaro1_g, iaro2_g, ialk1_g, iole1_g, & iapi1_g, iapi2_g, ilim1_g, ilim2_g, & in2o5_g, iclno2_g, & ipcg1_b_c_g, ipcg2_b_c_g, ipcg3_b_c_g, ipcg4_b_c_g, & ipcg5_b_c_g, ipcg6_b_c_g, ipcg7_b_c_g, ipcg8_b_c_g, & ipcg9_b_c_g, & ipcg1_b_o_g, ipcg2_b_o_g, ipcg3_b_o_g, ipcg4_b_o_g, & ipcg5_b_o_g, ipcg6_b_o_g, ipcg7_b_o_g, ipcg8_b_o_g, & ipcg9_b_o_g, & iopcg1_b_c_g, iopcg2_b_c_g, iopcg3_b_c_g, iopcg4_b_c_g, & iopcg5_b_c_g, iopcg6_b_c_g, iopcg7_b_c_g, iopcg8_b_c_g, & iopcg1_b_o_g, iopcg2_b_o_g, iopcg3_b_o_g, iopcg4_b_o_g, & iopcg5_b_o_g, iopcg6_b_o_g, iopcg7_b_o_g, iopcg8_b_o_g, & ipcg1_f_c_g, ipcg2_f_c_g, ipcg3_f_c_g, ipcg4_f_c_g, & ipcg5_f_c_g, ipcg6_f_c_g, ipcg7_f_c_g, ipcg8_f_c_g, & ipcg9_f_c_g, & ipcg1_f_o_g, ipcg2_f_o_g, ipcg3_f_o_g, ipcg4_f_o_g, & ipcg5_f_o_g, ipcg6_f_o_g, ipcg7_f_o_g, ipcg8_f_o_g, & ipcg9_f_o_g, & iopcg1_f_c_g, iopcg2_f_c_g, iopcg3_f_c_g, iopcg4_f_c_g, & iopcg5_f_c_g, iopcg6_f_c_g, iopcg7_f_c_g, iopcg8_f_c_g, & iopcg1_f_o_g, iopcg2_f_o_g, iopcg3_f_o_g, iopcg4_f_o_g, & iopcg5_f_o_g, iopcg6_f_o_g, iopcg7_f_o_g, iopcg8_f_o_g, & iant1_c_g, iant2_c_g, iant3_c_g, iant4_c_g, & iant1_o_g, iant2_o_g, iant3_o_g, iant4_o_g, & ibiog1_c_g, ibiog2_c_g, ibiog3_c_g, ibiog4_c_g, & ibiog1_o_g, ibiog2_o_g, ibiog3_o_g, ibiog4_o_g, & ismpa_g, ismpbb_g ! ismpa_g, ismpbb_g, & ! iiepox_g, igly_g use module_data_mosaic_asecthp, only: rbox_gas_ptr use module_data_mosaic_boxmod, only: & name_rbox, & kh2so4, khno3, khcl, knh3, kmsa, ko3, & kso2, kh2o2, khcho, koh, kho2, & kno3, kno, kno2, khono, kpan, & kn2o5, kclno2, & karo1, karo2, kalk1, kole1, & kapi1, kapi2, klim1, klim2, & kpcg1_b_c, kpcg2_b_c, kpcg3_b_c, kpcg4_b_c, kpcg5_b_c, & kpcg6_b_c, kpcg7_b_c, kpcg8_b_c, kpcg9_b_c, & kpcg1_b_o, kpcg2_b_o, kpcg3_b_o, kpcg4_b_o, kpcg5_b_o, & kpcg6_b_o, kpcg7_b_o, kpcg8_b_o, kpcg9_b_o, & kpcg1_f_c, kpcg2_f_c, kpcg3_f_c, kpcg4_f_c, kpcg5_f_c, & kpcg6_f_c, kpcg7_f_c, kpcg8_f_c, kpcg9_f_c, & kpcg1_f_o, kpcg2_f_o, kpcg3_f_o, kpcg4_f_o, kpcg5_f_o, & kpcg6_f_o, kpcg7_f_o, kpcg8_f_o, kpcg9_f_o, & kopcg1_b_c, kopcg2_b_c, kopcg3_b_c, kopcg4_b_c, & kopcg5_b_c, kopcg6_b_c, kopcg7_b_c, kopcg8_b_c, & kopcg1_b_o, kopcg2_b_o, kopcg3_b_o, kopcg4_b_o, & kopcg5_b_o, kopcg6_b_o, kopcg7_b_o, kopcg8_b_o, & kopcg1_f_c, kopcg2_f_c, kopcg3_f_c, kopcg4_f_c, & kopcg5_f_c, kopcg6_f_c, kopcg7_f_c, kopcg8_f_c, & kopcg1_f_o, kopcg2_f_o, kopcg3_f_o, kopcg4_f_o, & kopcg5_f_o, kopcg6_f_o, kopcg7_f_o, kopcg8_f_o, & kant1_c, kant2_c, kant3_c, kant4_c, & kant1_o, kant2_o, kant3_o, kant4_o, & kbiog1_c, kbiog2_c, kbiog3_c, kbiog4_c, & kbiog1_o, kbiog2_o, kbiog3_o, kbiog4_o, & ksmpa, ksmpbb, & ! kiepox, kgly, & khcooh, kch3o2, kch3oh, kch3ooh use module_data_mosaic_main, only: & ntot_used integer :: igas, l rbox_gas_ptr(1:ngas_aerchtot) = -1 call set_1_rbox_gas_ptr( ih2so4_g, kh2so4 ) call set_1_rbox_gas_ptr( ihno3_g, khno3 ) call set_1_rbox_gas_ptr( ihcl_g, khcl ) call set_1_rbox_gas_ptr( inh3_g, knh3 ) call set_1_rbox_gas_ptr( imsa_g, kmsa ) call set_1_rbox_gas_ptr( iaro1_g, karo1 ) call set_1_rbox_gas_ptr( iaro2_g, karo2 ) call set_1_rbox_gas_ptr( ialk1_g, kalk1 ) call set_1_rbox_gas_ptr( iole1_g, kole1 ) call set_1_rbox_gas_ptr( iapi1_g, kapi1 ) call set_1_rbox_gas_ptr( iapi2_g, kapi2 ) call set_1_rbox_gas_ptr( ilim1_g, klim1 ) call set_1_rbox_gas_ptr( ilim2_g, klim2 ) call set_1_rbox_gas_ptr( in2o5_g, kn2o5 ) call set_1_rbox_gas_ptr( iclno2_g, kclno2 ) call set_1_rbox_gas_ptr( ipcg1_b_c_g, kpcg1_b_c ) call set_1_rbox_gas_ptr( ipcg2_b_c_g, kpcg2_b_c ) call set_1_rbox_gas_ptr( ipcg3_b_c_g, kpcg3_b_c ) call set_1_rbox_gas_ptr( ipcg4_b_c_g, kpcg4_b_c ) call set_1_rbox_gas_ptr( ipcg5_b_c_g, kpcg5_b_c ) call set_1_rbox_gas_ptr( ipcg6_b_c_g, kpcg6_b_c ) call set_1_rbox_gas_ptr( ipcg7_b_c_g, kpcg7_b_c ) call set_1_rbox_gas_ptr( ipcg8_b_c_g, kpcg8_b_c ) call set_1_rbox_gas_ptr( ipcg9_b_c_g, kpcg9_b_c ) call set_1_rbox_gas_ptr( ipcg1_b_o_g, kpcg1_b_o ) call set_1_rbox_gas_ptr( ipcg2_b_o_g, kpcg2_b_o ) call set_1_rbox_gas_ptr( ipcg3_b_o_g, kpcg3_b_o ) call set_1_rbox_gas_ptr( ipcg4_b_o_g, kpcg4_b_o ) call set_1_rbox_gas_ptr( ipcg5_b_o_g, kpcg5_b_o ) call set_1_rbox_gas_ptr( ipcg6_b_o_g, kpcg6_b_o ) call set_1_rbox_gas_ptr( ipcg7_b_o_g, kpcg7_b_o ) call set_1_rbox_gas_ptr( ipcg8_b_o_g, kpcg8_b_o ) call set_1_rbox_gas_ptr( ipcg9_b_o_g, kpcg9_b_o ) call set_1_rbox_gas_ptr( iopcg1_b_c_g, kopcg1_b_c ) call set_1_rbox_gas_ptr( iopcg2_b_c_g, kopcg2_b_c ) call set_1_rbox_gas_ptr( iopcg3_b_c_g, kopcg3_b_c ) call set_1_rbox_gas_ptr( iopcg4_b_c_g, kopcg4_b_c ) call set_1_rbox_gas_ptr( iopcg5_b_c_g, kopcg5_b_c ) call set_1_rbox_gas_ptr( iopcg6_b_c_g, kopcg6_b_c ) call set_1_rbox_gas_ptr( iopcg7_b_c_g, kopcg7_b_c ) call set_1_rbox_gas_ptr( iopcg8_b_c_g, kopcg8_b_c ) call set_1_rbox_gas_ptr( iopcg1_b_o_g, kopcg1_b_o ) call set_1_rbox_gas_ptr( iopcg2_b_o_g, kopcg2_b_o ) call set_1_rbox_gas_ptr( iopcg3_b_o_g, kopcg3_b_o ) call set_1_rbox_gas_ptr( iopcg4_b_o_g, kopcg4_b_o ) call set_1_rbox_gas_ptr( iopcg5_b_o_g, kopcg5_b_o ) call set_1_rbox_gas_ptr( iopcg6_b_o_g, kopcg6_b_o ) call set_1_rbox_gas_ptr( iopcg7_b_o_g, kopcg7_b_o ) call set_1_rbox_gas_ptr( iopcg8_b_o_g, kopcg8_b_o ) call set_1_rbox_gas_ptr( ipcg1_f_c_g, kpcg1_f_c ) call set_1_rbox_gas_ptr( ipcg2_f_c_g, kpcg2_f_c ) call set_1_rbox_gas_ptr( ipcg3_f_c_g, kpcg3_f_c ) call set_1_rbox_gas_ptr( ipcg4_f_c_g, kpcg4_f_c ) call set_1_rbox_gas_ptr( ipcg5_f_c_g, kpcg5_f_c ) call set_1_rbox_gas_ptr( ipcg6_f_c_g, kpcg6_f_c ) call set_1_rbox_gas_ptr( ipcg7_f_c_g, kpcg7_f_c ) call set_1_rbox_gas_ptr( ipcg8_f_c_g, kpcg8_f_c ) call set_1_rbox_gas_ptr( ipcg9_f_c_g, kpcg9_f_c ) call set_1_rbox_gas_ptr( ipcg1_f_o_g, kpcg1_f_o ) call set_1_rbox_gas_ptr( ipcg2_f_o_g, kpcg2_f_o ) call set_1_rbox_gas_ptr( ipcg3_f_o_g, kpcg3_f_o ) call set_1_rbox_gas_ptr( ipcg4_f_o_g, kpcg4_f_o ) call set_1_rbox_gas_ptr( ipcg5_f_o_g, kpcg5_f_o ) call set_1_rbox_gas_ptr( ipcg6_f_o_g, kpcg6_f_o ) call set_1_rbox_gas_ptr( ipcg7_f_o_g, kpcg7_f_o ) call set_1_rbox_gas_ptr( ipcg8_f_o_g, kpcg8_f_o ) call set_1_rbox_gas_ptr( ipcg9_f_o_g, kpcg9_f_o ) call set_1_rbox_gas_ptr( iopcg1_f_c_g, kopcg1_f_c ) call set_1_rbox_gas_ptr( iopcg2_f_c_g, kopcg2_f_c ) call set_1_rbox_gas_ptr( iopcg3_f_c_g, kopcg3_f_c ) call set_1_rbox_gas_ptr( iopcg4_f_c_g, kopcg4_f_c ) call set_1_rbox_gas_ptr( iopcg5_f_c_g, kopcg5_f_c ) call set_1_rbox_gas_ptr( iopcg6_f_c_g, kopcg6_f_c ) call set_1_rbox_gas_ptr( iopcg7_f_c_g, kopcg7_f_c ) call set_1_rbox_gas_ptr( iopcg8_f_c_g, kopcg8_f_c ) call set_1_rbox_gas_ptr( iopcg1_f_o_g, kopcg1_f_o ) call set_1_rbox_gas_ptr( iopcg2_f_o_g, kopcg2_f_o ) call set_1_rbox_gas_ptr( iopcg3_f_o_g, kopcg3_f_o ) call set_1_rbox_gas_ptr( iopcg4_f_o_g, kopcg4_f_o ) call set_1_rbox_gas_ptr( iopcg5_f_o_g, kopcg5_f_o ) call set_1_rbox_gas_ptr( iopcg6_f_o_g, kopcg6_f_o ) call set_1_rbox_gas_ptr( iopcg7_f_o_g, kopcg7_f_o ) call set_1_rbox_gas_ptr( iopcg8_f_o_g, kopcg8_f_o ) call set_1_rbox_gas_ptr( iant1_c_g, kant1_c ) call set_1_rbox_gas_ptr( iant2_c_g, kant2_c ) call set_1_rbox_gas_ptr( iant3_c_g, kant3_c ) call set_1_rbox_gas_ptr( iant4_c_g, kant4_c ) call set_1_rbox_gas_ptr( iant1_o_g, kant1_o ) call set_1_rbox_gas_ptr( iant2_o_g, kant2_o ) call set_1_rbox_gas_ptr( iant3_o_g, kant3_o ) call set_1_rbox_gas_ptr( iant4_o_g, kant4_o ) call set_1_rbox_gas_ptr( ibiog1_c_g, kbiog1_c ) call set_1_rbox_gas_ptr( ibiog2_c_g, kbiog2_c ) call set_1_rbox_gas_ptr( ibiog3_c_g, kbiog3_c ) call set_1_rbox_gas_ptr( ibiog4_c_g, kbiog4_c ) call set_1_rbox_gas_ptr( ibiog1_o_g, kbiog1_o ) call set_1_rbox_gas_ptr( ibiog2_o_g, kbiog2_o ) call set_1_rbox_gas_ptr( ibiog3_o_g, kbiog3_o ) call set_1_rbox_gas_ptr( ibiog4_o_g, kbiog4_o ) call set_1_rbox_gas_ptr( ismpa_g, ksmpa ) call set_1_rbox_gas_ptr( ismpbb_g, ksmpbb ) ! call set_1_rbox_gas_ptr( iiepox_g, kiepox ) ! call set_1_rbox_gas_ptr( igly_g, kgly ) write(*,'(/a)') 'set_rbox_gas_ptrs' do igas = 1, ngas_aerchtot l = rbox_gas_ptr(igas) if ( (l < p1st) .or. (l > ntot_used) ) then rbox_gas_ptr(igas) = -1 write(*,'(2a,2i7)') 'rbox_gas_ptr ', gas_name(igas), igas, -999 else write(*,'(2a,2i7,2x,a7)') 'rbox_gas_ptr ', gas_name(igas), igas, l, name_rbox(l) end if end do return end subroutine set_rbox_gas_ptrs !----------------------------------------------------------------------- subroutine set_1_rbox_gas_ptr( igas, lgas ) use module_data_mosaic_aero, only: ngas_aerchtot use module_data_mosaic_asecthp, only: rbox_gas_ptr use module_data_mosaic_main, only: ntot_used use module_state_description, only: p1st => param_first_scalar integer, intent(in) :: igas, lgas if ( igas < 1 .or. igas > ngas_aerchtot) return if ( lgas < p1st .or. lgas > ntot_used ) return rbox_gas_ptr(igas) = lgas return end subroutine set_1_rbox_gas_ptr !----------------------------------------------------------------------- subroutine mosaic2_set_otheraa( chem_opt, is_aerosol ) ! ! set is_aerosol(), name_rbox() ! use module_configure use module_state_description, only: num_chem, p1st => param_first_scalar use module_scalar_tables, only: chem_dname_table use module_data_mosaic_asecthp use module_data_mosaic_main, only: ntot_used use module_data_mosaic_boxmod, only: name_rbox use module_peg_util, only: peg_error_fatal, peg_message ! subr arguments integer, intent(in) :: chem_opt logical, intent(inout) :: is_aerosol(num_chem) ! local variables integer i, j, l, ll, n integer icomp, isize, itype, iphase character*200 msg character*20 tmpch20 msg = ' ' call peg_message( lunout, msg ) msg = 'output from subr mosaic2_set_otheraa' call peg_message( lunout, trim(msg) ) is_aerosol(1:num_chem) = .false. do iphase = 1, nphase_aer do itype = 1, ntype_aer do isize = 1, nsize_aer(itype) do icomp = 1, ncomp_aer(itype) l = massptr_aer(icomp,isize,itype,iphase) if (l >= p1st .and. l <= num_chem) then is_aerosol(l) = .true. name_rbox(l) = chem_dname_table(1,l) end if end do ! icomp l = numptr_aer(isize,itype,iphase) if (l >= p1st .and. l <= num_chem) then is_aerosol(l) = .true. name_rbox(l) = chem_dname_table(1,l) end if if (iphase == ai_phase) then l = waterptr_aer(isize,itype) if (l >= p1st .and. l <= num_chem) then is_aerosol(l) = .true. name_rbox(l) = chem_dname_table(1,l) end if l = hyswptr_aer(isize,itype) if (l >= p1st .and. l <= num_chem) then is_aerosol(l) = .true. name_rbox(l) = chem_dname_table(1,l) end if end if ! (iphase == ai_phase) then end do ! isize end do ! itype end do ! iphase do l = 1, ntot_used tmpch20 = chem_dname_table(1,l)(1:20) do i = 1, 20 j = ichar(tmpch20(i:i)) if (j < 32 .or. j > 126) tmpch20(i:i) = '?' end do msg = ' ' if (l > num_chem) then write(msg,'(a,i5,2(2x,a20))') 'name ', l, name_rbox(l)(1:20) else if (name_rbox(l) == chem_dname_table(1,l)) then write(msg,'(a,i5,2(2x,a20))') 'chem_dname', l, tmpch20 else write(msg,'(a,i5,2(2x,a20))') 'name_dname', l, name_rbox(l)(1:20), tmpch20 end if call peg_message( lunout, trim(msg) ) end do return end subroutine mosaic2_set_otheraa !----------------------------------------------------------------------- subroutine mosaic2_set_all_lnw_ptr( chem_opt, lmax, lunerr ) use module_data_mosaic_asecthp, only: & ai_phase, & maxd_asize, maxd_atype, maxd_aphase, & numptr_aer, hyswptr_aer, waterptr_aer, & lptr_so4_aer, lptr_no3_aer, lptr_cl_aer, lptr_msa_aer, & lptr_co3_aer, lptr_nh4_aer, lptr_na_aer, lptr_ca_aer, & lptr_oc_aer, lptr_bc_aer, lptr_oin_aer, & lptr_aro1_aer, lptr_aro2_aer, lptr_alk1_aer, lptr_ole1_aer, & lptr_api1_aer, lptr_api2_aer, lptr_lim1_aer, lptr_lim2_aer, & ! lptr_dust_aer, & ! lptr_tr1r1_aer, lptr_tr1r2_aer, lptr_tr1r3_aer, lptr_tr1r4_aer, & ! lptr_tanv_aer, lptr_sopnv_aer, lptr_ternv_aer, lptr_seqnv_aer, & ! lptr_sianv_aer, lptr_pcg1_b_c_aer, lptr_pcg2_b_c_aer, lptr_pcg3_b_c_aer, & lptr_pcg1_b_c_aer, lptr_pcg2_b_c_aer, lptr_pcg3_b_c_aer, & lptr_pcg4_b_c_aer, lptr_pcg5_b_c_aer, lptr_pcg6_b_c_aer, lptr_pcg7_b_c_aer, & lptr_pcg8_b_c_aer, lptr_pcg9_b_c_aer, lptr_pcg1_b_o_aer, lptr_pcg2_b_o_aer, & lptr_pcg3_b_o_aer, lptr_pcg4_b_o_aer, lptr_pcg5_b_o_aer, lptr_pcg6_b_o_aer, & lptr_pcg7_b_o_aer, lptr_pcg8_b_o_aer, lptr_pcg9_b_o_aer, lptr_opcg1_b_c_aer, & lptr_opcg2_b_c_aer, lptr_opcg3_b_c_aer, lptr_opcg4_b_c_aer, lptr_opcg5_b_c_aer, & lptr_opcg6_b_c_aer, lptr_opcg7_b_c_aer, lptr_opcg8_b_c_aer, lptr_opcg1_b_o_aer, & lptr_opcg2_b_o_aer, lptr_opcg3_b_o_aer, lptr_opcg4_b_o_aer, lptr_opcg5_b_o_aer, & lptr_opcg6_b_o_aer, lptr_opcg7_b_o_aer, lptr_opcg8_b_o_aer, lptr_pcg1_f_c_aer, & lptr_pcg2_f_c_aer, lptr_pcg3_f_c_aer, lptr_pcg4_f_c_aer, lptr_pcg5_f_c_aer, & lptr_pcg6_f_c_aer, lptr_pcg7_f_c_aer, lptr_pcg8_f_c_aer, lptr_pcg9_f_c_aer, & lptr_pcg1_f_o_aer, lptr_pcg2_f_o_aer, lptr_pcg3_f_o_aer, lptr_pcg4_f_o_aer, & lptr_pcg5_f_o_aer, lptr_pcg6_f_o_aer, lptr_pcg7_f_o_aer, lptr_pcg8_f_o_aer, & lptr_pcg9_f_o_aer, lptr_opcg1_f_c_aer, lptr_opcg2_f_c_aer, lptr_opcg3_f_c_aer, & lptr_opcg4_f_c_aer, lptr_opcg5_f_c_aer, lptr_opcg6_f_c_aer, lptr_opcg7_f_c_aer, & lptr_opcg8_f_c_aer, lptr_opcg1_f_o_aer, lptr_opcg2_f_o_aer, lptr_opcg3_f_o_aer, & lptr_opcg4_f_o_aer, lptr_opcg5_f_o_aer, lptr_opcg6_f_o_aer, lptr_opcg7_f_o_aer, & lptr_opcg8_f_o_aer, lptr_smpa_aer, lptr_smpbb_aer, & ! lptr_opcg8_f_o_aer, lptr_smpa_aer, lptr_smpbb_aer, lptr_iepox_aer, & ! lptr_iepoxos_aer, lptr_tetrol_aer, lptr_gly_aer, lptr_ant1_c_aer, & lptr_ant1_c_aer, & lptr_ant2_c_aer, lptr_ant3_c_aer, lptr_ant4_c_aer, lptr_ant1_o_aer, & lptr_ant2_o_aer, lptr_ant3_o_aer, lptr_ant4_o_aer, lptr_biog1_c_aer, & lptr_biog2_c_aer, lptr_biog3_c_aer, lptr_biog4_c_aer, lptr_biog1_o_aer, & lptr_biog2_o_aer, lptr_biog3_o_aer, lptr_biog4_o_aer integer, intent(in) :: chem_opt, lmax, lunerr integer :: lptr_tmp(maxd_asize,maxd_atype,maxd_aphase) ! required call mosaic2_set_one_lnw_ptr( numptr_aer, 'num', 1, 0, lmax, lunerr ) ! required and ai_phase only call mosaic2_set_one_lnw_ptr( lptr_tmp, 'water', 1, 1, lmax, lunerr ) waterptr_aer(1:maxd_asize,1:maxd_atype) = lptr_tmp(1:maxd_asize,1:maxd_atype,ai_phase) call mosaic2_set_one_lnw_ptr( lptr_tmp, 'hysw', 1, 1, lmax, lunerr ) hyswptr_aer(1:maxd_asize,1:maxd_atype) = lptr_tmp(1:maxd_asize,1:maxd_atype,ai_phase) ! required call mosaic2_set_one_lnw_ptr( lptr_so4_aer, "so4", 1, 0, lmax, lunerr ) ! not required, although a few of them should be call mosaic2_set_one_lnw_ptr( lptr_no3_aer, "no3", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_cl_aer, "cl", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_msa_aer, "msa", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_co3_aer, "co3", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_nh4_aer, "nh4", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_na_aer, "na", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ca_aer, "ca", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_oc_aer, "oc", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_bc_aer, "bc", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_oin_aer, "oin", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_aro1_aer, "aro1", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_aro2_aer, "aro2", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_alk1_aer, "alk1", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ole1_aer, "ole1", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_api1_aer, "api1", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_api2_aer, "api2", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_lim1_aer, "lim1", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_lim2_aer, "lim2", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_dust_aer, "dust", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tr1r1_aer, "tr1r1", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tr1r2_aer, "tr1r2", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tr1r3_aer, "tr1r3", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tr1r4_aer, "tr1r4", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tanv_aer, "tanv", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_sopnv_aer, "sopnv", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_ternv_aer, "ternv", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_seqnv_aer, "seqnv", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_sianv_aer, "sianv", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg1_b_c_aer, "pcg1_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg2_b_c_aer, "pcg2_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg3_b_c_aer, "pcg3_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg4_b_c_aer, "pcg4_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg5_b_c_aer, "pcg5_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg6_b_c_aer, "pcg6_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg7_b_c_aer, "pcg7_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg8_b_c_aer, "pcg8_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg9_b_c_aer, "pcg9_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg1_b_o_aer, "pcg1_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg2_b_o_aer, "pcg2_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg3_b_o_aer, "pcg3_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg4_b_o_aer, "pcg4_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg5_b_o_aer, "pcg5_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg6_b_o_aer, "pcg6_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg7_b_o_aer, "pcg7_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg8_b_o_aer, "pcg8_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg9_b_o_aer, "pcg9_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg1_b_c_aer, "opcg1_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg2_b_c_aer, "opcg2_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg3_b_c_aer, "opcg3_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg4_b_c_aer, "opcg4_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg5_b_c_aer, "opcg5_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg6_b_c_aer, "opcg6_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg7_b_c_aer, "opcg7_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg8_b_c_aer, "opcg8_b_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg1_b_o_aer, "opcg1_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg2_b_o_aer, "opcg2_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg3_b_o_aer, "opcg3_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg4_b_o_aer, "opcg4_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg5_b_o_aer, "opcg5_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg6_b_o_aer, "opcg6_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg7_b_o_aer, "opcg7_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg8_b_o_aer, "opcg8_b_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg1_f_c_aer, "pcg1_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg2_f_c_aer, "pcg2_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg3_f_c_aer, "pcg3_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg4_f_c_aer, "pcg4_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg5_f_c_aer, "pcg5_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg6_f_c_aer, "pcg6_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg7_f_c_aer, "pcg7_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg8_f_c_aer, "pcg8_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg9_f_c_aer, "pcg9_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg1_f_o_aer, "pcg1_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg2_f_o_aer, "pcg2_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg3_f_o_aer, "pcg3_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg4_f_o_aer, "pcg4_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg5_f_o_aer, "pcg5_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg6_f_o_aer, "pcg6_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg7_f_o_aer, "pcg7_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg8_f_o_aer, "pcg8_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_pcg9_f_o_aer, "pcg9_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg1_f_c_aer, "opcg1_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg2_f_c_aer, "opcg2_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg3_f_c_aer, "opcg3_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg4_f_c_aer, "opcg4_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg5_f_c_aer, "opcg5_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg6_f_c_aer, "opcg6_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg7_f_c_aer, "opcg7_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg8_f_c_aer, "opcg8_f_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg1_f_o_aer, "opcg1_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg2_f_o_aer, "opcg2_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg3_f_o_aer, "opcg3_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg4_f_o_aer, "opcg4_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg5_f_o_aer, "opcg5_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg6_f_o_aer, "opcg6_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg7_f_o_aer, "opcg7_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_opcg8_f_o_aer, "opcg8_f_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_smpa_aer, "smpa", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_smpbb_aer, "smpbb", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_iepox_aer, "iepox", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_iepoxos_aer, "iepoxos", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_tetrol_aer, "tetrol", 0, 0, lmax, lunerr ) ! call mosaic2_set_one_lnw_ptr( lptr_gly_aer, "gly", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant1_c_aer, "ant1_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant2_c_aer, "ant2_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant3_c_aer, "ant3_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant4_c_aer, "ant4_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant1_o_aer, "ant1_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant2_o_aer, "ant2_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant3_o_aer, "ant3_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_ant4_o_aer, "ant4_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog1_c_aer, "biog1_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog2_c_aer, "biog2_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog3_c_aer, "biog3_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog4_c_aer, "biog4_c", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog1_o_aer, "biog1_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog2_o_aer, "biog2_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog3_o_aer, "biog3_o", 0, 0, lmax, lunerr ) call mosaic2_set_one_lnw_ptr( lptr_biog4_o_aer, "biog4_o", 0, 0, lmax, lunerr ) return end subroutine mosaic2_set_all_lnw_ptr !----------------------------------------------------------------------- subroutine mosaic2_set_one_lnw_ptr( lptr_aer, sname, required, ai_phase_only, lmax, lunerr ) use module_data_mosaic_asecthp, only: & ai_phase, & identical_comps_optaa, & maxd_asize, maxd_atype, maxd_aphase, & nsize_aer, ntype_aer, nphase_aer use module_peg_util, only: peg_error_fatal integer, intent(out) :: lptr_aer(maxd_asize,maxd_atype,maxd_aphase) integer, intent(in) :: required ! if positive, this variable must be found (otherwise fatal error) integer, intent(in) :: ai_phase_only ! if positive, only do the ai_phase integer, intent(in) :: lmax, lunerr character(len=*), intent(in) :: sname integer :: ierr, iphase, isize, itype, l, ntot, ntotsv character(len=40) :: chemname character(len=200) :: msg if (ai_phase /= 1) then write(msg,*) 'mosaic2_set_one_lnw_ptr error 0 - bad ai_phase = ', ai_phase call peg_error_fatal( lunerr, msg ) end if ! set lptr_aer values which point to aerosol species locations in the chem array lptr_aer(1:maxd_asize,1:maxd_atype,1:maxd_aphase) = 1 do itype = 1, ntype_aer do iphase = 1, nphase_aer if ((ai_phase_only > 0) .and. (iphase /= 1)) cycle ntot = 0 do isize = 1, nsize_aer(itype) call mosaic2_form_chemname( sname, isize, itype, iphase, lunerr, chemname ) call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) cycle if (l > lmax) then write(msg,*) 'mosaic2_set_one_lnw_ptr error 1 - chemname, l, lmax = ', & chemname, l, lmax call peg_error_fatal( lunerr, msg ) end if lptr_aer(isize,itype,iphase) = l ntot = ntot + 1 end do if (itype == 1 .and. iphase == 1) ntotsv = ntot ! check that all sizes either have or do not have this species ierr = 0 if (ntotsv == nsize_aer(itype)) ierr = 1 if ( (required <= 0) .and. (ntotsv == 0) ) ierr = 1 if ( ierr <= 0 ) then write(msg,*) 'mosaic2_set_one_lnw_ptr error 2 - sname, itype, iphase, ntotsv, nsize = ', & sname, itype, iphase, ntotsv, nsize_aer(itype) call peg_error_fatal( lunerr, msg ) end if if (identical_comps_optaa > 0) then ! check that all types, phases, and sizes have the same ntot if ( ntotsv /= ntot ) then write(msg,*) 'mosaic2_set_one_lnw_ptr error 3 - sname, itype, iphase, ntotsv, ntot = ', & sname, itype, iphase, ntotsv, ntot call peg_error_fatal( lunerr, msg ) end if end if end do ! iphase end do ! itype return end subroutine mosaic2_set_one_lnw_ptr !----------------------------------------------------------------------- subroutine set_rbox_aer_ptrs ! ! sets the rbox_aer_ptr(iaer,ibin) values that are used to ! map gas species between the rbox array and the aer, num_a, and water_a arrays ! use module_state_description, only: p1st => param_first_scalar use module_data_mosaic_aero, only: & aer_name, naer, nbin_a, nbin_a_max, & iso4_a, ino3_a, icl_a, inh4_a, ico3_a, & imsa_a, ina_a, ica_a, ioc_a, ibc_a, & ioin_a, iaro1_a, iaro2_a, ialk1_a, iole1_a, & iapi1_a, iapi2_a, ilim1_a, ilim2_a, & ! idust_a, & ! itr1r1_a, itr1r2_a, itr1r3_a, itr1r4_a, & ipcg1_b_c_a, ipcg2_b_c_a, ipcg3_b_c_a, ipcg4_b_c_a, & ipcg5_b_c_a, ipcg6_b_c_a, ipcg7_b_c_a, ipcg8_b_c_a, & ipcg9_b_c_a, & ipcg1_b_o_a, ipcg2_b_o_a, ipcg3_b_o_a, ipcg4_b_o_a, & ipcg5_b_o_a, ipcg6_b_o_a, ipcg7_b_o_a, ipcg8_b_o_a, & ipcg9_b_o_a, & iopcg1_b_c_a, iopcg2_b_c_a, iopcg3_b_c_a, iopcg4_b_c_a, & iopcg5_b_c_a, iopcg6_b_c_a, iopcg7_b_c_a, iopcg8_b_c_a, & iopcg1_b_o_a, iopcg2_b_o_a, iopcg3_b_o_a, iopcg4_b_o_a, & iopcg5_b_o_a, iopcg6_b_o_a, iopcg7_b_o_a, iopcg8_b_o_a, & ipcg1_f_c_a, ipcg2_f_c_a, ipcg3_f_c_a, ipcg4_f_c_a, & ipcg5_f_c_a, ipcg6_f_c_a, ipcg7_f_c_a, ipcg8_f_c_a, & ipcg9_f_c_a, & ipcg1_f_o_a, ipcg2_f_o_a, ipcg3_f_o_a, ipcg4_f_o_a, & ipcg5_f_o_a, ipcg6_f_o_a, ipcg7_f_o_a, ipcg8_f_o_a, & ipcg9_f_o_a, & iopcg1_f_c_a, iopcg2_f_c_a, iopcg3_f_c_a, iopcg4_f_c_a, & iopcg5_f_c_a, iopcg6_f_c_a, iopcg7_f_c_a, iopcg8_f_c_a, & iopcg1_f_o_a, iopcg2_f_o_a, iopcg3_f_o_a, iopcg4_f_o_a, & iopcg5_f_o_a, iopcg6_f_o_a, iopcg7_f_o_a, iopcg8_f_o_a, & iant1_c_a, iant2_c_a, iant3_c_a, iant4_c_a, & iant1_o_a, iant2_o_a, iant3_o_a, iant4_o_a, & ibiog1_c_a, ibiog2_c_a, ibiog3_c_a, ibiog4_c_a, & ibiog1_o_a, ibiog2_o_a, ibiog3_o_a, ibiog4_o_a, & ismpa_a, ismpbb_a ! ismpa_a, ismpbb_a, & ! iiepox_a, igly_a, iiepoxos_a, itetrol_a, & ! itanv_a, isopnv_a, iternv_a, iseqnv_a, & ! isianv_a use module_data_mosaic_asecthp, only: & ai_phase, & isize_of_ibin, itype_of_ibin, & rbox_aer_ptr, & numptr_aer, hyswptr_aer, waterptr_aer, & lptr_so4_aer, lptr_no3_aer, lptr_cl_aer, lptr_msa_aer, & lptr_co3_aer, lptr_nh4_aer, lptr_na_aer, lptr_ca_aer, & lptr_oc_aer, lptr_bc_aer, lptr_oin_aer, & lptr_aro1_aer, lptr_aro2_aer, lptr_alk1_aer, lptr_ole1_aer, & lptr_api1_aer, lptr_api2_aer, lptr_lim1_aer, lptr_lim2_aer, & ! lptr_dust_aer, & ! lptr_tr1r1_aer, lptr_tr1r2_aer, lptr_tr1r3_aer, lptr_tr1r4_aer, & ! lptr_tanv_aer, lptr_sopnv_aer, lptr_ternv_aer, lptr_seqnv_aer, & ! lptr_sianv_aer, lptr_pcg1_b_c_aer, lptr_pcg2_b_c_aer, lptr_pcg3_b_c_aer, & lptr_pcg1_b_c_aer, lptr_pcg2_b_c_aer, lptr_pcg3_b_c_aer, & lptr_pcg4_b_c_aer, lptr_pcg5_b_c_aer, lptr_pcg6_b_c_aer, lptr_pcg7_b_c_aer, & lptr_pcg8_b_c_aer, lptr_pcg9_b_c_aer, lptr_pcg1_b_o_aer, lptr_pcg2_b_o_aer, & lptr_pcg3_b_o_aer, lptr_pcg4_b_o_aer, lptr_pcg5_b_o_aer, lptr_pcg6_b_o_aer, & lptr_pcg7_b_o_aer, lptr_pcg8_b_o_aer, lptr_pcg9_b_o_aer, lptr_opcg1_b_c_aer, & lptr_opcg2_b_c_aer, lptr_opcg3_b_c_aer, lptr_opcg4_b_c_aer, lptr_opcg5_b_c_aer, & lptr_opcg6_b_c_aer, lptr_opcg7_b_c_aer, lptr_opcg8_b_c_aer, lptr_opcg1_b_o_aer, & lptr_opcg2_b_o_aer, lptr_opcg3_b_o_aer, lptr_opcg4_b_o_aer, lptr_opcg5_b_o_aer, & lptr_opcg6_b_o_aer, lptr_opcg7_b_o_aer, lptr_opcg8_b_o_aer, lptr_pcg1_f_c_aer, & lptr_pcg2_f_c_aer, lptr_pcg3_f_c_aer, lptr_pcg4_f_c_aer, lptr_pcg5_f_c_aer, & lptr_pcg6_f_c_aer, lptr_pcg7_f_c_aer, lptr_pcg8_f_c_aer, lptr_pcg9_f_c_aer, & lptr_pcg1_f_o_aer, lptr_pcg2_f_o_aer, lptr_pcg3_f_o_aer, lptr_pcg4_f_o_aer, & lptr_pcg5_f_o_aer, lptr_pcg6_f_o_aer, lptr_pcg7_f_o_aer, lptr_pcg8_f_o_aer, & lptr_pcg9_f_o_aer, lptr_opcg1_f_c_aer, lptr_opcg2_f_c_aer, lptr_opcg3_f_c_aer, & lptr_opcg4_f_c_aer, lptr_opcg5_f_c_aer, lptr_opcg6_f_c_aer, lptr_opcg7_f_c_aer, & lptr_opcg8_f_c_aer, lptr_opcg1_f_o_aer, lptr_opcg2_f_o_aer, lptr_opcg3_f_o_aer, & lptr_opcg4_f_o_aer, lptr_opcg5_f_o_aer, lptr_opcg6_f_o_aer, lptr_opcg7_f_o_aer, & lptr_opcg8_f_o_aer, lptr_smpa_aer, lptr_smpbb_aer, & ! lptr_opcg8_f_o_aer, lptr_smpa_aer, lptr_smpbb_aer, lptr_iepox_aer, & ! lptr_iepoxos_aer, lptr_tetrol_aer, lptr_gly_aer, lptr_ant1_c_aer, & lptr_ant1_c_aer, & lptr_ant2_c_aer, lptr_ant3_c_aer, lptr_ant4_c_aer, lptr_ant1_o_aer, & lptr_ant2_o_aer, lptr_ant3_o_aer, lptr_ant4_o_aer, lptr_biog1_c_aer, & lptr_biog2_c_aer, lptr_biog3_c_aer, lptr_biog4_c_aer, lptr_biog1_o_aer, & lptr_biog2_o_aer, lptr_biog3_o_aer, lptr_biog4_o_aer use module_data_mosaic_boxmod, only: name_rbox use module_data_mosaic_main, only: ntot_used integer :: iaer, ibin, iph, isz, ity, l character(len=16) :: tmp_name rbox_aer_ptr(-3:naer,1:nbin_a_max) = -1 iph = ai_phase do ibin = 1, nbin_a isz = isize_of_ibin(ibin) ity = itype_of_ibin(ibin) rbox_aer_ptr( -1, ibin ) = numptr_aer(isz,ity,iph) rbox_aer_ptr( -2, ibin ) = waterptr_aer(isz,ity) rbox_aer_ptr( -3, ibin ) = hyswptr_aer(isz,ity) call set_1_rbox_aer_ptr( ibin, iso4_a, lptr_so4_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ino3_a, lptr_no3_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, icl_a, lptr_cl_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, inh4_a, lptr_nh4_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ico3_a, lptr_co3_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, imsa_a, lptr_msa_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ina_a, lptr_na_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ica_a, lptr_ca_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ioc_a, lptr_oc_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibc_a, lptr_bc_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ioin_a, lptr_oin_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iaro1_a, lptr_aro1_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iaro2_a, lptr_aro2_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ialk1_a, lptr_alk1_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iole1_a, lptr_ole1_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iapi1_a, lptr_api1_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iapi2_a, lptr_api2_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ilim1_a, lptr_lim1_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ilim2_a, lptr_lim2_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, idust_a, lptr_dust_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itr1r1_a, lptr_tr1r1_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itr1r2_a, lptr_tr1r2_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itr1r3_a, lptr_tr1r3_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itr1r4_a, lptr_tr1r4_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg1_b_c_a, lptr_pcg1_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg2_b_c_a, lptr_pcg2_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg3_b_c_a, lptr_pcg3_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg4_b_c_a, lptr_pcg4_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg5_b_c_a, lptr_pcg5_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg6_b_c_a, lptr_pcg6_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg7_b_c_a, lptr_pcg7_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg8_b_c_a, lptr_pcg8_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg9_b_c_a, lptr_pcg9_b_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg1_b_o_a, lptr_pcg1_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg2_b_o_a, lptr_pcg2_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg3_b_o_a, lptr_pcg3_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg4_b_o_a, lptr_pcg4_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg5_b_o_a, lptr_pcg5_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg6_b_o_a, lptr_pcg6_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg7_b_o_a, lptr_pcg7_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg8_b_o_a, lptr_pcg8_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg9_b_o_a, lptr_pcg9_b_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg1_b_c_a, lptr_opcg1_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg2_b_c_a, lptr_opcg2_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg3_b_c_a, lptr_opcg3_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg4_b_c_a, lptr_opcg4_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg5_b_c_a, lptr_opcg5_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg6_b_c_a, lptr_opcg6_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg7_b_c_a, lptr_opcg7_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg8_b_c_a, lptr_opcg8_b_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg1_b_o_a, lptr_opcg1_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg2_b_o_a, lptr_opcg2_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg3_b_o_a, lptr_opcg3_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg4_b_o_a, lptr_opcg4_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg5_b_o_a, lptr_opcg5_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg6_b_o_a, lptr_opcg6_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg7_b_o_a, lptr_opcg7_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg8_b_o_a, lptr_opcg8_b_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg1_f_c_a, lptr_pcg1_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg2_f_c_a, lptr_pcg2_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg3_f_c_a, lptr_pcg3_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg4_f_c_a, lptr_pcg4_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg5_f_c_a, lptr_pcg5_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg6_f_c_a, lptr_pcg6_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg7_f_c_a, lptr_pcg7_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg8_f_c_a, lptr_pcg8_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg9_f_c_a, lptr_pcg9_f_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg1_f_o_a, lptr_pcg1_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg2_f_o_a, lptr_pcg2_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg3_f_o_a, lptr_pcg3_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg4_f_o_a, lptr_pcg4_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg5_f_o_a, lptr_pcg5_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg6_f_o_a, lptr_pcg6_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg7_f_o_a, lptr_pcg7_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg8_f_o_a, lptr_pcg8_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ipcg9_f_o_a, lptr_pcg9_f_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg1_f_c_a, lptr_opcg1_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg2_f_c_a, lptr_opcg2_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg3_f_c_a, lptr_opcg3_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg4_f_c_a, lptr_opcg4_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg5_f_c_a, lptr_opcg5_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg6_f_c_a, lptr_opcg6_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg7_f_c_a, lptr_opcg7_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg8_f_c_a, lptr_opcg8_f_c_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg1_f_o_a, lptr_opcg1_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg2_f_o_a, lptr_opcg2_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg3_f_o_a, lptr_opcg3_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg4_f_o_a, lptr_opcg4_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg5_f_o_a, lptr_opcg5_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg6_f_o_a, lptr_opcg6_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg7_f_o_a, lptr_opcg7_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iopcg8_f_o_a, lptr_opcg8_f_o_aer(isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant1_c_a, lptr_ant1_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant2_c_a, lptr_ant2_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant3_c_a, lptr_ant3_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant4_c_a, lptr_ant4_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant1_o_a, lptr_ant1_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant2_o_a, lptr_ant2_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant3_o_a, lptr_ant3_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, iant4_o_a, lptr_ant4_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog1_c_a, lptr_biog1_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog2_c_a, lptr_biog2_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog3_c_a, lptr_biog3_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog4_c_a, lptr_biog4_c_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog1_o_a, lptr_biog1_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog2_o_a, lptr_biog2_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog3_o_a, lptr_biog3_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ibiog4_o_a, lptr_biog4_o_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ismpa_a, lptr_smpa_aer( isz,ity,iph) ) call set_1_rbox_aer_ptr( ibin, ismpbb_a, lptr_smpbb_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, iiepox_a, lptr_iepox_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, igly_a, lptr_gly_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, iiepoxos_a, lptr_iepoxos_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itetrol_a, lptr_tetrol_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, itanv_a, lptr_tanv_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, isopnv_a, lptr_sopnv_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, iternv_a, lptr_ternv_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, iseqnv_a, lptr_seqnv_aer( isz,ity,iph) ) ! call set_1_rbox_aer_ptr( ibin, isianv_a, lptr_sianv_aer( isz,ity,iph) ) end do ! ibin write(*,'(/a)') 'set_rbox_aer_ptrs' do ibin = 1, nbin_a write(*,'(a)') do iaer = -3, naer if (iaer == -3) then tmp_name = 'hyswtr' else if (iaer == -2) then tmp_name = 'water' else if (iaer == -1) then tmp_name = 'num' else if (iaer == 0) then cycle else tmp_name = aer_name(iaer) end if l = rbox_aer_ptr(iaer,ibin) if ( (l < p1st) .or. (l > ntot_used) ) then rbox_aer_ptr(iaer,ibin) = -1 if ( ibin <= 1 ) then write(*,'(2a,i4,i5,i7,2x,a)') 'rbox_aer_ptr ', tmp_name, ibin, iaer, -999 else if ( rbox_aer_ptr(iaer,ibin-1) > 0 ) & write(*,'(2a,i4,i5,i7,2x,a)') 'rbox_aer_ptr ', tmp_name, ibin, iaer, -999 end if else write(*,'(2a,i4,i5,i7,2x,a)') 'rbox_aer_ptr ', tmp_name, ibin, iaer, l, name_rbox(l) end if end do ! iaer end do ! ibin return end subroutine set_rbox_aer_ptrs !----------------------------------------------------------------------- subroutine set_1_rbox_aer_ptr( ibin, iaer, laer ) use module_data_mosaic_aero, only: naer, nbin_a_max use module_data_mosaic_asecthp, only: rbox_aer_ptr use module_data_mosaic_main, only: ntot_used use module_state_description, only: p1st => param_first_scalar integer, intent(in) :: ibin, iaer, laer if ( ibin < 1 .or. ibin > nbin_a_max) return if ( iaer < 1 .or. iaer > naer ) return if ( laer < p1st .or. laer > ntot_used ) return rbox_aer_ptr(iaer,ibin) = laer return end subroutine set_1_rbox_aer_ptr !----------------------------------------------------------------------- subroutine mosaic2_set_massptr( chem_opt, lmax, lunerr ) use module_data_mosaic_asecthp, only: & identical_comps_optaa, & massptr_aer, & maxd_acomp, maxd_asize, maxd_atype, maxd_aphase, & ncomp_aer, nsize_aer, ntype_aer, nphase_aer, & sname_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lmax, lunerr integer :: icomp, iphase, isize, itype, l, ntot, ntotsvaa, ntotsvbb character(len=40) :: chemname character(len=200) :: msg ! set massptr_aer values which point to aerosol species locations in the chem array massptr_aer(1:maxd_acomp,1:maxd_asize,1:maxd_atype,1:maxd_aphase) = -999888777 ntotsvaa = -999888777 ; ntotsvbb = -999888777 do itype = 1, ntype_aer do iphase = 1, nphase_aer do isize = 1, nsize_aer(itype) ntot = 0 do icomp = 1, ncomp_aer(itype) call mosaic2_form_chemname( sname_aer(icomp,itype), isize, itype, iphase, lunerr, chemname ) call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) cycle if (l > lmax) then write(msg,*) 'mosaic2_set_massptr error 1 - chemname, l, lmax = ', & chemname, l, lmax call peg_error_fatal( lunerr, msg ) end if ntot = ntot + 1 massptr_aer(icomp,isize,itype,iphase) = l end do ! icomp if ( itype == 1 .and. iphase == 1 .and. isize == 1 ) ntotsvaa = ntot if ( iphase == 1 .and. isize == 1 ) ntotsvbb = ntot ! check that all phases and sizes have the same number of species if (ntotsvbb /= ntot) then write(msg,*) 'mosaic2_set_massptr error 2 - itype, iphase, isize, ntotsvbb, ntot = ', & itype, iphase, isize, ntotsvbb, ntot call peg_error_fatal( lunerr, msg ) end if if (identical_comps_optaa > 0) then ! check that all types have the same number of species if (ntotsvaa /= ntotsvbb) then write(msg,*) 'mosaic2_set_massptr error 3 - itype, iphase, isize, ntotsvaa, ntotsvbb = ', & itype, iphase, isize, ntotsvaa, ntotsvbb call peg_error_fatal( lunerr, msg ) end if end if end do ! isize end do ! iphase end do ! itype return end subroutine mosaic2_set_massptr !----------------------------------------------------------------------- subroutine mosaic2_set_ncomp( chem_opt, lunerr ) use module_data_mosaic_asecthp, only: & dens_aer, dens_mastercomp_aer, & hygro_aer, hygro_mastercomp_aer, & identical_comps_optaa, is_tracer_mastercomp_aer, & mastercompptr_aer, maxd_acomp, maxd_atype, & mw_aer, mw_mastercomp_aer, & name_aer, name_mastercomp_aer, & ncomp_aer, ncomp_plustracer_aer, & ntot_mastercomp_aer, ntype_aer, & sname_aer, sname_mastercomp_aer, & type_chars_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lunerr integer :: icomp, icompmc, ipass, itype, l character(len=40) :: chemname character(len=200) :: msg ! set the following ! mastercompptr_aer, ncomp_aer, ncomp_plustracerl_aer ! name_aer, sname_aer, dens_aer, mw_aer, hygro_aer mastercompptr_aer(1:maxd_acomp,1:maxd_atype) = -999888777 ncomp_aer(1:maxd_atype) = 0 ncomp_plustracer_aer(1:maxd_atype) = 0 name_aer( 1:maxd_acomp,1:maxd_atype) = 'empty' sname_aer(1:maxd_acomp,1:maxd_atype) = 'empty' dens_aer( 1:maxd_acomp,1:maxd_atype) = 1.0 mw_aer( 1:maxd_acomp,1:maxd_atype) = 1.0 hygro_aer(1:maxd_acomp,1:maxd_atype) = 1.0 do itype = 1, ntype_aer icomp = 0 do ipass = 1, 2 do icompmc = 1, ntot_mastercomp_aer if (ipass == 1) then if ( is_tracer_mastercomp_aer(icompmc) .eqv. .true. ) cycle else if ( is_tracer_mastercomp_aer(icompmc) .eqv. .false. ) cycle end if chemname = trim(sname_mastercomp_aer(icompmc)) // '_a01' // type_chars_aer(itype) call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) cycle icomp = icomp + 1 name_aer(icomp,itype) = name_mastercomp_aer(icompmc) sname_aer(icomp,itype) = sname_mastercomp_aer(icompmc) dens_aer(icomp,itype) = dens_mastercomp_aer(icompmc) mw_aer(icomp,itype) = mw_mastercomp_aer(icompmc) hygro_aer(icomp,itype) = hygro_mastercomp_aer(icompmc) end do ! icompmc if (ipass == 1) then ncomp_aer(itype) = icomp else ncomp_plustracer_aer(itype) = icomp end if end do ! ipass end do ! itype if (identical_comps_optaa > 0) then ! check that all types have the same number of species do itype = 2, ntype_aer do icomp = 1, max( ncomp_plustracer_aer(1), ncomp_plustracer_aer(itype) ) if (mastercompptr_aer(icomp,1) /= mastercompptr_aer(icomp,itype)) then write(msg,*) 'mosaic2_set_ncomp error 1 - itype, icomp, mcompptr1, mcompptr2ntot = ', & itype, icomp, mastercompptr_aer(icomp,1), mastercompptr_aer(icomp,itype) call peg_error_fatal( lunerr, msg ) end if end do end do end if return end subroutine mosaic2_set_ncomp !----------------------------------------------------------------------- subroutine mosaic2_set_bin_sizes( chem_opt, lunerr ) use module_data_mosaic_kind, only: r8 use module_data_mosaic_asecthp, only: & dcen_sect, dcut_sect, dhi_sect, dlo_sect, & maxd_asize, maxd_atype, & nsize_aer, ntype_aer, & sigmag_aer, & volumcen_sect, volumcut_sect, volumhi_sect, volumlo_sect use module_data_mosaic_constants, only: pi use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lunerr integer :: itype, n, nhi real :: tmpa dlo_sect( 1:maxd_asize,1:maxd_atype) = 0.0 dhi_sect( 1:maxd_asize,1:maxd_atype) = 0.0 dcen_sect(1:maxd_asize,1:maxd_atype) = 0.0 dcut_sect(0:maxd_asize,1:maxd_atype) = 0.0 volumlo_sect( 1:maxd_asize,1:maxd_atype) = 0.0 volumhi_sect( 1:maxd_asize,1:maxd_atype) = 0.0 volumcen_sect(1:maxd_asize,1:maxd_atype) = 0.0 volumcut_sect(0:maxd_asize,1:maxd_atype) = 0.0 sigmag_aer(1:maxd_asize,1:maxd_atype) = 1.0 do itype = 1, ntype_aer nhi = nsize_aer(itype) dlo_sect(1,itype) = 3.90625e-6_r8 dhi_sect(nhi,itype) = 10.0e-4_r8 tmpa = log( dhi_sect(nhi,itype)/dlo_sect(1,itype) ) / nhi do n = 2, nhi dlo_sect(n,itype) = dlo_sect(1,itype) * exp( (n-1)*tmpa ) dhi_sect(n-1,itype) = dlo_sect(n,itype) end do do n = 1, nhi dcen_sect(n,itype) = sqrt( dlo_sect(n,itype)*dhi_sect(n,itype) ) volumlo_sect(n,itype) = (pi/6.) * (dlo_sect(n,itype)**3) volumhi_sect(n,itype) = (pi/6.) * (dhi_sect(n,itype)**3) volumcen_sect(n,itype) = (pi/6.) * (dcen_sect(n,itype)**3) sigmag_aer(n,itype) = (dhi_sect(n,itype)/dlo_sect(n,itype))**0.289 dcut_sect(n,itype) = dhi_sect(n,itype) volumcut_sect(n,itype) = volumhi_sect(n,itype) end do dcut_sect(0,itype) = dlo_sect(1,itype) volumcut_sect(0,itype) = volumlo_sect(1,itype) end do return end subroutine mosaic2_set_bin_sizes !----------------------------------------------------------------------- subroutine mosaic2_set_nsize( chem_opt, lunerr ) use module_data_mosaic_asecthp, only: & identical_sizes_optaa, & maxd_asize, nphase_aer, nsize_aer, ntype_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lunerr integer :: iphase, isize, itype, l, nsizetmp character(len=40) :: chemname character(len=200) :: msg ! set number of size bins ! use the sulfate (so4) species for this do itype = 1, ntype_aer do iphase = 1, nphase_aer nsizetmp = 0 do isize = 1, maxd_asize+10 call mosaic2_form_chemname( 'so4', isize, itype, iphase, lunerr, chemname ) call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) exit nsizetmp = nsizetmp + 1 end do if (iphase == 1) then nsize_aer(itype) = nsizetmp else if (nsize_aer(itype) /= nsizetmp) then write(msg,*) 'mosaic2_set_nsize error 1 - itype, iphase, nsize_aer, nsizetmp =', & itype, iphase, nsize_aer(itype), nsizetmp call peg_error_fatal( lunerr, msg ) end if end do ! iphase if ((nsize_aer(itype) < 1) .or. (nsize_aer(itype) > maxd_asize)) then write(msg,*) 'mosaic2_set_nsize error 2 - itype, nsize_aer, maxd_asize =', itype, nsize_aer(itype), maxd_asize call peg_error_fatal( lunerr, msg ) end if if (identical_sizes_optaa > 0) then if (nsize_aer(itype) /= nsize_aer(1)) then write(msg,*) 'mosaic2_set_nsize error 3 - itype, nsize, nsize =', itype, nsize_aer(itype), nsize_aer(1) call peg_error_fatal( lunerr, msg ) end if end if end do ! itype return end subroutine mosaic2_set_nsize !----------------------------------------------------------------------- subroutine mosaic2_set_nphase( chem_opt, lunerr ) use module_data_mosaic_asecthp, only: & ai_phase, cw_phase, ci_phase, & identical_phases_optaa, & maxd_aphase, nphase_aer, ntype_aer, & phase_chars_aer, type_chars_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lunerr integer :: iphase, itype, l, nphasetmp character(len=40) :: chemname character(len=200) :: msg character(len=3) :: phase_chars_tmp ! set the following ! nphase_aer = number of phases ! ai_phase, cw_phase, ... ! maerosolincw ! maerosolincw = 0 nphase_aer = 0 phase_chars_aer(1:maxd_aphase) = '_empty' do itype = 1, ntype_aer nphasetmp = 0 do iphase = 1, maxd_aphase if (iphase == 1) then phase_chars_tmp = '_a' else if (iphase == 2) then phase_chars_tmp = '_cw' else if (iphase == 3) then phase_chars_tmp = '_ci' else exit end if chemname = 'so4' // trim(phase_chars_tmp) // '01' // type_chars_aer(1) call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) cycle nphasetmp = nphasetmp + 1 ! the only allowable phase combinations are [ai only], [ai and cw], [ai, cw, and ci] ! so at this point, nphasetmp and iphase should be if (nphasetmp /= iphase) then write(msg,*) 'mosaic2_set_nphase error - nphasetmp, iphase =', nphasetmp, iphase call peg_error_fatal( lunerr, msg ) end if if (iphase == 1) then ai_phase = nphasetmp else if (iphase == 2) then cw_phase = nphasetmp ! maerosolincw = 1 else if (iphase == 3) then ci_phase = nphasetmp else cycle end if phase_chars_aer(iphase) = phase_chars_tmp end do ! iphase if (itype == 1) then nphase_aer = nphasetmp if ((nphase_aer < 1) .or. (nphase_aer > maxd_aphase)) then write(msg,*) 'mosaic2_set_nphase error 1 - nphase_aer, maxd_aphase =', nphase_aer, maxd_aphase call peg_error_fatal( lunerr, msg ) end if else if (identical_phases_optaa > 0) then if (nphase_aer /= nphasetmp) then write(msg,*) 'mosaic2_set_nphase error 2 - iphase, nphase_aer, nphasetmp =', iphase, nphase_aer, nphasetmp call peg_error_fatal( lunerr, msg ) end if end if end if end do ! itype return end subroutine mosaic2_set_nphase !----------------------------------------------------------------------- subroutine mosaic2_set_ntype( chem_opt, lunerr ) use module_data_mosaic_asecthp, only: maxd_atype, ntype_aer, type_chars_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: chem_opt, lunerr integer :: itype, l character(len=40) :: chemname character(len=200) :: msg ! set ntype_aer (the number of aerosol types) ! by checking for existence of species whose names are ! "so4_a01", "so4_a01_t02", "so4_a01_t03", "so4_a01_t04", ... ntype_aer = 0 do itype = 1, 99 if (itype == 1) then chemname = 'so4_a01' else write( chemname, '(a,i2.2)' ) 'so4_a01_t', itype end if call mosaic2_find_chemname_in_table( chemname, l ) if (l <= 0) exit ntype_aer = itype end do if (ntype_aer < 1 .or. ntype_aer > maxd_atype) then write(msg,*) 'mosaic2_set_ntype error 1 - ' // & 'ntype_aer, maxd_atype =', ntype_aer, maxd_atype call peg_error_fatal( lunerr, msg ) end if ! set the type_chars_aer type_chars_aer(1:maxd_atype) = 'empty' do itype = 1, maxd_atype type_chars_aer(itype) = ' ' if (itype == 1) cycle write(type_chars_aer(itype), '(a,i2.2)' ) '_t', itype end do return end subroutine mosaic2_set_ntype !----------------------------------------------------------------------- subroutine mosaic2_set_3dbin_1dbin_ptrs( chem_opt, aer_extmix_opt, lunerr ) ! ! set variables involving the bc mass fraction and kappa bins ! use module_data_mosaic_kind, only: r8 use module_data_mosaic_asecthp, only: & ibin_of_isize_itype, isize_of_ibin, itype_of_ibin, & itype_of_itype_md1md2, itype_md1_of_itype, itype_md2_of_itype, & maxd_asize, maxd_atype, maxd_atype_md1, maxd_atype_md2, & nbin_a_max, nsize_aer, ntype_aer, ntype_md1_aer, ntype_md2_aer, & xcut_atype_md1, xcut_atype_md2 use module_peg_util, only: peg_message, peg_error_fatal integer, intent(in) :: chem_opt, aer_extmix_opt, lunerr integer :: iok, isize, itype, it1, it2, n character(len=230) :: msg ! check for a valid external-mixing configuration iok = 0 if (ntype_aer == 1) then if ( aer_extmix_opt == 0 .or. aer_extmix_opt == 1 ) iok = 1 else if (ntype_aer == 2) then if ( aer_extmix_opt == 2100 .or. aer_extmix_opt == 2101 .or. & aer_extmix_opt == 2200 .or. aer_extmix_opt == 2201 ) iok = 1 else if (ntype_aer == 3) then if ( aer_extmix_opt == 3100 .or. aer_extmix_opt == 3101 .or. & aer_extmix_opt == 3200 .or. aer_extmix_opt == 3201 ) iok = 1 else if (ntype_aer == 4) then if ( aer_extmix_opt == 4300 .or. aer_extmix_opt == 4301 ) iok = 1 end if if (iok /= 1) then write(msg,*) 'mosaic2_set_3dbin_1dbin_ptrs error - ' // & 'ntype_aer, aer_extmix_opt =', ntype_aer, aer_extmix_opt call peg_error_fatal( lunerr, msg ) end if ! set number of bins and bin boundaries for the ! bc mass fraction (wbc) and kappa bins ntype_md1_aer = 1 ntype_md2_aer = 1 xcut_atype_md1(0:1) = (/ -0.10_r8, 1.10_r8 /) xcut_atype_md2(0:1) = (/ -0.10_r8, 5.10_r8 /) if ( ((aer_extmix_opt == 0) .and. (ntype_aer == 1)) .or. & ((aer_extmix_opt == 1) .and. (ntype_aer == 1)) ) then continue else if ( ((aer_extmix_opt == 2100) .and. (ntype_aer == 2)) .or. & ((aer_extmix_opt == 2101) .and. (ntype_aer == 2)) ) then ! 2 wbc bins ntype_md1_aer = 2 xcut_atype_md1(0:2) = (/ -0.10_r8, 0.26_r8, 1.10_r8 /) else if ( ((aer_extmix_opt == 2200) .and. (ntype_aer == 2)) .or. & ((aer_extmix_opt == 2201) .and. (ntype_aer == 2)) ) then ! 2 kappa bins ntype_md2_aer = 2 xcut_atype_md2(0:2) = (/ -0.10_r8, 0.20_r8, 5.10_r8 /) else if ( ((aer_extmix_opt == 3100) .and. (ntype_aer == 3)) .or. & ((aer_extmix_opt == 3101) .and. (ntype_aer == 3)) ) then ! 3 wbc bins ntype_md1_aer = 3 xcut_atype_md1(0:3) = (/ -0.10_r8, 0.10_r8, 0.36_r8, 1.10_r8 /) else if ( ((aer_extmix_opt == 3200) .and. (ntype_aer == 3)) .or. & ((aer_extmix_opt == 3201) .and. (ntype_aer == 3)) ) then ! 3 kappa bins ntype_md2_aer = 3 xcut_atype_md2(0:3) = (/ -0.10_r8, 0.06_r8, 0.20_r8, 5.10_r8 /) else if ( ((aer_extmix_opt == 4300) .and. (ntype_aer == 4)) .or. & ((aer_extmix_opt == 4301) .and. (ntype_aer == 4)) ) then ! 2 wbc and 2 kappa bins ntype_md1_aer = 2 ntype_md2_aer = 2 xcut_atype_md1(0:2) = (/ -0.10_r8, 0.30_r8, 1.10_r8 /) xcut_atype_md2(0:2) = (/ -0.10_r8, 0.10_r8, 5.10_r8 /) end if if ( ntype_md1_aer < 1 .or. ntype_md1_aer > maxd_atype_md1 ) then write(msg,*) 'mosaic2_set_3dbin_1dbin_ptrs error - ' // & 'ntype_md1_aer, maxd_atype_md1 =', & ntype_md1_aer, maxd_atype_md1 call peg_error_fatal( lunerr, msg ) end if if ( ntype_md2_aer < 1 .or. ntype_md2_aer > maxd_atype_md2 ) then write(msg,*) 'mosaic2_set_3dbin_1dbin_ptrs error - ' // & 'ntype_md2_aer, maxd_atype_md2 =', & ntype_md2_aer, maxd_atype_md2 call peg_error_fatal( lunerr, msg ) end if if ( ntype_md1_aer*ntype_md2_aer /= ntype_aer ) then write(msg,*) 'mosaic2_set_3dbin_1dbin_ptrs error - ' // & 'ntype_md1_aer, ntype_md2_aer, ntype_aer =', ntype_md1_aer, ntype_md2_aer, ntype_aer call peg_error_fatal( lunerr, msg ) end if ! for aer_extmix_opt = 2100, 2200, 3100, 3200, 4300 set xcut so that everything goes into bin 1 if ((aer_extmix_opt >= 2000) .and. (mod(aer_extmix_opt,100) == 0)) then xcut_atype_md1(0:4) = (/ -0.10_r8, 1.10_r8, 2.10_r8, 3.10_r8, 4.10_r8 /) xcut_atype_md2(0:4) = (/ -0.10_r8, 5.10_r8, 6.10_r8, 7.10_r8, 8.10_r8 /) end if ! put values in the unused portions of the xcut do it1 = ntype_md1_aer+1, maxd_atype_md1 xcut_atype_md1(it1) = xcut_atype_md1(it1-1) + 1.0_r8 end do do it2 = ntype_md2_aer+1, maxd_atype_md2 xcut_atype_md2(it2) = xcut_atype_md2(it2-1) + 1.0_r8 end do ! set the 3d <--> 1d pointers ibin_of_isize_itype(1:maxd_asize,1:maxd_atype) = -999888777 isize_of_ibin(1:nbin_a_max) = -999888777 itype_of_ibin(1:nbin_a_max) = -999888777 n = 0 do itype = 1, ntype_aer do isize = 1, nsize_aer(itype) n = n + 1 ibin_of_isize_itype(isize,itype) = n isize_of_ibin(n) = isize itype_of_ibin(n) = itype end do ! isize end do ! itype itype_of_itype_md1md2(1:maxd_atype_md1,1:maxd_atype_md2) = -999888777 itype_md1_of_itype(1:maxd_atype) = -999888777 itype_md2_of_itype(1:maxd_atype) = -999888777 itype = 0 do it2 = 1, ntype_md2_aer do it1 = 1, ntype_md1_aer itype = itype + 1 itype_of_itype_md1md2(it1,it2) = itype itype_md1_of_itype(itype) = it1 itype_md2_of_itype(itype) = it2 end do end do write(msg,'(a,3i10)') 'ntype_aer, ntype_md1_aer, ntype_md2_aer', & ntype_aer, ntype_md1_aer, ntype_md2_aer call peg_message( lunerr, msg ) ! if maxd_atype_md2=20, the "msg" will be 224 characters long write(msg,'(a,1p,21e10.2)') 'xcut_atype_md1', xcut_atype_md1(0:min(maxd_atype_md1,20)) call peg_message( lunerr, msg ) write(msg,'(a,1p,21e10.2)') 'xcut_atype_md2', xcut_atype_md2(0:min(maxd_atype_md2,20)) call peg_message( lunerr, msg ) return end subroutine mosaic2_set_3dbin_1dbin_ptrs !----------------------------------------------------------------------- subroutine mosaic2_form_chemname( sname, isize, itype, iphase, lunerr, chemname ) use module_data_mosaic_asecthp, only: phase_chars_aer, type_chars_aer use module_peg_util, only: peg_error_fatal integer, intent(in) :: isize, itype, iphase, lunerr character(len=*), intent(in) :: sname character(len=*), intent(inout) :: chemname integer :: ierr character(len=3) :: size_chars character(len=200) :: msg size_chars = ' ' ierr = 0 if ( isize < 1 .or. isize > 999 ) then ierr = 1 else if (isize <= 99) then write(size_chars(1:2),'(i2.2)') isize else write(size_chars(1:3),'(i3.3)') isize end if if (ierr > 0) then write(msg,*) 'mosaic2_form_chemname error 1 - sname, isize = ', trim(sname), isize call peg_error_fatal( lunerr, msg ) end if chemname = trim(sname) // trim(phase_chars_aer(iphase)) // trim(size_chars) // type_chars_aer(itype) return end subroutine mosaic2_form_chemname !----------------------------------------------------------------------- subroutine mosaic2_find_chemname_in_table( chemname, chemindx ) use module_state_description, only: num_chem, param_first_scalar use module_scalar_tables, only: chem_dname_table integer, intent(out) :: chemindx character(len=*), intent(in) :: chemname integer :: l chemindx = 0 do l = param_first_scalar, num_chem if (chem_dname_table(1,l) == chemname) then chemindx = l return end if end do return end subroutine mosaic2_find_chemname_in_table !----------------------------------------------------------------------- subroutine mosaic2_set_mastercomp use module_data_mosaic_asecthp integer :: l ! set master aerosol chemical types name_mastercomp_aer( 1:maxd_acomp ) = 'empty' sname_mastercomp_aer(1:maxd_acomp ) = 'empty' dens_mastercomp_aer( 1:maxd_acomp ) = 1.0 mw_mastercomp_aer( 1:maxd_acomp ) = 1.0 hygro_mastercomp_aer(1:maxd_acomp ) = 0.0 is_tracer_mastercomp_aer(1:maxd_acomp) = .false. !ntot_mastercomp_aer = 96 !czhao add dust or tr1r1-4 ntot_mastercomp_aer = 109 ! *** note *** ! only need to set sname_mastercomp_aer if it differs from name_mastercomp_aer l = 1 mastercompindx_so4_aer = l name_mastercomp_aer( l ) = 'sulfate' sname_mastercomp_aer( l ) = 'so4' dens_mastercomp_aer( l ) = dens_so4_aer mw_mastercomp_aer( l ) = mw_so4_aer hygro_mastercomp_aer(l ) = hygro_so4_aer l = 2 mastercompindx_no3_aer = l name_mastercomp_aer( l ) = 'nitrate' sname_mastercomp_aer( l ) = 'no3' dens_mastercomp_aer( l ) = dens_no3_aer mw_mastercomp_aer( l ) = mw_no3_aer hygro_mastercomp_aer(l ) = hygro_no3_aer l = 3 mastercompindx_cl_aer = l name_mastercomp_aer( l ) = 'chloride' sname_mastercomp_aer( l ) = 'cl' dens_mastercomp_aer( l ) = dens_cl_aer mw_mastercomp_aer( l ) = mw_cl_aer hygro_mastercomp_aer(l ) = hygro_cl_aer l = 4 mastercompindx_msa_aer = l name_mastercomp_aer( l ) = 'msa' dens_mastercomp_aer( l ) = dens_msa_aer mw_mastercomp_aer( l ) = mw_msa_aer hygro_mastercomp_aer(l ) = hygro_msa_aer l = 5 mastercompindx_co3_aer = l name_mastercomp_aer( l ) = 'carbonate' sname_mastercomp_aer( l ) = 'co3' dens_mastercomp_aer( l ) = dens_co3_aer mw_mastercomp_aer( l ) = mw_co3_aer hygro_mastercomp_aer(l ) = hygro_co3_aer l = 6 mastercompindx_nh4_aer = l name_mastercomp_aer( l ) = 'ammonium' sname_mastercomp_aer( l ) = 'nh4' dens_mastercomp_aer( l ) = dens_nh4_aer mw_mastercomp_aer( l ) = mw_nh4_aer hygro_mastercomp_aer(l ) = hygro_nh4_aer l = 7 mastercompindx_na_aer = l name_mastercomp_aer( l ) = 'sodium' sname_mastercomp_aer( l ) = 'na' dens_mastercomp_aer( l ) = dens_na_aer mw_mastercomp_aer( l ) = mw_na_aer hygro_mastercomp_aer(l ) = hygro_na_aer l = 8 mastercompindx_ca_aer = l name_mastercomp_aer( l ) = 'calcium' sname_mastercomp_aer( l ) = 'ca' dens_mastercomp_aer( l ) = dens_ca_aer mw_mastercomp_aer( l ) = mw_ca_aer hygro_mastercomp_aer(l ) = hygro_ca_aer l = 9 mastercompindx_oin_aer = l name_mastercomp_aer( l ) = 'otherinorg' sname_mastercomp_aer( l ) = 'oin' dens_mastercomp_aer( l ) = dens_oin_aer mw_mastercomp_aer( l ) = mw_oin_aer hygro_mastercomp_aer(l ) = hygro_oin_aer ! l = 10 ! mastercompindx_dust_aer = l ! name_mastercomp_aer( l ) = 'dust' ! dens_mastercomp_aer( l ) = dens_dust_aer ! mw_mastercomp_aer( l ) = mw_dust_aer ! hygro_mastercomp_aer(l ) = hygro_dust_aer l = 11 mastercompindx_oc_aer = l name_mastercomp_aer( l ) = 'organic-c' sname_mastercomp_aer( l ) = 'oc' dens_mastercomp_aer( l ) = dens_oc_aer mw_mastercomp_aer( l ) = mw_oc_aer hygro_mastercomp_aer(l ) = hygro_oc_aer l = 12 mastercompindx_bc_aer = l name_mastercomp_aer( l ) = 'black-c' sname_mastercomp_aer( l ) = 'bc' dens_mastercomp_aer( l ) = dens_bc_aer mw_mastercomp_aer( l ) = mw_bc_aer hygro_mastercomp_aer(l ) = hygro_bc_aer l = 13 mastercompindx_pcg1_b_c_aer = l name_mastercomp_aer( l ) = 'pcg1_b_c' dens_mastercomp_aer( l ) = dens_pcg1_b_c_aer mw_mastercomp_aer( l ) = mw_pcg1_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg1_b_c_aer l = 14 mastercompindx_pcg2_b_c_aer = l name_mastercomp_aer( l ) = 'pcg2_b_c' dens_mastercomp_aer( l ) = dens_pcg2_b_c_aer mw_mastercomp_aer( l ) = mw_pcg2_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg2_b_c_aer l = 15 mastercompindx_pcg3_b_c_aer = l name_mastercomp_aer( l ) = 'pcg3_b_c' dens_mastercomp_aer( l ) = dens_pcg3_b_c_aer mw_mastercomp_aer( l ) = mw_pcg3_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg3_b_c_aer l = 16 mastercompindx_pcg4_b_c_aer = l name_mastercomp_aer( l ) = 'pcg4_b_c' dens_mastercomp_aer( l ) = dens_pcg4_b_c_aer mw_mastercomp_aer( l ) = mw_pcg4_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg4_b_c_aer l = 17 mastercompindx_pcg5_b_c_aer = l name_mastercomp_aer( l ) = 'pcg5_b_c' dens_mastercomp_aer( l ) = dens_pcg5_b_c_aer mw_mastercomp_aer( l ) = mw_pcg5_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg5_b_c_aer l = 18 mastercompindx_pcg6_b_c_aer = l name_mastercomp_aer( l ) = 'pcg6_b_c' dens_mastercomp_aer( l ) = dens_pcg6_b_c_aer mw_mastercomp_aer( l ) = mw_pcg6_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg6_b_c_aer l = 19 mastercompindx_pcg7_b_c_aer = l name_mastercomp_aer( l ) = 'pcg7_b_c' dens_mastercomp_aer( l ) = dens_pcg7_b_c_aer mw_mastercomp_aer( l ) = mw_pcg7_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg7_b_c_aer l = 20 mastercompindx_pcg8_b_c_aer = l name_mastercomp_aer( l ) = 'pcg8_b_c' dens_mastercomp_aer( l ) = dens_pcg8_b_c_aer mw_mastercomp_aer( l ) = mw_pcg8_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg8_b_c_aer l = 21 mastercompindx_pcg9_b_c_aer = l name_mastercomp_aer( l ) = 'pcg9_b_c' dens_mastercomp_aer( l ) = dens_pcg9_b_c_aer mw_mastercomp_aer( l ) = mw_pcg9_b_c_aer hygro_mastercomp_aer(l ) = hygro_pcg9_b_c_aer l = 22 mastercompindx_pcg1_b_o_aer = l name_mastercomp_aer( l ) = 'pcg1_b_o' dens_mastercomp_aer( l ) = dens_pcg1_b_o_aer mw_mastercomp_aer( l ) = mw_pcg1_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg1_b_o_aer l = 23 mastercompindx_pcg2_b_o_aer = l name_mastercomp_aer( l ) = 'pcg2_b_o' dens_mastercomp_aer( l ) = dens_pcg2_b_o_aer mw_mastercomp_aer( l ) = mw_pcg2_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg2_b_o_aer l = 24 mastercompindx_pcg3_b_o_aer = l name_mastercomp_aer( l ) = 'pcg3_b_o' dens_mastercomp_aer( l ) = dens_pcg3_b_o_aer mw_mastercomp_aer( l ) = mw_pcg3_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg3_b_o_aer l = 25 mastercompindx_pcg4_b_o_aer = l name_mastercomp_aer( l ) = 'pcg4_b_o' dens_mastercomp_aer( l ) = dens_pcg4_b_o_aer mw_mastercomp_aer( l ) = mw_pcg4_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg4_b_o_aer l = 26 mastercompindx_pcg5_b_o_aer = l name_mastercomp_aer( l ) = 'pcg5_b_o' dens_mastercomp_aer( l ) = dens_pcg5_b_o_aer mw_mastercomp_aer( l ) = mw_pcg5_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg5_b_o_aer l = 27 mastercompindx_pcg6_b_o_aer = l name_mastercomp_aer( l ) = 'pcg6_b_o' dens_mastercomp_aer( l ) = dens_pcg6_b_o_aer mw_mastercomp_aer( l ) = mw_pcg6_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg6_b_o_aer l = 28 mastercompindx_pcg7_b_o_aer = l name_mastercomp_aer( l ) = 'pcg7_b_o' dens_mastercomp_aer( l ) = dens_pcg7_b_o_aer mw_mastercomp_aer( l ) = mw_pcg7_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg7_b_o_aer l = 29 mastercompindx_pcg8_b_o_aer = l name_mastercomp_aer( l ) = 'pcg8_b_o' dens_mastercomp_aer( l ) = dens_pcg8_b_o_aer mw_mastercomp_aer( l ) = mw_pcg8_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg8_b_o_aer l = 30 mastercompindx_pcg9_b_o_aer = l name_mastercomp_aer( l ) = 'pcg9_b_o' dens_mastercomp_aer( l ) = dens_pcg9_b_o_aer mw_mastercomp_aer( l ) = mw_pcg9_b_o_aer hygro_mastercomp_aer(l ) = hygro_pcg9_b_o_aer l = 31 mastercompindx_opcg1_b_c_aer = l name_mastercomp_aer( l ) = 'opcg1_b_c' dens_mastercomp_aer( l ) = dens_opcg1_b_c_aer mw_mastercomp_aer( l ) = mw_opcg1_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg1_b_c_aer l = 32 mastercompindx_opcg2_b_c_aer = l name_mastercomp_aer( l ) = 'opcg2_b_c' dens_mastercomp_aer( l ) = dens_opcg2_b_c_aer mw_mastercomp_aer( l ) = mw_opcg2_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg2_b_c_aer l = 33 mastercompindx_opcg3_b_c_aer = l name_mastercomp_aer( l ) = 'opcg3_b_c' dens_mastercomp_aer( l ) = dens_opcg3_b_c_aer mw_mastercomp_aer( l ) = mw_opcg3_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg3_b_c_aer l = 34 mastercompindx_opcg4_b_c_aer = l name_mastercomp_aer( l ) = 'opcg4_b_c' dens_mastercomp_aer( l ) = dens_opcg4_b_c_aer mw_mastercomp_aer( l ) = mw_opcg4_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg4_b_c_aer l = 35 mastercompindx_opcg5_b_c_aer = l name_mastercomp_aer( l ) = 'opcg5_b_c' dens_mastercomp_aer( l ) = dens_opcg5_b_c_aer mw_mastercomp_aer( l ) = mw_opcg5_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg5_b_c_aer l = 36 mastercompindx_opcg6_b_c_aer = l name_mastercomp_aer( l ) = 'opcg6_b_c' dens_mastercomp_aer( l ) = dens_opcg6_b_c_aer mw_mastercomp_aer( l ) = mw_opcg6_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg6_b_c_aer l = 37 mastercompindx_opcg7_b_c_aer = l name_mastercomp_aer( l ) = 'opcg7_b_c' dens_mastercomp_aer( l ) = dens_opcg7_b_c_aer mw_mastercomp_aer( l ) = mw_opcg7_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg7_b_c_aer l = 38 mastercompindx_opcg8_b_c_aer = l name_mastercomp_aer( l ) = 'opcg8_b_c' dens_mastercomp_aer( l ) = dens_opcg8_b_c_aer mw_mastercomp_aer( l ) = mw_opcg8_b_c_aer hygro_mastercomp_aer(l ) = hygro_opcg8_b_c_aer l = 39 mastercompindx_opcg1_b_o_aer = l name_mastercomp_aer( l ) = 'opcg1_b_o' dens_mastercomp_aer( l ) = dens_opcg1_b_o_aer mw_mastercomp_aer( l ) = mw_opcg1_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg1_b_o_aer l = 40 mastercompindx_opcg2_b_o_aer = l name_mastercomp_aer( l ) = 'opcg2_b_o' dens_mastercomp_aer( l ) = dens_opcg2_b_o_aer mw_mastercomp_aer( l ) = mw_opcg2_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg2_b_o_aer l = 41 mastercompindx_opcg3_b_o_aer = l name_mastercomp_aer( l ) = 'opcg3_b_o' dens_mastercomp_aer( l ) = dens_opcg3_b_o_aer mw_mastercomp_aer( l ) = mw_opcg3_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg3_b_o_aer l = 42 mastercompindx_opcg4_b_o_aer = l name_mastercomp_aer( l ) = 'opcg4_b_o' dens_mastercomp_aer( l ) = dens_opcg4_b_o_aer mw_mastercomp_aer( l ) = mw_opcg4_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg4_b_o_aer l = 43 mastercompindx_opcg5_b_o_aer = l name_mastercomp_aer( l ) = 'opcg5_b_o' dens_mastercomp_aer( l ) = dens_opcg5_b_o_aer mw_mastercomp_aer( l ) = mw_opcg5_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg5_b_o_aer l = 44 mastercompindx_opcg6_b_o_aer = l name_mastercomp_aer( l ) = 'opcg6_b_o' dens_mastercomp_aer( l ) = dens_opcg6_b_o_aer mw_mastercomp_aer( l ) = mw_opcg6_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg6_b_o_aer l = 45 mastercompindx_opcg7_b_o_aer = l name_mastercomp_aer( l ) = 'opcg7_b_o' dens_mastercomp_aer( l ) = dens_opcg7_b_o_aer mw_mastercomp_aer( l ) = mw_opcg7_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg7_b_o_aer l = 46 mastercompindx_opcg8_b_o_aer = l name_mastercomp_aer( l ) = 'opcg8_b_o' dens_mastercomp_aer( l ) = dens_opcg8_b_o_aer mw_mastercomp_aer( l ) = mw_opcg8_b_o_aer hygro_mastercomp_aer(l ) = hygro_opcg8_b_o_aer l = 47 mastercompindx_pcg1_f_c_aer = l name_mastercomp_aer( l ) = 'pcg1_f_c' dens_mastercomp_aer( l ) = dens_pcg1_f_c_aer mw_mastercomp_aer( l ) = mw_pcg1_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg1_f_c_aer l = 48 mastercompindx_pcg2_f_c_aer = l name_mastercomp_aer( l ) = 'pcg2_f_c' dens_mastercomp_aer( l ) = dens_pcg2_f_c_aer mw_mastercomp_aer( l ) = mw_pcg2_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg2_f_c_aer l = 49 mastercompindx_pcg3_f_c_aer = l name_mastercomp_aer( l ) = 'pcg3_f_c' dens_mastercomp_aer( l ) = dens_pcg3_f_c_aer mw_mastercomp_aer( l ) = mw_pcg3_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg3_f_c_aer l = 50 mastercompindx_pcg4_f_c_aer = l name_mastercomp_aer( l ) = 'pcg4_f_c' dens_mastercomp_aer( l ) = dens_pcg4_f_c_aer mw_mastercomp_aer( l ) = mw_pcg4_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg4_f_c_aer l = 51 mastercompindx_pcg5_f_c_aer = l name_mastercomp_aer( l ) = 'pcg5_f_c' dens_mastercomp_aer( l ) = dens_pcg5_f_c_aer mw_mastercomp_aer( l ) = mw_pcg5_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg5_f_c_aer l = 52 mastercompindx_pcg6_f_c_aer = l name_mastercomp_aer( l ) = 'pcg6_f_c' dens_mastercomp_aer( l ) = dens_pcg6_f_c_aer mw_mastercomp_aer( l ) = mw_pcg6_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg6_f_c_aer l = 53 mastercompindx_pcg7_f_c_aer = l name_mastercomp_aer( l ) = 'pcg7_f_c' dens_mastercomp_aer( l ) = dens_pcg7_f_c_aer mw_mastercomp_aer( l ) = mw_pcg7_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg7_f_c_aer l = 54 mastercompindx_pcg8_f_c_aer = l name_mastercomp_aer( l ) = 'pcg8_f_c' dens_mastercomp_aer( l ) = dens_pcg8_f_c_aer mw_mastercomp_aer( l ) = mw_pcg8_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg8_f_c_aer l = 55 mastercompindx_pcg9_f_c_aer = l name_mastercomp_aer( l ) = 'pcg9_f_c' dens_mastercomp_aer( l ) = dens_pcg9_f_c_aer mw_mastercomp_aer( l ) = mw_pcg9_f_c_aer hygro_mastercomp_aer(l ) = hygro_pcg9_f_c_aer l = 56 mastercompindx_pcg1_f_o_aer = l name_mastercomp_aer( l ) = 'pcg1_f_o' dens_mastercomp_aer( l ) = dens_pcg1_f_o_aer mw_mastercomp_aer( l ) = mw_pcg1_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg1_f_o_aer l = 57 mastercompindx_pcg2_f_o_aer = l name_mastercomp_aer( l ) = 'pcg2_f_o' dens_mastercomp_aer( l ) = dens_pcg2_f_o_aer mw_mastercomp_aer( l ) = mw_pcg2_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg2_f_o_aer l = 58 mastercompindx_pcg3_f_o_aer = l name_mastercomp_aer( l ) = 'pcg3_f_o' dens_mastercomp_aer( l ) = dens_pcg3_f_o_aer mw_mastercomp_aer( l ) = mw_pcg3_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg3_f_o_aer l = 59 mastercompindx_pcg4_f_o_aer = l name_mastercomp_aer( l ) = 'pcg4_f_o' dens_mastercomp_aer( l ) = dens_pcg4_f_o_aer mw_mastercomp_aer( l ) = mw_pcg4_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg4_f_o_aer l = 60 mastercompindx_pcg5_f_o_aer = l name_mastercomp_aer( l ) = 'pcg5_f_o' dens_mastercomp_aer( l ) = dens_pcg5_f_o_aer mw_mastercomp_aer( l ) = mw_pcg5_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg5_f_o_aer l = 61 mastercompindx_pcg6_f_o_aer = l name_mastercomp_aer( l ) = 'pcg6_f_o' dens_mastercomp_aer( l ) = dens_pcg6_f_o_aer mw_mastercomp_aer( l ) = mw_pcg6_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg6_f_o_aer l = 62 mastercompindx_pcg7_f_o_aer = l name_mastercomp_aer( l ) = 'pcg7_f_o' dens_mastercomp_aer( l ) = dens_pcg7_f_o_aer mw_mastercomp_aer( l ) = mw_pcg7_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg7_f_o_aer l = 63 mastercompindx_pcg8_f_o_aer = l name_mastercomp_aer( l ) = 'pcg8_f_o' dens_mastercomp_aer( l ) = dens_pcg8_f_o_aer mw_mastercomp_aer( l ) = mw_pcg8_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg8_f_o_aer l = 64 mastercompindx_pcg9_f_o_aer = l name_mastercomp_aer( l ) = 'pcg9_f_o' dens_mastercomp_aer( l ) = dens_pcg9_f_o_aer mw_mastercomp_aer( l ) = mw_pcg9_f_o_aer hygro_mastercomp_aer(l ) = hygro_pcg9_f_o_aer l = 65 mastercompindx_opcg1_f_c_aer = l name_mastercomp_aer( l ) = 'opcg1_f_c' dens_mastercomp_aer( l ) = dens_opcg1_f_c_aer mw_mastercomp_aer( l ) = mw_opcg1_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg1_f_c_aer l = 66 mastercompindx_opcg2_f_c_aer = l name_mastercomp_aer( l ) = 'opcg2_f_c' dens_mastercomp_aer( l ) = dens_opcg2_f_c_aer mw_mastercomp_aer( l ) = mw_opcg2_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg2_f_c_aer l = 67 mastercompindx_opcg3_f_c_aer = l name_mastercomp_aer( l ) = 'opcg3_f_c' dens_mastercomp_aer( l ) = dens_opcg3_f_c_aer mw_mastercomp_aer( l ) = mw_opcg3_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg3_f_c_aer l = 68 mastercompindx_opcg4_f_c_aer = l name_mastercomp_aer( l ) = 'opcg4_f_c' dens_mastercomp_aer( l ) = dens_opcg4_f_c_aer mw_mastercomp_aer( l ) = mw_opcg4_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg4_f_c_aer l = 69 mastercompindx_opcg5_f_c_aer = l name_mastercomp_aer( l ) = 'opcg5_f_c' dens_mastercomp_aer( l ) = dens_opcg5_f_c_aer mw_mastercomp_aer( l ) = mw_opcg5_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg5_f_c_aer l = 70 mastercompindx_opcg6_f_c_aer = l name_mastercomp_aer( l ) = 'opcg6_f_c' dens_mastercomp_aer( l ) = dens_opcg6_f_c_aer mw_mastercomp_aer( l ) = mw_opcg6_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg6_f_c_aer l = 71 mastercompindx_opcg7_f_c_aer = l name_mastercomp_aer( l ) = 'opcg7_f_c' dens_mastercomp_aer( l ) = dens_opcg7_f_c_aer mw_mastercomp_aer( l ) = mw_opcg7_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg7_f_c_aer l = 72 mastercompindx_opcg8_f_c_aer = l name_mastercomp_aer( l ) = 'opcg8_f_c' dens_mastercomp_aer( l ) = dens_opcg8_f_c_aer mw_mastercomp_aer( l ) = mw_opcg8_f_c_aer hygro_mastercomp_aer(l ) = hygro_opcg8_f_c_aer l = 73 mastercompindx_opcg1_f_o_aer = l name_mastercomp_aer( l ) = 'opcg1_f_o' dens_mastercomp_aer( l ) = dens_opcg1_f_o_aer mw_mastercomp_aer( l ) = mw_opcg1_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg1_f_o_aer l = 74 mastercompindx_opcg2_f_o_aer = l name_mastercomp_aer( l ) = 'opcg2_f_o' dens_mastercomp_aer( l ) = dens_opcg2_f_o_aer mw_mastercomp_aer( l ) = mw_opcg2_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg2_f_o_aer l = 75 mastercompindx_opcg3_f_o_aer = l name_mastercomp_aer( l ) = 'opcg3_f_o' dens_mastercomp_aer( l ) = dens_opcg3_f_o_aer mw_mastercomp_aer( l ) = mw_opcg3_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg3_f_o_aer l = 76 mastercompindx_opcg4_f_o_aer = l name_mastercomp_aer( l ) = 'opcg4_f_o' dens_mastercomp_aer( l ) = dens_opcg4_f_o_aer mw_mastercomp_aer( l ) = mw_opcg4_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg4_f_o_aer l = 77 mastercompindx_opcg5_f_o_aer = l name_mastercomp_aer( l ) = 'opcg5_f_o' dens_mastercomp_aer( l ) = dens_opcg5_f_o_aer mw_mastercomp_aer( l ) = mw_opcg5_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg5_f_o_aer l = 78 mastercompindx_opcg6_f_o_aer = l name_mastercomp_aer( l ) = 'opcg6_f_o' dens_mastercomp_aer( l ) = dens_opcg6_f_o_aer mw_mastercomp_aer( l ) = mw_opcg6_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg6_f_o_aer l = 79 mastercompindx_opcg7_f_o_aer = l name_mastercomp_aer( l ) = 'opcg7_f_o' dens_mastercomp_aer( l ) = dens_opcg7_f_o_aer mw_mastercomp_aer( l ) = mw_opcg7_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg7_f_o_aer l = 80 mastercompindx_opcg8_f_o_aer = l name_mastercomp_aer( l ) = 'opcg8_f_o' dens_mastercomp_aer( l ) = dens_opcg8_f_o_aer mw_mastercomp_aer( l ) = mw_opcg8_f_o_aer hygro_mastercomp_aer(l ) = hygro_opcg8_f_o_aer l = 81 mastercompindx_ant1_c_aer = l name_mastercomp_aer( l ) = 'ant1_c' dens_mastercomp_aer( l ) = dens_ant1_c_aer mw_mastercomp_aer( l ) = mw_ant1_c_aer hygro_mastercomp_aer(l ) = hygro_ant1_c_aer l = 82 mastercompindx_ant2_c_aer = l name_mastercomp_aer( l ) = 'ant2_c' dens_mastercomp_aer( l ) = dens_ant2_c_aer mw_mastercomp_aer( l ) = mw_ant2_c_aer hygro_mastercomp_aer(l ) = hygro_ant2_c_aer l = 83 mastercompindx_ant3_c_aer = l name_mastercomp_aer( l ) = 'ant3_c' dens_mastercomp_aer( l ) = dens_ant3_c_aer mw_mastercomp_aer( l ) = mw_ant3_c_aer hygro_mastercomp_aer(l ) = hygro_ant3_c_aer l = 84 mastercompindx_ant4_c_aer = l name_mastercomp_aer( l ) = 'ant4_c' dens_mastercomp_aer( l ) = dens_ant4_c_aer mw_mastercomp_aer( l ) = mw_ant4_c_aer hygro_mastercomp_aer(l ) = hygro_ant4_c_aer l = 85 mastercompindx_ant1_o_aer = l name_mastercomp_aer( l ) = 'ant1_o' dens_mastercomp_aer( l ) = dens_ant1_o_aer mw_mastercomp_aer( l ) = mw_ant1_o_aer hygro_mastercomp_aer(l ) = hygro_ant1_o_aer l = 86 mastercompindx_ant2_o_aer = l name_mastercomp_aer( l ) = 'ant2_o' dens_mastercomp_aer( l ) = dens_ant2_o_aer mw_mastercomp_aer( l ) = mw_ant2_o_aer hygro_mastercomp_aer(l ) = hygro_ant2_o_aer l = 87 mastercompindx_ant3_o_aer = l name_mastercomp_aer( l ) = 'ant3_o' dens_mastercomp_aer( l ) = dens_ant3_o_aer mw_mastercomp_aer( l ) = mw_ant3_o_aer hygro_mastercomp_aer(l ) = hygro_ant3_o_aer l = 88 mastercompindx_ant4_o_aer = l name_mastercomp_aer( l ) = 'ant4_o' dens_mastercomp_aer( l ) = dens_ant4_o_aer mw_mastercomp_aer( l ) = mw_ant4_o_aer hygro_mastercomp_aer(l ) = hygro_ant4_o_aer l = 89 mastercompindx_biog1_c_aer = l name_mastercomp_aer( l ) = 'biog1_c' dens_mastercomp_aer( l ) = dens_biog1_c_aer mw_mastercomp_aer( l ) = mw_biog1_c_aer hygro_mastercomp_aer(l ) = hygro_biog1_c_aer l = 90 mastercompindx_biog2_c_aer = l name_mastercomp_aer( l ) = 'biog2_c' dens_mastercomp_aer( l ) = dens_biog2_c_aer mw_mastercomp_aer( l ) = mw_biog2_c_aer hygro_mastercomp_aer(l ) = hygro_biog2_c_aer l = 91 mastercompindx_biog3_c_aer = l name_mastercomp_aer( l ) = 'biog3_c' dens_mastercomp_aer( l ) = dens_biog3_c_aer mw_mastercomp_aer( l ) = mw_biog3_c_aer hygro_mastercomp_aer(l ) = hygro_biog3_c_aer l = 92 mastercompindx_biog4_c_aer = l name_mastercomp_aer( l ) = 'biog4_c' dens_mastercomp_aer( l ) = dens_biog4_c_aer mw_mastercomp_aer( l ) = mw_biog4_c_aer hygro_mastercomp_aer(l ) = hygro_biog4_c_aer l = 93 mastercompindx_biog1_o_aer = l name_mastercomp_aer( l ) = 'biog1_o' dens_mastercomp_aer( l ) = dens_biog1_o_aer mw_mastercomp_aer( l ) = mw_biog1_o_aer hygro_mastercomp_aer(l ) = hygro_biog1_o_aer l = 94 mastercompindx_biog2_o_aer = l name_mastercomp_aer( l ) = 'biog2_o' dens_mastercomp_aer( l ) = dens_biog2_o_aer mw_mastercomp_aer( l ) = mw_biog2_o_aer hygro_mastercomp_aer(l ) = hygro_biog2_o_aer l = 95 mastercompindx_biog3_o_aer = l name_mastercomp_aer( l ) = 'biog3_o' dens_mastercomp_aer( l ) = dens_biog3_o_aer mw_mastercomp_aer( l ) = mw_biog3_o_aer hygro_mastercomp_aer(l ) = hygro_biog3_o_aer l = 96 mastercompindx_biog4_o_aer = l name_mastercomp_aer( l ) = 'biog4_o' dens_mastercomp_aer( l ) = dens_biog4_o_aer mw_mastercomp_aer( l ) = mw_biog4_o_aer hygro_mastercomp_aer(l ) = hygro_biog4_o_aer l = 95 mastercompindx_smpa_aer = l name_mastercomp_aer( l ) = 'smpa' dens_mastercomp_aer( l ) = dens_smpa_aer mw_mastercomp_aer( l ) = mw_smpa_aer hygro_mastercomp_aer(l ) = hygro_smpa_aer l = 96 mastercompindx_smpbb_aer = l name_mastercomp_aer( l ) = 'smpbb' dens_mastercomp_aer( l ) = dens_smpbb_aer mw_mastercomp_aer( l ) = mw_smpbb_aer hygro_mastercomp_aer(l ) = hygro_smpbb_aer ! l = 97 ! mastercompindx_tr1r1_aer = l ! name_mastercomp_aer( l ) = 'tr1r1' ! dens_mastercomp_aer( l ) = dens_tr1r1_aer ! mw_mastercomp_aer( l ) = mw_tr1r1_aer ! hygro_mastercomp_aer(l ) = hygro_tr1r1_aer ! l = 98 ! mastercompindx_tr1r2_aer = l ! name_mastercomp_aer( l ) = 'tr1r2' ! dens_mastercomp_aer( l ) = dens_tr1r2_aer ! mw_mastercomp_aer( l ) = mw_tr1r2_aer ! hygro_mastercomp_aer(l ) = hygro_tr1r2_aer ! l = 99 ! mastercompindx_tr1r3_aer = l ! name_mastercomp_aer( l ) = 'tr1r3' ! dens_mastercomp_aer( l ) = dens_tr1r3_aer ! mw_mastercomp_aer( l ) = mw_tr1r3_aer ! hygro_mastercomp_aer(l ) = hygro_tr1r3_aer ! l = 100 ! mastercompindx_tr1r4_aer = l ! name_mastercomp_aer( l ) = 'tr1r4' ! dens_mastercomp_aer( l ) = dens_tr1r4_aer ! mw_mastercomp_aer( l ) = mw_tr1r4_aer ! hygro_mastercomp_aer(l ) = hygro_tr1r4_aer ! l = 101 ! mastercompindx_iepox_aer = l ! name_mastercomp_aer( l ) = 'iepox' ! dens_mastercomp_aer( l ) = dens_iepox_aer ! mw_mastercomp_aer( l ) = mw_iepox_aer ! hygro_mastercomp_aer(l ) = hygro_iepox_aer ! l = 102 ! mastercompindx_iepoxos_aer = l ! name_mastercomp_aer( l ) = 'iepoxos' ! dens_mastercomp_aer( l ) = dens_iepoxos_aer ! mw_mastercomp_aer( l ) = mw_iepoxos_aer ! hygro_mastercomp_aer(l ) = hygro_iepoxos_aer ! l = 103 ! mastercompindx_tetrol_aer = l ! name_mastercomp_aer( l ) = 'tetrol' ! dens_mastercomp_aer( l ) = dens_tetrol_aer ! mw_mastercomp_aer( l ) = mw_tetrol_aer ! hygro_mastercomp_aer(l ) = hygro_tetrol_aer ! l = 104 ! mastercompindx_gly_aer = l ! name_mastercomp_aer( l ) = 'gly' ! dens_mastercomp_aer( l ) = dens_gly_aer ! mw_mastercomp_aer( l ) = mw_gly_aer ! hygro_mastercomp_aer(l ) = hygro_gly_aer ! l = 105 ! mastercompindx_tanv_aer = l ! name_mastercomp_aer( l ) = 'tanv' ! dens_mastercomp_aer( l ) = dens_tanv_aer ! mw_mastercomp_aer( l ) = mw_tanv_aer ! hygro_mastercomp_aer(l ) = hygro_tanv_aer ! l = 106 ! mastercompindx_sopnv_aer = l ! name_mastercomp_aer( l ) = 'sopnv' ! dens_mastercomp_aer( l ) = dens_sopnv_aer ! mw_mastercomp_aer( l ) = mw_sopnv_aer ! hygro_mastercomp_aer(l ) = hygro_sopnv_aer ! l = 107 ! mastercompindx_ternv_aer = l ! name_mastercomp_aer( l ) = 'ternv' ! dens_mastercomp_aer( l ) = dens_ternv_aer ! mw_mastercomp_aer( l ) = mw_ternv_aer ! hygro_mastercomp_aer(l ) = hygro_ternv_aer ! l = 108 ! mastercompindx_seqnv_aer = l ! name_mastercomp_aer( l ) = 'seqnv' ! dens_mastercomp_aer( l ) = dens_seqnv_aer ! mw_mastercomp_aer( l ) = mw_seqnv_aer ! hygro_mastercomp_aer(l ) = hygro_seqnv_aer ! l = 109 ! mastercompindx_sianv_aer = l ! name_mastercomp_aer( l ) = 'sianv' ! dens_mastercomp_aer( l ) = dens_sianv_aer ! mw_mastercomp_aer( l ) = mw_sianv_aer ! hygro_mastercomp_aer(l ) = hygro_sianv_aer ! for any sname_mastercomp_aer that have not yet be set to something besides ! "empty", ! set them to name_mastercomp_aer do l = 1, ntot_mastercomp_aer if ( sname_mastercomp_aer( l ) == 'empty' ) & sname_mastercomp_aer( l ) = name_mastercomp_aer( l ) end do return end subroutine mosaic2_set_mastercomp !----------------------------------------------------------------------- end module module_mosaic2_driver