! +-======-+ ! Copyright (c) 2003-2007 United States Government as represented by ! the Admistrator of the National Aeronautics and Space Administration. ! All Rights Reserved. ! ! THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE, ! REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN ! COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS ! REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY"). ! THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN ! INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR ! REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES, REPRODUCES, ! DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS DEFINED ! HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL THE ! RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT. ! ! Government Agency: National Aeronautics and Space Administration ! Government Agency Original Software Designation: GSC-15354-1 ! Government Agency Original Software Title: GEOS-5 GCM Modeling Software ! User Registration Requested. Please Visit http://opensource.gsfc.nasa.gov ! Government Agency Point of Contact for Original Software: ! Dale Hithon, SRA Assistant, (301) 286-2691 ! ! +-======-+ !------------------------------------------------------------------------- ! NASA/GSFC, Data Assimilation Office, Code 910.3, GEOS/DAS ! !------------------------------------------------------------------------- !BOP ! ! !MODULE: SeasaltEmissionMod.F90 --- Calculate the Seasalt Emissions ! ! !INTERFACE: ! module SeasaltEmissionMod ! !USES: use Chem_Mod use Chem_ConstMod, only: grav ! Constants ! use Chem_UtilMod use m_mpout implicit none ! !PUBLIC TYPES: ! PRIVATE ! ! !PUBLIC MEMBER FUNCTIONS: ! PUBLIC SeasaltEmissionGong2003 PUBLIC SeasaltEmissionGong1997 real, parameter :: OCEAN=0.0, LAND = 1.0, SEA_ICE = 2.0 ! ! !DESCRIPTION: ! ! This module implements the Seasalt Emission calculations ! ! !REVISION HISTORY: ! ! 30Mar2010 Colarco First crack! ! !EOP !------------------------------------------------------------------------- CONTAINS ! ! !DESCRIPTION: Calculates the seasalt mass emission flux every timestep. ! The approach here is to use the modified Monahan et al. (1986) source ! formulation (see Gong 2003) which does a reasonable job simulating ! sea salt number concentrations for r80 between 0.07 um and 20 um. ! Gong suggests that the parameterization is good to dry radius 0.03 um., ! The function gives the particle flux at RH = 80% dF/dr [# m-2 s-1 um-1] ! as a function of particle radius r [um] and the 10-m wind speed [m s-1]. ! The dry particle number flux is just dF/drDry = fac*dF/dr, where fac is ! really a function of particle size converting dry radius to wet radius (RH=80%). ! We hard code the assumption of radius(RH=80%) = 2. * radius(RH=0%). ! ! We assume the shape of the emitted PSD from the Gong formulation, and ! compute emissions on a number (nr=10) sub-bins for each of our CARMA ! bins. ! ! !IROUTINE: SeasaltEmissionGong2003 - Compute the Seasalt emissions ! ! !INTERFACE: ! subroutine SeasaltEmissionGong2003( i1, i2, j1, j2, km, & rLow, rUp, oro, u10m, v10m, & emissions, rc ) ! !USES: implicit NONE ! !INPUT PARAMETERS: integer, intent(in) :: i1, i2, j1, j2, km real, intent(in) :: rLow, rUp ! Dry particle bin edge radii [um] real, pointer, dimension(:,:) :: oro, u10m, v10m ! !OUTPUT PARAMETERS: real :: emissions(i1:i2,j1:j2) ! Local emission integer, intent(out) :: rc ! Error return code: ! 0 - all is well ! 1 - character(len=*), parameter :: myname = 'SeasaltEmissionsGong2003' ! !DESCRIPTION: Computes the seasalt emissions for one time step ! ! !REVISION HISTORY: ! ! 29Dec2009, Colarco - Modifications to change calling ! 10Oct2007, Nowottnick/Colarco - Implement simplified Zender source ! 06Nov2003, Colarco ! Based on Ginoux ! !EOP !------------------------------------------------------------------------- ! !Local Variables integer :: i, j, k, m, n, ios, ijl, nr, ir real :: w10m, src, aFac, bFac real :: qmax, qmin real, parameter :: fac = 1.65 ! ratio of radius(RH=0.8)/radius(RH=0.) [Gerber] real, parameter :: rhop = 2200. ! dry seasalt density [kg m-3] real, parameter :: pi = 3.1415 ! ratio of circumference to diameter of circle real :: rLowWet, rUpWet, rWet, rDry, drWet ! Initialize local variables ! -------------------------- emissions(:,:) = 0. ! Define the upper and lower radii of the super-bin and the number of sub-bins ! (nr) defined at 80% RH rLowWet = fac * rLow rUpWet = fac * rUp nr = 10 drWet = (rUpWet-rLowWet)/nr rWet = rLowWet + 0.5*drWet ! Loop over the sub-bins and add mass ! src is the accumulated dry salt mass in each super-bin divided ! by w10m**3.41. At each sub-bin this is the product of the ! number flux into the bin (dF/dr * dr) and the mass of the dry particle. src = 0.0 do ir = 1, nr rDry = rWet/fac ! Gong 2003 aFac = 4.7*(1.+30.*rWet)**(-0.017*rWet**(-1.44)) bFac = (0.433-log10(rWet))/0.433 src = src & + 4./3.*pi*rhop*rDry**3.*1.e-18 & *1.373*rWet**(-aFac)*(1.+0.057*rWet**3.45) & *10**(1.607*exp(-bFac**2.))*drWet rWet = rWet+drWet end do ! Loop over the horizontal grid do j = j1, j2 do i = i1, i2 if ( oro(i,j) /= OCEAN ) cycle ! only over OCEAN gridpoints w10m = sqrt(u10m(i,j)**2.+v10m(i,j)**2.) emissions(i,j) = src*w10m**3.41 end do ! i end do ! j rc = 0 end subroutine SeasaltEmissionGong2003 subroutine SeasaltEmissionGong1997( i1, i2, j1, j2, km, & rLow, rUp, oro, u10m, v10m, & emissions, rc ) ! !USES: implicit NONE ! !INPUT PARAMETERS: integer, intent(in) :: i1, i2, j1, j2, km real, intent(in) :: rLow, rUp ! Dry particle bin edge radii [um] real, pointer, dimension(:,:) :: oro, u10m, v10m ! !OUTPUT PARAMETERS: real :: emissions(i1:i2,j1:j2) ! Local emission integer, intent(out) :: rc ! Error return code: ! 0 - all is well ! 1 - character(len=*), parameter :: myname = 'SeasaltEmissionsGong2003' ! !DESCRIPTION: Computes the seasalt emissions for one time step ! ! !REVISION HISTORY: ! ! 29Dec2009, Colarco - Modifications to change calling ! 10Oct2007, Nowottnick/Colarco - Implement simplified Zender source ! 06Nov2003, Colarco ! Based on Ginoux ! !EOP !------------------------------------------------------------------------- ! !Local Variables integer :: i, j, k, m, n, ios, ijl, nr, ir real :: w10m, src, aFac, bFac real :: qmax, qmin real, parameter :: fac = 1.65 ! ratio of radius(RH=0.8)/radius(RH=0.) [Gerber] real, parameter :: rhop = 2200. ! dry seasalt density [kg m-3] real, parameter :: pi = 3.1415 ! ratio of circumference to diameter of circle real :: rLowWet, rUpWet, rWet, rDry, drWet ! Initialize local variables ! -------------------------- emissions(:,:) = 0. ! Define the upper and lower radii of the super-bin and the number of sub-bins ! (nr) defined at 80% RH rLowWet = fac * rLow rUpWet = fac * rUp nr = 10 drWet = (rUpWet-rLowWet)/nr rWet = rLowWet + 0.5*drWet ! Loop over the sub-bins and add mass ! src is the accumulated dry salt mass in each super-bin divided ! by w10m**3.41. At each sub-bin this is the product of the ! number flux into the bin (dF/dr * dr) and the mass of the dry particle. src = 0.0 do ir = 1, nr rDry = rWet/fac ! Gong 1997 aFac = 3. bFac = (0.380-log10(rWet))/0.65 src = src & + 4./3.*pi*rhop*rDry**3.*1.e-18 & *1.373*rWet**(-aFac)*(1.+0.057*rWet**1.05) & *10**(1.19*exp(-bFac**2.))*drWet rWet = rWet+drWet end do ! Loop over the horizontal grid do j = j1, j2 do i = i1, i2 if ( oro(i,j) /= OCEAN ) cycle ! only over OCEAN gridpoints w10m = sqrt(u10m(i,j)**2.+v10m(i,j)**2.) emissions(i,j) = src*w10m**3.41 end do ! i end do ! j rc = 0 end subroutine SeasaltEmissionGong1997 end module