C $Header: /u/gcmpack/MITgcm/model/src/diags_oceanic_surf_flux.F,v 1.1 2005/07/11 22:31:21 jmc Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" CBOP C !ROUTINE: DIAGS_OCEANIC_SURF_FLUX C !INTERFACE: SUBROUTINE DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE DIAGS_OCEANIC_SURF_FLUX C | o Compute Diagnostics of Surface Fluxes (ocean only) C *==========================================================* C \ev C !USES: 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" C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myTime :: Current time in simulation C myIter :: Current iteration number in simulation C myThid :: Thread number for this instance of the routine. _RL myTime INTEGER myIter INTEGER myThid CEOP #ifdef ALLOW_DIAGNOSTICS C !LOCAL VARIABLES: C i,j,bi,bj :: loop indices C ks :: surface level index LOGICAL DIAGNOSTICS_IS_ON EXTERNAL INTEGER i,j,bi,bj INTEGER ks _RL tmp1k(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL tmpFac C- Time Averages of surface fluxes IF ( usingPCoords ) THEN ks=Nr ELSE ks=1 ENDIF C- taux (surface momentum flux [Pa=N/m2], positive <-> increase u) CALL DIAGNOSTICS_SCALE_FILL(fu,foFacMom,1, & 'TAUX ',0, 1,0,1,1,myThid) C- tauy (surface momentum flux [Pa=N/m2], positive <-> increase v) CALL DIAGNOSTICS_SCALE_FILL(fv,foFacMom,1, & 'TAUY ',0, 1,0,1,1,myThid) C tFlux (=Heat flux [W/m2], positive <-> increasing Theta) IF ( DIAGNOSTICS_IS_ON('TFLUX ',myThid) ) THEN DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j = 1,sNy DO i = 1,sNx tmp1k(i,j,bi,bj) = #ifdef SHORTWAVE_HEATING & -Qsw(i,j,bi,bj)+ #endif & (surfaceForcingT(i,j,bi,bj)+surfaceForcingTice(I,J,bi,bj)) & *HeatCapacity_Cp*recip_horiVertRatio*rhoConst ENDDO ENDDO #ifdef NONLIN_FRSURF IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords) & .AND. useRealFreshWaterFlux ) THEN DO j=1,sNy DO i=1,sNx tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj) & + PmEpR(i,j,bi,bj)*rhoConstFresh & *theta(i,j,ks,bi,bj)*HeatCapacity_Cp ENDDO ENDDO ENDIF #endif /* NONLIN_FRSURF */ ENDDO ENDDO CALL DIAGNOSTICS_FILL(tmp1k,'TFLUX ',0,1,0,1,1,myThid) ENDIF C tIce (=Heat flux [W/m2] from melt/freeze of sea-ice, positive <-> increasing Theta) tmpFac = HeatCapacity_Cp*recip_horiVertRatio*rhoConst CALL DIAGNOSTICS_SCALE_FILL(surfaceForcingTice,tmpFac,1, & 'TICE ',0, 1,0,1,1,myThid) C sFlux (=salt flux [g/m2/s], positive <-> increasing Salt) IF ( DIAGNOSTICS_IS_ON('SFLUX ',myThid) ) THEN DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j = 1,sNy DO i = 1,sNx tmp1k(i,j,bi,bj) = & surfaceForcingS(i,j,bi,bj)* & recip_horiVertRatio*rhoConst ENDDO ENDDO #ifdef NONLIN_FRSURF IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords) & .AND. useRealFreshWaterFlux ) THEN DO j=1,sNy DO i=1,sNx tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj) & + PmEpR(i,j,bi,bj)*rhoConstFresh & *salt(i,j,ks,bi,bj) ENDDO ENDDO ENDIF #endif /* NONLIN_FRSURF */ ENDDO ENDDO CALL DIAGNOSTICS_FILL(tmp1k,'SFLUX ',0,1,0,1,1,myThid) ENDIF #endif /* ALLOW_DIAGNOSTICS */ RETURN END