C $Header: /u/gcmpack/MITgcm/pkg/offline/offline_get_diffus.F,v 1.2 2015/07/19 18:17:49 jmc Exp $
C $Name: $
#include "OFFLINE_OPTIONS.h"
#ifdef ALLOW_DIC
#include "DIC_OPTIONS.h"
#endif
#ifdef ALLOW_DARWIN
#include "DARWIN_OPTIONS.h"
#endif
CBOP
C !ROUTINE: OFFLINE_GET_SURFFORCING
C !INTERFACE:
SUBROUTINE OFFLINE_GET_DIFFUS( myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE OFFLINE_GET_DIFFUS
C | o Interpolate in time diffusivity fields that have
C | been loaded from file
C *==========================================================*
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "FFIELDS.h"
#include "OFFLINE.h"
#include "OFFLINE_SWITCH.h"
#ifdef ALLOW_GMREDI
# include "GMREDI.h"
#endif
#ifdef ALLOW_KPP
# include "KPP.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myTime :: current time in simulation
C myIter :: current iteration number in simulation
C myThid :: my Thread Id number
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
C !LOCAL VARIABLES:
INTEGER i,j,k
INTEGER bi,bj
_RL aWght, bWght
#ifdef ALLOW_AUTODIFF
_RL locTime
INTEGER intimeP, intime0, intime1
#endif /* ALLOW_AUTODIFF */
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
#ifdef ALLOW_AUTODIFF
C-- Re-compute the weights (bWght, aWght) to simplify dependencies
C (since they are not stored on tapes)
locTime = myTime - offlineTimeOffset
CALL GET_PERIODIC_INTERVAL(
O intimeP, intime0, intime1, bWght, aWght,
I offlineForcingCycle, offlineForcingPeriod,
I deltaToffline, locTime, myThid )
#endif /* ALLOW_AUTODIFF */
C-- Interpolate Diffusivity Components:
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
#ifndef ALLOW_AUTODIFF
bWght = offline_Wght(1,bi,bj)
aWght = offline_Wght(2,bi,bj)
#endif /* ndef ALLOW_AUTODIFF */
IF ( Wvelfile .NE. ' ' .AND. myIter.EQ.nIter0 ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
wVel(i,j,k,bi,bj) = bWght*wvel0(i,j,k,bi,bj)
& + aWght*wvel1(i,j,k,bi,bj)
ENDDO
ENDDO
ENDDO
ENDIF
IF ( offlineLoadConvec ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
IVDConvCount(i,j,k,bi,bj) = bWght*conv0(i,j,k,bi,bj)
& + aWght*conv1(i,j,k,bi,bj)
ENDDO
ENDDO
ENDDO
ENDIF
#ifdef ALLOW_GMREDI
IF ( offlineLoadGMRedi ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
Kwx(i,j,k,bi,bj) = bWght*gmkx0(i,j,k,bi,bj)
& + aWght*gmkx1(i,j,k,bi,bj)
Kwy(i,j,k,bi,bj) = bWght*gmky0(i,j,k,bi,bj)
& + aWght*gmky1(i,j,k,bi,bj)
Kwz(i,j,k,bi,bj) = bWght*gmkz0(i,j,k,bi,bj)
& + aWght*gmkz1(i,j,k,bi,bj)
ENDDO
ENDDO
ENDDO
ENDIF
#endif
#ifdef ALLOW_KPP
IF ( offlineLoadKPP ) THEN
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
KPPdiffKzS(i,j,k,bi,bj) = bWght*kdfs0(i,j,k,bi,bj)
& + aWght*kdfs1(i,j,k,bi,bj)
C-- Note: for convenience, the array KPPghat will contain
C the product ghat*diffKzS (and not ghat alone).
KPPghat(i,j,k,bi,bj) = bWght*kght0(i,j,k,bi,bj)
& + aWght*kght1(i,j,k,bi,bj)
ENDDO
ENDDO
ENDDO
ENDIF
#endif
C-- Interpolate surface forcing
#if ( (defined ALLOW_DIC) (defined ALLOW_DARWIN) )
#ifdef ALLOW_OLD_VIRTUALFLUX
IF ( SFluxFile.NE.' ' ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
surfaceForcingS(i,j,bi,bj) = bWght*sflx0(i,j,bi,bj)
& + aWght*sflx1(i,j,bi,bj)
surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)
& *mass2rUnit
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_OLD_VIRTUALFLUX */
#endif /* ALLOW_DIC or ALLOW_DARWIN */
C-- kept from older version:
c surfaceForcingT(i,j,bi,bj) = bWght*hflx0(i,j,bi,bj)
c & + aWght*hflx1(i,j,bi,bj)
c surfaceForcingT(i,j,bi,bj) = surfaceForcingT(i,j,bi,bj)
c & *recip_Cp*mass2rUnit
c ICEM(i,j,bi,bj) = bWght*icem0(i,j,bi,bj)
c & + aWght*icem1(i,j,bi,bj)
C-- end bi,bj loops
ENDDO
ENDDO
RETURN
END