Алгоритм компактного хранения и решения СЛАУ высокого порядка — страница 8

  • Просмотров 7753
  • Скачиваний 512
  • Размер файла 199
    Кб

структуру матриц жесткости, возникающих при применении метода конечных элементов (МКЭ), как правило, не применимы при решении контактных задач, так как при их решении матрицы жесткости нескольких тел объединяются в одну общую матрицу, ширина ленты которой может стремиться к порядку системы. Предложенная в работе методика компактного хранения матриц коэффициентов СЛАУ и использования метода Ланцоша позволили на примере

решения контактных задач добиться существенной экономии процессорного времени и затрат оперативной памяти. СПИСОК ССЫЛОК. 1.     Зенкевич О., Морган К. Конечные методы и аппроксимация // М.: Мир, 1980 2.     Зенкевич О., Метод конечных элементов // М.: Мир., 1975 3.     Стрэнг Г., Фикс Дж. Теория метода конечных элементов // М.: Мир, 1977 4.     Бахвалов Н.С.,Жидков Н.П., Кобельков Г.М. Численные методы // М.: наука, 1987

5.     Воеводин В.В., Кузнецов Ю.А. Матрицы и вычисления // М.:Наука, 1984 6.     Бахвалов Н.С. Численные методы // М.: Наука, 1975 7.     Годунов С.К. Решение систем линейных уравнений // Новосибирск: Наука, 1980 8.     Гоменюк С.И., Толок В.А. Инструментальная система анализа задач механики деформируемого твердого тела // Приднiпровський науковий вiсник – 1997. – №4. 9.     F.G. Gustavson, “Some basic techniques for solving sparse

matrix algorithms”, // editer by D.J. Rose and R.A.Willoughby, Plenum Press, New York, 1972 10.            А.Джордж, Дж. Лиу, Численное решение больших разреженных систем уравнений // Москва, Мир, 1984 11.            D.J. Rose, “A graph theoretic study of the numerical solution of sparse positive definite system of linear equations” // New York, Academic Press, 1972 12.            Мосаковский В.И., Гудрамович В.С., Макеев Е.М., Контактные задачи теории оболочек и стержней

// М.:”Машиностроение”, 1978 ПРИЛОЖЕНИЕ 1 Исходный текст программы, реализующий анализ структуры КЭ-разбиения объекта. #include <math.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <fstream.h> #include "matrix.h" #define BASE3D_4 4 #define BASE3D_8 8 #define BASE3D_10 10 const double Eps = 1.0E-10; DWORD CurrentType = BASE3D_10; void PrintHeader(void) { printf("Command format: AConvert -<switch> <file1.in> <file2.in> <file3.out> [/Options] "); printf("Switch: -t10 - Tetraedr(10) "); printf(" -c8 - Cube(8) "); printf(" -s4 - Shell(4) "); printf(" -s8 -

Shell(8) "); printf("Optins: /8 - convert Tetraedr(10)->8*Tetraedr(4) "); printf(" /6 - convert Cube(8)->6*Tetraedr(4) "); } bool Output(char* fname,Vector<double>& x,Vector<double>& y,Vector<double>& z, Matrix<DWORD>& tr, DWORD n, DWORD NumNewPoints,DWORD ntr,Matrix<DWORD>& Bounds,DWORD CountBn) { char* Label = "NTRout"; int type = CurrentType, type1 = (type==BASE3D_4 || type==BASE3D_10) ? 3 : 4; DWORD NewSize, i, j; ofstream Out; if (type==BASE3D_4) type1 = 3; else if (type==BASE3D_8) type1 = 4; else if (type==BASE3D_10) type1 = 6; Out.open(fname,ios::out | ios:: binary); if (Out.bad()) return true; Out.write((const char*)Label,6 * sizeof(char)); if (Out.fail()) return true;