C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/ocn_apply_import.F,v 1.10 2016/01/16 22:02:32 jmc Exp $
C $Name: $
#include "OCN_CPL_OPTIONS.h"
CBOP
C !ROUTINE: OCN_APPLY_IMPORT
C !INTERFACE:
SUBROUTINE OCN_APPLY_IMPORT(
I apply2AllFields, myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE OCN_APPLY_IMPORT
C | o Apply imported coupling data to forcing fields
C *==========================================================*
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "CPL_PARAMS.h"
#include "SURFACE.h"
#include "FFIELDS.h"
#include "OCNCPL.h"
#ifdef ALLOW_THSICE
# include "THSICE_VARS.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C apply2AllFields - flag: T= apply import to all coupling fields
C F= only forcing fields relevant for eta variations
C myTime - Simulation time
C myIter - Simulation timestep number
C myThid - Thread no. that called this routine.
LOGICAL apply2AllFields
_RL myTime
INTEGER myIter
INTEGER myThid
C !LOCAL VARIABLES:
C === Local arrays ===
INTEGER bi,bj,i,j
CEOP
C-- Use imported coupling data in place of input files data:
DO bj = myByLo(myThid), myByHi(myThid)
DO bi = myBxLo(myThid), myBxHi(myThid)
C-- Aplly import to all coupling fields (standard way)
IF ( apply2AllFields ) THEN
C- Dynamical forcing
IF ( useImportTau ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
fu(i,j,bi,bj) = tauX(i,j,bi,bj)
fv(i,j,bi,bj) = tauY(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
IF ( useImportSLP ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
pLoad(i,j,bi,bj) = atmSLPr(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
IF ( useImportSIce ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
sIceLoad(i,j,bi,bj) = seaIceMass(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
C- Fresh-Water & Salinity forcing
IF ( useImportFW ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
EmPmR(i,j,bi,bj) = FWFlux (i,j,bi,bj)
ENDDO
ENDDO
ENDIF
IF ( useImportFW ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
saltFlux(i,j,bi,bj)= iceSaltFlx(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
C- Heat Flux forcing
IF ( useImportHFlx ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
Qnet(i,j,bi,bj)= HeatFlux (i,j,bi,bj)
ENDDO
ENDDO
#ifdef SHORTWAVE_HEATING
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
Qsw(i,j,bi,bj) = qShortWave(i,j,bi,bj)
ENDDO
ENDDO
#endif
ENDIF
#ifdef ALLOW_THSICE
IF ( useImportThSIce .AND. useThSIce ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
iceMask (i,j,bi,bj) = sIceFrac_cpl (i,j,bi,bj)
iceHeight (i,j,bi,bj) = sIceThick_cpl(i,j,bi,bj)
snowHeight(i,j,bi,bj) = sIceSnowH_cpl(i,j,bi,bj)
Qice1 (i,j,bi,bj) = sIceQ1_cpl (i,j,bi,bj)
Qice2 (i,j,bi,bj) = sIceQ2_cpl (i,j,bi,bj)
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_THSICE */
C-- Apply only to forcings relevant for eta/surf.press variations
ELSE
IF ( useImportSIce .AND. useImportSLP ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
phi0surf(i,j,bi,bj) = atmSLPr(i,j,bi,bj)*recip_rhoConst
& + gravity*seaIceMass(i,j,bi,bj)*recip_rhoConst
ENDDO
ENDDO
ELSEIF ( useImportSIce ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
phi0surf(i,j,bi,bj) = pLoad(i,j,bi,bj)*recip_rhoConst
& + gravity*seaIceMass(i,j,bi,bj)*recip_rhoConst
ENDDO
ENDDO
ELSEIF ( useImportSLP ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
phi0surf(i,j,bi,bj) = atmSLPr(i,j,bi,bj)*recip_rhoConst
ENDDO
ENDDO
ENDIF
IF ( useImportFW ) THEN
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
EmPmR(i,j,bi,bj) = FWFlux (i,j,bi,bj)
ENDDO
ENDDO
ENDIF
C-- end if apply2AllFields / else blocks
ENDIF
C-- end bi,bj loop
ENDDO
ENDDO
C-- Fill in Halo region with valid values
#ifdef ATMOSPHERIC_LOADING
IF ( useImportSLP . AND.
& ( ocn_cplExch_DIC .OR. apply2AllFields ) )
& _EXCH_XY_RS( pLoad, myThid )
IF ( apply2AllFields ) THEN
IF ( useImportSIce ) _EXCH_XY_RS( sIceLoad, myThid )
ELSEIF ( useImportSLP .OR. useImportSIce ) THEN
_EXCH_XY_RS( phi0surf, myThid )
ENDIF
#else
IF ( useImportSLP . AND. ocn_cplExch_DIC )
& _EXCH_XY_RS( pLoad, myThid )
#endif
IF ( useImportFW ) _EXCH_XY_RS( EmPmR, myThid )
IF ( apply2AllFields ) THEN
IF ( useImportTau ) CALL EXCH_UV_XY_RS(fu,fv,.TRUE.,myThid)
IF ( useImportFW ) _EXCH_XY_RS( saltFlux, myThid )
IF ( useImportHFlx ) _EXCH_XY_RS( Qnet , myThid )
#ifdef SHORTWAVE_HEATING
IF ( useImportHFlx ) _EXCH_XY_RS( Qsw , myThid )
#endif
#ifdef ALLOW_THSICE
IF ( useImportThSIce .AND. useThSIce ) THEN
_EXCH_XY_RL( iceMask , myThid )
_EXCH_XY_RL( iceHeight , myThid )
_EXCH_XY_RL( snowHeight, myThid )
_EXCH_XY_RL( Qice1 , myThid )
_EXCH_XY_RL( Qice2 , myThid )
ENDIF
#endif /* ALLOW_THSICE */
ENDIF
RETURN
END