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

update icepack; switch to "no abort" when inconsistent ITD condition is found #4

Merged

Conversation

DeniseWorthen
Copy link
Collaborator

  • Updates Icepack to Consortium/Icepack master
  • Implements the Consortium fix for the hicen_init(n+1) <= hicen_init(n) condition present in current CICE6 IC conditions. This condition was first reported by EMC when the coupled model failed the debug test. Since then, we have carried a fix for this condition which relied on setting the value denom = max(puny,hicen_init(n+1) - hicen_init(n)) when interpolating between adjacent category growth rates. The relevant code is in icepack_therm_itd.
  • The Consortium eventually implemented a fix which included causing the model to abort when the condition is encountered. This PR uses that fix but switches the abort flag to false. Setting the abort flag to false will create a warning in the log file when the condition is encountered rather than aborting the model.
  • Testing indicates that for the tested configurations and ICs, this condition, if found, occurs only at initialization.
  • Testing also indicates that this condition is not encountered in the current RT benchmark configurations or any DATM configurations.

eclare108213 and others added 13 commits March 17, 2021 08:41
…ICE-Consortium#337)

* Added catch for unusual case of (hicen_init(n+1) - hicen_init(n))>0

* fix conditional

Co-authored-by: Andrew Roberts <afroberts@lanl.edu>
…#353)

* Addition of Compy to standard machines available for Icepack

* Upate to remove erroneous badger reference, and more specific machine information from Compy

Co-authored-by: Andrew Roberts <afroberts@lanl.edu>
* Fix nt_zbgc_frac

* New developer guide module on adding diagnostics

* More on adding diagnostics

* test

* fix errors

* Fix version of bibtex

* Fix version of bibtex

* Update documentation for diagnostics
* update version number and revise reference
…CICE-Consortium#359)

* update test results color implementation to point to files for color rather than web links

* update github actions test script

* fix compiler check in github action script

* update conda macos build
…-Consortium#362)

This makes Git aware that files ending in '*.F90' are Fortran source
files, and activates the special regexes included in Git [1] so that
several commands are more useful since they recognize function,
subroutine and module boundaries:

- 'git diff' [1], [2]
- 'git grep' [3], [4]
- 'git log' [5]
- 'git blame' [6]

[1] https://git-scm.com/docs/gitattributes#_defining_a_custom_hunk_header
[2] https://git-scm.com/docs/git-diff#Documentation/git-diff.txt--W
[3] https://git-scm.com/docs/git-grep#Documentation/git-grep.txt--p
[4] https://git-scm.com/docs/git-grep#Documentation/git-grep.txt--W
[5] https://git-scm.com/docs/git-log#Documentation/git-log.txt--Lltstartgtltendgtltfilegt
[6] https://git-scm.com/docs/git-blame#Documentation/git-blame.txt--Lltstartgtltendgt
Mimicking the configuration for those machines in CICE, port Icepack to
'daley' and 'banting'.
* icepack_atmo: add stability functions with more explicit names

The two functions 'psimhu' and 'psixhu' in icepack_atmo compute the
stability functions in the unstable case for momentum and scalars (heat
and water), respectively. They are both function of X := (1 - 16
\zeta)^(1/4) (see [1], section 8.1.1). In the code X is computed first
('xqq') and passed to 'psimhu' and 'psixhu'.

Add two new functions with more explicit names, 'psi_momentum_unstable'
and 'psi_scalar_unstable', that take \zeta ('hol') as argument,
compute X internally and return the evaluated stability function.

A subsequent commit will refactor the code to use them.

[1] B.G. Kauffman and W.G. Large. The CCSM coupler, version 5.0.1. 2002.
URL: https://github.com/CICE-Consortium/CICE/blob/master/doc/PDF/KL_NCAR2002.pdf.

* icepack_atmo: use 'psi_{momentum,scalar}_unstable'

Use the new functions 'psi_momentum_unstable' and 'psi_scalar_unstable'
introduced in the preceding commit to compute the stability function
evaluated at 'hol'. Remove duplicated computation  of 'xqq'.

Also remove the now unused functions 'psimhu' and 'psixhu'.

* icepack_atmo: refactor 'atmo_boundary_layer'

In a subsequent commit, we will support receiving the momentum and
scalar atmospheric variables at different levels. In order to minimize
code duplication, factor out the computation of the stability parameter
'hol' and the stability function 'psi[mx]h' in function
'compute_stability_parameter' and subroutine
'compute_stability_function'.

'compute_stability_function' also makes available the unit step function
evaluated at 'hol', 'stable', since it is used at the end of
'atmo_boundary_layer' to compute the diagnostic temperature and
humidity.

* icepack_atmo: add support for staggered atmospheric levels

In some applications, we might want the atmospheric input variables
(wind, temperature and humidity) to be given at different vertical
levels. For example, we might want to receive the winds at some level
and the scalar variables (temperature and humidity) at another.

To support this use case, add an optional argument 'zlvs' to subroutine
'icepack_atm_boundary', and pass it down to 'atmo_boundary_layer' also
as an optional argument, so that existing applications do not have to be
changed if they do not want to use this feature.

The name 'zlvs' is chosen to mirror the existing variable 'zlvl', but
with the suffix 's' for 'scalars', mimicking the existing convention for
several variables in 'atmo_boundary_layer'.

In 'atmo_boundary_layer', add new local variables 'alzs' and 'hols' to
hold quantities computed at zlvs.  Also, for clarity, rename 'alz' to
'alzm' and 'hol' to 'holm', where the 'm' suffix stands for 'momentum',
again mimicking existing convention in the subroutine.

If 'zlvs' is not passed to 'atmo_boundary_layer', it is assumed that all
variables are given at the same level (zlvl), so in that case there is
no change in the results.

* icepack_therm_vertical: add support for staggered atmospheric level

The previous commit added an optional 'zlvs' argument to
'icepack_atm_boundary' to allow atmospheric input variables to be given
at different vertical levels.

Also add 'zlvs' as an optional argument to 'icepack_step_therm1', to
make the functionality available via the Icepack interfaces.

* doc: document staggered atmospheric levels

Add an index entry for 'zlvs' and mention it in the 'Atmopshere' section
of the science guide.
* code will write warning message but not abort if
hicen_init(n+1) <= hicen_init(n)
Copy link
Collaborator

@junwang-noaa junwang-noaa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for updating icepack. Is there a plan at Consortium repo to fix the hicen_init issue in the ICs so that we don't need to carry the fix?

@DeniseWorthen
Copy link
Collaborator Author

I can check more directly w/ Tony, but I believe they feel it is a rare error which there is no fix for at this point so trapping it was the best solution. My testing tends to confirm that---I believe it is only our CFSR-derived ICs that gave the error (the 2016-10-03 case) and only at the first timestep. I don't really believe that other failures we see in CICE in the prototypes are related. That is one reason I wanted to be able to implement their fix vs maintaining our original fix. This way it will report in the log if this is happening.

I think our best option at this point is to find a way to have the abort flag set optionally so it isn't hardwired. If we could set that by namelist for example then we could point directly at the top of Icepack.

@junwang-noaa
Copy link
Collaborator

Yes, using namelist variable to control the abort flag would be nice.

@JessicaMeixner-NOAA
Copy link
Collaborator

If it's just the CFSR (and not CPC) ice ICs, could we switch to just using the CPC ice ICs and then revert to the "bail out"?

@DeniseWorthen DeniseWorthen merged commit 9a7e220 into NOAA-EMC:emc/develop Jun 4, 2021
@DeniseWorthen DeniseWorthen deleted the feature/icepack_noabort branch June 24, 2021 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants