Skip to content
Open
Changes from all commits
Commits
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
29 changes: 21 additions & 8 deletions mediator/med_phases_post_rof_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ module med_phases_post_rof_mod
use ESMF , only : ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_SUCCESS
use ESMF , only : ESMF_GridComp, ESMF_GridCompGet
use ESMF , only : ESMF_Mesh, ESMF_MESHLOC_ELEMENT, ESMF_TYPEKIND_R8
use ESMF , only : ESMF_Field, ESMF_FieldCreate
use ESMF , only : ESMF_Field
use ESMF , only : ESMF_FieldBundle, ESMF_FieldBundleCreate
use ESMF , only : ESMF_FieldBundleGet, ESMF_FieldBundleAdd
use ESMF , only : ESMF_VM, ESMF_VMAllreduce, ESMF_REDUCE_SUM
Expand All @@ -19,8 +19,11 @@ module med_phases_post_rof_mod
use med_constants_mod , only : dbug_flag => med_constants_dbug_flag
use med_phases_history_mod, only : med_phases_history_write_comp
use med_map_mod , only : med_map_field_packed
use med_methods_mod , only : fldbun_copy => med_methods_FB_copy
use med_methods_mod , only : fldbun_getdata1d => med_methods_FB_getdata1d
use med_methods_mod , only : fldbun_getmesh => med_methods_FB_getmesh
use med_field_info_mod , only : med_field_info_type, med_field_info_create_from_field
use med_field_info_mod , only : med_field_info_esmf_fieldcreate
use perf_mod , only : t_startf, t_stopf
use shr_log_mod , only : shr_log_error

Expand Down Expand Up @@ -114,8 +117,6 @@ subroutine med_phases_post_rof(gcomp, rc)
! local variables
type(InternalState) :: is_local
type(ESMF_Clock) :: dClock
real(r8), pointer :: data_orig(:)
real(r8), pointer :: data_copy(:)
integer :: n
logical :: exists
character(len=*), parameter :: subname='(med_phases_post_rof)'
Expand All @@ -133,11 +134,8 @@ subroutine med_phases_post_rof(gcomp, rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return

do n = 1, num_rof_fields
call fldbun_getdata1d(is_local%wrap%FBImp(comprof,comprof), trim(rof_field_names(n)), data_orig, rc=rc)
call fldbun_copy(FBrof_r, is_local%wrap%FBImp(comprof,comprof), rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call fldbun_getdata1d(FBrof_r, trim(rof_field_names(n)), data_copy, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
data_copy(:) = data_orig(:)
end do

if (remove_negative_runoff_lnd) then
Expand Down Expand Up @@ -228,7 +226,9 @@ subroutine med_phases_post_rof_create_rof_field_bundle(gcomp, rc)
type(InternalState) :: is_local
integer :: n
type(ESMF_Mesh) :: mesh
type(ESMF_Field) :: field_template
type(ESMF_Field) :: field
type(med_field_info_type) :: field_info
integer, parameter :: dbug_threshold = 20 ! threshold for writing debug information in this subroutine
character(len=*), parameter :: subname='(med_phases_post_rof_mod: med_phases_post_rof_create_rof_field_bundle)'
!---------------------------------------
Expand Down Expand Up @@ -258,7 +258,20 @@ subroutine med_phases_post_rof_create_rof_field_bundle(gcomp, rc)
FBrof_r = ESMF_FieldBundleCreate(name='FBrof_r', rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
do n = 1, num_rof_fields
field = ESMF_FieldCreate(mesh, ESMF_TYPEKIND_R8, name=rof_field_names(n), meshloc=ESMF_MESHLOC_ELEMENT, rc=rc)
! Add a Field to FBrof_r that matches the equivalent Field in
! is_local%wrap%FBImp(comprof,comprof), particularly in terms of the sizes of any
! ungridded dimensions.
call ESMF_FieldBundleGet(is_local%wrap%FBImp(comprof,comprof), &
fieldName=rof_field_names(n), &
field=field_template, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
field_info = med_field_info_create_from_field( &
field=field_template, &
name=rof_field_names(n), &
rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call med_field_info_esmf_fieldcreate(field_info=field_info, &
mesh=mesh, meshloc=ESMF_MESHLOC_ELEMENT, field=field, rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
call ESMF_FieldBundleAdd(FBrof_r, (/field/), rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
Expand Down