Skip to content
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

O2.5.2: Generalize coupling and surface fluxes to accommodate full land model #1031

Open
1 of 5 tasks
juliasloan25 opened this issue Oct 18, 2024 · 2 comments
Open
1 of 5 tasks
Assignees
Labels
🏅 SDI Software Design Issue

Comments

@juliasloan25
Copy link
Member

juliasloan25 commented Oct 18, 2024

The Climate Modeling Alliance

Software Design Issue 📜

Purpose

O2.5.2: Generalize coupling and surface fluxes to accommodate full land model, including:

  • component models using different timesteps
  • identify and implement all flux exchanges needed for more complex model
  • verified correct surface flux calculations, based on unit testing and comparison to observations

This works towards O2.5:

O2.5 Couple the land surface model with soil/canopy/snow to atmosphere model and update surface flux computations to enable fractional cover with land properties (e.g., snow and canopy). [Possibly move up if needed for good AMIP.]

Cost/Benefits/Risks

costs: developer time, larger coupler codebase to handle more cases
benefits: more generalized coupling, which will help us prepare for coupling atmosphere + ocean
risks: we don't know yet exactly what changes will be needed to include the more complex land model

People and Personnel

Components

  • Use different timesteps for each component model
  • Identify and document flux exchanges needed for full land model (to and from atmos)
  • Implement any flux exchange methods we don't have get (get_field, update_field functions)
  • Verify surface flux calculations, using unit testing, comparison to observation, and coupled model stability

Inputs

  • Existing coupler infrastructure
  • Documentation of which fields are expected to be provided by surface models and atmosphere models

Results and Deliverables

  • Able to run coupled atmosphere and full land model simulations (not necessarily stable yet - see O2.5.4)
  • Updated documentation of which fields are expected to be provided by surface models and atmosphere models

Current Status and Proposed Changes

- surface flux calculation

Current

  • called in Atmos

Proposed change

  • call from Land or Coupler for each land component, then combine with weighted average

- partitioned_turbulent_fluxes!

note that we can't use the combined turbulent fluxes with the full land model (can't combine land and ocean states when land has multiple states to keep track of - soil, snow, canopy)
Current

  • loop over each surface model
  • get surface_thermo_state and compute surface fluxes of each surface model
  • in the full land model, we compute the surface fluxes for each component of the land model, and return a weighted average of these

Proposed change

  • idea: instead of getting thermo_state_sfc in partitioned_turbulent_fluxes, get thermo_state and weights for each component of land model. Call SF and calculate fluxes for each of these, then combine with provided weights.
  • idea: Land isolates surface flux calculations to one function (e.g. get_surface_fluxes), which is accessible by the coupler. This function takes in thermodynamics parameters and atmos thermodynamic state, and can be used with a prescribed or modeled atmos. After each atmos step, call this function with the latest atmos state (as a callback) and use the returned updated fluxes for the next step.
    • For conservation, will need to accumulate fluxes across timesteps in atmos
    • Need to keep track of order of operations required for this
    • Equivalent get_surface_fluxes for other surface models would replicate what is currently done in partitioned_turbulent_fluxes here
    • question: Do we need to support different conservation with component model timesteps?

- momentum fluxes

TODO: discuss (needed for atmos)

- land exchange fields(get_field, update_field!)

Current

  • bucket provides: air density, area fraction, beta, roughness buoyancy, roughness momentum, surface direct albedo, surface diffuse albedo, surface humidity, surface temperature, energy, water
  • bucket receives: air density, liquid precipitation, snow precipitation, radiative energy flux at the surface, turbulent energy flux, turbulent moisture flux

Proposed change

  • land provides: same as bucket ?
  • land receives: ?

Remaining Questions

  • ClimaCoupler has a function update_turbulent_fluxes! that updates a model's turbulent fluxes with some input fields. E.g. see bucket implementation here. How will we update the full land model's turbulent fluxes with new values, given that the fluxes are distributed among the components of the land model? Will we do a weighted division (like the opposite of a weighted sum)?

Tasks

ClimaCoupler

Preview Give feedback
  1. 🍃 leaf enhancement
    imreddyTeja

Surface flux calculations

Preview Give feedback

SDI Revision Log

CC

@tapios @sriharshakandala @charleskawczynski @cmbengue

@tapios
Copy link

tapios commented Oct 18, 2024

This will be nice to have. (We should only do it after the timestepper is changed to integers, so we do not run into float32 problems.)

@juliasloan25 juliasloan25 changed the title O2.5.2: Generalize coupler infrastructure to accommodate alternate land model O2.5.2: Generalize coupling and surface fluxes to accommodate alternate land model Oct 31, 2024
@juliasloan25
Copy link
Member Author

See also this previous SDI in ClimaLand. It's pretty out of date but has some ideas we may want to include here CliMA/ClimaLand.jl#127

@juliasloan25 juliasloan25 changed the title O2.5.2: Generalize coupling and surface fluxes to accommodate alternate land model O2.5.2: Generalize coupling and surface fluxes to accommodate full land model Nov 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🏅 SDI Software Design Issue
Projects
None yet
Development

No branches or pull requests

6 participants