Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - DGoz

#1
Programación C/C++ / Problema codigo en C
23 Febrero 2015, 02:16 AM
Hola a todos.

Soy nuevo programando y estoy tratando de desarrollar una herramienta para resolver una EDP hiperbólica. El caso es que me compila, pero al correr me da un error y se queda colgada. Dejo aquí el código.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("********************************\n");
printf("********************************\n");
printf("*                              *\n");
printf("*           LW Solver          *\n");
printf("*                              *\n");
printf("********************************\n");

printf("This program solves the hyperbolic EDP of a bar vibration\n");
printf("The dimensions of the bar are L=1 m, D= 0,3 m. The material of the\n");
printf("bar is steel, with E=200 GPa and rho=7850 kg/m^3. dx=0.05 m\n");
printf("dt=0.05 s. The solution will be write in a .dat file\n\n");

/* Variables */

int i,j;
double u[20][20];

FILE *fp;

/* Escritura del fichero solucion */
fp = fopen("Solution_LW-Solver_005.dat","w");

/*----------------------------------------------------------------------------*/

fprintf(fp,"********************************\n");
fprintf(fp,"********************************\n");
fprintf(fp,"*                              *\n");
fprintf(fp,"*           LW Solver          *\n");
fprintf(fp,"*                              *\n");
fprintf(fp,"********************************\n");

fprintf(fp,"This program solves the hyperbolic EDP of a bar vibration\n");
fprintf(fp,"The dimensions of the bar are L=1 m, D= 0,3 m. The material of\n");
fprintf(fp,"bar is steel, with E=200 GPa and rho=7850 kg/m^3. dx=0.05 m,\n");
fprintf(fp,"dt=0.05 s.\n\n");


/*----------------------------------------------------------------------------*/

printf("Solving...\n");
fprintf(fp, "Solution for dt=0.05m\n\n");
fprintf(fp,"*************************************************************\n\n");
fprintf(fp,"Calculated values are:\n\n");
/* Condiciones de contorno e iniciales */

/* Condicion de desplazamiento nulo en el origen */
for (j=0; j<=20; j++) {
   u[0][j]=0;
}
printf("\n\n1....");
/* Condicion de desplazamiento inicial nulo */
for (i=0; i<=20; i++) {
   u[i][0]=0;
}
printf("\n\n2....");
/* Ecuaciones iniciales */

/* Ecuacion inicial para todos los nodos salvo para el primero y el ultimo */
for (i=1; i <=19; i++) {
   u[i][1]=1;
}
printf("\n\n3....");
/* Ecuacion del nodo del extremo */
u[20][1]=0;
printf("\n\n4....");
/* Resolucion iterativa */
/* Step 1 par; Step 2 impar */

for (j=2; j<=20; j++) {
   if (j%2 == 0)
   {
       for (i=1; i<=19; i++) {
         u[i][j]=0.5*(u[i+1][j-1]+u[i-1][j-1])-0.08*(u[i+1][j-1]-u[i-1][j-1]);
       }
           u[20][j]=u[19][j-1];        
   }
   else if (j%2 !=0)
   {
       for (i=1; i<=19; i++) {
         u[i][j]=u[i][j-2]-0.16*(u[i+1][j-1]-u[i-1][j-1]);
       }
         u[20][j]=u[20][j-2];
   }
}
     
printf("\n\n5....");

for (i=0; i<=20; i++) {
   for (j=0; j<=20; j++) {
       fprintf(fp,"U%d%d= %12.4e C\n", i, j, u[i][j]);
   }
}

printf("\n\nSolved!");

fprintf(fp,"\n\nEND DATA");
fclose(fp);
 
 printf("\n\nPress enter to continue ...");
 getchar();
 return 0;
}


Espero que alguien pueda ayudarme. Asimismo agradecería todo tipo de consejos.

Muchas gracias.

Saludos.