C $Header: /u/gcmpack/MITgcm/pkg/timeave/timeave_surf_flux.F,v 1.6 2011/04/27 20:21:42 jmc Exp $ C $Name: $ #include "TIMEAVE_OPTIONS.h" SUBROUTINE TIMEAVE_SURF_FLUX( I bi, bj, myTime, myIter, myThid ) C *==========================================================* C | SUBROUTINE TIMEAVE_SURF_FLUX | C | o Time averaging routine for surface (forcing) fluxes | C *==========================================================* IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "DYNVARS.h" #include "SURFACE.h" #include "FFIELDS.h" #include "TIMEAVE_STATV.h" C == Routine arguments == C bi, bj :: current tile indices C myTime :: Current time of simulation ( s ) C myIter :: Iteration number C myThid :: Thread number for this instance of the routine. INTEGER bi, bj _RL myTime INTEGER myIter INTEGER myThid #ifdef ALLOW_TIMEAVE C == Local variables == INTEGER I, J, K _RL tmpFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy) C- Time Averages of surface fluxes IF ( usingPCoords ) THEN k=Nr ELSE k=1 ENDIF C- uFlux (surface momentum flux [Pa=N/m2], positive <-> increase u) DO j=1,sNy DO i=1,sNx tmpFld(i,j)=fu(i,j,bi,bj)*foFacMom*_maskW(i,j,k,bi,bj) ENDDO ENDDO CALL TIMEAVE_CUMUL_1T(uFluxtave,tmpFld,1, & deltaTclock, bi, bj, myThid) C- vFlux (surface momentum flux [Pa=N/m2], positive <-> increase v) DO j=1,sNy DO i=1,sNx tmpFld(i,j)=fv(i,j,bi,bj)*foFacMom*_maskS(i,j,k,bi,bj) ENDDO ENDDO CALL TIMEAVE_CUMUL_1T(vFluxtave,tmpFld,1, & deltaTclock, bi, bj, myThid) C tFlux (=Heat flux [W/m2], positive <-> increasing Theta) DO j=1,sNy DO i=1,sNx tmpFld(i,j) = #ifdef SHORTWAVE_HEATING & -Qsw(i,j,bi,bj)+ #endif & (surfaceForcingT(i,j,bi,bj)+surfaceForcingTice(I,J,bi,bj)) & *HeatCapacity_Cp*rUnit2mass ENDDO ENDDO #ifdef NONLIN_FRSURF IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords) & .AND. useRealFreshWaterFlux ) THEN DO j=1,sNy DO i=1,sNx tmpFld(i,j) = tmpFld(i,j) & + PmEpR(i,j,bi,bj)*theta(i,j,k,bi,bj)*HeatCapacity_Cp ENDDO ENDDO ENDIF #endif /* NONLIN_FRSURF */ CALL TIMEAVE_CUMUL_1T( tFluxtave, tmpFld, 1, & deltaTclock, bi, bj, myThid) C sFlux (=salt flux [psu.kg/m2/s], positive <-> increasing Theta) DO j=1,sNy DO i=1,sNx tmpFld(i,j)= & surfaceForcingS(i,j,bi,bj)*rUnit2mass ENDDO ENDDO #ifdef NONLIN_FRSURF IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords) & .AND. useRealFreshWaterFlux ) THEN DO j=1,sNy DO i=1,sNx tmpFld(i,j) = tmpFld(i,j) & + PmEpR(i,j,bi,bj)*salt(i,j,k,bi,bj) ENDDO ENDDO ENDIF #endif /* NONLIN_FRSURF */ CALL TIMEAVE_CUMUL_1T( sFluxtave, tmpFld, 1, & deltaTclock, bi, bj, myThid) #endif /* ALLOW_TIMEAVE */ RETURN END