/[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.4 - (hide annotations) (download)
Thu May 1 21:30:48 2014 UTC (11 years, 3 months ago) by atn
Branch: MAIN
Changes since 1.3: +5 -3 lines
bug fixing

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

  ViewVC Help
Powered by ViewVC 1.1.22