-
Notifications
You must be signed in to change notification settings - Fork 140
Simple Spectral Longwave Radiation Model #284
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
base: master
Are you sure you want to change the base?
Conversation
Adding python test case for running frierson model with SSM radiation
|
Thanks Andrew. I will try to take a look at this within the next couple of weeks. Great work! |
|
That's very cool. Are you arguing it is better in some way (e.g., more amenable to manipulation and experimentation, more understandable, more accurate?) than, say, an efficient correlated-k scheme with a small number (say four) bands? |
|
@gkvallis , thanks! And yes, all of the above. Definitely more understandable and easy to modify. Re: accuracy, an underappreciated facet of correlated-k schemes is that they involve a fair amount of hand tuning in order to achieve high levels of accuracy (e.g., Section 3.1.2 of Pincus et al., 2019). One could certainly design a four-band, correlated-k scheme which is reasonably accurate, but it would suffer the same "clarity" inadequacies as other correlated-k schemes. |
|
Just a note that I have started reviewing this. |
|
Just a note that this scheme doesn't (quite) close the TOA radiative balance. I have resolved this by extending the computation to a higher maximum wavenumber. To avoid adding a ton of spectral bins, I've recoded the scheme slightly so that the wavenumber increment doesn't need to be constant. Then, for large wavenumbers, I've added a coarse extension to the spectral 'grid'. I will upload these changes at some point soon. |
|
Thanks Neil! |
|
For what it's worth, I think the 'correct' way to resolve the issue above would be to compute some sort of definite integral of the plank function in each bin (and then for the two edge bins, extend the integral to nu=0 and nu=infinity). I will think on how this could be implemented. |
|
Fair point. Current implementation is a bit quick-and-dirty, but seemed to work fine. I've also been using it for slab ocean simulations, with no appreciable drift. A non-uniform wavenumber grid would be nice, potentially with some refinement around key absorption features (e.g., higher spectral resolution near the CO2 band, perhaps). I thought about this, but didn't know how to implement something like that. Maybe such an array could be a namelist input? |
|
@ntlewis , could you upload your implementation of the non-uniform wavenumber grid? |
|
Hi @AndrewILWilliams, sorry for the delay, I will do this on Monday. I think the way this P/R is configured, I'll have to push it to the branch on your fork (I haven't tried this before, so it might not work). Ahead of doing this, I think it'd be useful for you to copy your version to a separate branch (so that you're able to keep the code you currently have, in case you need it for reproducibility). There are a few other changes I have made. For example, I think the tests above are failing because you haven't added your code to the path_names files (some of them, at least). I have fixed this. |
|
Hey neil, I've made a copy of my code for reproducibility. Let me know if I should do anything else |
|
@ntlewis , happy to chat about this in the new year if it's useful. In the meantime, I've also put together a very simple SW version of the SSM. Together with your scattering code, it would be possible to have a very simple representation of clouds as well, if that was something you guys were interested in. For example, the cloud optics could just be:
|
Implements the simple spectral longwave radiation model (SSM) into Isca. Paper documenting the scheme is here: https://arxiv.org/abs/2508.09353
Haven't added a trip test yet, and not sure how this would interact with the thermodynamic sea-ice scheme? I might need to edit it a bit if the sea-ice code goes in first.
It would be nice to be able to call the SSM every N timesteps, like RRTMG, but I couldn't work out how to do that because the RRTMG code was confusing to me. If anyone understands that portion of the code and can help out, that would be great!
Thanks
Andrew