Skip to content

Port abstract aerosol interface + BAM implementation from CAM to CAM-SIMA #464

@jimmielin

Description

@jimmielin

What is the feature/what would you like to discuss?

Bring in the abstract aerosol interface code from CAM into CAM-SIMA

This is code to be ported into the host model side. atmos_phys companion issue to follow.

Anything interfacing with physics will have quantities provided via the CCPP framework to the physics

List of modules to port (current CAM src/chemistry/aerosol)

  • aerosol_properties_mod (provides abstract :: aerosol_properties & aero_name_len)
  • aerosol_state_mod (provides abstract :: aerosol_state & ptr2d_t)
  • aerosol_optics_mod (provides abstract :: aerosol_optics for sw/lw props)

After these abstract types are brought in (hopefully copy-pasted so they do not diverge from CAM) bring in bulk aerosol

Bulk aerosol modules

  • bulk_aerosol_properties_mod (provides bulk_aerosol_properties)
  • bulk_aerosol_state_mod (provides bulk_aerosol_state)
    aerosol state depends on pbuf in CAM (when option is N -- need to change to constituents object. I think this means there is no distinction between A and N anymore... to check)

Wire them up to the CCPP'ized BAM (bulk aerosol model)

Then CCPPize the aerosol optics module specific implementations

Aerosol optics specifics

  • Prep work: rad_constituents and phys_prop (wip in atmos_phys)
  • Port whatever is needed from aerosol_optics_cam -- this may or may not be on the host model side or atmos_phys side
  • aer_rad_props wrapper to call aerosol_optics_cam (may not be needed)
  • aerosol_optics_cam_sw / aerosol_optics_cam_lw logic needs to be extracted and put into abstract interface
  • ... all this in CAM feeds back to rrtmgp_set_aer_lw/rrtmgp_set_aer_sw -- which calls aer_rad_props

call stack in CAM for rrtmgp <-> aer optics

rrtmgp_inputs_cam.F90:rrtmgp_set_aer_lw()
  └─> aer_rad_props.F90:aer_rad_props_lw(icall, state, pbuf, aer_lw_abs)
      └─> aerosol_optics_cam.F90:aerosol_optics_cam_lw(list_idx, state, pbuf, odap_aer)
          ├─> bulk_aerosol_state_mod.F90:bulk_aerosol_state(state, pbuf)
          ├─> bulk_aerosol_properties_mod.F90:bulk_aerosol_properties()
          └─> For each aerosol bin:
              ├─> aeroprops%optics_params() → rad_cnst_get_aer_props()
              │   └─> Returns: opticstype, lookup tables, density, hygro, etc.
              ├─> Create aerosol_optics object based on opticstype:
              │   ├─> hygroscopic_aerosol_optics()
              │   ├─> insoluble_aerosol_optics()
              │   └─> etc.
              ├─> aerostate%get_ambient_mmr() → rad_cnst_get_aer_mmr()
              │   └─> Returns: mmr pointer to state%q or pbuf field
              └─> aero_optics%lw_props(ncol, ilev, iwav, pabs)
                  └─> Returns: pabs (absorption coefficient)

rrtmgp_inputs_cam.F90:rrtmgp_set_aer_sw()
  └─> aer_rad_props.F90:aer_rad_props_sw(icall, state, pbuf, ...)
      └─> aerosol_optics_cam.F90:aerosol_optics_cam_sw(list_idx, state, pbuf, ...)
          ├─> [Same initialization as LW]
          └─> For each aerosol bin:
              └─> aero_optics%sw_props(ncol, ilev, iwav, pext, pabs, palb, pasm)
                  └─> Returns: extinction, absorption, SSA, asymmetry

Is there anyone in particular you want to be part of this conversation?

@peverwhee @nusbaume

Will this change (regression test) answers?

I Don't Know

Will you be implementing this enhancement yourself?

Yes, but I will need some help

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions