93 |
C assume Interface at middle between 2 Center |
C assume Interface at middle between 2 Center |
94 |
drF(1) = delRc(1) |
drF(1) = delRc(1) |
95 |
DO k=2,Nr |
DO k=2,Nr |
96 |
drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1) |
c drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1) |
97 |
|
c drF( k ) = 0.5 _d 0 *delRc(k) |
98 |
|
C- note: change the order to prevent some compilers to produce wrong code |
99 |
|
C when trying to optimise this loop : |
100 |
drF( k ) = 0.5 _d 0 *delRc(k) |
drF( k ) = 0.5 _d 0 *delRc(k) |
101 |
|
drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1) |
102 |
ENDDO |
ENDDO |
103 |
drF(Nr) = delRc(Nr+1) + drF(Nr) |
drF(Nr) = delRc(Nr+1) + drF(Nr) |
104 |
ENDIF |
ENDIF |
105 |
|
|
106 |
IF (setCenterDr) THEN |
IF (setCenterDr) THEN |
107 |
C-- Cell Center r-distances are defined: |
C-- Cell Center r-distances are defined: |
108 |
DO k=1,Nr |
DO k=1,Nr+1 |
109 |
drC(k) = delRc(k) |
drC(k) = delRc(k) |
110 |
ENDDO |
ENDDO |
111 |
C- Check that all thickness are > 0 : |
C- Check that all thickness are > 0 : |
127 |
DO k=2,Nr |
DO k=2,Nr |
128 |
drC(k) = 0.5 _d 0 *(delR(k-1)+delR(k)) |
drC(k) = 0.5 _d 0 *(delR(k-1)+delR(k)) |
129 |
ENDDO |
ENDDO |
130 |
|
drC(Nr+1) = 0.5 _d 0 *delR(Nr) |
131 |
ENDIF |
ENDIF |
132 |
|
|
133 |
C--- Set r-position of interFace (rF) and cell-Center (rC): |
C--- Set r-position of interFace (rF) and cell-Center (rC): |
134 |
rF(1) = Ro_SeaLevel |
C -- Use top_Pres or seaLev_Z to set vertical axis position: |
135 |
DO k=1,Nr |
C OCN in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(1), @ the top) |
136 |
rF(k+1) = rF(k) + rkSign*drF(k) |
C ATM in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(Nr+1), @ bottom) |
137 |
ENDDO |
C OCN in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(Nr+1)/g, @ the top) |
138 |
rC(1) = rF(1) + rkSign*drC(1) |
C ATM in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(1)/g, @ the bottom) |
139 |
DO k=2,Nr |
IF ( rF(1).EQ.UNSET_RS .AND. |
140 |
rC(k) = rC(k-1) + rkSign*drC(k) |
& usingZCoords.AND.fluidIsWater ) THEN |
141 |
ENDDO |
rF(1) = seaLev_Z |
142 |
|
ENDIF |
143 |
|
IF ( rF(1).NE.UNSET_RS ) THEN |
144 |
|
DO k=1,Nr |
145 |
|
rF(k+1) = rF(k) + rkSign*drF(k) |
146 |
|
ENDDO |
147 |
|
rC(1) = rF(1) + rkSign*drC(1) |
148 |
|
DO k=2,Nr |
149 |
|
rC(k) = rC(k-1) + rkSign*drC(k) |
150 |
|
ENDDO |
151 |
|
c IF ( usingPCoords ) THEN |
152 |
|
c top_Pres = rF(Nr+1) |
153 |
|
c ELSEIF ( fluidIsWater ) THEN |
154 |
|
c seaLev_Z = rF(1) |
155 |
|
c ELSE |
156 |
|
c seaLev_Z = rF(Nr+1) |
157 |
|
c ENDIF |
158 |
|
ELSE |
159 |
|
IF ( usingPCoords ) THEN |
160 |
|
rF(Nr+1) = top_Pres |
161 |
|
ELSE |
162 |
|
rF(Nr+1) = seaLev_Z |
163 |
|
ENDIF |
164 |
|
DO k=Nr,1,-1 |
165 |
|
rF(k) = rF(k+1) - rkSign*drF(k) |
166 |
|
ENDDO |
167 |
|
rC(Nr) = rF(Nr+1) - rkSign*drC(Nr+1) |
168 |
|
DO k=Nr,2,-1 |
169 |
|
rC(k-1) = rC(k) - rkSign*drC(k) |
170 |
|
ENDDO |
171 |
|
ENDIF |
172 |
|
|
173 |
C--- Check vertical discretization : |
C--- Check vertical discretization : |
174 |
checkRatio2 = 100. |
checkRatio2 = 100. |
195 |
ENDDO |
ENDDO |
196 |
|
|
197 |
C- Calculate reciprol vertical grid spacing : |
C- Calculate reciprol vertical grid spacing : |
198 |
DO k=1,Nr |
DO k=1,Nr+1 |
199 |
recip_drC(k) = 1. _d 0/drC(k) |
recip_drC(k) = 1. _d 0/drC(k) |
200 |
|
ENDDO |
201 |
|
DO k=1,Nr |
202 |
recip_drF(k) = 1. _d 0/drF(k) |
recip_drF(k) = 1. _d 0/drF(k) |
203 |
ENDDO |
ENDDO |
204 |
|
|