C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_set_obcs.F,v 1.17 2011/09/02 18:22:50 jmc Exp $ C $Name: $ #include "EXF_OPTIONS.h" C-- File exf_set_obcs.F: C-- Contents C-- o EXF_SET_OBCS_XZ C-- o EXF_SET_OBCS_YZ C-- o EXF_SET_OBCS_X <- no longer maintained ; use SET_OBCS_XZ with nNz=1 C-- o EXF_SET_OBCS_Y <- no longer maintained ; use SET_OBCS_YZ with nNz=1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE EXF_SET_OBCS_XZ ( U obcs_fld_xz, obcs_xz_0, obcs_xz_1, I obcs_file, obcsmask, nNz, I fac, first, changed, useYearlyFields, obcs_period, I count0, count1, year0, year1, I myTime, myIter, myThid ) C ================================================================== C SUBROUTINE EXF_SET_OBCS_XZ C ================================================================== C C o set open boundary conditions C C started: heimbach@mit.edu 01-May-2001 C mods for pkg/seaice: menemenlis@jpl.nasa.gov 20-Dec-2002 C ================================================================== C SUBROUTINE EXF_SET_OBCS_XZ C ================================================================== IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "GRID.h" #include "EXF_PARAM.h" #include "EXF_CONSTANTS.h" C == routine arguments == C nNz :: number of levels to process INTEGER nNz _RL obcs_fld_xz(1-OLx:sNx+OLx,nNz,nSx,nSy) _RL obcs_xz_0(1-OLx:sNx+OLx,nNz,nSx,nSy) _RL obcs_xz_1(1-OLx:sNx+OLx,nNz,nSx,nSy) CHARACTER*(128) obcs_file CHARACTER*1 obcsmask LOGICAL first, changed LOGICAL useYearlyFields _RL obcs_period INTEGER count0, count1, year0, year1 _RL fac _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_OBCS C == local variables == CHARACTER*(128) obcs_file0, obcs_file1 INTEGER bi, bj INTEGER i, k C == end of interface == IF ( obcs_file .NE. ' ' ) THEN IF ( first ) THEN CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year0, I obcs_file, O obcs_file0, I myTime, myIter, myThid ) _BARRIER CALL READ_REC_XZ_RL( obcs_file0, exf_iprec_obcs, nNz, & obcs_xz_1, count0, myIter, myThid ) _BARRIER ENDIF IF ( first .OR. changed ) THEN CALL EXF_SWAPFFIELDS_XZ( obcs_xz_0, obcs_xz_1, nNz,myThid ) CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year1, I obcs_file, O obcs_file1, I myTime, myIter, myThid ) _BARRIER CALL READ_REC_XZ_RL( obcs_file1, exf_iprec_obcs, nNz, & obcs_xz_1, count1, myIter, myThid ) _BARRIER ENDIF DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),myBxHi(myThid) DO k = 1,nNz DO i = 1,sNx obcs_fld_xz(i,k,bi,bj) = & fac * obcs_xz_0(i,k,bi,bj) + & (exf_one - fac) * obcs_xz_1(i,k,bi,bj) ENDDO ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_OBCS */ RETURN END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE EXF_SET_OBCS_YZ ( U obcs_fld_yz, obcs_yz_0, obcs_yz_1, I obcs_file, obcsmask, nNz, I fac, first, changed, useYearlyFields, obcs_period, I count0, count1, year0, year1, I myTime, myIter, myThid) C ================================================================== C SUBROUTINE EXF_SET_OBCS_YZ C ================================================================== C C o set open boundary conditions C C started: heimbach@mit.edu 01-May-2001 C ================================================================== C SUBROUTINE EXF_SET_OBCS_YZ C ================================================================== IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "GRID.h" #include "EXF_PARAM.h" #include "EXF_CONSTANTS.h" C == routine arguments == C nNz :: number of levels to process INTEGER nNz _RL obcs_fld_yz(1-OLy:sNy+OLy,nNz,nSx,nSy) _RL obcs_yz_0(1-OLy:sNy+OLy,nNz,nSx,nSy) _RL obcs_yz_1(1-OLy:sNy+OLy,nNz,nSx,nSy) CHARACTER*(MAX_LEN_FNAM) obcs_file CHARACTER*1 obcsmask LOGICAL first, changed LOGICAL useYearlyFields _RL obcs_period INTEGER count0, count1, year0, year1 _RL fac _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_OBCS C == local variables == CHARACTER*(128) obcs_file0, obcs_file1 INTEGER bi, bj INTEGER j, k C == end of interface == IF ( obcs_file .NE. ' ' ) THEN IF ( first ) THEN CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year0, I obcs_file, O obcs_file0, I myTime, myIter, myThid ) _BARRIER CALL READ_REC_YZ_RL( obcs_file0, exf_iprec_obcs, nNz, & obcs_yz_1, count0, myIter, myThid ) _BARRIER ENDIF IF ( first .OR. changed ) THEN CALL EXF_SWAPFFIELDS_YZ( obcs_yz_0, obcs_yz_1, nNz,myThid ) CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year1, I obcs_file, O obcs_file1, I myTime, myIter, myThid ) _BARRIER CALL READ_REC_YZ_RL( obcs_file1, exf_iprec_obcs, nNz, & obcs_yz_1, count1, myIter, myThid ) _BARRIER ENDIF DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),myBxHi(myThid) DO k = 1,nNz DO j = 1,sNy obcs_fld_yz(j,k,bi,bj) = & fac *obcs_yz_0(j,k,bi,bj) + & (exf_one - fac) *obcs_yz_1(j,k,bi,bj) ENDDO ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_OBCS */ RETURN END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE EXF_SET_OBCS_X ( U obcs_fld_x, obcs_x_0, obcs_x_1, I obcs_file, obcsmask, I fac, first, changed, useYearlyFields, obcs_period, I count0, count1, year0, year1, I myTime, myIter, myThid ) C ================================================================== C SUBROUTINE EXF_SET_OBCS_X C ================================================================== C C o set open boundary conditions C same as EXF_SET_OBCS_XZ but for Nr=1 C C ================================================================== C SUBROUTINE EXF_SET_OBCS_X C ================================================================== IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "GRID.h" #include "EXF_PARAM.h" #include "EXF_CONSTANTS.h" C == routine arguments == _RL obcs_fld_x(1-OLx:sNx+OLx,nSx,nSy) _RL obcs_x_0(1-OLx:sNx+OLx,nSx,nSy) _RL obcs_x_1(1-OLx:sNx+OLx,nSx,nSy) CHARACTER*(128) obcs_file CHARACTER*1 obcsmask LOGICAL first, changed LOGICAL useYearlyFields _RL obcs_period INTEGER count0, count1, year0, year1 _RL fac _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_OBCS C == local variables == CHARACTER*(128) obcs_file0, obcs_file1 INTEGER bi, bj, i C == end of interface == STOP 'S/R EXF_SET_OBCS_X no longer maintained' IF ( obcs_file .NE. ' ' ) THEN IF ( first ) THEN CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year0, I obcs_file, O obcs_file0, I myTime, myIter, myThid ) CALL READ_REC_XZ_RL( obcs_file0, exf_iprec_obcs, 1, & obcs_x_1, count0, myIter, myThid ) ENDIF IF (( first ) .OR. ( changed )) THEN CALL EXF_SWAPFFIELDS_XZ( obcs_x_0, obcs_x_1, 1,myThid ) CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year1, I obcs_file, O obcs_file1, I myTime, myIter, myThid ) CALL READ_REC_XZ_RL( obcs_file1, exf_iprec_obcs, 1, & obcs_x_1, count1, myIter, myThid ) ENDIF DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),myBxHi(myThid) DO i = 1,sNx obcs_fld_x(i,bi,bj) = & fac * obcs_x_0(i,bi,bj) + & (exf_one - fac) * obcs_x_1(i,bi,bj) ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_OBCS */ RETURN END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| SUBROUTINE EXF_SET_OBCS_Y ( U obcs_fld_y, obcs_y_0, obcs_y_1, I obcs_file, obcsmask, I fac, first, changed, useYearlyFields, obcs_period, I count0, count1, year0, year1, I myTime, myIter, myThid ) C ================================================================== C SUBROUTINE EXF_SET_OBCS_Y C ================================================================== C C o set open boundary conditions C same as EXF_SET_OBCS_YZ but for Nr=1 C C ================================================================== C SUBROUTINE EXF_SET_OBCS_Y C ================================================================== IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "GRID.h" #include "EXF_PARAM.h" #include "EXF_CONSTANTS.h" C == routine arguments == _RL obcs_fld_y(1-OLy:sNy+OLy,nSx,nSy) _RL obcs_y_0(1-OLy:sNy+OLy,nSx,nSy) _RL obcs_y_1(1-OLy:sNy+OLy,nSx,nSy) CHARACTER*(MAX_LEN_FNAM) obcs_file CHARACTER*1 obcsmask LOGICAL first, changed LOGICAL useYearlyFields _RL obcs_period INTEGER count0, count1, year0, year1 _RL fac _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_OBCS C == local variables == CHARACTER*(128) obcs_file0, obcs_file1 INTEGER bi, bj, j C == end of interface == STOP 'S/R EXF_SET_OBCS_X no longer maintained' IF ( obcs_file .NE. ' ' ) THEN IF ( first ) THEN CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year0, I obcs_file, O obcs_file0, I myTime, myIter, myThid ) CALL READ_REC_YZ_RL( obcs_file0, exf_iprec_obcs, 1, & obcs_y_1, count0, myIter, myThid ) ENDIF IF (( first ) .OR. ( changed )) THEN CALL EXF_SWAPFFIELDS_YZ( obcs_y_0, obcs_y_1, 1,myThid ) CALL EXF_GETYEARLYFIELDNAME( I useYearlyFields, twoDigitYear, obcs_period, year1, I obcs_file, O obcs_file1, I myTime, myIter, myThid ) CALL READ_REC_YZ_RL( obcs_file1, exf_iprec_obcs, 1, & obcs_y_1, count1, myIter, myThid ) ENDIF DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),myBxHi(myThid) DO j = 1,sNy obcs_fld_y(j,bi,bj) = & fac *obcs_y_0(j,bi,bj) + & (exf_one - fac) *obcs_y_1(j,bi,bj) ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_OBCS */ RETURN END