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

Contents of /MITgcm/model/src/diags_oceanic_surf_flux.F

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


Revision 1.9 - (show annotations) (download)
Sat Oct 25 20:40:51 2008 UTC (15 years, 6 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint61f, checkpoint61g, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q
Changes since 1.8: +116 -1 lines
fix REAL4_IS_SLOW, fix a few diagnostics, but probably not all: copy
_RS surface flux fields to RL field before calling DIAGNOSTICS_FILL when
REAL4_IS_SLOW is undefined

1 C $Header: /u/gcmpack/MITgcm/model/src/diags_oceanic_surf_flux.F,v 1.8 2007/10/01 13:28:59 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: DIAGS_OCEANIC_SURF_FLUX
9 C !INTERFACE:
10 SUBROUTINE DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE DIAGS_OCEANIC_SURF_FLUX
15 C | o Compute Diagnostics of Surface Fluxes (ocean only)
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21
22 C == Global variables ===
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "GRID.h"
27 #include "DYNVARS.h"
28 #include "SURFACE.h"
29 #include "FFIELDS.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C == Routine arguments ==
33 C myTime :: Current time in simulation
34 C myIter :: Current iteration number in simulation
35 C myThid :: Thread number for this instance of the routine.
36 _RL myTime
37 INTEGER myIter
38 INTEGER myThid
39 CEOP
40
41 #ifdef ALLOW_DIAGNOSTICS
42 C !LOCAL VARIABLES:
43 C i,j,bi,bj :: loop indices
44 C ks :: surface level index
45 LOGICAL DIAGNOSTICS_IS_ON
46 EXTERNAL DIAGNOSTICS_IS_ON
47 INTEGER i,j,bi,bj
48 INTEGER ks
49 _RL tmp1k(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
50 _RL tmpFac
51
52 C- Time Averages of surface fluxes
53 IF ( usingPCoords ) THEN
54 ks=Nr
55 ELSE
56 ks=1
57 ENDIF
58
59 #ifdef REAL4_IS_SLOW
60 C- taux (surface momentum flux [Pa=N/m2], positive <-> increase u)
61 CALL DIAGNOSTICS_SCALE_FILL( fu,foFacMom,1,
62 & 'oceTAUX ',0, 1,0,1,1,myThid )
63
64 C- tauy (surface momentum flux [Pa=N/m2], positive <-> increase v)
65 CALL DIAGNOSTICS_SCALE_FILL( fv,foFacMom,1,
66 & 'oceTAUY ',0, 1,0,1,1,myThid )
67
68 C- pLoad (Atmospheric pressure loading [Pa=N/m2])
69 CALL DIAGNOSTICS_FILL( pLoad, 'atmPload',0,1,0,1,1,myThid )
70
71 C- sea-ice loading (expressed in Mass of ice+snow / area unit, [kg/m2])
72 CALL DIAGNOSTICS_FILL( sIceLoad,'sIceLoad',0,1,0,1,1,myThid )
73
74 C- net Fresh Water flux into the ocean (+=down), [kg/m2/s]
75 tmpFac = -1. _d 0
76 CALL DIAGNOSTICS_SCALE_FILL( EmPmR,tmpFac,1,
77 & 'oceFWflx',0, 1,0,1,1,myThid )
78
79 C- net Salt flux into the ocean (+=down), [psu.kg/m2/s ~ g/m2/s]
80 tmpFac = -1. _d 0
81 CALL DIAGNOSTICS_SCALE_FILL( saltFlux,tmpFac,1,
82 & 'oceSflux',0, 1,0,1,1,myThid )
83
84 C- Qnet (= net heat flux into the ocean, +=down, [W/m2])
85 tmpFac = -1. _d 0
86 CALL DIAGNOSTICS_SCALE_FILL( Qnet,tmpFac,1,
87 & 'oceQnet ',0, 1,0,1,1,myThid )
88
89 #ifdef SHORTWAVE_HEATING
90 C- Qsw (= net short-wave into the ocean, +=down, [W/m2])
91 tmpFac = -1. _d 0
92 CALL DIAGNOSTICS_SCALE_FILL( Qsw,tmpFac,1,
93 & 'oceQsw ',0, 1,0,1,1,myThid )
94 #endif
95 #else /* _RS -> Real*4, requires copying to a Real*8 field */
96 C- taux (surface momentum flux [Pa=N/m2], positive <-> increase u)
97 IF ( DIAGNOSTICS_IS_ON('oceTAUX ',myThid) ) THEN
98 CALL RS2RL_XY( fu, tmp1k, myTime, myIter, myThid )
99 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,foFacMom,1,
100 & 'oceTAUX ',0, 1,0,1,1,myThid )
101 ENDIF
102
103 C- tauy (surface momentum flux [Pa=N/m2], positive <-> increase v)
104 IF ( DIAGNOSTICS_IS_ON('oceTAUY ',myThid) ) THEN
105 CALL RS2RL_XY( fv, tmp1k, myTime, myIter, myThid )
106 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,foFacMom,1,
107 & 'oceTAUY ',0, 1,0,1,1,myThid )
108 ENDIF
109
110 C- pLoad (Atmospheric pressure loading [Pa=N/m2])
111 IF ( DIAGNOSTICS_IS_ON('atmPload',myThid) ) THEN
112 CALL RS2RL_XY( pLoad, tmp1k, myTime, myIter, myThid )
113 CALL DIAGNOSTICS_FILL( tmp1k,'atmPload',0,1,0,1,1,myThid )
114 ENDIF
115
116 C- sea-ice loading (expressed in Mass of ice+snow / area unit, [kg/m2])
117 IF ( DIAGNOSTICS_IS_ON('sIceLoad',myThid) ) THEN
118 CALL RS2RL_XY( sIceLoad, tmp1k, myTime, myIter, myThid )
119 CALL DIAGNOSTICS_FILL( tmp1k,'sIceLoad',0,1,0,1,1,myThid )
120 ENDIF
121
122 C- net Fresh Water flux into the ocean (+=down), [kg/m2/s]
123 IF ( DIAGNOSTICS_IS_ON('oceFWflx',myThid) ) THEN
124 CALL RS2RL_XY( EmPmR, tmp1k, myTime, myIter, myThid )
125 tmpFac = -1. _d 0
126 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,tmpFac,1,
127 & 'oceFWflx',0, 1,0,1,1,myThid )
128 ENDIF
129
130 C- net Salt flux into the ocean (+=down), [psu.kg/m2/s ~ g/m2/s]
131 IF ( DIAGNOSTICS_IS_ON('oceSflux',myThid) ) THEN
132 CALL RS2RL_XY( saltFlux, tmp1k, myTime, myIter, myThid )
133 tmpFac = -1. _d 0
134 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,tmpFac,1,
135 & 'oceSflux',0, 1,0,1,1,myThid )
136 ENDIF
137
138 C- Qnet (= net heat flux into the ocean, +=down, [W/m2])
139 IF ( DIAGNOSTICS_IS_ON('oceQnet ',myThid) ) THEN
140 CALL RS2RL_XY( Qnet, tmp1k, myTime, myIter, myThid )
141 tmpFac = -1. _d 0
142 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,tmpFac,1,
143 & 'oceQnet ',0, 1,0,1,1,myThid )
144 ENDIF
145
146 #ifdef SHORTWAVE_HEATING
147 C- Qsw (= net short-wave into the ocean, +=down, [W/m2])
148 IF ( DIAGNOSTICS_IS_ON('oceQsw ',myThid) ) THEN
149 CALL RS2RL_XY( Qsw, tmp1k, myTime, myIter, myThid )
150 tmpFac = -1. _d 0
151 CALL DIAGNOSTICS_SCALE_FILL( tmp1k,tmpFac,1,
152 & 'oceQsw ',0, 1,0,1,1,myThid )
153 ENDIF
154 #endif
155 #endif /* REAL4_IS_SLOW */
156
157 C- oceFreez (= heating from freezing of sea-water, if allowFreezing=T)
158 tmpFac = HeatCapacity_Cp*rUnit2mass
159 CALL DIAGNOSTICS_SCALE_FILL( surfaceForcingTice,tmpFac,1,
160 & 'oceFreez',0, 1,0,1,1,myThid )
161
162 C- surForcT (=model surface forcing for Temperature [W/m2], >0 increases T
163 tmpFac = HeatCapacity_Cp*rUnit2mass
164 CALL DIAGNOSTICS_SCALE_FILL( surfaceForcingT,tmpFac,1,
165 & 'surForcT',0, 1,0,1,1,myThid )
166
167 C- surForcS (=model surface forcing for Salinity, [g/m2/s], >0 increases S
168 tmpFac = rUnit2mass
169 CALL DIAGNOSTICS_SCALE_FILL( surfaceForcingS,tmpFac,1,
170 & 'surForcS',0, 1,0,1,1,myThid )
171
172 C- TFLUX (=total heat flux, match heat-content variations, [W/m2])
173 IF ( DIAGNOSTICS_IS_ON('TFLUX ',myThid) ) THEN
174 DO bj = myByLo(myThid), myByHi(myThid)
175 DO bi = myBxLo(myThid), myBxHi(myThid)
176 DO j = 1,sNy
177 DO i = 1,sNx
178 tmp1k(i,j,bi,bj) =
179 #ifdef SHORTWAVE_HEATING
180 & -Qsw(i,j,bi,bj)+
181 #endif
182 & (surfaceForcingT(i,j,bi,bj)+surfaceForcingTice(i,j,bi,bj))
183 & *HeatCapacity_Cp*rUnit2mass
184 ENDDO
185 ENDDO
186 #ifdef NONLIN_FRSURF
187 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
188 & .AND. useRealFreshWaterFlux ) THEN
189 DO j=1,sNy
190 DO i=1,sNx
191 tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj)
192 & + PmEpR(i,j,bi,bj)*theta(i,j,ks,bi,bj)*HeatCapacity_Cp
193 ENDDO
194 ENDDO
195 ENDIF
196 #endif /* NONLIN_FRSURF */
197 ENDDO
198 ENDDO
199 CALL DIAGNOSTICS_FILL( tmp1k,'TFLUX ',0,1,0,1,1,myThid )
200 ENDIF
201
202 C- SFLUX (=total salt flux, match salt-content variations [g/m2/s])
203 IF ( DIAGNOSTICS_IS_ON('SFLUX ',myThid) ) THEN
204 DO bj = myByLo(myThid), myByHi(myThid)
205 DO bi = myBxLo(myThid), myBxHi(myThid)
206 DO j = 1,sNy
207 DO i = 1,sNx
208 tmp1k(i,j,bi,bj) =
209 & surfaceForcingS(i,j,bi,bj)*rUnit2mass
210 ENDDO
211 ENDDO
212
213 #ifdef NONLIN_FRSURF
214 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
215 & .AND. useRealFreshWaterFlux ) THEN
216 DO j=1,sNy
217 DO i=1,sNx
218 tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj)
219 & + PmEpR(i,j,bi,bj)*salt(i,j,ks,bi,bj)
220 ENDDO
221 ENDDO
222 ENDIF
223 #endif /* NONLIN_FRSURF */
224
225 ENDDO
226 ENDDO
227 CALL DIAGNOSTICS_FILL( tmp1k,'SFLUX ',0,1,0,1,1,myThid )
228 ENDIF
229 #endif /* ALLOW_DIAGNOSTICS */
230
231 RETURN
232 END
233
234 #ifdef ALLOW_DIAGNOSTICS
235 #ifndef REAL4_IS_SLOW
236 CBOP
237 C !ROUTINE: RS2RL_XY
238 C !INTERFACE:
239 SUBROUTINE RS2RL_XY( arr2dRS, arr2dRL, myTime, myIter, myThid )
240
241 C !DESCRIPTION: \bv
242 C *==========================================================*
243 C | SUBROUTINE RS2RL_XY
244 C | o Returns _RS (if real*4) array as _RL (real*8) array
245 C *==========================================================*
246 C \ev
247
248 C !USES:
249 IMPLICIT NONE
250
251 C == Global variables ===
252 #include "SIZE.h"
253 #include "EEPARAMS.h"
254
255 C !INPUT/OUTPUT PARAMETERS:
256 C == Routine arguments ==
257 C myTime :: Current time in simulation
258 C myIter :: Current iteration number in simulation
259 C myThid :: Thread number for this instance of the routine.
260 _RS arr2dRS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
261 _RL arr2dRL(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
262 _RL myTime
263 INTEGER myIter
264 INTEGER myThid
265 CEOP
266
267 C !LOCAL VARIABLES:
268 C i,j,bi,bj :: loop indices
269 INTEGER i,j,bi,bj
270
271 DO bj = myByLo(myThid), myByHi(myThid)
272 DO bi = myBxLo(myThid), myBxHi(myThid)
273 DO j = 1,sNy
274 DO i = 1,sNx
275 arr2dRL(i,j,bi,bj) = DBLE(arr2dRS(i,j,bi,bj))
276 ENDDO
277 ENDDO
278 ENDDO
279 ENDDO
280
281 RETURN
282 END
283 #endif /* ndef REAL4_IS_SLOW */
284 #endif /* ALLOW_DIAGNOSTICS */
285

  ViewVC Help
Powered by ViewVC 1.1.22