Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / САПР изделий из композиционных материалов. Моделирование процессов деформирования и разрушения в среде ANSYS

.pdf
Скачиваний:
24
Добавлен:
19.11.2023
Размер:
68.45 Mб
Скачать

ГЛАВА 9

СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ

9.1. ßçûê APDL

Язык параметрического проектирования программы ANSYS (APDL) дает возможность автоматизировать процесс за счет «интеллектуального» анализа, т.е. за счет такой организации программы, когда решение принимается на основе установленных соотношений, зна- чений переменных и критериев. Язык проектирования APDL позволяет осуществить усложненный ввод исходных данных, что дает возможность управления вносимыми изменениями и такими основными объектами анализа, как геометрия, свойства материала, нагрузки, положение связей-ограничений и размеры конечно-элементной сетки. Использование языка APDL расширяет возможности программы за пределы традиционного конечно-элементного анализа и предоставляет более развитые процедуры, относящиеся к проверке чувствительности решения к изменениям исходных данных, параметрическому моделированию на основе базовых геометрических примитивов, внесению изменений в проект и его оптимизацию.

Язык APDL располагает следующими средствами, которые можно использовать раздельно или совместно:

параметры;

параметры-массивы;

выражения и функции;

операторы и команды;

ветвление и циклы;

макрокоманды;

процедуры пользователя.

161

Параметры

Язык APDL дает пользователю возможность использовать именованные переменные (параметры), значения которых задаются пользователем или вычисляются при работе программы. Параметры можно вводить на любой стадии работы программы ANSYS. Кроме того, их можно занести в файл, чтобы использовать в других сеансах работы или в других программах и отчетных документах. Параметры представляет собой удобное средство как для контроля входных данных, так и для упрощения их ввода.

Параметр задается в виде константы, выражения или строки символов. Параметр-константа представляет собой идентификатор, которому присвоено определенное значение. Так, например, пользователь может ввести константус помощью команды PI=3.1415926. После того как этот параметр определен, программа подставляет число 3.1415926 вместо аргумента PI любой разрешенной команды. Параметр-константу можно задать, используя условное выражение. Например, команда A=B<5.7 установит величину параметра À, равную текущему значению Â, åñëè Â меньше 5,7, в противном случае параметр À примет значение 5,7.

Выражение, определяющее параметр, может включать символы обычных математических действий и/или функций языка FORTRAN. Например, LENGTH=SQRT(X**2+Y**2). Теперь вместо параметра LENGTH программа будет подставлять его значение. Разрешено использовать арифметические операции, операции сравнения, выделение ближайшего целого и стандартные тригонометрические, экспоненциальные и гиперболические функции, принятые в языке FORTRAN.

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

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

162

метры. Например, функция NX(n) возвращает значение координаты X óçëà n. Эти функции обычно используются как аргументы параметров-вы- ражений, но их можно использовать всюду, где требуется получить численные значения.

Массив параметров

Этот тип данных, который используется в инженерном анализе и обычно является результатом такого анализа, лучше всего воспринимается в табличной форме. Наличие в программе ANSYS возможности использовать параметры-массивы облегчает обработку такого типа данных.

Параметр-массив представляет собой совокупности величин, которые можно представить в матричной форме. Матрицы могут быть одномерными (столбец и строка данных), двумерными (строки и столбцы), трехмерными (строки, столбцы и плоскости), четырехили пятимерными. Элементы массивов принимают значения, указанные пользователем или вычисленные программой ANSYS. Значения переменных, определенных пользователем, могут вводиться непосредственно во время сеанса работы программы или считываться из существующего файла данных.

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

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

163

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

Âлюбой момент работы программы параметры-массивы, так же, как

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

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

В основе любого структурного языка программирования лежат три алгоритмических конструкции: последовательное выполнение операторов, циклическое выполнение операторов и ветвление алгоритма.

Пример последовательного выполнения команд (прил. 3, листинг 2) при создании линейных элементов по узлам приведен в листинге 9.1.

Å,1,2

! Создаем элемент по узлам ¹ 1

è ¹ 2

Å,2,3

! Создаем элемент по узлам ¹ 2

è ¹ 3

Å,3,4

! Создаем элемент по узлам ¹

3

è ¹

4

Å,4,5

! Создаем элемент по узлам ¹

4

è ¹

5

Листинг 9.1. Пример последовательного выполнения операторов

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

164

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

