Метод магнитостатики конечных элементов на треугольниках, страница 7

my->gg=(double*)calloc(ig[n]-1,sizeof(double));

for(i=0;i<ig[n]-1;i++)

my->jg[i]=jg[i];

printf("SST:");

//Перебор по строкам

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

{

//clrscr();

gotoxy(10,1);

printf("%5d%",(i+1)*100/n);

//Вычисление остальных эл-тов

for(k=ig[i]-1;k<ig[i+1]-1;k++)

{

sum=0;

j=jg[k]-1;

//Теперь необходимо Строку i умножить на строку j (j<i)

if(j>i) printf("ERROR IN MATRIX\n");

for(ll=ig[j]-1,kk=ig[i]-1;ll<ig[j+1]-1&&kk<ig[i+1]-1;)

{

if(jg[ll]==jg[kk])

{sum+=my->gg[ll]*my->gg[kk];ll++;kk++;}

else

if(jg[ll]>jg[kk]) kk++;

else ll++;

}

my->gg[k]=(gg[k]-sum)/my->d[j];

}

sum=0;

//Вычисление диагонального эл-та i

for(k=ig[i]-1;k<ig[i+1]-1;k++)

sum+=my->gg[k]*my->gg[k];

my->d[i]=sqrt(fabs(d[i]-sum));

}

printf("\n");

}

//-----------------------------------------------------void generate_slau(SLAU *my)

{

FILE *f=fopen("file\\test","r");

fscanf(f,"%d",&my->n);

my->d=(double*)calloc(my->n,sizeof(double));

for(long i=0;i<my->n;i++)

fscanf(f,"%lf",&my->d[i]);

my->ig=(long*)calloc(my->n+1,sizeof(long));

for(long i=0;i<=my->n;i++)

fscanf(f,"%d",&my->ig[i]);

my->jg=(long*)calloc(my->ig[my->n]-1,sizeof(long));

my->gg=(double*)calloc(my->ig[my->n]-1,sizeof(double));

for(long i=0;i<my->ig[my->n]-1;i++)

fscanf(f,"%d",&my->jg[i]);

for(long i=0;i<my->ig[my->n]-1;i++)

fscanf(f,"%lf",&my->gg[i]);

VECTOR temp(my->n);

for(long i=0;i<my->n;i++)

fscanf(f,"%lf",&temp.vect[i]);

my->f=temp;

my->x.call_memory(my->n);

fclose(f);

}

//-------------------------------------void generate_slau2(SLAU *my)

{

FILE *f=fopen("d:\\test\\kuslau","r");

fscanf(f,"%d",&my->n);

fclose(f);

f=fopen("d:\\test\\di","r");

my->d=(double*)calloc(my->n,sizeof(double));

for(long i=0;i<my->n;i++)

fscanf(f,"%lf",&my->d[i]);

fclose(f);

f=fopen("d:\\test\\ig","r");

my->ig=(long*)calloc(my->n+1,sizeof(long));

for(long i=0;i<=my->n;i++)

fscanf(f,"%d",&my->ig[i]);

fclose(f);

my->jg=(long*)calloc(my->ig[my->n]-1,sizeof(long));

my->gg=(double*)calloc(my->ig[my->n]-1,sizeof(double));

f=fopen("d:\\test\\jg","r");

for(long i=0;i<my->ig[my->n]-1;i++)

fscanf(f,"%d",&my->jg[i]);

fclose(f);

f=fopen("d:\\test\\gg","r");

for(long i=0;i<my->ig[my->n]-1;i++)

fscanf(f,"%lf",&my->gg[i]);

fclose(f);

f=fopen("d:\\test\\pr","r");

VECTOR temp(my->n);

for(long i=0;i<my->n;i++)

fscanf(f,"%lf",&temp.vect[i]);

my->f=temp;

my->x.call_memory(my->n);

fclose(f);

}

//------------------------------------void test_ig_jg(SLAU my)

{

int des=open("d:\\test_ig_jg\\ig.2d",O_BINARY|O_RDONLY);

long tmp;

int flag=1;

for(long i=0;i<=my.n&&flag;i++)

{

read(des,&tmp,sizeof(long));

if(tmp!=my.ig[i]) flag=0;

}

read(des,&tmp,sizeof(long));

if(!flag) printf("ERROR IG");

close(des);

flag=1;

des=open("d:\\test_ig_jg\\jg.2d",O_BINARY|O_RDONLY);

for(long i=0;i<my.ig[my.n]-1&&flag;i++)

{

read(des,&tmp,sizeof(long));

if(tmp!=my.jg[i]) flag=0;

}

if(!flag) printf("ERROR JG");

//read(des,&tmp,sizeof(long));

//read(des,&tmp,sizeof(long));

//read(des,&tmp,sizeof(long));

close(des);

}


Изолинии для линейной задачи.

Изолинии для нелинейной задачи.

Telma

Лаб2

Линейная

0.0367286

0.117296

0.0546606

0.0604298

0.028071

0.0341835

0.0367286

0.117296

0.0546606

0.0604298

0.028071

0.0485489

Telma

Лаб2

Не Линейная

0.0367751

0.116999

0.0547206

0.0589276

0.0280942

0.034213

0.0365468

0.115487

0.0543574

0.0585488

0.0267882

0.095645