]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1996/04/01 15:02:25 mclareni | |
6 | * Mathlib gen | |
7 | * | |
8 | * | |
9 | #include "gen/pilot.h" | |
10 | SUBROUTINE DSPKN1(K,M,A,B,T,NERR) | |
11 | ||
12 | #include "gen/imp64.inc" | |
13 | DIMENSION T(*) | |
14 | CHARACTER NAME*(*) | |
15 | CHARACTER*80 ERRTXT | |
16 | PARAMETER (NAME = 'DSPKN1') | |
17 | ||
18 | ************************************************************************ | |
19 | * NORBAS, VERSION: 15.03.1993 | |
20 | ************************************************************************ | |
21 | * | |
22 | * DSPKN1 COMPUTES M ( M >= 2*K+2 ) KNOTS IN THE INTERVAL A <= X <= B | |
23 | * AS KNOTS FOR NORMALIZED B-SPLINES OF DEGREE K ( 0 <= K <= 25 ). | |
24 | * THE FIRST (K+1) KNOTS ARE EQUAL TO A, THE LAST (K+1) KNOTS ARE EQUAL | |
25 | * TO B, AND THE OTHER KNOTS ARE EQUIDISTANT. | |
26 | * | |
27 | * PARAMETERS: | |
28 | * | |
29 | * K (INTEGER) DEGREE OF B-SPLINES | |
30 | * M (INTEGER) NUMBER OF KNOTS IN THE INTERVAL A <= X <= B | |
31 | * A (DOUBLE PRECISION) LEFT ENDPOINT OF INTERVAL | |
32 | * B (DOUBLE PRECISION) RIGHT ENDPOINT OF INTERVAL | |
33 | * T (DOUBLE RECISION) ARRAY OF AT LEAST ORDER M CONTAINING THE | |
34 | * KNOTS, ON EXIT. | |
35 | * NERR (INTEGER) ERROR INDICATOR. ON EXIT: | |
36 | * = 0: NO ERROR DETECTED | |
37 | * = 1: AT LEAST ONE OF THE CONSTANTS K , M IS ILLEGAL | |
38 | * | |
39 | * USAGE: | |
40 | * | |
41 | * THE USER HAS TO PROVIDE K, M, A, AND B. | |
42 | * ON RETURN THE ARRAY T CONTAINS THE DESIRED KNOTS IN ASCENDING | |
43 | * ORDER. | |
44 | * | |
45 | * ERROR MESSAGES: | |
46 | * | |
47 | * IF ONE OF THE FOLLOWING RELATION IS SATISFIED BY THE CHOSEN INPUT- | |
48 | * PARAMETERS THE PROGRAM RETURNS, AND AN ERROR MESSAGE IS PRINTED: | |
49 | * K < 0 OR K > 25 OR | |
50 | * M < 2*K+2 OR | |
51 | * B <= A . | |
52 | * | |
53 | * ******************************************************************** | |
54 | ||
55 | NERR=1 | |
56 | IF(K .LT. 0 .OR. K .GT. 25) THEN | |
57 | WRITE(ERRTXT,101) 'K',K | |
58 | CALL MTLPRT(NAME,'E210.1',ERRTXT) | |
59 | ELSEIF(M .LT. 2*K+2) THEN | |
60 | WRITE(ERRTXT,101) 'M',M | |
61 | CALL MTLPRT(NAME,'E210.2',ERRTXT) | |
62 | ELSEIF(B .LE. A) THEN | |
63 | WRITE(ERRTXT,103) 'A',A,'B',B | |
64 | CALL MTLPRT(NAME,'E210.7',ERRTXT) | |
65 | ELSE | |
66 | NERR=0 | |
67 | CALL DVSET(K+1,A,T(1),T(2)) | |
68 | CALL DVSET(K+1,B,T(M-K),T(M-K+1)) | |
69 | D=(B-A)/(M-2*K-1) | |
70 | DO 10 I = K+2,M-K-1 | |
71 | 10 T(I)=A+D*(I-K-1) | |
72 | ENDIF | |
73 | RETURN | |
74 | ||
75 | 101 FORMAT(1X,A5,' =',I6,' NOT IN RANGE') | |
76 | 103 FORMAT(1X,A5,' =',1PD15.8,A7,' =',1PD15.8,' INCONSISTENT') | |
77 | END | |
78 | ||
79 |