C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/ocn_apply_import.F,v 1.7 2009/04/28 18:44:21 jmc Exp $
C $Name: $
#include "PACKAGES_CONFIG.h"
#include "CPP_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 "OCNIDS.h"
#include "OCNCPL.h"
#include "FFIELDS.h"
#include "SURFACE.h"
c #include "GRID.h"
c #include "DYNVARS.h"
#ifdef ALLOW_DIC
# include "DIC_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_DIC
C- Carbon/DIC exchanges
IF ( useImportFice ) THEN
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
fice(i,j,bi,bj)= fracIce(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
IF ( useImportCO2 ) THEN
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
AtmospCO2(i,j,bi,bj)= airCO2(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
IF ( useImportWSpd ) THEN
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
wind(i,j,bi,bj)= surfWSpeed(i,j,bi,bj)
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_DIC */
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.
& ( ocnCpl_exchange_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. ocnCpl_exchange_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_DIC
IF ( useImportFice ) _EXCH_XY_RL(fice , myThid )
IF ( useImportCO2 ) _EXCH_XY_RL(AtmospCO2 , myThid )
IF ( useImportWSpd ) _EXCH_XY_RL(wind , myThid )
#endif
ENDIF
RETURN
END