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

Surface layer and tendencies #126

Open
lfreese opened this issue Feb 21, 2020 · 6 comments
Open

Surface layer and tendencies #126

lfreese opened this issue Feb 21, 2020 · 6 comments

Comments

@lfreese
Copy link

lfreese commented Feb 21, 2020

I'm trying to create a new time dependent subprocess for turbulence in the lower atmosphere and on Ts, and have a few questions about how climlab handles tendencies and Ts.

I cannot find what units the tendencies should be input in for climlab. I have both a turbulent flux in K*m/s as well as a turbulent heating rate in K/day (or K/s). My timestep is in seconds per day. I'm trying to match how climlab treats tendencies in the convective source code, but cannot decipher if I should be using my flux or heating rate to force the model?

Additionally, is there a way to change climlab to use a different surface than ocean (eg: ice) such that surface processes and Ts adjustment is based on the specific heat of ice rather than water?

@brian-rose
Copy link
Collaborator

Sorry but I've having some trouble understanding your questions.

For most processes, tendencies are not input but output. The tendencies dict in each process is d/dt of each state variable, and the units are always [state var unit]/s.

If you are talking about adding additional prescribed tendencies, then you can use the climlab.process.external_forcing, see the docs here

The units would again be [state variable unit]/s.

Does this help? I may have misunderstood what you want.

@brian-rose
Copy link
Collaborator

With regards to your question about surface types, there is currently not "ice" surface type, but if you just want to change the bulk heat capacity of the surface, you could change the water_depth parameter to account for different specific heats.

(The heat capacity is just calculated by multiplying (specific heat)(density)(depth) assuming water values for specific heat and density)

On the other hand, the physics of an ice surface aren't really the same as that of a well-mixed water bucket, and to do this better would require some treatment of the thermodynamics of the ice layer including vertical heat fluxes through the ice and ice melt/growth. Putting together a simple thermodynamic ice surface module together has been on the to-do list for a long time, but nobody has done it yet.

@brian-rose
Copy link
Collaborator

brian-rose commented Feb 21, 2020

On that note, the relevant equations for a simple thermodynamic ice surface are nicely laid out by @ianeisenman in this paper:
https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2011JD016164

Just in case anyone wants to work on implementing this in climlab... :-)

@lfreese
Copy link
Author

lfreese commented Feb 21, 2020

Hi Brian,
Thanks! In regards to the first response, yes--I wasn't sure if the units were [state var unit]/s or just the [state var unit]. The problem with the external_forcing is that I'm having it adjust with each timestep, whereas from my understanding the external_forcing just holds constant with time.

I'll look into the ice surface thermodynamics and see what/if I can do something with that! Thanks!

@brian-rose
Copy link
Collaborator

All the external_forcing really does is apply an additional tendency every time step. As long you modify the forcing_tendencies dict appropriately at every step in the time loop, there should be no problem with a time-varying forcing.

@brian-rose
Copy link
Collaborator

Is there a need for improved documentation? The relevant page in the docs is here:
https://climlab.readthedocs.io/en/latest/api/climlab.process.external_forcing.html

It currently says

set the desired tendencies in the dictionary myforcing.forcing_tendencies, in units of [state variable unit] per second.

Do you have any suggestions for clarifying the docs?

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

No branches or pull requests

2 participants