Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/47: Рейтинг темы: голосов - 47, средняя оценка - 4.81
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
1

Метод конечных элементов

09.12.2012, 18:27. Показов 8633. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Пишу программу для расчетов МКЭ (метод конечных элементов) на C++ Builder 6. Частью программы является создание геометрии: объекты 0D (нулевой размерности) - точки, 1D - отрезки или линии, 2D - площади, 3D - объемы. На данный момент реализовано хранение данных объектов в списках типа стэк. Например, рассмотрим только точки и отрезки: отрезки строятся по точкам, по-этому они должны иметь указатель на точки, по которым они строились. Точки же в свою очередь имеют информацию о линиях, которые использовали данную точку при построении (для удобства так захотел). Вот какие есть структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct PLines
{
    int line; // тут хранятся номера отрезков (линий), которые содержат данную точку
    PLines* next;
};
struct Point // точки
{
    float x; // допустим, координата точки
    int n; // номер точки
    Point* next;
    PLines* lines; // указатель на список отрезков
};
struct LinePP // линии или отрезки
{
    int n; // номер линии
    Point* kp1; // точка 1
    Point* kp2; // точка 2
    LinePP* next;
};
Как вы видите, для линий (объектов более высшего ранга) есть быстрый доступ к информации об используемых точках. У точки каждой точки есть список номеров линий, но нет указателей на линии. Поэтому приходится в цикле искать нужную линию - но это увеличит код и время работы (второе не важно). Я хочу в структуре < PLines > вместо номера линии иметь указатель на линию!
Подскажите, пожалуйста, как это можно сделать.
С уважением, Алексей.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2012, 18:27
Ответы с готовыми решениями:

Метод Конечных Элементов
Помогите, с понятием метода. Пишу программу расчета деталей на прочность. Пока сделал деление...

Метод конечных элементов
Здравсвтуйте! Помогите пожалуйста разобраться с методом конечных элементов в двумерном случае с...

Метод конечных элементов
Задача состоит в следующем: требуется разработать приложение, которое будет рассчитывать...

Метод конечных элементов
Помогите с алгоритмами по программированию МКЭ. С математическими основами метода я разобрался, но...

22
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.12.2013, 15:14 21
Author24 — интернет-сервис помощи студентам
Обычный конфликт пространств имен. Указывай нужное пространство в явном виде:
C++
1
2
3
4
5
// так:
Sysutils::BoolToStr(bufb1)
// или так:
using namespace Sysutils;
BoolToStr(bufb1)
Команда using namespace имеет силу в рамках окружающих ее фигурных скобок и действие ее распространяется на строчки кода, следующие после нее.
1
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
19.02.2014, 20:56  [ТС] 22
1) Я на главной форме провожу расчеты в цикле, под такт цикла пусть 1 секунда ... циклов, допустим 1000. Вытащил прогресс бар на форму, все работает нормально. Но!!! Нормально при условии, что я не взаимодействую с формой (не нажимаю мышкой в свободном месте) - жду завершения расчетов. А мне надо переключаться на другие окна!... и к тому же следить за прогрессом вычислений - когда же полоска дойдет до максимума, т.е. скоко еще осталось ждать. Если я переключаюсь на другое окно и возвращаюсь, то кно подвисает и уже толку от полоски с прокруткой НОЛЬ.

Хотелось бы вот эту неприятнейшую вещь исправить ... как?

2) У меня имеется код для отрисовки объектов ... есть кнопки и всякие обработчики на картинке для всевозможных перемещений в 3Д (12+ кнопок и еще скоко-то функций при нажатии клавиш мыши на картинке). В обработчике кнопки лежит следующее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
MoveLocalCS[0]=0;
MoveLocalCS[1]=StrToFloat(Edit22->Text);
MoveLocalCS[2]=0;
CalcMoveLCS();
if (Edit46->Text=="Points")
{
    if (Project->Points)
    {
        PlotPoints();
    }
    else
    {
        ErrorMessage1="Íåò òî÷åê. ";
        Form7->ShowModal();
    }
}
if (Edit46->Text=="Lines")
{
    if (Project->LinesPP)
    {
        PlotLines();
    }
    else
    {
        ErrorMessage1="Íåò ëèíèé. ";
        Form7->ShowModal();
    }
}
if (Edit46->Text=="Nodes")
{
    if (Project->Nodes)
    {
        PlotNodes();
    }
    else
    {
        ErrorMessage1="Íåò íîä. ";
        Form7->ShowModal();
    }
}
if (Edit46->Text=="LineElements")
{
    if (Project->LinElementsPP)
    {
        PlotLineElements();
    }
    else
    {
        ErrorMessage1="Íåò ëèíåéíûõ ýëåìåíòîâ. ";
        Form7->ShowModal();
    }
}
if (Edit46->Text=="Areases")
{
    if (Project->Areases)
    {
        PlotAreases();
    }
    else
    {
        ErrorMessage1="Íåò ïëîùàäåé. ";
        Form7->ShowModal();
    }
}
if (Edit46->Text=="AreaElements")
{
    if (Project->AreaEls)
    {
        PlotAreaElements();
    }
    else
    {
        ErrorMessage1="Íåò ïëîñêèõ ýëåìåíòîâ. ";
        Form7->ShowModal();
    }
}
Это все работает замечательно, но если я хочу переместить этот код в функцию, к примеру

C++
1
plotXXXsuper();
И в каждом обработчике кнопки его использовать, то у меня выскакивает ошибка про

C++
1
Form7->ShowModal();
Причем важно: я эту функцию пихаю в файл "3Dgraphic.h", который подключен к проекту правильно.
Как быть ... мне так не хочется 12 раз дублировать этот бредокод!!! И так уже 33000 строчек кода =). Помогите, пожалуйста.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
21.02.2014, 08:59 23
Цитата Сообщение от Gendalf147 Посмотреть сообщение
Хотелось бы вот эту неприятнейшую вещь исправить ... как?
Вычисления - в поток, естественно.
Цитата Сообщение от Gendalf147 Посмотреть сообщение
Причем важно: я эту функцию пихаю в файл "3Dgraphic.h", который подключен к проекту правильно.
Как быть ...
Значит, объявление экземпляра класса Form7 находится после объявления этой функции plotXXXsuper(). Решение элементарное - помести этот код в метод класса, в обработчиках которого хочешь его вызывать.
0
21.02.2014, 08:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 08:59
Помогаю со студенческими работами здесь

СЛАУ; метод конечных элементов
доброго времени суток, форумчане. нужна ваша помощь/совет. нуждаюсь в примере/куске кода/любой...

Метод конечных элементов на java
Здравствуйте! Не знаю с чего начать. Необходимо программно решить уравнения теплопроводности...

Метод конечных элементов - ищу баг
Всем привет, конкретно застрял на вычислении матрицы жесткости (пока для одного элемента) из этой...

Метод конечных элементов. От начала и до программы.
Возникла необходимость расчетов пространственных металлических конструкций на кручение и изгиб. Для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru