Mercurial > octave
annotate libinterp/corefcn/__pchip_deriv__.cc @ 22133:59cadee1c74b
new macros for F77 data types
* f77-fcn.h (F77_DBLE, F77_REAL, F77_DBLE_CMPLX, F77_CMPLX, F77_INT,
F77_INT4, F77_LOGICAL): New macros.
* fortrandemo.cc, __pchip_deriv__.cc, dot.cc, interpreter.cc,
ordschur.cc, qz.cc, CColVector.cc, CMatrix.cc, CNDArray.cc,
CRowVector.cc, CSparse.cc, dColVector.cc, dMatrix.cc, dNDArray.cc,
dRowVector.cc, dSparse.cc, fCColVector.cc, fCMatrix.cc,
fCNDArray.cc, fCRowVector.cc, fColVector.cc, fMatrix.cc,
fNDArray.cc, fRowVector.cc, DASPK.cc, DASRT.cc, DASSL.cc, EIG.cc,
LSODE.cc, Quad.cc, aepbalance.cc, chol.cc, eigs-base.cc, fEIG.cc,
gepbalance.cc, hess.cc, lo-specfun.cc, lu.cc, oct-convn.cc,
oct-rand.cc, qr.cc, qrp.cc, randpoisson.cc, schur.cc, svd.cc:
Use new macros in declarations of Fortran subroutines.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sun, 17 Jul 2016 12:42:37 -0400 |
parents | 112b20240c87 |
children | 93b3cdd36854 |
rev | line source |
---|---|
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
1 /* |
5837 | 2 |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
18605
diff
changeset
|
3 Copyright (C) 2002-2015 Kai Habel |
11523 | 4 Copyright (C) 2008-2009 Jaroslav Hajek |
5837 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
5837 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5837 | 21 |
22 */ | |
23 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
24 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
25 # include "config.h" |
5837 | 26 #endif |
27 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14846
diff
changeset
|
28 #include "defun.h" |
5837 | 29 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
30 #include "errwarn.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
31 #include "ovl.h" |
5837 | 32 #include "utils.h" |
33 #include "f77-fcn.h" | |
34 | |
5838 | 35 extern "C" |
36 { | |
6242 | 37 F77_RET_T |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
38 F77_FUNC (dpchim, DPCHIM) (const F77_INT& n, const F77_DBLE *x, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
39 const F77_DBLE *f, F77_DBLE *d, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
40 const F77_INT &incfd, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
41 F77_INT *ierr); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
42 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
43 F77_RET_T |
22133
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
44 F77_FUNC (pchim, PCHIM) (const F77_INT& n, const F77_REAL *x, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
45 const F77_REAL *f, F77_REAL *d, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
46 const F77_INT& incfd, |
59cadee1c74b
new macros for F77 data types
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
47 F77_INT *ierr); |
5837 | 48 } |
49 | |
6945 | 50 // Wrapper for SLATEC/PCHIP function DPCHIM to calculate the derivates |
51 // for piecewise polynomials. | |
52 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14846
diff
changeset
|
53 DEFUN (__pchip_deriv__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
54 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
55 @deftypefn {} {} __pchip_deriv__ (@var{x}, @var{y}, @var{dim}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
56 Undocumented internal function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
57 @end deftypefn */) |
5837 | 58 { |
59 octave_value retval; | |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
60 int nargin = args.length (); |
5837 | 61 |
18112
b560bac0fca2
maint: Don't use space between 'args' and '(' when doing indexing.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
62 bool rows = (nargin == 3 && args(2).uint_value () == 2); |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
63 |
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
64 if (nargin >= 2) |
5837 | 65 { |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
66 if (args(0).is_single_type () || args(1).is_single_type ()) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
67 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
68 FloatColumnVector xvec (args(0).float_vector_value ()); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
69 FloatMatrix ymat (args(1).float_matrix_value ()); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
70 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19873
diff
changeset
|
71 octave_idx_type nx = xvec.numel (); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
72 |
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
73 if (nx < 2) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
74 error ("__pchip_deriv__: X must be at least of length 2"); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
75 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
76 octave_idx_type nyr = ymat.rows (); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
77 octave_idx_type nyc = ymat.columns (); |
5838 | 78 |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
79 if (nx != (rows ? nyc : nyr)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
80 error ("__pchip_deriv__: X and Y dimension mismatch"); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
81 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
82 FloatMatrix dmat (nyr, nyc); |
5837 | 83 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
84 octave_idx_type ierr; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
85 const octave_idx_type incfd = rows ? nyr : 1; |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
86 volatile const octave_idx_type inc = rows ? 1 : nyr; |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
87 volatile octave_idx_type k = 0; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
88 |
19873
5261186f1b00
__pchip_deriv__.cc: Stop variable might be clobbered by 'longjmp' warning.
Rik <rik@octave.org>
parents:
19787
diff
changeset
|
89 for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
90 { |
18603
e7369c43ebe0
Fix segmentation fault for interp2 and pchip method (bug #41838).
Stefan Mahr <dac922@gmx.de>
parents:
17787
diff
changeset
|
91 F77_XFCN (pchim, PCHIM, (nx, xvec.data (), |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
92 ymat.data () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
93 dmat.fortran_vec () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
94 incfd, &ierr)); |
5837 | 95 |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
96 k++; |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
97 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
98 if (ierr < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
99 error ("__pchip_deriv__: PCHIM failed with ierr = %i", ierr); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
100 } |
5837 | 101 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
102 retval = dmat; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
103 } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
104 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
105 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
106 ColumnVector xvec (args(0).vector_value ()); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
107 Matrix ymat (args(1).matrix_value ()); |
5837 | 108 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
19873
diff
changeset
|
109 octave_idx_type nx = xvec.numel (); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
110 |
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
111 if (nx < 2) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
112 error ("__pchip_deriv__: X must be at least of length 2"); |
14462
af552038cc52
Fix segfault in pchip when input array is too small (bug #35835).
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
14138
diff
changeset
|
113 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
114 octave_idx_type nyr = ymat.rows (); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
115 octave_idx_type nyc = ymat.columns (); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
116 |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
117 if (nx != (rows ? nyc : nyr)) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
118 error ("__pchip_deriv__: X and Y dimension mismatch"); |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
119 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
120 Matrix dmat (nyr, nyc); |
5837 | 121 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
122 octave_idx_type ierr; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
123 const octave_idx_type incfd = rows ? nyr : 1; |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
124 volatile const octave_idx_type inc = rows ? 1 : nyr; |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
125 volatile octave_idx_type k = 0; |
8712
010e15c7be9a
support pchip method in interp2
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
126 |
19873
5261186f1b00
__pchip_deriv__.cc: Stop variable might be clobbered by 'longjmp' warning.
Rik <rik@octave.org>
parents:
19787
diff
changeset
|
127 for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
128 { |
18603
e7369c43ebe0
Fix segmentation fault for interp2 and pchip method (bug #41838).
Stefan Mahr <dac922@gmx.de>
parents:
17787
diff
changeset
|
129 F77_XFCN (dpchim, DPCHIM, (nx, xvec.data (), |
19787
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
130 ymat.data () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
131 dmat.fortran_vec () + k * inc, |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
132 incfd, &ierr)); |
4ae2987c5f66
avoid variable possibly clobbered by longjmp warning from GCC
John W. Eaton <jwe@octave.org>
parents:
19780
diff
changeset
|
133 k++; |
5838 | 134 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
135 if (ierr < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
136 error ("__pchip_deriv__: DPCHIM failed with ierr = %i", ierr); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
137 } |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
138 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
139 retval = dmat; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
8713
diff
changeset
|
140 } |
5837 | 141 } |
142 | |
143 return retval; | |
144 } | |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
145 |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
146 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
147 ## No test needed for internal helper function. |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
148 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
149 */ |