- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF130:CalculiX
Материал из Linuxformat.
Содержание |
Популярно о моделировании
- Пусть вы и не инженер – свободное ПО позволяет заглянуть в тайны этой профессии всем желающим. В качестве примера Леонид Алифанов построит модель и выполнит расчет плотины СаяноШушенской ГЭС.
В семействе открытых пакетов программ для моделирования и расчетов методом конечных элементов (МКЭ) немало славных представителей. Есть такие промышленные тяжеловесы, как Code_Aster® от Электрисите де Франс, есть и небольшие удачные программы, «заточенные» авторами для специфических инженерных и научных задач.
К сожалению, многие проекты такого рода со временем затухали, оставаясь без поддержки или интереса со стороны пользователей. Но практически безотказным условием их успешности является авторство в них практикующих инженеров, создающих расчетные инструменты для собственных нужд. Один из таких пакетов – CalculiX (http://www.calculix.de) разработан двумя немецкими конструкторами авиадвигателей – Гвидо Дхондтом [Guido Dhondt] и Клаусом Виттигом [Klaus Wittig].
Пакет создавался для прочностных и тепловых расчетов деталей и узлов авиадвигателей, поэтому основной упор в нем сделан на объемные конечные элементы, причем наиболее точные – с промежуточными узлами.
Немного о CalculiX
Кроме объемных, в CalculiX имеются также элементы для плоских задач (плосконапряженное и плоскодеформированное состояние), стержневые и оболочечные. Касаемо двух последних типов стоит заметить, что реализованы они немного нетривиально – на основе все тех же «объемников». Поэтому результаты расчета над стержнями чувствительны к соотношению габаритов отдельных КЭ, и для получения правильного результата нужно использовать не слишком вытянутые элементы. Оболочечные, переделанные из объемных, выдают результаты по теории толстых плит и считают только напряжения (внутренние усилия, по которым подбирается армирование железобетонных конструкций, не выдаются).
С CalculiX связан единственный в своем роде интернетпроект http://www.onlinefeasolver.com – с его помощью желающие могут не только рассчитать конструкцию или деталь, но и сделать т.н. топологическую оптимизацию изделия. Загрузив бесформенный кусок материала, вы получите конструкцию оптимальной формы: специальный скрипт анализирует силовые линии и, обеспечив сопротивление прилагаемым нагрузкам, удаляет избыток материала.
Зачем все это?
Может ли вообще понадобиться простому смертному рассчитывать лопатки турбин в авиадвигателе? Ну, даже если он и захочет это сделать, будет лучше поучиться лет 5 и набираться опыта лет 10. Но бывают случаи, когда хочется «пощупать» конструкцию самому. В конце концов, если любая профессия – в действительности заговор против непосвященных, то иногда все же хочется представлять себе контуры этого «заговора» в общих чертах.
Кто не обсуждал в последнее время надежность плотины СаяноШушенской ГЭС? Можно ли было предположить, что книга Валентина Брызгалова – скучное, на первый взгляд, производственное издание «Из опыта создания и освоения Красноярской и СаяноШушенской гидроэлектростанций» – станет цитируемой повсеместно?
Это гидротехническое сооружение поражает воображение уже своим общим описанием: «напорный фронт образует уникальная бетонная арочногравитационная плотина высотой 245 м, длиной по гребню 1066 м, шириной по основанию 105,7 м, а по гребню – 25 м …». 245 метров – как две красноярские телебашни с антеннами, поставленные одна на другую!
Каждый решал в школе элементарные задачки по физике, в которых силу делят на площадь, получают давление и сравнивают его с допустимым. Школьный курс дает самое приблизительное представление о прочностных расчетах, увязывая вопрос о прочности конструкции с действующими внутри нее напряжениями (давлением внутренних сил в материале). Задача и состоит в определении их в общем случае.
Что же такое метод конечных элементов, реализованный в CalculiX и в тысячах подобных программ? Объемная конечно-элементная модель представляет собой некое тело, заполненное тетраэдрами или призмами, образующими сетку. Каждый элемент имеет узлы, установленные как минимум в угловых точках, причем в сплошном массиве для смежных элементов эти узлы общие. Для тела определяются граничные условия – прикладываются известные силы, давления и закрепления.
Для каждого «элементарного кусочка» составляются уравнения, учитывающие его равновесие и зависимости между неизвестными деформациями и напряжениями. В результате объединения систем уравнений и расчета, эти неизвестные напряжения на элементарных площадках внутри тела могут быть определены.
Приступим к работе
Итак, восстановив в памяти самые элементарные сведения из школьной физики, в данной статье мы с вами попробуем подойти к плотине не с голыми руками, но вооружившись CalculiX. Если даже вы и не освоите программу, то, по крайней мере, сможете понять общую логику рассуждений и посмотреть на результаты. Пока вы компилируете исходные тексты или скачивае те RPM-пакет с SourceForge.net, я запущу специальную сборку Ubuntu с предустановленными программами для моделирования с http://www.caelinux.com.
CalculiX – пакет, состоящий из двух модулей: препостпроцессора CGX и решателя CCX. Приступим к построению так называемой твердотельной модели, внутри которой будут заключены конечные элементы. Этот процесс осуществляется в CalculiX CGX (CalculiX Graphics). Для запуска программы в режиме построения, наберем в консоли
cgx -b <имя_файла>.fbd
Возникнет графическое окно CGX (рис. 1). Нам нужно ввести точки, затем соединить их линиями, сгенерировать внутри контура поверхность и вытянуть ее вдоль дуги в массивную арку. Процесс построения может осуществляться интерактивно (вводом команд при открытом графическом окне и последующей записью в FBD-файл в рабочем каталоге CalculiX) или в текстовом редакторе. Детально описывать действия и команды я не буду, тем более что руководства для начинающих, в том числе и на русском языке, доступны в Сети. А вот на коде, который описывает модель, остановлюсь несколько подробнее.
pnt p1 -10 0 0 pnt p2 -10 245 0 pnt p3 15 245 0 pnt p4 19.1 163.3 0 pnt p5 39.3 81.7 0 pnt p6 105.7 0 0 pnt p7 600 0 0 pnt p8 600 1 0 seqa seq PNT p3 p4 p5 p6 LINE L001 p1 p2 48 LINE L002 p2 p3 4 LINE L003 p3 p6 seq 48 LINE L004 p6 p1 12 gsur S001 + BLEND - L004 - L003 - L002 - L001 seta sec s S001 swep sec dam rot p7 p8 102 100 elty all he20 mesh all
Команды pnt – это ввод точек в декартовой системе координат (размеры в метрах взяты приблизительные). LINE – линии (три отрезка и один сплайн по точкам, определенным командой seqa). В конце каждой команды стоит число, задающее количество конечных элементов вдоль геометрического примитива «линия». Команда gsur отвечает за построение поверхности, а swep – это вытяжка поворотом вокруг вектора p7–p8 на угол 102°. Последние две строчки: elty – задание типа элемента и mesh – команда на генерацию сетки.
То, что получилось в результате, вы можете увидеть на рис. 2. Для отображения заданных примитивов в CGX используются команды plot и plus, вводимые при активном графическом окне. Например plot e all означает «отобразить все элементы», а plus nа all – «добавить к изображению узлы с их номерами». В общем, если вы все это проделаете, то процесс построения в общих чертах будет вам понятен.
Сразу же представляю себе реплику неискушенного читателя: «В XXI веке строить модели командами – да еще в заумном текстовом файле!» Возражения на этот счет вот какие: во-первых, команды выбраны таким образом, чтобы удобно было генерировать их автоматически из скриптов для построения параметрических моделей. Ведь инженер заранее не знает точные параметры своей конструкции или детали, а перестраивать модель, каждый раз тыкая указателем мыши в лубочные формы на экране, утомительно. Во-вторых, особенности построения модели предопределяют конечно-элементную сетку, которую генерирует CGX – она качественней, в смысле точности, автоматических треугольников и тетраэдров, создаваемых другими аналогичными программами, и этот факт в некоторых задачах может иметь важное значение.
На экспорт
Итак, сетка построена, координаты узлов и элементов известны и могут быть записаны в отдельный файл; но работа в CGX пока не завершена. Модуль CalculiX CCX (решатель) работает с сетками в специфическом текстовом формате. Узлы задаются координатами по номерам (сквозная нумерация не обязательна); в заголовке указывается имя группы узлов, которой пользователь оперирует в дальнейшем. Именованные группы узлов и элементов необходимы для задания нагрузок и закреплений, и они также формируются в CGX и записываются в текстовые файлы командой send с заданными ключами.
Созданию именованных групп служат команды qadd и qrem. Перед созданием группы из определенных примитивов следует отобразить их через plot/plus. Для примера продемонстрирую создание группы fix1 узлов подошвы плотины.
plot n all qadd fix1
После ввода последней команды на кончике указателя мыши возникает маленький квадратик, которым в графическом окне можно захватывать и выделять нужные узлы, точки и т. д. Чтобы увеличить его размеры, нужно дважды последовательно установить курсор в диагонально противоположные точки воображаемого прямоугольника выделения и дважды ввести r с клавиатуры (рис. 3). Далее, если вы собираетесь выделять сразу много примитивов, попадающих внутрь рамки, введите с клавиатуры a, после чего отметьте необходимое, перемещая прямоугольник по экрану и вводя ключевой символ требуемого вам примитива (для узлов – n, для элементов – e; для поверхностей элементов – f, и т. д.). Команда завершается вводом q. Если в группу при выделении попали лишние примитивы, они могут быть удалены аналогично, при помощи команды qrem.
Отобразить созданную группу можно, например, так:
plus n fix1 g
где g – это green (зеленый). В CGX использованы следующие цветовые ключи: r – red (красный), g – зеленый, k – black (черный), b – blue (голубой), m – magenta (пурпурный).
Отправить созданную группу (зафиксированные номера узлов, которые будут использованы в дальнейшем) в текстовый файл можно командой
send fix1 abq nam
В плоском случае
Возвратимся к нашему примеру: давайте сначала просчитаем плоскую задачу. Мысленно вырежем из плотины метровый сегмент и зададим основную для него гидростатическую нагрузку со стороны верхнего бьефа и закрепления по подошве. Гидростатическое давление, которое увеличивается с глубиной, вычисляется как произведение удельного веса воды на глубину погружения рассматриваемой площадки.
Наберем в текстовом редакторе файл следующего содержания:
*INCLUDE, INPUT=all.msh *INCLUDE, INPUT=fix1.nam *MATERIAL,NAME=EL *ELASTIC 0.25E+05, 0.200000 *DENSITY 0.024 *SOLID SECTION,ELSET=Eall,MATERIAL=EL, *BOUNDARY Nfix1,1,2 *STEP *STATIC *DLOAD Eall,GRAV,1.,0.,-1.0,0. *DLOAD 1,P4,2.3479 … 24,P4,0.1021 *NODE FILE U *EL FILE S *END STEP
Команда *INCLUDE здесь подключает к расчету файл сетки all.msh и файл fix1.nam с группой узлов Nfix1 для задания закреплений по подошве. *ELASTIC – задает упругий материал с модулем Юнга Е=2,5·104 МПа и коэффициентом Пуассона μ=0,2; *DENSITY – объемный вес бетона (в МН/м3); *SOLID SECTION – это присвоение заданных параметров группе элементов Eall (в кото рую входят все элементы); *STEP ... *END STEP – начало и конец описания рассматриваемого шага нагрузки (варианта нагружения, в данном случае – единственного). *BOUNDARY – здесь задаются закрепления либо вынужденные перемещения групп узлов; *DLOAD – активируется учет объемных сил от собственного веса элементов, и этой же командой прикладывается гидростатическое давление (на пример, 1,P4,2.3479 – давление в МПа на поверхность P4 элемента номер 1 и так далее). *NODE FILE, *EL FILE – команда на выдачу определенных результатов (узловых перемещений и напряжений в элементах).
Дадим в консоли команду
ccx plane
и затем, когда расчет будет окончен, запустим модуль CGX в режиме постпроцессора:
cgx -v plane.frd
Отображаем с помощью контекстного меню напряжения SYY, в МПа, действующие по площадкам, параллельным основанию, и получаем картинку, представленную на рис. 4. Положительные напряжения соответствуют растяжению, отрицательные – сжатию. Растягивающие напряжения получаются слева, по напорной грани. Бетон на растяжение работает плохо, и в этой зоне после наполнения водохранилища возникли трещины, из-за того, что при проектировании расчеты выполнялись приближенными методами и растягивающие напряжения были недооценены проектировщиками. Это та самая проектная ошибка, о которой много писали и говорили – те трещины, которые впоследствии заделывали специальными смолами приглашенные французские специалисты.
Решенная нами плоская задача рассматривает вариант, при котором плотина работает только как гравитационная. Если бы покакой-то причине плотина не смогла передавать горизонтальные усилия на берега, то трещины прорезали бы массив бетона на всю толщину, что привело бы по меньшей мере к ее сдвигу под нагрузкой, так как при наличии трещин проектные предположения о величине коэффициента трения и о сцеплении с основанием не работают. В то же время вода, просачиваясь в трещины, создавала бы дополнительное давление, направленное вверх, против веса дамбы. В связи с этим, излишне говорить, что вес намерзшего этой зимой льда, которым нас пугали в последнее время, на самом деле не только не приносит вреда, но даже полезен, поскольку увеличивает пригруз и суммарный момент сил, удерживающих плотину от опрокидывания. Вы можете это проверить, построив модель и приложив вертикальную нагрузку самостоятельно. Само собой, даже напрашивается необычное рацпредложение – наморозить льда как можно больше и сохранять его летом, теплоизолировав снаружи и пропустив внутри по трубкам фреон (ну или что-то в этом роде).
А вот высказывание о том, что плотина работает «как распорка» (точнее, как арка, то есть держится за счет передачи распора на берега) действительности полностью соответствует, в связи с чем во многих учебниках «гравитационная» в названии сооружения уже и не упоминают.
Также становится понятным заявление специалистов ГЭС о том, что другая известная проблема – с водобойным колодцем, не выдерживающем паводка – не столь актуальна, как это себе представляют (колодец – отдельное сооружение, а небольшой подмыв основания не особенно угрожает арочной работе).
Влияние берегов
Теперь посчитаем пространственную модель, то есть попробуем учесть работу плотины как арки. За неимением точных данных, я просто удалил «на глазок» элементы по берегам, жестко заделав плотину по бокам и в основании. Расчетный INP-файл следует переделать. Поверхностная гидростатическая нагрузка была задана мной на заранее отмеченные и сохраненные по верхности объемных конечных элементов типа C3D20:
*DLOAD *INCLUDE,INPUT=f0.dlo ... *INCLUDE,INPUT=f12.dlo
Здесь f0.dlo и так далее – файлы со значениями нагрузок, записанные из CGX и сохраненные в рабочем каталоге.
Производим расчет и отображаем напряжения SYY. Как мы видим (рис. 5), растягивающие напряжения по напорной грани остаются.
Порядок величин перемещений и «арочных» сжимающих напряжений (в CalculiX они просматриваются как главные напряжения SP3, наименьшие с учетом знака или наибольшие сжимающие со знаком «минус») в моем расчете приблизительно совпал с опытными значениями, полученными в результате измерений. Однако, поскольку сведений, приведенных в открытых источниках, недостаточно для построения точной модели, я не буду останавливаться на анализе этих величин.
Во время проектирования плотины, численные методы, такие как МКЭ, уже внедрялись во многих странах, однако инженеры-гидротехники их проигнорировали. Статический расчет производился так называемым «неполным методом пробных нагрузок (арок-консолей)». За счет арочного эффекта планировалось снять всего 25 % от расчетного гидростатического давления.
Вообще, стоит отметить, что приведенный расчет, выполненный в линейной постановке без учета трещин, совместной работы с основанием и т. д., дает очень приблизительные, оценочные результаты. Они не помогут ответить на вопрос, насколько надежно или нет бетонное сооружение. О существовании приближенной к действительности математической модели плотины СШГЭС можно прочесть в уже упомянутой книге Валентина Брызгалова.
Назначение данной статьи состоит лишь в популяризации открытого программного обеспечения, но особенно важно то, что использование таких пакетов, как CalculiX, позволяет оценивать техническую информацию как положено – с точки зрения элементарных научных знаний, и не забивать голову фантастическими измышлениями, гуляющими в прессе.
Сделаем уточнение
На самом деле, выдаваемые CalculiX максимальные значения растягивающих напряжений не верны. И дело не в программе. В точке, где они достигаются (рис. 4), исследуемые напряжения бесконечно велики, как значение функции y = x − 1 / 2 при x → 0. Это так называемая «особая точка». Такие же точки имеются в вершинах трещин, поэтому для исследования их стабильности используются другие величины, которыми оперирует сравнительно молодая наука – механика разрушения. Факт тот, что в данном случае серьезные растягиваю щие напряжения имеются на значительном объеме массива плотины, и кроме трещины на контакте с основанием есть и другие – выше него, схематически показанные на рис. 4.