В листинге 9.2 приведены примеры выражений (первые шесть параметрические) с использованием оператора присваивания (=), арифметических и логических операторов: сложения (+), вычитания (), умножения (*), деления (/), возведения в степень (**), сравнения (< или >), а также знака (!), после которого в строке выражения все символы игнорируются (комментарий). Ввод выражений может быть осуществлен непосредственно в командной строке или с помощью меню:

Utility MenuParameters Scalar Parameters...

X= A+B

P=(R2+R1)/2

D= -B+(E**2)-(4*A*C

XYZ=(A<B)+Y**2

INC= A1+(31.4/9

M=((X2-X1)**2-(Y2-Y1)**2)/2

QR= 2.07E11

CPARM= ‘CASE1’

!D = -B + E2 - 4A C

!XYZ = A + Y2, åñëè A<B;

!иначе XYZ = B + Y2

!QR = 2,07 1011

!Строковая переменная

Листинг 9.2. Примеры выражений

Интеллектуальный анализ нуждается в соответствующей логиче- ской основе, обеспечивающей принятие решения. В программе ANSYS эта основа строится с помощью процедур ветвления процесса и цикла. Оператор цикла освобождает пользователя от утомительного повторения команд, а ветвление дает возможность осуществлять всеобъемлющий контроль и управление программой при выполнении анализа.

9.2. Операторы цикла

Многократная повторяемость действий достигается использованием обычного оператора DO-цикла, который предписывает программе повторять некоторый набор команд. Число повторений контролируется счетчиком цикла или условиями выхода из цикла. Эти условия позволяют пропускать часть цикла или выполнять его полностью в зависимости от выполнения заданного условия.

165

Циклическое выполнение одного или группы операторов можно организовать несколькими способами: использованием оператора повтора, операторов явного и неявного цикла и оператора цикла по условию.

Оператор повтора действует только на предыдущую команду и не менее двух раз. Синтаксис оператора повтора:

*REPEAT, NTOT, VINC1, VINC2, VINC3, VINC4, VINC5, VINC6, VINC7, VINC8, VINC9, VINC10, VINC11.

Здесь значения переменной (или константы) NTOT число повторов; VINC1...VINC11 приращения параметров предшествующей команды.

Есть ограничения на применение этого оператора: в качестве параметров могут использоваться только числовые значения (целочисленные или вещественные, положительные или отрицательные, ноль или пробел); большинство команд, начинающихся со слеша (/) или звездочки (*), не повторяются с помощью этого оператора.

В качестве примера рассмотрим, как с помощью данного оператора можно достигнуть того же результата, что и при последовательном выполнении однотипных операций, приведенных в листинге 9.1 (листинг 9.3).

Е,1,2 ! Создаем элемент по узлам ¹ 1 и ¹ 2 repeat,3,1,1 ! Повторяем 3 раза, увеличивая на 1

! оба параметра команды Е

Листинг 9.3. Пример оператора повтора

Оператор явного цикла является наиболее популярным в программировании, особенно при вычислениях, реализующих МКЭ. Синтаксис оператора цикла:

*DO, Par, IVAL, FVAL, INC

{оператор или блок операторов}.

*ENDDO.

Здесь *DO определяет начало цикла; *ENDDO обозначает конец цикла; Par имя скалярной переменной-счетчика циклов, записанное по правилам образования имен переменных; IVAL начальное значение счетчика циклов; FVAL конечное значение счетчика циклов; INC приращение переменной-счетчика циклов (по умолчанию 1). Значения

166

переменных IVAL, FVAL, INC могут быть целочисленными или вещественными, положительными или отрицательными, ноль или пробел.

В качестве примера рассмотрим тот же фрагмент программы (см. листинг 9.1) с использованием оператора явного цикла (листинг 9.4).

*do,i,1,4

Å,i,i+1

*enddo

Листинг 9.4. Пример оператора явного цикла

В теле (внутри) оператора цикла могут использоваться следующие операторы:

оператор обхода внутри цикла *CYCLE, который игнорирует все операторы, следующие за ним до оператора *ENDDO; другими словами, передает управление на конец цикла, не заканчивая цикл;

оператор выхода из цикла *EXIT, который прерывает цикл, передавая управление оператору, следующему за *ENDDO; используется, как правило, с условным оператором *IF;

операторы условного *IF и безусловного *GO перехода (см. разд. 9.3). Операторы цикла могут быть вложены друг в друга со следующими

ограничениями: структура одного цикла не должна пересекаться со структурой другого цикла или условного оператора; максимальное число уровней вложений не должно превышать двадцати. В листинге 9.5 приведен пример четырехуровневого вложения операторов цикла при вычислении компонентов тензора 4-го ранга, например тензора упругих свойств в обобщенном законе Гука.

*DO,I,1,3

*Do,J,1,3

*dO,K,1,3

*do,L,1,3

C(I,J,K,L)=...

*enddo

*eNDdo

*Enddo

*ENDDO

Листинг 9.5. Пример вложений операторов цикла

167

Расположение в данном листинге начала и конца каждого цикла на равном расстоянии и использование различных регистров при написании операторов позволяет легче контролировать вложенность циклов без пересечения.

Другой способ циклического выполнения одной команды неявный цикл. Вместо листинга 9.1 можно коротко записать:

E,(1:4),(2:5)

Еще один способ использование оператора цикла по условию. Его синтаксис:

*DOWHILE, Par,

ãäå Par скалярный параметр, выступающий в качестве счетчика циклов; не может быть символьной переменной.

Оператор *dowhile повторяет блок операторов, ограниченный оператором *enddo, пока PAR не станет равным нулю. В листинге 9.6 показано, как с помощью этого оператора можно реализовать выполнение команд, приведенных в листинге 9.1.

i=1

j=4

*dowhile,j

E,i,i+1

i=i+1

j=j-1

*enddo

Листинг 9.6. Пример оператора цикла с условием

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

9.3. Операторы ветвления алгоритма

Операторы ветвления предписывают программе «принимать решение» на основе оценки состояния тех или иных объектов модели или параметров анализа. Это дает возможность пользователю выполнять параметрические расчеты, при которых значения определенных входных величин меняются в зависимости от полученных результатов.

168

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

Оператор безусловного перехода передает управление оператору с меткой label или завершает работу программы. Синтаксис оператора:

*GO, Base.

Здесь в качестве Base может быть:

:label определяемая пользователем метка, начинающаяся с двоеточия (:), максимум 8 символов. Предостережение: эта метка не должна пересекаться с конструкциями условного оператора или цикла по правилам вложенности этих конструкций;

STOP выход от программы ANSYS.

Условный оператор позволяет реализовать множество вариантов ветвления алгоритма. Синтаксис оператора:

*IF, VAL1, Oper, VAL2, Base.

Здесь VAL1, VAL2 числовые значения (или переменные, содержащие числовое значение) в операции сравнения. VAL1 и VAL2 могут также быть символьными строками (включенными в одинарные кавычки) или символьными переменными (только для Oper = EQ и NE); Oper операция сравнения (с точностью до 1010 для сравнения вещественных чисел) выражается следующим образом:

EQ равно (VAL1=VAL2);

NE не равно (VAL1 VAL2);

LT меньше (VAL1 < VAL2);

GT больше (VAL1 > VAL2);

LE меньше или равно (VAL1 VAL2);

GE больше или равно (VAL1 VAL2);

ABLT – меньше по модулю;

ABGT больше по модулю.

В качестве Base может быть:

:label определяемая пользователем метка, начинающаяся с двоеточия (:), максимум 8 символов. Предостережение: эта метка не должна пересекаться с конструкциями условного оператора или цикла по правилам вложенности этих конструкций;

169

STOP выход от программы ANSYS;

EXIT выход из цикла;

CYCLE переход на конец цикла;

THEN открытие конструкции условного оператора, завершается оператором *ENDIF.

В конструкции условного оператора используются операторы *ELSE (иначе) и *ELSEIF (иначе, если). Действие условного оператора следующее: если логическое выражение истинно, то выполняются операторы, следующие за THEN до ближайшего *ELSEIF, если в данном операторе условие не выполняется, то передается управление следующему оператору *ELSEIF и т.д. Если ни одно логическое выражение не выполняется, то исполняются операторы (команды), следующие за *ELSE.

В листинге 9.7 приведен пример ветвления алгоритма и соответствующий код программы. Как и операторы цикла, условные операторы могут быть вложены друг в друга, число вложений не может превышать 10.

Листинг 9.7. Пример условного оператора и соответствующей блок-схемы алгоритма

В листинге 9.8 показано, как с помощью условного оператора можно реализовать циклическое выполнение команд, представленное в листинге 9.1.

170