Перейти к основному содержанию
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_displacements() const = 0;
    	// матрица жёсткости
    	virtual std::vector> 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)

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

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

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

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

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

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

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

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

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

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

        • Другое

        • ОИИ

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

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

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

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

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

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

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

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

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

        • Другое

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

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

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

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

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

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

        • Архив

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

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

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

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

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

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

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

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

        • ВМШ

          • ВМШ - 24

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

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

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

      • Олимпиады

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

      • Разное

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

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

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