Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

Современные вычислительные технологии

  1. В начало
  2. Курсы
  3. Весенний семестр
  4. Математика, механика
  5. МКЭ2018
  6. Общее
  7. Бонусное задание. Создание программы, использующей...

Бонусное задание. Создание программы, использующей МКЭ (1 часть)

Открыто с: воскресенье, 17 марта 2024, 00:00
Срок сдачи: воскресенье, 24 марта 2024, 00:00
Требуемые условия завершения

Дальнейшие действия будут описаны для языка C++. Но при решении задачи может использоваться любой язык высокого уровня, использующий объектно-ориентированное программирование (C#, Python, Java и т.д). Когда вы создаёте новый класс или метод, нужно убедиться в его работоспособности, используя функцию main

  1. первый шаг - создаём пустой проект в Visual Studio и называем его my_own_ansys;
  2. добавляем в проект новый класс node для узловой точки на плоскости (далее приводится определение из файла node.h)
    class node
    {
    	// поля
    	double _x, _y;
            size_t _number;
    public:
    	// конструктор
    	node(size_t number, double x = 0, double y = 0);
    
    	// расстояние до другого узла
    	double distance_to(const node& another) const;
    
    	// геттеры
    	double x() const;
    	double y() const;
    };    
    
  3. Добавляем в проект перечисление (удобно в отдельном файле) с тремя элементами (горизонтальное, вертикальное смещения и поворот)
    enum class displacement {
    	ux, uy, rotz
    };
    
  4. добавляем в проект новый класс nodal_displacement c определением
    class nodal_displacement
    {
    	// узел
    	node _node;
    	// перемещение
    	displacement _displacement;
    public:
    	// конструктор
    	nodal_displacement(const node& n, displacement d);
    	// геттеры
    	node node() const;
    	displacement displacement() const;
    };
          
  5. Далее добавляем в проект абстрактный класс с двумя чисто виртуальными методами (используем абстрактный класс, чтобы оставить себе возможность строить различные типы элементов)
    class element
    {
    public:
    	// вектор узловых перемещений
    	virtual std::vector<nodal_displacement> nodal_displacements() const = 0;
    	// матрица жёсткости
    	virtual std::vector<std::vector<double>> stiffness_matrix() const = 0;
    };
  6. Создаём наследника класса element - linear_element (стержневой элемент с двумя степенями свободы) и следующим объявлением:
    class linear_element :
        public element
    {
        // узловые перемещения
        std::vector<nodal_displacement> _nodal_displacements;
        // матрица жёсткости в глобальной системе координат
        std::vector<std::vector<double>> _stiffness_matrix;
        // вспомогательный метод для вычисления матрицы поворота
        std::vector<std::vector<double>> rotation_matrix(const node & node1, 
            const node& node2) const;
    public:
        /// <summary>
        /// конструктор
        /// </summary>
        /// <param name="node1">узел</param>
        /// <param name="node2">узел</param>
        /// <param name="young_modulus">модуль Юнга</param>
        /// <param name="area">площадь поперечного сечения</param>
        linear_element(const node& node1, const node& node2, double young_modulus, 
            double area);
        // перегрузка чисто виртуальных методов базового класса 
        // (если хотя бы один из них не перегружен, проект не компилируется)
        std::vector<nodal_displacement> nodal_displacements() const;
        std::vector<std::vector<double>> stiffness_matrix() const;
    };
  7. Элемент имеет вид прямолинейного отрезка, расположенного под углом к оси абсцисс. Его локальная матрица жёсткости в системе координат, связанной с элементом, имеет вид,  \[ K = \frac{EA}{h}\left(\begin{array}{cccc} 1 & 0 & -1 & 0\\ 0 & 0 & 0 & 0\\ -1 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 \end{array}\right), \] где Е - модуль Юнга, A - площадь поперечного сечения стержня, h - длина элемента. Чтобы получить локальную матрицу жёсткости в глобальной системе координат, следует воспользоваться матрицей перехода вида \[ Q = \left(\begin{array}{cccc} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 &\cos\theta & -\sin\theta \\ 0 & 0 & \sin\theta & \cos\theta \end{array}\right), \]Формула для локальной матрицы жёсткости в глобальной системе координат следующая:\[ C=Q^TKQ \]
◄ Лекция 1
Бонусное задание (2 часть, ансамблирование элементов, отыскание узловых перемещений) ►

Блоки

Пропустить Навигация

Навигация

  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

          • Уч_практ_2к (мех)

          • Стох. мод.

          • БД-25

          • Уч_практ_2к (мат)

          • Производственная практика

          • Проект (второй курс)

          • Теормех 1

          • МСС

          • ФМП и ВМ

          • Компьютерные науки

          • Динамика механических систем

          • МКЭ2018

            • Общее

              • ФайлУказания и шаблоны программ

              • ФайлСвободные колебания

              • ЗаданиеЗадание на знание теоретической части

              • ГиперссылкаСегерлинд "Метод конечных элементов"

              • ФайлРешение задач о равновесии балок и рам в AnSYS

              • ФайлСтатическая задача теории упругости

              • ФайлРабота в FlexPDE

              • ФайлМетодические указания

              • ФайлЛекция 1

              • ЗаданиеБонусное задание. Создание программы, использующей...

              • ЗаданиеБонусное задание (2 часть, ансамблирование элемент...

              • ЗаданиеБонусное задание (часть 3)

            • Задача о равновесии фермы.

            • Задача о равновесии рамы

            • Задача о равновесии балки

            • Расчет свободных колебаний упругого плоского тела

            • Статическая задача теории упругости

            • Задача теплопроводности

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

        • ТФНД

        • МО_4курс

        • KP

        • АБМ1_ИИБ_25-26

        • Java Eng

        • МО (ПО)

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ

          • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2026

          • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ -2025

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Дополнительные блоки

Вы используете гостевой доступ (Вход)
МКЭ2018
Сводка хранения данных
Скачать мобильное приложение
Яндекс.Метрика