Changeset 5082 for LMDZ6/branches/Amaury_dev/libf/misc/pchsp.F
- Timestamp:
- Jul 19, 2024, 5:41:58 PM (2 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/misc/pchsp.F
r1907 r5082 162 162 C 163 163 C***FIRST EXECUTABLE STATEMENT PCHSP 164 IF ( N .LT.2 ) GO TO 5001165 IF ( INCFD .LT.1 ) GO TO 5002164 IF ( N<2 ) GO TO 5001 165 IF ( INCFD<1 ) GO TO 5002 166 166 DO 1 J = 2, N 167 IF ( X(J) .LE.X(J-1) ) GO TO 5003167 IF ( X(J)<=X(J-1) ) GO TO 5003 168 168 1 CONTINUE 169 169 C … … 171 171 IEND = IC(2) 172 172 IERR = 0 173 IF ( (IBEG .LT.0).OR.(IBEG.GT.4) ) IERR = IERR - 1174 IF ( (IEND .LT.0).OR.(IEND.GT.4) ) IERR = IERR - 2175 IF ( IERR .LT.0 ) GO TO 5004173 IF ( (IBEG<0).OR.(IBEG>4) ) IERR = IERR - 1 174 IF ( (IEND<0).OR.(IEND>4) ) IERR = IERR - 2 175 IF ( IERR<0 ) GO TO 5004 176 176 C 177 177 C FUNCTION DEFINITION IS OK -- GO ON. 178 178 C 179 IF ( NWK .LT.2*N ) GO TO 5007179 IF ( NWK < 2*N ) GO TO 5007 180 180 C 181 181 C COMPUTE FIRST DIFFERENCES OF X SEQUENCE AND STORE IN WK(1,.). ALSO, … … 188 188 C SET TO DEFAULT BOUNDARY CONDITIONS IF N IS TOO SMALL. 189 189 C 190 IF ( IBEG .GT.N ) IBEG = 0191 IF ( IEND .GT.N ) IEND = 0190 IF ( IBEG>N ) IBEG = 0 191 IF ( IEND>N ) IEND = 0 192 192 C 193 193 C SET UP FOR BOUNDARY CONDITIONS. 194 194 C 195 IF ( (IBEG .EQ.1).OR.(IBEG.EQ.2) ) THEN195 IF ( (IBEG==1).OR.(IBEG==2) ) THEN 196 196 D(1,1) = VC(1) 197 ELSE IF (IBEG .GT.2) THEN197 ELSE IF (IBEG > 2) THEN 198 198 C PICK UP FIRST IBEG POINTS, IN REVERSE ORDER. 199 199 DO 10 J = 1, IBEG … … 201 201 C INDEX RUNS FROM IBEG DOWN TO 1. 202 202 XTEMP(J) = X(INDEX) 203 IF (J .LT.IBEG) STEMP(J) = WK(2,INDEX)203 IF (J < IBEG) STEMP(J) = WK(2,INDEX) 204 204 10 CONTINUE 205 205 C -------------------------------- 206 206 D(1,1) = PCHDF (IBEG, XTEMP, STEMP, IERR) 207 207 C -------------------------------- 208 IF (IERR .NE.0) GO TO 5009208 IF (IERR /= 0) GO TO 5009 209 209 IBEG = 1 210 210 ENDIF 211 211 C 212 IF ( (IEND .EQ.1).OR.(IEND.EQ.2) ) THEN212 IF ( (IEND==1).OR.(IEND==2) ) THEN 213 213 D(1,N) = VC(2) 214 ELSE IF (IEND .GT.2) THEN214 ELSE IF (IEND > 2) THEN 215 215 C PICK UP LAST IEND POINTS. 216 216 DO 15 J = 1, IEND … … 218 218 C INDEX RUNS FROM N+1-IEND UP TO N. 219 219 XTEMP(J) = X(INDEX) 220 IF (J .LT.IEND) STEMP(J) = WK(2,INDEX+1)220 IF (J < IEND) STEMP(J) = WK(2,INDEX+1) 221 221 15 CONTINUE 222 222 C -------------------------------- 223 223 D(1,N) = PCHDF (IEND, XTEMP, STEMP, IERR) 224 224 C -------------------------------- 225 IF (IERR .NE.0) GO TO 5009225 IF (IERR /= 0) GO TO 5009 226 226 IEND = 1 227 227 ENDIF … … 237 237 C WK(2,1)*S(1) + WK(1,1)*S(2) = D(1,1) 238 238 C 239 IF (IBEG .EQ.0) THEN240 IF (N .EQ.2) THEN239 IF (IBEG == 0) THEN 240 IF (N == 2) THEN 241 241 C NO CONDITION AT LEFT END AND N = 2. 242 242 WK(2,1) = ONE … … 250 250 * + WK(1,2)**2*WK(2,3)) / WK(1,1) 251 251 ENDIF 252 ELSE IF (IBEG .EQ.1) THEN252 ELSE IF (IBEG == 1) THEN 253 253 C SLOPE PRESCRIBED AT LEFT END. 254 254 WK(2,1) = ONE … … 266 266 C 267 267 NM1 = N-1 268 IF (NM1 .GT.1) THEN268 IF (NM1 > 1) THEN 269 269 DO 20 J=2,NM1 270 IF (WK(2,J-1) .EQ.ZERO) GO TO 5008270 IF (WK(2,J-1) == ZERO) GO TO 5008 271 271 G = -WK(1,J+1)/WK(2,J-1) 272 272 D(1,J) = G*D(1,J-1) … … 282 282 C SUBSTITUTION, SINCE ARRAYS HAPPEN TO BE SET UP JUST RIGHT FOR IT 283 283 C AT THIS POINT. 284 IF (IEND .EQ.1) GO TO 30285 C 286 IF (IEND .EQ.0) THEN287 IF (N .EQ.2 .AND. IBEG.EQ.0) THEN284 IF (IEND == 1) GO TO 30 285 C 286 IF (IEND == 0) THEN 287 IF (N==2 .AND. IBEG==0) THEN 288 288 C NOT-A-KNOT AT RIGHT ENDPOINT AND AT LEFT ENDPOINT AND N = 2. 289 289 D(1,2) = WK(2,2) 290 290 GO TO 30 291 ELSE IF ((N .EQ.2) .OR. (N.EQ.3 .AND. IBEG.EQ.0)) THEN291 ELSE IF ((N==2) .OR. (N==3 .AND. IBEG==0)) THEN 292 292 C EITHER (N=3 AND NOT-A-KNOT ALSO AT LEFT) OR (N=2 AND *NOT* 293 293 C NOT-A-KNOT AT LEFT END POINT). 294 294 D(1,N) = TWO*WK(2,N) 295 295 WK(2,N) = ONE 296 IF (WK(2,N-1) .EQ.ZERO) GO TO 5008296 IF (WK(2,N-1) == ZERO) GO TO 5008 297 297 G = -ONE/WK(2,N-1) 298 298 ELSE … … 303 303 D(1,N) = ((WK(1,N)+TWO*G)*WK(2,N)*WK(1,N-1) 304 304 * + WK(1,N)**2*(F(1,N-1)-F(1,N-2))/WK(1,N-1))/G 305 IF (WK(2,N-1) .EQ.ZERO) GO TO 5008305 IF (WK(2,N-1) == ZERO) GO TO 5008 306 306 G = -G/WK(2,N-1) 307 307 WK(2,N) = WK(1,N-1) … … 311 311 D(1,N) = THREE*WK(2,N) + HALF*WK(1,N)*D(1,N) 312 312 WK(2,N) = TWO 313 IF (WK(2,N-1) .EQ.ZERO) GO TO 5008313 IF (WK(2,N-1) == ZERO) GO TO 5008 314 314 G = -ONE/WK(2,N-1) 315 315 ENDIF … … 318 318 C 319 319 WK(2,N) = G*WK(1,N-1) + WK(2,N) 320 IF (WK(2,N) .EQ.ZERO) GO TO 5008320 IF (WK(2,N) == ZERO) GO TO 5008 321 321 D(1,N) = (G*D(1,N-1) + D(1,N))/WK(2,N) 322 322 C … … 325 325 30 CONTINUE 326 326 DO 40 J=NM1,1,-1 327 IF (WK(2,J) .EQ.ZERO) GO TO 5008327 IF (WK(2,J) == ZERO) GO TO 5008 328 328 D(1,J) = (D(1,J) - WK(1,J)*D(1,J+1))/WK(2,J) 329 329 40 CONTINUE
Note: See TracChangeset
for help on using the changeset viewer.