/[MITgcm]/MITgcm/pkg/monitor/mon_ke.F
ViewVC logotype

Contents of /MITgcm/pkg/monitor/mon_ke.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.19 - (show annotations) (download)
Mon Nov 30 03:58:22 2009 UTC (14 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint61z
Changes since 1.18: +8 -4 lines
refine wVel contribution to Non-Hydrostatic KE.

1 C $Header: /u/gcmpack/MITgcm/pkg/monitor/mon_ke.F,v 1.18 2009/11/28 20:52:54 jmc Exp $
2 C $Name: $
3
4 #include "MONITOR_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: MON_KE
9
10 C !INTERFACE:
11 SUBROUTINE MON_KE(
12 I myIter, myThid )
13
14 C !DESCRIPTION:
15 C Calculates stats for Kinetic energy
16
17 C !USES:
18 IMPLICIT NONE
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "DYNVARS.h"
23 #include "MONITOR.h"
24 #include "GRID.h"
25 #include "SURFACE.h"
26
27 C !INPUT PARAMETERS:
28 INTEGER myIter, myThid
29 CEOP
30
31 C !LOCAL VARIABLES:
32 INTEGER bi,bj,i,j,k,kp1
33 _RL numPnts,theVol,tmpVal, mskp1, msk_1
34 _RL theMax,theMean,theVolMean,potEnMean
35 _RL tileMean(nSx,nSy)
36 _RL tileVlAv(nSx,nSy)
37 _RL tilePEav(nSx,nSy)
38 _RL tileVol (nSx,nSy)
39 #ifdef ALLOW_NONHYDROSTATIC
40 _RL tmpWke
41 #endif
42
43 numPnts=0.
44 theVol=0.
45 theMax=0.
46 theMean=0.
47 theVolMean=0.
48 potEnMean =0.
49
50 DO bj=myByLo(myThid),myByHi(myThid)
51 DO bi=myBxLo(myThid),myBxHi(myThid)
52 tileVol(bi,bj) = 0. _d 0
53 tileMean(bi,bj) = 0. _d 0
54 tileVlAv(bi,bj) = 0. _d 0
55 tilePEav(bi,bj) = 0. _d 0
56 DO k=1,Nr
57 kp1 = MIN(k+1,Nr)
58 mskp1 = 1.
59 IF ( k.GE.Nr ) mskp1 = 0.
60 C- Note: Present NH implementation does not account for D.w/dt at k=1.
61 C Consequently, wVel(k=1) does not contribute to NH KE (msk_1=0).
62 msk_1 = 1.
63 IF ( k.EQ. 1 ) msk_1 = 0.
64 DO j=1,sNy
65 DO i=1,sNx
66 tileVol(bi,bj) = tileVol(bi,bj)
67 & + rA(i,j,bi,bj)*deepFac2C(k)
68 & *rhoFacC(k)*drF(k)*_hFacC(i,j,k,bi,bj)
69
70 C- Vector Invariant form (like in pkg/mom_vecinv/mom_vi_calc_ke.F)
71 c tmpVal=0.25*( uVel( i , j ,k,bi,bj)*uVel( i , j ,k,bi,bj)
72 c & +uVel(i+1, j ,k,bi,bj)*uVel(i+1, j ,k,bi,bj)
73 c & +vVel( i , j ,k,bi,bj)*vVel( i , j ,k,bi,bj)
74 c & +vVel( i ,j+1,k,bi,bj)*vVel( i ,j+1,k,bi,bj) )
75 c tileVlAv(bi,bj) = tileVlAv(bi,bj)
76 c & +tmpVal*rA(i,j,bi,bj)*drF(k)*hFacC(i,j,k,bi,bj)
77
78 C- Energy conservative form (like in pkg/mom_fluxform/mom_calc_ke.F)
79 C this is the safe way to check the energy conservation
80 C with no assumption on how grid spacing & area are defined.
81 tmpVal=0.25*(
82 & uVel( i ,j,k,bi,bj)*uVel( i ,j,k,bi,bj)
83 & *dyG( i ,j,bi,bj)*dxC( i ,j,bi,bj)*_hFacW( i ,j,k,bi,bj)
84 & +uVel(i+1,j,k,bi,bj)*uVel(i+1,j,k,bi,bj)
85 & *dyG(i+1,j,bi,bj)*dxC(i+1,j,bi,bj)*_hFacW(i+1,j,k,bi,bj)
86 & +vVel(i, j ,k,bi,bj)*vVel(i, j ,k,bi,bj)
87 & *dxG(i, j ,bi,bj)*dyC(i, j ,bi,bj)*_hFacS(i, j ,k,bi,bj)
88 & +vVel(i,j+1,k,bi,bj)*vVel(i,j+1,k,bi,bj)
89 & *dxG(i,j+1,bi,bj)*dyC(i,j+1,bi,bj)*_hFacS(i,j+1,k,bi,bj)
90 & )
91 tileVlAv(bi,bj) = tileVlAv(bi,bj)
92 & + tmpVal*deepFac2C(k)*rhoFacC(k)*drF(k)
93 tmpVal= tmpVal*_recip_hFacC(i,j,k,bi,bj)*recip_rA(i,j,bi,bj)
94
95 #ifdef ALLOW_NONHYDROSTATIC
96 IF ( nonHydrostatic ) THEN
97 tmpWke = 0.25*
98 & ( wVel(i,j, k, bi,bj)*wVel(i,j, k, bi,bj)*msk_1
99 & *deepFac2F( k )*rhoFacF( k )
100 & +wVel(i,j,kp1,bi,bj)*wVel(i,j,kp1,bi,bj)*mskp1
101 & *deepFac2F(kp1)*rhoFacF(kp1)
102 & )*maskC(i,j,k,bi,bj)
103 tileVlAv(bi,bj) = tileVlAv(bi,bj)
104 & + tmpWke*rA(i,j,bi,bj)*drF(k)*_hFacC(i,j,k,bi,bj)
105 tmpVal = tmpVal
106 & + tmpWke*recip_deepFac2C(k)*recip_rhoFacC(k)
107 ENDIF
108 #endif
109
110 theMax=MAX(theMax,tmpVal)
111 IF (tmpVal.NE.0.) THEN
112 tileMean(bi,bj)=tileMean(bi,bj)+tmpVal
113 numPnts=numPnts+1.
114 ENDIF
115
116 ENDDO
117 ENDDO
118 ENDDO
119 C- Potential Energy (external mode):
120 DO j=1,sNy
121 DO i=1,sNx
122 tmpVal = 0.5 _d 0*Bo_surf(i,j,bi,bj)
123 & *etaN(i,j,bi,bj)*etaN(i,j,bi,bj)
124 C- jmc: if geoid not flat (phi0surf), needs to add this term.
125 C not sure for atmos/ocean in P ; or atmos. loading in ocean-Z
126 tmpVal = tmpVal
127 & + phi0surf(i,j,bi,bj)*etaN(i,j,bi,bj)
128 tilePEav(bi,bj) = tilePEav(bi,bj)
129 & + tmpVal*rA(i,j,bi,bj)*deepFac2F(1)*maskH(i,j,bi,bj)
130 c tmpVal = etaN(i,j,bi,bj)
131 c & + phi0surf(i,j,bi,bj)*recip_Bo(i,j,bi,bj)
132 c tilePEav(bi,bj) = tilePEav(bi,bj)
133 c & + 0.5 _d 0*Bo_surf(i,j,bi,bj)*tmpVal*tmpVal
134 c & *rA(i,j,bi,bj)*maskH(i,j,bi,bj)
135 ENDDO
136 ENDDO
137 c theMean = theMean + tileMean(bi,bj)
138 c theVol = theVol + tileVol(bi,bj)
139 c theVolMean = theVolMean + tileVlAv(bi,bj)
140 c potEnMean = potEnMean + tilePEav(bi,bj)
141 C- end bi,bj loops
142 ENDDO
143 ENDDO
144 _GLOBAL_SUM_RL(numPnts,myThid)
145 _GLOBAL_MAX_RL(theMax,myThid)
146 c _GLOBAL_SUM_RL(theMean,myThid)
147 c _GLOBAL_SUM_RL(theVol,myThid)
148 c _GLOBAL_SUM_RL(theVolMean,myThid)
149 c _GLOBAL_SUM_RL(potEnMean, myThid)
150 CALL GLOBAL_SUM_TILE_RL( tileMean, theMean , myThid )
151 CALL GLOBAL_SUM_TILE_RL( tileVol , theVol , myThid )
152 CALL GLOBAL_SUM_TILE_RL( tileVlAv, theVolMean, myThid )
153 CALL GLOBAL_SUM_TILE_RL( tilePEav, potEnMean , myThid )
154 IF (numPnts.NE.0.) theMean=theMean/numPnts
155 IF (theVol.NE.0.) THEN
156 theVolMean=theVolMean/theVol
157 potEnMean = potEnMean/theVol
158 ENDIF
159
160 C-- Print stats for (barotropic) Potential Energy:
161 CALL MON_SET_PREF('pe_b',myThid)
162 CALL MON_OUT_RL(mon_string_none,potEnMean,
163 & mon_foot_mean,myThid)
164
165 C-- Print stats for KE
166 CALL MON_SET_PREF('ke',myThid)
167 CALL MON_OUT_RL(mon_string_none,theMax,mon_foot_max,myThid)
168 c CALL MON_OUT_RL(mon_string_none,theMean,mon_foot_mean,myThid)
169 CALL MON_OUT_RL(mon_string_none,theVolMean,
170 & mon_foot_mean,myThid)
171 CALL MON_OUT_RL(mon_string_none,theVol,
172 & mon_foot_vol,myThid)
173
174 RETURN
175 END
176
177 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22