Skip to content
Open
Changes from 3 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
66 changes: 58 additions & 8 deletions src/addon/ESMX/Comps/ESMX_Data/ESMX_Data.F90
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ module esmx_data
character(len=64) :: stdn = "dummy"
integer :: fdim = 2
real(ESMF_KIND_R8) :: dflt = filv
character(len=6) :: scheme = "const"
integer :: member = 1
logical :: rlze = .false.
real(ESMF_KIND_R8) :: minv = filv
real(ESMF_KIND_R8) :: maxv = filv
Expand Down Expand Up @@ -379,10 +381,25 @@ subroutine DataInitialize(xdata, rc)
xfield => xstate%imp_flds_head
do while (associated(xfield))
if (xfield%rlze) then
call ESMF_FieldFill(xfield%efld, dataFillScheme="const", &
const1=xfield%dflt, rc=rc)
call ESMF_FieldFill(xfield%efld, dataFillScheme=trim(xfield%scheme), &
const1=xfield%dflt, member=xfield%member, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
if (trim(xfield%scheme) == "sincos" .and. &
(xfield%minv .ne. filv .and. xfield%maxv .ne. filv)) then
if (xfield%fdim .eq. 3) then
xfield%ptr3 = (((xfield%maxv-xfield%minv)/2.0_ESMF_KIND_R8)*xfield%ptr3)+ &
((xfield%maxv+xfield%minv)/2.0_ESMF_KIND_R8)
elseif (xfield%fdim .eq. 2) then
xfield%ptr2 = (((xfield%maxv-xfield%minv)/2.0_ESMF_KIND_R8)*xfield%ptr2)+ &
((xfield%maxv+xfield%minv)/2.0_ESMF_KIND_R8)
else
call ESMF_LogSetError(ESMF_RC_NOT_IMPL, &
msg=trim(xstate%cname)//": field dimension - "//trim(xfield%stdn), &
line=__LINE__, file=__FILE__, rcToReturn=rc)
return
endif
end if
endif
xfield => xfield%nfld
enddo
Expand All @@ -391,10 +408,25 @@ subroutine DataInitialize(xdata, rc)
xfield => xstate%exp_flds_head
do while (associated(xfield))
if (xfield%rlze) then
call ESMF_FieldFill(xfield%efld, dataFillScheme="const", &
const1=xfield%dflt, rc=rc)
call ESMF_FieldFill(xfield%efld, dataFillScheme=trim(xfield%scheme), &
const1=xfield%dflt, member=xfield%member, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
if (trim(xfield%scheme) == "sincos" .and. &
(xfield%minv .ne. filv .and. xfield%maxv .ne. filv)) then
if (xfield%fdim .eq. 3) then
xfield%ptr3 = (((xfield%maxv-xfield%minv)/2.0_ESMF_KIND_R8)*xfield%ptr3)+ &
((xfield%maxv+xfield%minv)/2.0_ESMF_KIND_R8)
elseif (xfield%fdim .eq. 2) then
xfield%ptr2 = (((xfield%maxv-xfield%minv)/2.0_ESMF_KIND_R8)*xfield%ptr2)+ &
((xfield%maxv+xfield%minv)/2.0_ESMF_KIND_R8)
else
call ESMF_LogSetError(ESMF_RC_NOT_IMPL, &
msg=trim(xstate%cname)//": field dimension - "//trim(xfield%stdn), &
line=__LINE__, file=__FILE__, rcToReturn=rc)
return
endif
end if
call NUOPC_SetAttribute(xfield%efld, &
name="Updated", value="true", rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
Expand Down Expand Up @@ -1090,8 +1122,12 @@ subroutine x_comp_read_fields(xdatacfg, xstate, rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
check = ESMF_HConfigValidateMapKeys(fieldcfg, &
vocabulary=["dim", &
"val" &
vocabulary=["dim ", &
"min ", &
"max ", &
"scheme", &
"member", &
"val " &
], badKey=badKey, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
Expand Down Expand Up @@ -1122,12 +1158,26 @@ subroutine x_comp_read_fields(xdatacfg, xstate, rc)
xfield%gmin = filv
xfield%gmax = filv
xfield%gavg = filv
xfield%minv = 0.0_ESMF_KIND_R8
xfield%maxv = 0.0_ESMF_KIND_R8
xfield%minv = x_comp_hconfig_r8(fieldcfg, "min", &
defaultValue=filv, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield%maxv = x_comp_hconfig_r8(fieldcfg, "max", &
defaultValue=filv, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield%dflt = x_comp_hconfig_r8(fieldcfg, "val", &
defaultValue=0.0_ESMF_KIND_R8, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield%scheme = x_comp_hconfig_str(fieldcfg, "scheme", &
defaultValue="const", rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield%member = x_comp_hconfig_i4(fieldcfg, "member", &
defaultValue=1, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
line=__LINE__, file=__FILE__)) return
xfield%nfld => null()
if (.not. associated(xstate%exp_flds_head)) then
xstate%exp_flds_head => xfield
Expand Down