Add surface coupling design document#408
Conversation
|
I may have been a little heavy handed with the request for reviews. If you think there's someone else better suited to review, please feel free to reassign. |
xylar
left a comment
There was a problem hiding this comment.
@andrewdnolan a few questions and comments to get things started.
| The class must provide methods to import fields, apply them to forcing | ||
| state, accumulate export quantities each ocean timestep, export | ||
| accumulated fields, and reset accumulators. | ||
|
|
There was a problem hiding this comment.
A similar comment - while this is focused on the interface to the coupler, we also need to flesh out how this interacts with the rest of the surface forcing. In particular, where it sits in the run driver, how the fields are combined with other options like restoring. Conceptually, coupling should be identical to standalone forcing with just the source of the data coming from a coupler rather than a file (with the obvious exceptions that we also need to pass stuff back and the fields can be somewhat different).
Also, what will be the configuration options?
There was a problem hiding this comment.
The idea is that the forcing class (under Omega) is identical for both standalone and coupled. In coupled, it's populated by the coupling that andrew is building. In standalone, it reads from file. I am not sure if this answers your question though?
There was a problem hiding this comment.
@philipwjones I addressed these missing pieces in e4b2ae2. Curious to hear if it that's enough detail?
alicebarthel
left a comment
There was a problem hiding this comment.
Thanks @andrewdnolan! This seems in line with what we discussed. Only minor comments asking for clarification at this stage.
cbegeman
left a comment
There was a problem hiding this comment.
@andrewdnolan Thanks for addressing all of my comments and working with @alicebarthel to make this consistent with the file-read approach for standalone.
|
|
||
| ## 1 Overview | ||
|
|
||
| The `SurfaceCoupling` class manages all fields exchanged between Omega and |
There was a problem hiding this comment.
| The `SurfaceCoupling` class manages all fields exchanged between Omega and | |
| The `SfcCoupling` class manages all fields exchanged between Omega and |
?
we are moving all the forcing terms to be named SfcForcing...
Just a suggestion.
| Array1DReal EvaporationFlux; ///< Foxx_evap [kg m⁻² s⁻¹] | ||
| Array1DReal SeaIceFreshWaterFlux; ///< Fioi_meltw [kg m⁻² s⁻¹] | ||
| Array1DReal IcebergFreshWaterFlux; ///< Fioi_bergw [kg m⁻² s⁻¹] | ||
| Array1DReal SeaIceSalinityFlux; ///< Fioi_salt [kg m⁻² s⁻¹] |
There was a problem hiding this comment.
| Array1DReal SeaIceSalinityFlux; ///< Fioi_salt [kg m⁻² s⁻¹] | |
| Array1DReal SeaIceSaltFlux; ///< Fioi_salt [kg m⁻² s⁻¹] |
Just a note for your implementation
alicebarthel
left a comment
There was a problem hiding this comment.
There may be implementation details that escape me but in general, I think that this design doc does a good job of laying out the requirements and tests.
That's in line with what we discussed.
| class SurfaceCoupling { | ||
| public: | ||
| // Import fields (x2o): coupler → ocean | ||
| Array1DReal SurfaceStressZonal; ///< Foxx_taux [N m⁻²] |
There was a problem hiding this comment.
These are moving to SfcStressXXXX right?
| Array1DReal SSHGradientMeridional; ///< So_dhdy [m m⁻¹] | ||
| Array1DReal SeaIceFormationHeat; ///< Fioo_q [W m⁻²] | ||
| Array1DReal FrazilIceMass; ///< Fioo_frazil [kg m⁻² s⁻¹] | ||
| Array1DReal FreshWaterHeatFlux; ///< Faoo_h2otemp[W m⁻²] |
There was a problem hiding this comment.
I believe we also need to import WindSpeed10m from the coupler for KPP
| SurfaceCoupling *SurfaceCoupling::get(const std::string &Name); | ||
| ``` | ||
|
|
||
| Other portions of the code can inquire whether running in coupled mode by |
There was a problem hiding this comment.
| Other portions of the code can inquire whether running in coupled mode by | |
| Other portions of the code can inquire whether it is running in coupled mode by |
| uses `col*NCells + i`, MOAB uses `i*NFields + col`. Unit conversions (e.g., | ||
| in situ → conservative temperature) and corrections (e.g. forcing shortwave | ||
| radiation to be positive) are applied inline. The corrections are applied to | ||
| address numerical issues, not and physical one, in the off chance monotonicity |
There was a problem hiding this comment.
I don't understand what you are saying here
|
|
||
| } | ||
|
|
||
| // if coupler tells us, force write restate stream |
There was a problem hiding this comment.
| // if coupler tells us, force write restate stream | |
| // if coupler tells us, force write restart stream |
??
This PR adds the design document for the surface coupling within E3SM. Builds off the discussion during the Omega special topics meetings 05/06/26.
Checklist: