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

Helfand Monin-Obukhov derivatives for GEOSldas offline runs #918

Closed
wants to merge 17 commits into from

Conversation

biljanaorescanin
Copy link
Contributor

This PR adds Helfand M-O derivatives needed for GEOSldas offline runs.
Almost all GEOSldas offline runs are run using Louis scheme choice due to the lack of these derivatives for Helfand M-O option. This is not in sink to what AGCM uses which is Helfand always.

Surface layer turbulence scheme
0 : Louis (MERRA, Fortuna-DAS, SMAP NRv4/4.1/5/7.2/8.1/9.1/10.0)
1 : Helfand Monin-Obukhov (Fortuna-AR5, Ganymed, Heracles, Icarus-3_2, MERRA-2)

GEOSagcm=>CHOOSEMOSFC: 1

Derivatives added are:

  1. DSHSBT - derivative of sensible heat flux w.r.t. Tc (ground temperature)
  2. DHSDQA - cross derivative of sensible heat flux w.r.t. Qc (ground humidity)
  3. DEVSBT - derivative of latent heat flux w.r.t. Qc (ground humidity)
  4. DEDTC - cross derivative of latent heat flux w.r.t. Tc (ground temperature)

This PR is NOT zero diff for GEOSldas runs with CHOOSEMOSFC: 1 but is zero diff for AGCM runs.

NOTE: Long test runs are in progress I will update PR once testing is done.

@biljanaorescanin biljanaorescanin added enhancement New feature or request 0 diff The changes in this pull request have verified to be zero-diff with the target branch. labels Mar 28, 2024
@@ -3438,6 +3541,29 @@ subroutine RUN1 ( GC, IMPORT, EXPORT, CLOCK, RC )
CALL helfsurface( UWINDLMTILE,VWINDLMTILE,TA,TC(:,N),QA,QC(:,N),PSL,PSMB,Z0T(:,N),lai, &
Copy link
Contributor

Choose a reason for hiding this comment

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

is this intentional to call this function three times? or it should be
if (incl_HelfandMo_extra_derives ==0) then
call once
else if(incl_HelfandMO_extra_derivs ==1) then
call your addition ( twice)
endif

@@ -3438,6 +3541,29 @@ subroutine RUN1 ( GC, IMPORT, EXPORT, CLOCK, RC )
CALL helfsurface( UWINDLMTILE,VWINDLMTILE,TA,TC(:,N),QA,QC(:,N),PSL,PSMB,Z0T(:,N),lai, &
IWATER,DZE,niter,nt,RHOH,VKH,VKM,USTAR,XX,YY,CU,CT,RIB,ZETA,WS, &
t2m,q2m,u2m,v2m,t10m,q10m,u10m,v10m,u50m,v50m,CHOOSEZ0)

! for helfsurface
if(CATCH_INTERNAL_STATE%CHOOSEMOSFC==1 .and. incl_HelfandMO_extra_derivs ==1) then
Copy link
Contributor

Choose a reason for hiding this comment

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

CATCH_INTERNAL_STATE%CHOOSEMOSFC==1 is redundant here

@weiyuan-jiang
Copy link
Contributor

The crash is due to small_TC which is way to small. TC is around 270. and the smal_tc = 0.0001 is just roundoff error. This eventually leads to NaN of TC and crash. It should work if small_TC=0.1 . But I think the better way is to use relative perturb factor, so each tile has the same perturbation.
small_TC(:) = factor * TC(:)
small_QC(:) = factor* QC(:)

When I choose factor = 0.01, the program has run for 1 year. /gpfsm/dnb34/wjiang/LDAS_exp/model/exp_helfand_sles15_small_factor

@gmao-rreichle
Copy link
Contributor

Replaced with new PR #999

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
0 diff The changes in this pull request have verified to be zero-diff with the target branch. enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants