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

friend VECTOR operator*(MATRIX,VECTOR);

friend VECTOR operator*(LOCAL_MATRIX,VECTOR);

void cp_mas(double*,long);

void print_vect();

void print_vect(char*);

double norm();

void call_memory(long);

void ins_el(double,long);

void ins_el_all(double);

void add_el(double,long);

double get_el(long);

};

//------------------------------------------------------class LOCAL_MATRIX

{

public:

double mas[3][3];

void init_c();//Иницализация матрицы масс

void init_b_loc(field,long);//Иницализация матрицы жёсткости

LOCAL_MATRIX operator+(LOCAL_MATRIX);

LOCAL_MATRIX operator=(LOCAL_MATRIX);

friend LOCAL_MATRIX operator*(double,LOCAL_MATRIX);

friend VECTOR operator*(LOCAL_MATRIX,VECTOR);

};

//-----------------------------------------------------class MATRIX

{

public:

long n;

double *d;

double *gg;

long *ig;

long *jg;

void formier_profil(field);

void add(long,long,double); // добавление [i][j] эл-та

void SST(MATRIX*);

void mul_matrix_vector(double *vect,double *res);

VECTOR solution_x(VECTOR);

VECTOR solution_x_l(VECTOR);

VECTOR solution_x_u(VECTOR);

friend VECTOR operator*(MATRIX,VECTOR);

MATRIX();

MATRIX(const MATRIX&);

~MATRIX();

};

//-----------------------------------------------------class SLAU :public MATRIX

{

public:

VECTOR x;

VECTOR f;

void MSG();

void MSG2();

void BCG();

void LOS();

void LOS2();

void formier_slau(field);

void add_loc_in_global(LOCAL_MATRIX,VECTOR,loc);

};

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

void generate_slau2(SLAU*);

void test_ig_jg(SLAU);

//--------------------------------------------------------------#endif


Файл myclass.cpp


//--------------------------------------------------------------#include <alloc.h>

#include <io.h>

#include <fcntl.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#pragma hdrstop

#include "myclass.h"

#include "const.h"

//------------function of  field-------------------void field::read_data()

{

FILE *f=fopen(FILE_INF2TR,"r");

fscanf(f,"%d",&m_knot.n);

m_knot.mas=(knot*)calloc(m_knot.n,sizeof(knot));

fscanf(f,"%d",&m_loc.n);

m_loc.mas=(loc*)calloc(m_loc.n,sizeof(loc));

fscanf(f,"%d",&m_mat.n);

m_mat.mas=(mat*)calloc(m_mat.n,sizeof(mat));

fscanf(f,"%d",&m_kt1.n);

m_kt1.mas=(kt1*)calloc(m_kt1.n,sizeof(kt1));

fclose(f);

//Считывание узлов

int des=open(FILE_XY,O_RDONLY|O_BINARY);

for(long i=0;i<m_knot.n;i++)

{

read(des,&m_knot.mas[i].x,sizeof(double));

read(des,&m_knot.mas[i].y,sizeof(double));

}

close(des);

//Считывание номеров узлов локальных областей

des=open(FILE_NVTR,O_RDONLY|O_BINARY);

for(long i=0;i<m_loc.n;i++)

{

for(long j=0;j<3;j++)

read(des,&m_loc.mas[i].num_knot[j],sizeof(long));

read(des,&m_loc.mas[i].num_mat,sizeof(long));

//Под вопросом: упорядочены ли узлы? НЕТ!!!

long temp;

for(long k=0;k<3;k++)

for(long l=k+1;l<3;l++)

if(m_loc.mas[i].num_knot[k]>m_loc.mas[i].num_knot[l])

{

temp=m_loc.mas[i].num_knot[k];

m_loc.mas[i].num_knot[k]=m_loc.mas[i].num_knot[l];

m_loc.mas[i].num_knot[l]=temp;

}

}

close(des);

//Считывание 1-х краевых условий

des=open(FILE_KT1,O_RDONLY|O_BINARY);

for(long i=0;i<m_kt1.n;i++)

{

read(des,&m_kt1.mas[i].num,sizeof(long));

//read(des,&m_kt1.mas[i].a,sizeof(long));

}

close(des);

//Считывание материалов

f=fopen(FILE_MU,"r");

FILE *f1=fopen(FILE_TOKU,"r");

int n;

for(long i=0;i<m_mat.n;i++)

{

fscanf(f,"%d",&m_mat.mas[i].num);

fscanf(f,"%lf",&m_mat.mas[i].mu);

char c;

do{

fscanf(f,"%c",&c);

}while(c!='\n'&&!feof(f1));

fscanf(f1,"%d",&n);

if(n!=m_mat.mas[i].num) printf("ERR IN MATERIAL\n");

fscanf(f1,"%lf",&m_mat.mas[i].toku);

do{

fscanf(f1,"%c",&c);

}while(c!='\n'&&!feof(f1));

}

fclose(f);

fclose(f1);

}

//-------------------------------------------double field::mes(long i)

{

double x1=m_knot.mas[m_loc.mas[i].num_knot[0]-1].x;

double x2=m_knot.mas[m_loc.mas[i].num_knot[1]-1].x;