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

EMC update 20210322 #1357

Merged
merged 42 commits into from
Mar 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
2b7abec
Merge pull request #2 from NOAA-EMC/dev/emc
DeniseWorthen Nov 26, 2019
74f8d11
Merge pull request #4 from NOAA-EMC/dev/emc
DeniseWorthen Dec 6, 2019
fb02b3a
Merge pull request #5 from NOAA-EMC/dev/emc
DeniseWorthen Jan 16, 2020
5927048
Merge pull request #6 from NOAA-EMC/dev/emc
DeniseWorthen Jan 24, 2020
1be1217
Merge pull request #7 from NOAA-EMC/dev/emc
DeniseWorthen Apr 6, 2020
d537911
Merge pull request #9 from NOAA-EMC/dev/emc
DeniseWorthen Apr 9, 2020
58a69fc
Merge pull request #10 from NOAA-EMC/dev/emc
DeniseWorthen Apr 16, 2020
6371e48
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Jul 10, 2020
40bfb4b
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Aug 1, 2020
e4ca1dc
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Aug 6, 2020
4e51bae
Revert "Merge remote-tracking branch 'upstream/dev/emc' into dev/emc"
DeniseWorthen Aug 7, 2020
6164f63
manual add of dev/emc changes (statediagnose)
DeniseWorthen Sep 1, 2020
bfbd95a
white space changes
DeniseWorthen Sep 1, 2020
16ade2f
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Sep 9, 2020
f3bb728
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Oct 19, 2020
a98f7db
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Nov 25, 2020
69b2a23
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Jan 6, 2021
29d7680
Add two halo updates for taux and tauy in mom_surface_forcing_nupoc
Jan 15, 2021
91282c1
add brandon's halo update fix for LI_2016
DeniseWorthen Jan 15, 2021
cec1ad3
Merge pull request #49 from breichl/user/bgr/Tau_halo_updates_in_nupoc
jiandewang Jan 17, 2021
d63c2de
Merge remote-tracking branch 'GFDL/main' into feature/update-to-GFDL-…
jiandewang Jan 21, 2021
b544dad
Merge remote-tracking branch 'upstream/dev/emc' into dev/emc
DeniseWorthen Jan 22, 2021
e928fe2
Merge branch 'dev/emc' into bugfix/li2016fix
DeniseWorthen Jan 22, 2021
66ec49b
Merge remote-tracking branch 'JiandeWang/feature/update-to-GFDL-20210…
DeniseWorthen Jan 22, 2021
e7d0976
Fixes latent heat from fprec and frunoff
gustavo-marques Jan 21, 2021
faeb139
Merge pull request #1 from DeniseWorthen/bugfix/li2016fix
jiandewang Jan 22, 2021
d531a32
Merge pull request #51 from jiandewang/feature/update-to-GFDL-20210120
jiandewang Jan 27, 2021
7db2cc7
make mom mesh optional
DeniseWorthen Jan 28, 2021
13a5a2e
comment out mask check which fails for mx100
DeniseWorthen Jan 28, 2021
12b3895
Merge branch 'dev/emc' into feature/optmesh
DeniseWorthen Jan 29, 2021
a34ebb1
remove tempory bypass of mesh abort code
DeniseWorthen Jan 29, 2021
cdc7690
Merge pull request #54 from DeniseWorthen/feature/optmesh
jiandewang Feb 11, 2021
a729a7f
Merge commit '00c2819457ab6d2497c871ce9a02d5e67e7f741c' into feature/…
jiandewang Feb 25, 2021
00cb11c
Merge pull request #56 from jiandewang/feature/update-to-GFDL-20210224
jiandewang Mar 4, 2021
a4049e7
Merge branch 'dev/gfdl' into main
marshallward Mar 8, 2021
3703ca7
Merge remote-tracking branch 'GFDL/main' into feature/update-to-GFDL-…
jiandewang Mar 8, 2021
5b686c8
add parameter for allowing land mask changes
DeniseWorthen Mar 10, 2021
8494ba8
change logical from "topog_..." to "topo_..."
DeniseWorthen Mar 10, 2021
e5a4035
Merge pull request #61 from jiandewang/feature/update-to-GFDL-20210308
jiandewang Mar 13, 2021
b89152c
Merge branch 'dev/emc' into feature/allowmaskchanges
DeniseWorthen Mar 14, 2021
a1206ed
Merge branch 'dev/gfdl' into emc_update_20210322
marshallward Mar 23, 2021
8cc5018
Style: Line length fix in MCT_cap
marshallward Mar 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions config_src/drivers/mct_cap/mom_surface_forcing_mct.F90
Original file line number Diff line number Diff line change
Expand Up @@ -486,17 +486,18 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,

