Code Monkey home page Code Monkey logo

biotsavartsolver's Introduction

BiotSavartSolver

A Simple Biot Savart Solver in Python

Requirements:

  • Python 2.7 or higher
  • numpy
  • scipy
  • matplotlib

Some theory

According to the Biot Savart Law, a field generated by an arbitrarily shaped wire described by the curve equation carrying a complex current I at the point described by the displacement vector equation in the vacuum is:

equation

So an infinitesimal contribute by the infinitesimal piece of wire equation will be:

equation

Now we want to discretize this integral to make it computer-solvable, so we approximate equation with equation:

equation

where the displacement vector equation now is simply calculated from the center coordinates of equation, which is a discretized segment of the original wire, short enough to apply these approximations.

Now we calculate equation simply by adding together each contribute from each discretized piece of wire, that is:

equation

Where the wire equation is supposed to be discretized in N pieces. More advanced discretization techniques could be used, such as the Simpson’s rule, but for our purposes this kind of approach will suffice.

The code:

Here a brief description of the source files (i.e. *.py files).

  • myShapes.py contains the Wire class, that implements a simple wire with some useful presets. This class has a property “coordz” that is a List formed by N+1 1×3 numpy.array representing the vertices of N segments of the wire, and a property I that is the complex current carried by the wire. You can define your own wires, although you can initialize it as a solenoid, loop, toroidal solenoid or segmented wire. Examples of these operations can be found in “Test_Shapes.py”
  • Test_Shapes.py: examples on how to use the wire class and plotting of the results
  • Discretizer.py: dicretizes a wire uniformly at a custom length. Examples on how to use this class can be found in “Test_Discretize.py”
  • Test_Discretize.py examples on how to use the Discretizer class
  • Biot_Savart.py: the core solver, it implements a solver as described above. Given a wire, the discretization length and the points on which perform the evaluation it returns the complex vector field B and can return also the absolute value of the norm of B.
  • Files named after “Test_Biot_Savart_*.py” will be showed in the next section

Validation

I validated my solver confronting its results against theoretical results given in literature:

  • Test_Biot_Savart_wire.py solves the B field given a long wire toward the z-axis on some points on the center of the wire toward the y-axis
  • Test_Biot_Savart_solenoid.py solves the B field given a solenoid on some points in the center axis of it
  • Test_Biot_Savart_toroidal_solenoid.py solves the B field on the center axis of a toroidal solenoid

Here some images of the wires:

Toroid

Solenoid

Loop

Since quiver3D seems not to be implemented in matplotlib3D I haven’t added it yet in the scripts. So I simply plotted the absolute value of the norm of B against distance for the wire and the loop, and calculated the RMSE for every test. Now the 4 cases described;

For a straight long wire carrying a current I at a distance r from the wire the B field will have only one component on the azimuth i.e.:

equation

So, running Test_Biot_Savart_loop.py we will see the plot Below:

Loop

and on the console we will see:

RMSE: 2.43426286502e-10

Analytical B (mean): 5.85793650794e-08 Tesla

Thus the Root Mean Squared Error is very small compared to the average B.

For a Circular loop of radius R carrying current I (loop in yz plane, at distance x along x-axis) we have:

equation

So, running Test_Biot_Savart_loop.py we will see the plot Below:

Loop

and on the console we will see:

RMSE: 9.49980867342e-12

Analytical B (mean): 2.56313225429e-08 Tesla

Thus the Root Mean Squared Error is very small compared to the average B.

For a Solenoid with N turns and length l carrying current I (inside) B is constant and directed along the central axis:

equation

and running Test_Biot_Savart_Solenoid.py we will see:

RMSE: 6.97877827573e-05

Analytical B: 0.000125663706144 Tesla

Thus the Root Mean Squared Error is very small compared to B.

For a Torus with N turns and radius r carrying current I (inside) B is constant and directed along the central axis:

equation

and running Test_Biot_Savart_Toroidal_Solenoid.py we will see:

RMSE: 1.81013590516e-09

Analytical B: 2e-06 Tesla

Thus the Root Mean Squared Error is very small compared to B.

biotsavartsolver's People

Contributors

segmentation-fault avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.