/[MITgcm]/MITgcm_contrib/PRM/multi_comp_setup/cg/code/set_ddtvars.F
ViewVC logotype

Annotation of /MITgcm_contrib/PRM/multi_comp_setup/cg/code/set_ddtvars.F

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


Revision 1.6 - (hide annotations) (download)
Sun May 4 20:39:32 2008 UTC (17 years, 2 months ago) by jmc
Branch: MAIN
Changes since 1.5: +9 -3 lines
pass saltC & gSaltC between FG and CG components

1 jmc 1.6 C $Header: /u/gcmpack/MITgcm_contrib/PRM/multi_comp_setup/cg/code/set_ddtvars.F,v 1.5 2008/03/29 19:43:14 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PACKAGES_CONFIG.h"
5 jmc 1.5 #ifdef ALLOW_MYPACKAGE
6 jmc 1.3 # include "MYPACKAGE_OPTIONS.h"
7     #else
8     # include "CPP_OPTIONS.h"
9     #endif
10 jmc 1.1
11     CBOP
12     C !ROUTINE: SET_DDTVARS
13     C !INTERFACE:
14 jmc 1.6 SUBROUTINE SET_DDTVARS( gUVelC, gVVelC, gThetaC, gSaltC,
15 jmc 1.5 I cnx, cny, cnr,
16 jmc 1.1 I myTime, myIter, myThid )
17     C !DESCRIPTION: \bv
18     C *==========================================================*
19     C | S/R SET_DDTVARS
20 jmc 1.5 C | o Set tendencies to be used as additional forcing
21 jmc 1.1 C *==========================================================*
22     C *==========================================================*
23     C \ev
24    
25     C !USES:
26     IMPLICIT NONE
27    
28     C == Global data ==
29     #include "SIZE.h"
30     #include "EEPARAMS.h"
31     #include "PARAMS.h"
32 jmc 1.5 #include "GRID.h"
33 jmc 1.1 #include "ORIENTATION.h"
34 jmc 1.5 #include "EXT_MOM_TEND.h"
35     #ifdef ALLOW_MYPACKAGE
36 jmc 1.3 # include "MYPACKAGE.h"
37     #endif
38 jmc 1.1
39     C !INPUT/OUTPUT PARAMETERS:
40     C == Routine arguments ==
41     C myTime :: Current time in simulation
42     C myIter :: Current iteration number
43     C myThid :: Thread Id number
44     INTEGER cnx, cny, cnr
45     REAL*8 gUVelC( cnx, cny, cnr)
46     REAL*8 gVVelC( cnx, cny, cnr)
47     REAL*8 gThetaC(cnx, cny, cnr)
48 jmc 1.6 REAL*8 gSaltC( cnx, cny, cnr)
49 jmc 1.1 _RL myTime
50     INTEGER myIter
51     INTEGER myThid
52    
53     C !FUNCTIONS:
54     LOGICAL DIFFERENT_MULTIPLE
55     EXTERNAL DIFFERENT_MULTIPLE
56    
57     C !LOCAL VARIABLES:
58     C == Local variables ==
59     C i,j,k :: Loop counters
60     INTEGER i,j,k
61 jmc 1.5 INTEGER bi,bj
62 jmc 1.1 C Variables used for I/O
63     CHARACTER*(10) suff
64 jmc 1.5 C Variables used for smoothing momentum tendencies:
65     _RL viscAhDivDt, viscAhVortDt
66     _RL locDiv (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
67     _RL locVort(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
68     _RL locFx (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
69     _RL locFy (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
70 jmc 1.1 CEOP
71    
72 jmc 1.5 viscAhDivDt = myPa_param1 * deltaTmom
73     viscAhVortDt = myPa_param2 * deltaTmom
74    
75 jmc 1.1 IF ( cnx .NE. sNx ) THEN
76     STOP 'SET_DTTVARS cnx NE sNx'
77     ENDIF
78     IF ( cny .NE. sNy ) THEN
79     STOP 'SET_DTTVARS cny NE sNy'
80     ENDIF
81     IF ( cnr .NE. Nr ) THEN
82     STOP 'SET_DTTVARS cnr NE Nr'
83     ENDIF
84    
85 jmc 1.5 DO bj = myByLo(myThid), myByHi(myThid)
86     DO bi = myBxLo(myThid), myBxHi(myThid)
87    
88 jmc 1.6 C--- Temp. & Salt Tendency from CG : just do a copy
89 jmc 1.5 DO k=1,Nr
90     DO j=1,sNy
91     DO i=1,sNx
92     myPa_TendScal1(i,j,k,bi,bj) = gThetaC(i,j,k)
93 jmc 1.6 myPa_TendScal2(i,j,k,bi,bj) = gsaltC (i,j,k)
94 jmc 1.5 ENDDO
95     ENDDO
96     ENDDO
97    
98     C--- Momentum Tendency from CG
99     C-- 1) rotate to get u,v aline with CG axes
100     DO k=1,Nr
101     DO j=1-Oly,sNy+Oly
102     DO i=1-Olx,sNx+Olx
103     ext_gu(i,j,k,bi,bj) = 0. _d 0
104     ext_gv(i,j,k,bi,bj) = 0. _d 0
105     ENDDO
106     ENDDO
107     DO j=1,sNy
108     DO i=1,sNx
109     IF ( velDvRMS(i,j,bi,bj).GT.0. _d 0 ) THEN
110     ext_gu(i,j,k,bi,bj) = gUVelC(i,j,k)*cAngleFG(i,j,bi,bj)
111     & - gVVelC(i,j,k)*sAngleFG(i,j,bi,bj)
112     ext_gv(i,j,k,bi,bj) = gVVelC(i,j,k)*cAngleFG(i,j,bi,bj)
113     & + gUVelC(i,j,k)*sAngleFG(i,j,bi,bj)
114     ENDIF
115     ENDDO
116     ENDDO
117 jmc 1.1 ENDDO
118 jmc 1.5
119     C- end bi,bj loops
120 jmc 1.1 ENDDO
121     ENDDO
122    
123 jmc 1.5 C-- 2) Fill the overlap : ext_gu & ext_gv are both on A-grid
124     CALL EXCH_UV_AGRID_3D_RL( ext_gu, ext_gv,
125     & .TRUE., Nr, myThid )
126    
127     DO bj = myByLo(myThid), myByHi(myThid)
128     DO bi = myBxLo(myThid), myBxHi(myThid)
129     DO k=1,Nr
130     C-- 3) average to C-grid
131     DO j=1-OLy,sNy+OLy
132     DO i=2-OLx,sNx+OLx
133     myPa_TendVelU(i,j,k,bi,bj) = maskW(i,j,k,bi,bj)
134     & *( ext_gu(i-1,j,k,bi,bj)
135     & +ext_gu( i ,j,k,bi,bj) )*0.5 _d 0
136     ENDDO
137     ENDDO
138     DO j=2-OLy,sNy+OLy
139     DO i=1-OLx,sNx+OLx
140     myPa_TendVelV(i,j,k,bi,bj) = maskS(i,j,k,bi,bj)
141     & *( ext_gv(i,j-1,k,bi,bj)
142     & +ext_gv(i, j ,k,bi,bj) )*0.5 _d 0
143     ENDDO
144     ENDDO
145     C-- 4) Smooth Momentum tendency :
146     C apply horizontal viscosity (*time-step = viscAhDivDt) on Divergence
147     C tendency and on vorticity tend. (viscosity*time-step = viscAhVortDt)
148     IF ( viscAhDivDt.GT.0. .OR. viscAhVortDt.GT.0. ) THEN
149     C Fluxes
150     DO j=2-OLy,sNy+OLy
151     DO i=2-OLx,sNx+OLx
152     locFx(i,j) = myPa_TendVelU(i,j,k,bi,bj)
153     & *dyG(i,j,bi,bj)*hFacW(i,j,k,bi,bj)
154     locFy(i,j) = myPa_TendVelV(i,j,k,bi,bj)
155     & *dxG(i,j,bi,bj)*hFacS(i,j,k,bi,bj)
156     ENDDO
157     ENDDO
158     C Divergence
159     DO j=2-OLy,sNy+OLy-1
160     DO i=2-OLx,sNx+OLx-1
161     locDiv(i,j) =
162     & ( ( locFx(i+1,j)-locFx(i,j) )
163     & +( locFy(i,j+1)-locFy(i,j) )
164     & )*recip_rA(i,j,bi,bj)*recip_hFacC(i,j,k,bi,bj)
165     ENDDO
166     ENDDO
167     C Vorticity
168     DO j=2-OLy,sNy+OLy
169     DO i=2-OLx,sNx+OLx
170     locVort(i,j) =
171     & ( ( myPa_TendVelV(i,j,k,bi,bj)*dyC(i,j,bi,bj)
172     & -myPa_TendVelV(i-1,j,k,bi,bj)*dyC(i-1,j,bi,bj) )
173     & -( myPa_TendVelU(i,j,k,bi,bj)*dxC(i,j,bi,bj)
174     & -myPa_TendVelU(i,j-1,k,bi,bj)*dxC(i,j-1,bi,bj) )
175     & )*recip_rAz(I,J,bi,bj)
176     ENDDO
177     ENDDO
178     C Apply to C-grid tendencies:
179     DO j=3-OLy,sNy+OLy-1
180     DO i=3-OLx,sNx+OLx-1
181     myPa_TendVelU(i,j,k,bi,bj) = myPa_TendVelU(i,j,k,bi,bj)
182     & + ( viscAhDivDt * ( locDiv(i,j) - locDiv(i-1,j) )
183     & * recip_dxC(i,j,bi,bj)
184     & - viscAhVortDt* ( locVort(i,j+1)-locVort(i,j) )
185     & * recip_dyG(i,j,bi,bj)
186     & )*maskW(i,j,k,bi,bj)
187     myPa_TendVelV(i,j,k,bi,bj) = myPa_TendVelV(i,j,k,bi,bj)
188     & + ( viscAhDivDt * ( locDiv(i,j) - locDiv(i,j-1) )
189     & * recip_dyC(i,j,bi,bj)
190     & + viscAhVortDt* ( locVort(i+1,j)-locVort(i,j) )
191     & * recip_dxG(i,j,bi,bj)
192     & )*maskS(i,j,k,bi,bj)
193     ENDDO
194     ENDDO
195     C- end smoothing & end of k loop
196     ENDIF
197 jmc 1.1 ENDDO
198 jmc 1.5
199     C- end bi,bj loops
200 jmc 1.1 ENDDO
201     ENDDO
202    
203 jmc 1.5 C-- Diagnostics
204 jmc 1.4 #ifdef ALLOW_DIAGNOSTICS
205     IF ( useDiagnostics ) THEN
206 jmc 1.5 CALL DIAGNOSTICS_FILL ( myPa_TendScal1,'MYPadTdt',
207     & 0, Nr, 0, 1, 1, myThid )
208 jmc 1.6 CALL DIAGNOSTICS_FILL ( myPa_TendScal2,'MYPadSdt',
209     & 0, Nr, 0, 1, 1, myThid )
210 jmc 1.4 CALL DIAGNOSTICS_FILL ( myPa_TendVelU, 'MYPadUdt',
211     & 0, Nr, 0, 1, 1, myThid )
212     CALL DIAGNOSTICS_FILL ( myPa_TendVelV, 'MYPadVdt',
213     & 0, Nr, 0, 1, 1, myThid )
214 jmc 1.5 C- This is a hack (to avoid changing mypackage_diagnostics_init.F)
215     CALL DIAGNOSTICS_FILL ( ext_gu, 'MYPaStaU',
216     & 0, Nr, 0, 1, 1, myThid )
217     CALL DIAGNOSTICS_FILL ( ext_gv, 'MYPaStaV',
218 jmc 1.4 & 0, Nr, 0, 1, 1, myThid )
219     ENDIF
220     #endif /* ALLOW_DIAGNOSTICS */
221    
222 jmc 1.5 C-- Write snap-shot output:
223 jmc 1.1 IF ( DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock)
224     & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
225     & myTime.EQ.startTime )
226     & ) THEN
227     WRITE(suff,'(I10.10)') myIter
228 jmc 1.5 CALL WRITE_FLD_XYZ_RL( 'ext_gT.', suff, myPa_TendScal1,
229 jmc 1.3 & myIter, myThid )
230 jmc 1.6 CALL WRITE_FLD_XYZ_RL( 'ext_gS.', suff, myPa_TendScal2,
231     & myIter, myThid )
232 jmc 1.5 CALL WRITE_FLD_XYZ_RL( 'ext_gU.', suff, ext_gu,
233 jmc 1.3 & myIter, myThid )
234 jmc 1.5 CALL WRITE_FLD_XYZ_RL( 'ext_gV.', suff, ext_gv,
235 jmc 1.3 & myIter, myThid )
236 jmc 1.1 ENDIF
237    
238     RETURN
239     END

  ViewVC Help
Powered by ViewVC 1.1.22