Skip to main content

BIO-SAVART LAW


/*A C code that returns the magnetic field at a mesh of points
*on the xy-plane (xp,yp) for a straight wire segment through which
*current passes. The total magnetic field used in this code
*has the form (cos(theta1)-cos(theha2))/(yp*r_mag)
*ignoring the constants permeability, pi and current I and
*taking them together as 1. Thus no need for trapezoid since
*the integral of Bio-Savart can be tractable!!!
*r_mag represents the distance between the dl segment and
*the point (xp,yp) where we will find the B*/
#include <stdio.h>
#include <math.h>
/*Global constant*/
#define L 3.0 /* length of the wire*/
double r_mag(double x, double xp, double yp) {
double rx;
rx=xp-x; /* x is any point on xprime*/
return sqrt(rx*rx+yp*yp);
}
main()
{ int i;
double xp,yp;
double B; /*the z component of mag-field that is total field.*/
FILE *fid;
fid=fopen("mag-field","w");
/*loop over xp and yp values*/
for (yp=-2.0;yp<=2.0;yp=yp+0.1)
for (xp=-1.5;xp<=1.5;xp=xp+0.1)
{ /* Form the function B*/
B=2*(xp-L/2)/(yp*r_mag(L/2,xp,yp));
fprintf(fid,"%10.6lf %10.6lf %10.6lf\n",xp,yp,B);
}
fclose(fid);
}

Comments

Popular posts from this blog

FACTORIAL

## Function that calculates the factorial of a number ## Usage : f=factorial(n) function f=factorial(n) ## Initialize the output f=1; ## Check whether the input is correct if ( (n<0) || (rem(n,1)~=0) ) printf("n cannot be a negative number. Exiting...\n"); return endif for num=1:n f*=num; endfor endfunction

Simple Euler Method

##Usage:Call Octave from terminal ##and then call EulerMethodUmitAlkus.m ##from octave and finally ##press enter. That's all. ##Simple Euler Method ##Constants and initializations x=[]; ## initial empty vector for x y=[]; ## initial empty vector for y x(1)=1; ## initial value of x y(1)=1; ## initial value of y h=1E-3; ## increment in x dery=[]; ## 1st derivative of y wrt x n=1; ## inital loop index for while ## enter the while loop for the interval x=[1,2] while (x(n)<=2) x(n+1)=x(n)+h; dery(n+1)=x(n)*x(n)-2*y(n)/x(n); ##given y(n+1)=y(n)+h*dery(n); ##Euler method n++; endwhile ##exit from the 1st while loop ##Modified Euler Method ##Constant and initializations ymid=[]; ## empty vector function evaluated at x midpoint xmid=[]; ## empty vector func. of midpoints in x ymid(1)=1; ## inital value for ymid. derymid=[]; ## derivative of y at midpoints ##Enter the 2nd while loop n=1; while (x(n)<=2) xmid(n)=x(n)+h/2; derymid(n)=xmid(n)*xmid(n)-2*ymid(...

REALISTIC AND NON-REALISTIC STRINGS

## A 'realistic', 'non-elastic' string, which responses to any ## bending and has stifness. This script takes in the previous ## and the present profiles and iterates to find ## the profile in the next time step. The ratio 'r' is not 1 ## like in the 'non-realistic' string since the speed of the wave ## always less than the speed of the string it should be less than 1 ## for best and most stable solution ##constants dx=1e-2 ## Spatial increment (m) L=2 ## Length of the string (m) M=L/dx ## Dimensionless partition E=1e-4 ## Dimensionless stiffnes function ynext=propagate_stiff(ynow,yprev,r) ## Quick and dirty way to fix boundary conditions -- for each step ## they are the same as the previous step. ynext=ynow; ynow(1)=ynow(2)=0; ##Entering the loop for i=3:length(ynow)-1 ## boundary condition ynow(length(ynow)-1)=ynow(length(ynow)-2)=0; ## Divide the ynext with many terms into three parts for easiness ynext(i)=(2−(2*r^2)−(6*E*(r^2)*...