/[MITgcm]/MITgcm/pkg/shap_filt/shap_filt_uv_s2g.F
ViewVC logotype

Contents of /MITgcm/pkg/shap_filt/shap_filt_uv_s2g.F

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


Revision 1.4 - (show annotations) (download)
Mon Mar 4 02:28:25 2002 UTC (22 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint48f_post, checkpoint46k_post, checkpoint51k_post, checkpoint47j_post, checkpoint53b_pre, checkpoint48d_pre, checkpoint51l_post, checkpoint51j_post, branch-exfmods-tag, checkpoint47e_post, checkpoint44h_pre, checkpoint52l_pre, checkpoint48i_post, checkpoint52e_pre, hrcube4, hrcube5, checkpoint52j_post, checkpoint47f_post, checkpoint48d_post, checkpoint51o_pre, checkpoint46j_post, checkpoint47c_post, checkpoint50e_post, checkpoint52e_post, checkpoint50c_post, checkpoint51n_pre, checkpoint47d_post, checkpoint44f_pre, checkpoint47a_post, checkpoint46f_post, checkpoint52d_pre, checkpoint53c_post, checkpoint48a_post, checkpoint46n_post, checkpoint51f_pre, checkpoint46d_pre, checkpoint48e_post, checkpoint46e_post, checkpoint48h_post, checkpoint50c_pre, checkpoint44g_post, branchpoint-genmake2, checkpoint46h_pre, checkpoint44h_post, checkpoint50b_pre, checkpoint52j_pre, checkpoint46e_pre, branch-netcdf, checkpoint50d_pre, checkpoint45d_post, checkpoint51r_post, checkpoint47i_post, checkpoint52b_pre, checkpoint52n_post, checkpoint46l_pre, checkpoint46j_pre, checkpoint45b_post, checkpoint46b_pre, checkpoint51i_post, checkpoint47h_post, checkpoint48c_post, checkpoint46l_post, checkpoint51e_post, checkpoint51b_post, checkpoint46, checkpoint51l_pre, checkpoint52m_post, checkpoint51c_post, checkpoint53a_post, checkpoint48, checkpoint49, checkpoint44f_post, checkpoint47b_post, checkpoint53b_post, checkpoint51o_post, checkpoint48g_post, checkpoint51q_post, checkpoint52l_post, checkpoint52k_post, checkpoint51, checkpoint50, checkpoint53, checkpoint52, checkpoint50d_post, checkpoint52d_post, checkpoint46g_pre, checkpoint51b_pre, checkpoint52a_post, checkpoint46a_post, checkpoint47g_post, checkpoint52b_post, checkpoint52f_post, checkpoint52c_post, checkpoint46m_post, checkpoint51h_pre, checkpoint46a_pre, checkpoint50g_post, checkpoint45c_post, checkpoint51g_post, ecco_c52_e35, checkpoint46b_post, checkpoint51f_post, checkpoint46d_post, checkpoint48b_post, checkpoint50b_post, checkpoint46g_post, checkpoint45a_post, checkpoint50f_post, checkpoint50a_post, checkpoint46c_pre, checkpoint50f_pre, checkpoint52a_pre, checkpoint47d_pre, checkpoint51d_post, checkpoint48c_pre, checkpoint46i_post, checkpoint51m_post, checkpoint51t_post, checkpoint53d_pre, checkpoint47, checkpoint46c_post, checkpoint50h_post, checkpoint52i_post, checkpoint51a_post, checkpoint45, checkpoint46h_post, checkpoint50e_pre, checkpoint50i_post, checkpoint51p_post, checkpoint51n_post, checkpoint51i_pre, checkpoint52i_pre, checkpoint51u_post, checkpoint52h_pre, checkpoint52f_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post
Branch point for: netcdf-sm0, branch-genmake2, branch-nonh, tg2-branch, checkpoint51n_branch, branch-exfmods-curt
Changes since 1.3: +3 -7 lines
  include the overlap when loads the field in temp. array.

1 C $Header: /u/gcmpack/MITgcm/pkg/shap_filt/shap_filt_uv_s2g.F,v 1.3 2002/03/04 01:32:55 jmc Exp $
2 C $Name: $
3
4 #include "SHAP_FILT_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SHAP_FILT_UV_S2G
8 C !INTERFACE:
9 SUBROUTINE SHAP_FILT_UV_S2G(
10 U uFld, vFld, tmpFldU, tmpFldV,
11 I kSize, myTime, myThid )
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | S/R SHAP_FILT_UV_S2G
15 C | o Applies Shapiro filter to velocity field (u & v).
16 C | o use filtering function "S2" = [1 - (d_xx+d_yy)^n]
17 C | with grid spacing (physical space filter) ;
18 C *==========================================================*
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C == Global variables ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "GRID.h"
29 #include "SHAP_FILT.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C == Routine arguments
33 C uFld :: velocity field (U component) on which filter applies
34 C vFld :: velocity field (V component) on which filter applies
35 C tmpFldU :: working temporary array
36 C tmpFldV :: working temporary array
37 C kSize :: length of 3rd Dim : either =1 (2D field) or =Nr (3D field)
38 C myTime :: Current time in simulation
39 C myThid :: Thread number for this instance of SHAP_FILT_UV_S2G
40 INTEGER kSize
41 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
42 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
43 _RL tmpFldU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
44 _RL tmpFldV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
45 _RL myTime
46 INTEGER myThid
47
48 #ifdef ALLOW_SHAP_FILT
49
50 C !LOCAL VARIABLES:
51 C == Local variables ==
52 INTEGER bi,bj,k,i,j,N
53 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
54 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55 _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56 _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57 _RL tmpGrdU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58 _RL tmpGrdV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
59 CEOP
60
61 IF (nShapUV.gt.0 .AND. Shap_uvtau.GT.0.) THEN
62
63 DO bj=myByLo(myThid),myByHi(myThid)
64 DO bi=myBxLo(myThid),myBxHi(myThid)
65 DO K=1,kSize
66 DO J=1-OLy,sNy+OLy
67 DO I=1-OLx,sNx+OLx
68 tmpFldU(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
69 & *_maskW(i,j,k,bi,bj)
70 tmpFldV(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
71 & *_maskS(i,j,k,bi,bj)
72 ENDDO
73 ENDDO
74 ENDDO
75 ENDDO
76 ENDDO
77
78
79 C [d_xx+d_yy]^n tmpFld
80
81 DO N=1,nShapUV
82
83 IF (kSize.EQ.Nr) THEN
84 CALL EXCH_UV_XYZ_RL(tmpFldU,tmpFldV,.TRUE.,myThid)
85 ELSE
86 CALL EXCH_UV_XY_RL(tmpFldU,tmpFldV,.TRUE.,myThid)
87 ENDIF
88
89 DO bj=myByLo(myThid),myByHi(myThid)
90 DO bi=myBxLo(myThid),myBxHi(myThid)
91 DO K=1,kSize
92
93 C [d_xx+d_yy] tmpFld
94 CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
95 CALL MOM_VI_CALC_HDIV(bi,bj,k,
96 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
97 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
98 & hDiv,myThid)
99 CALL MOM_VI_CALC_RELVORT3(bi,bj,k,
100 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
101 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
102 & hFacZ,vort3,myThid)
103 CALL MOM_VI_DEL2UV(
104 I bi,bj,k,hDiv,vort3,hFacZ,
105 O tmpGrdU,tmpGrdV,
106 & myThid)
107
108 IF (Shap_uvLength.EQ.0.) THEN
109 DO J=1,sNy+1
110 DO I=1,sNx+1
111 tmpFldU(i,j,k,bi,bj) = -0.125
112 & *rAw(i,j,bi,bj)*tmpGrdU(i,j)*_maskW(i,j,k,bi,bj)
113 tmpFldV(i,j,k,bi,bj) = -0.125
114 & *rAs(i,j,bi,bj)*tmpGrdV(i,j)*_maskS(i,j,k,bi,bj)
115 ENDDO
116 ENDDO
117 ELSE
118 DO J=1,sNy+1
119 DO I=1,sNx+1
120 tmpFldU(i,j,k,bi,bj) = -0.125
121 & *Shap_uvLength*Shap_uvLength
122 & *tmpGrdU(i,j)*_maskW(i,j,k,bi,bj)
123 tmpFldV(i,j,k,bi,bj) = -0.125
124 & *Shap_uvLength*Shap_uvLength
125 & *tmpGrdV(i,j)*_maskS(i,j,k,bi,bj)
126 ENDDO
127 ENDDO
128 ENDIF
129
130
131 ENDDO
132 ENDDO
133 ENDDO
134
135 ENDDO
136
137 C F <- [1 - (d_xx+d_yy)^n *deltaT/tau].F
138 DO bj=myByLo(myThid),myByHi(myThid)
139 DO bi=myBxLo(myThid),myBxHi(myThid)
140 DO K=1,kSize
141 DO J=1,sNy+1
142 DO I=1,sNx+1
143 uFld(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
144 & -tmpFldU(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
145 vFld(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
146 & -tmpFldV(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
147 ENDDO
148 ENDDO
149 ENDDO
150 ENDDO
151 ENDDO
152
153 IF (kSize.EQ.Nr) THEN
154 CALL EXCH_UV_XYZ_RL(uFld,vFld,.TRUE.,myThid)
155 ELSEIF (kSize.EQ.1) THEN
156 CALL EXCH_UV_XY_RL(uFld,vFld,.TRUE.,myThid)
157 ELSE
158 STOP 'S/R SHAP_FILT_UV_S2G: kSize is wrong'
159 ENDIF
160
161 ENDIF
162 #endif /* ALLOW_SHAP_FILT */
163
164 RETURN
165 END

  ViewVC Help
Powered by ViewVC 1.1.22