/[MITgcm]/MITgcm_contrib/atnguyen/code_21Dec2012_saltplume/kpp_forcing_surf.F
ViewVC logotype

Annotation of /MITgcm_contrib/atnguyen/code_21Dec2012_saltplume/kpp_forcing_surf.F

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


Revision 1.2 - (hide annotations) (download)
Tue Apr 29 06:49:39 2014 UTC (11 years, 3 months ago) by atn
Branch: MAIN
Changes since 1.1: +4 -1 lines
in progress:
1. add SALT_PLUME_OPTIONS.h to several files;
2. replace SPalpha (vol) with SPbrineSconst (salinity);
3. move diagnostics outside bi,bj loop.

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

  ViewVC Help
Powered by ViewVC 1.1.22