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
3 changes: 3 additions & 0 deletions bld/build-namelist
Original file line number Diff line number Diff line change
Expand Up @@ -3923,6 +3923,9 @@ if ($aer_model eq 'bam' and $prescribed_aero_model eq 'none') {
add_default($nl, 'sad_chem_spec_types',
'val'=>"'sulfate','black-c','p-organic','s-organic','nitrate'");
}
# ...for prescribed BAM with chemistry (WACCM-4) sad_chem_spec_types should
# be empty as sulfate is from supplemental SAD from sulf_file, not here.

# Gravity wave drag settings

# By default, orographic waves are always on
Expand Down
8 changes: 7 additions & 1 deletion bld/namelist_files/namelist_definition.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6714,7 +6714,13 @@ Species types contributing to chemistry-relevant surface area density (SAD)
for heterogeneous reaction rates. The SAD determines how much aerosol surface
is available for gas-phase chemical reactions (computed in aero_model, used
by mo_usrrxt).
Default: 'sulfate','s-organic','p-organic','black-c','ammonium'

In bulk (BAM) configurations, types not in rad_climate are provided by
a supplemental path in aero_model_surfarea.

Default: 'sulfate','s-organic','p-organic','black-c','ammonium' (MAM, CARMA);
'sulfate','black-c','p-organic','s-organic','nitrate' (prognostic bulk);
UNSET (prescribed bulk)
</entry>

<entry id="sad_seasalt_spec_types" type="char*32(16)" category="cam_chem"
Expand Down
3 changes: 2 additions & 1 deletion src/chemistry/aerosol/aerosol_state_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ end subroutine aero_aqu_gain_binfraction
! aerosol surface area density
!------------------------------------------------------------------------
subroutine aero_surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endlev, &
relhum, pmid, temp, sad, reff, sfc, dm_aer)
relhum, pmid, temp, pi, sad, reff, sfc, dm_aer)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jimmielin Is there a need to pass the constant pi through the interface?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the question! Yes, I am trying to avoid introducing dependencies on host modules (e.g. physconst) so the abstract interface can be ported to other models in the future.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see.

import :: aerosol_state, aerosol_properties, r8

class(aerosol_state), intent(in) :: self
Expand All @@ -317,6 +317,7 @@ subroutine aero_surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev,
real(r8), intent(in) :: relhum(:,:) ! relative humidity
real(r8), intent(in) :: pmid(:,:) ! mid-level pressure (Pa)
real(r8), intent(in) :: temp(:,:) ! temperature (K)
real(r8), intent(in) :: pi ! pi mathematical constant

real(r8), intent(out) :: sad(:,:) ! surface area density (cm2/cm3)
real(r8), intent(out) :: reff(:,:) ! effective radius (units cm)
Expand Down
8 changes: 5 additions & 3 deletions src/chemistry/aerosol/bulk_aerosol_state_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -517,10 +517,8 @@ end subroutine aqu_gain_binfraction
! aerosol surface area density
!------------------------------------------------------------------------
subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endlev, &
relhum, pmid, temp, sad, reff, sfc, dm_aer)
use mo_constants, only : pi, avo => avogadro
relhum, pmid, temp, pi, sad, reff, sfc, dm_aer)
use aerosol_spec_utils, only : spec_type_in_list
use ppgrid, only: pcols, pver

class(bulk_aerosol_state), intent(in) :: self
class(aerosol_properties), intent(in) :: aero_props ! aerosol properties object
Expand All @@ -532,6 +530,7 @@ subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endl
real(r8), intent(in) :: relhum(:,:) ! relative humidity
real(r8), intent(in) :: pmid(:,:) ! mid-level pressure (Pa)
real(r8), intent(in) :: temp(:,:) ! temperature (K)
real(r8), intent(in) :: pi ! pi mathematical constant

real(r8), intent(out) :: sad(:,:) ! surface area density (cm2/cm3)
real(r8), intent(out) :: reff(:,:) ! effective radius (units cm)
Expand Down Expand Up @@ -613,8 +612,11 @@ subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endl
sadbins = 0._r8
diabins = 0._r8

ndx = 0

ver_loop: do k = 1,nlev
col_loop: do i = 1,ncol
if (k < beglev(i) .or. k > endlev(i)) cycle col_loop
!-------------------------------------------------------------------------
! ... air density (kg/m3)
!-------------------------------------------------------------------------
Expand Down
3 changes: 2 additions & 1 deletion src/chemistry/aerosol/carma_aerosol_state_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ end subroutine aqu_gain_binfraction
! aerosol surface area density
!------------------------------------------------------------------------
subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endlev, &
relhum, pmid, temp, sad, reff, sfc, dm_aer)
relhum, pmid, temp, pi, sad, reff, sfc, dm_aer)
use aerosol_spec_utils, only : spec_type_in_list

class(carma_aerosol_state), intent(in) :: self
Expand All @@ -682,6 +682,7 @@ subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endl
real(r8), intent(in) :: relhum(:,:) ! relative humidity
real(r8), intent(in) :: pmid(:,:) ! mid-level pressure (Pa)
real(r8), intent(in) :: temp(:,:) ! temperature (K)
real(r8), intent(in) :: pi ! pi mathematical constant

real(r8), intent(out) :: sad(:,:) ! surface area density (cm2/cm3)
real(r8), intent(out) :: reff(:,:) ! effective radius (units cm)
Expand Down
4 changes: 2 additions & 2 deletions src/chemistry/aerosol/modal_aerosol_state_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -804,8 +804,7 @@ end subroutine aqu_gain_binfraction
! aerosol surface area density
!------------------------------------------------------------------------
subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endlev, &
relhum, pmid, temp, sad, reff, sfc, dm_aer)
use mo_constants, only : pi
relhum, pmid, temp, pi, sad, reff, sfc, dm_aer)
use aerosol_spec_utils, only : spec_type_in_list

class(modal_aerosol_state), intent(in) :: self
Expand All @@ -818,6 +817,7 @@ subroutine surf_area_dens(self, aero_props, types_list, ncol, nlev, beglev, endl
real(r8), intent(in) :: relhum(:,:) ! relative humidity
real(r8), intent(in) :: pmid(:,:) ! mid-level pressure (Pa)
real(r8), intent(in) :: temp(:,:) ! temperature (K)
real(r8), intent(in) :: pi ! pi mathematical constant

real(r8), intent(out) :: sad(:,:) ! surface area density (cm2/cm3)
real(r8), intent(out) :: reff(:,:) ! effective radius (units cm)
Expand Down
Loading
Loading