Mercurial > octave-libgccjit
view libcruft/dassl/ddatrp.f @ 8964:f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Date: Sun, 8 Mar 2009 16:28:18 -0400
These preserve sparsity, so eye(5) * sprand (5, 5, .2) is *sparse*
and not dense. This may affect people who use multiplication by
eye() rather than full().
The liboctave routines do *not* check if arguments are scalars in
disguise. There is a type problem with checking at that level. I
suspect we want diag * "sparse scalar" to stay diagonal, but we have
to return a sparse matrix at the liboctave. Rather than worrying
about that in liboctave, we cope with it when binding to Octave and
return the correct higher-level type.
The implementation is in Sparse-diag-op-defs.h rather than
Sparse-op-defs.h to limit recompilation. And the implementations
are templates rather than macros to produce better compiler errors
and debugging information.
author | Jason Riedy <jason@acm.org> |
---|---|
date | Mon, 09 Mar 2009 17:49:13 -0400 |
parents | 30c606bec7a8 |
children |
line wrap: on
line source
SUBROUTINE DDATRP (X, XOUT, YOUT, YPOUT, NEQ, KOLD, PHI, PSI) C***BEGIN PROLOGUE DDATRP C***SUBSIDIARY C***PURPOSE Interpolation routine for DDASSL. C***LIBRARY SLATEC (DASSL) C***TYPE DOUBLE PRECISION (SDATRP-S, DDATRP-D) C***AUTHOR PETZOLD, LINDA R., (LLNL) C***DESCRIPTION C----------------------------------------------------------------------- C THE METHODS IN SUBROUTINE DDASTP USE POLYNOMIALS C TO APPROXIMATE THE SOLUTION. DDATRP APPROXIMATES THE C SOLUTION AND ITS DERIVATIVE AT TIME XOUT BY EVALUATING C ONE OF THESE POLYNOMIALS,AND ITS DERIVATIVE,THERE. C INFORMATION DEFINING THIS POLYNOMIAL IS PASSED FROM C DDASTP, SO DDATRP CANNOT BE USED ALONE. C C THE PARAMETERS ARE: C X THE CURRENT TIME IN THE INTEGRATION. C XOUT THE TIME AT WHICH THE SOLUTION IS DESIRED C YOUT THE INTERPOLATED APPROXIMATION TO Y AT XOUT C (THIS IS OUTPUT) C YPOUT THE INTERPOLATED APPROXIMATION TO YPRIME AT XOUT C (THIS IS OUTPUT) C NEQ NUMBER OF EQUATIONS C KOLD ORDER USED ON LAST SUCCESSFUL STEP C PHI ARRAY OF SCALED DIVIDED DIFFERENCES OF Y C PSI ARRAY OF PAST STEPSIZE HISTORY C----------------------------------------------------------------------- C***ROUTINES CALLED (NONE) C***REVISION HISTORY (YYMMDD) C 830315 DATE WRITTEN C 901009 Finished conversion to SLATEC 4.0 format (F.N.Fritsch) C 901019 Merged changes made by C. Ulrich with SLATEC 4.0 format. C 901026 Added explicit declarations for all variables and minor C cosmetic changes to prologue. (FNF) C***END PROLOGUE DDATRP C INTEGER NEQ, KOLD DOUBLE PRECISION X, XOUT, YOUT(*), YPOUT(*), PHI(NEQ,*), PSI(*) C INTEGER I, J, KOLDP1 DOUBLE PRECISION C, D, GAMMA, TEMP1 C C***FIRST EXECUTABLE STATEMENT DDATRP KOLDP1=KOLD+1 TEMP1=XOUT-X DO 10 I=1,NEQ YOUT(I)=PHI(I,1) 10 YPOUT(I)=0.0D0 C=1.0D0 D=0.0D0 GAMMA=TEMP1/PSI(1) DO 30 J=2,KOLDP1 D=D*GAMMA+C/PSI(J-1) C=C*GAMMA GAMMA=(TEMP1+PSI(J-1))/PSI(J) DO 20 I=1,NEQ YOUT(I)=YOUT(I)+C*PHI(I,J) 20 YPOUT(I)=YPOUT(I)+D*PHI(I,J) 30 CONTINUE RETURN C C------END OF SUBROUTINE DDATRP------ END