Code:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
float*** ivp(float***,int,int,int,float);
float*** bvp(float***,int,int,int,float);
float*** solve(float***,int,int,int,float,float);
void print_box(float***,int,int,int);
void print(float***,int,int,int);
void main()
{
float alph,h,l,***grid,***a;
int i,j,n,p,q,r,tot_len_x,tot_len_y,count=0;
printf("Enter the value of h\n");
scanf("%f",&h);
printf("Enter the value of alpha\n");
scanf("%f",&alph);
printf("Enter the length of the plate\n");
scanf("%f",&tot_len_x);
printf("Enter the width of the plate\n");
scanf("%f",&tot_len_y);
i=(int)((tot_len_x/h)+0.5);
j=(int)((tot_len_y/h)+0.5);
i=4;
j=4;
printf("Enter number of time steps\n");
scanf("%d",&n);
// printf("*****");
// printf("aaaaa");
grid=(float ***)malloc((n+1)*sizeof(float**));
for(p=0;p<=n;p++)
{
grid[p]=(float **)malloc((i+1)*sizeof(float*));
}
// printf("aaaab");
for(p=0;p<=n;p++)
{
for(q=0;q<=i;q++)
{
grid[p][q]=(float *)malloc((j+1)*sizeof(float));
}
count=count+q;
}
printf("%d",count);
// printf("aaaaaaa");
a=ivp(grid,n,j,i,h);
// printf("%f",a[0][0][0]);
print(a,n,j,i);
grid=bvp(a,n,j,i,h);
grid=solve(grid,n,j,i,h,alph);
print_box(grid,n,j,i);
fflush(stdin);
getchar();
}
float*** ivp(float ***a,int n, int j, int i,float h)
{
int p,q,r;
float pi;
pi=4.0*atan(1.0);
//printf("Entering ivp");
for(p=0;p<=n;p++)
{
for(q=0;q<=i;q++)
{
for(r=0;r<=j;r++)
{
if(p==0)
{
a[p][q][r]= sin(2*pi*q*h)*sin(2*pi*r*h);
printf("%f",sin(2*pi*q*h)*sin(2*pi*r*h));
}
}
}
}
// printf("Exiting ivp");
}
float*** bvp(float ***a,int n, int j, int i,float h)
{
int p,q,r;
// printf("Entering bvp");
for(p=0;p<=n;p++)
{
for(q=0;q<=i;q++)
{
for(r=0;r<=j;r++)
{
if(p>0)
{
if(q==i||r==j)
{
a[p][q][r]=0;
}
if(q==0||r==0)
{
a[p][q][r]=0;
}
}
}
}
}
// printf("Exiting bvp");
}
float*** solve(float ***a,int n,int j,int i,float h,float alph)
{
int p,q,r;
// printf("entering solve");
for(p=0;p<=n;p++)
{
for(q=0;q<=i;q++)
{
for(r=0;r<=j;r++)
{
if(p>0)
{
if(q>0&&r>0&&q<i&&r<j)
{
a[p][q][r]=(1-4*alph)*a[p-1][q][r]+alph*(a[p-1][q-1][r]+a[p-1][q+1][r]+a[p-1][q][r-1]+a[p-1][q][r+1]);
}
}
}
}
}
// printf("Exiting solve");
}
void print_box(float ***a ,int n,int j,int i)
{
int p,q,r;
for(p=0;p<=n;p++)
{
printf(" ===========\n");
printf(" ||time=%d||\n",p);
printf("======================================\n\n\n");
for(q=i;q>=0;q--)
{
for(r=j;r>=0;r--)
{
printf("\t%f",a[p][q][r]);
}
printf("\n");
}
printf("======================================\n\n\n");
}
}
void print(float ***a,int n,int j,int i)
{
// printf("%f",a[0][0][0]);
int p,q,r;
for(p=0;p<=n;p++)
{
for(q=0;q<=i;q++)
{
for(r=0;r<=j;r++)
{
printf("U(%d,%d,%d) = %f",q,r,p,a[p][q][r]);
}
}
}
}