]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/mathlib/gen/e/dspkn1.F
Changes needed by ICC/IFC compiler (Intel)
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / e / dspkn1.F
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