Алгоритм компактного хранения и решения СЛАУ высокого порядка — страница 8
структуру матриц жесткости, возникающих при применении метода конечных элементов (МКЭ), как правило, не применимы при решении контактных задач, так как при их решении матрицы жесткости нескольких тел объединяются в одну общую матрицу, ширина ленты которой может стремиться к порядку системы. Предложенная в работе методика компактного хранения матриц коэффициентов СЛАУ и использования метода Ланцоша позволили на примере решения контактных задач добиться существенной экономии процессорного времени и затрат оперативной памяти. СПИСОК ССЫЛОК. 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;
Похожие работы
- Доклады
- Рефераты
- Рефераты
- Рефераты
- Контрольные