Skip to content

Commit

Permalink
Implement NUOPC_Realize() C API.
Browse files Browse the repository at this point in the history
  • Loading branch information
theurich committed Jan 16, 2024
1 parent 02d59a4 commit 55fd830
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/addon/NUOPC/include/NUOPC.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ int NUOPC_Advertise(
const char *fieldName // in
);

int NUOPC_Realize(
ESMC_State state, // in
ESMC_Field field // in
);

#ifdef __cplusplus
} // extern "C"
#endif
Expand Down
27 changes: 27 additions & 0 deletions src/addon/NUOPC/interface/NUOPC_C.F90
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,30 @@ subroutine f_nuopc_advertise(state, standardName, fieldName, rc)
rc = ESMF_SUCCESS
end subroutine f_nuopc_advertise
!------------------------------------------------------------------------------


!------------------------------------------------------------------------------
subroutine f_nuopc_realize(state, field, rc)
#undef ESMF_METHOD
#define ESMF_METHOD "f_nuopc_realize"
use ESMF
use NUOPC
implicit none

type(ESMF_State) :: state !in
type(ESMF_Field) :: field !in
integer, intent(out) :: rc !out

integer :: localrc

! Initialize return code; assume routine not implemented
rc = ESMF_RC_NOT_IMPL

call NUOPC_Realize(state, field, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return

! Return successfully
rc = ESMF_SUCCESS
end subroutine f_nuopc_realize
!------------------------------------------------------------------------------
19 changes: 19 additions & 0 deletions src/addon/NUOPC/interface/NUOPC_F.C
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,23 @@ int NUOPC_Advertise(ESMC_State state, const char *standardName,
}
//-----------------------------------------------------------------------------


//-----------------------------------------------------------------------------
void FTN_X(f_nuopc_realize)(const ESMCI::State*, const ESMCI::Field*, int* rc);
#undef ESMC_METHOD
#define ESMC_METHOD "NUOPC_Realize()"
int NUOPC_Realize(ESMC_State state, ESMC_Field field){
// initialize return code; assume routine not implemented
int localrc = ESMC_RC_NOT_IMPL; // local return code
int rc = ESMC_RC_NOT_IMPL; // final return code
FTN_X(f_nuopc_realize)((const ESMCI::State *)state.ptr,
(const ESMCI::Field *)field.ptr, &localrc);
if (ESMC_LogDefault.MsgFoundError(localrc, ESMCI_ERR_PASSTHRU, ESMC_CONTEXT,
&rc)) return rc; // bail out
// return successfully
rc = ESMF_SUCCESS;
return rc;
}
//-----------------------------------------------------------------------------

}; // extern "C"

0 comments on commit 55fd830

Please sign in to comment.