Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ESMF_StaggerLoc), | intent(inout) | :: | staggerloc | |||
integer, | intent(in) | :: | loc(:) | |||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | |||
integer, | optional | :: | rc |
subroutine ESMF_StaggerLocSetAllDim(staggerloc, loc, keywordEnforcer, rc) ! ! !ARGUMENTS: type (ESMF_StaggerLoc), intent(inout) :: staggerloc integer, intent(in) :: loc(:) type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below integer, optional :: rc ! !STATUS: ! \begin{itemize} ! \item\apiStatusCompatibleVersion{5.2.0r} ! \end{itemize} ! ! !DESCRIPTION: ! Sets a custom {\tt staggerloc} to a position in a cell by using the array ! {\tt loc}. The values in the array should only be 0,1. If loc(i) is 0 it ! means the position should be in the center in that dimension. If loc(i) is 1 then ! for dimension i, the position should be on the side of the cell. ! Please see Section~\ref{sec:usage:staggerloc:adv} ! for diagrams and further discussion of custom stagger locations. ! ! The arguments are: ! \begin{description} ! \item[staggerloc] ! Grid location to be initialized ! \item[loc] ! Array holding position data. Each entry in {\tt loc} should only ! be 0 or 1. note that dimensions beyond those specified are set to 0. ! \item[{[rc]}] ! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors. ! \end{description} ! !EOP integer :: i,sl,loc_size ! Initialize return code; assume routine not implemented if (present(rc)) rc = ESMF_RC_NOT_IMPL !TODO: error checking here ! set stagger location value sl=0 loc_size=size(loc) do i=1,loc_size sl=sl+loc(i)*2**(i-1) enddo ! Set stagger location value staggerloc%staggerloc=sl ! Set return values. if (present(rc)) rc = ESMF_SUCCESS end subroutine ESMF_StaggerLocSetAllDim