Skip to content

Commit 85023f8

Browse files
committed
Merge remote-tracking branch 'upstream/dev/emc' into ocn_stoch
2 parents 80f9f44 + d531a32 commit 85023f8

11 files changed

Lines changed: 121 additions & 163 deletions

config_src/coupled_driver/MOM_surface_forcing_gfdl.F90

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -189,20 +189,13 @@ module MOM_surface_forcing_gfdl
189189
!! ice-shelves, expressed as a coefficient
190190
!! for divergence damping, as determined
191191
!! outside of the ocean model [m3 s-1]
192-
real, pointer, dimension(:,:) :: ustk0 => NULL() !<
193-
real, pointer, dimension(:,:) :: vstk0 => NULL() !<
194-
real, pointer, dimension(:) :: stk_wavenumbers => NULL() !<
195-
real, pointer, dimension(:,:,:) :: ustkb => NULL() !<
196-
real, pointer, dimension(:,:,:) :: vstkb => NULL() !<
197-
198192
integer :: xtype !< The type of the exchange - REGRID, REDIST or DIRECT
199193
type(coupler_2d_bc_type) :: fluxes !< A structure that may contain an array of named fields
200194
!! used for passive tracer fluxes.
201195
integer :: wind_stagger = -999 !< A flag indicating the spatial discretization of wind stresses.
202196
!! This flag may be set by the flux-exchange code, based on what
203197
!! the sea-ice model is providing. Otherwise, the value from
204198
!! the surface_forcing_CS is used.
205-
integer :: num_stk_bands !< Number of Stokes drift bands passed through the coupler
206199
end type ice_ocean_boundary_type
207200

208201
integer :: id_clock_forcing !< A CPU time clock
@@ -684,7 +677,7 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS, dt_
684677
real :: mass_eff ! effective mass of sea ice for rigidity [R Z ~> kg m-2]
685678
real :: wt1, wt2 ! Relative weights of previous and current values of ustar, ND.
686679

687-
integer :: i, j, is, ie, js, je, Isq, Ieq, Jsq, Jeq, i0, j0, istk
680+
integer :: i, j, is, ie, js, je, Isq, Ieq, Jsq, Jeq, i0, j0
688681
integer :: isd, ied, jsd, jed, IsdB, IedB, JsdB, JedB, isr, ier, jsr, jer
689682
integer :: isc_bnd, iec_bnd, jsc_bnd, jec_bnd
690683

@@ -725,9 +718,6 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS, dt_
725718
(associated(IOB%mass_berg) .and. (.not. associated(forces%mass_berg))) ) &
726719
call allocate_mech_forcing(G, forces, iceberg=.true.)
727720

728-
if ( associated(IOB%ustk0) ) &
729-
call allocate_mech_forcing(G, forces, waves=.true., num_stk_bands=IOB%num_stk_bands)
730-
731721
if (associated(IOB%ice_rigidity)) then
732722
rigidity_at_h(:,:) = 0.0
733723
call safe_alloc_ptr(forces%rigidity_ice_u,IsdB,IedB,jsd,jed)
@@ -787,19 +777,6 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS, dt_
787777
forces%ustar(i,j) = wt1*forces%ustar(i,j) + wt2*ustar_tmp(i,j)
788778
enddo ; enddo
789779
endif
790-
forces%stk_wavenumbers(:) = IOB%stk_wavenumbers
791-
do j=js,je; do i=is,ie
792-
forces%ustk0(i,j) = IOB%ustk0(i-I0,j-J0) ! How to be careful here that the domains are right?
793-
forces%vstk0(i,j) = IOB%vstk0(i-I0,j-J0)
794-
enddo ; enddo
795-
call pass_vector(forces%ustk0,forces%vstk0, G%domain )
796-
do istk = 1,IOB%num_stk_bands
797-
do j=js,je; do i=is,ie
798-
forces%ustkb(i,j,istk) = IOB%ustkb(i-I0,j-J0,istk)
799-
forces%vstkb(i,j,istk) = IOB%vstkb(i-I0,j-J0,istk)
800-
enddo; enddo
801-
call pass_vector(forces%ustkb(:,:,istk),forces%vstkb(:,:,istk), G%domain )
802-
enddo
803780

804781
! Find the net mass source in the input forcing without other adjustments.
805782
if (CS%approx_net_mass_src .and. associated(forces%net_mass_src)) then

