1 |
C $Header$ |
C $Header$ |
2 |
|
|
3 |
#include "CPP_EEOPTIONS.h" |
#include "CPP_OPTIONS.h" |
4 |
|
|
5 |
CStartOfInterface |
CStartOfInterface |
6 |
SUBROUTINE INI_CARTESIAN_GRID( myThid ) |
SUBROUTINE INI_CARTESIAN_GRID( myThid ) |
33 |
C | and Y are in metres. Disktance in Z are in m or Pa | |
C | and Y are in metres. Disktance in Z are in m or Pa | |
34 |
C | depending on the vertical gridding mode. | |
C | depending on the vertical gridding mode. | |
35 |
C \==========================================================/ |
C \==========================================================/ |
36 |
|
IMPLICIT NONE |
37 |
|
|
38 |
C === Global variables === |
C === Global variables === |
39 |
#include "SIZE.h" |
#include "SIZE.h" |
48 |
|
|
49 |
C == Local variables == |
C == Local variables == |
50 |
C xG, yG - Global coordinate location. |
C xG, yG - Global coordinate location. |
|
C zG |
|
51 |
C xBase - South-west corner location for process. |
C xBase - South-west corner location for process. |
52 |
C yBase |
C yBase |
53 |
C zUpper - Work arrays for upper and lower |
C zUpper - Work arrays for upper and lower |
61 |
C zUpper - Temporary arrays holding z coordinates of |
C zUpper - Temporary arrays holding z coordinates of |
62 |
C zLower upper and lower faces. |
C zLower upper and lower faces. |
63 |
C I,J,K |
C I,J,K |
64 |
_RL xG, yG, zG |
_RL xGloc, yGloc |
|
_RL phi |
|
|
_RL zUpper(Nz), zLower(Nz) |
|
65 |
_RL xBase, yBase |
_RL xBase, yBase |
66 |
INTEGER iG, jG |
INTEGER iG, jG |
67 |
INTEGER bi, bj |
INTEGER bi, bj |
68 |
INTEGER I, J, K |
INTEGER I, J |
69 |
|
|
70 |
C-- Simple example of inialisation on cartesian grid |
C-- Simple example of inialisation on cartesian grid |
71 |
C-- First set coordinates of cell centers |
C-- First set coordinates of cell centers |
73 |
C complex configurations it is usually OK to pass iG, jG to a custom |
C complex configurations it is usually OK to pass iG, jG to a custom |
74 |
C function and have it return xG and yG. |
C function and have it return xG and yG. |
75 |
C Set up my local grid first |
C Set up my local grid first |
76 |
|
xC0 = 0. _d 0 |
77 |
|
yC0 = 0. _d 0 |
78 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
79 |
jG = myYGlobalLo + (bj-1)*sNy |
jG = myYGlobalLo + (bj-1)*sNy |
80 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
87 |
DO j=1,jG-1 |
DO j=1,jG-1 |
88 |
yBase = yBase + delY(j) |
yBase = yBase + delY(j) |
89 |
ENDDO |
ENDDO |
90 |
yG = yBase |
yGloc = yBase |
91 |
DO J=1,sNy |
DO J=1,sNy |
92 |
xG = xBase |
xGloc = xBase |
93 |
DO I=1,sNx |
DO I=1,sNx |
94 |
xc(I,J,bi,bj) = xG + delX(iG+i-1)*0.5 _d 0 |
xG(I,J,bi,bj) = xGloc |
95 |
yc(I,J,bi,bj) = yG + delY(jG+j-1)*0.5 _d 0 |
yG(I,J,bi,bj) = yGloc |
96 |
xG = xG + delX(iG+I-1) |
xc(I,J,bi,bj) = xGloc + delX(iG+i-1)*0.5 _d 0 |
97 |
|
yc(I,J,bi,bj) = yGloc + delY(jG+j-1)*0.5 _d 0 |
98 |
|
xGloc = xGloc + delX(iG+I-1) |
99 |
dxF(I,J,bi,bj) = delX(iG+i-1) |
dxF(I,J,bi,bj) = delX(iG+i-1) |
100 |
dyF(I,J,bi,bj) = delY(jG+j-1) |
dyF(I,J,bi,bj) = delY(jG+j-1) |
101 |
ENDDO |
ENDDO |
102 |
yG = yG + delY(jG+J-1) |
yGloc = yGloc + delY(jG+J-1) |
103 |
ENDDO |
ENDDO |
104 |
ENDDO |
ENDDO |
105 |
ENDDO |
ENDDO |
143 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
144 |
DO J=1,sNy |
DO J=1,sNy |
145 |
DO I=1,sNx |
DO I=1,sNx |
146 |
dxC(I,J,bi,bj) = (dxF(I,J,bi,bj)+dxF(I-1,J,bi,bj))*0.5 D0 |
dxC(I,J,bi,bj) = (dxF(I,J,bi,bj)+dxF(I-1,J,bi,bj))*0.5 _d 0 |
147 |
dyC(I,J,bi,bj) = (dyF(I,J,bi,bj)+dyF(I,J-1,bi,bj))*0.5 D0 |
dyC(I,J,bi,bj) = (dyF(I,J,bi,bj)+dyF(I,J-1,bi,bj))*0.5 _d 0 |
148 |
ENDDO |
ENDDO |
149 |
ENDDO |
ENDDO |
150 |
ENDDO |
ENDDO |
151 |
ENDDO |
ENDDO |
152 |
_EXCH_XY_R4(dxC, myThid ) |
_EXCH_XY_R4(dxC, myThid ) |
153 |
_EXCH_XY_R4(dyC, myThid ) |
_EXCH_XY_R4(dyC, myThid ) |
|
C Calculate recipricols |
|
|
DO bj = myByLo(myThid), myByHi(myThid) |
|
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
|
|
DO J=1,sNy |
|
|
DO I=1,sNx |
|
|
rDxG(I,J,bi,bj)=1.d0/dxG(I,J,bi,bj) |
|
|
rDyG(I,J,bi,bj)=1.d0/dyG(I,J,bi,bj) |
|
|
rDxC(I,J,bi,bj)=1.d0/dxC(I,J,bi,bj) |
|
|
rDyC(I,J,bi,bj)=1.d0/dyC(I,J,bi,bj) |
|
|
rDxF(I,J,bi,bj)=1.d0/dxF(I,J,bi,bj) |
|
|
rDyF(I,J,bi,bj)=1.d0/dyF(I,J,bi,bj) |
|
|
rDxV(I,J,bi,bj)=1.d0/dxV(I,J,bi,bj) |
|
|
rDyU(I,J,bi,bj)=1.d0/dyU(I,J,bi,bj) |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
_EXCH_XY_R4(rDxG, myThid ) |
|
|
_EXCH_XY_R4(rDyG, myThid ) |
|
|
_EXCH_XY_R4(rDxC, myThid ) |
|
|
_EXCH_XY_R4(rDyC, myThid ) |
|
|
_EXCH_XY_R4(rDxF, myThid ) |
|
|
_EXCH_XY_R4(rDyF, myThid ) |
|
|
_EXCH_XY_R4(rDxV, myThid ) |
|
|
_EXCH_XY_R4(rDyU, myThid ) |
|
154 |
C Calculate vertical face area |
C Calculate vertical face area |
155 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
156 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
157 |
DO J=1,sNy |
DO J=1,sNy |
158 |
DO I=1,sNx |
DO I=1,sNx |
159 |
zA(I,J,bi,bj) = dxF(I,J,bi,bj)*dyF(I,J,bi,bj) |
rA (I,J,bi,bj) = dxF(I,J,bi,bj)*dyF(I,J,bi,bj) |
160 |
|
rAw(I,J,bi,bj) = dxC(I,J,bi,bj)*dyG(I,J,bi,bj) |
161 |
|
rAs(I,J,bi,bj) = dxG(I,J,bi,bj)*dyC(I,J,bi,bj) |
162 |
|
rAz(I,J,bi,bj) = dxV(I,J,bi,bj)*dyU(I,J,bi,bj) |
163 |
|
tanPhiAtU(I,J,bi,bj) = 0. _d 0 |
164 |
|
tanPhiAtV(I,J,bi,bj) = 0. _d 0 |
165 |
ENDDO |
ENDDO |
166 |
ENDDO |
ENDDO |
167 |
ENDDO |
ENDDO |
168 |
ENDDO |
ENDDO |
169 |
|
_EXCH_XY_R4 (rA , myThid ) |
170 |
DO bj = myByLo(myThid), myByHi(myThid) |
_EXCH_XY_R4 (rAw , myThid ) |
171 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
_EXCH_XY_R4 (rAs , myThid ) |
172 |
DO K=1,Nz |
_EXCH_XY_R4 (tanPhiAtU , myThid ) |
173 |
DO J=1,sNy |
_EXCH_XY_R4 (tanPhiAtV , myThid ) |
|
DO I=1,sNx |
|
|
IF (HFacC(I,J,K,bi,bj) .NE. 0. D0 ) THEN |
|
|
rHFacC(I,J,K,bi,bj) = 1. D0 / HFacC(I,J,K,bi,bj) |
|
|
ELSE |
|
|
rHFacC(I,J,K,bi,bj) = 0. D0 |
|
|
ENDIF |
|
|
IF (HFacW(I,J,K,bi,bj) .NE. 0. D0 ) THEN |
|
|
rHFacW(I,J,K,bi,bj) = 1. D0 / HFacW(I,J,K,bi,bj) |
|
|
maskW(I,J,K,bi,bj) = 1. D0 |
|
|
ELSE |
|
|
rHFacW(I,J,K,bi,bj) = 0. D0 |
|
|
maskW(I,J,K,bi,bj) = 0.0 D0 |
|
|
ENDIF |
|
|
IF (HFacS(I,J,K,bi,bj) .NE. 0. D0 ) THEN |
|
|
rHFacS(I,J,K,bi,bj) = 1. D0 / HFacS(I,J,K,bi,bj) |
|
|
maskS(I,J,K,bi,bj) = 1. D0 |
|
|
ELSE |
|
|
rHFacS(I,J,K,bi,bj) = 0. D0 |
|
|
maskS(I,J,K,bi,bj) = 0. D0 |
|
|
ENDIF |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
C Now sync. and get/send edge regions that are shared with |
|
|
C other threads. |
|
|
_EXCH_XYZ_R4(rHFacC , myThid ) |
|
|
_EXCH_XYZ_R4(rHFacW , myThid ) |
|
|
_EXCH_XYZ_R4(rHFacS , myThid ) |
|
|
_EXCH_XYZ_R4(maskW , myThid ) |
|
|
_EXCH_XYZ_R4(maskS , myThid ) |
|
174 |
|
|
175 |
C |
C |
176 |
RETURN |
RETURN |
177 |
END |
END |
|
|
|
|
C $Id$ |
|