! latent heat flux (W/m^2)
fluxes%latent(i,j) = 0.0
! contribution from frozen ppt
! contribution from frozen ppt (notice minus sign since fprec is positive into the ocean)
if (associated(IOB%fprec)) then
fluxes%latent(i,j) = fluxes%latent(i,j) + &
fluxes%latent(i,j) = fluxes%latent(i,j) - &
IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_fprec_diag(i,j) = G%mask2dT(i,j) * IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_fprec_diag(i,j) = - G%mask2dT(i,j) * IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
endif
! contribution from frozen runoff
! contribution from frozen runoff (notice minus sign since rofi_flux is positive into the ocean)
if (associated(fluxes%frunoff)) then
fluxes%latent(i,j) = fluxes%latent(i,j) + &
fluxes%latent(i,j) = fluxes%latent(i,j) - &
IOB%rofi_flux(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_frunoff_diag(i,j) = G%mask2dT(i,j) * IOB%rofi_flux(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_frunoff_diag(i,j) = -G%mask2dT(i,j) &
* IOB%rofi_flux(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
endif
! contribution from evaporation
if (associated(IOB%q_flux)) then
Expand Down
23 changes: 22 additions & 1 deletion config_src/drivers/nuopc_cap/mom_cap.F90
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ module MOM_cap_mod
use ESMF, only: ESMF_AlarmCreate, ESMF_ClockGetAlarmList, ESMF_AlarmList_Flag
use ESMF, only: ESMF_AlarmGet, ESMF_AlarmIsCreated, ESMF_ALARMLIST_ALL, ESMF_AlarmIsEnabled
use ESMF, only: ESMF_STATEITEM_NOTFOUND, ESMF_FieldWrite
use ESMF, only: ESMF_END_ABORT, ESMF_Finalize
use ESMF, only: operator(==), operator(/=), operator(+), operator(-)

! TODO ESMF_GridCompGetInternalState does not have an explicit Fortran interface.
Expand Down Expand Up @@ -135,6 +136,7 @@ module MOM_cap_mod
logical :: profile_memory = .true.
logical :: grid_attach_area = .false.
logical :: use_coldstart = .true.
logical :: use_mommesh = .false.
character(len=128) :: scalar_field_name = ''
integer :: scalar_field_count = 0
integer :: scalar_field_idx_grid_nx = 0
Expand All @@ -147,7 +149,7 @@ module MOM_cap_mod
type(ESMF_GeomType_Flag) :: geomtype = ESMF_GEOMTYPE_MESH
#else
logical :: cesm_coupled = .false.
type(ESMF_GeomType_Flag) :: geomtype = ESMF_GEOMTYPE_GRID
type(ESMF_GeomType_Flag) :: geomtype
#endif
character(len=8) :: restart_mode = 'alarms'

Expand Down Expand Up @@ -347,6 +349,25 @@ subroutine InitializeP0(gcomp, importState, exportState, clock, rc)
write(logmsg,*) use_coldstart
call ESMF_LogWrite('MOM_cap:use_coldstart = '//trim(logmsg), ESMF_LOGMSG_INFO)

use_mommesh = .false.
call NUOPC_CompAttributeGet(gcomp, name="use_mommesh", value=value, &
isPresent=isPresent, isSet=isSet, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
if (isPresent .and. isSet) use_mommesh=(trim(value)=="true")
write(logmsg,*) use_mommesh
call ESMF_LogWrite('MOM_cap:use_mommesh = '//trim(logmsg), ESMF_LOGMSG_INFO)

if(use_mommesh)then
geomtype = ESMF_GEOMTYPE_MESH
call NUOPC_CompAttributeGet(gcomp, name='mesh_ocn', isPresent=isPresent, isSet=isSet, rc=rc)
if (.not. isPresent .and. .not. isSet) then
call ESMF_LogWrite('geomtype set to mesh but mesh_ocn is not specified', ESMF_LOGMSG_INFO)
call ESMF_Finalize(endflag=ESMF_END_ABORT)
endif
else
geomtype = ESMF_GEOMTYPE_GRID
endif

end subroutine

!> Called by NUOPC to advertise import and export fields. "Advertise"
Expand Down
14 changes: 8 additions & 6 deletions config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90
Original file line number Diff line number Diff line change
Expand Up @@ -497,15 +497,17 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
fluxes%seaice_melt(i,j) = kg_m2_s_conversion * G%mask2dT(i,j) * IOB%seaice_melt(i-i0,j-j0)

fluxes%latent(i,j) = 0.0
! notice minus sign since fprec is positive into the ocean
if (associated(IOB%fprec)) then
fluxes%latent(i,j) = fluxes%latent(i,j) + &
fluxes%latent(i,j) = fluxes%latent(i,j) - &
IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_fprec_diag(i,j) = G%mask2dT(i,j) * IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
fluxes%latent_fprec_diag(i,j) = - G%mask2dT(i,j) * IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
endif
! notice minus sign since frunoff is positive into the ocean
if (associated(IOB%frunoff)) then
fluxes%latent(i,j) = fluxes%latent(i,j) + &
fluxes%latent(i,j) = fluxes%latent(i,j) - &
IOB%frunoff(i-i0,j-j0) * US%W_m2_to_QRZ_T * CS%latent_heat_fusion
fluxes%latent_frunoff_diag(i,j) = G%mask2dT(i,j) * &
fluxes%latent_frunoff_diag(i,j) = - G%mask2dT(i,j) * &
IOB%frunoff(i-i0,j-j0) * US%W_m2_to_QRZ_T * CS%latent_heat_fusion
endif
if (associated(IOB%q_flux)) then
Expand Down Expand Up @@ -794,7 +796,7 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS)
endif
forces%ustar(i,j) = sqrt(gustiness*Irho0 + Irho0*tau_mag)
enddo ; enddo

call pass_vector(forces%taux, forces%tauy, G%Domain, halo=1)
elseif (wind_stagger == AGRID) then
call pass_vector(taux_at_h, tauy_at_h, G%Domain, To_All+Omit_Corners, stagger=AGRID, halo=1)

Expand All @@ -820,7 +822,7 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS)
forces%ustar(i,j) = sqrt(gustiness*Irho0 + Irho0 * G%mask2dT(i,j) * &
sqrt(taux_at_h(i,j)**2 + tauy_at_h(i,j)**2))
enddo ; enddo

call pass_vector(forces%taux, forces%tauy, G%Domain, halo=1)
else ! C-grid wind stresses.
if (G%symmetric) &
call fill_symmetric_edges(forces%taux, forces%tauy, G%Domain)
Expand Down
14 changes: 12 additions & 2 deletions src/initialization/MOM_shared_initialization.F90
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ subroutine apply_topography_edits_from_file(D, G, param_file, US)
character(len=40) :: mdl = "apply_topography_edits_from_file" ! This subroutine's name.
integer :: i, j, n, ncid, n_edits, i_file, j_file, ndims, sizes(8)
logical :: found
logical :: topo_edits_change_mask

call callTree_enter(trim(mdl)//"(), MOM_shared_initialization.F90")

Expand All @@ -206,6 +207,9 @@ subroutine apply_topography_edits_from_file(D, G, param_file, US)
call get_param(param_file, mdl, "TOPO_EDITS_FILE", topo_edits_file, &
"The file from which to read a list of i,j,z topography overrides.", &
default="")
call get_param(param_file, mdl, "ALLOW_LANDMASK_CHANGES", topo_edits_change_mask, &
"If true, allow topography overrides to change land mask.", &
default=.false.)

if (len_trim(topo_edits_file)==0) return

Expand Down Expand Up @@ -250,8 +254,14 @@ subroutine apply_topography_edits_from_file(D, G, param_file, US)
'Ocean topography edit: ', n, ig(n), jg(n), D(i,j)/m_to_Z, '->', abs(new_depth(n)), i, j
D(i,j) = abs(m_to_Z*new_depth(n)) ! Allows for height-file edits (i.e. converts negatives)
else
call MOM_error(FATAL, trim(mdl)//': A zero depth edit would change the land mask and '//&
"is not allowed in"//trim(topo_edits_file))
if (topo_edits_change_mask) then
write(stdout,'(a,3i5,f8.2,a,f8.2,2i4)') &
'Ocean topography edit: ',n,ig(n),jg(n),D(i,j)/m_to_Z,'->',abs(new_depth(n)),i,j
D(i,j) = abs(m_to_Z*new_depth(n)) ! Allows for height-file edits (i.e. converts negatives)
else
call MOM_error(FATAL, ' apply_topography_edits_from_file: '//&
"A zero depth edit would change the land mask and is not allowed in"//trim(topo_edits_file))
endif
endif
endif
enddo
Expand Down