C $Header: /u/gcmpack/MITgcm/pkg/atm_compon_interf/atm_store_aim_wndstr.F,v 1.2 2015/11/12 01:01:57 jmc Exp $ C $Name: $ #include "ATM_CPL_OPTIONS.h" #ifdef ALLOW_AIM # include "AIM_OPTIONS.h" #endif CBOP C !ROUTINE: ATM_STORE_AIM_WNDSTR C !INTERFACE: SUBROUTINE ATM_STORE_AIM_WNDSTR( I bi, bj, I myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE ATM_STORE_AIM_WNDSTR C | o Routine for saving AIM surface wind-stress fields C | for export to coupling layer. C *==========================================================* C | This version interfaces to the AIM package. C *==========================================================* C !USES: IMPLICIT NONE C == Global variables == #ifdef ALLOW_AIM # include "AIM_SIZE.h" #else # include "SIZE.h" #endif #include "EEPARAMS.h" #include "PARAMS.h" #include "CPL_PARAMS.h" #include "GRID.h" #include "DYNVARS.h" #ifdef ALLOW_AIM # include "AIM2DYN.h" c #include "AIM_FFIELDS.h" #endif #ifdef ALLOW_THSICE # include "THSICE_PARAMS.h" # include "THSICE_VARS.h" #endif C == Global variables for coupling interface == #include "ATMCPL.h" C !INPUT/OUTPUT PARAMETERS: C bi, bj :: Tile indices C myTime :: Current time in simulation (s) C myIter :: Current iteration number C myThid :: My Thread Id. number INTEGER bi, bj _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_AIM C !LOCAL VARIABLES: C i, j :: Loop counters C ks :: surface level index INTEGER i, j, ks _RL cplTimeFraction _RL uStr_tmp, vStr_tmp C o Accumulate momentum surface flux that will be exported to the C coupling layer. Momentum flux is in N/m^2 with same sign as the wind. cplTimeFraction = 1. _d 0 / DFLOAT(cplSendFrq_iter) ks = 1 tauXTime(bi,bj) = tauXTime(bi,bj) + cplTimeFraction tauYTime(bi,bj) = tauYTime(bi,bj) + cplTimeFraction #ifdef ALLOW_THSICE IF ( useThSIce .AND. stressReduction.GT. 0. _d 0 ) THEN C-- Reduce wind stress applied to ocean where sea-ice is present DO j=1,sNy DO i=1,sNx c IF ( aim_landFr(i-1,j,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN IF ( hFacW(i,j,ks,bi,bj) .NE. 0. ) THEN uStr_tmp = & ( aim_drag(i-1,j,bi,bj) & *(1. _d 0 - iceMask(i-1,j,bi,bj)*stressReduction) & + aim_drag( i ,j,bi,bj) & *(1. _d 0 - iceMask( i ,j,bi,bj)*stressReduction) & )* 0.5 _d 0 * uVel(i,j,ks,bi,bj) tauX(i,j,bi,bj) = tauX(i,j,bi,bj) & + uStr_tmp*cplTimeFraction ENDIF ENDDO ENDDO DO j=1,sNy DO i=1,sNx c IF ( aim_landFr(i,j-1,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN IF ( hFacS(i,j,ks,bi,bj) .NE. 0. ) THEN vStr_tmp = & ( aim_drag(i,j-1,bi,bj) & *(1. _d 0 - iceMask(i,j-1,bi,bj)*stressReduction) & + aim_drag(i, j ,bi,bj) & *(1. _d 0 - iceMask(i, j ,bi,bj)*stressReduction) & )* 0.5 _d 0 * vVel(i,j,ks,bi,bj) tauY(i,j,bi,bj) = tauY(i,j,bi,bj) & + vStr_tmp*cplTimeFraction ENDIF ENDDO ENDDO ELSE #else /*ALLOW_THSICE*/ IF (.TRUE.) THEN #endif /*ALLOW_THSICE*/ DO j=1,sNy DO i=1,sNx c IF ( aim_landFr(i-1,j,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN IF ( hFacW(i,j,ks,bi,bj) .NE. 0. ) THEN uStr_tmp = & ( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) ) & * 0.5 _d 0 * uVel(i,j,ks,bi,bj) tauX(i,j,bi,bj) = tauX(i,j,bi,bj) & + uStr_tmp*cplTimeFraction ENDIF ENDDO ENDDO DO j=1,sNy DO i=1,sNx c IF ( aim_landFr(i,j-1,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN IF ( hFacS(i,j,ks,bi,bj) .NE. 0. ) THEN vStr_tmp = & ( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) ) & * 0.5 _d 0 * vVel(i,j,ks,bi,bj) tauY(i,j,bi,bj) = tauY(i,j,bi,bj) & + vStr_tmp*cplTimeFraction ENDIF ENDDO ENDDO ENDIF #endif /* ALLOW_AIM */ RETURN END