C $Header: /u/gcmpack/MITgcm/pkg/obcs/obcs_exf_load.F,v 1.10 2017/03/03 01:01:12 jmc Exp $
C $Name: $
# include "OBCS_OPTIONS.h"
C-- File obcs_exf_load.F: Routines to read of OBC fields with EXF
C-- Contents
C-- o OBCS_EXF_LOAD
C-- o OBCS_EXF_READ_XZ
C-- o OBCS_EXF_READ_YZ
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: OBCS_EXF_LOAD
C !INTERFACE:
SUBROUTINE OBCS_EXF_LOAD (
I myTime, myIter, myThid )
C !DESCRIPTION:
C *==============================================================*
C | SUBROUTINE OBCS_EXF_LOAD
C *==============================================================*
C | read open boundary conditions from file
C | N.B.: * uses exf and cal routines for file/record handling
C | * uses ctrl routines for control variable handling
C *==============================================================*
C !USES:
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "OBCS_PARAMS.h"
c#include "OBCS_GRID.h"
#include "OBCS_FIELDS.h"
#include "OBCS_SEAICE.h"
#ifdef ALLOW_EXF
# include "EXF_PARAM.h"
#endif
#ifdef ALLOW_PTRACERS
# include "PTRACERS_SIZE.h"
# include "OBCS_PTRACERS.h"
#endif /* ALLOW_PTRACERS */
C !INPUT/OUTPUT PARAMETERS:
_RL myTime
INTEGER myIter
INTEGER myThid
#if ( defined ALLOW_EXF ) ( defined ALLOW_OBCS_PRESCRIBE )
C !LOCAL VARIABLES:
CEOP
# ifdef ALLOW_OBCS_NORTH
CALL OBCS_EXF_READ_XZ (
I 'N', useOBCSYearlyFields,
I obcsNstartTime, obcsNperiod, obcsNrepCycle,
U OBNu, OBNu0, OBNu1, OBNufile,
U OBNv, OBNv0, OBNv1, OBNvfile,
U OBNt, OBNt0, OBNt1, OBNtfile,
U OBNs, OBNs0, OBNs1, OBNsfile,
# ifdef NONLIN_FRSURF
U OBNeta, OBNeta0, OBNeta1, OBNetafile,
# endif
# ifdef ALLOW_SEAICE
I siobNstartTime, siobNperiod, siobNrepCycle,
U OBNa, OBNa0, OBNa1, OBNafile,
U OBNh, OBNh0, OBNh1, OBNhfile,
U OBNsl, OBNsl0, OBNsl1, OBNslfile,
U OBNsn, OBNsn0, OBNsn1, OBNsnfile,
U OBNuice,OBNuice0,OBNuice1,OBNuicefile,
U OBNvice,OBNvice0,OBNvice1,OBNvicefile,
# endif
# ifdef ALLOW_PTRACERS
U OBNptr ,OBNptr0, OBNptr1, OBNptrFile,
# endif
I myTime, myIter, myThid )
# endif /* ALLOW_OBCS_NORTH */
# ifdef ALLOW_OBCS_SOUTH
CALL OBCS_EXF_READ_XZ (
I 'S', useOBCSYearlyFields,
I obcsSstartTime, obcsSperiod, obcsSrepCycle,
U OBSu, OBSu0, OBSu1, OBSufile,
U OBSv, OBSv0, OBSv1, OBSvfile,
U OBSt, OBSt0, OBSt1, OBStfile,
U OBSs, OBSs0, OBSs1, OBSsfile,
# ifdef NONLIN_FRSURF
U OBSeta, OBSeta0, OBSeta1, OBSetafile,
# endif
# ifdef ALLOW_SEAICE
I siobSstartTime, siobSperiod, siobSrepCycle,
U OBSa, OBSa0, OBSa1, OBSafile,
U OBSh, OBSh0, OBSh1, OBShfile,
U OBSsl, OBSsl0, OBSsl1, OBSslfile,
U OBSsn, OBSsn0, OBSsn1, OBSsnfile,
U OBSuice,OBSuice0,OBSuice1,OBSuicefile,
U OBSvice,OBSvice0,OBSvice1,OBSvicefile,
# endif
# ifdef ALLOW_PTRACERS
U OBSptr ,OBSptr0, OBSptr1, OBSptrFile,
# endif
I myTime, myIter, myThid )
# endif /* ALLOW_OBCS_SOUTH */
# ifdef ALLOW_OBCS_EAST
CALL OBCS_EXF_READ_YZ (
I 'E', useOBCSYearlyFields,
I obcsEstartTime, obcsEperiod, obcsErepCycle,
U OBEu, OBEu0, OBEu1, OBEufile,
U OBEv, OBEv0, OBEv1, OBEvfile,
U OBEt, OBEt0, OBEt1, OBEtfile,
U OBEs, OBEs0, OBEs1, OBEsfile,
# ifdef NONLIN_FRSURF
U OBEeta, OBEeta0, OBEeta1, OBEetafile,
# endif
# ifdef ALLOW_SEAICE
I siobEstartTime, siobEperiod, siobErepCycle,
U OBEa, OBEa0, OBEa1, OBEafile,
U OBEh, OBEh0, OBEh1, OBEhfile,
U OBEsl, OBEsl0, OBEsl1, OBEslfile,
U OBEsn, OBEsn0, OBEsn1, OBEsnfile,
U OBEuice,OBEuice0,OBEuice1,OBEuicefile,
U OBEvice,OBEvice0,OBEvice1,OBEvicefile,
# endif
# ifdef ALLOW_PTRACERS
U OBEptr ,OBEptr0, OBEptr1, OBEptrFile,
# endif
I myTime, myIter, myThid )
# endif /* ALLOW_OBCS_EAST */
# ifdef ALLOW_OBCS_WEST
CALL OBCS_EXF_READ_YZ (
I 'W', useOBCSYearlyFields,
I obcsWstartTime, obcsWperiod, obcsWrepCycle,
U OBWu, OBWu0, OBWu1, OBWufile,
U OBWv, OBWv0, OBWv1, OBWvfile,
U OBWt, OBWt0, OBWt1, OBWtfile,
U OBWs, OBWs0, OBWs1, OBWsfile,
# ifdef NONLIN_FRSURF
U OBWeta, OBWeta0, OBWeta1, OBWetafile,
# endif
# ifdef ALLOW_SEAICE
I siobWstartTime, siobWperiod, siobWrepCycle,
U OBWa, OBWa0, OBWa1, OBWafile,
U OBWh, OBWh0, OBWh1, OBWhfile,
U OBWsl, OBWsl0, OBWsl1, OBWslfile,
U OBWsn, OBWsn0, OBWsn1, OBWsnfile,
U OBWuice,OBWuice0,OBWuice1,OBWuicefile,
U OBWvice,OBWvice0,OBWvice1,OBWvicefile,
# endif
# ifdef ALLOW_PTRACERS
U OBWptr ,OBWptr0, OBWptr1, OBWptrFile,
# endif
I myTime, myIter, myThid )
# endif /* ALLOW_OBCS_WEST */
#endif /* ALLOW_EXF and ALLOW_OBCS_PRESCRIBE */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: OBCS_EXF_READ_XZ
C !INTERFACE:
SUBROUTINE OBCS_EXF_READ_XZ (
I obName, useYearlyFields,
I obcsStartTime, obcsPeriod, obcsRepeatCycle,
U OBu, OBu0, OBu1, OBufile,
U OBv, OBv0, OBv1, OBvfile,
U OBt, OBt0, OBt1, OBtfile,
U OBs, OBs0, OBs1, OBsfile,
#ifdef NONLIN_FRSURF
U OBeta, OBeta0, OBeta1, OBetafile,
#endif
#ifdef ALLOW_SEAICE
I siobStartTime, siobPeriod, siobRepeatCycle,
U OBa, OBa0, OBa1, OBafile,
U OBh, OBh0, OBh1, OBhfile,
U OBsl, OBsl0, OBsl1, OBslfile,
U OBsn, OBsn0, OBsn1, OBsnfile,
U OBuice,OBuice0,OBuice1,OBuicefile,
U OBvice,OBvice0,OBvice1,OBvicefile,
#endif
#ifdef ALLOW_PTRACERS
U OBptr ,OBptr0, OBptr1, OBptrFile,
#endif
I myTime, myIter, myThid )
C !DESCRIPTION:
C *==============================================================*
C | SUBROUTINE OBCS_EXF_READ_XZ
C *==============================================================*
C | read open boundary conditions from file
C | N.B.: * uses exf and cal routines for file/record handling
C | * uses ctrl routines for control variable handling
C *==============================================================*
C !USES:
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#ifdef ALLOW_EXF
# include "EXF_PARAM.h"
#endif
#ifdef ALLOW_PTRACERS
# include "PTRACERS_SIZE.h"
# include "PTRACERS_PARAMS.h"
#endif /* ALLOW_PTRACERS */
C !INPUT/OUTPUT PARAMETERS:
CHARACTER*(*) obName
LOGICAL useYearlyFields
_RL obcsStartTime, obcsPeriod, obcsRepeatCycle
_RL OBu (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBv (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBt (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBs (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBu0 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBv0 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBt0 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBs0 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBu1 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBv1 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBt1 (1-OLx:sNx+OLx,Nr,nSx,nSy)
_RL OBs1 (1-OLx:sNx+OLx,Nr,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM) OBuFile,OBvFile,OBtFile,OBsFile
#ifdef NONLIN_FRSURF
_RL OBeta (1-OLx:sNx+OLx,nSx,nSy)
_RL OBeta0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBeta1 (1-OLx:sNx+OLx,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM) OBetaFile
#endif
#ifdef ALLOW_SEAICE
_RL siobStartTime, siobPeriod, siobRepeatCycle
_RL OBa (1-OLx:sNx+OLx,nSx,nSy)
_RL OBh (1-OLx:sNx+OLx,nSx,nSy)
_RL OBa0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBh0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBa1 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBh1 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsl (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsn (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsl0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsn0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsl1 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBsn1 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBuice (1-OLx:sNx+OLx,nSx,nSy)
_RL OBvice (1-OLx:sNx+OLx,nSx,nSy)
_RL OBuice0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBvice0 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBuice1 (1-OLx:sNx+OLx,nSx,nSy)
_RL OBvice1 (1-OLx:sNx+OLx,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM)
& OBaFile,OBhFile,OBslFile,OBsnFile,OBuiceFile,OBviceFile
#endif /* ALLOW_SEAICE */
#ifdef ALLOW_PTRACERS
_RL OBptr (1-OLx:sNx+OLx,Nr,nSx,nSy,PTRACERS_num)
_RL OBptr0(1-OLx:sNx+OLx,Nr,nSx,nSy,PTRACERS_num)
_RL OBptr1(1-OLx:sNx+OLx,Nr,nSx,nSy,PTRACERS_num)
CHARACTER*(MAX_LEN_FNAM) OBptrFile(PTRACERS_num)
#endif /* ALLOW_PTRACERS */
_RL myTime
INTEGER myIter
INTEGER myThid
#if ( defined ALLOW_EXF ) ( defined ALLOW_OBCS_PRESCRIBE )
C !LOCAL VARIABLES:
C msgBuf :: Informational/error message buffer
CHARACTER*(MAX_LEN_MBUF) msgBuf
CHARACTER*(6) fldName
LOGICAL first, changed
INTEGER count0, count1
INTEGER year0, year1
_RL fac
# ifdef ALLOW_PTRACERS
INTEGER iTracer
# endif /* ALLOW_PTRACERS */
CEOP
IF ( useCAL .AND. obcsPeriod .EQ. -12. _d 0 ) THEN
# ifdef ALLOW_CAL
C- obcsPeriod=-12 means input file contains 12 monthly means
C records, corresponding to Jan. (rec=1) through Dec. (rec=12)
CALL CAL_GETMONTHSREC(
O fac, first, changed,
O count0, count1,
I myTime, myIter, myThid )
# endif /* ALLOW_CAL */
ELSEIF ( obcsPeriod .LT. 0. _d 0 ) THEN
WRITE(msgBuf,'(A,1PE16.8,3A)')
& 'OBCS_EXF_READ_XZ: Invalid obcsPeriod=', obcsPeriod,
& ' for ', obName, ' OBCS files'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R OBCS_EXF_READ_XZ'
ELSE
C- get record numbers and interpolation factor
fldName = 'obcs'//obName
CALL EXF_GETFFIELDREC(
I obcsStartTime, obcsPeriod, obcsRepeatCycle,
I fldName, useYearlyFields,
O fac, first, changed,
O count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
IF ( exf_debugLev.GE.debLevD ) THEN
_BEGIN_MASTER( myThid )
WRITE(msgBuf,'(4A)') ' OBCS_EXF_READ_XZ: ',
& 'processing ', obName, '-OBCS files'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,I10,2I7)') ' OBCS_EXF_READ_XZ: ',
& ' myIter, count0, count1:', myIter, count0, count1
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,2(L2,2X),E16.9)') ' OBCS_EXF_READ_XZ: ',
& ' first, changed, fac: ', first, changed, fac
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
_END_MASTER( myThid )
ENDIF
CALL EXF_SET_OBCS_XZ( OBu, OBu0, OBu1, OBufile, 'u', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBv, OBv0, OBv1, OBvfile, 'v', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBt, OBt0, OBt1, OBtfile, 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBs, OBs0, OBs1, OBsfile, 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
# ifdef NONLIN_FRSURF
CALL EXF_SET_OBCS_XZ( OBeta, OBeta0, OBeta1, OBetaFile, 's', 1,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
# endif /* NONLIN_FRSURF */
# ifdef ALLOW_PTRACERS
IF ( usePTRACERS ) THEN
DO iTracer = 1, PTRACERS_numInUse
CALL EXF_SET_OBCS_XZ( OBptr (1-OLx,1,1,1,iTracer),
I OBptr0(1-OLx,1,1,1,iTracer),
I OBptr1(1-OLx,1,1,1,iTracer),
I OBptrFile(iTracer), 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDDO
ENDIF
# endif /* ALLOW_PTRACERS */
# ifdef ALLOW_SEAICE
IF (useSEAICE) THEN
IF ( useCAL .AND. siobPeriod .EQ. -12. _d 0 ) THEN
# ifdef ALLOW_CAL
C- obcsPeriod=-12 means input file contains 12 monthly means
C records, corresponding to Jan. (rec=1) through Dec. (rec=12)
CALL CAL_GETMONTHSREC(
O fac, first, changed,
O count0, count1,
I myTime, myIter, myThid )
# endif /* ALLOW_CAL */
ELSEIF ( siobPeriod .LT. 0. _d 0 ) THEN
WRITE(msgBuf,'(A,1PE16.8,3A)')
& 'OBCS_EXF_READ_XZ: Invalid siobPeriod=', siobPeriod,
& ' for ', obName, ' OBCS files'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R OBCS_EXF_READ_XZ'
ELSE
C- get record numbers and interpolation factor
fldName = 'SIob'//obName
CALL EXF_GETFFIELDREC(
I siobStartTime, siobPeriod, siobRepeatCycle,
I fldName, useYearlyFields,
O fac, first, changed,
O count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
IF ( exf_debugLev.GE.debLevD ) THEN
_BEGIN_MASTER( myThid )
WRITE(msgBuf,'(4A)') ' OBCS_EXF_READ_XZ: ',
& 'processing SEAICE ', obName, '-OBCS files'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,I10,2I7)') ' OBCS_EXF_READ_XZ: ',
& ' myIter, count0, count1:', myIter, count0, count1
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,2(L2,2X),E16.9)') ' OBCS_EXF_READ_XZ: ',
& ' first, changed, fac: ', first, changed, fac
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
_END_MASTER( myThid )
ENDIF
CALL EXF_SET_OBCS_XZ( OBa, OBa0, OBa1, OBafile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBh, OBh0, OBh1, OBhfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBsl, OBsl0, OBsl1, OBslfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBsn, OBsn0, OBsn1, OBsnfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBuice,OBuice0,OBuice1,OBuicefile,'u', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_XZ( OBvice,OBvice0,OBvice1,OBvicefile,'v', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
# endif /* ALLOW_SEAICE */
#endif /* ALLOW_EXF and ALLOW_OBCS_PRESCRIBE */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: OBCS_EXF_READ_YZ
C !INTERFACE:
SUBROUTINE OBCS_EXF_READ_YZ (
I obName, useYearlyFields,
I obcsStartTime, obcsPeriod, obcsRepeatCycle,
U OBu, OBu0, OBu1, OBufile,
U OBv, OBv0, OBv1, OBvfile,
U OBt, OBt0, OBt1, OBtfile,
U OBs, OBs0, OBs1, OBsfile,
#ifdef NONLIN_FRSURF
U OBeta, OBeta0, OBeta1, OBetafile,
#endif
#ifdef ALLOW_SEAICE
I siobStartTime, siobPeriod, siobRepeatCycle,
U OBa, OBa0, OBa1, OBafile,
U OBh, OBh0, OBh1, OBhfile,
U OBsl, OBsl0, OBsl1, OBslfile,
U OBsn, OBsn0, OBsn1, OBsnfile,
U OBuice,OBuice0,OBuice1,OBuicefile,
U OBvice,OBvice0,OBvice1,OBvicefile,
#endif
#ifdef ALLOW_PTRACERS
U OBptr ,OBptr0, OBptr1, OBptrFile,
#endif
I myTime, myIter, myThid )
C !DESCRIPTION:
C *==============================================================*
C | SUBROUTINE OBCS_EXF_READ_YZ
C *==============================================================*
C | read open boundary conditions from file
C | N.B.: * uses exf and cal routines for file/record handling
C | * uses ctrl routines for control variable handling
C *==============================================================*
C !USES:
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#ifdef ALLOW_EXF
# include "EXF_PARAM.h"
#endif
#ifdef ALLOW_PTRACERS
# include "PTRACERS_SIZE.h"
# include "PTRACERS_PARAMS.h"
#endif /* ALLOW_PTRACERS */
C !INPUT/OUTPUT PARAMETERS:
CHARACTER*(*) obName
LOGICAL useYearlyFields
_RL obcsStartTime, obcsPeriod, obcsRepeatCycle
_RL OBu (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBv (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBt (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBs (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBu0 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBv0 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBt0 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBs0 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBu1 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBv1 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBt1 (1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL OBs1 (1-OLy:sNy+OLy,Nr,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM) OBuFile,OBvFile,OBtFile,OBsFile
#ifdef NONLIN_FRSURF
_RL OBeta (1-OLy:sNy+OLy,nSx,nSy)
_RL OBeta0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBeta1 (1-OLy:sNy+OLy,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM) OBetaFile
#endif
#ifdef ALLOW_SEAICE
_RL siobStartTime, siobPeriod, siobRepeatCycle
_RL OBa (1-OLy:sNy+OLy,nSx,nSy)
_RL OBh (1-OLy:sNy+OLy,nSx,nSy)
_RL OBa0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBh0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBa1 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBh1 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsl (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsn (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsl0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsn0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsl1 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBsn1 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBuice (1-OLy:sNy+OLy,nSx,nSy)
_RL OBvice (1-OLy:sNy+OLy,nSx,nSy)
_RL OBuice0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBvice0 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBuice1 (1-OLy:sNy+OLy,nSx,nSy)
_RL OBvice1 (1-OLy:sNy+OLy,nSx,nSy)
CHARACTER*(MAX_LEN_FNAM)
& OBaFile,OBhFile,OBslFile,OBsnFile,OBuiceFile,OBviceFile
#endif /* ALLOW_SEAICE */
#ifdef ALLOW_PTRACERS
_RL OBptr (1-OLy:sNy+OLy,Nr,nSx,nSy,PTRACERS_num)
_RL OBptr0(1-OLy:sNy+OLy,Nr,nSx,nSy,PTRACERS_num)
_RL OBptr1(1-OLy:sNy+OLy,Nr,nSx,nSy,PTRACERS_num)
CHARACTER*(MAX_LEN_FNAM) OBptrFile(PTRACERS_num)
#endif /* ALLOW_PTRACERS */
_RL myTime
INTEGER myIter
INTEGER myThid
#if ( defined ALLOW_EXF ) ( defined ALLOW_OBCS_PRESCRIBE )
C !LOCAL VARIABLES:
C msgBuf :: Informational/error message buffer
CHARACTER*(MAX_LEN_MBUF) msgBuf
CHARACTER*(6) fldName
LOGICAL first, changed
INTEGER count0, count1
INTEGER year0, year1
_RL fac
# ifdef ALLOW_PTRACERS
INTEGER iTracer
# endif /* ALLOW_PTRACERS */
CEOP
IF ( useCAL .AND. obcsPeriod .EQ. -12. _d 0 ) THEN
# ifdef ALLOW_CAL
C- obcsPeriod=-12 means input file contains 12 monthly means
C records, corresponding to Jan. (rec=1) through Dec. (rec=12)
CALL CAL_GETMONTHSREC(
O fac, first, changed,
O count0, count1,
I myTime, myIter, myThid )
# endif /* ALLOW_CAL */
ELSEIF ( obcsPeriod .LT. 0. _d 0 ) THEN
WRITE(msgBuf,'(A,1PE16.8,3A)')
& 'OBCS_EXF_READ_YZ: Invalid obcsPeriod=', obcsPeriod,
& ' for ', obName, ' OBCS files'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R OBCS_EXF_READ_YZ'
ELSE
C- get record numbers and interpolation factor
fldName = 'obcs'//obName
CALL EXF_GETFFIELDREC(
I obcsStartTime, obcsPeriod, obcsRepeatCycle,
I fldName, useYearlyFields,
O fac, first, changed,
O count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
IF ( exf_debugLev.GE.debLevD ) THEN
_BEGIN_MASTER( myThid )
WRITE(msgBuf,'(4A)') ' OBCS_EXF_READ_XZ: ',
& 'processing ', obName, '-OBCS files'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,I10,2I7)') ' OBCS_EXF_READ_YZ: ',
& ' myIter, count0, count1:', myIter, count0, count1
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,2(L2,2X),E16.9)') ' OBCS_EXF_READ_YZ: ',
& ' first, changed, fac: ', first, changed, fac
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
_END_MASTER( myThid )
ENDIF
CALL EXF_SET_OBCS_YZ( OBu, OBu0, OBu1, OBufile, 'u', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBv, OBv0, OBv1, OBvfile, 'v', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBt, OBt0, OBt1, OBtfile, 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBs, OBs0, OBs1, OBsfile, 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
# ifdef NONLIN_FRSURF
CALL EXF_SET_OBCS_YZ( OBeta, OBeta0, OBeta1, OBetaFile, 's', 1,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
# endif /* NONLIN_FRSURF */
# ifdef ALLOW_PTRACERS
IF ( usePTRACERS ) THEN
DO iTracer = 1, PTRACERS_numInUse
CALL EXF_SET_OBCS_YZ( OBptr (1-OLx,1,1,1,iTracer),
I OBptr0(1-OLx,1,1,1,iTracer),
I OBptr1(1-OLx,1,1,1,iTracer),
I OBptrFile(iTracer), 's', Nr,
I fac, first, changed, useYearlyFields,
I obcsPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDDO
ENDIF
# endif /* ALLOW_PTRACERS */
# ifdef ALLOW_SEAICE
IF (useSEAICE) THEN
IF ( useCAL .AND. siobPeriod .EQ. -12. _d 0 ) THEN
# ifdef ALLOW_CAL
C- obcsPeriod=-12 means input file contains 12 monthly means
C records, corresponding to Jan. (rec=1) through Dec. (rec=12)
CALL CAL_GETMONTHSREC(
O fac, first, changed,
O count0, count1,
I myTime, myIter, myThid )
# endif /* ALLOW_CAL */
ELSEIF ( siobPeriod .LT. 0. _d 0 ) THEN
WRITE(msgBuf,'(A,1PE16.8,3A)')
& 'OBCS_EXF_READ_YZ: Invalid siobPeriod=', siobPeriod,
& ' for ', obName, ' OBCS files'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R OBCS_EXF_READ_YZ'
ELSE
C- get record numbers and interpolation factor
fldName = 'SIob'//obName
CALL EXF_GETFFIELDREC(
I siobStartTime, siobPeriod, siobRepeatCycle,
I fldName, useYearlyFields,
O fac, first, changed,
O count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
IF ( exf_debugLev.GE.debLevD ) THEN
_BEGIN_MASTER( myThid )
WRITE(msgBuf,'(4A)') ' OBCS_EXF_READ_XZ: ',
& 'processing SEAICE ', obName, '-OBCS files'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,I10,2I7)') ' OBCS_EXF_READ_YZ: ',
& ' myIter, count0, count1:', myIter, count0, count1
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
WRITE(msgBuf,'(2A,2(L2,2X),E16.9)') ' OBCS_EXF_READ_YZ: ',
& ' first, changed, fac: ', first, changed, fac
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, myThid )
_END_MASTER( myThid )
ENDIF
CALL EXF_SET_OBCS_YZ( OBa, OBa0, OBa1, OBafile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBh, OBh0, OBh1, OBhfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBsl, OBsl0, OBsl1, OBslfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBsn, OBsn0, OBsn1, OBsnfile, 's', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBuice,OBuice0,OBuice1,OBuicefile,'u', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
CALL EXF_SET_OBCS_YZ( OBvice,OBvice0,OBvice1,OBvicefile,'v', 1,
I fac, first, changed, useYearlyFields,
I siobPeriod, count0, count1, year0, year1,
I myTime, myIter, myThid )
ENDIF
# endif /* ALLOW_SEAICE */
#endif /* ALLOW_EXF and ALLOW_OBCS_PRESCRIBE */
RETURN
END