Основы компьютерного моделирования физических и технических систем. Основы моделирования физических и технических систем

Страницы работы

Содержание работы

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

ОТЧЕТ   ПО   ЛАБОРАТОРНОЙ   РАБОТЕ   № 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);

Похожие материалы

Информация о работе