/[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.10 - (hide annotations) (download)
Thu Sep 11 19:23:23 2014 UTC (9 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.9: +8 -5 lines
Include explicitly AUTODIFF_OPTIONS.h (in case we don't use ECCO_CPPOPTIONS.h)
and put storage dir within #ifdef ALLOW_AUTODIFF_TAMC

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

  ViewVC Help
Powered by ViewVC 1.1.22