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

Contents 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.5 - (show annotations) (download)
Fri May 2 05:46:01 2014 UTC (11 years, 3 months ago) by atn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +7 -6 lines
change individual 3-d boplume(k) to accumulated 3d in kpp_forcing_surf

1 C $Header: /u/gcmpack/MITgcm_contrib/atnguyen/code_21Dec2012_saltplume/kpp_forcing_surf.F,v 1.4 2014/05/01 21:30:48 atn Exp $
2 C $Name: $
3
4 #include "KPP_OPTIONS.h"
5 #ifdef ALLOW_SALT_PLUME
6 #include "SALT_PLUME_OPTIONS.h"
7 #endif
8
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 I SPforcS,SPforcT,
19 #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 C boplume(nx,ny,Nr+1) - surface haline buoyancy forcing (m^2/s^3)
102 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 _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, 0:Nr )
128 _RL temparray (1-OLx:sNx+OLx, 1-OLy:sNy+OLy )
129 #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 DO k = 1, Nr
171 boplume(I,J,k) = p0
172 ENDDO
173 boplume(I,J,0) = p0
174 #endif /* ALLOW_SALT_PLUME */
175 END DO
176 END DO
177
178 DO j = jmin, jmax
179 jp1 = j + 1
180 DO i = imin, imax
181 ip1 = i+1
182 work3(i,j) =
183 & (surfForcU(i,j,bi,bj) + surfForcU(ip1,j,bi,bj)) *
184 & (surfForcU(i,j,bi,bj) + surfForcU(ip1,j,bi,bj)) +
185 & (surfForcV(i,j,bi,bj) + surfForcV(i,jp1,bi,bj)) *
186 & (surfForcV(i,j,bi,bj) + surfForcV(i,jp1,bi,bj))
187 END DO
188 END DO
189 cph(
190 CADJ store work3 = comlev1_kpp, key = ikppkey
191 cph)
192 DO j = jmin, jmax
193 jp1 = j + 1
194 DO i = imin, imax
195 ip1 = i+1
196
197 if ( work3(i,j) .lt. (phepsi*phepsi*drF(1)*drF(1)) ) then
198 ustar(i,j) = SQRT( phepsi * p5 * drF(1) )
199 else
200 tempVar2 = SQRT( work3(i,j) ) * p5
201 ustar(i,j) = SQRT( tempVar2 )
202 endif
203
204 END DO
205 END DO
206
207 DO j = jmin, jmax
208 jp1 = j + 1
209 DO i = imin, imax
210 ip1 = i+1
211 bo(I,J) = - gravity *
212 & ( TTALPHA(I,J,1) * (surfForcT(i,j,bi,bj)+
213 & surfForcTice(i,j,bi,bj)) +
214 & SSBETA(I,J,1) * surfForcS(i,j,bi,bj) )
215 & / rhoSurf(I,J)
216 bosol(I,J) = gravity * TTALPHA(I,J,1) * Qsw(i,j,bi,bj) *
217 & recip_Cp*recip_rhoConst
218 & / rhoSurf(I,J)
219 END DO
220 END DO
221
222 #ifdef ALLOW_SALT_PLUME
223 Catn: need check sign of SPforcT
224 Cnote: on input, if notdef salt_plume_volume, SPforc[S,T](k>1)=!0
225 IF ( useSALT_PLUME ) THEN
226 DO j = jmin, jmax
227 DO i = imin, imax
228 DO k = 1, Nr
229 temparray(I,J) = - gravity *
230 & ( SSBETA(I,J,k) * SPforcS(i,j,k) +
231 & TTALPHA(I,J,k)* SPforcT(i,j,k) * recip_Cp )
232 & * recip_rhoConst / rhoSurf(I,J)
233 boplume(I,J,k) = boplume(I,J,k-1)+temparray(I,J)
234 ENDDO
235 END DO
236 END DO
237 ENDIF
238 #endif /* ALLOW_SALT_PLUME */
239
240 cph(
241 CADJ store ustar = comlev1_kpp, key = ikppkey
242 cph)
243
244 #ifdef ALLOW_DIAGNOSTICS
245 IF ( useDiagnostics ) THEN
246 CALL DIAGNOSTICS_FILL(bo ,'KPPbo ',0,1,2,bi,bj,myThid)
247 CALL DIAGNOSTICS_FILL(bosol ,'KPPbosol',0,1,2,bi,bj,myThid)
248 #ifdef ALLOW_SALT_PLUME
249 CALL DIAGNOSTICS_FILL(boplume,'KPPboplm',1,1,2,bi,bj,myThid)
250 #endif /* ALLOW_SALT_PLUME */
251 ENDIF
252 #endif /* ALLOW_DIAGNOSTICS */
253
254 c------------------------------------------------------------------------
255 c velocity shear
256 c --------------
257 c Get velocity shear squared, averaged from "u,v-grid"
258 c onto "t-grid" (in (m/s)**2):
259 c dVsq(k)=(Uref-U(k))**2+(Vref-V(k))**2 at grid levels
260 c------------------------------------------------------------------------
261
262 c initialize arrays to zero
263 DO k = 1, Nr
264 DO j = 1-OLy, sNy+OLy
265 DO i = 1-OLx, sNx+OLx
266 dVsq(i,j,k) = p0
267 END DO
268 END DO
269 END DO
270
271 c dVsq computation
272
273 #ifdef KPP_ESTIMATE_UREF
274
275 c Get rid of vertical resolution dependence of dVsq term by
276 c estimating a surface velocity that is independent of first level
277 c thickness in the model. First determine mixed layer depth hMix.
278 c Second zRef = espilon * hMix. Third determine roughness length
279 c scale z0. Third estimate reference velocity.
280
281 DO j = jmin, jmax
282 jp1 = j + 1
283 DO i = imin, imax
284 ip1 = i + 1
285
286 c Determine mixed layer depth hMix as the shallowest depth at which
287 c dB/dz exceeds 5.2e-5 s^-2.
288 work1(i,j) = nzmax(i,j,bi,bj)
289 DO k = 1, Nr
290 IF ( k .LT. nzmax(i,j,bi,bj) .AND.
291 & maskC(I,J,k,bi,bj) .GT. 0. .AND.
292 & dbloc(i,j,k) / drC(k+1) .GT. dB_dz )
293 & work1(i,j) = k
294 ENDDO
295
296 c Linearly interpolate to find hMix.
297 k = work1(i,j)
298 IF ( k .EQ. 0 .OR. nzmax(i,j,bi,bj) .EQ. 1 ) THEN
299 zRef(i,j) = p0
300 ELSEIF ( k .EQ. 1) THEN
301 dBdz2 = dbloc(i,j,1) / drC(2)
302 zRef(i,j) = drF(1) * dB_dz / dBdz2
303 ELSEIF ( k .LT. nzmax(i,j,bi,bj) ) THEN
304 dBdz1 = dbloc(i,j,k-1) / drC(k )
305 dBdz2 = dbloc(i,j,k ) / drC(k+1)
306 zRef(i,j) = rF(k) + drF(k) * (dB_dz - dBdz1) /
307 & MAX ( phepsi, dBdz2 - dBdz1 )
308 ELSE
309 zRef(i,j) = rF(k+1)
310 ENDIF
311
312 c Compute roughness length scale z0 subject to 0 < z0
313 tempVar1 = p5 * (
314 & (uVel(i, j, 1,bi,bj)-uVel(i, j, 2,bi,bj)) *
315 & (uVel(i, j, 1,bi,bj)-uVel(i, j, 2,bi,bj)) +
316 & (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, 2,bi,bj)) *
317 & (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, 2,bi,bj)) +
318 & (vVel(i, j, 1,bi,bj)-vVel(i, j, 2,bi,bj)) *
319 & (vVel(i, j, 1,bi,bj)-vVel(i, j, 2,bi,bj)) +
320 & (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,2,bi,bj)) *
321 & (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,2,bi,bj)) )
322 IF ( tempVar1 .lt. (epsln*epsln) ) THEN
323 tempVar2 = epsln
324 ELSE
325 tempVar2 = SQRT ( tempVar1 )
326 ENDIF
327 z0(i,j) = rF(2) *
328 & ( rF(3) * LOG ( rF(3) / rF(2) ) /
329 & ( rF(3) - rF(2) ) -
330 & tempVar2 * vonK /
331 & MAX ( ustar(i,j), phepsi ) )
332 z0(i,j) = MAX ( z0(i,j), phepsi )
333
334 c zRef is set to 0.1 * hMix subject to z0 <= zRef <= drF(1)
335 zRef(i,j) = MAX ( epsilon * zRef(i,j), z0(i,j) )
336 zRef(i,j) = MIN ( zRef(i,j), drF(1) )
337
338 c Estimate reference velocity uRef and vRef.
339 uRef(i,j) = p5 * ( uVel(i,j,1,bi,bj) + uVel(ip1,j,1,bi,bj) )
340 vRef(i,j) = p5 * ( vVel(i,j,1,bi,bj) + vVel(i,jp1,1,bi,bj) )
341 IF ( zRef(i,j) .LT. drF(1) ) THEN
342 ustarX = ( surfForcU(i, j,bi,bj) +
343 & surfForcU(ip1,j,bi,bj) ) * p5 *recip_drF(1)
344 ustarY = ( surfForcV(i,j, bi,bj) +
345 & surfForcV(i,jp1,bi,bj) ) * p5 *recip_drF(1)
346 tempVar1 = ustarX * ustarX + ustarY * ustarY
347 if ( tempVar1 .lt. (epsln*epsln) ) then
348 tempVar2 = epsln
349 else
350 tempVar2 = SQRT ( tempVar1 )
351 endif
352 tempVar2 = ustar(i,j) *
353 & ( LOG ( zRef(i,j) / rF(2) ) +
354 & z0(i,j) / zRef(i,j) - z0(i,j) / rF(2) ) /
355 & vonK / tempVar2
356 uRef(i,j) = uRef(i,j) + ustarX * tempVar2
357 vRef(i,j) = vRef(i,j) + ustarY * tempVar2
358 ENDIF
359
360 ENDDO
361 ENDDO
362
363 DO k = 1, Nr
364 DO j = jmin, jmax
365 jm1 = j - 1
366 jp1 = j + 1
367 DO i = imin, imax
368 im1 = i - 1
369 ip1 = i + 1
370 dVsq(i,j,k) = p5 * (
371 $ (uRef(i,j) - uVel(i, j, k,bi,bj)) *
372 $ (uRef(i,j) - uVel(i, j, k,bi,bj)) +
373 $ (uRef(i,j) - uVel(ip1,j, k,bi,bj)) *
374 $ (uRef(i,j) - uVel(ip1,j, k,bi,bj)) +
375 $ (vRef(i,j) - vVel(i, j, k,bi,bj)) *
376 $ (vRef(i,j) - vVel(i, j, k,bi,bj)) +
377 $ (vRef(i,j) - vVel(i, jp1,k,bi,bj)) *
378 $ (vRef(i,j) - vVel(i, jp1,k,bi,bj)) )
379 #ifdef KPP_SMOOTH_DVSQ
380 dVsq(i,j,k) = p5 * dVsq(i,j,k) + p125 * (
381 $ (uRef(i,j) - uVel(i, jm1,k,bi,bj)) *
382 $ (uRef(i,j) - uVel(i, jm1,k,bi,bj)) +
383 $ (uRef(i,j) - uVel(ip1,jm1,k,bi,bj)) *
384 $ (uRef(i,j) - uVel(ip1,jm1,k,bi,bj)) +
385 $ (uRef(i,j) - uVel(i, jp1,k,bi,bj)) *
386 $ (uRef(i,j) - uVel(i, jp1,k,bi,bj)) +
387 $ (uRef(i,j) - uVel(ip1,jp1,k,bi,bj)) *
388 $ (uRef(i,j) - uVel(ip1,jp1,k,bi,bj)) +
389 $ (vRef(i,j) - vVel(im1,j, k,bi,bj)) *
390 $ (vRef(i,j) - vVel(im1,j, k,bi,bj)) +
391 $ (vRef(i,j) - vVel(im1,jp1,k,bi,bj)) *
392 $ (vRef(i,j) - vVel(im1,jp1,k,bi,bj)) +
393 $ (vRef(i,j) - vVel(ip1,j, k,bi,bj)) *
394 $ (vRef(i,j) - vVel(ip1,j, k,bi,bj)) +
395 $ (vRef(i,j) - vVel(ip1,jp1,k,bi,bj)) *
396 $ (vRef(i,j) - vVel(ip1,jp1,k,bi,bj)) )
397 #endif /* KPP_SMOOTH_DVSQ */
398 ENDDO
399 ENDDO
400 ENDDO
401
402 #else /* KPP_ESTIMATE_UREF */
403
404 DO k = 1, Nr
405 DO j = jmin, jmax
406 jm1 = j - 1
407 jp1 = j + 1
408 DO i = imin, imax
409 im1 = i - 1
410 ip1 = i + 1
411 dVsq(i,j,k) = p5 * (
412 $ (uVel(i, j, 1,bi,bj)-uVel(i, j, k,bi,bj)) *
413 $ (uVel(i, j, 1,bi,bj)-uVel(i, j, k,bi,bj)) +
414 $ (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, k,bi,bj)) *
415 $ (uVel(ip1,j, 1,bi,bj)-uVel(ip1,j, k,bi,bj)) +
416 $ (vVel(i, j, 1,bi,bj)-vVel(i, j, k,bi,bj)) *
417 $ (vVel(i, j, 1,bi,bj)-vVel(i, j, k,bi,bj)) +
418 $ (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,k,bi,bj)) *
419 $ (vVel(i, jp1,1,bi,bj)-vVel(i, jp1,k,bi,bj)) )
420 #ifdef KPP_SMOOTH_DVSQ
421 dVsq(i,j,k) = p5 * dVsq(i,j,k) + p125 * (
422 $ (uVel(i, jm1,1,bi,bj)-uVel(i, jm1,k,bi,bj)) *
423 $ (uVel(i, jm1,1,bi,bj)-uVel(i, jm1,k,bi,bj)) +
424 $ (uVel(ip1,jm1,1,bi,bj)-uVel(ip1,jm1,k,bi,bj)) *
425 $ (uVel(ip1,jm1,1,bi,bj)-uVel(ip1,jm1,k,bi,bj)) +
426 $ (uVel(i, jp1,1,bi,bj)-uVel(i, jp1,k,bi,bj)) *
427 $ (uVel(i, jp1,1,bi,bj)-uVel(i, jp1,k,bi,bj)) +
428 $ (uVel(ip1,jp1,1,bi,bj)-uVel(ip1,jp1,k,bi,bj)) *
429 $ (uVel(ip1,jp1,1,bi,bj)-uVel(ip1,jp1,k,bi,bj)) +
430 $ (vVel(im1,j, 1,bi,bj)-vVel(im1,j, k,bi,bj)) *
431 $ (vVel(im1,j, 1,bi,bj)-vVel(im1,j, k,bi,bj)) +
432 $ (vVel(im1,jp1,1,bi,bj)-vVel(im1,jp1,k,bi,bj)) *
433 $ (vVel(im1,jp1,1,bi,bj)-vVel(im1,jp1,k,bi,bj)) +
434 $ (vVel(ip1,j, 1,bi,bj)-vVel(ip1,j, k,bi,bj)) *
435 $ (vVel(ip1,j, 1,bi,bj)-vVel(ip1,j, k,bi,bj)) +
436 $ (vVel(ip1,jp1,1,bi,bj)-vVel(ip1,jp1,k,bi,bj)) *
437 $ (vVel(ip1,jp1,1,bi,bj)-vVel(ip1,jp1,k,bi,bj)) )
438 #endif /* KPP_SMOOTH_DVSQ */
439 ENDDO
440 ENDDO
441 ENDDO
442
443 #endif /* KPP_ESTIMATE_UREF */
444
445 RETURN
446 END
447

  ViewVC Help
Powered by ViewVC 1.1.22