*************************************************************************** * All the software contained in this library is protected by copyright. * * Permission to use, copy, modify, and distribute this software for any * * purpose without fee is hereby granted, provided that this entire notice * * is included in all copies of any software which is or includes a copy * * or modification of this software and in all copies of the supporting * * documentation for such software. * *************************************************************************** * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * * WARRANTY. IN NO EVENT, NEITHER THE AUTHORS, NOR THE PUBLISHER, NOR ANY * * MEMBER OF THE EDITORIAL BOARD OF THE JOURNAL "NUMERICAL ALGORITHMS", * * NOR ITS EDITOR-IN-CHIEF, BE LIABLE FOR ANY ERROR IN THE SOFTWARE, ANY * * MISUSE OF IT OR ANY DAMAGE ARISING OUT OF ITS USE. THE ENTIRE RISK OF * * USING THE SOFTWARE LIES WITH THE PARTY DOING SO. * *************************************************************************** * ANY USE OF THE SOFTWARE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE * * ABOVE STATEMENT. * *************************************************************************** AUTHOR: M.-J. LAI UNIVERSITY OF UTAH - U.S.A. REFERENCE: FORTRAN SUBROUTINES FOR B-NETS OF BOX SPLINES ON THREE- AND FOUR-DIRECTIONAL MESHES, NUMERICAL ALGORITHMS, 2 (1992) PP. 33-38 SOFTWARE REVISION DATE: OCTOBER, 1991 C------------------------------------------------------------------------ C C PROGRAM TESTB3 C C DESCRIPTION: C C THIS IS A TEST PROGRAM FOR GENERATING THE B-NET OF ANY BOX SPLINE C B(L,M,N) ON A THREE DIRECTIONAL MESH. OUTPUT IS A LATEX FILE. USE THE C FOLLOWING COMMANDS TO COMPILE AND PREVIEW THE B-NET OF THE BOX SPLINE C B(L,M,N): latex boxspl[RETURN] C xdvi boxspl[RETURN] C AT AN X WINDOW SYSTEM. C YOU MAY HANDLE boxspl.tex AS A USUAL LATEX FILE WITHOUT AN X WINDOW C SYSTEM TO PREVIEW AND/OR GET A HARDCOPY OF THE B-NET OF THE BOX C SPLINE B(L,M,N). C TO CONTROL THE MARGIN OF THE OUTPUT, YOU MAY ADJUST THE COORDINATE C (100,30) OF THE FIGURE AT THE LINE \begin{picture} OF THE OUTPUT FILE C boxspl.tex. IF THE FIRST COMPONENT OF THE COORDINATE IS INCREASING, C THE FIGURE WILL MOVE TO THE LEFT. IF IT IS DECREASING, THE FIGURE WILL C MOVE TO THE RIGHT. C YOU MAY ADJUST THE FONT BY CHANGING \scriptsize INTO \tiny OR C \footnotesize, ETC.. C TO ENLARGE OR SHRINK THE OUTPUT, YOU MAY ADJUST THE NUMBER 0.01in AT C THE LINE \unitlength OF THE OUTPUT FILE boxspl.tex. INCREASING THE C NUMBER WILL ENLARGE THE FIGURE AND DECREASING THE NUMBER WILL SHRINK C THE FIGURE. (0.01in MEANS THAT ONE UNIT IS EQUAL TO 0.01 INCH.) C C WARNINGS: C C THE B-NETS OF A BOX SPLINE OF HIGHER DEGREE THAN 6 MAY NOT BE C FITTED IN ONE PAGE. NOTE THAT L,M,N MUST BE GREATER THAN OR EQUAL TO 1. C THIS TEST PROGRAM CAN BE USED AS THEY ARE WITH UNIX. WITH OTHER SYSTEMS C \\ HAS TO BE REPLACED BY \. C C------------------------------------------------------------------------ PROGRAM TESTB3 INTEGER A,B,D,I,J,L,M,N,SIZE PARAMETER (SIZE=50) DIMENSION A(0:SIZE,0:SIZE),B(0:SIZE,0:SIZE) INTEGER BSIZE1,BSIZE2 PRINT*,'ENTER L,M,N ' READ*, L,M,N CALL BS3DM(L,M,N,A,B,SIZE,BSIZE1,BSIZE2) D=L+M+N-2 OPEN(UNIT=2,FILE='boxspl.tex',STATUS='UNKNOWN') WRITE(2,*)'\\documentstyle[12pt]{article}' WRITE(2,*)'\\textheight8in' WRITE(2,*)'\\topmargin-0.5in' WRITE(2,*)'\\textwidth8.0in' WRITE(2,*)'\\begin{document}' WRITE(2,*)'\\pagestyle{empty}' WRITE(2,*)'\\unitlength0.01in' WRITE(2,*)'\\begin{picture}(',20*(L+N)*D+10,',',20*(M+N) + *D+10,')(100,30)' DO 15 I=0, BSIZE1-1 DO 10 J=0, BSIZE2-1 WRITE(2,*)'\\put(',20*I,',',20*J,')', + '{{\\scriptsize \\bf ',B(I,J),'}}' 10 CONTINUE 15 CONTINUE WRITE(2,*)'\\multiput(-2,-2)(0,',20*D,'){',M+N+1,'}', + '{\\line(1,0){',20*D*(L+N),'}}' WRITE(2,*)'\\multiput(-2,-2)(',20*D,',0){',L+N+1,'}', + '{\\line(0,1){',20*D*(M+N),'}}' DO 20 I=0,L+N-1 IF(M+N+I.LE.L+N)THEN WRITE(2,*)'\\put(',20*D*I-2,',-2){\\line(1,1){',20*D* + (M+N),'}}' ELSE WRITE(2,*)'\\put(',20*D*I-2,',-2){\\line(1,1){',20*D* + (L+N-I),'}}' ENDIF 20 CONTINUE DO 30 J=1, M+N-1 IF(L+N+I.LE.M+N)THEN WRITE(2,*)'\\put(-2,',20*D*J-2,'){\\line(1,1){',20*D* + (L+N),'}}' ELSE WRITE(2,*)'\\put(-2,',20*D*J-2,'){\\line(1,1){',20*D* + (M+N-J),'}}' ENDIF 30 CONTINUE WRITE(2,*)'\\put(100,-30){ The B-net of box spline ', + '$', D,'!B(',L,M,N,')$}' WRITE(2,*)'\\end{picture}' WRITE(2,*) WRITE(2,*)'\\end{document}' CLOSE(2) PRINT*,'Your LaTeX file is boxspl.tex' END C------------------------------------------------------------------------ C C SUBROUTINE BS3DM C C USAGE: C C SUBROUTINE BS3DM(L,M,N,A,B,SIZE,BSIZE1,BSIZE2) C C DESCRIPTION: C C THIS SUBROUTINE PRODUCES THE B-NETS OF ANY BOX SPLINES ON A THREE C DIRECTIONAL MESH. C THE INPUT IS THE REPETITIONS (L,M,N) OF DIRECTIONS (1,0), (0,1), C AND (1,1). HERE L, M, AND N MUST BE GREATER THAN OR EQUAL TO 1. C THE OUTPUT IS AN ARRAY OF THE COLLECTION OF B-NETS OF ALL C POLYNOMIAL PIECES OF THE BOX SPLINE INSIDE ITS SUPPORT. C C INPUT PARAMETERS: C C L, M, N ARE INTEGERS. C L IS THE NUMBER OF THE REPETITION OF (1,0) C M IS THE NUMBER OF THE REPETITION OF (0,1) C N IS THE NUMBER OF THE REPETITION OF (1,1) C C SIZE IS AN INTEGER PARAMETER FOR STORAGE REQUIREMENT WHICH MUST BE C GREATER THAN THE LARGER ONE OF (L+M+N-2)*(L+N)+1 AND C (L+M+N-2)*(M+N)+1. ITS VALUE IS USED IN THE DIMENSION STATEMENT C FOR THE ARRAYS A AND B. C C A IS A WORKING INTEGER ARRAY WHOSE SIZE IS SIZE*SIZE. C C OUTPUT PARAMETERS: C C B IS AN OUTPUT INTEGER ARRAY. B CONTAINS THE C B-NETS OF THE BOX SPLINE (L+M+N-2)!*B(L,M,N). C C BSIZE1*BSIZE2 IS THE SIZE OF THE INTEGER ARRAY B. C C------------------------------------------------------------------------ SUBROUTINE BS3DM(L,M,N,A,B,SIZE,BSIZE1,BSIZE2) INTEGER L,M,N,A,B,BSIZE1,BSIZE2,SIZE DIMENSION A(0:SIZE,0:SIZE),B(0:SIZE,0:SIZE) C C LOCAL PARAMETERS ARE D, I, J, L1, M1, N1, NX, NY. NOTE THAT D IS THE C DEGREE OF THE BOX SPLINE. C INTEGER D,I,J,L1,M1,N1,NX,NY B(1,1)=1 D=1 C C WE START WITH THE B-NET OF BOX SPLINE B(1,1,1) AND FIRST FIND THE C B-NET OF BOX SPLINE B(L,1,1) IF L IS GREATER THAN 1. C IF(L.GT.1)THEN L1=1 50 IF(L1.GE.L)GOTO 100 C C FIND THE DIFFERENCE OF THE B-NETS OF B(L1,1,1) AT (0,0) AND B(L1,1,1) C AT (L1,0) AND WRITE IT INTO THE ARRAY A. C DO 60 I=0, D*(L1+2) DO 55 J=0, 2*D IF(I.LT.D)THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I-D,J) END IF 55 CONTINUE 60 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(L1+1,1,1) TO BE ZERO. C DO 65 I=0, D*(L1+2) B(I,0)=0 65 CONTINUE DO 70 J=0,D*2 B(0,I)=0 70 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(L1+1,1,1) C DO 95 I=0, L1+1 DO 90 J=0,1 DO 85 NX=1, D DO 80 NY=1, D IF(NY.GE.NX)THEN B(NX+I*D,NY+D*J)=B(NX-1+D*I,NY+D*J)+A(NX-1+(D-1)*I,NY-1+(D-1)*J) ELSE B(NX+I*D,NY+D*J)=B(NX-1+D*I,NY+D*J)+A(NX-1+(D-1)*I,NY+(D-1)*J) END IF 80 CONTINUE 85 CONTINUE 90 CONTINUE 95 CONTINUE L1=L1+1 GOTO 50 ENDIF C C THE ABOVE LOOP HAS FOUND THE B-NET OF B(L,1,1). C NOW START TO FIND THE B-NET OF BOX SPLINE B(L,M,1). C 100 IF(M.GT.1)THEN M1=1 150 IF(M1.GE.M)GOTO 200 C C FIND THE DIFFERENCE OF THE B-NETS OF B(L,M1,1) AT (0,0) AND B(L,M1,1) C AT (0,M1) AND WRITE IT INTO THE ARRAY A. C DO 160 J=0, D*(M1+2) DO 155 I=0,D*(L+1) IF(J.LT.D)THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I,J-D) END IF 155 CONTINUE 160 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(L,M1+1,1) TO BE ZERO. C DO 165 I=0, D*(L+1) B(I,0)=0 165 CONTINUE DO 170 J=0, D*(M1+2) B(0,J)=0 170 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(L,M1+1,1) C DO 195 I=0, L DO 190 J=0, M1+1 DO 185 NY=1, D DO 180 NX=1,D IF(NX.GE.NY)THEN B(NX+I*D,NY+J*D)=B(NX+I*D,NY-1+J*D)+A(NX+I*(D-1)-1,NY-1+J*(D-1)) ELSE B(NX+I*D,NY+J*D)=B(NX+I*D,NY-1+J*D)+A(NX+I*(D-1),NY-1+J*(D-1)) ENDIF 180 CONTINUE 185 CONTINUE 190 CONTINUE 195 CONTINUE M1=M1+1 GOTO 150 ENDIF C C FINALLY FIND THE B-NET OF BOX SPLINE B(L,M,N) C 200 IF(N.GT.1)THEN N1=1 250 IF(N1.GE.N)GOTO 300 C C FIND THE DIFFERENCE OF THE B-NETS OF B(L,M,N1) AT (0,0) AND B(L,M,N1) C AT (N1,N1) AND WRITE IT INTO THE ARRAY A. C DO 260 I=0,D*(L+N1+1) DO 255 J=0,D*(M+N1+1) IF((I.LT.D).OR.(J.LT.D))THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I-D,J-D) ENDIF 255 CONTINUE 260 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(L,M,N1+1) TO BE ZERO. C DO 265 I=0, D*(L+N1+1) B(I,0)=0 265 CONTINUE DO 270 J=0, D*(M+N1+1) B(0,J)=0 270 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(L,M,N1+1) C DO 295 I=0, L+N1 DO 290 J=0, M+N1 DO 285 NX=1, D DO 280 NY=1, D B(NX+I*D,NY+J*D)=B(NX+I*D-1,NY+J*D-1) + +A(NX+I*(D-1)-1,NY+J*(D-1)-1) 280 CONTINUE 285 CONTINUE 290 CONTINUE 295 CONTINUE N1=N1+1 GOTO 250 ENDIF 300 PRINT*,'WE HAVE GENERATED THE B-NETS OF BOX SPLINE ' PRINT*, D,'!*B(',L,M,N,')' BSIZE1= D*(L+N)+1 BSIZE2= D*(M+N)+1 RETURN END C------------------------------------------------------------------------ C C PROGRAM TESTB4 C C DESCRIPTION: C C THIS IS A TEST PROGRAM FOR GENERATING THE B-NETS OF ANY BOX SPLINE C B(K,L,M,N) ON A FOUR DIRECTIONAL MESH. THE INPUT IS THE REPETITIONS OF C DIRECTIONS (1,0),(0,1),(1,1) AND (1,-1). THE OUTPUT IS A LATEX FILE. C USE THE FOLLOWING COMMANDS TO COMPILE AND PREVIEW THE B-NETS OF BOX C SPLINE B(K,L,M,N): latex boxspl[RETURN] C xdvi boxspl[RETURN] C AT AN X WINDOW SYSTEM. C YOU MAY HANDLE boxspl.tex AS A USUAL LATEX FILE WITHOUT AN X WINDOW C SYSTEM TO PREVIEW AND/OR GET A HARDCOPY OF THE B-NET OF THE BOX C SPLINE B(L,M,N). C TO CONTROL THE MARGIN OF THE OUTPUT, YOU MAY ADJUST THE COORDINATE C (100,30) OF THE FIGURE AT THE LINE \begin{picture} OF THE OUTPUT FILE C boxspl.tex. IF THE FIRST COMPONENT OF THE COORDINATE IS INCREASING, C THE FIGURE WILL MOVE TO THE LEFT. IF IT IS DECREASING, THE FIGURE WILL C MOVE TO THE RIGHT. C YOU MAY ADJUST THE FONT BY CHANGING \scriptsize INTO \tiny OR C \footnotesize, ETC.. C TO ENLARGE OR SHRINK THE OUTPUT, YOU MAY ADJUST THE NUMBER 0.01in AT C THE LINE \unitlength OF THE OUTPUT FILE boxspl.tex. INCREASING THE C NUMBER WILL ENLARGE THE FIGURE AND DECREASING THE NUMBER WILL SHRINK C THE FIGURE. (0.01in MEANS THAT ONE UNIT IS EQUAL TO 0.01 INCH.) C C WARNINGS: C C THE B-NETS OF A BOX SPLINE OF HIGHER DEGREE THAN 5 MAY NOT BE FITTED C IN ONE PAGE. C NOTE THAT K,L,M, AND N MUST BE GREATER THAN OR EQUAL TO 1. C THIS TEST PROGRAM CAN BE USED AS THEY ARE WITH UNIX. WITH OTHER SYSTEMS C \\ HAS TO BE REPLACED BY \. C C------------------------------------------------------------------------ PROGRAM TESTB4 INTEGER K,L,M,N,SIZE,A,B,BSIZE1,BSIZE2,D PARAMETER (SIZE=50) DIMENSION A(0:SIZE,0:SIZE),B(0:SIZE,0:SIZE) PRINT*,'ENTER K,L,M,N ' READ*, K,L,M,N D=K+L+M+N-2 CALL BS4DM(K,L,M,N,A,B,BSIZE1,BSIZE2,SIZE) OPEN(UNIT=2,FILE='boxspl.tex',STATUS='UNKNOWN') WRITE(2,*)'\\documentstyle[12pt]{article}' WRITE(2,*)'\\textheight9in' WRITE(2,*)'\\topmargin-0.5in' WRITE(2,*)'\\textwidth8.0in' WRITE(2,*)'\\begin{document}' WRITE(2,*)'\\pagestyle{empty}' WRITE(2,*)'\\unitlength0.01in' WRITE(2,*)'\\begin{picture}(',40*(K+M+N)*D+10,',', + 40*(L+M+N)*D+10,')(100,30)' DO 15 I=0, BSIZE1-1, 2 DO 10 J=0, BSIZE2-1, 2 WRITE(2,*)'\\put(',20*I,',',20*J,')', + '{{\\scriptsize \\bf ',B(I,J),'}}' 10 CONTINUE 15 CONTINUE DO 25 I=1, 2*D*(K+M+N)-1,2 DO 20 J=1, 2*D*(L+M+N)-1,2 WRITE(2,*)'\\put(',20*I,',',20*J,')', + '{{\\scriptsize \\bf ',B(I,J),'}}' 20 CONTINUE 25 CONTINUE WRITE(2,*)'\\multiput(-2,-2)(0,',40*D,'){',L+M+N+1,'}', + '{\\line(1,0){',40*D*(K+M+N),'}}' WRITE(2,*)'\\multiput(-2,-2)(',40*D,',0){',K+M+N+1,'}', + '{\\line(0,1){',40*D*(L+M+N),'}}' DO 30 I=0,K+M+N-1 IF(L+M+N+I.LE.K+M+N)THEN WRITE(2,*)'\\put(',40*D*I-2,',-2){\\line(1,1){',40*D* + (L+M+N),'}}' WRITE(2,*)'\\put(',40*D*(K+M+N-I)-2,',-2)', + '{\\line(-1,1){',40*D*(L+M+N),'}}' ELSE WRITE(2,*)'\\put(',40*D*I-2,',-2){\\line(1,1){',40*D* + (K+M+N-I),'}}' WRITE(2,*)'\\put(',40*D*(K+M+N-I)-2,',-2){\\line(-1,1)', + '{',40*D*(K+M+N-I),'}}' ENDIF 30 CONTINUE DO 35 J=1, L+M+N-1 IF(K+M+N+I.LE.L+M+N)THEN WRITE(2,*)'\\put(-2,',40*D*J-2,'){\\line(1,1){',40*D* + (K+M+N),'}}' WRITE(2,*)'\\put(',40*D*(K+M+N)-2,',',40*D*J-2,')', + '{\\line(-1,1){',40*D*(K+M+N),'}}' ELSE WRITE(2,*)'\\put(-2,',40*D*J-2,'){\\line(1,1){',40*D* + (L+M+N-J),'}}' WRITE(2,*)'\\put(',40*D*(K+M+N)-2,',',40*D*J-2,')', + '{\\line(-1,1){',40*D*(L+M+N-J),'}}' ENDIF 35 CONTINUE WRITE(2,*)'\\put(100,-30){The B-net of box spline ', + '$',D,'!2^{',M+N+1,'}B(',K,L,M,N,')$}' WRITE(2,*)'\\end{picture}' WRITE(2,*) WRITE(2,*)'\\end{document}' CLOSE(2) PRINT*,'Your LaTeX file is boxspl.tex' END C------------------------------------------------------------------------ C C SUBROUTINE BS4DM C C USAGE: C C SUBROUTINE BS4DM(K,L,M,N,A,B,BSIZE1,BSIZE2,SIZE) C C DESCRIPTION: C C THIS PROGRAM FINDS THE B-NETS OF ANY BOX SPLINE ON A FOUR C DIRECTIONAL MESH. C THE INPUT IS THE REPETITIONS (K,L,M,N) OF DIRECTIONS (1,0),(0,1), C (1,1), AND (1,-1). ALL K, L, M, AND N MUST BE GREATER OR EQUAL TO 1. C THE OUTPUT IS AN ARRAY OF COLLECTIONS OF B-NETS OF THE BOX SPLINE C RESTRICTED TO EVERY TRIANGLES INSIDE ITS SUPPORT. C C INPUT PARAMETERS: C C K, L, M, N ARE INTEGERS. C K IS THE NUMBER OF THE REPETITION OF (1,0) C L IS THE NUMBER OF THE REPETITION OF (0,1) C M IS THE NUMBER OF REPETITION OF (1,1) C N IS THE NUMBER OF THE REPETITION OF (1,-1) C C SIZE IS THE INTEGER PARAMETER TO DECLARE THE STORAGE REQUIREMENT C OF THE INTEGER ARRAYS A AND B. SIZE MUST BE GREATER THAN THE C INTEGERS 2*(K+L+M+N-2)*(K+M+N) AND 2*(K+L+M+N-2)*(L+M+N). C C A IS A WORKING INTEGER ARRAY WHOSE SIZE IS SIZE*SIZE. C C OUTPUT PARAMETERS: C C B IS AN OUTPUT INTEGER ARRAY. B CONTAINS THE C B-NETS OF BOX SPLINE (K+L+M+N-2)!*2^{M+N+1}*B(K,L,M,N). ACTUALLY, C THE B-NETS CAN BE PRINTED OUT AS FOLLOWS: C C DO J=0,2*(K+L+M+N-2)*(L+M+N),2 C WRITE(*,1) (B(I,J),I=0,2*(K+L+M+N-2)*(K+M+N),2) C WRITE(*,2) (B(I+1,J+1),I=0,2*(K+L+M+N-2)*(K+M+N)-1,2) C 1 FORMAT(2X,20I4) C 2 FORMAT(4X,20I4) C C BSIZE1*BSIZE2 IS THE SIZE OF THE INTEGER ARRAY B. C C------------------------------------------------------------------------ SUBROUTINE BS4DM(K,L,M,N,A,B,BSIZE1,BSIZE2,SIZE) INTEGER K,L,M,N,A,B,BSIZE1,BSIZE2,SIZE DIMENSION A(0:SIZE,0:SIZE),B(0:SIZE,0:SIZE) C C LOCAL PARAMETERS D,I,J,K1,L1,M1,N1,NX,NY. NOTE THAT D IS THE DEGREE OF THE C BOX SPLINE. C INTEGER D,I,J,K1,L1,M1,N1,NX,NY C C SET THE INITIAL B-NETS OF 16*B(1,1,1,1). C DO 10 I=0,SIZE DO 10 J=0,SIZE B(I,J)=0 10 CONTINUE B(4,4)=4 B(4,6)=8 B(4,8)=4 B(3,5)=4 B(3,7)=4 B(2,6)=2 B(5,3)=4 B(5,5)=8 B(5,7)=8 B(5,9)=4 B(6,2)=2 B(6,4)=8 B(6,6)=8 B(6,8)=8 B(6,10)=2 B(7,3)=4 B(7,5)=8 B(7,7)=8 B(7,9)=4 B(8,4)=4 B(8,6)=8 B(8,8)=4 B(9,5)=4 B(9,7)=4 B(10,6)=2 D=2 C C SET DEGREE D=2 AND START TO FIND THE B-NETS OF BOX SPLINE B(K,1,1,1). C IF(K.GT.1)THEN K1=1 50 IF(K1.GE.K)GOTO 100 C C FIND THE DIFFERENCE OF THE B-NETS OF B(K1,1,1,1) AT (0,0) AND C B(K1,1,1,1) AT (K1,0) AND WRITE IT INTO THE ARRAY A. C DO 60 I=0, 2*D*(K1+3) DO 55 J=0, 6*D IF(I.LT.2*D)THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I-2*D,J) END IF 55 CONTINUE 60 CONTINUE D=D+1 DO 65 I=0, 2*D*(K1+3),2 B(I,0)=0 65 CONTINUE DO 70 J=0, 6*D,2 B(0,J)=0 70 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(K1+1,1,1,1). C DO 95 I=0,K1+2 DO 94 J=0,2 DO 75 NX=1, D DO 74 NY=NX, 2*D-NX,2 B(I*2*D+NX,J*2*D+NY)=B(2*I*D+NX-1,J*2*D+NY-1) + +B(2*I*D+NX-1,2*J*D+NY+1)+A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1) B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX,J*2*D+NY)/2 74 CONTINUE 75 CONTINUE DO 80 NY=1,D-1 DO 79 NX=NY+2, 2*D-NY, 2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-2,J*2*D+NY) + +A(I*2*(D-1)+NX-2,J*2*(D-1)+NY) 79 CONTINUE 80 CONTINUE DO 85 NY=D+1,2*D DO 84 NX=2*D-NY+2,NY,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-2,J*2*D+NY) + +A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 84 CONTINUE 85 CONTINUE DO 90 NX=D+2, 2*D DO 89 NY=2*D-NX+2,NX-2, 2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,J*2*D+NY-1)*2 + -B(I*2*D+NX,J*2*D+NY-2)+A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 89 CONTINUE 90 CONTINUE 94 CONTINUE 95 CONTINUE K1=K1+1 GOTO 50 ENDIF C C THE ABOVE LOOP HAS FOUND THE B-NET OF B(K,1,1,1). C START TO FIND THE B-NETS OF BOX SPLINE B(K,L,1,1). C 100 IF(L.GT.1)THEN L1=1 150 IF(L1.GE.L)GOTO 200 C C FIND THE DIFFERENCE OF THE B-NETS OF B(K,L1,1,1) AT (0,0) AND C B(K,L1,1,1) AT (0,L1) AND WRITE IT INTO THE ARRAY A. C DO 160 I=0, 2*D*(K+2) DO 155 J=0, 2*D*(L1+3) IF(J.LT.2*D)THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I,J-2*D) ENDIF 155 CONTINUE 160 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(K,L1+1,1,1) TO BE ZERO. C DO 165 I=0,2*D*(K+2),2 B(I,0)=0 165 CONTINUE DO 170 J=0,2*D*(L1+3),2 B(0,J)=0 170 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(K,L1+1,1,1) C DO 195 I=0, K+1 DO 194 J=0, L1+2 DO 175 NY=1,D DO 174 NX=NY,2*D-NY,2 B(I*2*D+NX,J*2*D+NY)=(B(I*2*D+NX-1,J*2*D+NY-1) + +B(I*2*D+NX+1,J*2*D+NY-1)+A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1))/2 174 CONTINUE 175 CONTINUE DO 180 NX=1,D-1 DO 179 NY=NX+2,2*D-NX,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX,J*2*D+NY-2) + +A(I*2*(D-1)+NX,J*2*(D-1)+NY-2) 179 CONTINUE 180 CONTINUE DO 185 NX=D+1,2*D DO 184 NY=2*D-NX+2,NX,2 B(I*2*D+NX,J*2*D+NY)=B(I*D*2+NX,J*2*D+NY-2) + +A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 184 CONTINUE 185 CONTINUE DO 190 NY=D+2,2*D DO 189 NX=2*D-NY+2, NY-2, 2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,J*2*D+NY-1)*2 + -B(I*2*D+NX-2,J*2*D+NY)+A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 189 CONTINUE 190 CONTINUE 194 CONTINUE 195 CONTINUE L1=L1+1 GOTO 150 ENDIF C C NOW COMPUTE THE B-NETS OF BOX SPLINE B(K,L,M,1). C 200 IF(M.GT.1)THEN M1=1 250 IF(M1.GE.M)GOTO 300 C C FIND THE DIFFERENCE OF THE B-NETS OF B(K,L,M1,1) AT (0,0) AND C B(K,L,M1,1) AT (M1,M1) AND WRITE IT INTO THE ARRAY A. C DO 260 I=0, 2*D*(K+M1+2) DO 255 J=0, 2*D*(L+M1+2) IF((I.LT.2*D).OR.(J.LT.2*D))THEN A(I,J)=B(I,J) ELSE A(I,J)=B(I,J)-B(I-2*D,J-2*D) ENDIF 255 CONTINUE 260 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(K,L,M1+1,1) TO BE ZERO. C DO 265 I=0,2*D*(K+M1+2),2 B(I,0)=0 265 CONTINUE DO 270 J=0, 2*D*(L+M1+2),2 B(0,J)=0 270 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(K,L,M1+1,1). C DO 295 I=0, K+M1+1 DO 294 J=0, L+M1+1 DO 275 NX=1, D DO 274 NY=NX, 2*D-NX,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,J*2*D+NY-1) + +A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1) 274 CONTINUE 275 CONTINUE DO 280 NY=1, D-1 DO 279 NX=NY+2,2*D-NY,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,2*J*D+NY-1) + +A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1) 279 CONTINUE 280 CONTINUE DO 285 NY=D+1,2*D DO 284 NX=2*D-NY+2,NY,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,2*J*D+NY-1) + +A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 284 CONTINUE 285 CONTINUE DO 290 NX=D+2,2*D DO 289 NY=2*D-NX+2,NX-2,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX-1,2*J*D+NY-1) + +A(I*2*(D-1)+NX-2,J*2*(D-1)+NY-2) 289 CONTINUE 290 CONTINUE 294 CONTINUE 295 CONTINUE M1=M1+1 GOTO 250 ENDIF C C FINALLY, COMPUTE THE B-NETS OF BOX SPLINE B(K,L,M,N). C 300 IF(N.GT.1)THEN N1=1 350 IF(N1.GE.N)GOTO 400 C C FIND THE DIFFERENCE OF THE B-NETS OF B(K,L,M,N1) AT (0,0) AND C B(K,L,M,N1) AT (N1,-N1) AND WRITE IT INTO THE ARRAY A. C DO 360 I=0, 2*D*(K+M+N1+1) DO 355 J=0, 2*D*(L+M+N1+1) IF((I.LT.2*D).AND.(J.LT.2*D))THEN A(I,J)=0 ENDIF IF((I.LT.2*D).AND.(J.GE.2*D))THEN A(I,J)=-B(I,J-2*D) ENDIF IF((I.GE.2*D).AND.(J.LT.2*D))THEN A(I,J)=B(I-2*D,J) ENDIF IF((I.GE.2*D).AND.(J.GE.2*D))THEN A(I,J)=B(I-2*D,J)-B(I,J-2*D) ENDIF 355 CONTINUE 360 CONTINUE D=D+1 C C SET THE INITIAL B-NET OF B(K,L,M, N1+1) TO BE ZERO. C DO 365 I=0, 2*D*(K+M+N1+1),2 B(I,0)=0 365 CONTINUE DO 370 J=0, 2*D*(L+M+N1+1),2 B(2*D*(K+M+N1+1),J)=0 370 CONTINUE C C THEN SOLVE THE DIFFERENCE EQUATIONS TO FIND THE B-NET OF B(K,L,M,N1+1) C DO 395 I=K+M+N1,0,-1 DO 394 J=0,L+M+N1 DO 375 NY=1,D DO 374 NX=NY,2*D-NY,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX+1,J*2*D+NY-1) + +A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1) 374 CONTINUE 375 CONTINUE DO 380 NX=2*D-1,D+1,-1 DO 379 NY=2*D-NX+2,NX,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX+1,J*2*D+NY-1) + +A(I*2*(D-1)+NX-1,J*2*(D-1)+NY-1) 379 CONTINUE 380 CONTINUE DO 385 NX=D-1,0,-1 DO 384 NY=NX+2,2*D-NX,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX+1,J*2*D+NY-1) + +A(I*2*(D-1)+NX,J*2*(D-1)+NY-2) 384 CONTINUE 385 CONTINUE DO 390 NY=D+2,2*D DO 389 NX=2*D-NY+2,NY-2,2 B(I*2*D+NX,J*2*D+NY)=B(I*2*D+NX+1,J*2*D+NY-1) + +A(I*2*(D-1)+NX,J*2*(D-1)+NY-2) 389 CONTINUE 390 CONTINUE 394 CONTINUE 395 CONTINUE N1=N1+1 GOTO 350 ENDIF 400 PRINT*, 'WE HAVE GENERATED THE B-NETS OF BOX SPLINE ' PRINT*, D,'!*','2^(',M+N+1,')B(',K,L,M,N,').' BSIZE1=2*D*(K+M+N)+1 BSIZE2=2*D*(L+M+N)+1 RETURN END