/[MITgcm]/MITgcm_contrib/sciascia/rbcs/rbcs_init_fixed.F
ViewVC logotype

Contents of /MITgcm_contrib/sciascia/rbcs/rbcs_init_fixed.F

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


Revision 1.1 - (show annotations) (download)
Wed Aug 8 01:57:14 2012 UTC (12 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: HEAD
Add a modified version of pkg/rbcs that allows several rbcs
fields to be read with independent frequencies.
The idea is for each i = 1 , ... , U/V/WnLEN
one can define a separate mask and relaxation file
and separate/independent periods.

1 C $Header: /u/gcmpack/MITgcm/pkg/rbcs/rbcs_init_fixed.F,v 1.7 2011/06/07 22:25:10 jmc Exp $
2 C $Name: $
3
4 #include "RBCS_OPTIONS.h"
5
6 C !INTERFACE: ==========================================================
7 SUBROUTINE RBCS_INIT_FIXED( myThid )
8
9 C !DESCRIPTION:
10 C calls subroutines that initializes fixed variables for relaxed
11 c boundary conditions
12
13 C !USES: ===============================================================
14 IMPLICIT NONE
15 #include "SIZE.h"
16 #include "EEPARAMS.h"
17 #include "PARAMS.h"
18 #include "GRID.h"
19 #ifdef ALLOW_PTRACERS
20 #include "PTRACERS_SIZE.h"
21 #endif
22 #include "RBCS_SIZE.h"
23 #include "RBCS_PARAMS.h"
24 #include "RBCS_FIELDS.h"
25
26 C !INPUT PARAMETERS: ===================================================
27 C myThid :: my Thread Id number
28 INTEGER myThid
29 CEOP
30
31 #ifdef ALLOW_RBCS
32 C !LOCAL VARIABLES:
33 C i,j,k,bi,bj,irbc :: loop indices
34 C msgBuf :: Informational/error message buffer
35 INTEGER i,j,k,bi,bj
36 INTEGER ium, ivm,iwm
37 INTEGER irbc
38 #ifndef DISABLE_RBCS_MOM
39 CHARACTER*(MAX_LEN_MBUF) msgBuf
40 #endif
41
42 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
43
44 #ifndef DISABLE_RBCS_MOM
45 C Loop over tiles
46 DO ium = 1, UmLEN
47 DO bj = myByLo(myThid), myByHi(myThid)
48 DO bi = myBxLo(myThid), myBxHi(myThid)
49 DO k=1,Nr
50 DO j=1-Oly,sNy+OLy
51 DO i=1-Olx,sNx+Olx
52 RBC_maskU(i,j,k,bi,bj,ium) = 0. _d 0
53 ENDDO
54 ENDDO
55 ENDDO
56 ENDDO
57 ENDDO
58 ENDDO
59
60 DO ivm = 1,VmLEN
61 DO bj = myByLo(myThid), myByHi(myThid)
62 DO bi = myBxLo(myThid), myBxHi(myThid)
63 DO k=1,Nr
64 DO j=1-Oly,sNy+OLy
65 DO i=1-Olx,sNx+Olx
66 RBC_maskV(i,j,k,bi,bj,ivm) = 0. _d 0
67 ENDDO
68 ENDDO
69 ENDDO
70 ENDDO
71 ENDDO
72 ENDDO
73
74 #ifdef ALLOW_NONHYDROSTATIC
75 DO iwm = 1,WmLEN
76 DO bj = myByLo(myThid), myByHi(myThid)
77 DO bi = myBxLo(myThid), myBxHi(myThid)
78 DO k=1,Nr
79 DO j=1-Oly,sNy+OLy
80 DO i=1-Olx,sNx+Olx
81 RBC_maskW(i,j,k,bi,bj,iwm) = 0. _d 0
82 ENDDO
83 ENDDO
84 ENDDO
85 ENDDO
86 ENDDO
87 ENDDO
88 #endif
89 #endif /* DISABLE_RBCS_MOM */
90
91 C Loop over mask index
92 DO irbc=1,maskLEN
93
94 C Loop over tiles
95 DO bj = myByLo(myThid), myByHi(myThid)
96 DO bi = myBxLo(myThid), myBxHi(myThid)
97
98 C Initialize arrays in common blocks :
99 DO k=1,Nr
100 DO j=1-Oly,sNy+OLy
101 DO i=1-Olx,sNx+Olx
102 RBC_mask(i,j,k,bi,bj,irbc) = 0. _d 0
103 ENDDO
104 ENDDO
105 ENDDO
106
107 C end bi,bj loops
108 ENDDO
109 ENDDO
110 C end of mask index loop
111 ENDDO
112
113 C read in mask for relaxing
114 DO irbc=1,maskLEN
115 IF ( relaxMaskFile(irbc).NE. ' ' ) THEN
116 CALL READ_FLD_XYZ_RS(relaxMaskFile(irbc),' ',
117 & RBC_mask(1-Olx,1-Oly,1,1,1,irbc), 0, myThid)
118 CALL EXCH_XYZ_RS( RBC_mask(1-Olx,1-Oly,1,1,1,irbc), myThid )
119 C-- Apply mask:
120 DO bj = myByLo(myThid), myByHi(myThid)
121 DO bi = myBxLo(myThid), myBxHi(myThid)
122 DO k=1,Nr
123 DO j=1-Oly,sNy+OLy
124 DO i=1-Olx,sNx+Olx
125 RBC_mask(i,j,k,bi,bj,irbc) = RBC_mask(i,j,k,bi,bj,irbc)
126 & * maskC(i,j,k,bi,bj)
127 ENDDO
128 ENDDO
129 ENDDO
130 ENDDO
131 ENDDO
132 IF ( debugLevel.GE.debLevC ) THEN
133 _BARRIER
134 _BEGIN_MASTER( myThid )
135 CALL PLOT_FIELD_XYRS( RBC_mask(1-Olx,1-Oly,1,1,1,irbc),
136 & 'Boundary Relaxing' ,1, myThid )
137 _END_MASTER(myThid)
138 ENDIF
139 ENDIF
140 ENDDO
141
142 #ifndef DISABLE_RBCS_MOM
143 DO ium=1,UmLEN
144 IF ( useRBCuVel(ium) .AND.
145 & relaxMaskUFile(ium).NE. ' ' ) THEN
146 CALL READ_FLD_XYZ_RS(relaxMaskUFile(ium),' '
147 & ,RBC_maskU(1-Olx,1-Oly,1,1,1,ium), 0, myThid)
148 ELSEIF( useRBCuVel(ium) ) THEN
149 WRITE(msgBuf,'(2A)') '** WARNING ** RBCS_INIT_FIXED: ',
150 & 'no relaxMaskUFile => use Temp mask instead'
151 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
152 & SQUEEZE_RIGHT, myThid )
153 DO bj = myByLo(myThid), myByHi(myThid)
154 DO bi = myBxLo(myThid), myBxHi(myThid)
155 DO k=1,Nr
156 DO j=1-Oly,sNy+OLy
157 DO i=2-Olx,sNx+Olx
158 RBC_maskU(i,j,k,bi,bj,ium) =
159 & ( RBC_mask(i-1,j,k,bi,bj,1)
160 & + RBC_mask( i ,j,k,bi,bj,1) )*0.5 _d 0
161 ENDDO
162 ENDDO
163 ENDDO
164 ENDDO
165 ENDDO
166 ENDIF
167 ENDDO
168 DO ivm=1,VmLEN
169 IF ( useRBCvVel(ivm) .AND
170 & . relaxMaskVFile(ivm).NE. ' ' ) THEN
171 CALL READ_FLD_XYZ_RS(relaxMaskVFile(ivm),' '
172 & ,RBC_maskV(1-Olx,1-Oly,1,1,1,ivm), 0, myThid)
173 ELSEIF( useRBCvVel(ivm) ) THEN
174 WRITE(msgBuf,'(2A)') '** WARNING ** RBCS_INIT_FIXED: ',
175 & 'no relaxMaskVFile => use Temp mask instead'
176 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
177 & SQUEEZE_RIGHT, myThid )
178 DO bj = myByLo(myThid), myByHi(myThid)
179 DO bi = myBxLo(myThid), myBxHi(myThid)
180 DO k=1,Nr
181 DO j=2-Oly,sNy+OLy
182 DO i=1-Olx,sNx+Olx
183 RBC_maskV(i,j,k,bi,bj,ivm) =
184 & ( RBC_mask(i,j-1,k,bi,bj,1)
185 & + RBC_mask(i, j ,k,bi,bj,1) )*0.5 _d 0
186 ENDDO
187 ENDDO
188 ENDDO
189 ENDDO
190 ENDDO
191 ENDIF
192 ENDDO
193 #ifdef ALLOW_NONHYDROSTATIC
194 DO iwm=1,WmLEN
195 IF ( useRBCwVel(iwm) .AND.
196 & relaxMaskWFile(iwm).NE. ' ' ) THEN
197 CALL READ_FLD_XYZ_RS(relaxMaskWFile(iwm),' '
198 & ,RBC_maskW(1-Olx,1-Oly,1,1,1,iwm), 0, myThid)
199 ELSEIF( useRBCwVel(iwm) ) THEN
200 WRITE(msgBuf,'(2A)') '** WARNING ** RBCS_INIT_FIXED: ',
201 & 'no relaxMaskWFile => use Temp mask instead'
202 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
203 & SQUEEZE_RIGHT, myThid )
204 DO bj = myByLo(myThid), myByHi(myThid)
205 DO bi = myBxLo(myThid), myBxHi(myThid)
206 DO k=1,Nr
207 DO j=2-Oly,sNy+OLy
208 DO i=1-Olx,sNx+Olx
209 RBC_maskW(i,j,k,bi,bj,iwm) =
210 & ( RBC_mask(i,j-1,k,bi,bj,1)
211 & + RBC_mask(i, j ,k,bi,bj,1) )*0.5 _d 0
212 ENDDO
213 ENDDO
214 ENDDO
215 ENDDO
216 ENDDO
217 ENDIF
218 ENDDO
219 #endif
220
221 DO ium=1,UmLEN
222 DO ivm=1,VmLEN
223 IF(ium.EQ.ivm)THEN
224 IF( useRBCuVel(ium) .OR. useRBCvVel(ivm) ) THEN
225 CALL EXCH_UV_XYZ_RS(RBC_maskU(1-Olx,1-Oly,1,1,1,ium)
226 & ,RBC_maskV(1-Olx,1-Oly,1,1,1,ivm)
227 & , .FALSE., myThid)
228 C-- Apply mask:
229
230 DO bj = myByLo(myThid), myByHi(myThid)
231 DO bi = myBxLo(myThid), myBxHi(myThid)
232 DO k=1,Nr
233 DO j=1-Oly,sNy+OLy
234 DO i=1-Olx,sNx+Olx
235 RBC_maskU(i,j,k,bi,bj,ium) =
236 & RBC_maskU(i,j,k,bi,bj,ium)
237 & * maskW(i,j,k,bi,bj)
238 RBC_maskV(i,j,k,bi,bj,ivm) =
239 & RBC_maskV(i,j,k,bi,bj,ivm)
240 & * maskS(i,j,k,bi,bj)
241 ENDDO
242 ENDDO
243 ENDDO
244 ENDDO
245 ENDDO
246 #ifdef ALLOW_NONHYDROSTATIC
247 DO iwm=1,WmLEN
248 DO bj = myByLo(myThid), myByHi(myThid)
249 DO bi = myBxLo(myThid), myBxHi(myThid)
250 DO k=1,Nr
251 DO j=1-Oly,sNy+OLy
252 DO i=1-Olx,sNx+Olx
253 RBC_maskW(i,j,k,bi,bj,iwm) =
254 & RBC_maskW(i,j,k,bi,bj,iwm)
255 & * maskS(i,j,k,bi,bj)
256 ENDDO
257 ENDDO
258 ENDDO
259 ENDDO
260 ENDDO
261 ENDDO
262 #endif
263 IF ( debugLevel.GE.debLevC ) THEN
264 _BARRIER
265 _BEGIN_MASTER( myThid )
266 CALL PLOT_FIELD_XYRS( RBC_maskU(1-Olx,1-Oly,1,1,1,ium),
267 & 'Boundary Relaxing U' ,1, myThid )
268 CALL PLOT_FIELD_XYRS( RBC_maskV(1-Olx,1-Oly,1,1,1,ivm),
269 & 'Boundary Relaxing V' ,1, myThid )
270 CALL PLOT_FIELD_XYRS( RBC_maskW(1-Olx,1-Oly,1,1,1,iwm),
271 & 'Boundary Relaxing W' ,1, myThid )
272 _END_MASTER(myThid)
273 ENDIF
274 ENDIF
275 ENDIF
276 ENDDO
277 ENDDO
278 #endif /* DISABLE_RBCS_MOM */
279
280 #endif /* ALLOW_RBCS */
281
282 RETURN
283 END

  ViewVC Help
Powered by ViewVC 1.1.22