Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 2
по дисциплине «Компьютерные системы конечно-элементных расчётов»
на тему: «Основы компьютерного моделирования физических и технических систем»
Выполнил: студентка гр. ИТ-31
Принял: преподаватель
Дата сдачи отчета: _____________________
Дата допуска к защите: _____________________
Дата защиты: _____________________
Гомель 2012
Цель: Изучить основы моделирования физических и технических систем
Задание:
Согласно варианта задания (таблица 2) необходимо построить математическую модель указанной физической системы и провести её исследование следующими численными методами: методом конечных разностей, методом граничных элементов и методом конечных элементов. Для решения данной задачи необходимо разработать соответствующее программное обеспечение, которое должно удовлетворять следующим требованиям:
обеспечить ввод исходных данных с помощью GUI;
отобразить в виде графиков (двумерного и трёхмерного) результаты решения;
все результаты решения сохранять как в тестовые файлы (для претендующих на оценки 4-5), так и в файлы специальных форматов (для всех остальных).
Рассматривается задача моделирования плоского напряжённо деформированного состояния пластины с вырезами при различных граничных условиях.
Код программы:
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, uModel;
type
TForm3 = class(TForm)
Image1: TImage;
Button1: TButton;
ProgressBar1: TProgressBar;
Button2: TButton;
leR1: TLabeledEdit;
leStep: TLabeledEdit;
RadioGroup1: TRadioGroup;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
TheModel: TModel;
//Координаты второго круга
CirX: Extended = 50;
CirY: Extended = 50;
//Функция обьновляет индикатор прогресса внизу экрана
procedure SetProgress(R: Extended);
implementation
uses uTessel, uSLAU;
procedure SetProgress(R: Extended);
begin
Form3.ProgressBar1.Position := trunc(R*100);
end;
{$R *.dfm}
// Кнопка "разбиение"
procedure TForm3.Button1Click(Sender: TObject);
var
Sq, Cir, Cir2: TContour;
P: TRealPoint;
I: Integer;
R: Extended;
Cnts: TContours;
begin
//Пересоздадим модель
TheModel.Free;
TheModel := TModel.Create;
//Создаем внешний контур (квадрат)
Sq := TSquare.Create(0,0, 110,110);
//Создаем внутренние контуры (дырки)
R := StrToFloat(leR1.Text);
Cir := TCircle.Create(50,50,R);
Cir2 := TCircle.Create(CirX,CirY,R);
//Установим прогресс в 0
SetProgress(0);
//Выполним тесселяцию (разбиение на треугольники) с заданным шагом
R := StrToFloat(leStep.Text);
Cnts := TContours.Create(Sq, [Cir, Cir2]);
Tesselate(Cnts, 0, 100, 0, 100, R, R, TheModel);
//Рисуем модель в масштабе 1:5
TheModel.Draw(Image1.Canvas, 5);
//Рисуем контуры
Cir.Draw(Image1.Canvas, 5);
Cir2.Draw(Image1.Canvas, 5);
Sq.Draw(Image1.Canvas, 5);
//Задаем внешнее воздействие
for I := 0 to TheModel.Vertexes.Count-1 do
begin
P := TRealPoint(TheModel.Vertexes[I]);
if P.Y = Sq.GetMinY then
P.ExtForceY := -1;
if P.Y = Sq.GetMaxY then
P.ExtForceY := 1;
end;
end;
//Кнопка "Решить СЛАУ"
procedure TForm3.Button2Click(Sender: TObject);
var
I: Integer;
R: Extended;
begin
//Установим прогресс в 0
SetProgress(0);
//Решим СЛАУ МКЭ
TheModel.SolveMKE(1, 0.1, 1, TMethod(RadioGroup1.ItemIndex));
ShowMessage('Complete!');
//Нарисуем модель
TheModel.Draw(Image1.Canvas, 5);
//Рассчитаем максимальное напряжение
R := 0;
for I := 0 to TheModel.Trias.Count - 1 do
with TTria(TheModel.Trias[I])do
if EpsSum > R then
R := EpsSum;
Label1.Caption := 'Emax: '+FloatToStr(R);
//Рассчитаем коэффициент статических напряжений (среднее напряжение)
R := 0;
for I := 0 to TheModel.Trias.Count - 1 do
with TTria(TheModel.Trias[I])do
R := R+EpsSum;
Label2.Caption := 'Kavg: '+FloatToStr(R/TheModel.Trias.Count/0.012256{Масштабируем на коэффициент, полученный при остутствии отверстий})
end;
procedure TForm3.Button3Click(Sender: TObject);
var
A, B, E: TMatrix;
N, I, J: Integer;
begin
N := 3;
SetSize(N, N, A);
for I := 1 to N do
for J := 1 to N do
A[I, J] := cos(i*j);
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.