File indexing completed on 2020-01-15 06:10:57 UTC
view on githubraw file Latest commit 15f808dc on 2019-09-13 16:02:45 UTC
9bba4c8337 Jean*0001 #include "FLT_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 SUBROUTINE FLT_MAP_XY2IJLOCAL(
0012 O ix, jy,
0013 I xx, yy, bi, bj, myThid )
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 IMPLICIT NONE
0029
0030
0031 #include "SIZE.h"
0032 #include "EEPARAMS.h"
0033 #include "GRID.h"
0034 #include "PARAMS.h"
0035
0036
0037 _RL ix, jy
0038 _RL xx, yy
0039 INTEGER bi, bj, myThid
0040
0041
0042 _RL fm, dist
0043 INTEGER i, j
0044
0045
0046
0047 IF ( usingCartesianGrid .OR.
0048 & usingSphericalPolarGrid .AND. .NOT.rotateGrid
0049 & ) THEN
0050
0051 ix = -1. _d 0
0052 jy = -1. _d 0
0053
0054 j = 1
0055 DO i=0,sNx+1
0056 IF ( ix.EQ.-1. _d 0 ) THEN
0057 IF ( xG(i,j,bi,bj).LE.xx .AND. xx.LT.xG(i+1,j,bi,bj) ) THEN
0058 dist = xG(i+1,j,bi,bj) - xG(i,j,bi,bj)
6d901ff2ff Jean*0059 fm = ( xx - xG(i,j,bi,bj) ) / dist
9bba4c8337 Jean*0060 ix = DFLOAT(i)+fm-0.5 _d 0
0061 ENDIF
0062 ENDIF
0063 ENDDO
0064
0065 i = 1
0066 DO j=0,sNy+1
0067 IF ( jy.EQ.-1. _d 0 ) THEN
0068 IF ( yG(i,j,bi,bj).LE.yy .AND. yy.LT.yG(i,j+1,bi,bj) ) THEN
0069 dist = yG(i,j+1,bi,bj) - yG(i,j,bi,bj)
6d901ff2ff Jean*0070 fm = ( yy - yG(i,j,bi,bj) ) / dist
9bba4c8337 Jean*0071 jy = DFLOAT(j)+fm-0.5 _d 0
0072 ENDIF
0073 ENDIF
0074 ENDDO
0075
0076 ELSE
0077 STOP 'FLT_MAP_XY2IJLOCAL: not yet coded for this grid'
0078 ENDIF
0079
0080 RETURN
0081 END
0082
0083
0084
0085 SUBROUTINE FLT_MAP_IJLOCAL2XY(
0086 O xx, yy,
0087 I ix, jy, bi, bj, myThid )
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 IMPLICIT NONE
0103
0104
0105 #include "SIZE.h"
0106 #include "EEPARAMS.h"
0107 #include "GRID.h"
0108 #include "PARAMS.h"
0109
0110
0111 _RL xx, yy
0112 _RL ix, jy
0113 INTEGER bi, bj, myThid
0114
0115
0116 _RL ddx, ddy
0117 INTEGER i, j
f5995a4aae Gael*0118 _RL xx_ij,xx_ip1j,xx_ijp1,xx_ip1jp1
9bba4c8337 Jean*0119
0120
0121
0122 IF ( usingCartesianGrid .OR.
0123 & usingSphericalPolarGrid .AND. .NOT.rotateGrid
0124 & ) THEN
0125
0126 i = NINT(ix)
0127 j = NINT(jy)
0128 ddx = 0.5 _d 0 + ix - DFLOAT(i)
0129 ddy = 0.5 _d 0 + jy - DFLOAT(j)
0130
0131 xx = xG(i,j,bi,bj) + ddx*( xG(i+1,j,bi,bj) - xG(i,j,bi,bj) )
0132 yy = yG(i,j,bi,bj) + ddy*( yG(i,j+1,bi,bj) - yG(i,j,bi,bj) )
0133
59649fe591 Oliv*0134 ELSEIF ( usingCurvilinearGrid ) THEN
0135
0136 i = NINT(ix)
0137 j = NINT(jy)
0138 ddx = 0.5 _d 0 + ix - DFLOAT(i)
0139 ddy = 0.5 _d 0 + jy - DFLOAT(j)
0140
0141
0142 xx = xG(i,j,bi,bj) + ddx*( xG(i+1,j,bi,bj) - xG(i,j,bi,bj) )
0143 & + ddy*( xG(i,j+1,bi,bj) - xG(i,j,bi,bj) )
0144 & + ddx*ddy*( xG(i+1,j+1,bi,bj) - xG(i+1,j,bi,bj)
0145 & - xG(i,j+1,bi,bj) + xG(i,j,bi,bj) )
0146 yy = yG(i,j,bi,bj) + ddx*( yG(i+1,j,bi,bj) - yG(i,j,bi,bj) )
0147 & + ddy*( yG(i,j+1,bi,bj) - yG(i,j,bi,bj) )
0148 & + ddx*ddy*( yG(i+1,j+1,bi,bj) - yG(i+1,j,bi,bj)
0149 & - yG(i,j+1,bi,bj) + yG(i,j,bi,bj) )
0150
f5995a4aae Gael*0151 xx_ij=xG(i,j,bi,bj)
0152 xx_ip1j=xG(i+1,j,bi,bj)
0153 xx_ijp1=xG(i,j+1,bi,bj)
0154 xx_ip1jp1=xG(i+1,j+1,bi,bj)
0155 if (xx_ip1j.GT.xx_ij+180) xx_ip1j=xx_ip1j-360
0156 if (xx_ip1j.LT.xx_ij-180) xx_ip1j=xx_ip1j+360
0157 if (xx_ijp1.GT.xx_ij+180) xx_ijp1=xx_ijp1-360
0158 if (xx_ijp1.LT.xx_ij-180) xx_ijp1=xx_ijp1+360
0159 if (xx_ip1jp1.GT.xx_ij+180) xx_ip1jp1=xx_ip1jp1-360
0160 if (xx_ip1jp1.LT.xx_ij-180) xx_ip1jp1=xx_ip1jp1+360
0161 xx = xx_ij + ddx*( xx_ip1j - xx_ij )
0162 & + ddy*( xx_ijp1 - xx_ij )
0163 & + ddx*ddy*( xx_ip1jp1 - xx_ip1j - xx_ijp1 + xx_ij )
0164
9bba4c8337 Jean*0165 ELSE
0166 STOP 'FLT_MAP_IJLOCAL2XY: not yet coded for this grid'
0167 ENDIF
0168
0169 RETURN
0170 END
0171
0172
0173
0174 _RL FUNCTION FLT_MAP_R2K(
0175 I rr, bi, bj, myThid )
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188 IMPLICIT NONE
0189
0190
0191 #include "SIZE.h"
0192 #include "EEPARAMS.h"
0193 #include "GRID.h"
0194
0195
0196 _RL rr
0197 INTEGER bi, bj, myThid
0198
0199
0200 _RL fm
0201 INTEGER k
0202
0203
0204
0205 FLT_MAP_R2K = 0. _d 0
0206 DO k=1,Nr
0207 IF ( FLT_MAP_R2K .EQ. 0. _d 0 ) THEN
0208
0209 IF ( rF(k) .GE. rr .AND. rr.GT.rF(k+1) ) THEN
0210 fm = ( rr - rF(k) ) * recip_drF(k)*rkSign
0211 FLT_MAP_R2K = DFLOAT(k)+fm-0.5 _d 0
0212 ENDIF
0213 ENDIF
0214 ENDDO
0215
0216 RETURN
0217 END
0218
0219
0220
0221 _RL FUNCTION FLT_MAP_K2R(
0222 I kr, bi, bj, myThid )
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235 IMPLICIT NONE
0236
0237
0238 #include "SIZE.h"
0239 #include "EEPARAMS.h"
0240 #include "GRID.h"
0241
0242
0243 _RL kr
0244 INTEGER bi, bj, myThid
0245
0246
0247 _RL ddz
0248 INTEGER k
0249
0250
0251
0252 k = NINT(kr)
0253 IF ( k.LT.1 ) THEN
0254 FLT_MAP_K2R = rF(1)
0255 ELSEIF ( k.GT.Nr ) THEN
0256 FLT_MAP_K2R = rF(Nr+1)
0257 ELSE
0258 ddz = 0.5 _d 0 + kr - DFLOAT(k)
0259 FLT_MAP_K2R = rF(k) + ddz*drF(k)*rkSign
0260 ENDIF
0261
0262 RETURN
0263 END