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

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

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


Revision 1.14 - (show annotations) (download)
Fri Mar 24 23:51:14 2017 UTC (7 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.13: +7 -3 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 C $Header: /u/gcmpack/MITgcm/pkg/shap_filt/shap_filt_apply_uv.F,v 1.13 2015/01/21 14:36:01 jmc Exp $
2 C $Name: $
3
4 #include "SHAP_FILT_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SHAP_FILT_APPLY_UV
8 C !INTERFACE:
9 SUBROUTINE SHAP_FILT_APPLY_UV(
10 U uFld, vFld,
11 I myTime, myIter, myThid )
12
13 C !DESCRIPTION: \bv
14 C *==========================================================*
15 C | S/R SHAP_FILT_cwAPPLY_UV
16 C | o Apply Shapiro filter on momentum :
17 C | filter the argments uFld & vFld.
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 c #include "DYNVARS.h"
29 #include "GRID.h"
30 #include "SHAP_FILT.h"
31 #ifdef ALLOW_FRICTION_HEATING
32 # include "FFIELDS.h"
33 #endif
34
35 C !INPUT/OUTPUT PARAMETERS:
36 C == Routine arguments ==
37 C uFld :: velocity field (U component) on which filter applies
38 C vFld :: velocity field (V component) on which filter applies
39 C myTime :: Current time in simulation
40 C myIter :: Current iteration number in simulation
41 C myThid :: Thread number for this instance of SHAP_FILT_APPLY_UV
42 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
43 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
44 _RL myTime
45 INTEGER myIter
46 INTEGER myThid
47
48 #ifdef ALLOW_SHAP_FILT
49
50 C !FUNCTIONS:
51 LOGICAL DIFFERENT_MULTIPLE
52 EXTERNAL DIFFERENT_MULTIPLE
53 #ifdef ALLOW_DIAGNOSTICS
54 LOGICAL DIAGNOSTICS_IS_ON
55 EXTERNAL DIAGNOSTICS_IS_ON
56 #endif /* ALLOW_DIAGNOSTICS */
57
58 C !LOCAL VARIABLES:
59 C == Local variables ==
60 #ifdef USE_OLD_SHAPIRO_FILTERS
61 C bi,bj,k :: loop index
62 INTEGER bi, bj, k
63 #else /* USE_OLD_SHAPIRO_FILTERS */
64 LOGICAL diag_dKE
65 CHARACTER*(10) suff
66 #if ( defined ALLOW_FRICTION_HEATING ) || ( defined ALLOW_DIAGNOSTICS )
67 INTEGER bi, bj, k, i, j
68 _RL dKE_shap(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
69 #endif
70 #endif /* USE_OLD_SHAPIRO_FILTERS */
71 CEOP
72
73 IF ( momStepping .AND. nShapUV.GT.0) THEN
74
75 #ifdef USE_OLD_SHAPIRO_FILTERS
76 _EXCH_XYZ_RL( uFld,myThid )
77 _EXCH_XYZ_RL( vFld,myThid )
78
79 DO bj=myByLo(myThid),myByHi(myThid)
80 DO bi=myBxLo(myThid),myBxHi(myThid)
81 DO k=1, Nr
82 CALL SHAP_FILT_U( uFld,bi,bj,k,myTime,myThid )
83 CALL SHAP_FILT_V( vFld,bi,bj,k,myTime,myThid )
84 ENDDO
85 ENDDO
86 ENDDO
87
88 _EXCH_XYZ_RL( uFld,myThid )
89 _EXCH_XYZ_RL( vFld,myThid )
90 #else
91 IF (Shap_funct.EQ.1) THEN
92 CALL SHAP_FILT_UV_S1(
93 U uFld, vFld, Shap_tmpFld1, Shap_tmpFld2,
94 I Nr, myTime, myThid )
95 ELSEIF (Shap_funct.EQ.2 .OR. Shap_funct.EQ.20) THEN
96 CALL SHAP_FILT_UV_S2(
97 U uFld, vFld, Shap_tmpFld1, Shap_tmpFld2,
98 I Nr, myTime, myThid )
99 ELSEIF (Shap_funct.EQ.4) THEN
100 CALL SHAP_FILT_UV_S4(
101 U uFld, vFld, Shap_tmpFld1, Shap_tmpFld2,
102 I Nr, myTime, myThid )
103 c ELSEIF (Shap_funct.EQ.20) THEN
104 c CALL SHAP_FILT_UV_S2G(
105 c U uFld, vFld, Shap_tmpFld1, Shap_tmpFld2,
106 c I Nr, myTime, myThid )
107 ELSEIF (Shap_funct.EQ.21) THEN
108 CALL SHAP_FILT_UV_S2C(
109 U uFld, vFld, Shap_tmpFld1, Shap_tmpFld2,
110 I Nr, myTime, myThid )
111 ELSE
112 STOP 'SHAP_FILT_APPLY_UV: Ooops! Bad Shap_funct in UV block'
113 ENDIF
114
115 C----- Diagnostic of Shapiro Filter effect on Momentum :
116 C Note: Shap_tmpFld1,2 from shap_filt_tracer_s2 (and not s1, s4)
117 C are directly proportional to Delta-U,V due to the Filter
118 IF ( Shap_funct.NE.1 .AND. Shap_funct.NE.4 .AND.
119 & DIFFERENT_MULTIPLE(Shap_diagFreq,myTime,deltaTClock)
120 & ) THEN
121 IF ( rwSuffixType.EQ.0 ) THEN
122 WRITE(suff,'(I10.10)') myIter
123 ELSE
124 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
125 ENDIF
126 CALL WRITE_FLD_XYZ_RL( 'shap_dU.', suff, Shap_tmpFld1,
127 & myIter,myThid)
128 CALL WRITE_FLD_XYZ_RL( 'shap_dV.', suff, Shap_tmpFld2,
129 & myIter,myThid)
130 ENDIF
131
132 IF ( Shap_funct.NE.1 .AND. Shap_funct.NE.4 .AND.
133 & ( addFrictionHeating .OR. useDiagnostics ) ) THEN
134 diag_dKE = .FALSE.
135 #ifdef ALLOW_DIAGNOSTICS
136 IF ( useDiagnostics ) THEN
137 CALL DIAGNOSTICS_FILL( Shap_tmpFld1, 'SHAP_dU ', 0, Nr,
138 & 0, 1, 1, myThid )
139 CALL DIAGNOSTICS_FILL( Shap_tmpFld2, 'SHAP_dV ', 0, Nr,
140 & 0, 1, 1, myThid )
141 diag_dKE = DIAGNOSTICS_IS_ON('SHAP_dKE',myThid)
142 ENDIF
143 #endif /* ALLOW_DIAGNOSTICS */
144 #if ( defined ALLOW_FRICTION_HEATING ) || ( defined ALLOW_DIAGNOSTICS )
145 IF ( addFrictionHeating .OR. diag_dKE ) THEN
146 DO bj=myByLo(myThid),myByHi(myThid)
147 DO bi=myBxLo(myThid),myBxHi(myThid)
148 DO k=1,Nr
149 DO j=1,sNy
150 DO i=1,sNx
151 dKE_shap(i,j) = 0.5 _d 0 *(
152 & (
153 & Shap_tmpFld1(i ,j,k,bi,bj)*uFld(i ,j,k,bi,bj)
154 & *_hFacW(i ,j, k,bi,bj)*rAw(i ,j, bi,bj)
155 & +Shap_tmpFld1(i+1,j,k,bi,bj)*uFld(i+1,j,k,bi,bj)
156 & *_hFacW(i+1,j,k,bi,bj)*rAw(i+1,j,bi,bj)
157 & )
158 & + (
159 & Shap_tmpFld2(i,j ,k,bi,bj)*vFld(i,j ,k,bi,bj)
160 & *_hFacS(i,j ,k,bi,bj)*rAs(i,j ,bi,bj)
161 & +Shap_tmpFld2(i,j+1,k,bi,bj)*vFld(i,j+1,k,bi,bj)
162 & *_hFacS(i,j+1,k,bi,bj)*rAs(i,j+1,bi,bj)
163 & ) )*recip_rA(i,j,bi,bj)
164 ENDDO
165 ENDDO
166 #ifdef ALLOW_FRICTION_HEATING
167 IF ( addFrictionHeating ) THEN
168 DO j=1,sNy
169 DO i=1,sNx
170 frictionHeating(i,j,k,bi,bj) =
171 & frictionHeating(i,j,k,bi,bj)
172 & - dKE_shap(i,j)*drF(k)*rUnit2mass
173 ENDDO
174 ENDDO
175 ENDIF
176 #endif /* ALLOW_FRICTION_HEATING */
177 #ifdef ALLOW_DIAGNOSTICS
178 IF ( diag_dKE ) THEN
179 CALL DIAGNOSTICS_FILL( dKE_shap, 'SHAP_dKE',
180 & k, 1, 2, bi, bj, myThid )
181 ENDIF
182 #endif /* ALLOW_DIAGNOSTICS */
183 ENDDO
184 ENDDO
185 ENDDO
186 ENDIF
187 #endif /* ALLOW_FRICTION_HEATING or ALLOW_DIAGNOSTICS */
188 ENDIF
189
190 #endif /* USE_OLD_SHAPIRO_FILTERS */
191
192 ENDIF
193 #endif /* ALLOW_SHAP_FILT */
194
195 RETURN
196 END

  ViewVC Help
Powered by ViewVC 1.1.22