config_src/coupled_driver/ocean_model_MOM.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ subroutine update_ocean_model(Ice_ocean_boundary, OS, Ocean_sfc, time_start_upda
566566
! For now, the waves are only updated on the thermodynamics steps, because that is where
567567
! the wave intensities are actually used to drive mixing. At some point, the wave updates
568568
! might also need to become a part of the ocean dynamics, according to B. Reichl.
569-
call Update_Surface_Waves(OS%grid, OS%GV, OS%US, OS%time, ocean_coupling_time_step, OS%waves, OS%forces)
569+
call Update_Surface_Waves(OS%grid, OS%GV, OS%US, OS%time, ocean_coupling_time_step, OS%waves)
570570
endif
571571

572572
if ((OS%nstep==0) .and. (OS%nstep_thermo==0)) then ! This is the first call to update_ocean_model.

config_src/mct_driver/mom_surface_forcing_mct.F90

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -486,17 +486,17 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
486486

487487
! latent heat flux (W/m^2)
488488
fluxes%latent(i,j) = 0.0
489-
! contribution from frozen ppt
489+
! contribution from frozen ppt (notice minus sign since fprec is positive into the ocean)
490490
if (associated(IOB%fprec)) then
491-
fluxes%latent(i,j) = fluxes%latent(i,j) + &
491+
fluxes%latent(i,j) = fluxes%latent(i,j) - &
492492
IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
493-
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
493+
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
494494
endif
495-
! contribution from frozen runoff
495+
! contribution from frozen runoff (notice minus sign since rofi_flux is positive into the ocean)
496496
if (associated(fluxes%frunoff)) then
497-
fluxes%latent(i,j) = fluxes%latent(i,j) + &
497+
fluxes%latent(i,j) = fluxes%latent(i,j) - &
498498
IOB%rofi_flux(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
499-
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
499+
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
500500
endif
501501
! contribution from evaporation
502502
if (associated(IOB%q_flux)) then

config_src/nuopc_driver/mom_cap.F90

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module MOM_cap_mod
3636
use MOM_ocean_model_nuopc, only: get_ocean_grid, get_eps_omesh
3737
use MOM_cap_time, only: AlarmInit
3838
use MOM_cap_methods, only: mom_import, mom_export, mom_set_geomtype, state_diagnose
39+
use MOM_cap_methods, only: ChkErr
3940
#ifdef CESMCOUPLED
4041
use shr_file_mod, only: shr_file_setLogUnit, shr_file_getLogUnit
4142
#endif
@@ -2060,18 +2061,6 @@ subroutine shr_file_getLogUnit(nunit)
20602061
end subroutine shr_file_getLogUnit
20612062
#endif
20622063

2063-
logical function chkerr(rc, line, file)
2064-
integer, intent(in) :: rc
2065-
integer, intent(in) :: line
2066-
character(len=*), intent(in) :: file
2067-
integer :: lrc
2068-
chkerr = .false.
2069-
lrc = rc
2070-
if (ESMF_LogFoundError(rcToCheck=lrc, msg=ESMF_LOGERR_PASSTHRU, line=line, file=file)) then
2071-
chkerr = .true.
2072-
endif
2073-
end function chkerr
2074-
20752064
!>
20762065
!! @page nuopc_cap NUOPC Cap
20772066
!! @author Fei Liu (fei.liu@gmail.com)

config_src/nuopc_driver/mom_cap_methods.F90

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ module MOM_cap_methods
3030
public :: mom_import
3131
public :: mom_export
3232
public :: state_diagnose
33+
public :: ChkErr
3334

3435
private :: State_getImport
3536
private :: State_setExport
@@ -251,9 +252,9 @@ subroutine mom_import(ocean_public, ocean_grid, importState, ice_ocean_boundary,
251252

252253

253254
!----
254-
! Partitioned Stokes Drift Components
255+
! Partitioned Stokes Drift Components
255256
!----
256-
if ( associated(ice_ocean_boundary%ustkb) ) then
257+
if ( associated(ice_ocean_boundary%ustkb) ) then
257258
allocate(stkx1(isc:iec,jsc:jec))
258259
allocate(stky1(isc:iec,jsc:jec))
259260
allocate(stkx2(isc:iec,jsc:jec))
@@ -765,15 +766,18 @@ subroutine State_SetExport(state, fldname, isc, iec, jsc, jec, input, ocean_grid
765766

766767
end subroutine State_SetExport
767768

769+
!> This subroutine writes the minimum, maximum and sum of each field
770+
!! contained within an ESMF state.
768771
subroutine state_diagnose(State, string, rc)
769772

770773
! ----------------------------------------------
771774
! Diagnose status of State
772775
! ----------------------------------------------
773776

774-
type(ESMF_State), intent(in) :: state
775-
character(len=*), intent(in) :: string
776-
integer , intent(out) :: rc
777+
type(ESMF_State), intent(in) :: state !< An ESMF State
778+
character(len=*), intent(in) :: string !< A string indicating whether the State is an
779+
!! import or export State
780+
integer , intent(out) :: rc !< Return code
777781

778782
! local variables
779783
integer :: i,j,n
@@ -787,19 +791,19 @@ subroutine state_diagnose(State, string, rc)
787791
! ----------------------------------------------
788792

789793
call ESMF_StateGet(state, itemCount=fieldCount, rc=rc)
790-
if (chkerr(rc,__LINE__,u_FILE_u)) return
794+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
791795
allocate(lfieldnamelist(fieldCount))
792796

793797
call ESMF_StateGet(state, itemNameList=lfieldnamelist, rc=rc)
794-
if (chkerr(rc,__LINE__,u_FILE_u)) return
798+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
795799

796800
do n = 1, fieldCount
797801

798802
call ESMF_StateGet(state, itemName=lfieldnamelist(n), field=lfield, rc=rc)
799-
if (chkerr(rc,__LINE__,u_FILE_u)) return
803+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
800804

801805
call field_getfldptr(lfield, fldptr1=dataPtr1d, fldptr2=dataPtr2d, rank=lrank, rc=rc)
802-
if (chkerr(rc,__LINE__,u_FILE_u)) return
806+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
803807

804808
if (lrank == 0) then
805809
! no local data
@@ -829,23 +833,16 @@ subroutine state_diagnose(State, string, rc)
829833

830834
end subroutine state_diagnose
831835

832-
!===============================================================================
833-
836+
!> Obtain a pointer to a rank 1 or rank 2 ESMF field
834837
subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
835838

836-
! ----------------------------------------------
837-
! for a field, determine rank and return fldptr1 or fldptr2
838-
! abort is true by default and will abort if fldptr is not yet allocated in field
839-
! rank returns 0, 1, or 2. 0 means fldptr not allocated and abort=false
840-
! ----------------------------------------------
841-
842839
! input/output variables
843-
type(ESMF_Field) , intent(in) :: field
844-
real(ESMF_KIND_R8), pointer , intent(inout), optional :: fldptr1(:)
845-
real(ESMF_KIND_R8), pointer , intent(inout), optional :: fldptr2(:,:)
846-
integer , intent(out) , optional :: rank
847-
logical , intent(in) , optional :: abort
848-
integer , intent(out) , optional :: rc
840+
type(ESMF_Field) , intent(in) :: field !< An ESMF field
841+
real(ESMF_KIND_R8), pointer , intent(inout), optional :: fldptr1(:) !< A pointer to a rank 1 ESMF field
842+
real(ESMF_KIND_R8), pointer , intent(inout), optional :: fldptr2(:,:) !< A pointer to a rank 2 ESMF field
843+
integer , intent(out) , optional :: rank !< Field rank
844+
logical , intent(in) , optional :: abort !< Abort code
845+
integer , intent(out) , optional :: rc !< Return code
849846

850847
! local variables
851848
type(ESMF_GeomType_Flag) :: geomtype
@@ -872,7 +869,7 @@ subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
872869
lrank = -99
873870

874871
call ESMF_FieldGet(field, status=status, rc=rc)
875-
if (chkerr(rc,__LINE__,u_FILE_u)) return
872+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
876873

877874
if (status /= ESMF_FIELDSTATUS_COMPLETE) then
878875
lrank = 0
@@ -886,20 +883,20 @@ subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
886883
else
887884

888885
call ESMF_FieldGet(field, geomtype=geomtype, rc=rc)
889-
if (chkerr(rc,__LINE__,u_FILE_u)) return
886+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
890887

891888
if (geomtype == ESMF_GEOMTYPE_GRID) then
892889
call ESMF_FieldGet(field, rank=lrank, rc=rc)
893-
if (chkerr(rc,__LINE__,u_FILE_u)) return
890+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
894891
elseif (geomtype == ESMF_GEOMTYPE_MESH) then
895892
call ESMF_FieldGet(field, rank=lrank, rc=rc)
896-
if (chkerr(rc,__LINE__,u_FILE_u)) return
893+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
897894
call ESMF_FieldGet(field, mesh=lmesh, rc=rc)
898-
if (chkerr(rc,__LINE__,u_FILE_u)) return
895+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
899896
call ESMF_MeshGet(lmesh, numOwnedNodes=nnodes, numOwnedElements=nelements, rc=rc)
900-
if (chkerr(rc,__LINE__,u_FILE_u)) return
897+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
901898
if (nnodes == 0 .and. nelements == 0) lrank = 0
902-
else
899+
else
903900
call ESMF_LogWrite(trim(subname)//": ERROR geomtype not supported ", &
904901
ESMF_LOGMSG_INFO)
905902
rc = ESMF_FAILURE
@@ -917,7 +914,7 @@ subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
917914
return
918915
endif
919916
call ESMF_FieldGet(field, farrayPtr=fldptr1, rc=rc)
920-
if (chkerr(rc,__LINE__,u_FILE_u)) return
917+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
921918
elseif (lrank == 2) then
922919
if (.not.present(fldptr2)) then
923920
call ESMF_LogWrite(trim(subname)//": ERROR missing rank=2 array ", &
@@ -926,7 +923,7 @@ subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
926923
return
927924
endif
928925
call ESMF_FieldGet(field, farrayPtr=fldptr2, rc=rc)
929-
if (chkerr(rc,__LINE__,u_FILE_u)) return
926+
if (ChkErr(rc,__LINE__,u_FILE_u)) return
930927
else
931928
call ESMF_LogWrite(trim(subname)//": ERROR in rank ", &
932929
ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u)
@@ -942,16 +939,17 @@ subroutine field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc)
942939

943940
end subroutine field_getfldptr
944941

945-
logical function chkerr(rc, line, file)
946-
integer, intent(in) :: rc
947-
integer, intent(in) :: line
948-
character(len=*), intent(in) :: file
942+
!> Returns true if ESMF_LogFoundError() determines that rc is an error code. Otherwise false.
943+
logical function ChkErr(rc, line, file)
944+
integer, intent(in) :: rc !< return code to check
945+
integer, intent(in) :: line !< Integer source line number
946+
character(len=*), intent(in) :: file !< User-provided source file name
949947
integer :: lrc
950-
chkerr = .false.
948+
ChkErr = .false.
951949
lrc = rc
952950
if (ESMF_LogFoundError(rcToCheck=lrc, msg=ESMF_LOGERR_PASSTHRU, line=line, file=file)) then
953-
chkerr = .true.
951+
ChkErr = .true.
954952
endif
955-
end function chkerr
953+
end function ChkErr
956954

957955
end module MOM_cap_methods

config_src/nuopc_driver/mom_cap_time.F90

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module MOM_cap_time
1616
use ESMF , only : ESMF_RC_ARG_BAD
1717
use ESMF , only : operator(<), operator(/=), operator(+), operator(-), operator(*) , operator(>=)
1818
use ESMF , only : operator(<=), operator(>), operator(==)
19+
use MOM_cap_methods , only : ChkErr
1920

2021
implicit none; private
2122

@@ -336,16 +337,4 @@ subroutine date2ymd (date, year, month, day)
336337

337338
end subroutine date2ymd
338339

339-
logical function chkerr(rc, line, file)
340-
integer, intent(in) :: rc
341-
integer, intent(in) :: line
342-
character(len=*), intent(in) :: file
343-
integer :: lrc
344-
chkerr = .false.
345-
lrc = rc
346-
if (ESMF_LogFoundError(rcToCheck=lrc, msg=ESMF_LOGERR_PASSTHRU, line=line, file=file)) then
347-
chkerr = .true.
348-
endif
349-
end function chkerr
350-
351340
end module MOM_cap_time

config_src/nuopc_driver/mom_surface_forcing_nuopc.F90

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,15 @@ module MOM_surface_forcing_nuopc
183183
!! ice-shelves, expressed as a coefficient
184184
!! for divergence damping, as determined
185185
!! outside of the ocean model in [m3/s]
186-
real, pointer, dimension(:,:) :: ustk0 => NULL() !<
187-
real, pointer, dimension(:,:) :: vstk0 => NULL() !<
188-
real, pointer, dimension(:) :: stk_wavenumbers => NULL() !<
189-
real, pointer, dimension(:,:,:) :: ustkb => NULL() !<
190-
real, pointer, dimension(:,:,:) :: vstkb => NULL() !<
186+
real, pointer, dimension(:,:) :: ustk0 => NULL() !< Surface Stokes drift, zonal [m/s]
187+
real, pointer, dimension(:,:) :: vstk0 => NULL() !< Surface Stokes drift, meridional [m/s]
188+
real, pointer, dimension(:) :: stk_wavenumbers => NULL() !< The central wave number of Stokes bands [rad/m]
189+
real, pointer, dimension(:,:,:) :: ustkb => NULL() !< Stokes Drift spectrum, zonal [m/s]
190+
!! Horizontal - u points
191+
!! 3rd dimension - wavenumber
192+
real, pointer, dimension(:,:,:) :: vstkb => NULL() !< Stokes Drift spectrum, meridional [m/s]
193+
!! Horizontal - v points
194+
!! 3rd dimension - wavenumber
191195
integer :: num_stk_bands !< Number of Stokes drift bands passed through the coupler
192196
integer :: xtype !< The type of the exchange - REGRID, REDIST or DIRECT
193197
type(coupler_2d_bc_type) :: fluxes !< A structure that may contain an array of
@@ -493,15 +497,17 @@ subroutine convert_IOB_to_fluxes(IOB, fluxes, index_bounds, Time, valid_time, G,
493497
fluxes%seaice_melt(i,j) = kg_m2_s_conversion * G%mask2dT(i,j) * IOB%seaice_melt(i-i0,j-j0)
494498

495499
fluxes%latent(i,j) = 0.0
500+
! notice minus sign since fprec is positive into the ocean
496501
if (associated(IOB%fprec)) then
497-
fluxes%latent(i,j) = fluxes%latent(i,j) + &
502+
fluxes%latent(i,j) = fluxes%latent(i,j) - &
498503
IOB%fprec(i-i0,j-j0)*US%W_m2_to_QRZ_T*CS%latent_heat_fusion
499-
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
504+
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
500505
endif
506+
! notice minus sign since frunoff is positive into the ocean
501507
if (associated(IOB%frunoff)) then
502-
fluxes%latent(i,j) = fluxes%latent(i,j) + &
508+
fluxes%latent(i,j) = fluxes%latent(i,j) - &
503509
IOB%frunoff(i-i0,j-j0) * US%W_m2_to_QRZ_T * CS%latent_heat_fusion
504-
fluxes%latent_frunoff_diag(i,j) = G%mask2dT(i,j) * &
510+
fluxes%latent_frunoff_diag(i,j) = - G%mask2dT(i,j) * &
505511
IOB%frunoff(i-i0,j-j0) * US%W_m2_to_QRZ_T * CS%latent_heat_fusion
506512
endif
507513
if (associated(IOB%q_flux)) then
@@ -858,7 +864,7 @@ subroutine convert_IOB_to_forces(IOB, forces, index_bounds, Time, G, US, CS)
858864
enddo; enddo
859865
call pass_vector(forces%ustkb(:,:,istk),forces%vstkb(:,:,istk), G%domain )
860866
enddo
861-
endif
867+
endif
862868

863869
! sea ice related dynamic fields
864870
if (associated(IOB%ice_rigidity)) then

config_src/nuopc_driver/time_utils.F90

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module time_utils_mod
1414
use ESMF, only: ESMF_Time, ESMF_TimeGet, ESMF_LogFoundError
1515
use ESMF, only: ESMF_LOGERR_PASSTHRU,ESMF_TimeInterval
1616
use ESMF, only: ESMF_TimeIntervalGet, ESMF_TimeSet, ESMF_SUCCESS
17+
use MOM_cap_methods, only: ChkErr
1718

1819
implicit none; private
1920

@@ -160,16 +161,4 @@ function string_to_date(string, rc)
160161

161162
end function string_to_date
162163

163-
logical function chkerr(rc, line, file)
164-
integer, intent(in) :: rc
165-
integer, intent(in) :: line
166-
character(len=*), intent(in) :: file
167-
integer :: lrc
168-
chkerr = .false.
169-
lrc = rc
170-
if (ESMF_LogFoundError(rcToCheck=lrc, msg=ESMF_LOGERR_PASSTHRU, line=line, file=file)) then
171-
chkerr = .true.
172-
endif
173-
end function chkerr
174-
175164
end module time_utils_mod

0 commit comments

Comments
 (0)