/[MITgcm]/MITgcm/pkg/kpp/kpp_forcing_surf.F
ViewVC logotype

Annotation of /MITgcm/pkg/kpp/kpp_forcing_surf.F

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


Revision 1.3 - (hide annotations) (download)
Fri Dec 21 02:54:34 2007 UTC (16 years, 6 months ago) by atn
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59o, checkpoint59n, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q
Changes since 1.2: +26 -8 lines
o pkg/kpp: added saltplume diagnostics

1 atn 1.3 C $Header: /u/gcmpack/MITgcm/pkg/kpp/kpp_forcing_surf.F,v 1.2 2007/09/22 17:55:32 dimitri Exp $
2 mlosch 1.1 C $Name: $
3    
4     #include "KPP_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: KPP_FORCING_SURF
8    
9     C !INTERFACE: ==========================================================
10     SUBROUTINE KPP_FORCING_SURF(
11     I rhoSurf, surfForcU, surfForcV,
12     I surfForcT, surfForcS, surfForcTice,
13 dimitri 1.2 I Qsw,
14     #ifdef ALLOW_SALT_PLUME
15     I saltPlumeFlux,
16     #endif /* ALLOW_SALT_PLUME */
17     I ttalpha, ssbeta,
18     O ustar, bo, bosol,
19     #ifdef ALLOW_SALT_PLUME
20     O boplume,
21     #endif /* ALLOW_SALT_PLUME */
22     O dVsq,
23 mlosch 1.1 I ikppkey, iMin, iMax, jMin, jMax, bi, bj, myTime, myThid )
24    
25     C !DESCRIPTION: \bv
26     C /==========================================================\
27     C | SUBROUTINE KPP_FORCING_SURF |
28     C | o Compute all surface related KPP fields: |
29     C | - friction velocity ustar |
30     C | - turbulent and radiative surface buoyancy forcing, |
31 dimitri 1.2 C | bo and bosol, and surface haline buoyancy forcing |
32     C | boplume |
33 mlosch 1.1 C | - velocity shear relative to surface squared (this is |
34     C | not really a surface affected quantity unless it is |
35     C | computed with respect to some resolution independent |
36     C | reference level, that is KPP_ESTIMATE_UREF defined ) |
37     C |==========================================================|
38     C \==========================================================/
39     IMPLICIT NONE
40    
41     c taux / rho = surfForcU (N/m^2)
42     c tauy / rho = surfForcV (N/m^2)
43 dimitri 1.2 c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s)
44 mlosch 1.1 c bo = - g * ( alpha*surfForcT +
45 dimitri 1.2 c beta *surfForcS ) / rho (m^2/s^3)
46     c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3)
47     c boplume = g * ( beta *saltPlumeFlux/rhoConst )/rho (m^2/s^3)
48 mlosch 1.1 c------------------------------------------------------------------------
49    
50     c \ev
51    
52     C !USES: ===============================================================
53     #include "SIZE.h"
54     #include "EEPARAMS.h"
55     #include "PARAMS.h"
56     #include "GRID.h"
57     #include "DYNVARS.h"
58     #include "KPP_PARAMS.h"
59    
60     C !INPUT PARAMETERS: ===================================================
61     C Routine arguments
62     C ikppkeyb - key for storing trajectory for adjoint (taf)
63     c imin, imax, jmin, jmax - array computation indices
64     C bi, bj - array indices on which to apply calculations
65     C myTime - Current time in simulation
66     C myThid - Current thread id
67     c rhoSurf- density of surface layer (kg/m^3)
68     C surfForcU units are r_unit.m/s^2 (=m^2/s^2 if r=z)
69     C surfForcV units are r_unit.m/s^2 (=m^2/s^-2 if r=z)
70     C surfForcS units are r_unit.psu/s (=psu.m/s if r=z)
71     C - EmPmR * S_surf plus salinity relaxation*drF(1)
72     C surfForcT units are r_unit.Kelvin/s (=Kelvin.m/s if r=z)
73     C - Qnet (+Qsw) plus temp. relaxation*drF(1)
74     C -> calculate -lambda*(T(model)-T(clim))
75     C Qnet assumed to be net heat flux including ShortWave rad.
76     C surfForcTice
77     C - equivalent Temperature flux in the top level that corresponds
78     C to the melting or freezing of sea-ice.
79     C Note that the surface level temperature is modified
80     C directly by the sea-ice model in order to maintain
81     C water temperature under sea-ice at the freezing
82     C point. But we need to keep track of the
83     C equivalent amount of heat that this surface-level
84     C temperature change implies because it is used by
85     C the KPP package (kpp_calc.F and kpp_transport_t.F).
86     C Units are r_unit.K/s (=Kelvin.m/s if r=z) (>0 for ocean warming).
87     C
88     C Qsw - surface shortwave radiation (upwards positive)
89 dimitri 1.2 C saltPlumeFlux - salt rejected during freezing (downward = positive)
90 mlosch 1.1 C ttalpha - thermal expansion coefficient without 1/rho factor
91     C d(rho{k,k})/d(T(k)) (kg/m^3/C)
92     C ssbeta - salt expansion coefficient without 1/rho factor
93     C d(rho{k,k})/d(S(k)) (kg/m^3/PSU)
94 dimitri 1.2 C !OUTPUT PARAMETERS:
95 mlosch 1.1 C ustar (nx,ny) - surface friction velocity (m/s)
96     C bo (nx,ny) - surface turbulent buoyancy forcing (m^2/s^3)
97     C bosol (nx,ny) - surface radiative buoyancy forcing (m^2/s^3)
98 dimitri 1.2 C boplume(nx,ny) - surface haline buoyancy forcing (m^2/s^3)
99 mlosch 1.1 C dVsq (nx,ny,Nr) - velocity shear re surface squared
100     C at grid levels for bldepth (m^2/s^2)
101    
102     INTEGER ikppkey
103     INTEGER iMin, iMax, jMin, jMax
104     INTEGER bi, bj
105     INTEGER myThid
106     _RL myTime
107    
108     _RL rhoSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
109     _RL surfForcU (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
110     _RL surfForcV (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
111     _RL surfForcT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
112     _RL surfForcS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
113     _RL surfForcTice(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
114     _RL Qsw (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
115     _RL TTALPHA (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nrp1)
116     _RL SSBETA (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nrp1)
117    
118     _RL ustar ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
119     _RL bo ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
120     _RL bosol ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
121 dimitri 1.2 #ifdef ALLOW_SALT_PLUME
122     _RL saltPlumeFlux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
123     _RL boplume(1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
124     #endif /* ALLOW_SALT_PLUME */
125 mlosch 1.1 _RL dVsq ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy, Nr )
126    
127     C !LOCAL VARIABLES: ====================================================
128     c Local constants
129     c minusone, p0, p5, p25, p125, p0625
130     _RL p0 , p5 , p125
131     parameter( p0=0.0, p5=0.5, p125=0.125 )
132     integer i, j, k, im1, ip1, jm1, jp1
133     _RL tempvar2
134    
135     _RL work3 ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
136    
137     #ifdef KPP_ESTIMATE_UREF
138     _RL tempvar1, dBdz1, dBdz2, ustarX, ustarY
139     _RL z0 ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
140     _RL zRef ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
141     _RL uRef ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
142     _RL vRef ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
143     #endif
144     CEOP
145    
146     c------------------------------------------------------------------------
147     c friction velocity, turbulent and radiative surface buoyancy forcing
148     c -------------------------------------------------------------------
149     c taux / rho = surfForcU (N/m^2)
150     c tauy / rho = surfForcV (N/m^2)
151 dimitri 1.2 c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s)
152 mlosch 1.1 c bo = - g * ( alpha*surfForcT +
153     c beta *surfForcS ) / rho (m^2/s^3)
154 dimitri 1.2 c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3)
155     c boplume = g * ( beta *saltPlumeFlux/rhoConst )/rho (m^2/s^3)
156 mlosch 1.1 c------------------------------------------------------------------------
157    
158     c initialize arrays to zero
159     DO j = 1-OLy, sNy+OLy
160     DO i = 1-OLx, sNx+OLx
161     ustar(i,j) = p0
162     bo (I,J) = p0
163     bosol(I,J) = p0
164 dimitri 1.2 #ifdef ALLOW_SALT_PLUME
165     boplume(I,J) = p0
166     #endif /* ALLOW_SALT_PLUME */
167 mlosch 1.1 END DO
168     END DO
169    
170     DO j = jmin, jmax
171     jp1 = j + 1
172     DO i = imin, imax
173     ip1 = i+1
174     work3(i,j) =
175     & (surfForcU(i,j,bi,bj) + surfForcU(ip1,j,bi,bj)) *
176     & (surfForcU(i,j,bi,bj) + surfForcU(ip1,j,bi,bj)) +
177     & (surfForcV(i,j,bi,bj) + surfForcV(i,jp1,bi,bj)) *
178     & (surfForcV(i,j,bi,bj) + surfForcV(i,jp1,bi,bj))
179     END DO
180     END DO
181     cph(
182     CADJ store work3 = comlev1_kpp, key = ikppkey
183     cph)
184     DO j = jmin, jmax
185     jp1 = j + 1
186     DO i = imin, imax
187     ip1 = i+1
188    
189     if ( work3(i,j) .lt. (phepsi*phepsi*drF(1)*drF(1)) ) then
190     ustar(i,j) = SQRT( phepsi * p5 * drF(1) )
191     else
192     tempVar2 = SQRT( work3(i,j) ) * p5
193     ustar(i,j) = SQRT( tempVar2 )
194     endif
195    
196     END DO
197     END DO
198    
199     DO j = jmin, jmax
200     jp1 = j + 1
201     DO i = imin, imax
202     ip1 = i+1
203     bo(I,J) = - gravity *
204     & ( TTALPHA(I,J,1) * (surfForcT(i,j,bi,bj)+
205     & surfForcTice(i,j,bi,bj)) +
206     & SSBETA(I,J,1) * surfForcS(i,j,bi,bj) )
207     & / rhoSurf(I,J)
208     bosol(I,J) = gravity * TTALPHA(I,J,1) * Qsw(i,j,bi,bj) *
209     & recip_Cp*recip_rhoConst
210     & / rhoSurf(I,J)
211 atn 1.3 END DO
212     END DO
213    
214 dimitri 1.2 #ifdef ALLOW_SALT_PLUME
215 atn 1.3 IF ( useSALT_PLUME ) THEN
216     DO j = jmin, jmax
217     jp1 = j + 1
218     DO i = imin, imax
219     ip1 = i+1
220     boplume(I,J) = - gravity * SSBETA(I,J,1)
221     & * saltPlumeFlux(i,j,bi,bj)
222     & * recip_rhoConst / rhoSurf(I,J)
223     END DO
224     END DO
225     ENDIF
226 dimitri 1.2 #endif /* ALLOW_SALT_PLUME */
227 atn 1.3
228 mlosch 1.1 cph(
229     CADJ store ustar = comlev1_kpp, key = ikppkey
230     cph)
231    
232 atn 1.3 #ifdef ALLOW_DIAGNOSTICS
233     IF ( useDiagnostics ) THEN
234     CALL DIAGNOSTICS_FILL(bo ,'KPPbo ',0,1,1,bi,bj,myThid)
235     CALL DIAGNOSTICS_FILL(bosol ,'KPPbosol',0,1,1,bi,bj,myThid)
236     #ifdef ALLOW_SALT_PLUME
237     CALL DIAGNOSTICS_FILL(boplume,'KPPboplm',0,1,1,bi,bj,myThid)
238     #endif /* ALLOW_SALT_PLUME */
239     ENDIF
240     #endif /* ALLOW_DIAGNOSTICS */
241    
242 mlosch 1.1 c------------------------------------------------------------------------
243     c velocity shear
244     c --------------
245     c Get velocity shear squared, averaged from "u,v-grid"
246     c onto "t-grid" (in (m/s)**2):
247     c dVsq(k)=(Uref-U(k))**2+(Vref-V(k))**2 at grid levels
248     c------------------------------------------------------------------------
249    
250     c initialize arrays to zero
251     DO k = 1, Nr
252     DO j = 1-OLy, sNy+OLy
253     DO i = 1-OLx, sNx+OLx
254     dVsq(i,j,k) = p0
255     END DO
256     END DO
257     END DO
258    
259     c dVsq computation
260    
261     #ifdef KPP_ESTIMATE_UREF
262    
263     c Get rid of vertical resolution dependence of dVsq term by
264     c estimating a surface velocity that is independent of first level
265     c thickness in the model. First determine mixed layer depth hMix.
266     c Second zRef = espilon * hMix. Third determine roughness length
267     c scale z0. Third estimate reference velocity.
268    
269     DO j = jmin, jmax
270     jp1 = j + 1
271     DO i = imin, imax
272     ip1 = i + 1
273    
274     c Determine mixed layer depth hMix as the shallowest depth at which
275     c dB/dz exceeds 5.2e-5 s^-2.
276     work1(i,j) = nzmax(i,j,bi,bj)
277     DO k = 1, Nr
278     IF ( k .LT. nzmax(i,j,bi,bj) .AND.
279     & maskC(I,J,k,bi,bj) .GT. 0. .AND.
280     & dbloc(i,j,k) / drC(k+1) .GT. dB_dz )
281     & work1(i,j) = k
282     ENDDO
283    
284     c Linearly interpolate to find hMix.
285     k = work1(i,j)
286     IF ( k .EQ. 0 .OR. nzmax(i,j,bi,bj) .EQ. 1 ) THEN
287     zRef(i,j) = p0
288     ELSEIF ( k .EQ. 1) THEN
289     dBdz2 = dbloc(i,j,1) / drC(2)
290     zRef(i,j) = drF(1) * dB_dz / dBdz2
291     ELSEIF ( k .LT. nzmax(i,j,bi,bj) ) THEN
292     dBdz1 = dbloc(i,j,k-1) / drC(k )
293     dBdz2 = dbloc(i,j,k ) / drC(k+1)
294     zRef(i,j) = rF(k) + drF(k) * (dB_dz - dBdz1) /
295     & MAX ( phepsi, dBdz2 - dBdz1 )
296     ELSE
297     zRef(i,j) = rF(k+1)
298     ENDIF
299    
300     c Compute roughness length scale z0 subject to 0 < z0
301     tempVar1 = p5 * (
302     & (uVel(i, j, 1,bi,bj)-uVel(i, j, 2,bi,bj)) *
303     & (uVel(i, j, 1,bi,bj)-uVel(i, j, 2,bi,bj)) +
304     & (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, 2,bi,bj)) *
305     & (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, 2,bi,bj)) +
306     & (vVel(i, j, 1,bi,bj)-vVel(i, j, 2,bi,bj)) *
307     & (vVel(i, j, 1,bi,bj)-vVel(i, j, 2,bi,bj)) +
308     & (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,2,bi,bj)) *
309     & (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,2,bi,bj)) )
310     IF ( tempVar1 .lt. (epsln*epsln) ) THEN
311     tempVar2 = epsln
312     ELSE
313     tempVar2 = SQRT ( tempVar1 )
314     ENDIF
315     z0(i,j) = rF(2) *
316     & ( rF(3) * LOG ( rF(3) / rF(2) ) /
317     & ( rF(3) - rF(2) ) -
318     & tempVar2 * vonK /
319     & MAX ( ustar(i,j), phepsi ) )
320     z0(i,j) = MAX ( z0(i,j), phepsi )
321    
322     c zRef is set to 0.1 * hMix subject to z0 <= zRef <= drF(1)
323     zRef(i,j) = MAX ( epsilon * zRef(i,j), z0(i,j) )
324     zRef(i,j) = MIN ( zRef(i,j), drF(1) )
325    
326     c Estimate reference velocity uRef and vRef.
327     uRef(i,j) = p5 * ( uVel(i,j,1,bi,bj) + uVel(ip1,j,1,bi,bj) )
328     vRef(i,j) = p5 * ( vVel(i,j,1,bi,bj) + vVel(i,jp1,1,bi,bj) )
329     IF ( zRef(i,j) .LT. drF(1) ) THEN
330     ustarX = ( surfForcU(i, j,bi,bj) +
331     & surfForcU(ip1,j,bi,bj) ) * p5 *recip_drF(1)
332     ustarY = ( surfForcV(i,j, bi,bj) +
333     & surfForcV(i,jp1,bi,bj) ) * p5 *recip_drF(1)
334     tempVar1 = ustarX * ustarX + ustarY * ustarY
335     if ( tempVar1 .lt. (epsln*epsln) ) then
336     tempVar2 = epsln
337     else
338     tempVar2 = SQRT ( tempVar1 )
339     endif
340     tempVar2 = ustar(i,j) *
341     & ( LOG ( zRef(i,j) / rF(2) ) +
342     & z0(i,j) / zRef(i,j) - z0(i,j) / rF(2) ) /
343     & vonK / tempVar2
344     uRef(i,j) = uRef(i,j) + ustarX * tempVar2
345     vRef(i,j) = vRef(i,j) + ustarY * tempVar2
346     ENDIF
347    
348     ENDDO
349     ENDDO
350    
351     DO k = 1, Nr
352     DO j = jmin, jmax
353     jm1 = j - 1
354     jp1 = j + 1
355     DO i = imin, imax
356     im1 = i - 1
357     ip1 = i + 1
358     dVsq(i,j,k) = p5 * (
359     $ (uRef(i,j) - uVel(i, j, k,bi,bj)) *
360     $ (uRef(i,j) - uVel(i, j, k,bi,bj)) +
361     $ (uRef(i,j) - uVel(ip1,j, k,bi,bj)) *
362     $ (uRef(i,j) - uVel(ip1,j, k,bi,bj)) +
363     $ (vRef(i,j) - vVel(i, j, k,bi,bj)) *
364     $ (vRef(i,j) - vVel(i, j, k,bi,bj)) +
365     $ (vRef(i,j) - vVel(i, jp1,k,bi,bj)) *
366     $ (vRef(i,j) - vVel(i, jp1,k,bi,bj)) )
367     #ifdef KPP_SMOOTH_DVSQ
368     dVsq(i,j,k) = p5 * dVsq(i,j,k) + p125 * (
369     $ (uRef(i,j) - uVel(i, jm1,k,bi,bj)) *
370     $ (uRef(i,j) - uVel(i, jm1,k,bi,bj)) +
371     $ (uRef(i,j) - uVel(ip1,jm1,k,bi,bj)) *
372     $ (uRef(i,j) - uVel(ip1,jm1,k,bi,bj)) +
373     $ (uRef(i,j) - uVel(i, jp1,k,bi,bj)) *
374     $ (uRef(i,j) - uVel(i, jp1,k,bi,bj)) +
375     $ (uRef(i,j) - uVel(ip1,jp1,k,bi,bj)) *
376     $ (uRef(i,j) - uVel(ip1,jp1,k,bi,bj)) +
377     $ (vRef(i,j) - vVel(im1,j, k,bi,bj)) *
378     $ (vRef(i,j) - vVel(im1,j, k,bi,bj)) +
379     $ (vRef(i,j) - vVel(im1,jp1,k,bi,bj)) *
380     $ (vRef(i,j) - vVel(im1,jp1,k,bi,bj)) +
381     $ (vRef(i,j) - vVel(ip1,j, k,bi,bj)) *
382     $ (vRef(i,j) - vVel(ip1,j, k,bi,bj)) +
383     $ (vRef(i,j) - vVel(ip1,jp1,k,bi,bj)) *
384     $ (vRef(i,j) - vVel(ip1,jp1,k,bi,bj)) )
385     #endif /* KPP_SMOOTH_DVSQ */
386     ENDDO
387     ENDDO
388     ENDDO
389    
390     #else /* KPP_ESTIMATE_UREF */
391    
392     DO k = 1, Nr
393     DO j = jmin, jmax
394     jm1 = j - 1
395     jp1 = j + 1
396     DO i = imin, imax
397     im1 = i - 1
398     ip1 = i + 1
399     dVsq(i,j,k) = p5 * (
400     $ (uVel(i, j, 1,bi,bj)-uVel(i, j, k,bi,bj)) *
401     $ (uVel(i, j, 1,bi,bj)-uVel(i, j, k,bi,bj)) +
402     $ (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, k,bi,bj)) *
403     $ (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, k,bi,bj)) +
404     $ (vVel(i, j, 1,bi,bj)-vVel(i, j, k,bi,bj)) *
405     $ (vVel(i, j, 1,bi,bj)-vVel(i, j, k,bi,bj)) +
406     $ (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,k,bi,bj)) *
407     $ (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,k,bi,bj)) )
408     #ifdef KPP_SMOOTH_DVSQ
409     dVsq(i,j,k) = p5 * dVsq(i,j,k) + p125 * (
410     $ (uVel(i, jm1,1,bi,bj)-uVel(i, jm1,k,bi,bj)) *
411     $ (uVel(i, jm1,1,bi,bj)-uVel(i, jm1,k,bi,bj)) +
412     $ (uVel(ip1,jm1,1,bi,bj)-uVel(ip1,jm1,k,bi,bj)) *
413     $ (uVel(ip1,jm1,1,bi,bj)-uVel(ip1,jm1,k,bi,bj)) +
414     $ (uVel(i, jp1,1,bi,bj)-uVel(i, jp1,k,bi,bj)) *
415     $ (uVel(i, jp1,1,bi,bj)-uVel(i, jp1,k,bi,bj)) +
416     $ (uVel(ip1,jp1,1,bi,bj)-uVel(ip1,jp1,k,bi,bj)) *
417     $ (uVel(ip1,jp1,1,bi,bj)-uVel(ip1,jp1,k,bi,bj)) +
418     $ (vVel(im1,j, 1,bi,bj)-vVel(im1,j, k,bi,bj)) *
419     $ (vVel(im1,j, 1,bi,bj)-vVel(im1,j, k,bi,bj)) +
420     $ (vVel(im1,jp1,1,bi,bj)-vVel(im1,jp1,k,bi,bj)) *
421     $ (vVel(im1,jp1,1,bi,bj)-vVel(im1,jp1,k,bi,bj)) +
422     $ (vVel(ip1,j, 1,bi,bj)-vVel(ip1,j, k,bi,bj)) *
423     $ (vVel(ip1,j, 1,bi,bj)-vVel(ip1,j, k,bi,bj)) +
424     $ (vVel(ip1,jp1,1,bi,bj)-vVel(ip1,jp1,k,bi,bj)) *
425     $ (vVel(ip1,jp1,1,bi,bj)-vVel(ip1,jp1,k,bi,bj)) )
426     #endif /* KPP_SMOOTH_DVSQ */
427     ENDDO
428     ENDDO
429     ENDDO
430    
431     #endif /* KPP_ESTIMATE_UREF */
432    
433     RETURN
434     END
435    

  ViewVC Help
Powered by ViewVC 1.1.22