ESMF_StateEx Program

Uses

  • program~~esmf_stateex~~UsesGraph program~esmf_stateex ESMF_StateEx module~esmf ESMF program~esmf_stateex->module~esmf module~esmf_testmod ESMF_TestMod program~esmf_stateex->module~esmf_testmod

Calls

program~~esmf_stateex~~CallsGraph program~esmf_stateex ESMF_StateEx esmf_fieldbundlecreate esmf_fieldbundlecreate program~esmf_stateex->esmf_fieldbundlecreate esmf_fieldbundledestroy esmf_fieldbundledestroy program~esmf_stateex->esmf_fieldbundledestroy esmf_fielddestroy esmf_fielddestroy program~esmf_stateex->esmf_fielddestroy esmf_fieldemptycreate esmf_fieldemptycreate program~esmf_stateex->esmf_fieldemptycreate esmf_stateadd esmf_stateadd program~esmf_stateex->esmf_stateadd esmf_statecreate esmf_statecreate program~esmf_stateex->esmf_statecreate esmf_statedestroy esmf_statedestroy program~esmf_stateex->esmf_statedestroy esmf_stateget esmf_stateget program~esmf_stateex->esmf_stateget esmf_stateremove esmf_stateremove program~esmf_stateex->esmf_stateremove proc~esmf_finalize ESMF_Finalize program~esmf_stateex->proc~esmf_finalize proc~esmf_initialize ESMF_Initialize program~esmf_stateex->proc~esmf_initialize proc~esmf_stest ESMF_STest program~esmf_stateex->proc~esmf_stest c_esmc_getcompliancechecktrace c_esmc_getcompliancechecktrace proc~esmf_finalize->c_esmc_getcompliancechecktrace proc~esmf_calendarfinalize ESMF_CalendarFinalize proc~esmf_finalize->proc~esmf_calendarfinalize proc~esmf_logfinalize ESMF_LogFinalize proc~esmf_finalize->proc~esmf_logfinalize proc~esmf_logflush ESMF_LogFlush proc~esmf_finalize->proc~esmf_logflush proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_finalize->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_finalize->proc~esmf_logwrite proc~esmf_traceclose ESMF_TraceClose proc~esmf_finalize->proc~esmf_traceclose proc~esmf_vmabort ESMF_VMAbort proc~esmf_finalize->proc~esmf_vmabort proc~esmf_vmfinalize ESMF_VMFinalize proc~esmf_finalize->proc~esmf_vmfinalize proc~esmf_frameworkinternalinit ESMF_FrameworkInternalInit proc~esmf_initialize->proc~esmf_frameworkinternalinit proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_initialize->proc~esmf_logfounderror proc~esmf_vmbarrier ESMF_VMBarrier proc~esmf_initialize->proc~esmf_vmbarrier proc~esmf_vmgetglobal ESMF_VMGetGlobal proc~esmf_initialize->proc~esmf_vmgetglobal interface~esmf_vmget ESMF_VMGet proc~esmf_stest->interface~esmf_vmget proc~esmf_stest->proc~esmf_logwrite proc~esmf_test ESMF_Test proc~esmf_stest->proc~esmf_test proc~esmf_stest->proc~esmf_vmgetglobal

Variables

Type Attributes Name Initial
character(len=ESMF_MAXSTR) :: failMsg
character(len=ESMF_MAXSTR) :: testname
integer :: finalrc
integer :: rc
integer :: result = 0
type(ESMF_Field) :: field
type(ESMF_Field) :: field1
type(ESMF_Field) :: field2
type(ESMF_FieldBundle) :: bundle
type(ESMF_State) :: state

Source Code

    program ESMF_StateEx

!------------------------------------------------------------------------------
!ESMF_EXAMPLE        String used by test script to count examples.
!==============================================================================
#include "ESMF.h"

    ! ESMF Framework module
    use ESMF
    use ESMF_TestMod
    implicit none

    ! Local variables
    integer                 :: rc
    type(ESMF_State)        :: state
    type(ESMF_FieldBundle)  :: bundle
    type(ESMF_Field)        :: field, field1, field2
    integer                 :: finalrc
    integer                 :: result = 0     ! all pass
    character(ESMF_MAXSTR)  :: testname
    character(ESMF_MAXSTR)  :: failMsg

    finalrc = ESMF_SUCCESS

