Closed eclare108213 closed 10 months ago
Hi Elizabeth,
The option to calculate ice-ocean drag based on a (variable) under-ice ice roughness and the thickness of the ocean layer was added to icepack_parameters.F and the documentation, but apparently the actual calculation is done outside of icepack and the resulting value is sent in as the parameter iceruf_ocn. Is that correct?
That's not correct. In the documentation (which I added in #366), we have (last paragraph of https://cice-consortium-icepack.readthedocs.io/en/main/science_guide/sg_boundary_forcing.html#ocean):
and this is implemented in icepack_recompute_constants
:
So under calc_dragio=.true.
, we do this computation, and when it's false, we use the value of dragio
(default or set via icepack_init_parameters
).
So setting calc_dragio=.true. in Icepack does nothing?
No, it does not do nothing. It computes dragio
from iceruf_ocn
and thickness_ocn_layer1
, instead of taking the dragio
value directly from the Icepack parameters.
And a final question: what would a non-Canadian user need to do in CICE or somewhere else in their coupled model to make this work?
I guess the same as a Canadian user :P That is, set calc_dragio=.true.
, and set iceruf_ocn
and thickness_ocn_layer1
as needed.
I hope that's clear ? Let me know how you think the documentation could be improved. I guess the section I link to above would be clearer if the text also mentioned the corresponding code variables...
I started https://github.com/CICE-Consortium/Icepack/pull/466, I'll update if we want more details.
My question is a little different from the one you're answering -- sorry for not being clear. My assumption is that iceruf_ocn
is different for each grid cell (thickness_ocn_layer
could also be different for each one). If those are constants everywhere, then this functionality doesn't really do much, right? Isn't the value in it that they can vary? But how they vary must be calculated outside of the sea ice model, or at least outside of Icepack. Does that make sense?
OK, yes I understand better now.
It's true that it does not do much if they are constant. Currently both iceruf_ocn
and thickness_ocn_layer
are indeed constant in our setup. So, we could have simply computed dragio
externally, and set its value using icepack_init_parameters
.
I went back to my PR (#366) and it turns out we quite a long discussion about it :) In fact, it seems you suggested the current approach (having the option to do the computation in Icepack itself).
I'm not opposed to removing it and computing it outside Icepack (and CICE) if we feel it's more natural this way.
One motivation for the current approach was that it added iceruf_ocn
to Icepack, and we had some other in-house code that made use of this value for the form drag parameterization. It turns out I still haven't reimplemented those changes as they are not used in operations. I don't know if we will revisit them eventually.
The option to calculate ice-ocean drag based on a (variable) under-ice ice roughness and the thickness of the ocean layer was added to icepack_parameters.F and the documentation, but apparently the actual calculation is done outside of icepack and the resulting value is sent in as the parameter
iceruf_ocn
. Is that correct? So settingcalc_dragio=.true.
in Icepack does nothing? Maybe we should write a warning in the Icepack driver to make that clear. Why isthickness_ocn_layer1
needed in Icepack? And a final question: what would a non-Canadian user need to do in CICE or somewhere else in their coupled model to make this work? A little more documentation on that point would be helpful, e.g. a sentence in layman's language that outlines the calculation. If someone is looking at Icepack without CICE, then it needs to be clear that this capability must be implemented outside of Icepack, that Icepack only ingests the results. I've been exploring it for E3SM, and it appears to be a bit of a science project. Thanks!