diff --git a/mediator/med_phases_post_rof_mod.F90 b/mediator/med_phases_post_rof_mod.F90 index 472502f2..f4ec5e0b 100644 --- a/mediator/med_phases_post_rof_mod.F90 +++ b/mediator/med_phases_post_rof_mod.F90 @@ -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 @@ -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 @@ -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)' @@ -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 @@ -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)' !--------------------------------------- @@ -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