Port abstract aerosol interface + BAM implementation from CAM to CAM-SIMA
- Dominant language
- No language data
- Stars
- 9
- Forks
- 22
- Avg merge
- 8d 5h
- Merged PRs (30d)
- 4
Description
### 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
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.