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

Annotation 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 - (hide 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 heimbach 1.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