Skip to content

Jy/larcform1 case merge#4567

Draft
jefftyoder wants to merge 13 commits into
mainfrom
jy/larcform1_case_merge
Draft

Jy/larcform1 case merge#4567
jefftyoder wants to merge 13 commits into
mainfrom
jy/larcform1_case_merge

Conversation

@jefftyoder

@jefftyoder jefftyoder commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Purpose

Add the LARCFORM1 arctic boundary layer single-column model (SCM) case to ClimaAtmos, based on the Pithan et al. (2016) SCM intercomparison for Arctic boundary layer processes (80°N, wintertime, sea ice surface).

Content

New SCM setup (src/setups/Larcform1.jl): Larcform1 initial condition struct drawing temperature, humidity, pressure, and geostrophic wind profiles from AtmosphericProfilesLibrary.jl (jy/Larcform1 branch, see CliMA/AtmosphericProfilesLibrary.jl#51).

New surface temperature models (src/solver/types.jl, src/prognostic_equations/surface_temp.jl):

New insolation type: Larcform1Insolation (zero solar insolation, appropriate for 80°N in January).

Current surface model is a modified SlabSST model used for testing until a simple sea ice model is implemented.

New model config and corresponding TOML parameter files:
larcform1_1M_prognostic_edmfx — 1M + full prognostic EDMFx

CI plots (post_processing/ci_plots.jl): make_plots dispatch for any larcform1* job ID, producing time-height profiles (thermodynamic state, EDMF updraft/environment variables, TKE, mixing length) and time-series (radiation fluxes, precip, surface fluxes, LWP/IWP).

To-do

  • Clean with JuliaFormatter.jl
  • Add unit tests for initial conditions
  • Implement simple sea ice model with fixed surface temperature
  • Add simplified ci config & tests
  • Implement EisenmanSeaIce{FT}: thermodynamic 0-layer sea ice model (Semtner 1976 / Eisenman 2009 / Zhang et al. 2021) with prognostic ice thickness, mixed layer temperature, and surface temperature.

I have:

In the Content, I have included

  • relevant unit tests, and integration tests,

  • appropriate docstrings on all functions, structs, and modules, and included relevant documentation.

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

@jefftyoder jefftyoder self-assigned this Jun 9, 2026
@jefftyoder jefftyoder added the enhancement New feature or request label Jun 9, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Adds the LARCFORM1 Arctic winter boundary-layer SCM case to ClimaAtmos, wiring it into the setup/config system, providing a dedicated “polar night” insolation option, and adding a basic test plus a runnable model config/TOML parameter overlay.

Changes:

  • Add Setups.Larcform1 SCM setup backed by AtmosphericProfilesLibrary profiles, plus config plumbing to select it via initial_condition: Larcform1.
  • Add Larcform1Insolation and config parsing support (insolation: larcform1), with RRTMGP callback dispatch.
  • Add a new SCM model config + TOML overlay and a targeted test entry.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/setups/Larcform1.jl Implements the new Larcform1 SCM setup (profiles, IC, surface/coriolis hooks).
src/setups/Setups.jl Registers the new setup via include("Larcform1.jl").
src/types.jl Adds Larcform1Insolation type for dispatch.
src/config/type_getters.jl Enables initial_condition == "Larcform1" to construct the setup.
src/config/model_getters.jl Enables insolation == "larcform1" to construct the insolation model.
src/callbacks/callbacks.jl Adds set_insolation_variables! dispatch for Larcform1Insolation.
config/model_configs/larcform1_1M_prognostic_edmfx.yml Adds a runnable 20-day column config for the case.
toml/larcform1_1M_prognostic_edmfx.toml Adds a small TOML overlay for 1M microphysics timescales.
test/larcform1.jl Adds a setup-level test validating key profile values/coriolis.
test/runtests.jl Hooks the new test into the infrastructure group.

Comment thread src/setups/Larcform1.jl Outdated
Comment thread src/callbacks/callbacks.jl
Comment thread src/setups/Larcform1.jl
Comment thread src/config/type_getters.jl Outdated
Comment thread config/model_configs/larcform1_1M_prognostic_edmfx.yml
Comment thread src/config/type_getters.jl Outdated
Comment thread src/config/type_getters.jl Outdated
@jefftyoder jefftyoder force-pushed the jy/larcform1_case_merge branch from fcbd879 to a4a035e Compare June 9, 2026 22:55
@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

📖 Docs preview for this PR: https://clima.github.io/ClimaAtmos.jl/previews/PR4567/

@nefrathenrici nefrathenrici left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This looks good to me. I think we need an APL release before merging this.

Comment thread config/model_configs/larcform1_1M_prognostic_edmfx.yml Outdated
Comment thread src/setups/Larcform1.jl
FT = eltype(thermo_params)
T_prof = APL.Larcform1_T(FT)
RH_prof = APL.Larcform1_RH(FT)
p_apl = APL.Larcform1_p(FT) # analytic pressure used for RH → q_tot conversion

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is there a reason you're not using this pressure profile directly? What is the difference between the two?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The p_apl is the dry hydrostatic balance profile given by Pithan 2016 and defined in AtmosphericalProfilesLibrary.jl, which is used to calculate q_tot from RH. The specific humidity profile q_tot is then used in Atmos' hydrostatic_pressure_profile to calculate the pressurep used by the model itself.

Since this case is fairly dry in terms of specific humidity, I expect the difference between the two pressure profiles is negligible; I chose to instantiate the model with the hydrostatic_pressure_profile to follow convention from the other cases in ClimaAtmos.

@jefftyoder

Copy link
Copy Markdown
Contributor Author

This looks good to me. I think we need an APL release before merging this.

CliMA/AtmosphericProfilesLibrary.jl#51

jefftyoder and others added 13 commits June 12, 2026 10:07
Implements the single-column model setup for the Larcform1 arctic winter
boundary layer case following Pithan et al. (2016). Includes:

- `Larcform1` setup struct with initial conditions and surface boundary
  from AtmosphericProfilesLibrary profiles (T, RH→q_tot, u/v geostrophic)
- `Larcform1Insolation` type with zero TOA flux and cos(60°) zenith angle
  (representing Arctic January conditions at 80°N)
- Hydrostatic pressure profile computed from liquid-water-relative RH
- Coriolis forcing at 80°N (f = 1.432×10⁻⁴ s⁻¹)
- Config YAML/TOML for the 1M prognostic EDMFx configuration
- Wired into `get_insolation_form`, `get_setup_type`, and `Setups.jl`
- Test suite entry in `runtests.jl`
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Add in missing factor of RH.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Haakon Ludvig Langeland Ervik <45243236+haakon-e@users.noreply.github.com>
Co-authored-by: Haakon Ludvig Langeland Ervik <45243236+haakon-e@users.noreply.github.com>
Co-authored-by: Nat Efrat-Henrici <60049837+nefrathenrici@users.noreply.github.com>
@jefftyoder jefftyoder force-pushed the jy/larcform1_case_merge branch from e4d0764 to e6bc876 Compare June 12, 2026 17:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request Microphysics

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants