/[MITgcm]/MITgcm/pkg/flt/flt_mapping.F
ViewVC logotype

Contents of /MITgcm/pkg/flt/flt_mapping.F

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


Revision 1.3 - (show annotations) (download)
Fri Feb 13 04:22:22 2009 UTC (15 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62p, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.2: +1 -5 lines
remove unnecessary lines of code

1 C $Header: /u/gcmpack/MITgcm/pkg/flt/flt_mapping.F,v 1.2 2009/02/10 17:29:32 jmc Exp $
2 C $Name: $
3
4 #include "FLT_OPTIONS.h"
5
6 C-- Contents
7 C-- o FLT_MAP_XY2IJLOCAL
8 C-- o FLT_MAP_IJLOCAL2XY
9 C-- o FLT_MAP_R2K (Function)
10 C-- o FLT_MAP_K2R (Function)
11
12 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
13
14 SUBROUTINE FLT_MAP_XY2IJLOCAL(
15 O ix, jy,
16 I xx, yy, bi, bj, myThid )
17
18 C ==================================================================
19 C SUBROUTINE FLT_MAP_XY2IJLOCAL
20 C ==================================================================
21 C o Converts global x,y-coordinates (grid) to corresponding
22 C local fractional horizontal indices for specific tile
23 C Range: [1/2 , sNx+1/2] , [1/2 , sNy+1/2]
24 C Center (Tracer Pt) <-> integer , integer
25 C U-velocity Pt <-> half integer , integer
26 C V-velocity Pt <-> integer , half integer
27 C Vorticity Pt <-> half integer , half integer
28 C ==================================================================
29
30 C !USES:
31 IMPLICIT NONE
32
33 C == global variables ==
34 #include "SIZE.h"
35 #include "EEPARAMS.h"
36 #include "GRID.h"
37 #include "PARAMS.h"
38
39 C == routine arguments ==
40 _RL ix, jy
41 _RL xx, yy
42 INTEGER bi, bj, myThid
43
44 C == local variables ==
45 _RL fm, dist
46 INTEGER i, j
47
48 C == end of interface ==
49
50 IF ( usingCartesianGrid .OR.
51 & usingSphericalPolarGrid .AND. .NOT.rotateGrid
52 & ) THEN
53
54 ix = -1. _d 0
55 jy = -1. _d 0
56
57 j = 1
58 DO i=0,sNx+1
59 IF ( ix.EQ.-1. _d 0 ) THEN
60 IF ( xG(i,j,bi,bj).LE.xx .AND. xx.LT.xG(i+1,j,bi,bj) ) THEN
61 dist = xG(i+1,j,bi,bj) - xG(i,j,bi,bj)
62 fm = ( xx - xG(i,j,bi,bj) ) / dist
63 ix = DFLOAT(i)+fm-0.5 _d 0
64 ENDIF
65 ENDIF
66 ENDDO
67
68 i = 1
69 DO j=0,sNy+1
70 IF ( jy.EQ.-1. _d 0 ) THEN
71 IF ( yG(i,j,bi,bj).LE.yy .AND. yy.LT.yG(i,j+1,bi,bj) ) THEN
72 dist = yG(i,j+1,bi,bj) - yG(i,j,bi,bj)
73 fm = ( yy - yG(i,j,bi,bj) ) / dist
74 jy = DFLOAT(j)+fm-0.5 _d 0
75 ENDIF
76 ENDIF
77 ENDDO
78
79 ELSE
80 STOP 'FLT_MAP_XY2IJLOCAL: not yet coded for this grid'
81 ENDIF
82
83 RETURN
84 END
85
86 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
87
88 SUBROUTINE FLT_MAP_IJLOCAL2XY(
89 O xx, yy,
90 I ix, jy, bi, bj, myThid )
91
92 C ==================================================================
93 C SUBROUTINE FLT_MAP_IJLOCAL2XY
94 C ==================================================================
95 C o Converts local fractional horizontal indices for specific tile
96 C to corresponding global x,y-coordinates (grid)
97 C Range: [1/2 , sNx+1/2] , [1/2 , sNy+1/2]
98 C Center (Tracer Pt) <-> integer , integer
99 C U-velocity Pt <-> half integer , integer
100 C V-velocity Pt <-> integer , half integer
101 C Vorticity Pt <-> half integer , half integer
102 C ==================================================================
103
104 C !USES:
105 IMPLICIT NONE
106
107 C == global variables ==
108 #include "SIZE.h"
109 #include "EEPARAMS.h"
110 #include "GRID.h"
111 #include "PARAMS.h"
112
113 C == routine arguments ==
114 _RL xx, yy
115 _RL ix, jy
116 INTEGER bi, bj, myThid
117
118 C == local variables ==
119 _RL ddx, ddy
120 INTEGER i, j
121
122 C == end of interface ==
123
124 IF ( usingCartesianGrid .OR.
125 & usingSphericalPolarGrid .AND. .NOT.rotateGrid
126 & ) THEN
127
128 i = NINT(ix)
129 j = NINT(jy)
130 ddx = 0.5 _d 0 + ix - DFLOAT(i)
131 ddy = 0.5 _d 0 + jy - DFLOAT(j)
132
133 xx = xG(i,j,bi,bj) + ddx*( xG(i+1,j,bi,bj) - xG(i,j,bi,bj) )
134 yy = yG(i,j,bi,bj) + ddy*( yG(i,j+1,bi,bj) - yG(i,j,bi,bj) )
135
136 ELSE
137 STOP 'FLT_MAP_IJLOCAL2XY: not yet coded for this grid'
138 ENDIF
139
140 RETURN
141 END
142
143 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
144
145 _RL FUNCTION FLT_MAP_R2K(
146 I rr, bi, bj, myThid )
147
148 C ==================================================================
149 C FUNCTION FLT_MAP_R2K
150 C ==================================================================
151 C o Converts r-coordinate (grid) to corresponding
152 C fractional vertical index
153 C Range: [1/2 , Nr+1/2],
154 C Center (Tracer Pt) <-> integer
155 C Interface (wVel Pt) <-> half integer
156 C ==================================================================
157
158 C !USES:
159 IMPLICIT NONE
160
161 C == global variables ==
162 #include "SIZE.h"
163 #include "EEPARAMS.h"
164 #include "GRID.h"
165
166 C == routine arguments ==
167 _RL rr
168 INTEGER bi, bj, myThid
169
170 C == local variables ==
171 _RL fm
172 INTEGER k
173
174 C == end of interface ==
175
176 FLT_MAP_R2K = 0. _d 0
177 DO k=1,Nr
178 IF ( FLT_MAP_R2K .EQ. 0. _d 0 ) THEN
179 C- r decreases when k increases (rkSign < 0):
180 IF ( rF(k) .GE. rr .AND. rr.GT.rF(k+1) ) THEN
181 fm = ( rr - rF(k) ) * recip_drF(k)*rkSign
182 FLT_MAP_R2K = DFLOAT(k)+fm-0.5 _d 0
183 ENDIF
184 ENDIF
185 ENDDO
186
187 RETURN
188 END
189
190 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
191
192 _RL FUNCTION FLT_MAP_K2R(
193 I kr, bi, bj, myThid )
194
195 C ==================================================================
196 C FUNCTION FLT_MAP_K2R
197 C ==================================================================
198 C o Converts fractional vertical index to corresponding
199 C r-coordinate (grid)
200 C Range: [1/2 , Nr+1/2],
201 C Center (Tracer Pt) <-> integer
202 C Interface (wVel Pt) <-> half integer
203 C ==================================================================
204
205 C !USES:
206 IMPLICIT NONE
207
208 C == global variables ==
209 #include "SIZE.h"
210 #include "EEPARAMS.h"
211 #include "GRID.h"
212
213 C == routine arguments ==
214 _RL kr
215 INTEGER bi, bj, myThid
216
217 C == local variables ==
218 _RL ddz
219 INTEGER k
220
221 C == end of interface ==
222
223 k = NINT(kr)
224 IF ( k.LT.1 ) THEN
225 FLT_MAP_K2R = rF(1)
226 ELSEIF ( k.GT.Nr ) THEN
227 FLT_MAP_K2R = rF(Nr+1)
228 ELSE
229 ddz = 0.5 _d 0 + kr - DFLOAT(k)
230 FLT_MAP_K2R = rF(k) + ddz*drF(k)*rkSign
231 ENDIF
232
233 RETURN
234 END

  ViewVC Help
Powered by ViewVC 1.1.22