/[MITgcm]/MITgcm/model/src/remove_mean.F
ViewVC logotype

Annotation of /MITgcm/model/src/remove_mean.F

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


Revision 1.3 - (hide annotations) (download)
Tue Apr 28 18:30:33 2009 UTC (15 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint62, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61n, checkpoint61o, checkpoint61m, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y, HEAD
Changes since 1.2: +11 -12 lines
fix wrong type of GLOBAL_SUM in REMOVE_MEAN_RS ;
+ change macros (EXCH & GLOBAL_SUM/MAX) sufix _R4/_R8 to _RS/_RL
  when applied to _RS/_RL variable

1 jmc 1.3 C $Header: /u/gcmpack/MITgcm/model/src/remove_mean.F,v 1.2 2007/07/31 22:50:24 ce107 Exp $
2 ce107 1.2 C $Name: $
3 mlosch 1.1
4     #include "CPP_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: REMOVE_MEAN_RL
8     C !INTERFACE:
9     SUBROUTINE REMOVE_MEAN_RL(
10     I myNr, arr, arrMask, arrhFac, arrArea, arrDr,
11     I arrName, myTime,
12     I myThid )
13     C !DESCRIPTION: \bv
14     C /==========================================================\
15     C | SUBROUTINE REMOVE_MEAN_RL |
16     C | o Calculate mean of global array "_RL arr" and substract |
17     C | it from the array |
18     C \==========================================================/
19     C \ev
20    
21     IMPLICIT NONE
22    
23     C === Global data ===
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27    
28     C === Functions ====
29     LOGICAL DIFFERENT_MULTIPLE
30     EXTERNAL DIFFERENT_MULTIPLE
31    
32     C === Routine arguments ===
33     INTEGER myNr
34     _RL arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
35     _RS arrMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
36     _RS arrhFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
37     _RS arrArea(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
38     _RS arrDr(myNr)
39     CHARACTER*(*) arrName
40     _RL myTime
41     INTEGER myThid
42    
43     C#ifdef ALLOW_BALANCE_FLUXES
44     C === Local variables ====
45     INTEGER bi,bj,I,J,K
46     _RL tmpVal
47     _RL theMean
48     _RL theVol
49     _RL tmpVol
50     CHARACTER*(max_len_mbuf) msgbuf
51     CEOP
52    
53     theMean=0.
54     theVol=0.
55    
56     DO bj=myByLo(myThid),myByHi(myThid)
57     DO bi=myBxLo(myThid),myBxHi(myThid)
58     DO K=1,myNr
59     DO J=1,sNy
60     DO I=1,sNx
61     tmpVal=arr(I,J,K,bi,bj)
62     IF (arrMask(I,J,K,bi,bj).NE.0.) THEN
63     tmpVol = arrArea(I,J,bi,bj)*arrhFac(I,J,K,bi,bj)*arrDr(K)
64     theVol = theVol + tmpVol
65     theMean = theMean + tmpVol*tmpVal
66     ENDIF
67     ENDDO
68     ENDDO
69     ENDDO
70     ENDDO
71     ENDDO
72    
73 jmc 1.3 _GLOBAL_SUM_RL(theVol,myThid)
74     _GLOBAL_SUM_RL(theMean,myThid)
75 mlosch 1.1
76     IF (theVol.GT.0.) THEN
77     theMean=theMean/theVol
78    
79     DO bj=myByLo(myThid),myByHi(myThid)
80     DO bi=myBxLo(myThid),myBxHi(myThid)
81     DO K=1,myNr
82     DO J=1,sNy
83     DO I=1,sNx
84     IF (arrMask(I,J,K,bi,bj).NE.0.) THEN
85     arr(I,J,K,bi,bj) = arr(I,J,K,bi,bj) - theMean
86     ENDIF
87     ENDDO
88     ENDDO
89     ENDDO
90     ENDDO
91     ENDDO
92    
93     ENDIF
94    
95     C Print the global mean to standard output, this is a measure for
96     C the drift of the array arr
97     IF ( balancePrintMean ) THEN
98     _BEGIN_MASTER( myThid )
99 jmc 1.3 WRITE(msgbuf,'(a,a,a,e24.17)')
100     & 'REMOVE_MEAN_RL: Global mean of ',
101 mlosch 1.1 & arrName, ' = ', theMean
102 jmc 1.3 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
103 mlosch 1.1 & SQUEEZE_RIGHT , 1)
104     _END_MASTER( myThid )
105     ENDIF
106    
107     C#endif /* ALLOW_BALANCE_FLUXES */
108     RETURN
109     END
110    
111     CBOP
112     C !ROUTINE: REMOVE_MEAN_RS
113     C !INTERFACE:
114     SUBROUTINE REMOVE_MEAN_RS(
115     I myNr, arr, arrMask, arrhFac, arrArea, arrDr,
116     I arrName, myTime,
117     I myThid )
118     C !DESCRIPTION: \bv
119     C /==========================================================\
120     C | SUBROUTINE REMOVE_MEAN_RS |
121     C | o Calculate mean of global array "_RS arr" and substract |
122     C | it from the array |
123     C \==========================================================/
124     C \ev
125    
126     IMPLICIT NONE
127    
128     C === Global data ===
129     #include "SIZE.h"
130     #include "EEPARAMS.h"
131     #include "PARAMS.h"
132    
133     C === Functions ====
134     LOGICAL DIFFERENT_MULTIPLE
135     EXTERNAL DIFFERENT_MULTIPLE
136    
137     C === Routine arguments ===
138     INTEGER myNr
139     _RS arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
140     _RS arrMask(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
141     _RS arrhFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,myNr,nSx,nSy)
142     _RS arrArea(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
143     _RS arrDr(myNr)
144     CHARACTER*(*) arrName
145     _RL myTime
146     INTEGER myThid
147    
148     C#ifdef ALLOW_BALANCE_FLUXES
149     C === Local variables ====
150     INTEGER bi,bj,I,J,K
151     _RS tmpVal
152     _RS theMean
153     _RS theVol
154     _RS tmpVol
155     CHARACTER*(max_len_mbuf) msgbuf
156     CEOP
157    
158     theMean=0.
159     theVol=0.
160    
161     DO bj=myByLo(myThid),myByHi(myThid)
162     DO bi=myBxLo(myThid),myBxHi(myThid)
163     DO K=1,myNr
164     DO J=1,sNy
165     DO I=1,sNx
166     tmpVal=arr(I,J,K,bi,bj)
167     IF (arrMask(I,J,K,bi,bj).NE.0.) THEN
168     tmpVol = arrArea(I,J,bi,bj)*arrhFac(I,J,K,bi,bj)*arrDr(K)
169     theVol = theVol + tmpVol
170     theMean = theMean + tmpVol*tmpVal
171     ENDIF
172     ENDDO
173     ENDDO
174     ENDDO
175     ENDDO
176     ENDDO
177    
178 jmc 1.3 _GLOBAL_SUM_RS(theVol,myThid)
179     _GLOBAL_SUM_RS(theMean,myThid)
180 mlosch 1.1
181     IF (theVol.GT.0.) THEN
182     theMean=theMean/theVol
183    
184     DO bj=myByLo(myThid),myByHi(myThid)
185     DO bi=myBxLo(myThid),myBxHi(myThid)
186     DO K=1,myNr
187     DO J=1,sNy
188     DO I=1,sNx
189     IF (arrMask(I,J,K,bi,bj).NE.0.) THEN
190     arr(I,J,K,bi,bj) = arr(I,J,K,bi,bj) - theMean
191     ENDIF
192     ENDDO
193     ENDDO
194     ENDDO
195     ENDDO
196     ENDDO
197    
198     ENDIF
199    
200     C Print the global mean to standard output, this is a measure for
201     C the drift of the array arr
202     IF ( balancePrintMean ) THEN
203     _BEGIN_MASTER( myThid )
204 jmc 1.3 WRITE(msgbuf,'(a,a,a,e24.17)')
205     & 'REMOVE_MEAN_RS: Global mean of ',
206 mlosch 1.1 & arrName, ' = ', theMean
207 jmc 1.3 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
208 mlosch 1.1 & SQUEEZE_RIGHT , 1)
209     _END_MASTER( myThid )
210     ENDIF
211    
212     C#endif /* ALLOW_BALANCE_FLUXES */
213     RETURN
214     END

  ViewVC Help
Powered by ViewVC 1.1.22