/[MITgcm]/MITgcm/pkg/timeave/timeave_statvars.F
ViewVC logotype

Diff of /MITgcm/pkg/timeave/timeave_statvars.F

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

revision 1.3 by jmc, Thu Jan 3 16:25:44 2002 UTC revision 1.10 by dimitri, Thu Oct 23 07:14:49 2003 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2  C $Name$  C $Name$
3  #include "CPP_OPTIONS.h"  #include "TIMEAVE_OPTIONS.h"
4    
5        SUBROUTINE TIMEAVE_STATVARS(        SUBROUTINE TIMEAVE_STATVARS(
6       I     myTime, myIter, bi, bj, myThid)       I     myTime, myIter, bi, bj, myThid)
# Line 17  C     == Global variables === Line 17  C     == Global variables ===
17  #include "PARAMS.h"  #include "PARAMS.h"
18  #include "DYNVARS.h"  #include "DYNVARS.h"
19  #include "GRID.h"  #include "GRID.h"
20    #include "FFIELDS.h"
21  #include "TIMEAVE_STATV.h"  #include "TIMEAVE_STATV.h"
22    
23        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
# Line 33  C     myTime - Current time of simulatio Line 34  C     myTime - Current time of simulatio
34  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
35    
36  C     == Local variables ==  C     == Local variables ==
37        INTEGER K        INTEGER I, J, K
38        _RL DDTT        _RL DDTT
39          _RL tempArray (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
40    
41  C-    Initialize fields for the first call ever  C-    Initialize fields for the first call ever
42        IF ( myIter .EQ. nIter0 ) THEN        IF ( myIter .EQ. nIter0 ) THEN
43            CALL TIMEAVE_RESET(uFluxtave, 1,  bi, bj, myThid)
44            CALL TIMEAVE_RESET(vFluxtave, 1,  bi, bj, myThid)
45            CALL TIMEAVE_RESET(tFluxtave, 1,  bi, bj, myThid)
46            CALL TIMEAVE_RESET(sFluxtave, 1,  bi, bj, myThid)
47          CALL TIMEAVE_RESET(etatave,   1,  bi, bj, myThid)          CALL TIMEAVE_RESET(etatave,   1,  bi, bj, myThid)
48          CALL TIMEAVE_RESET(thetatave, Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(thetatave, Nr, bi, bj, myThid)
49          CALL TIMEAVE_RESET(salttave,  Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(salttave,  Nr, bi, bj, myThid)
# Line 49  C-    Initialize fields for the first ca Line 55  C-    Initialize fields for the first ca
55          CALL TIMEAVE_RESET(TTtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(TTtave,    Nr, bi, bj, myThid)
56          CALL TIMEAVE_RESET(UUtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(UUtave,    Nr, bi, bj, myThid)
57          CALL TIMEAVE_RESET(VVtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(VVtave,    Nr, bi, bj, myThid)
58            CALL TIMEAVE_RESET(UVtave,    Nr, bi, bj, myThid)
59  c       CALL TIMEAVE_RESET(KEtave,    Nr, bi, bj, myThid)  c       CALL TIMEAVE_RESET(KEtave,    Nr, bi, bj, myThid)
60          CALL TIMEAVE_RESET(UTtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(UTtave,    Nr, bi, bj, myThid)
61          CALL TIMEAVE_RESET(VTtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(VTtave,    Nr, bi, bj, myThid)
62          CALL TIMEAVE_RESET(WTtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(WTtave,    Nr, bi, bj, myThid)
63            CALL TIMEAVE_RESET(TdiffRtave,Nr, bi, bj, myThid)
64    #ifndef DISABLE_MOM_VECINV
65            CALL TIMEAVE_RESET(uZetatave, Nr, bi, bj, myThid)
66            CALL TIMEAVE_RESET(vZetatave, Nr, bi, bj, myThid)
67    #endif
68          CALL TIMEAVE_RESET(phiHydtave,Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(phiHydtave,Nr, bi, bj, myThid)
69            CALL TIMEAVE_RESET(phiHydLowtave,1, bi, bj, myThid)
70            CALL TIMEAVE_RESET(phiHydLow2Tave,1, bi, bj, myThid)
71          CALL TIMEAVE_RESET(ConvectCountTave,Nr,bi,bj,myThid)          CALL TIMEAVE_RESET(ConvectCountTave,Nr,bi,bj,myThid)
72  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
73          CALL TIMEAVE_RESET(hUtave,    Nr, bi, bj, myThid)          CALL TIMEAVE_RESET(hUtave,    Nr, bi, bj, myThid)
# Line 69  c       CALL TIMEAVE_RESET(hFacStave, Nr Line 83  c       CALL TIMEAVE_RESET(hFacStave, Nr
83        ENDIF        ENDIF
84                
85  C--   Cumulate state-variables with Half or Full time step :  C--   Cumulate state-variables with Half or Full time step :
86        IF ( myIter .EQ. nIter0 .OR.        IF ( myIter .EQ. nIter0 ) THEN
87            DDTT = deltaTclock*(1. _d 0 - tave_lastIter)
88          ELSEIF (
89       &  DIFFERENT_MULTIPLE(taveFreq, myTime, myTime-deltaTClock)) THEN       &  DIFFERENT_MULTIPLE(taveFreq, myTime, myTime-deltaTClock)) THEN
90         DDTT=0.5*deltaTclock          DDTT = deltaTclock*tave_lastIter
91          ELSE
92            DDTT = deltaTclock
93          ENDIF
94    
95          IF ( DDTT .NE. 0. _d 0) THEN
96    
97    C-    Time Averages of surface fluxes
98          IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN
99           k=Nr
100        ELSE        ELSE
101         DDTT=deltaTclock         k=1
102        ENDIF        ENDIF
103    
104    C     uFlux
105          DO j=1,sNy
106           DO i=1,sNx
107            tempArray(i,j,bi,bj)=fu(i,j,bi,bj)*foFacMom*_maskW(i,j,k,bi,bj)
108           ENDDO
109          ENDDO
110          CALL TIMEAVE_CUMULATE(uFluxtave,tempArray,1,DDTT,bi,bj,myThid)
111    
112    C     vFlux
113          DO j=1,sNy
114           DO i=1,sNx
115            tempArray(i,j,bi,bj)=fv(i,j,bi,bj)*foFacMom*_maskS(i,j,k,bi,bj)
116           ENDDO
117          ENDDO
118          CALL TIMEAVE_CUMULATE(vFluxtave,tempArray,1,DDTT,bi,bj,myThid)
119    
120    C     tFlux
121          DO j=1,sNy
122           DO i=1,sNx
123            tempArray(i,j,bi,bj)=maskC(i,j,k,bi,bj)*(
124    #ifdef SHORTWAVE_HEATING
125         &   -Qsw(i,j,bi,bj)+
126    #endif
127         &   (surfaceTendencyT(i,j,bi,bj)+surfaceTendencyTice(I,J,bi,bj))*
128         &   HeatCapacity_Cp*
129         &   recip_horiVertRatio*rhoConst*drF(k)*hFacC(i,j,k,bi,bj))
130           ENDDO
131          ENDDO
132          CALL TIMEAVE_CUMULATE(tFluxtave,tempArray,1,DDTT,bi, bj, myThid)
133    
134    C     sFlux
135          DO j=1,sNy
136           DO i=1,sNx
137            tempArray(i,j,bi,bj)=maskC(i,j,k,bi,bj)*
138         &   surfaceTendencyS(i,j,bi,bj)*
139         &   recip_horiVertRatio*rhoConst*drF(k)*hFacC(i,j,k,bi,bj)
140           ENDDO
141          ENDDO
142          CALL TIMEAVE_CUMULATE(sFluxtave,tempArray,1,DDTT,bi,bj,myThid)
143    
144  C-    Time Averages of single fields (no hFactor)  C-    Time Averages of single fields (no hFactor)
145        CALL TIMEAVE_CUMULATE(etatave,  etaN,  1 , DDTT, bi, bj, myThid)        CALL TIMEAVE_CUMULATE(etatave,  etaN,  1 , DDTT, bi, bj, myThid)
146        CALL TIMEAVE_CUMULATE(thetatave,theta, Nr, DDTT, bi, bj, myThid)        CALL TIMEAVE_CUMULATE(thetatave,theta, Nr, DDTT, bi, bj, myThid)
147        CALL TIMEAVE_CUMULATE(salttave, salt,  Nr, DDTT, bi, bj, myThid)        CALL TIMEAVE_CUMULATE(salttave, salt,  Nr, DDTT, bi, bj, myThid)
148        CALL TIMEAVE_CUMULATE(uVeltave, uVel,  Nr, DDTT, bi, bj, myThid)        CALL TIMEAVE_CUMULATE(uVeltave, uVel,  Nr, DDTT, bi, bj, myThid)
149        CALL TIMEAVE_CUMULATE(vVeltave, vVel,  Nr, DDTT, bi, bj, myThid)        CALL TIMEAVE_CUMULATE(vVeltave, vVel,  Nr, DDTT, bi, bj, myThid)
150          CALL TIMEAVE_CUMULATE(wVeltave, wVel,  Nr, DDTT, bi, bj, myThid)
151    
152  C-    Time Averages of "double" fields (no hFactor)  C-    Time Averages of "double" fields (no hFactor)
153        CALL TIMEAVE_CUMUL_2V(Eta2tave, etaN,etaN, 1,  0,        CALL TIMEAVE_CUMUL_2V(Eta2tave, etaN,etaN, 1,  0,
# Line 92  C-    Time Averages of "double" fields ( Line 158  C-    Time Averages of "double" fields (
158       &     DDTT, bi, bj, myThid)       &     DDTT, bi, bj, myThid)
159        CALL TIMEAVE_CUMUL_2V(VVtave, vVel,  vVel, Nr, 0,        CALL TIMEAVE_CUMUL_2V(VVtave, vVel,  vVel, Nr, 0,
160       &     DDTT, bi, bj, myThid)       &     DDTT, bi, bj, myThid)
161          CALL TIMEAVE_CUMUL_2V(UVtave, uVel,  vVel, Nr, 12,
162         &     DDTT, bi, bj, myThid)
163  c     CALL TIMEAVE_CUMUL_KE(KEtave, uVel,  vVel, Nr,  c     CALL TIMEAVE_CUMUL_KE(KEtave, uVel,  vVel, Nr,
164  c    &     DDTT, bi, bj, myThid)  c    &     DDTT, bi, bj, myThid)
165          CALL TIMEAVE_CUMUL_2V(WTtave, theta, wVel, Nr, 3,
166         &     DDTT, bi, bj, myThid)
167    
168  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
169    
# Line 127  C-    Keep record of how much time has b Line 197  C-    Keep record of how much time has b
197          TimeAve_half(k,bi,bj)=TimeAve_half(k,bi,bj)+DDTT          TimeAve_half(k,bi,bj)=TimeAve_half(k,bi,bj)+DDTT
198        ENDDO        ENDDO
199    
200  C- CAUTIOUS : wVel and theta are not synchronously updated during the model  C-- end if DDTT ...
201  C   time-stepping, so that the time-average diagnostic of the cross product        ENDIF
 C   W*Theta is not perfectly accurate.  
202    
203  C-    Time Averages of "intermediate" fields (no hFactor)  C-    Time Averages of "intermediate" fields (no hFactor)
204        IF ( myIter .NE. nIter0 ) THEN        IF ( myIter .NE. nIter0 ) THEN
205          CALL TIMEAVE_CUMULATE(wVeltave, wVel, Nr, deltaTclock,          CALL TIMEAVE_CUMULATE(phiHydtave, totPhihyd,  Nr,
206       &                          bi, bj, myThid)       &                                   deltaTclock, bi, bj, myThid)
207          CALL TIMEAVE_CUMUL_2V(WTtave, theta, wVel, Nr, 3,          CALL TIMEAVE_CUMULATE(phiHydLowtave, phiHydLow, 1,
208       &                        deltaTclock, bi, bj, myThid)       &                                   deltaTclock, bi, bj, myThid)
209            CALL TIMEAVE_CUMUL_2V(phiHydLow2Tave,
210         &       phiHydLow,phiHydLow, 1,  0, deltaTclock, bi, bj, myThid)
211          DO K=1,Nr          DO K=1,Nr
212           TimeAve_full(k,bi,bj)=TimeAve_full(k,bi,bj)+deltaTclock           TimeAve_full(k,bi,bj)=TimeAve_full(k,bi,bj)+deltaTclock
213          ENDDO          ENDDO

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.22