Seguinte...
To fazendo um script em C sem intenção de ser um software ou algo pra outros usarem, é simplesmente um cálculo envolvendo vetores e matrizes. A questão é que em determinado momento eu precisei declarar uma matriz T[21][2001], até aí tudo bem. No entanto, quando essa matriz vai ser utilizada numa estrutura de repetição, dá um problema e o programa é fechado. =[
Segue o trecho problemático do código.
- Código: Selecionar tudo
/*Declarando vetores de tempo, temperatura e posicão*/
float t[nnt+1], x[nnx+1], T[nnx+1][nnt+1];
printf("\nmatrizes declaradas\n");
/*Valores iniciais*/
for (i=0 ; i<=nx ; i++)
{
x[i]=i*dx;
T[i][0]=300;
}
/*Iniciando o metodo das diferenças finitas*/
for (j=0 ; j<=nt ; j++)
{
t[j]=j*dt;
fprintf(tempo, "%.5f\n",t[j]);
printf("antes de entrar no loop interno\n");
for(i=0 ; i<=nx ; i++)
{
if(i==0)
{
printf("se i==0\n");
T[i-1][j]=T[i+1][j];/*condicão de contorno em x=0*/
T[i][j+1]=(1-2*r)*T[i][j]+r*(T[i+1][j]+T[i-1][j]);
}
else if(i==nx)
{
T[i+1][j]=-2*dx*(h/k)*(T[i][j]-400)+T[i-1][j]; /*condicão de contorno em x=L*/
T[i][j+1]=(1-2*r)*T[i][j]+r*(T[i+1][j]+T[i-1][j]);
printf("se i==nx\n");
}
else
{
T[i][j+1]=(1-2*r)*T[i][j]+r*(T[i+1][j]+T[i-1][j]);
printf("else\n");
}
fprintf(temperatura, "%.5f ",T[i][j]); /*Escrevendo a temperatura*/
if (j==0)
fprintf(posicao,"%.5f\n", x[i]); /*escrevendo a posição*/
printf("rodou\n");
}
fprintf(temperatura,"\n");
}
}
fprintf(parametros,"Numero de dados de tempo: %d\n Numero de dados de espaço: %d",nnt+1,nnx+1);
Em um trecho anterior as variáveis nnx e nnt recebem seus valores, no caso tá dando problema com nnx e nnt iguais a 20 e 2000, respectivamente. Eu vinha executando o mesmo script anteriormente sem problemas, nesse caso as variáveis nnx e nnt valiam 20 e 200, respectivamente.
Bom, como antes vinha funcionando perfeitamente com um valor de nnt=200, suponho que o que está ocorrendo não esteja relacionado ao script em sí. Alguem pode dar uma luz? to precisando muito fazer isso.
PS.: Esses printf() aí meio sem sentido era só uma forma de eu diagnosticar onde o problema acontecia, nada demais.
