validate-bessel.cpp
1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <complex>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "rts/complex.h"
#include "rts/sbessel.h"
#include "compare.h"
typedef float precision;
//typedef std::complex<double> ptype;
typedef rts::complex<precision> ptype;
void cpuValidateBessel()
{
//order
precision v = 5;
precision vm;
//parameter
precision max_z = 5;
int nz = 20;
precision dz = max_z / nz;
//bessel function results (first and second kind)
int S = sizeof(ptype) * (v + 1);
ptype* jv = (ptype*)malloc(S);
ptype* yv = (ptype*)malloc(S);
ptype* hv = (ptype*)malloc(S);
std::cout<<"---------j_v(x)-------------"<<std::endl;
rts::complex<precision> z;
for(int iz = 0; iz < nz; iz++)
{
z = iz * dz;
rts::sbesselj<precision>(v, z, jv);
std::cout<<z.toStr()<<", "<<jv[0].toStr()<<", "<<jv[1].toStr()<<", "<<jv[2].toStr()<<std::endl;
}
std::cout<<"---------y_v(x)-------------"<<std::endl;
for(int iz = 0; iz < nz; iz++)
{
z = iz * dz;
rts::sbessely<precision>(v, z, yv);
std::cout<<z.toStr()<<", "<<yv[0].toStr()<<", "<<yv[1].toStr()<<", "<<yv[2].toStr()<<std::endl;
}
std::cout<<"---------h(1)_v(x)-------------"<<std::endl;
for(int iz = 0; iz < nz; iz++)
{
z = iz * dz;
rts::sbesselh1<precision>(v, z, hv);
std::cout<<z.toStr()<<", "<<hv[0].toStr()<<", "<<hv[1].toStr()<<", "<<hv[2].toStr()<<std::endl;
}
}