Блог о программном обеспечении

Зачем оно нужно?
Публиковать для себя разные вещи, чтобы потом не искать их у себя по разным папкам.
И, конечно, - делиться открытой информацией с другими.
Коротко по темам Caelinux - самый инженерный дистрибутив линукс;
CalculiX - мощная программа для расчетов по МКЭ;
OpenOffice Basic - то что легче выучить и затем эффективно использовать
Maxima - символьная математика от Вильяма Шеллтера, профессора Остинского университета. Все прочее - понемногу.

Тут о свободных CAD-ах

Попробую провести некоторый обзор свободных CAD программ.
Сначала список
1) Salome http://www.salome-platform.org/
2) Freecad http://sourceforge.net/projects/free-cad/
3) gcad3d http://www.gcad3d.org/
4) SolveSpace http://solvespace.com/index.pl

Сразу скажу, что работаю я в SolidWorks, и не представляю как можно реально производительно работать в любой из перечисленных открытых программ. Дело совсем не в платности или бесплатности - могу заверить что SolidWorks стоит своих денег, и даже более того - он совсем не дорог в смысле соотношения цена/эффективность. (Поскольку это программа коммерческая, 
то рекламировать ее, не будучи работником, не совсем правильно, к тому же она и без рекламы очень популярна во всем мире).

Но тем не менее, открытые CAD программы представляют определенный интерес и попробую объяснить - какой.
Тут еще также стоит заметить, почему в список выше не включен blender3d
(http://www.blender.org/ ). Это в большей мере профессиональный софт по своему назначению (особенно с последних версий), и служит он конечно же для построения 3d моделей, но это не для инженеров а для арта и форматы геометрии там - сеточные и сплайновые, особой точности в общем случае не предполагают, принципы немного иные, и для инженеров не очень полезны (хотя можете погуглить blendercad, типа тут http://www.cad4arch.com/cadtools/).
Под CADом я буду понимать 3D программы, оперирующие с форматами типа STEP/IGES, в обе стороны (т.е. с сохранением). Важный момент - потому что многие препроцессоры МКЭ программ (в том числе GMSH, NETGEN, CalculiX CGX) - геометрию тоже строят, но ориентированы на построение расчетных сеток, и, хотя могут читать STEP, но обратно его не пишут.

Salome - наиболее мощный (по совокупности возможностей но не по удобству) инженерный пакет, исторический прародитель наиболее мощных коммерческих САПР, типа Catia, в принципе тоже является в большей мере препроцессором, но имеет очень функциональный геометрический модуль, основанный на ядре OpenCascade.
Под Windows существует экспериментальная сборка, не очень удачная,
самый наверно лучший способ опробовать Salome - в составе дистрибутива caelinux. Дает возможность строить параметрические модели, как посредством пользовательского интерфейса (через определение параметров), так и через запись и корректировку пайтон скриптов.При этом при выполнении определенного действия в дереве появляется соответствующая feature, но изменить ее непосредственно из интерфейса - нельзя, нужно перегружать скрипт.
В чем преимущества и недостатки скриптовой паратеризации по сравнению с feature based. Преимущество - в гибкости. Например - у вас есть тело с отверстиями. В скрипте вы можете прописать не только параметры вроде диаметра или привязки, но и поменять количество отверстий и принцип по которому они привязаны к телу. Недостаток в том, что нужно работать с командным скриптом, перезапускать его несколько раз в процессе написания, для того чтобы убедиться, что он работает правильно.
Salome имеет достаточно бедные интерактивные возможности - нельзя практически ничего произвольно начертить на экране, задать изменяемые размеры - все приходится вводить вручную через координаты.
Строить таким образом сложные модели гораздо трудозатратней, чем например в SolidWorks, но для типовых моделей в массовом производстве параметризация очень удобна (можете например построить вал, шестерню, фланец - и так далее и затем генерировать ее автоматом просто поменяв параметры).
Еще одна существенная особенность, важная именно для последующего использования в расчетах - в отличие от программ типа SolidWorks у пользователя есть возможность полностью контролировать отдельные примитивы (типа поверхностей, точек, линий и т.д.), что позволяет во многих случаях подготовить геометрию для нанесения автоматической сетки с определенными свойствами. Это в некотором роде CAD пакет "классического типа", в котором вы полностью контролируете геометрию на элементарном уровне и соответственно можете ей (при наличии опыта) должным образом управлять. Ближайший аналог Salome - это препроцессор классической версии ANSYS.

Free-cad - базируется на том же ядре, что и Salome, и таже имеет скриптовые возможности на том же принципе (python) плюс зачаточные возможности feature-based параметризации. То есть можно выделить любую поверхность существующего тела и нарисовать на ней произвольный эскиз (с параметрическими изменяемыми размерами). Далее, соотвтетственно - сделать вытяжку или рез согласно этого эксиза.
На сегодняшний день (версия 0.13) в эскизной части не поддерживаются сплайны, также хромает экспорт dxf фигур в эскиз (либо невозможно, как в случае сплайнов, либо надо много дорабатывать ручками).
Отдельно от эскизного существует draft модуль - с обычным черчением на плоскости и образмериванием.Отдельно от draft - Drawing модуль, в котором можно создать произвольную проекцию построенного тела на плоскость (правда сохранить в dxf напрямую нельзя, экспорт выполняется через svg формат, который нужно переоткрывать и сохранять в Inkscape)
Сборочный модуль пока находится в стадии тестирования (в бета версии),
тем не менее отдельные функции точной сборки доступны через привязки Draft http://youtu.be/lfinO3EGXeo )
В целом конечно Freecad-у далеко до современного полнофункционального пакета, но для простых вещей он работает не хуже солидворкса, и сохраняет пока преимущества скриптовых возможностей, описанные выше для Salome.
(Совсем ничего не написал про архитектурный модуль - можете погуглить или сами попробовать).
Упор на "массового пользователя" в развитии Free-cad имеет и некоторые недостатки - нарушается unix-way (делай отдельный модуль для определенной цели, но делай его хорошо), программа стремительно растет в размерах при этом переполняясь какими то второстепенными (или даже совсем убогими) фичами, которые к тому же и не работают толком. Но, поскольку программа все таки свободная - ничего не мешает существовать ее кастомным вариантам сборки, которые подчищены от несуществующих функций, сохраняя все преимущества существенных.

Наконец - две последние программы в списке, совсем не большие, написанные одним человеком, gCAD3D - с упором на скрипты (построение поверхностей) и SolveSpace - с упором на интерфейс (в линукс работает через wine), основной их минус в том, что сохраняемые STEP файлы записываются не корректно, и открываются не везде (в отличие от OpenCascade-based программ, в которых эта функция разработана на хорошем уровне).


Зависимость натяжения вант от температуры

Относительное изменение хорды оттяжки ε=ΔL/L связано с напряжением уравнением нити:

где P=p/A, Н/м^3 – поперечная нагрузка, Н/м, отнесенная к площади А, м^2; индекс "0" относится к величинам исходного состояния.
Примем за исходное состояние – состояние при температуре t и обозначим Δt=t-t0. При изменении температуры ствол деформируется на величину α·Δt, что повлечет за собой изменение длины оттяжки на ΔL = α·Δt·(sinβ)^2, где β – угол наклона оттяжки к горизонту. С изменением температуры поперечная нагрузка (собственный вес) не меняется, поэтому можно принять:
P = P0 = γ = g·cosβ /A,
где g – погонный вес, Н/м; А – площадь ванты.
Подставляя указанные величины в уравнение нити и производя преобразования, получаем разрешающее уравнение, позволяющее скорректировать напряжение с учетом изменения температуры:
или
где
Действительный корень уравнения определяется формулой:
Определив из уравнения величину напряжения при заданном перепаде температур определяем как обычно - умножением напряжения на площадь.
Указанная методика рекомендована в книге
Petersen, Chr. (1970): Guyed masts and chimneys, Verlag Ernst & Sohn, Berlin-München-Düsseldorf, Germany.
Ниже приведен код пользовательской функции для OOo Calc

Function otemp(T, T0, N0, A, g, E, L, beta, h)
' Возвращает тяжение стальной оттяжки мачты, тс, при заданной темературе T
'Описание величин
't = Заданная температура
'T0 - Начальная температура (среднегодовая температура воздуха)
'N0 - Начальное тяжение ванты, тс, при температуре T0
'A = Площадь оттяжки, мм2
'g = Погонный вес отттяжки, кгс/м
'E = Модуль Юнга оттяжки, кгс/см2
'L = Длина оттяжки, м
'beta = Угол наклона оттяжки к горизонту в градусах
'h = Высота ствола под оттяжкой
'Переобозначение переменных и перевод всех величин в систему кгс, см, рад.

N0=N0*1000
A=A/100
g=g/100
L=L*100
beta = beta*3.1416/180
h=h*100

alpha = 0.000012
Gamma = g * Cos(beta) / A
Delta = t - T0
s0 = N0 / A
C = Gamma ^ 2 * L ^ 2 * E / (24 * s0 ^ 3)
B = (1 - C - alpha * Delta * E * (1 - (h / L) * Sin(beta)) / s0)
z = 1 / 6 * (108 * C + 8 * B ^ 3 + 12 * Sqr(81 * C ^ 2 + 12 * C * B ^ 3)) ^ (1 / 3) + 2 / 3 * B ^ 2 / ((108 * C + 8 * B ^ 3 + 12 * Sqr(81 * C ^ 2 + 12 * C * B ^ 3)) ^ (1 / 3)) + 1 / 3 * B
'Искомое усилия тяжения в тс
N = z * s0 * A / 1000
otemp = N
End Function

Пример использования функции:

Maxima - определение напряжений в основании


[Напряжение.PNG]

Maxima и СНиП Нагрузки и Воздействия

Коэффициент динамичности при учете пульсационной составляющей (см. черт.2 СНиП 2.01.07-85*), вообще говоря, вычисляется по следующей зависимости (читайте теорию Барштейна - кстати оригинальный метод расчета на ветровую нагрузку):
[kdyn.PNG]
Внизу иллюстрации, как вы поняли, приведена таблица значений и графики для трех основных значений логдекремента (0.05- при расчетах на резонанс, 0,15 - расч. ветер - металл, 0,3 - ж/б).
Интеграл неэлементарный, вычисляется в Maxima численно. Демонстрирую, как:

[kdyn2-maxima.PNG]

Немного о математической оптимизации в инженерном деле...

Когда занимаешься деланием чего то, и имея некоторые исходные данные создаешь определенный продукт, рано или поздно встает вопрос об оптимизации. Вопрос об оптимизации очень неоднозначный.
Есть некоторые основные положения, которые можно сформулировать.
1) Математическая оптимизация как правило не нужна. Некоторые расчетные программы тем не менее имеют соответствующий модуль и ценят его высоко (чуть ли ни следующий уровень по цене). Почему это не нужно? Ну вот например я делаю вырезы в швеллере, чтобы облегчить вес. Простейшая, сравнительно легко решаемая задача для ANSYS. Но тут есть два момента - во первых оптимальное решение от исходного (типа нарисуй  те дыры навскидку) отличается процентов на 10-15. Это вообще типичная величина выгоды для математической оптимизации по сравнению со стандартным решением. Во вторых чтобы сэкономить этот десяток килограмм придется потратить цену раз в 10 большую чтобы просто вырезать их аккуратно.Таким образом подобная оптимизация если где то и нужна - то только в массовом производстве. Да и в массовом - в большинстве случаев имеет значение унификация, стандартизация, использование роботов в производстве и сокращение затрат на монтаж - то есть формальный оптимум по весу как правило очень далеко.
2) что оптимизировать - вес или деньги? Конечно как бы деньги и имеет смысл оптимизировать. Но деньги складываются из затрат труда и стоимости материалов. Затраты труда на практике пронормировать очень сложно. Можно только укрупненно и приблизительно.
3) критериев оптимизации как правило много. Потому что любой дизайн - нечеткое множество состояний. Так например оптимально, но неудобно по конструктивным соображением. Или например, нечто - уменьшает вес, но понижает живучесть в целом, если что то случиться.То есть не просто критериев много - но и формализовать их тоже сложно. Наконец даже чисто математически - оптимальная конструкция такова, что в ней напряжения распределены равномерно. То есть уже любой участок являясь напряженным - становится потенциальным слабым звеном - достаточно отклонения или дефекта в каком то одном месте, чтобы получить возможную проблему.
Я будучи студентом довольно много научных трудов и теорий читал по оптимизации, и насколько могу понимать - для научного работника это идеальный тип проблемы, которую можно решить. И вроде бы - практическая значимость обеспечивается по определению. Но к сожалению - все это не так, и если даже оптимизация чего либо и происходит - то научные труды нужны как раз меньше всего.
4) Говоря об оптимизации невозможно не отметить так называемую топологическую оптимизацию. То есть когда берется бесформенный кусок материала, прикладывается нагрузка и алгоритм, шаг за шагом просчитывая конструкцию, удаляет материал из слабонапряженных мест.
Такой вид оптимизации реализован в ANSYS Design Space, для плоских случаев можно использовать открытую (гениальную по простоте) программу
http://forcepad.sourceforge.net/
Опять же с практической точки зрения это в большинстве случаев бесполезно, потому что формообразование в индустрии (кроме может быть литья, да и то с большими оговорками) не таково, что взял и слепил что хочешь.




Об офисах


Говоря о разных офисах, на первое место конечно ставят Майкрософт Офис.
Вообще его старые версии мне очень нравятся. Я постоянно порываюсь купить, но увы - он по большому счету мне просто не нужен и даже даром.
Новые версии - слишком избыточно. То есть далеко до профессиональной системы, но слишком сложно для программы набора текста с картинками и таблицами.
Семейство открытых офисов - да, начиная со второй версии в них стало можно работать (особенно если пользоваться родным форматом). Да и сейчас их целых два и тоже неплохи сами по себе.
Есть еще такая легкая и минималистичная штука как Abi.
Инженеру нужно что то с рамками - конечно тут как минимум Опен Офис.
Наконец - Google Docs - тоже прекрасно и минималистично. Для студента например - лучше не придумаешь. Формулы набираются, таблицы вставляются, символы все под рукой.

Самый большой секрет офиса - в том что он, по большому счету перестал быть нужен. Ну вот если бы не делал я расчетов в табличных в редакторах, в основном в Calc, то пожалуй бы и не открывал офисные программы вообще. Может быть он и никогда особенно не был нужен, разве, что открыть и прочесть документы в определенном формате (а для этого всегда были бесплатные вьюверы) .
Сейчас вообще преобладает упор на профессиональный софт в большей мере, чем на какой то Офис, и  разработчикам  куда проще заменить его функции или просто свой редактор написать из стандартных компонентов.




ЖЕЛАЕМОЕ И ДЕЙСТВИТЕЛЬНОЕ В МЕТОДЕ КОНЕЧНЫХ ЭЛЕМЕНТОВ

(статья поправлена в некоторых существенных деталях и перестроена структурно)

Лет примерно 10 назад широко обсуждался цикл статей, за авторством кузбасского автора Назарова Д.И.

"СОВРЕМЕННОЕ СОСТОЯНИЕ ГЕОМЕТРИЧЕСКИ НЕЛИНЕЙНОГО КОНЕЧНО-ЭЛЕМЕНТНОГО АНАЛИЗА" и "РУССКАЯ РУЛЕТКА или анализ основных ошибок теории геометрического нелинейного метода конечных элементов"

РУССКАЯ РУЛЕТКА или анализ основных ошибок теории геометрически нелинейного метода конечных элементов

http://www.cad.dp.ua/obzors/stat.php
http://www.cad.dp.ua/obzors/st2r.php

И вот тут - ответ на нее
http://www.cad.dp.ua/obzors/stat-new.php


Коротко - мужик решил решить в ANSYS довольно простую сопроматовскую задачу (имеющую простое аналитическое решение).
При этом толком даже не зная, как и чего считается, методом тыка. получил ошибку. Сделал вывод  - что ANSYS это детище проклятых американских империалистов, засланное на нашу погибель.
(поправлено - не сам решал, а воспользовался примером CADFEM не соответствующем условию задачи)

Тут, конечно, ошибку нашли, и ткнули носом, что называется.
На чем вроде, инцидент оказался исчерпанным.

За год до этого, была другая статья, но к сожалению - ни автора, ни название я не припомню. Он тоже слегка наехал на ANSYS (почему то, хотя ничего ровным счетем особенного в этой программе нет, кроме популярности, и удобства - которое было верным на тот момент и относилось к "классической версии". Опять же удобство - по сравнению с чистым Fortran 77, на котором все корячились до этого. К слову, опять же, отвлекаясь - ANSYS поскормнее будет того же Abaqus, а сейчас таки и вообще куча замечательных кодов)

Так вот, смысл статьи был такой - что метод конечного элемента (как и конечных разностей и тд), конечно, хорош, но почему то все забывают о прорыве в аналитике, перспективах ассимптотических методов и так далее.
И вполне разумно (как мне это показалось) все это дело мотивировал. Смысл опять же - зачем нужны такие требования к вычислительной мощности компьютеров, когда - вот, в ближайшей перспективе у нас прорыв таки нереальный и тд и тп.

И говоря к слову,  Назаров, хотя и был не прав  в своих конкретных утверждениях, но все же некоторая доля истины в его статьях  присутствовала.
И его оппонент, выше по ссылке, в некоторых утверждениях был не вполне корректен.

1) простые нелинейные задачи решаются просто и сходятся почти всегда,
а вот задачи чуть посложней могут и не сходиться, даже с учетом всех "умных приемов" (типа половинного деления шага, метода засечек и т.д.), и, бывает, требуется много времени и усилий, чтобы получить решение.
Например - ванта из нескольких линков, не сильно натянутая, сходится очень плохо (нужно применять явные методы в которых "добавка" сил инерции решает проблему сходимости положительно). Много сложностей, бывает, возникает с контактными задачами, даже внешне простыми. Такого что "взял и решил" - пока что нет.

2) сертифицированность, популярность и возраст программ - имеют практическое значение, но это не докозательство корректности и абсолютности тех или иных методов (как любая ссылка на авторитет не является научным докозательством чего либо).

Итак, что можно сказать про численные методы, применительно к нелинейным задачам? А равно и про все прочие?
Насколько далеко шагнула наука в деле расчетов за последние 15 лет?

А никуда она не шагнула. Наука вообще перестала влять на умы. Вот есть куча мальчиков-зайчиков, которые носятся со своими "Скадами" и "ансисами", а наука где то там выводит двойные, тройные и криволиненые интегралы, никем уже не воспринимаемые и не понимаемые. Наука вытеснена маркетингом, и что самое удивительное, программы то развиваются на самом деле в гомеопатических дозах, проще говоря - не развиваются. Что и не удивительно, потому что наукой разработчики и продавцы софта - не занимаются (в софтверном бизнесе обычное соотношение затрат - 10% собственно на программы, 90% - на маркетинг и промывание мозгов)

Тем не менее, за последние двадцать лет широко шагнула вещь, называемая CAD, и расчетные программы неплохо подстроились под нее,
почти что умер (хотя я не совсем в курсе) ансис классический.
А, собственно, расчетные внутренности остались те же с 70х годов - тот же F77.

Что это дало в целом индустрии? Машины и конструкции стали легче и надежней? Да вот как раз все наоборот - зачастую, тяжелей и ненадежней.


Улучшился массовый уровень проектирования? Да нет- массовый то скорее не улучшился. Кстати самые крутые штуки (типа ракеты Сатурн-5 или Восток и прочее - прочее) были сделаны в эпоху, когда мощность крупного вычислительного центра была сопоставима с каким нибудь смартфоном или типа того (тут я могу ошибаться в цифрах).

В чем прелесть все таки современных методов расчета и моделирования?
В том что практически не надо рыться в Тимошенке и Вольмире, в поисках какой нибудь пластинки, а можно взять и посчитать десяток задач вроде этой пластинки в лоб за пару часов? Кстати Тимошенко то рулит до сих пор, и аналитические методы очень даже рулят - для той же верификации МКЭ, чтобы было с чем сравнивать. Упругая, допустим, задача - работает теорема единственности решения. Не важно в чем - в справочнике или в ANSYS-е.
Отдельно верифицируются крупные задачи, там где может играть роль накопление ошибок округления (везде - все тот же  REAL(8) )

Прелесть программ - в упрощении процесса проектирования, если вы им конечно владеете (имеется в виду - знаете, что делаете, включая, да, - того Тимошенко)
Тут, в некотором роде, погибель товарищам Назаровым, теперь при защите диссертации типа "НДС эллиптической оболочки, подкрепленной, ...тд и тп" начинают словами "вообще то следовало бы взять ANSYS, а все это дело выкинуть на помойку". Нет, конечно методы теории упругости, кроме численных, еще актуальны и очень интересны, но все менее - с практической точки зрения свое первоначальное значение они утратили.

Итак, все ли можно посчитать в современном МКЭ пакете или далеко не все?
Далеко не все можно и имеет смысл считать, и во многих случаях формулы рулили и будут рулить всегда, хотя бы потому, что НДС в них - малая часть задачи. Или в конечном итоге нагрузки и условия так нечетко определены, что чего то там моделировать нет просто практического смысла.

Коротко: передачи, что по AGMA, что по ГОСТ. На формулу НДС - несколько десятков коэффициентов, за которыми там НДС теряется. Плюс - нагруженность, условия работы. Все это всегда считалось и будет считаться как много лет назад. Никакие успехи численных методов особо не помогут.

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

Нелинейная устойчивость (решаемо на самом деле относительно легко явными методами http://www.impact-fem.org/ даже например)

ширина раскрытия трещин ЖБ (на опыте при одинаковых с виду перемычках может варьировать на порядок, как тут что то считать точно - не понятно).

И очень много таких вещей, в которых менять сложившиеся методы и сейчас и в перспективе глупо. Если только не изобретут квантовые компьютеры какие нибудь, так что нелинейная задача вместо нескольких часов не будет просчитываться за секунды.

(статья в режиме правки, уже ближе, но не все)