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

Annotation 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.1 - (hide annotations) (download)
Mon Sep 30 18:19:41 2013 UTC (11 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64p
add 1rst version of isotropic 3-D Smagorinsky code (from Louis-Philippe),
  for now all in this exp. code dir.

1 jmc 1.1 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_calc_strain.F,v 1.4 2005/10/12 00:58:29 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