aboutsummaryrefslogtreecommitdiff
path: root/test.cpp
blob: 92c92723deb1dbfa2f27267be7affaa7b962fb28 (plain)
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
#include <cmath>
#include <iostream>
#include "curve.h"
using namespace std;

vec3 integrand(vec3 s, vec3 ds)
{
    cout << "point " << s << "ds = " << ds << endl;

    return ds;
}

vec3 point;

/* dl x r / (|r| ^ 2) */
vec3 dB(vec3 s, vec3 ds)
{
    vec3 r = s - point;

    double r2 = r.magnitudeSquared();

    vec3 rnorm = r / std::sqrt(r2);

    return ds.cross(rnorm) / r2;
}

//Arc loop(vec3(0, 0, 0), vec3(0, 1, 0), vec3(1, 0, 0), M_PI * 2);
//Spiral loop(vec3(0, 0, 0), vec3(0, 1, 0), vec3(1, 0, 0), M_PI * 2 * 10, 1);
LineSegment loop(vec3(0, 0, 0), vec3(10, 0, 0));

/* dump the field (gnuplot format) at z = 0 */
/* requires x0 < x1, y0 < y1 */
void dump_field(double x0, double y0, double z0, double x1, double y1, double z1)
{
    const double delta = .2;

    for(double z = z0; z <= z1; z += delta)
        for(double y = y0; y <= y1; y += delta)
            for(double x = x0; x <= x1; x += delta)
            {
                point = vec3(x, y, z);
                const double U0 = 4e-7 * M_PI;
                const double I = 1;

                vec3 B = loop.integrate(dB, 1e-1) * U0 * I;

                if(B.magnitude() > 1e-8)
                {
                    B=B.normalize() / 10;
                    cout << point[0] << " " << point[1] << " " << point[2] << " ";
                    cout << B[0] << " " << B[1] << " " << B[2] << endl;
                }
            }
}

int main()
{
    //LineSegment wire(vec3(0, -100, 0), vec3(0, 100, 0));

    //std::cout << "length = " << loop.integrate(integrand, 1e-2) << endl;

    //vec3 dx = .01;

    //point = 0;

    //double I = 1;

    //for(int i = 0; i < 1000; i++, point += dx)
    //std::cout << point[0] << " " << U0 / ( 4 * M_PI ) * loop.integrate(dB, 1e-2)[0] << endl;

    dump_field(-1, -1.5, -1.5,
               11, 1.5, 1.5);
}