-
Notifications
You must be signed in to change notification settings - Fork 237
/
grdchk_get_mask.F
188 lines (169 loc) · 5.1 KB
/
grdchk_get_mask.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include "GRDCHK_OPTIONS.h"
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
SUBROUTINE GRDCHK_GET_MASK( myThid )
C ==================================================================
C SUBROUTINE grdchk_get_mask
C ==================================================================
C
C o Get the location of a given component of the control vector for
C the current process.
C
C started: Christian Eckert eckert@mit.edu 04-Apr-2000
C continued: heimbach@mit.edu: 13-Jun-2001
C
C ==================================================================
C SUBROUTINE grdchk_get_mask
C ==================================================================
IMPLICIT NONE
C == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "CTRL_SIZE.h"
#include "CTRL.h"
#ifdef ALLOW_OBCS_CONTROL
C CTRL_OBCS.h must be included before GRDCHK.h
# include "CTRL_OBCS.h"
#endif
#include "GRDCHK.h"
C == routine arguments ==
INTEGER myThid
#ifdef ALLOW_GRDCHK
C == local variables ==
INTEGER bi, bj
INTEGER k, iobcs
INTEGER itlo, ithi
INTEGER jtlo, jthi
INTEGER nobcsmax
C == end of interface ==
jtlo = 1
jthi = nSy
itlo = 1
ithi = nSx
_BEGIN_MASTER( myThid )
#ifdef ALLOW_OBCS_CONTROL
nobcsmax = nobcs
#else
nobcsmax = 1
#endif
C-- initialise
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
DO iobcs = 1, nobcsmax
nwettile(bi,bj,k,iobcs) = 0
ENDDO
ENDDO
ENDDO
ENDDO
C-- Determine the number of components of the given
C-- control variable on the current tile.
IF ( ncvargrd(grdchkvarindex) .EQ. 'c' ) THEN
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
nwettile(bi,bj,k,1) = nwetctile(bi,bj,k)
ENDDO
ENDDO
ENDDO
ELSEIF ( ncvargrd(grdchkvarindex) .EQ. 's' ) THEN
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
nwettile(bi,bj,k,1) = nwetstile(bi,bj,k)
ENDDO
ENDDO
ENDDO
ELSEIF ( ncvargrd(grdchkvarindex) .EQ. 'w' ) THEN
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
nwettile(bi,bj,k,1) = nwetwtile(bi,bj,k)
ENDDO
ENDDO
ENDDO
c ELSEIF ( ncvargrd(grdchkvarindex) .EQ. 'v' ) THEN
c DO bj = jtlo,jthi
c DO bi = itlo,ithi
c DO k = 1,ncvarnrmax(grdchkvarindex)
c nwettile(bi,bj,k,1) = nwetvtile(bi,bj,k)
c ENDDO
c ENDDO
c ENDDO
#ifdef ALLOW_SHELFICE
ELSEIF ( ncvargrd(grdchkvarindex) .EQ. 'i' ) THEN
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
nwettile(bi,bj,k,1) = nwetitile(bi,bj,k)
ENDDO
ENDDO
ENDDO
#endif /* ALLOW_SHELFICE */
#ifdef ALLOW_OBCS_CONTROL
ELSEIF ( ncvargrd(grdchkvarindex) .EQ. 'm' ) THEN
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
DO iobcs = 1, nobcsmax
IF ( ncvarindex(grdchkvarindex).EQ.1 ) THEN
#ifdef ALLOW_OBCSN_CONTROL
nwettile(bi,bj,k,iobcs) = nwetobcsn(bi,bj,k,iobcs)
#endif
ELSEIF ( ncvarindex(grdchkvarindex).EQ.2 ) THEN
#ifdef ALLOW_OBCSS_CONTROL
nwettile(bi,bj,k,iobcs) = nwetobcss(bi,bj,k,iobcs)
#endif
ELSEIF ( ncvarindex(grdchkvarindex).EQ.3 ) THEN
#ifdef ALLOW_OBCSE_CONTROL
nwettile(bi,bj,k,iobcs) = nwetobcse(bi,bj,k,iobcs)
#endif
ELSEIF ( ncvarindex(grdchkvarindex).EQ.4 ) THEN
#ifdef ALLOW_OBCSW_CONTROL
nwettile(bi,bj,k,iobcs) = nwetobcsw(bi,bj,k,iobcs)
#endif
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
#endif /* ALLOW_OBCS_CONTROL */
ELSE
Ce --> wrong grid specification for the control variable.
ENDIF
C-- get mask file for obcs
#ifdef ALLOW_OBCS_CONTROL
CALL GRDCHK_GET_OBCS_MASK( myThid )
#endif
C ----------------------------------------------------------------
C-- Determine the actual and the maximum possible number of
C-- components of the given control variable.
ncvarcomp = 0
maxncvarcomps = 0
DO bj = jtlo,jthi
DO bi = itlo,ithi
DO k = 1,ncvarnrmax(grdchkvarindex)
DO iobcs = 1, nobcsmax
ncvarcomp = ncvarcomp + nwettile(bi,bj,k,iobcs)
maxncvarcomps = maxncvarcomps
& + ncvarxmax(grdchkvarindex)*ncvarymax(grdchkvarindex)
ENDDO
ENDDO
ENDDO
ENDDO
ncvarcomp = ncvarcomp*ncvarrecs(grdchkvarindex)
maxncvarcomps = maxncvarcomps*ncvarrecs(grdchkvarindex)
DO bj = jtlo,jthi
DO bi = itlo,ithi
iwetsum(bi,bj,0) = 0
DO k = 1,ncvarnrmax(grdchkvarindex)
iwetsum(bi,bj,k) = iwetsum(bi,bj,k-1) + nwettile(bi,bj,k,1)
ENDDO
ENDDO
ENDDO
_END_MASTER( myThid )
_BARRIER
#endif /* ALLOW_GRDCHK */
RETURN
END