Você está na página 1de 3

/*

Nome:Tatiane Franco Machado


Arquivo: Exercicio 1 - Lista II
Disciplina : EQE-749

Metodo de volumes finitos aplicada na equacao unidimensional de troca de calor por


difusao com geracao uniforme seguindo o seguinte equacionamento geral:

|3 -1 0 0...0| |T1 | |2T0| | 1 |


|-1 2 -1 0...0| |T2 | | 0 | | 1 |
|0 -1 2 -1...0| |...| | 0 | | 1 |
|0 0 -1 2 ...0| . |...| = | 0 | + (q/k)*dx. | 1 |
|0 0 ... -1| |...| | 0 | | 1 |
|0 0 0 ...-1 3| |TN | |2TF| | 1 |

Foi comparada a solucao numerica com a analica no GNUPLOT

*/

//Incluindo bibliotecas

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

//Iniciando:

int main(int argc, char** argv) {

// Para 3 volumes :

//Declaracao de Variaveis e entrada de dados

int i,j,n;
float dx,Tf,T0,x0,xf;
FILE* VF_3;//ponteiro para abertura de arquivo

printf("Digite as condicoes de contorno iniciais (x0,T0): \n");


scanf("%f",&x0);
scanf("%f",&T0);
printf("Digite as condicoes de contorno finais (xf,Tf): \n");
scanf("%f",&xf);
scanf("%f",&Tf);
printf("Digite o valor do numero de volumes da malha: \n");
scanf("%i",&n);

//Valor do dx:

dx=(xf-x0)/n;

float d[]= {2*T0 + (5*dx*dx),(5*dx*dx),2*Tf + (5*dx*dx)},c[]={-1,-


1,0},b[]={3,2,3},a[]={0,-1,-1},T[3],cl[3],dl[3],x[5],S[5];

//Desenvolvimento

//Abrindo arquivo para gnuplot


if( (VF_3 = fopen("VF_3.dat","w") ) == NULL)
{
printf("Erro na leitura do arquivo!!\n");
printf("Deu ruim...\n");
exit(EXIT_FAILURE);
}

//Metodo de Thomas (Matriz tridiagonal)

for(i=0;i<=2;i++)
{

cl[0] = c[0]/b[0]; //cl=c'


dl[0] = d[0]/b[0]; // dl=d'

if (i!=0)

cl[i] = c[i]/(b[i] - (a[i]*cl[i-1]));


cl[2] = 0;
dl[i] = (d[i]-(a[i]*dl[i-1]))/(b[i]-(a[i]*cl[i-1])) ;

T[2] = dl[2];
T[1]=dl[1] - cl[1]*T[2];
T[0]=dl[0] - cl[0]*T[1];

for (i = 0; i<=2; i++)


{
printf("O valor da solucao T[%d]= %f \n", i, T[i]);

fprintf(VF_3,"Grafico x e T solucao numerica com 3 volumes\n");//imprimindo em


arquivo o titulo
//valor do x:

for (j = 0; j<=4; j++)

x[0] = x0;
x[1] = x0 + (dx/2.0);
x[2] = x[1] + dx;
x[3] = x[2] + dx;
x[4] = xf;
S[0] = T0;
S[1] = T[0];
S[2] = T[1];
S[3] = T[2];
S[4] = Tf;

printf("O valor da posicao x[%d]= %f \n", j, x[j]);


printf("O valor de T[%d] = %f \n", j, S[j]);
fprintf(VF_3, "%5.3f \t %5.3f\n",x[j] ,S[j] ); //imprimindo em arquivo x e T

// fechando o arquivo
fclose(VF_3);

return (EXIT_SUCCESS);

Você também pode gostar