1pp_addpm({At=>Top},<<'EOD');
2=head1 NAME
3
4PDL::GSLSF::TRIG - PDL interface to GSL Special Functions
5
6=head1 DESCRIPTION
7
8This is an interface to the Special Function package present in the GNU Scientific Library.
9
10=head1 SYNOPSIS
11
12=cut
13
14
15EOD
16
17# PP interface to GSL
18
19pp_addhdr('
20#include <gsl/gsl_sf.h>
21
22#include "../gslerr.h"
23
24');
25
26pp_def('gsl_sf_sin',
27       GenericTypes => [D],
28       Pars=>'double x(); double [o]y(); double [o]e()',
29       Code =>'
30gsl_sf_result r;
31GSLERR(gsl_sf_sin_e,($x(),&r))
32$y() = r.val;
33$e() = r.err;
34',
35       Doc =>'Sin(x) with GSL semantics.'
36      );
37
38pp_def('gsl_sf_cos',
39       GenericTypes => [D],
40       Pars=>'double x(); double [o]y(); double [o]e()',
41       Code =>'
42gsl_sf_result r;
43GSLERR(gsl_sf_cos_e,($x(),&r))
44$y() = r.val;
45$e() = r.err;
46',
47       Doc =>'Cos(x) with GSL semantics.'
48      );
49
50pp_def('gsl_sf_hypot',
51       GenericTypes => [D],
52       Pars=>'double x(); double xx(); double [o]y(); double [o]e()',
53       Code =>'
54gsl_sf_result r;
55GSLERR(gsl_sf_hypot_e,($x(),$xx(),&r))
56$y() = r.val;
57$e() = r.err;
58',
59       Doc =>'Hypot(x,xx) with GSL semantics.'
60      );
61
62pp_def('gsl_sf_complex_sin',
63       GenericTypes => [D],
64       Pars=>'double zr(); double zi(); double [o]x(); double [o]y(); double [o]xe(); double [o]ye()',
65       Code =>'
66gsl_sf_result r;
67gsl_sf_result ri;
68GSLERR(gsl_sf_complex_sin_e,($zr(),$zi(),&r,&ri))
69$x() = r.val;
70$xe() = r.err;
71$y() = ri.val;
72$ye() = ri.err;
73',
74       Doc =>'Sin(z) for complex z'
75      );
76
77pp_def('gsl_sf_complex_cos',
78       GenericTypes => [D],
79       Pars=>'double zr(); double zi(); double [o]x(); double [o]y(); double [o]xe(); double [o]ye()',
80       Code =>'
81gsl_sf_result r;
82gsl_sf_result ri;
83GSLERR(gsl_sf_complex_cos_e,($zr(),$zi(),&r,&ri))
84$x() = r.val;
85$xe() = r.err;
86$y() = ri.val;
87$ye() = ri.err;
88',
89       Doc =>'Cos(z) for complex z'
90      );
91
92pp_def('gsl_sf_complex_logsin',
93       GenericTypes => [D],
94       Pars=>'double zr(); double zi(); double [o]x(); double [o]y(); double [o]xe(); double [o]ye()',
95       Code =>'
96gsl_sf_result r;
97gsl_sf_result ri;
98GSLERR(gsl_sf_complex_logsin_e,($zr(),$zi(),&r,&ri))
99$x() = r.val;
100$xe() = r.err;
101$y() = ri.val;
102$ye() = ri.err;
103',
104       Doc =>'Log(Sin(z)) for complex z'
105      );
106
107pp_def('gsl_sf_lnsinh',
108       GenericTypes => [D],
109       Pars=>'double x(); double [o]y(); double [o]e()',
110       Code =>'
111gsl_sf_result r;
112GSLERR(gsl_sf_lnsinh_e,($x(),&r))
113$y() = r.val;
114$e() = r.err;
115',
116       Doc =>'Log(Sinh(x)) with GSL semantics.'
117      );
118
119pp_def('gsl_sf_lncosh',
120       GenericTypes => [D],
121       Pars=>'double x(); double [o]y(); double [o]e()',
122       Code =>'
123gsl_sf_result r;
124GSLERR(gsl_sf_lncosh_e,($x(),&r))
125$y() = r.val;
126$e() = r.err;
127',
128       Doc =>'Log(Cos(x)) with GSL semantics.'
129      );
130
131pp_def('gsl_sf_polar_to_rect',
132       GenericTypes => [D],
133       Pars=>'double r(); double t(); double [o]x(); double [o]y(); double [o]xe(); double [o]ye()',
134       Code =>'
135gsl_sf_result r;
136gsl_sf_result ri;
137GSLERR(gsl_sf_polar_to_rect,($r(),$t(),&r,&ri))
138$x() = r.val;
139$xe() = r.err;
140$y() = ri.val;
141$ye() = ri.err;
142',
143       Doc =>'Convert polar to rectlinear coordinates.'
144      );
145
146pp_def('gsl_sf_rect_to_polar',
147       GenericTypes => [D],
148       Pars=>'double x(); double y(); double [o]r(); double [o]t(); double [o]re(); double [o]te()',
149       Code =>'
150gsl_sf_result r;
151gsl_sf_result ri;
152GSLERR(gsl_sf_rect_to_polar,($x(),$y(),&r,&ri))
153$r() = r.val;
154$re() = r.err;
155$t() = ri.val;
156$te() = ri.err;
157',
158       Doc =>'Convert rectlinear to polar coordinates. return argument in range [-pi, pi].'
159      );
160
161pp_def('gsl_sf_angle_restrict_symm',
162       GenericTypes => [D],
163       Pars=>'double [o]y();',
164       Code =>'
165GSLERR(gsl_sf_angle_restrict_symm_e,($P(y)))
166',
167       Doc =>'Force an angle to lie in the range (-pi,pi].'
168      );
169
170pp_def('gsl_sf_angle_restrict_pos',
171       GenericTypes => [D],
172       Pars=>'double [o]y();',
173       Code =>'
174GSLERR(gsl_sf_angle_restrict_pos_e,($P(y)))
175',
176       Doc =>'Force an angle to lie in the range [0,2 pi).'
177      );
178
179pp_def('gsl_sf_sin_err',
180       GenericTypes => [D],
181       Pars=>'double x(); double dx(); double [o]y(); double [o]e()',
182       Code =>'
183gsl_sf_result r;
184GSLERR(gsl_sf_sin_err_e,($x(),$dx(),&r))
185$y() = r.val;
186$e() = r.err;
187',
188       Doc =>'Sin(x) for quantity with an associated error.'
189      );
190
191pp_def('gsl_sf_cos_err',
192       GenericTypes => [D],
193       Pars=>'double x(); double dx(); double [o]y(); double [o]e()',
194       Code =>'
195gsl_sf_result r;
196GSLERR(gsl_sf_cos_err_e,($x(),$dx(),&r))
197$y() = r.val;
198$e() = r.err;
199',
200       Doc =>'Cos(x) for quantity with an associated error.'
201      );
202
203
204pp_addpm({At=>Bot},<<'EOD');
205=head1 AUTHOR
206
207This file copyright (C) 1999 Christian Pellegrin <chri@infis.univ.trieste.it>
208All rights reserved. There
209is no warranty. You are allowed to redistribute this software /
210documentation under certain conditions. For details, see the file
211COPYING in the PDL distribution. If this file is separated from the
212PDL distribution, the copyright notice should be included in the file.
213
214The GSL SF modules were written by G. Jungman.
215
216=cut
217
218
219EOD
220
221pp_add_boot('gsl_set_error_handler_off();
222');
223
224
225pp_done();
226