SUBROUTINE SPLIE2(X1A,X2A,YA,M,N,Y2A) C C Module Number: C C Module Name: SPLIE2 C C Keyphrase: C ---------- C Compute second derivatives for bicubic spine interpolation C C Description: C ------------ C Given an M by N tabulated function YA, and tabulated independent C variables X1A (M values) and X2A (N values), this routine constructs C one-dimensional natureal cubic splines of the rows of YA and returns C the second-derivatives in the array Y2A. C C (From Press, William H. et al, NUMERICAL RECIPES, 1986) C C FORTRAN Name: splie2.f C C Keywords of Accessed Files : C -------------------------- C none C C Modules Called: C --------------- C C History: C -------- C Version Date Author Description C 1.0 Sep 91 S. Hulbert Copied from NUMERICAL RECIPES C 1.2.3 Apr 93 H. Bushouse Declare and define STDOUT, STDERR C------------------------------------------------------------------------ IMPLICIT NONE C C INPUT: C INTEGER N,M DOUBLE PRECISION X1A(M),X2A(N),YA(M,N) C ----> two independent and one dependent C arrays C C OUTPUT: C DOUBLE PRECISION Y2A(M,N) C ----> second derivatives C------------------------------------------------------------------------------ C IRAF MEM common block C LOGICAL MEMB(1) INTEGER*2 MEMS(1) INTEGER*4 MEMI(1) INTEGER*4 MEML(1) REAL MEMR(1) DOUBLE PRECISION MEMD(1) COMPLEX MEMX(1) EQUIVALENCE (MEMB, MEMS, MEMI, MEML, MEMR, MEMD, MEMX) COMMON /MEM/ MEMD C------------------------------------------------------------------------------ INTEGER STDOUT PARAMETER (STDOUT = 1) INTEGER STDERR PARAMETER (STDERR = 2) INTEGER TYDOUB PARAMETER (TYDOUB = 7) C C LOCAL VARIABLES C INTEGER ISTATS(2) INTEGER YTMP,Y2TMP,I,J,K,ISTAT CHARACTER*80 CONTXT C C--------------------------------------------------------------------------- C DO 500 I = 1, 2 ISTATS(I) = 0 500 CONTINUE CALL UDMGET (M*N, TYDOUB, YTMP, ISTATS(1)) CALL UDMGET (M*N, TYDOUB, Y2TMP, ISTATS(2)) DO 510 I = 1, 2 IF (ISTATS(I) .NE. 0) THEN CONTXT = 'ERROR allocating dynamic memory' GO TO 999 ENDIF 510 CONTINUE C C main C DO 100 J=1,M DO 200 K=1,N MEMD(YTMP+K-1)=YA(J,K) 200 CONTINUE CALL SPLINE(X2A,MEMD(YTMP),N,1.D30,1.D30,MEMD(Y2TMP)) DO 300 K=1,N Y2A(J,K)=MEMD(Y2TMP+K-1) 300 CONTINUE 100 CONTINUE C CALL UDMFRE (YTMP, TYDOUB, ISTATS(1)) CALL UDMFRE (Y2TMP, TYDOUB, ISTATS(2)) DO 520 I = 1, 2 IF (ISTATS(I) .NE. 0) THEN CONTXT = 'ERROR deallocating dynamic memory' GO TO 999 ENDIF 520 CONTINUE GO TO 1000 C 999 CALL YMSPUT(CONTXT,STDOUT+STDERR,0,ISTAT) 1000 RETURN END