/[MITgcm]/MITgcm/verification/tutorial_deep_convection/code/mom_calc_3d_strain.F
ViewVC logotype

Contents of /MITgcm/verification/tutorial_deep_convection/code/mom_calc_3d_strain.F

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


Revision 1.2 - (show annotations) (download)
Tue Nov 5 13:53:26 2013 UTC (11 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
FILE REMOVED
- move to pkg/mom_common and model/src (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 str11 = u_x
63 DO j=1-OLy,sNy+OLy
64 DO i=1-OLx,sNx+OLx-1
65 str11(i,j,k) =
66 & recip_dxF(i,j,bi,bj)*(
67 & uVel(i+1, j , k ,bi,bj)-uVel( i , j , k ,bi,bj) )
68 ENDDO
69 ENDDO
70
71 C str22 = v_y
72 DO j=1-OLy,sNy+OLy-1
73 DO i=1-OLx,sNx+OLx
74 str22(i,j,k) =
75 & recip_dyF(i,j,bi,bj)*(
76 & vVel( i ,j+1, k ,bi,bj)-vVel( i , j , k ,bi,bj) )
77 ENDDO
78 ENDDO
79
80 C str33 = w_z
81 DO j=1-OLy,sNy+OLy
82 DO i=1-OLx,sNx+OLx
83 str33(i,j,k) =
84 & recip_drF(k)*rkSign*(
85 & maskp1*wVel( i , j ,kp1,bi,bj)-wVel( i , j , k ,bi,bj) )
86 ENDDO
87 ENDDO
88
89 C str12 = ( u_y + v_x )/2
90 DO j=2-OLy,sNy+OLy
91 DO i=2-OLx,sNx+OLx
92 str12(i,j,k) = halfRL*(
93 & recip_dyU(i,j,bi,bj)*(
94 & uVel( i , j , k ,bi,bj)-uVel( i ,j-1, k ,bi,bj) )
95 & +recip_dxV(i,j,bi,bj)*(
96 & vVel( i , j , k ,bi,bj)-vVel(i-1, j , k ,bi,bj) )
97 & )
98 ENDDO
99 ENDDO
100
101 C str13 & str23 special case: k=1
102 IF ( k.EQ.1 .AND. freeSlip3d ) THEN
103 DO j=1-OLy,sNy+OLy
104 DO i=1-OLx,sNx+OLx
105 str13(i,j,k) = 0. _d 0
106 str23(i,j,k) = 0. _d 0
107 ENDDO
108 ENDDO
109 ELSEIF ( k.EQ.1 ) THEN
110 C-- should put surface wind-stress if z-coords; but right in p-coords:
111 DO j=1-OLy,sNy+OLy
112 DO i=2-OLx,sNx+OLx
113 str13(i,j,k) = halfRL*(
114 & recip_drC(k)*rkSign*(
115 & uVel( i , j , k ,bi,bj)*twoRL )
116 & +recip_dxC(i,j,bi,bj)*(
117 & wVel( i , j , k ,bi,bj)-wVel(i-1, j , k ,bi,bj) )
118 & )
119 ENDDO
120 ENDDO
121 DO j=2-OLy,sNy+OLy
122 DO i=1-OLx,sNx+OLx
123 str23(i,j,k) = halfRL*(
124 & recip_drC(k)*rkSign*(
125 & vVel( i , j , k ,bi,bj)*twoRL )
126 & +recip_dyC(i,j,bi,bj)*(
127 & wVel( i , j , k ,bi,bj)-wVel( i ,j-1, k ,bi,bj) )
128 & )
129 ENDDO
130 ENDDO
131 ELSE
132 C str13 = ( u_z + w_x )/2
133 DO j=1-OLy,sNy+OLy
134 DO i=2-OLx,sNx+OLx
135 str13(i,j,k) = halfRL*(
136 & recip_drC(k)*rkSign*(
137 & uVel( i , j , k ,bi,bj)-uVel( i , j ,k-1 ,bi,bj) )
138 & +recip_dxC(i,j,bi,bj)*(
139 & wVel( i , j , k ,bi,bj)-wVel(i-1, j , k ,bi,bj) )
140 & )
141 ENDDO
142 ENDDO
143 C str23 = ( v_z + w_y )/2
144 DO j=2-OLy,sNy+OLy
145 DO i=1-OLx,sNx+OLx
146 str23(i,j,k) = halfRL*(
147 & recip_drC(k)*rkSign*(
148 & vVel( i , j , k ,bi,bj)-vVel( i , j ,k-1,bi,bj) )
149 & +recip_dyC(i,j,bi,bj)*(
150 & wVel( i , j , k ,bi,bj)-wVel( i ,j-1, k ,bi,bj) )
151 & )
152 ENDDO
153 ENDDO
154 ENDIF
155
156 IF ( freeSlip3d ) THEN
157 DO j=2-OLy,sNy+OLy
158 DO i=2-OLx,sNx+OLx
159 str12(i,j,k) = str12(i,j,k)
160 & *maskW(i,j-1,k,bi,bj)*maskW(i,j,k,bi,bj)
161 ENDDO
162 ENDDO
163 IF ( k.GE.2 ) THEN
164 DO j=1-OLy,sNy+OLy
165 DO i=1-OLx,sNx+OLx
166 str13(i,j,k) = str13(i,j,k)
167 & *maskW(i,j,k-1,bi,bj)*maskW(i,j,k,bi,bj)
168 ENDDO
169 ENDDO
170 DO j=1-OLy,sNy+OLy
171 DO i=1-OLx,sNx+OLx
172 str23(i,j,k) = str23(i,j,k)
173 & *maskS(i,j,k-1,bi,bj)*maskS(i,j,k,bi,bj)
174 ENDDO
175 ENDDO
176 ENDIF
177 ENDIF
178
179 C-- end k loop
180 ENDDO
181
182 C-- fill-up strain tensor component at the very bottom (k=Nr+1)
183 k = Nr+1
184
185 IF ( freeSlip3d ) THEN
186 DO j=1-OLy,sNy+OLy
187 DO i=1-OLx,sNx+OLx
188 str13(i,j,k) = 0. _d 0
189 str23(i,j,k) = 0. _d 0
190 ENDDO
191 ENDDO
192 ELSE
193
194 C str13 = ( u_z + w_x )/2
195 DO j=1-OLy,sNy+OLy
196 DO i=2-OLx,sNx+OLx
197 str13(i,j,k) =
198 & recip_drF(Nr)*rkSign*(
199 c & recip_drC(k)*rkSign*(
200 & 0. _d 0 - uVel( i , j ,k-1 ,bi,bj) )
201 ENDDO
202 ENDDO
203
204 C str23 = ( v_z + w_y )/2
205 DO j=2-OLy,sNy+OLy
206 DO i=1-OLx,sNx+OLx
207 str23(i,j,k) =
208 & recip_drF(Nr)*rkSign*(
209 c & recip_drC(k)*rkSign*(
210 & 0. _d 0 - vVel( i , j ,k-1,bi,bj) )
211 ENDDO
212 ENDDO
213
214 ENDIF
215
216 C Special stuff for Cubed Sphere
217 c IF (useCubedSphereExchange) THEN
218 c STOP 'S/R MOM_CALC_3D_STRAIN: should not be used on the cube!'
219 c ENDIF
220
221 RETURN
222 END

  ViewVC Help
Powered by ViewVC 1.1.22