diff --git a/.github/workflows/srt.yml b/.github/workflows/srt.yml
index efec7ba8..95f7bbcd 100644
--- a/.github/workflows/srt.yml
+++ b/.github/workflows/srt.yml
@@ -172,6 +172,6 @@ jobs:
popd
# the following can be used by developers to login to the github server in case of errors
# see https://github.com/marketplace/actions/debugging-with-tmate for further details
- - name: Setup tmate session
- if: ${{ failure() }}
- uses: mxschmitt/action-tmate@v3
+# - name: Setup tmate session
+# if: ${{ failure() }}
+# uses: mxschmitt/action-tmate@v3
diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index 33add8b2..0d06f235 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -1986,15 +1986,15 @@
https://www.unidata.ucar.edu/software/netcdf/docs/data_type.html
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
- 64bit_offset
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
+ 64bit_data
@@ -2412,6 +2412,19 @@
+
+
+
+
+
+ char
+
+ case_git
+ env_build.xml
+ Remote git repository used for this case
+
+
+
diff --git a/cime_config/config_component_cesm.xml b/cime_config/config_component_cesm.xml
index 4dd12e1e..a45383f8 100644
--- a/cime_config/config_component_cesm.xml
+++ b/cime_config/config_component_cesm.xml
@@ -109,8 +109,8 @@
none
CO2A
CO2A
- CO2A
- CO2A
+ CO2A
+ CO2A
CO2A
CO2A
CO2C
@@ -236,15 +236,12 @@
- 24
24
24
- 24
- 144
24
24
24
@@ -330,11 +327,6 @@
24
24
- 1
- 24
- 24
- 48
- 48
1
24
@@ -386,7 +378,6 @@
integer
8
- 1
$ATM_NCPL
$ATM_NCPL
$ATM_NCPL
@@ -475,11 +466,8 @@
TIGHT
OPTION2
- OPTION2
OPTION1
OPTION1
- OPTION1
- OPTION1
OPTION2
OPTION2
OPTION2
@@ -555,8 +543,7 @@
284.7
367.0
- 284.317
- 284.7
+ 284.317
run_co2
env_run.xml
diff --git a/cime_config/namelist_definition_drv.xml b/cime_config/namelist_definition_drv.xml
index 2c191d4b..47c7a830 100644
--- a/cime_config/namelist_definition_drv.xml
+++ b/cime_config/namelist_definition_drv.xml
@@ -943,7 +943,8 @@
default: ogrid
- ogrid
+ xgrid
+ ogrid
diff --git a/mediator/esmFldsExchange_cesm_mod.F90 b/mediator/esmFldsExchange_cesm_mod.F90
index c9812759..3f76a50f 100644
--- a/mediator/esmFldsExchange_cesm_mod.F90
+++ b/mediator/esmFldsExchange_cesm_mod.F90
@@ -2202,6 +2202,7 @@ subroutine esmFldsExchange_cesm(gcomp, phase, rc)
! ---------------------------------------------------------------------
! to ocn: enthalpy from atm rain, snow, evaporation
! to ocn: enthalpy from liquid and ice river runoff
+ ! to ocn: enthalpy from liquid and ice glacier runoff
! to ocn: enthalpy from ice melt
! ---------------------------------------------------------------------
! Note - do not need to add addmap or addmrg for the following since they
@@ -2213,23 +2214,8 @@ subroutine esmFldsExchange_cesm(gcomp, phase, rc)
call addfld_to(compocn, 'Foxx_hcond')
call addfld_to(compocn, 'Foxx_hrofl')
call addfld_to(compocn, 'Foxx_hrofi')
-
- call addfld_from(compatm, 'Faxa_hrain')
- call addfld_from(compatm, 'Faxa_hsnow')
- call addfld_from(compatm, 'Faxa_hevap')
- else
- if ( fldchk(is_local%wrap%FBImp(compatm,compatm), 'Faxa_hrain', rc=rc)) then
- ! fldchk(is_local%wrap%FBExp(compocn) , 'Foxx_hrain', rc=rc)) then
- call addmap_from(compatm, 'Faxa_hrain', compocn, mapconsf, 'one', atm2ocn_map)
- end if
- if ( fldchk(is_local%wrap%FBImp(compatm,compatm), 'Faxa_hsnow', rc=rc)) then
- ! fldchk(is_local%wrap%FBExp(compocn) , 'Foxx_hsnow', rc=rc)) then
- call addmap_from(compatm, 'Faxa_hsnow', compocn, mapconsf, 'one', atm2ocn_map)
- end if
- if ( fldchk(is_local%wrap%FBImp(compatm,compatm), 'Faxa_hevap', rc=rc)) then
- ! fldchk(is_local%wrap%FBExp(compocn) , 'Foxx_hevap', rc=rc)) then
- call addmap_from(compatm, 'Faxa_hevap', compocn, mapconsf, 'one', atm2ocn_map)
- end if
+ call addfld_to(compocn, 'Foxx_hrofl_glc')
+ call addfld_to(compocn, 'Foxx_hrofi_glc')
end if
! ---------------------------------------------------------------------
diff --git a/mediator/fd_cesm.yaml b/mediator/fd_cesm.yaml
index ea864e92..7985059e 100644
--- a/mediator/fd_cesm.yaml
+++ b/mediator/fd_cesm.yaml
@@ -1065,6 +1065,16 @@
canonical_units: W m-2
description: med export to ocn heat content of ice runoff
#
+ - standard_name: Foxx_hrofl_glc
+ alias: heat_content_rofl_glc
+ canonical_units: W m-2
+ description: med export to ocn heat content of liquid glc runoff
+ #
+ - standard_name: Foxx_hrofi_glc
+ alias: heat_content_rofi_glc
+ canonical_units: W m-2
+ description: med export to ocn heat content of ice glc runoff
+ #
- standard_name: Foxx_evap
alias: mean_evap_rate
canonical_units: kg m-2 s-1
diff --git a/mediator/med.F90 b/mediator/med.F90
index 74c83282..a038570f 100644
--- a/mediator/med.F90
+++ b/mediator/med.F90
@@ -2173,14 +2173,13 @@ subroutine DataInitialize(gcomp, rc)
end if
is_local%wrap%nx(n1) = nint(real_nx)
is_local%wrap%ny(n1) = nint(real_ny)
- endif
- if (is_local%wrap%comp_present(n1)) then
+
write(msgString,'(3i8)') is_local%wrap%nx(n1), is_local%wrap%ny(n1), is_local%wrap%ntile(n1)
+ call ESMF_LogWrite(trim(subname)//":"//trim(compname(n1))//":"//trim(msgString), ESMF_LOGMSG_INFO)
if (maintask) then
write(logunit,'(a)') 'global nx,ny,ntile sizes for '//trim(compname(n1))//":"//trim(msgString)
end if
- call ESMF_LogWrite(trim(subname)//":"//trim(compname(n1))//":"//trim(msgString), ESMF_LOGMSG_INFO)
- endif
+ end if
end do
if (maintask) write(logunit,*)
diff --git a/mediator/med_diag_mod.F90 b/mediator/med_diag_mod.F90
index 1617ca73..bbacce3e 100644
--- a/mediator/med_diag_mod.F90
+++ b/mediator/med_diag_mod.F90
@@ -151,6 +151,8 @@ module med_diag_mod
integer :: f_heat_cond = unset_index ! heat : heat content of evaporation
integer :: f_heat_rofl = unset_index ! heat : heat content of liquid runoff
integer :: f_heat_rofi = unset_index ! heat : heat content of ice runoff
+ integer :: f_heat_rofl_glc = unset_index ! heat : heat content of liquid glc runoff
+ integer :: f_heat_rofi_glc = unset_index ! heat : heat content of ice glc runoff
integer :: f_watr_frz = unset_index ! water: freezing
integer :: f_watr_melt = unset_index ! water: melting
@@ -331,14 +333,16 @@ subroutine med_diag_init(gcomp, rc)
f_heat_beg = f_heat_frz ! field first index for heat
f_heat_end = f_heat_sen ! field last index for heat
else if (trim(budget_table_version) == 'v1') then
- call add_to_budget_diag(budget_diags%fields, f_heat_rain ,'hrain' ) ! field heat : enthalpy of rain
- call add_to_budget_diag(budget_diags%fields, f_heat_snow ,'hsnow' ) ! field heat : enthalpy of snow
- call add_to_budget_diag(budget_diags%fields, f_heat_evap ,'hevap' ) ! field heat : enthalpy of evaporation
- call add_to_budget_diag(budget_diags%fields, f_heat_cond ,'hcond' ) ! field heat : enthalpy of evaporation
- call add_to_budget_diag(budget_diags%fields, f_heat_rofl ,'hrofl' ) ! field heat : enthalpy of liquid runoff
- call add_to_budget_diag(budget_diags%fields, f_heat_rofi ,'hrofi' ) ! field heat : enthalpy of ice runoff
+ call add_to_budget_diag(budget_diags%fields, f_heat_rain ,'hrain' ) ! field heat : enthalpy of rain
+ call add_to_budget_diag(budget_diags%fields, f_heat_snow ,'hsnow' ) ! field heat : enthalpy of snow
+ call add_to_budget_diag(budget_diags%fields, f_heat_evap ,'hevap' ) ! field heat : enthalpy of evaporation
+ call add_to_budget_diag(budget_diags%fields, f_heat_cond ,'hcond' ) ! field heat : enthalpy of evaporation
+ call add_to_budget_diag(budget_diags%fields, f_heat_rofl ,'hrofl' ) ! field heat : enthalpy of liquid runoff
+ call add_to_budget_diag(budget_diags%fields, f_heat_rofi ,'hrofi' ) ! field heat : enthalpy of ice runoff
+ call add_to_budget_diag(budget_diags%fields, f_heat_rofl_glc,'hrofl_glc' ) ! field heat : enthalpy of liquid glc runoff
+ call add_to_budget_diag(budget_diags%fields, f_heat_rofi_glc,'hrofi_glc' ) ! field heat : enthalpy of ice glc runoff
f_heat_beg = f_heat_frz ! field first index for heat
- f_heat_end = f_heat_rofi ! field last index for heat
+ f_heat_end = f_heat_rofi_glc ! field last index for heat
end if
! -----------------------------------------
@@ -1620,6 +1624,10 @@ subroutine med_phases_diag_ocn( gcomp, rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call diag_ocn(is_local%wrap%FBExp(compocn), 'Foxx_hrofi', f_heat_rofi , ic, areas, sfrac, budget_local, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
+ call diag_ocn(is_local%wrap%FBExp(compocn), 'Foxx_hrofl_glc', f_heat_rofl_glc, ic, areas, sfrac, budget_local, rc=rc)
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
+ call diag_ocn(is_local%wrap%FBExp(compocn), 'Foxx_hrofi_glc', f_heat_rofi_glc , ic, areas, sfrac, budget_local, rc=rc)
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
budget_local(f_heat_latf,ic,ip) = -budget_local(f_watr_snow,ic,ip)*shr_const_latice
budget_local(f_heat_ioff,ic,ip) = -budget_local(f_watr_ioff,ic,ip)*shr_const_latice
diff --git a/mediator/med_io_mod.F90 b/mediator/med_io_mod.F90
index 6966a37d..1b89f463 100644
--- a/mediator/med_io_mod.F90
+++ b/mediator/med_io_mod.F90
@@ -870,24 +870,28 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
ng = maxval(maxIndexPTile)
if (tiles) then
- lnx = nx
- lny = ny
- lntile = ng/(lnx*lny)
- write(tmpstr,*) subname, 'ng,lnx,lny,lntile = ',ng,lnx,lny,lntile
- call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
- if (lntile /= ntile) then
- call ESMF_LogWrite(trim(subname)//' ERROR: grid2d size and ntile are not consistent ', ESMF_LOGMSG_INFO)
- call ESMF_Finalize(endflag=ESMF_END_ABORT)
- endif
+ lnx = ng
+ lny = 1
+ lntile = 1
+ if (nx > 0) lnx = nx
+ if (ny > 0) lny = ny
+ if (ntile > 0) lntile = ntile
+ write(tmpstr,*) subname, 'ng,lnx,lny,lntile = ',ng,lnx,lny,lntile
+ call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
+ if (lnx*lny*lntile /= ng) then
+ write(tmpstr,*) subname,' ERROR: grid size not consistent ',ng,lnx,lny,lntile
+ call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
+ call ESMF_Finalize(endflag=ESMF_END_ABORT)
+ end if
else
- lnx = ng
- lny = 1
- if (nx > 0) lnx = nx
- if (ny > 0) lny = ny
- if (lnx*lny /= ng) then
- write(tmpstr,*) subname,' WARNING: grid2d size not consistent ',ng,lnx,lny
- call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
- endif
+ lnx = ng
+ lny = 1
+ if (nx > 0) lnx = nx
+ if (ny > 0) lny = ny
+ if (lnx*lny /= ng) then
+ write(tmpstr,*) subname,' WARNING: grid2d size not consistent ',ng,lnx,lny
+ call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
+ endif
end if
deallocate(minIndexPTile, maxIndexPTile)
@@ -902,7 +906,7 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
if (tiles) then
rcode = pio_def_dim(io_file, trim(lpre)//'_nx', lnx, dimid3(1))
rcode = pio_def_dim(io_file, trim(lpre)//'_ny', lny, dimid3(2))
- rcode = pio_def_dim(io_file, trim(lpre)//'_ntile', ntile, dimid3(3))
+ rcode = pio_def_dim(io_file, trim(lpre)//'_ntile', lntile, dimid3(3))
if (present(nt)) then
dimid4(1:3) = dimid3
rcode = pio_inq_dimid(io_file, 'time', dimid4(4))
@@ -1020,10 +1024,18 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
write(tmpstr,*) subname,' dof = ',ns,size(dof),dof(1),dof(ns) !,minval(dof),maxval(dof)
call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO)
if (tiles) then
- call pio_initdecomp(io_subsystem, pio_double, (/lnx,lny,ntile/), dof, iodesc)
+ if (luse_float) then
+ call pio_initdecomp(io_subsystem, pio_real, (/lnx,lny,lntile/), dof, iodesc)
+ else
+ call pio_initdecomp(io_subsystem, pio_double, (/lnx,lny,lntile/), dof, iodesc)
+ end if
else
- call pio_initdecomp(io_subsystem, pio_double, (/lnx,lny/), dof, iodesc)
- !call pio_writedof(lpre, (/lnx,lny/), int(dof,kind=PIO_OFFSET_KIND), mpicom)
+ if (luse_float) then
+ call pio_initdecomp(io_subsystem, pio_real, (/lnx,lny/), dof, iodesc)
+ else
+ call pio_initdecomp(io_subsystem, pio_double, (/lnx,lny/), dof, iodesc)
+ end if
+ !call pio_writedof(lpre, (/lnx,lny/), int(dof,kind=PIO_OFFSET_KIND), mpicom)
end if
deallocate(dof)
@@ -1056,10 +1068,18 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
rcode = pio_inq_varid(io_file, trim(name1), varid)
call pio_setframe(io_file,varid,frame)
- if (gridToFieldMap(1) == 1) then
- call pio_write_darray(io_file, varid, iodesc, fldptr2(:,n), rcode, fillval=lfillvalue)
- else if (gridToFieldMap(1) == 2) then
- call pio_write_darray(io_file, varid, iodesc, fldptr2(n,:), rcode, fillval=lfillvalue)
+ if (luse_float) then
+ if (gridToFieldMap(1) == 1) then
+ call pio_write_darray(io_file, varid, iodesc, real(fldptr2(:,n),r4), rcode, fillval=real(lfillvalue,r4))
+ else if (gridToFieldMap(1) == 2) then
+ call pio_write_darray(io_file, varid, iodesc, real(fldptr2(n,:),r4), rcode, fillval=real(lfillvalue,r4))
+ end if
+ else
+ if (gridToFieldMap(1) == 1) then
+ call pio_write_darray(io_file, varid, iodesc, fldptr2(:,n), rcode, fillval=lfillvalue)
+ else if (gridToFieldMap(1) == 2) then
+ call pio_write_darray(io_file, varid, iodesc, fldptr2(n,:), rcode, fillval=lfillvalue)
+ end if
end if
end do
else if (rank == 1 .or. rank == 0) then
@@ -1068,7 +1088,11 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
call pio_setframe(io_file,varid,frame)
! fix for writing data on exchange grid, which has no data in some PETs
if (rank == 0) nullify(fldptr1)
- call pio_write_darray(io_file, varid, iodesc, fldptr1, rcode, fillval=lfillvalue)
+ if (luse_float) then
+ call pio_write_darray(io_file, varid, iodesc, real(fldptr1,r4), rcode, fillval=real(lfillvalue,r4))
+ else
+ call pio_write_darray(io_file, varid, iodesc, fldptr1, rcode, fillval=lfillvalue)
+ end if
end if ! end if rank is 2 or 1 or 0
end if ! end if not "hgt"
@@ -1077,12 +1101,19 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, &
! Fill coordinate variables - why is this being done each time?
rcode = pio_inq_varid(io_file, trim(coordvarnames(1)), varid)
call pio_setframe(io_file,varid,frame)
- call pio_write_darray(io_file, varid, iodesc, ownedElemCoords_x, rcode, fillval=lfillvalue)
+ if (luse_float) then
+ call pio_write_darray(io_file, varid, iodesc, real(ownedElemCoords_x,r4), rcode, fillval=real(lfillvalue,r4))
+ else
+ call pio_write_darray(io_file, varid, iodesc, ownedElemCoords_x, rcode, fillval=lfillvalue)
+ end if
rcode = pio_inq_varid(io_file, trim(coordvarnames(2)), varid)
call pio_setframe(io_file,varid,frame)
- call pio_write_darray(io_file, varid, iodesc, ownedElemCoords_y, rcode, fillval=lfillvalue)
-
+ if (luse_float) then
+ call pio_write_darray(io_file, varid, iodesc, real(ownedElemCoords_y,r4), rcode, fillval=real(lfillvalue,r4))
+ else
+ call pio_write_darray(io_file, varid, iodesc, ownedElemCoords_y, rcode, fillval=lfillvalue)
+ end if
call pio_syncfile(io_file)
call pio_freedecomp(io_file, iodesc)
endif
diff --git a/mediator/med_methods_mod.F90 b/mediator/med_methods_mod.F90
index d4bdab2a..1634e752 100644
--- a/mediator/med_methods_mod.F90
+++ b/mediator/med_methods_mod.F90
@@ -2609,6 +2609,7 @@ subroutine med_methods_FB_check_for_nans(FB, maintask, logunit, rc)
do index=1,fieldCount
call med_methods_FB_getNameN(FB, index, fieldname, rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
+
call ESMF_FieldBundleGet(FB, fieldName=fieldname, field=field, rc=rc)
if (chkerr(rc,__LINE__,u_FILE_u)) return
call ESMF_FieldGet(field, rank=fieldrank, name=fieldname, rc=rc)
@@ -2632,9 +2633,8 @@ subroutine med_methods_FB_check_for_nans(FB, maintask, logunit, rc)
if (nanfound) then
call ESMF_LogWrite('ABORTING JOB', ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u)
rc = ESMF_FAILURE
- return
end if
-
+
end subroutine med_methods_FB_check_for_nans
!-----------------------------------------------------------------------------
diff --git a/mediator/med_phases_history_mod.F90 b/mediator/med_phases_history_mod.F90
index 0a6a7775..c895d6c4 100644
--- a/mediator/med_phases_history_mod.F90
+++ b/mediator/med_phases_history_mod.F90
@@ -357,11 +357,13 @@ subroutine med_phases_history_write(gcomp, rc)
end if
if (ESMF_FieldBundleIsCreated(is_local%wrap%FBMed_ocnalb_a,rc=rc)) then
call med_io_write(io_file, is_local%wrap%FBMed_ocnalb_a, whead(m), wdata(m), &
- is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_alb_atm', rc=rc)
+ is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_alb_atm', &
+ ntile=is_local%wrap%ntile(compatm), rc=rc)
end if
if (ESMF_FieldBundleIsCreated(is_local%wrap%FBMed_aoflux_a,rc=rc)) then
call med_io_write(io_file, is_local%wrap%FBMed_aoflux_a, whead(m), wdata(m), &
- is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_aoflux_atm', rc=rc)
+ is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_aoflux_atm', &
+ ntile=is_local%wrap%ntile(compatm), rc=rc)
end if
end do ! end of loop over whead/wdata m index phases
@@ -495,7 +497,8 @@ subroutine med_phases_history_write_med(gcomp, rc)
end if
if (ESMF_FieldBundleIsCreated(is_local%wrap%FBMed_aoflux_a,rc=rc)) then
call med_io_write(instfiles(compmed)%io_file, is_local%wrap%FBMed_aoflux_a, whead(m), wdata(m), &
- is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_aoflux_atm', rc=rc)
+ is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_aoflux_atm', &
+ ntile=is_local%wrap%ntile(compatm), rc=rc)
end if
! If appropriate - write ocn albedos computed in mediator
@@ -505,7 +508,8 @@ subroutine med_phases_history_write_med(gcomp, rc)
end if
if (ESMF_FieldBundleIsCreated(is_local%wrap%FBMed_ocnalb_a,rc=rc)) then
call med_io_write(instfiles(compmed)%io_file, is_local%wrap%FBMed_ocnalb_a, whead(m), wdata(m), &
- is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_alb_atm', rc=rc)
+ is_local%wrap%nx(compatm), is_local%wrap%ny(compatm), nt=1, pre='Med_alb_atm', &
+ ntile=is_local%wrap%ntile(compatm), rc=rc)
end if
end do ! end of loop over m
@@ -1058,6 +1062,7 @@ subroutine med_phases_history_write_comp_aux(gcomp, compid, auxcomp, rc)
logical :: enable_auxfile
character(CL) :: time_units ! units of time variable
integer :: nx,ny ! global grid size
+ integer :: ntile ! number of tiles for tiled domain eg CSG
logical :: write_now ! if true, write time sample to file
real(r8) :: time_val ! time coordinate output
real(r8) :: time_bnds(2) ! time bounds output
@@ -1264,6 +1269,7 @@ subroutine med_phases_history_write_comp_aux(gcomp, compid, auxcomp, rc)
! Set shorthand variables
nx = is_local%wrap%nx(compid)
ny = is_local%wrap%ny(compid)
+ ntile = is_local%wrap%ntile(compid)
! Increment number of time samples on file
auxcomp%files(nf)%nt = auxcomp%files(nf)%nt + 1
@@ -1299,7 +1305,7 @@ subroutine med_phases_history_write_comp_aux(gcomp, compid, auxcomp, rc)
call med_io_write(auxcomp%files(nf)%io_file, is_local%wrap%FBimp(compid,compid), &
whead(1), wdata(1), nx, ny, nt=auxcomp%files(nf)%nt, &
pre=trim(compname(compid))//'Imp', flds=auxcomp%files(nf)%flds, &
- use_float=.true., rc=rc)
+ use_float=.true., ntile=ntile, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
! end definition phase
@@ -1313,13 +1319,15 @@ subroutine med_phases_history_write_comp_aux(gcomp, compid, auxcomp, rc)
! Write data variables for time nt
if (auxcomp%files(nf)%doavg) then
call med_io_write(auxcomp%files(nf)%io_file, auxcomp%files(nf)%FBaccum, whead(2), wdata(2), nx, ny, &
- nt=auxcomp%files(nf)%nt, pre=trim(compname(compid))//'Imp', flds=auxcomp%files(nf)%flds, rc=rc)
+ nt=auxcomp%files(nf)%nt, pre=trim(compname(compid))//'Imp', flds=auxcomp%files(nf)%flds, &
+ use_float=.true., ntile=ntile, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call med_methods_FB_reset(auxcomp%files(nf)%FBaccum, value=czero, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
else
call med_io_write(auxcomp%files(nf)%io_file, is_local%wrap%FBimp(compid,compid), whead(2), wdata(2), nx, ny, &
- nt=auxcomp%files(nf)%nt, pre=trim(compname(compid))//'Imp', flds=auxcomp%files(nf)%flds, rc=rc)
+ nt=auxcomp%files(nf)%nt, pre=trim(compname(compid))//'Imp', flds=auxcomp%files(nf)%flds, &
+ use_float=.true., ntile=ntile, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
end if
diff --git a/mediator/med_phases_prep_atm_mod.F90 b/mediator/med_phases_prep_atm_mod.F90
index d0a13242..d6155c69 100644
--- a/mediator/med_phases_prep_atm_mod.F90
+++ b/mediator/med_phases_prep_atm_mod.F90
@@ -254,4 +254,49 @@ subroutine med_phases_prep_atm(gcomp, rc)
end subroutine med_phases_prep_atm
+ !-----------------------------------------------------------------------------
+ subroutine med_phases_prep_atm_enthalpy_correction (gcomp, hcorr, rc)
+
+ ! Enthalpy correction term calculation called by med_phases_prep_ocn_accum in
+ ! med_phases_prep_ocn_mod
+ ! Note that this is only called if the following fields are in FBExp(compocn)
+ ! 'Faxa_rain','Foxx_hrain','Faxa_snow' ,'Foxx_hsnow',
+ ! 'Foxx_evap','Foxx_hevap','Foxx_hcond','Foxx_rofl',
+ ! 'Foxx_hrofl','Foxx_rofi','Foxx_hrofi','Foxx_rofl_glc',
+ ! 'Foxx_hrofl_glc','Foxx_rofi_glc','Foxx_hrofi_glc'
+
+ use ESMF , only : ESMF_VMAllreduce, ESMF_GridCompGet, ESMF_REDUCE_SUM
+ use ESMF , only : ESMF_VM
+
+ ! input/output variables
+ type(ESMF_GridComp) , intent(in) :: gcomp
+ real(r8) , intent(in) :: hcorr(:)
+ integer , intent(out) :: rc
+
+ ! local variables
+ type(InternalState) :: is_local
+ integer :: n
+ real(r8) :: local_htot_corr(1)
+ type(ESMF_VM) :: vm
+ !---------------------------------------
+
+ rc = ESMF_SUCCESS
+
+ nullify(is_local%wrap)
+ call ESMF_GridCompGetInternalState(gcomp, is_local, rc)
+ if (chkErr(rc,__LINE__,u_FILE_u)) return
+
+ ! Determine sum of enthalpy correction for each hcorr index locally
+ local_htot_corr(1) = 0._r8
+ do n = 1,size(hcorr)
+ local_htot_corr(1) = local_htot_corr(1) + hcorr(n)
+ end do
+ call ESMF_GridCompGet(gcomp, vm=vm, rc=rc)
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
+ call ESMF_VMAllreduce(vm, senddata=local_htot_corr, recvdata=global_htot_corr, count=1, &
+ reduceflag=ESMF_REDUCE_SUM, rc=rc)
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
+
+ end subroutine med_phases_prep_atm_enthalpy_correction
+
end module med_phases_prep_atm_mod
diff --git a/mediator/med_phases_prep_ocn_mod.F90 b/mediator/med_phases_prep_ocn_mod.F90
index 456cbf36..aebf951f 100644
--- a/mediator/med_phases_prep_ocn_mod.F90
+++ b/mediator/med_phases_prep_ocn_mod.F90
@@ -85,6 +85,20 @@ subroutine med_phases_prep_ocn_accum(gcomp, rc)
! local variables
type(InternalState) :: is_local
+
+ integer :: n
+ real(r8) :: glob_area_inv
+ real(r8), pointer :: tocn(:)
+ real(r8), pointer :: rain(:), hrain(:)
+ real(r8), pointer :: snow(:), hsnow(:)
+ real(r8), pointer :: evap(:), hevap(:)
+ real(r8), pointer :: hcond(:)
+ real(r8), pointer :: rofl(:), hrofl(:)
+ real(r8), pointer :: rofi(:), hrofi(:)
+ real(r8), pointer :: rofl_glc(:), hrofl_glc(:)
+ real(r8), pointer :: rofi_glc(:), hrofi_glc(:)
+ real(r8), pointer :: areas(:)
+ real(r8), allocatable :: hcorr(:)
type(med_fldlist_type), pointer :: fldList
character(len=*), parameter :: subname='(med_phases_prep_ocn_accum)'
!---------------------------------------
@@ -180,6 +194,7 @@ subroutine med_phases_prep_ocn_avg(gcomp, rc)
! local variables
type(InternalState) :: is_local
integer :: ncnt
+ logical, save :: first_call = .true.
character(len=*),parameter :: subname='(med_phases_prep_ocn_avg)'
!---------------------------------------
@@ -220,9 +235,10 @@ subroutine med_phases_prep_ocn_avg(gcomp, rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
! Check for nans in fields export to ocn
- call FB_check_for_nans(is_local%wrap%FBExp(compocn), maintask, logunit, rc=rc)
- if (ChkErr(rc,__LINE__,u_FILE_u)) return
-
+ if(.not. first_call) then
+ call FB_check_for_nans(is_local%wrap%FBExp(compocn), maintask, logunit, rc=rc)
+ if (ChkErr(rc,__LINE__,u_FILE_u)) return
+ endif
! zero accumulator
is_local%wrap%ExpAccumOcnCnt = 0
call FB_reset(is_local%wrap%FBExpAccumOcn, value=czero, rc=rc)
@@ -234,6 +250,7 @@ subroutine med_phases_prep_ocn_avg(gcomp, rc)
call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO)
end if
call t_stopf('MED:'//subname)
+ first_call = .false.
end subroutine med_phases_prep_ocn_avg