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
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(providesabstract :: aerosol_properties&aero_name_len)aerosol_state_mod(providesabstract :: aerosol_state&ptr2d_t)aerosol_optics_mod(providesabstract :: aerosol_opticsfor 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(providesbulk_aerosol_properties)bulk_aerosol_state_mod(providesbulk_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 betweenAandNanymore... to check)Wire them up to the CCPP'ized BAM (bulk aerosol model)
Then CCPPize the aerosol optics module specific implementations
Aerosol optics specifics
rad_constituentsandphys_prop(wip in atmos_phys)aerosol_optics_cam-- this may or may not be on the host model side or atmos_phys sideaer_rad_propswrapper to callaerosol_optics_cam(may not be needed)aerosol_optics_cam_sw/aerosol_optics_cam_lwlogic needs to be extracted and put into abstract interfacerrtmgp_set_aer_lw/rrtmgp_set_aer_sw-- which callsaer_rad_propscall stack in CAM for rrtmgp <-> aer optics
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