C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/ocn_apply_import.F,v 1.3 2004/07/26 20:13:47 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 "OCNCPL.h" #include "FFIELDS.h" #include "SURFACE.h" c #include "GRID.h" c #include "DYNVARS.h" 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 #ifdef ATMOSPHERIC_LOADING 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 #endif /* ATMOSPHERIC_LOADING */ 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 C-- Apply only to forcings relevant for eta/surf.press variations ELSE #ifdef ATMOSPHERIC_LOADING 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 #endif /* ATMOSPHERIC_LOADING */ 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 ( apply2AllFields ) THEN IF ( useImportSLP ) _EXCH_XY_R4( pload, myThid ) IF ( useImportSIce) _EXCH_XY_R4( sIceload, myThid ) ELSEIF ( useImportSLP .OR. useImportSIce ) THEN _EXCH_XY_R4( phi0surf, myThid ) ENDIF #endif IF ( useImportFW ) _EXCH_XY_R4(EmPmR, myThid ) IF ( apply2AllFields ) THEN IF (useImportTau ) CALL EXCH_UV_XY_RS(fu,fv,.TRUE.,myThid) IF (useImportFW ) _EXCH_XY_R4(saltFlux, myThid ) IF (useImportHFlx) _EXCH_XY_R4(Qnet , myThid ) #ifdef SHORTWAVE_HEATING IF (useImportHFlx) _EXCH_XY_R4(Qsw , myThid ) #endif ENDIF RETURN END