!-------------------------------------------------------------------------
!-------------------------------------------------------------------------

    write(failMsg, *) "Example failure"
    write(testname, *) "Example ESMF_StateEx"

!-------------------------------------------------------------------------
!-------------------------------------------------------------------------

    call ESMF_Initialize(defaultlogfilename="StateEx.Log", &
      logkindflag=ESMF_LOGKIND_MULTI, rc=rc)

!-------------------------------------------------------------------------
!BOE
!\subsubsection{Create a State and add items}
!
!  Creation of an empty {\tt ESMF\_State}. Then adding an {\tt ESMF\_FieldBundle}
!  to it.  Note that the {\tt ESMF\_FieldBundle} is empty.
!  The {\tt ESMF\_State} only contains a reference to the objects it contains.
!  It does not make a copy; the original objects can be updated and code 
!  accessing them by using the {\tt ESMF\_State} will see the updated version.
!EOE
!BOC
    state = ESMF_StateCreate(name="Ocean", &
      stateintent=ESMF_STATEINTENT_EXPORT, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    bundle = ESMF_FieldBundleCreate(name="Surface Fields", rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    call ESMF_StateAdd(state, [bundle], rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE

!-------------------------------------------------------------------------
!BOE
!\subsubsection{Query a State for items and add more items}
!
! The objects contained in a State can be queried by name.
!EOE
!BOC
    call ESMF_StateGet(state, itemName="Surface Fields", fieldbundle=bundle, &
      rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOE
! More objects can be created and added to the State. Here an empty Field is
! created and added to the State.
!EOE
!BOC
    field = ESMF_FieldEmptyCreate(name="MyField", rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    call ESMF_StateAdd(state, [field], rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOE
! Multiple objects of the same type can be added to the State at the same time.
!EOE
!BOC
    field1 = ESMF_FieldEmptyCreate(name="field1", rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    field2 = ESMF_FieldEmptyCreate(name="field2", rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    call ESMF_StateAdd(state, [field1, field2], rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE

!-------------------------------------------------------------------------
!BOE
!\subsubsection{Removing items from a State}
!
! Objects contained in a State can be removed using the item name.
!EOE
!BOC
    call ESMF_StateRemove(state, ["field1"], rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOE
! Notice that objects removed from a State are {\em not} destroyed by the
! {\tt ESMF\_StateRemove()} call. They must be destroyed explicitly when no
! longer needed.
!BOC
    call ESMF_FieldDestroy(field1, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE

!-------------------------------------------------------------------------
!BOE
!\subsubsection{Destroy a State}
!
! Once an {\tt ESMF\_State} is not longer needed, it should be destroyed.
!EOE
!BOC
    call ESMF_StateDestroy(state, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOE
! Notice that objects contained in a State are {\em not} destroyed by the
! {\tt ESMF\_StateDestroy()} call. They must be destroyed explicitly when no
! longer needed.
!BOC
    call ESMF_FieldBundleDestroy(bundle, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    call ESMF_FieldDestroy(field, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE
!BOC
    call ESMF_FieldDestroy(field2, rc=rc)
!EOC
    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE

!===============================================================================
    ! IMPORTANT: ESMF_STest() prints the PASS string and the # of processors in the log
    ! file that the scripts grep for.
    call ESMF_STest((finalrc.eq.ESMF_SUCCESS), testname, failMsg, result, ESMF_SRCLINE)

    call ESMF_Finalize(rc=rc)

    if (rc.NE.ESMF_SUCCESS) finalrc = ESMF_FAILURE

    if (finalrc.EQ.ESMF_SUCCESS) then
        print *, "PASS: ESMF_StateEx.F90"
    else
        print *, "FAIL: ESMF_StateEx.F90"
    end if

    end program ESMF_StateEx