Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Heartbeat time step removed and `timeToWork` logical added
- Modified filepaths for the optics files to no longer link to a personal nobackup directory
- Added logic to ensure the alarm accounts for skipping heartbeat in `NI` and `SU` components
- fwet removed from children GridCompMod and placed in respective instance RC files
- Updated settling routine and calls to allow settling velocity diagnostics in output field

### Fixed
Expand Down
4 changes: 1 addition & 3 deletions ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridCompMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -989,7 +989,6 @@ subroutine Run2 (GC, import, export, clock, RC)
integer :: n
real, allocatable, dimension(:,:) :: drydepositionfrequency, dqa
real, pointer, dimension(:,:,:) :: casd_vel
real :: fwet
real, dimension(3) :: rainout_eff
logical :: KIN
real, allocatable, dimension(:,:,:) :: pSOA_VOC
Expand Down Expand Up @@ -1141,9 +1140,8 @@ subroutine Run2 (GC, import, export, clock, RC)
if (associated(WT)) WT(:,:,1)=0.0

! Hydrophilic mode (second tracer) is removed
fwet = 1.
call WetRemovalGOCART2G (self%km, self%klid, self%nbins, self%nbins, 2, self%cdt, GCsuffix, &
KIN, MAPL_GRAV, fwet, philic, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(2), philic, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, WT, __RC__)
case ('ufs')
! Both hydrophobic and hydrophilic modes can be removed
Expand Down
7 changes: 5 additions & 2 deletions ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.bc.rc
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ time_days_chemical_destruction: -1. -1.
# Wet Removal Scheme Option | gocart, ufs
wet_removal_scheme: gocart ! default value

# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED)
# Scavenging efficiency per bin [km-1]
fscav: 0.0 0.4

# Large scale rainout efficiency per bin for wet_removal_scheme == gocart
fwet: 0.0 1.0

# Rainout efficiency per bin for wet_removal_scheme == ufs
fwet_ice: 0.0 1.0
fwet_snow: 0.0 1.0
Expand Down Expand Up @@ -54,4 +57,4 @@ point_emissions_srcfilen: /dev/null

# SettlingSolver options
# Options: 'gocart' or 'ufs'
settling_scheme: 'gocart'
settling_scheme: 'gocart'
7 changes: 5 additions & 2 deletions ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.br.rc
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ time_days_chemical_destruction: -1. -1.
# Wet Removal Scheme Option | gocart, ufs
wet_removal_scheme: gocart ! default value

# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED)
# Scavenging efficiency per bin [km-1]
fscav: 0.0 0.4

# Large scale rainout efficiency per bin for wet_removal_scheme == gocart
fwet: 0.0 1.0

# Rainout efficiency per bin for wet_removal_scheme == ufs
fwet_ice: 0.0 0.4
fwet_snow: 0.0 0.4
Expand All @@ -57,4 +60,4 @@ point_emissions_srcfilen: /dev/null

# SettlingSolver options
# Options: 'gocart' or 'ufs'
settling_scheme: 'gocart'
settling_scheme: 'gocart'
7 changes: 5 additions & 2 deletions ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.oc.rc
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,12 @@ time_days_chemical_destruction: -1. -1.
# Wet Removal Scheme Option | gocart, ufs
wet_removal_scheme: gocart ! default value

# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED)
# Scavenging efficiency per bin [km-1]
fscav: 0.0 0.4

# Large scale rainout efficiency per bin for wet_removal_scheme == gocart
fwet: 0.0 1.0

# Rainout efficiency per bin for wet_removal_scheme == ufs
fwet_ice: 0.0 1.0
fwet_snow: 0.0 1.0
Expand All @@ -61,4 +64,4 @@ point_emissions_srcfilen: /dev/null

# SettlingSolver options
# Options: 'gocart' or 'ufs'
settling_scheme: 'gocart'
settling_scheme: 'gocart'
4 changes: 1 addition & 3 deletions ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridCompMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -978,7 +978,6 @@ subroutine Run2 (GC, import, export, clock, RC)
integer :: n
real, allocatable, dimension(:,:) :: drydepositionfrequency, dqa
real, pointer, dimension(:,:,:) :: dusd_vel
real :: fwet
logical :: KIN

integer :: i1, j1, i2, j2, km
Expand Down Expand Up @@ -1072,9 +1071,8 @@ subroutine Run2 (GC, import, export, clock, RC)
select case (self%wet_removal_scheme)
case ('gocart')
do n = 1, self%nbins
fwet = 1.0
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, n, self%cdt, 'dust', &
KIN, MAPL_GRAV, fwet, DU(:,:,:,n), ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(n), DU(:,:,:,n), ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, DUWT, __RC__)
end do
case ('ufs')
Expand Down
5 changes: 4 additions & 1 deletion ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_instance_DU.rc
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ wet_removal_scheme: gocart ! default value
# Scavenging efficiency per bin [km-1]
fscav: 0.2 0.2 0.2 0.2 0.2

# Large scale rainout efficiency per bin for wet_removal_scheme == gocart
fwet: 1.0 1.0 1.0 1.0 1.0

# Rainout efficiency per bin for wet_removal_scheme == ufs
fwet_ice: 0.8 0.8 0.8 1.0 1.0
fwet_snow: 0.8 0.8 0.8 1.0 1.0
Expand Down Expand Up @@ -75,4 +78,4 @@ drag_partition_option: 2

# SettlingSolver options
# Options: 'gocart' or 'ufs'
settling_scheme: 'gocart'
settling_scheme: 'gocart'
10 changes: 6 additions & 4 deletions ESMF/GOCART2G_GridComp/GA_Environment/GA_EnvironmentMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ module GA_EnvironmentMod
real, allocatable :: radius(:) ! particle effective radius [um]
real, allocatable :: rhop(:) ! soil class density [kg m-3]
real, allocatable :: fscav(:) ! scavenging efficiency
real, allocatable :: fwet(:) ! large scale wet removal efficiency (GOCART)
! logical :: scav_byColdCloud ! new flag example
real, allocatable :: molwght(:) ! molecular weight !NOT UNIVERSAL ONLY FOR GASES,
real, allocatable :: fnum(:) ! number of particles per kg mass
real, allocatable :: fwet_ice(:) ! large scale wet removal scaling factor for ice
real, allocatable :: fwet_snow(:) ! large scale wet removal scaling factor for snow
real, allocatable :: fwet_rain(:) ! large scale wet removal scaling factor for rain
real, allocatable :: fwet_ice(:) ! large scale wet removal scaling factor for ice (UFS)
real, allocatable :: fwet_snow(:) ! large scale wet removal scaling factor for snow (UFS)
real, allocatable :: fwet_rain(:) ! large scale wet removal scaling factor for rain (UFS)
real :: washout_tuning ! tuning factor for washout process (1 by default)
real :: wet_radius_thr ! wet radius threshold [um]
integer :: rhFlag
Expand Down Expand Up @@ -67,7 +68,7 @@ subroutine load_from_config(self, cfg, universal_cfg, rc)

! Parse config file into private internal state
! ----------------------------------------------
allocate(self%radius(nbins), self%rhop(nbins), self%fscav(nbins), self%molwght(nbins), &
allocate(self%radius(nbins), self%rhop(nbins), self%fscav(nbins), self%fwet(nbins), self%molwght(nbins), &
self%fnum(nbins), self%fwet_ice(nbins), self%fwet_snow(nbins), self%fwet_rain(nbins), &
self%wavelengths_profile(n_wavelengths_profile), &
self%wavelengths_vertint(n_wavelengths_vertint), &
Expand All @@ -76,6 +77,7 @@ subroutine load_from_config(self, cfg, universal_cfg, rc)
call ESMF_ConfigGetAttribute (cfg, self%radius, label='particle_radius_microns:', __RC__)
call ESMF_ConfigGetAttribute (cfg, self%rhop, label='particle_density:', __RC__)
call ESMF_ConfigGetAttribute (cfg, self%fscav, label='fscav:', __RC__)
call ESMF_ConfigGetAttribute (cfg, self%fwet, label='fwet:', default=1.0, __RC__)
call ESMF_ConfigGetAttribute (cfg, self%molwght, label='molecular_weight:', __RC__)
call ESMF_ConfigGetAttribute (cfg, self%fnum, label='fnum:', __RC__)
call ESMF_ConfigGetAttribute (cfg, self%plid, label='pressure_lid_in_hPa:', __RC__)
Expand Down
16 changes: 5 additions & 11 deletions ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridCompMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,6 @@ subroutine Run2 (GC, import, export, clock, RC)

real, allocatable, dimension(:,:) :: drydepositionfrequency, dqa
real, pointer, dimension(:,:,:) :: nisd_vel
real :: fwet
logical :: KIN
real, allocatable, target, dimension(:,:,:) :: fluxoutWT
real, allocatable, dimension(:,:,:,:) :: aerosol
Expand Down Expand Up @@ -943,22 +942,20 @@ subroutine Run2 (GC, import, export, clock, RC)
end if
! NH3
KIN = .false.
fwet = 1.
nullify(fluxWT_ptr)
if (associated(NH3WT)) fluxWT_ptr => fluxoutWT
call WetRemovalGOCART2G (self%km, self%klid, self%nbins, self%nbins, 1, self%cdt, 'NH3', &
KIN, MAPL_GRAV, fwet, NH3, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(1), NH3, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, fluxWT_ptr, __RC__)
! Save local copy of HNO3 for first pass through run method regardless
if (associated(NH3WT)) NH3WT = fluxWT_ptr(:,:,1)

! NH4a
KIN = .true.
fwet = 1.
nullify(fluxWT_ptr)
if (associated(NH4WT)) fluxWT_ptr => fluxoutWT
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, 1, self%cdt, 'NH4a', &
KIN, MAPL_GRAV, fwet, NH4a, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(2), NH4a, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, fluxWT_ptr, __RC__)
if (associated(NH4WT)) NH4WT = fluxWT_ptr(:,:,1)

Expand All @@ -967,21 +964,18 @@ subroutine Run2 (GC, import, export, clock, RC)
end if

KIN = .true.
fwet = 1.
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, 1, self%cdt, 'nitrate', &
KIN, MAPL_GRAV, fwet, NO3an1, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(3), NO3an1, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, NIWT, __RC__)

KIN = .true.
fwet = 1.
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, 2, self%cdt, 'nitrate', &
KIN, MAPL_GRAV, fwet, NO3an2, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(4), NO3an2, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, NIWT, __RC__)

KIN = .true.
fwet = 0.3
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, 3, self%cdt, 'nitrate', &
KIN, MAPL_GRAV, fwet, NO3an3, ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(5), NO3an3, ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, NIWT, __RC__)

! Save local copy of HNO3 for first pass through run method regardless
Expand Down
3 changes: 3 additions & 0 deletions ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_instance_NI.rc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opti
# Scavenging efficiency per bin [km-1]
fscav: 0.0 0.4 0.4 0.4 0.4

#Large scale rainout efficiency per bin for gocart
fwet: 1.0 1.0 1.0 1.0 0.3

# Dry particle radius [um], used for settling
particle_radius_microns: 0.0 0.2695 0.2695 2.1 7.57

Expand Down
4 changes: 1 addition & 3 deletions ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridCompMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,6 @@ subroutine Run2 (GC, import, export, clock, RC)
integer :: n
real, allocatable, dimension(:,:) :: drydepositionfrequency, dqa
real, pointer, dimension(:,:,:) :: sssd_vel
real :: fwet
logical :: KIN

integer :: i1, j1, i2, j2, km
Expand Down Expand Up @@ -894,9 +893,8 @@ subroutine Run2 (GC, import, export, clock, RC)
select case (self%wet_removal_scheme)
case ('gocart')
do n = 1, self%nbins
fwet = 1.
call WetRemovalGOCART2G(self%km, self%klid, self%nbins, self%nbins, n, self%cdt, 'sea_salt', &
KIN, MAPL_GRAV, fwet, SS(:,:,:,n), ple, t, airdens, &
KIN, MAPL_GRAV, self%fwet(n), SS(:,:,:,n), ple, t, airdens, &
pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, SSWT, __RC__)
end do
case ('ufs')
Expand Down
3 changes: 3 additions & 0 deletions ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_instance_SS.rc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ wet_removal_scheme: gocart ! default value
# Scavenging efficiency per bin [km-1]
fscav: 0.4 0.4 0.4 0.4 0.4

# Rainout efficiency per bin for wet_removal_scheme == gocart
fwet: 1.0 1.0 1.0 1.0 1.0

# Rainout efficiency per bin for wet_removal_scheme == ufs
fwet_ice: 1.0 1.0 1.0 1.0 1.0
fwet_snow: 1.0 1.0 1.0 1.0 1.0
Expand Down
7 changes: 5 additions & 2 deletions ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_instance_SU.rc
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@ so4_anthropogenic_fraction: 0.03
# Aircraft emission factor: convert input unit to kg SO2
aircraft_fuel_emission_factor: 1.0000

# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED)
# Scavenging efficiency per bin [km-1]
fscav: 0.0 0.0 0.4 0.4

#Dummy wet removal efficiency for the GOCART scheme. This is not used for sulfate as of GOCART v2.5 and should be revisited.
fwet: 1.0 1.0 1.0 1.0

# Dry particle radius [um], used for settling
particle_radius_microns: 0.0 0.0 0.35 0.0

Expand Down Expand Up @@ -55,4 +58,4 @@ using_GMI_H2O2: .false.

# SettlingSolver options
# Options: 'gocart' or 'ufs'
settling_scheme: 'gocart'
settling_scheme: 'gocart'
3 changes: 1 addition & 2 deletions Process_Library/GOCART2G_Process.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3415,7 +3415,6 @@ subroutine WetRemovalGOCART2G ( km, klid, n1, n2, bin_ind, cdt, aero_type, kin,
if (tmpu(i,j,k) < 258d0 .and. .not.snow_scavenging) then
F = 0.d0
endif

effRemoval = fwet
DC(n) = aerosol(i,j,k) * F * effRemoval *(1.-exp(-BT))
if (DC(n).lt.0.) DC(n) = 0.
Expand Down Expand Up @@ -7286,7 +7285,7 @@ subroutine SU_Wet_Removal ( km, nbins, klid, cdt, kin, grav, airMolWght, delp, f
real, intent(in) :: airMolWght ! air molecular weight [kg]
real, dimension(:,:,:), intent(in) :: delp ! pressure thickness [Pa]
real, intent(in) :: fMassSO4, fMassSO2
real, dimension(:,:,:) :: h2o2_int
real, dimension(:,:,:) :: h2o2_int
real, pointer, dimension(:,:,:), intent(in) :: ple ! level edge air pressure
real, pointer, dimension(:,:,:), intent(in) :: rhoa ! air density, [kg m-3]
real, pointer, dimension(:,:), intent(in) :: precc ! total convective precip, [mm day-1]
Expand Down
Loading