You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@danrosen25 Starting an issue to track the progress of the code!
Problem description:
Right now we want to use a grid provided by another component in a NUOPC model, instead of creating a new one. This process is part of setting up the interactions between model component and DART, where one component can "accept" a grid and associated fields from another component.
Here's how we could manage this using a grid provided by another component (rough idea):
Step 1: Configuration of the Import State
To use a grid from another component, the DART component needs to properly configure its import state to indicate that it expects to receive this grid. This is typically done during the initialization phase where you define what DART would need (import) and produce (export).
Step 2: Advertise and Realize
In NUOPC, fields and their associated grids are advertised to communicate what a component can provide or needs to receive. Then, during the realization step, the component actually acquires the data structures necessary to operate on the data, including the grid. This can be done using ESMF field API ?
subroutine InitializeAdvertise(model, rc):
type(ESMF_GridComp) :: model
integer, intent(out) :: rc
! local variable
type(ESMF_State) :: importstate, exportstate
rc = ESMF_SUCCESS
call NUOPC_ModelGet(model. importState=importstate, exportState=exportstate, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF+LogFoundError, line=__LINE__, file=__FILE__)) return ! bail out
end Subroutine InitializationAdvertise
subroutine InitializeRealize(model, rc)
type(ESMF_GridComp) :: model
integer, intent(out) :: rc
! local variables
type(ESMF_State) :: importstate
type(ESMF_Field) :: sstField
type(ESMF_Grid) :: receivedGrid
rc = ESMF_SUCCESS
! Get import state from the model
call NUOPC_ModelGet(model, importState=importState, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return
! Get the field from the import state
call ESMF_StateGet(importState, fieldName="sst", field=sstField, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return
! Retrieve the grid associated with the field
receivedGrid = ESMF_FieldGetGrid(sstField, rc=rc)
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return
! Now, receivedGrid contains the grid from the ocean model
! Further processing using receivedGrid
end subroutine InitializeRealize
@danrosen25 Starting an issue to track the progress of the code!
Problem description:
Right now we want to use a grid provided by another component in a NUOPC model, instead of creating a new one. This process is part of setting up the interactions between model component and DART, where one component can "accept" a grid and associated fields from another component.
Here's how we could manage this using a grid provided by another component (rough idea):
Step 1: Configuration of the Import State
To use a grid from another component, the DART component needs to properly configure its import state to indicate that it expects to receive this grid. This is typically done during the initialization phase where you define what DART would need (import) and produce (export).
Step 2: Advertise and Realize
In NUOPC, fields and their associated grids are advertised to communicate what a component can provide or needs to receive. Then, during the realization step, the component actually acquires the data structures necessary to operate on the data, including the grid. This can be done using ESMF field API ?
Tagging @amrhein @hkershaw-brown @anhpham3621 so that you guys could get notification!
The text was updated successfully, but these errors were encountered: