Skip to content

Sa/add aerosol activation #3872

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Conversation

sajjadazimi
Copy link
Member

Purpose

Add aerosol activation based on Abdulrazzak and Ghan (2000).

To-do

Add a good test

Content


  • I have read and checked the items on the review checklist.

@sajjadazimi sajjadazimi force-pushed the sa/add_aerosol_activation branch 17 times, most recently from 3f12ff2 to b3eb3c5 Compare June 30, 2025 16:13
@sajjadazimi sajjadazimi force-pushed the sa/add_aerosol_activation branch 8 times, most recently from 8b62879 to 9c0eefc Compare July 18, 2025 19:58
@sajjadazimi sajjadazimi force-pushed the sa/add_aerosol_activation branch from 9c0eefc to f438d40 Compare July 18, 2025 20:13
seasalt_num,
seasalt_mean_radius,
sulfate_num,
specific(Y.c.ρq_tot, Y.c.ρ),
Copy link
Member

Choose a reason for hiding this comment

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

For what moisture and precipitation configurations this will be tested?

If we are aiming to swap out the 1M for the 2M scheme, then we should be passing q_tot, q_liq, q_ice, q_rai and q_sno. Precipitation is part of the working fluid, so q_vap = q_tot - q_liq - q_ice - q_rai - q_sno.

dt,
)
# Aerosol activation using prescribed aerosol (Sea salt and sulfate)
if !(:prescribed_aerosols_field in propertynames(p.tracers))
Copy link
Member

Choose a reason for hiding this comment

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

Is it possible for prescribed_aerosols_field to not be empty, but not contain any of the seasalt or sulfate aerosol fields you are expecting?

@. seasalt_num += seasalt_mass / seasalt_particle_mass
@. seasalt_mean_radius +=
seasalt_mass / seasalt_particle_mass *
log(seasalt_particle_radius)
Copy link
Member

Choose a reason for hiding this comment

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

Why is there log?

Copy link
Member

Choose a reason for hiding this comment

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

Or I guess I just dont understand how the mean radius is computed here

aerosol_params = cmc.aerosol
T = Tₐ(thermo_params, ts)
p = Pₐ(thermo_params, ts)
S = CMTDI.supersaturation_over_liquid(thermo_params, qₜ, qₗ, qᵢ, ρ, T)
Copy link
Member

Choose a reason for hiding this comment

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

Here q_l should be equal to q_lcl + q_rai and q_i = q_icl + q_sno

@trontrytel
Copy link
Member

trontrytel commented Jul 20, 2025

Left some small comments:

  • I was confused by the exp/log logic with the radius of the aerosol size distribution. Could you explain it somewhere? Maybe leave some comment in the code.
  • I think there is something inconsistent about the moisture tracers passed to the activation/supersaturation computations.
  • Could you add a paragraph in the Atmos docs about the aerosol activation and the additional clipping logic we use to allow the function to act not only at cloud base?
  • I think the allocations increase flagged by the flame test is very small. I would be ok to just bump the ref counter and ignore it. But lets ask someone else if that would be ok

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants