Re: help

bykova-l

ктонит помоги мне узнать почему такая программа не работает ( linux) ( killed когда я запустил ./a.out )
./a.out )

#include <stdio.h>
#include <math.h>
//#include <conio.h>
//==��������������===============================
// dE/dt= d2E/dx^2 , E(t,x=0)= exp( -t^2/ )
void setinit;
void count;
void tab;
FILE *f;
FILE *f1 ;
FILE *f2 ;
FILE *f3;
//==���======================================================
double xmin = 0;
double xmax = 1;
double ymin = 0;
double ymax = 1;
double tmin = 0;
double tmax;
double eps = 1;
double muy = 1;
//==��� ������ ��====================================
int Nx = 500;
int Ny = 500;
int Nt = 1000;
double dt = 0.1;
double dx;
double dy;
double E_x[501][501][1001];
double E_y[501][501][1001];
double H_z[501][501][1001];
//===============================================================
int main
{
setinit;
count;
tab;
return 0;
}
//===============================================================
void setinit
{
int i, j,k;

dx= (xmax - xmin)/Nx;
dy = (ymax - ymin)/Ny;

tmax = tmin+Nt*dt;

for (i=0; i<=Nx; i++)
{
for (j=0; j<=Nx;j++)
{
for (k=0; k<=Nt; k++)
{
E_x[i][j][k] = 0;
E_y[i][j][k] = 0;
H_z[i][j][k] = 0 ;
}
}
}

for (k=0;k<=Nt; k++)
{
E_x[0][0][k]= exp(-k*dt*k*dt);
}


// for (s=0;s<=Nt;s++) matrix[0][s]= exp(-s*s*dt*dt); // dieu kien bien
// ddieu kien ban dau tao con chua biet dat no la gi
}
//===============================================================
void count
{
int i, j,k;
for (k = 0; k < Nt; k++)
{
for (i = 1; i<Nx ; i++)
{
for (j=1; j<Ny; j++)
{
E_x[i][j][k+1]= E_x[i][j][k] + dt/(2*eps*dy) * (H_z[i][j+1][k] - H_z[i][j-1][k] );

E_y[i][j][k+1]= E_y[i][j][k] - dt/(2*eps*dx) * ( H_z[i+1][j][k] - H_z[i-1][j][k] );

H_z[i][j][k+1]= H_z[i][j][k] + dt/(2*muy) * ( (E_x[i][j+1][k]-E_x[i][j-1][k])/dy - ( E_y[i+1][j][k]-E_y[i][j][k] )/dx ) ;
}
}
}
}
//===============================================================
void tab
{
int i,j,k ;
f1 = fopen("Ex.txt", "w");
f2 = fopen("Ey.txt", "w");
f3 = fopen("Hz.txt", "w");
for (k=Nt; k>=0; k--)
{
// fprintf (f, "t=%1.3lf\n", tmin+s*dt); //�������
for (i=0; i<=Nx; i ++)
{
for (j=0;j<=Ny;j++)
{
fprintf(f1, " %1.5lf\t", E_x[i][j][k]) ;
}
}
fprintf(f1, "\n");
}

for (k=Nt; k>=0; k--)
{
// fprintf (f, "t=%1.3lf\n", tmin+s*dt); //�������
for (i=0; i<=Nx; i ++)
{
for (j=0;j<=Ny;j++)
{
fprintf(f2, " %1.5lf\t", E_y[i][j][k]) ;
}
}
fprintf(f2, "\n");
}

for (k=Nt; k>=0; k--)
{
// fprintf (f, "t=%1.3lf\n", tmin+s*dt); //�������
for (i=0; i<=Nx; i ++)
{
for (j=0;j<=Ny;j++)
{
fprintf(f3, " %1.5lf\t", E_x[i][j][k]) ;
}
}
fprintf(f3, "\n");
}
fclose(f1);
fclose(f2);
fclose(f3);
}
//===============================================================

lipa

Массивы чересчур большие. Юзай динамическую память.
Upd: Хотя не поможет, один такой массив ~2Гб !

SPARTAK3959

И не забудь установить на комп 6Гб памяти, как требуется твоей программе.

lipa

Выход: собственный своп на харде

kokoc88

Выход: собственный своп на харде
Выход, ИМХО, узнать, чего китайца-заточника хотел написать. И подсказать, как это сделать без таких массивов.

bykova-l

точно
Спасибо

lipa

узнать, чего китайца-заточника хотел написать. И подсказать, как это сделать без таких массивов.
это не круто, настоящей проге всегда должно нехватать памяти - учитесь у винды
по теме: у меня такое чувство, что по времени достаточно двух массивов, а не 1000.

evgen5555

Пошёл ставить, что ли?

disna

я тож так подумал

kruzer25

настоящей проге всегда должно нехватать памяти - учитесь у винды
Это ты к чему?

lipa

Это ты к чему?
Это так, мысли вслух...

kruzer25

Ты считаешь, что винда нерационально использует память?
Интересно, почему ты тогда линукс не упомянул.
Оставить комментарий
Имя или ник:
Комментарий: