5 - 2015

Об одной задаче моделирования контакта оболочки и объема в ANSYS Workbench

Виталий Бруяка
К.ф.м.н., доцент, ФГБОУ ВПО «Самарский государственный технический университет», Самара

Необходимость моделировать контакт в задачах инженерного анализа изделий возникает довольно часто. В классическом интерфейсе ANSYS для этого используется мастер контактов (Contact Wizard), с помощью которого можно вручную создавать контактные пары, задавать модели контакта и другие необходимые параметры. В Workbench имеется процедура автоматического распознавания контактных пар и назначения для них параметров по умолчанию. Пользователь может управлять этой процедурой путем подключения или отключения необходимых типов контактных пар для автоматического распознавания или отключить ее полностью и создать контактные пары самостоятельно. Тем не менее таких возможностей ANSYS для формирования нужного взаимодействия геометрических объектов иногда оказывается недостаточно. В качестве примера рассмотрим следующую постановку задачи. Имеется цилиндрический бак, на внутренней поверхности которого в различных местах установлены плоские перегородки. Бак заполнен жидкостью так, что указанные перегородки полностью или частично затоплены. Необходимо определить собственные частоты и формы колебаний бака с жидкостью или рассчитать отклик системы на заданное вибрационное нагружение. Подобная задача может быть актуальна для инженерного анализа транспортных емкостей, заполненных жидкостью (топливные баки, цистерны и пр.), в которых такие внутренние перегородки выполняют функцию гасителей колебаний жидкости.

Очевидно, что заменить жидкость на гидростатическое давление, приложенное к внутренней поверхности бака и перегородкам, нельзя, так как в данном случае необходимо решать задачу модального и (или) гармонического анализа. Жидкость можно смоделировать, заполнив бак объемным телом до нужной высоты. В этом случае можно создать контакт только между боковой поверхностью бака и объемом жидкости, поскольку имеется поверхность их сопряжения. Между объемом жидкости и перегородками, частично или полностью «затопленными» жидкостью, такой поверхности нет, а значит, привычным способом смоделировать контакт невозможно. Отсутствие этого контакта приведет к тому, что расчетные частоты и формы колебания объема жидкости в баке окажутся неверными, так как перегородки не будут оказывать никакого влияния на колебательный процесс. Упрощенная геометрическая модель для подобной задачи показана на рис. 1.

Рис. 1. Геометрическая модель бака с перегородкой, частично заполненного жидкостью

Рис. 1. Геометрическая модель бака с перегородкой, частично заполненного жидкостью

Одним из путей разрешения этой ситуации является создание макроса с использованием команд ANSYS и языка APDL, который осуществляет автоматический поиск и связывание по степеням свободы близлежащих узлов объема жидкости и узлов перегородки, реализуя тем самым известное в гидродинамике «условие прилипания». Разработка подобного макроса предполагает решение следующих алгоритмических задач: как отличить узел элемента жидкости от узла элемента пластинки, как выбрать ближайший узел и др.? При связывании нужно следить, чтобы один и тот же узел не попал в несколько наборов связывания. Кроме того, для расчетных моделей с большим количеством узлов целесообразно однократно определить необходимые узлы для связывания и в дальнейшем указывать их, а не запускать макрос всякий раз при изменении граничных условий задачи. Однако при любых модификациях расчетной сетки такой макрос должен быть выполнен повторно.

При реализации вышеуказанного макроса в ANSYS возможны разные подходы, различающиеся сложностью кода, скоростью работы и адекватностью получаемых результатов. Алгоритм и программный код, представленные в статье, вообще говоря, нельзя считать оптимальными, однако полученный макрос позволяет достаточно эффективно решать возложенные на него задачи.

Первое, что следует сделать, — это создать в модуле Mechanical платформы Workbench два новых компонента (Named Selection), в один из которых включить объем, моделирующий жидкость, в другой — оболочку, моделирующую перегородку (если их несколько, то нужно указать все). Это необходимо, так как в дальнейшем мы будем обращаться к элементам и узлам данных компонентов. При этом следует помнить, что при создании компонента из объемных тел в него передаются элементы, а при создании компонента из оболочек — узлы.

Затем нужно вручную указать тип конечного элемента, моделирующего жидкость. Если при разбиении объема жидкости невозможно избежать появления пирамидальных или клиновидных элементов, то вместо элемента FLUID80 следует использовать элемент FLUID30. Также необходимо отметить, что для обеспечения связывания всех узлов перегородки важно, чтобы размеры ее элементов были больше, чем размеры элементов жидкости.

Рис. 2. Блок-схема алгоритма выбора узлов

Рис. 2. Блок-схема алгоритма выбора узлов

Следующим шагом нужно создать макрос, осуществляющий связывание степеней свободы нужных узлов. Блок­схема алгоритма выбора узлов представлена на рис. 2, а текст макроса приведен в конце статьи. Внешний цикл выполняется по узлам элементов перегородки (shell­узлы). Для текущего узла элемента перегородки выбираются все элементы, попадающие в куб с заданной длиной ребра, среди которых сначала отбираются только элементы, моделирующие жидкость, а затем их узлы (solid­узлы). После этого определяется ближайший по расположению узел из полученного набора, все степени свободы которого связываются с текущим узлом перегородки, и для найденного узла в отдельном массиве задается соответствующий признак (в ячейку массива с номером этого узла записывается значение 1). В дальнейшем, если этот же узел окажется выбранным для связи с другим узлом элемента перегородки, программа просто перейдет к следующей итерации.

Рис. 3. Форма колебаний бака с жидкостью (вода): а — частота 0,16 Гц; б — частота 34,8 Гц Рис. 3. Форма колебаний бака с жидкостью (вода): а — частота 0,16 Гц; б — частота 34,8 Гц

Рис. 3. Форма колебаний бака с жидкостью (вода): а — частота 0,16 Гц; б — частота 34,8 Гц

Для удобства обращения внутри циклов к отдельным узлам созданных компонентов целесообразно передать все узлы в соответствующие массивы. Размерность массива определяется числом узлов компонента. С целью исключения ситуации, когда одна и та же степень свободы узла входит в разные наборы связывания, важно запоминать номера узлов, подлежащих связыванию. Здесь также можно использовать массив, однако хранить в его ячейках номера связанных узлов нецелесо­образно, поскольку проверка вхождения текущего узла в какой­либо набор для связывания на каждой итерации выполняется путем поиска его номера в данном массиве, что значительно увеличивает время работы макроса. Одним из способов решения данной проблемы является использование порядкового номера ячейки массива для идентификации узла, а в самой ячейке достаточно сохранить только признак: 0 — если узел свободен, 1 — если узел входит в какой­либо набор связывания. В этом случае поиск по массиву не производится, а сразу проверяется содержимое ячейки с заданным номером, равным номеру текущего узла. К недостатку данного способа следует отнести тот факт, что количество ячеек в таком массиве должно соответствовать количеству узлов модели.

По завершении работы макроса создается текстовый файл с командами связывания выбранных узлов, который может использоваться в дальнейшем. Файл создается в папке MECH рабочей папки проекта Workbench. В случае изменения КЭ­сетки макрос следует запустить вновь. Кроме того, макрос создает графический файл в формате VRML, содержащий связанные узлы в объемном представлении. Вместо узлов можно записать элементы — для этого вместо команды NPLOT в соответствующем месте макроса необходимо использовать команды ESLN и EPLOT.

Некоторые результаты модального анализа для бака с одной перегородкой, заполненного жидкостью, показаны на рис. 3. Колебания перегородки передаются жидкости через связанные степени свободы узлов, что позволяет правильно рассчитывать собственные частоты и формы колебаний.

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

! ОСНОВНЫЕ УПРАВЛЯЮЩИЕ ПЕРЕМЕННЫЕ МАКРОСА:

! Csurf — компонент, содержащий узлы перегородки. Должен быть создан до начала работы макроса.

! Cliqu — компонент, содержащий элементы объема жидкости. Должен быть создан до начала работы макроса.

! dlta — параметр, определяющий размер области поиска узлов для связывания. Принимается на основе размера элементов расчетной сетки.

! sfstep — параметр, задающий шаг по узлам компонента Csurf. Если sfstep=1, то будет пройден каждый узел компонента Csurf.

! fnum — номер конечного элемента, моделирующего жидкость. В зависимости от формы применяемых КЭ могут использоваться элементы FLUID30 или FLUID80.

! fout — строка с именем выходного файла с командами связывания.

!=========================================================

FINISH

dlta=70

sfstep=1

fnum=80

fout=’cpout’

/PREP7

CMSEL,S,Csurf ! Выбираем узлы компонента Csurf

*GET,nnum_s,NODE,,COUNT ! Определяем количество узлов компонента Csurf

*GET,nmin_s,NODE,,NUM,MIN !Сохраняем наименьший номер узла компонента Csurf

!­­­Переносим номера всех узлов Csurf в массив

*DIM,sndarr,,nnum_s,1

sndarr(1)=nmin_s

*DO,i,2,nnum_s,1

 sndarr(i)=NDNEXT(nmin_s)

 nmin_s=NDNEXT(nmin_s)

*ENDDO

CMSEL,S,Cliqu ! Выбираем узлы компонента Csurf

*GET,emin_w,ELEM,,NUM,MIN ! Cохраняем наименьший номер элемента

NSLE,S,ALL ! Выбираем все узлы всех элементов компонента Cliqu

*GET,nnum_w,NODE,,COUNT

*GET,nmin_w,NODE,,NUM,MIN

ALLSEL,ALL

*DIM,cpn,,3000000,1 ! Создаем массив для связанных узлов (число ячеек — 3 млн)

*CFOPEN,fout,’txt’ ! Открываем файл для записи команд

!­­­ Определяем номер для набора связывания по последнему на данный момент (переменная k). Если таких наборов нет, то k=1.

k=0

*GET,k,CP,0,MAX

*IF,k,EQ,0,THEN

 k=1

 *ELSE

 k=k+1

*ENDIF

!­­­ Цикл по узлам компонента Csurf. Номер узла на текущей итерации записывается в переменную cN_s

*DO,i,1,nnum_s,sfstep

 cN_s=sndarr(i)

!­­­ Поиск узла для связывания

 NSEL,S,LOC,X,NX(cN_s)­dlta,NX(cN_s)+dlta

 NSEL,A,LOC,Y,NY(cN_s)­dlta,NY(cN_s)+dlta

 NSEL,A,LOC,Z,NZ(cN_s)­dlta,NZ(cN_s)+dlta

 ESLN,S,1

 ESEL,R,ENAME,,fnum

 NSLE,S

 NSEL,A,NODE,,cN_s

 cN_l=NNEAR(cN_s)

 NSEL,S,NODE,,cN_s

 *IF,cN_l,EQ,0,THEN

 *CYCLE

 *ELSE

 NSEL,A,NODE,,cN_l

 *ENDIF

!­­­ Если узел ранее не связывался, то в командный файл записываются команды связывания двух узлов по всем степеням свободы

 *IF,cpn(cN_l),EQ,0,THEN

 CP,k,UX,cN_s,cN_l

 *CFWRITE,CP,k,UX,cN_s,cN_l

 CP,k+1,UY,cN_s,cN_l

 *CFWRITE,CP,k+1,UY,cN_s,cN_l

 CP,k+2,UZ,cN_s,cN_l

 *CFWRITE,CP,k+2,UZ,cN_s,cN_l

 cpn(cN_l)=1

 k=k+3

 *ENDIF

*ENDDO

*CFCLOSE

!­­­ Запись связанных узлов во внешний графический файл (формат VRML)

/SHOW,VRML

*DO,i,1,k­1,3

 *IF,i,EQ,1,THEN

 NSEL,S,CP,,i

 *ELSE

 NSEL,A,CP,,i

 *ENDIF

*ENDDO

NPLOT

/SHOW,CLOSE

ALLSEL,ALL

FINISH

/SOLU

САПР и графика 5`2015