/[MITgcm]/MITgcm/pkg/mom_common/mom_calc_3d_strain.F
ViewVC logotype

Contents of /MITgcm/pkg/mom_common/mom_calc_3d_strain.F

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


Revision 1.1 - (show annotations) (download)
Tue Nov 5 13:31:50 2013 UTC (10 years, 6 months ago) by jmc
Branch: MAIN
- move here (previously in tutorial_deep_convection code) 2nd version of isotropic
  3-D Smagorinsky code interface: strain and viscosity are locally declared in
  dynmics.F and pass as argument to CALC_GW; ensure that all field value that are
  used are set.

1 C $Header: /u/gcmpack/MITgcm/verification/tutorial_deep_convection/code/mom_calc_3d_strain.F,v 1.1 2013/09/30 18:19:41 jmc Exp $
2 C $Name: $
3
4 #include "MOM_COMMON_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: MOM_CALC_3D_STRAIN
9
10 C !INTERFACE:
11 SUBROUTINE MOM_CALC_3D_STRAIN(
12 O str11, str22, str33, str12, str13, str23,
13 I bi, bj, myThid )
14
15 C !DESCRIPTION:
16 C Calculates the strain tensor of the 3-D flow field
17
18 C !USES:
19 IMPLICIT NONE
20
21 C == Global variables ==
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "GRID.h"
26 #include "DYNVARS.h"
27
28 C !INPUT PARAMETERS:
29 C bi, bj :: tile indices
30 C myThid :: my Thread Id number
31 INTEGER bi, bj
32 INTEGER myThid
33
34 C !OUTPUT PARAMETERS:
35 C str11 :: strain component Vxx @ grid-cell center
36 C str22 :: strain component Vyy @ grid-cell center
37 C str33 :: strain component Vzz @ grid-cell center
38 C str12 :: strain component Vxy @ grid-cell corner
39 C str13 :: strain component Vxz @ above uVel
40 C str23 :: strain component Vyz @ above vVel
41 _RL str11(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
42 _RL str22(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
43 _RL str33(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
44 _RL str12(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
45 _RL str13(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
46 _RL str23(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
47
48 C !LOCAL VARIABLES:
49 C i, j, k :: loop indices
50 INTEGER i, j, k
51 INTEGER kp1
52 _RL maskp1
53 LOGICAL freeSlip3d
54 CEOP
55 freeSlip3d = .NOT.( no_slip_sides .AND. no_slip_bottom )
56
57 DO k=1,Nr
58 kp1 = MIN(k+1,Nr)
59 maskp1 = oneRL
60 IF ( k.EQ.Nr ) maskp1 = zeroRL
61
62 C- Fills up array edges:
63 i = sNx+OLx
64 DO j=1-OLy,sNy+OLy
65 str11(i,j,k) = 0. _d 0
66 ENDDO
67 j = sNy+OLy
68 DO i=1-OLx,sNx+OLx
69 str22(i,j,k) = 0. _d 0
70 ENDDO
71 i = 1-OLx
72 DO j=1-OLy,sNy+OLy
73 str12(i,j,k) = 0. _d 0
74 str13(i,j,k) = 0. _d 0
75 ENDDO
76 j = 1-OLy
77 DO i=1-OLx,sNx+OLx
78 str12(i,j,k) = 0. _d 0
79 str23(i,j,k) = 0. _d 0
80 ENDDO
81
82 C str11 = u_x
83 DO j=1-OLy,sNy+OLy
84 DO i=1-OLx,sNx+OLx-1
85 str11(i,j,k) =
86 & recip_dxF(i,j,bi,bj)*(
87 & uVel(i+1, j , k ,bi,bj)-uVel( i , j , k ,bi,bj) )
88 ENDDO
89 ENDDO
90
91 C str22 = v_y
92 DO j=1-OLy,sNy+OLy-1
93 DO i=1-OLx,sNx+OLx
94 str22(i,j,k) =
95 & recip_dyF(i,j,bi,bj)*(
96 & vVel( i ,j+1, k ,bi,bj)-vVel( i , j , k ,bi,bj) )
97 ENDDO
98 ENDDO
99
100 C str33 = w_z
101 DO j=1-OLy,sNy+OLy
102 DO i=1-OLx,sNx+OLx
103 str33(i,j,k) =
104 & recip_drF(k)*rkSign*(
105 & maskp1*wVel( i , j ,kp1,bi,bj)-wVel( i , j , k ,bi,bj) )
106 ENDDO
107 ENDDO
108
109 C str12 = ( u_y + v_x )/2
110 DO j=2-OLy,sNy+OLy
111 DO i=2-OLx,sNx+OLx
112 str12(i,j,k) = halfRL*(
113 & recip_dyU(i,j,bi,bj)*(
114 & uVel( i , j , k ,bi,bj)-uVel( i ,j-1, k ,bi,bj) )
115 & +recip_dxV(i,j,bi,bj)*(
116 & vVel( i , j , k ,bi,bj)-vVel(i-1, j , k ,bi,bj) )
117 & )
118 ENDDO
119 ENDDO
120
121 C str13 & str23 special case: k=1
122 IF ( k.EQ.1 .AND. freeSlip3d ) THEN
123 DO j=1-OLy,sNy+OLy
124 DO i=1-OLx,sNx+OLx
125 str13(i,j,k) = 0. _d 0
126 str23(i,j,k) = 0. _d 0
127 ENDDO
128 ENDDO
129 ELSEIF ( k.EQ.1 ) THEN
130 C-- should put surface wind-stress if z-coords; but right in p-coords:
131 DO j=1-OLy,sNy+OLy
132 DO i=2-OLx,sNx+OLx
133 str13(i,j,k) = halfRL*(
134 & recip_drC(k)*rkSign*(
135 & uVel( i , j , k ,bi,bj)*twoRL )
136 & +recip_dxC(i,j,bi,bj)*(
137 & wVel( i , j , k ,bi,bj)-wVel(i-1, j , k ,bi,bj) )
138 & )
139 ENDDO
140 ENDDO
141 DO j=2-OLy,sNy+OLy
142 DO i=1-OLx,sNx+OLx
143 str23(i,j,k) = halfRL*(
144 & recip_drC(k)*rkSign*(
145 & vVel( i , j , k ,bi,bj)*twoRL )
146 & +recip_dyC(i,j,bi,bj)*(
147 & wVel( i , j , k ,bi,bj)-wVel( i ,j-1, k ,bi,bj) )
148 & )
149 ENDDO
150 ENDDO
151 ELSE
152 C str13 = ( u_z + w_x )/2
153 DO j=1-OLy,sNy+OLy
154 DO i=2-OLx,sNx+OLx
155 str13(i,j,k) = halfRL*(
156 & recip_drC(k)*rkSign*(
157 & uVel( i , j , k ,bi,bj)-uVel( i , j ,k-1 ,bi,bj) )
158 & +recip_dxC(i,j,bi,bj)*(
159 & wVel( i , j , k ,bi,bj)-wVel(i-1, j , k ,bi,bj) )
160 & )
161 ENDDO
162 ENDDO
163 C str23 = ( v_z + w_y )/2
164 DO j=2-OLy,sNy+OLy
165 DO i=1-OLx,sNx+OLx
166 str23(i,j,k) = halfRL*(
167 & recip_drC(k)*rkSign*(
168 & vVel( i , j , k ,bi,bj)-vVel( i , j ,k-1,bi,bj) )
169 & +recip_dyC(i,j,bi,bj)*(
170 & wVel( i , j , k ,bi,bj)-wVel( i ,j-1, k ,bi,bj) )
171 & )
172 ENDDO
173 ENDDO
174 ENDIF
175
176 IF ( freeSlip3d ) THEN
177 DO j=2-OLy,sNy+OLy
178 DO i=2-OLx,sNx+OLx
179 str12(i,j,k) = str12(i,j,k)
180 & *maskW(i,j-1,k,bi,bj)*maskW(i,j,k,bi,bj)
181 ENDDO
182 ENDDO
183 IF ( k.GE.2 ) THEN
184 DO j=1-OLy,sNy+OLy
185 DO i=2-OLx,sNx+OLx
186 str13(i,j,k) = str13(i,j,k)
187 & *maskW(i,j,k-1,bi,bj)*maskW(i,j,k,bi,bj)
188 ENDDO
189 ENDDO
190 DO j=2-OLy,sNy+OLy
191 DO i=1-OLx,sNx+OLx
192 str23(i,j,k) = str23(i,j,k)
193 & *maskS(i,j,k-1,bi,bj)*maskS(i,j,k,bi,bj)
194 ENDDO
195 ENDDO
196 ENDIF
197 ENDIF
198
199 C-- end k loop
200 ENDDO
201
202 C-- fill-up strain tensor component at the very bottom (k=Nr+1)
203 k = Nr+1
204
205 DO j=1-OLy,sNy+OLy
206 DO i=1-OLx,sNx+OLx
207 str13(i,j,k) = 0. _d 0
208 str23(i,j,k) = 0. _d 0
209 ENDDO
210 ENDDO
211
212 IF ( .NOT.freeSlip3d ) THEN
213
214 C str13 = ( u_z + w_x )/2
215 DO j=1-OLy,sNy+OLy
216 DO i=2-OLx,sNx+OLx
217 str13(i,j,k) =
218 & recip_drF(Nr)*rkSign*(
219 c & recip_drC(k)*rkSign*(
220 & 0. _d 0 - uVel( i , j ,k-1 ,bi,bj) )
221 ENDDO
222 ENDDO
223
224 C str23 = ( v_z + w_y )/2
225 DO j=2-OLy,sNy+OLy
226 DO i=1-OLx,sNx+OLx
227 str23(i,j,k) =
228 & recip_drF(Nr)*rkSign*(
229 c & recip_drC(k)*rkSign*(
230 & 0. _d 0 - vVel( i , j ,k-1,bi,bj) )
231 ENDDO
232 ENDDO
233
234 ENDIF
235
236 C Special stuff for Cubed Sphere
237 c IF (useCubedSphereExchange) THEN
238 c STOP 'S/R MOM_CALC_3D_STRAIN: should not be used on the cube!'
239 c ENDIF
240
241 RETURN
242 END

  ViewVC Help
Powered by ViewVC 1.1.22