5 * Revision 1.1.1.1 1996/04/01 15:02:25 mclareni
10 SUBROUTINE DSPKN2(KX,KY,MX,MY,AX,BX,AY,BY,TX,TY,NERR)
12 #include "gen/imp64.inc"
16 PARAMETER (NAME = 'DSPKN2')
18 ************************************************************************
19 * NORBAS, VERSION: 15.03.1993
20 ************************************************************************
22 * DSPKN2 COMPUTES TWO SETS OF MX (MX >= 2*KX+2) AND MY (MY >= 2*KY+2)
23 * SPLINE-KNOTS IN THE INTERVAL AX <= X <= BX AND AY <= Y <= BY
24 * AS KNOTS FOR NORMALIZED B-SPLINES OF DEGREE KX (0 <= KX <= 25) AND
25 * KY (0 <= KY <= 25), RESPECTIVELY.
26 * THE FIRST (KX+1) KNOTS OF TX ARE EQUAL TO AX, THE LAST (KX+1) KNOTS
27 * OF TX ARE EQUAL TO BX, AND THE OTHER KNOTS OF TX ARE EQUIDISTANT.
28 * A CORRESPONDING CHARACTERISTIC HOLDS FOR SET OF KNOTS TY IN
33 * KX (INTEGER) DEGREE OF B-SPLINES IN X-DIRECTION.
34 * KY (INTEGER) DEGREE OF B-SPLINES IN Y-DIRECTION.
35 * MX (INTEGER) NUMBER OF KNOTS IN THE INTERVAL AX <= X <= BX.
36 * MY (INTEGER) NUMBER OF KNOTS IN THE INTERVAL AY <= Y <= BY.
37 * AX (DOUBLE PRECISION) LEFT ENDPOINT OF X-INTERVAL
38 * BX (DOUBLE PRECISION) RIGHT ENDPOINT OF X-INTERVAL
39 * AY (DOUBLE PRECISION) LEFT ENDPOINT OF Y-INTERVAL
40 * BY (DOUBLE PRECISION) RIGHT ENDPOINT OF Y-INTERVAL
41 * TX (DOUBLE RECISION) ARRAY OF AT LEAST ORDER MX CONTAINING THE
42 * KNOTS OVER THE X-INTERVAL, ON EXIT.
43 * TY (DOUBLE RECISION) ARRAY OF AT LEAST ORDER MY CONTAINING THE
44 * KNOTS OVER THE Y-INTERVAL, ON EXIT.
45 * NERR (INTEGER) ERROR INDICATOR. ON EXIT:
46 * = 0: NO ERROR DETECTED
47 * = 1: AT LEAST ONE OF THE CONSTANTS KX, KY, MX, MY IS ILLEGAL
51 * THE USER HAS TO PROVIDE KX, KY, MX, MY, AX, BX, AY, BY.
52 * ON RETURN THE ARRAYS TX AND TY CONTAIN THE DESIRED KNOTS IN
57 * IF ONE OF THE FOLLOWING RELATION IS SATISFIED BY THE CHOSEN INPUT-
58 * PARAMETERS THE PROGRAM RETURNS, AND AN ERROR MESSAGE IS PRINTED:
59 * KX < 0 OR KX > 25 OR KY < 0 OR KY > 25 OR
60 * MX < 2*KX+2 OR MY < 2*KY+2 OR
61 * BX <= AX OR BY <= AY .
63 * ********************************************************************
66 IF(KX .LT. 0 .OR. KX .GT. 25) THEN
67 WRITE(ERRTXT,101) 'KX',KX
68 CALL MTLPRT(NAME,'E210.1',ERRTXT)
69 ELSEIF(KY .LT. 0 .OR. KY .GT. 25) THEN
70 WRITE(ERRTXT,101) 'KY',KY
71 CALL MTLPRT(NAME,'E210.1',ERRTXT)
72 ELSEIF(MX .LT. 2*KX+2) THEN
73 WRITE(ERRTXT,101) 'MX',MX
74 CALL MTLPRT(NAME,'E210.2',ERRTXT)
75 ELSEIF(MY .LT. 2*KY+2) THEN
76 WRITE(ERRTXT,101) 'MY',MY
77 CALL MTLPRT(NAME,'E210.2',ERRTXT)
78 ELSEIF(BX .LE. AX) THEN
79 WRITE(ERRTXT,103) 'AX',AX,'BX',BX
80 CALL MTLPRT(NAME,'E210.7',ERRTXT)
81 ELSEIF(BY .LE. AY) THEN
82 WRITE(ERRTXT,103) 'AY',AY,'BY',BY
83 CALL MTLPRT(NAME,'E210.7',ERRTXT)
86 DX=(BX-AX)/(MX-2*KX-1)
87 DY=(BY-AY)/(MY-2*KY-1)
89 CALL DVSET(KX+1,AX,TX(1),TX(2))
90 CALL DVSET(KX+1,BX,TX(MX-KX),TX(MX-KX+1))
91 DO 10 I = KX+2,MX-KX-1
92 10 TX(I)=AX+DX*(I-KX-1)
94 CALL DVSET(KY+1,AY,TY(1),TY(2))
95 CALL DVSET(KY+1,BY,TY(MY-KY),TY(MY-KY+1))
96 DO 20 I = KY+2,MY-KY-1
97 20 TY(I)=AY+DY*(I-KY-1)
102 101 FORMAT(1X,A5,' =',I6,' NOT IN RANGE')
103 103 FORMAT(1X,A5,' =',1PD15.8,A7,' =',1PD15.8,' INCONSISTENT')