Буквари для Инженеров
Скачать 1.52 Mb.
|
*IF. Кратко они следующие: EQ – равно (дляVAL1 = VAL2). NE – не равно (дляVAL1 ≠ VAL2). LT – меньше чем (дляVAL1 < VAL2). GT – больше чем (дляVAL1 > VAL2). LE – меньше чем или равный (дляVAL1 ≤ VAL2). GE – больше чем или равный (для VAL1 ≥ VAL2). ABLT – абсолютные значения VAL1 и VAL2 перед выполнением операции <. ABGT – абсолютные значения VAL1 и VAL2 перед выполнением операции >. Давая аргументуBase значение THEN, команда *IF становится началом конст- рукции "если-тогда-иначе". Конструкция состоит из • Команды *IF, сопровождаемой • Одной или более дополнительными командами *ELSEIF • Дополнительной командой *ELSE стр. 58 из 76 • Необходимой командой *ENDIF, отмечающей конец конструкции. ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru В ее самой простой форме, команда *IF выполняет сравнение и, если это сравне- ние истинно, то выполняется переход к метке, определенной в аргументе Base. (В комби- нации, ряд таких команд *IF может функционировать подобно команде CASE в других языках программирования.) Чтобы не выполнить переход к метке используются конст- рукции «if-then-else» или «do-loop». Если поток данных выходит в конец файла из-за лож- ного условия *IF, то сеанс ANSYS не будет закончен как обычно. Вы будете должны за- кончить его извне (используйте в UNIX "kill" функцию или менеджера задачи Windows). Устанавливая значение STOP в аргумент Base, Вы можете выйти из ANSYS осно- вываясь на специальном условии. Конструкция «if-then-else» просто проверяет условие и выполняет следующий блок или переходит к следующей команде после команды *ENDIF (показано комментарием "Continue"). *IF,A,EQ,1,THEN ! Block1 *ENDIF ! Continue Следующий пример демонстрирует более сложную структуру. Обратите внимание, что только один блок может быть выполнен. Если ни одно из условий не имеет значение «истина», то выполняется блок после команды *ELSE. Рис. 4.4. пример конструкции «if-then-else». Прмечание Вы можете использовать команду /CLEAR в пределах конструкции «if-then-else». Команда /CLEAR не очищает *IF стек и число *IF уровней сохраняется. Командой *ENDIF необходимо закрывать любую выполняющую переход логику. Кроме того, имей- те в виду, что команда /CLEAR удаляет все параметры, включая любые параметры, кото- рые используются в ваших командах, выполняющих переход. Вы можете избежать любых проблем, которые могли бы явиться результатом удаления параметров, использовав ко- манду PARSAV перед /CLEAR, и затем после /CLEAR выполнить команду PARRES. стр. 59 из 76 ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru 4.4.4. Повторение команды Самая простая возможность зацикливания это команда *REPEAT, которая позволя- ет Вам выполнять предыдущую команду указанное количество раз, увеличивая любое по- ле в той команде на постоянное значение. В следующем примере E,1,2 *REPEAT,5,0,1 команда создает один элемент между узлами 1 и 2, а следующая команда *REPEAT определяет, что команда E выполняется в общей сложности пять раз (включая первона- чальную команду E), увеличивая номер второго узла на единицу при каждом дополни- тельном выполнении. Результат - пять конечных элементов связанных по узлам 1-2, 1-3, 1- 4, 1-5, и 1-6. Примечание Большинство команд, которые начинаются со слэша (/) или звездочки (*), так же как и макросы, выполненные как "неизвестные команды," не могут быть повторены. Од- нако, графические команды, которые начинаются со слэша, могут повторяться. Кроме то- го, избегайте использовать команду *REPEAT с интерактивными командами, типа тех, ко- торые требуют интерактивного выбора объектов или тех, которые требуют ответа пользо- вателя. 4.4.5. Циклы: Do-Loops Цикл позволяет Вам повторять ряд команд указанное количество раз. Команды *DO и *ENDDO отмечают начало и конец цикла. Команда *DO имеет следующий синтак- сис: Следующий пример цикла редактирует пять файлов шагов нагружения (нумеро- ванные от 1 до 5), и делает одни и те же изменения в каждом файле. *DO,I,1,5 ! для I = 1 до 5: LSREAD,I ! считывание файла нагружения I OUTPR,ALL,NONE ! внесение изменений по выходным данным ERESX,NO LSWRITE,I ! перезапись файла нагружения I *ENDDO Вы можете добавить ваши собственные циклы управления при использовании ко- манд *IF, *EXIT или *CYCLE. Создавая циклы, помните следующие рекомендации. • Не выполняйте выход из цикла к метке :Label на командах *IF или *GO. • Избегайте использовать :Label для выполнения перехода к другой строке в преде- лах цикла. Используйте вместо этого конструкцию if-then-else-endif. • Выходные данные от команд в пределах цикла автоматически подавляются после первого обхода. Используйте команды /GOPR или /GO в пределах цикла, если Вы хотите видеть выходные данные для всех обходов цикла. • Будьте внимательны, если Вы используете команду /CLEAR в пределах цикла. Ко- манда /CLEAR не очищает стек цикла, но она очищает все параметры, включая па- раметр цикла заявленный в команде *DO. Вы можете избежать проблемы наличия неопределенного значения параметра обхода цикла, используя команду PARSAV перед командой /CLEAR, и затем, после команды /CLEAR команду PARRES. стр. 60 из 76 ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru 4.4.6. Неявные циклы Do Loops Вы можете использовать принятое соглашение для цикла (двоеточие). Использова- ние этого соглашения обычно ускоряет процесс обработки данных, потому что цикл дела- ется в памяти. Правильный синтаксис: (x:y:z) z по умолчанию равен 1, если не определено другое значение. Например: n,(1:6),(2:12:2) выполнит те же самые шаги как и приведенные ниже: n,1,2 n,2,4 n,3,6 n,6,12 Когда используете неявные циклы знайте, что управляет выполнением самое ко- роткое выражение. Например, n,(1:7),(2:12:2) вел бы себя тождественно примеру показанному выше. Дополнительные числовые поля, которые не имеют двоеточия (:), будут считаться как постоянное значение. Кроме того, нецелые числа будут функционировать как обычно. Однако, если не- целые числа будут применены к команде, которая требует целых чисел, то тогда нецелое число будет округлено в соответствии с правилами математики. Это соглашение по циклам может использоваться только для полей, требующих числового ввода. Текстовое поле ввода обработает (x:y:z) буквально. 4.4.7. Дополнительный цикл: Do-While Вы можете выполнять функции цикла, которые повторяются неопределенное коли- чество раз, пока внешний параметр не изменяется. Команда *DOWHILE имеет следующий синтаксис: *DOWHILE,Parm Повторение цикла происходит пока параметр Parm имеет значение «истина». Если Parm становится ложным (меньше чем или равный 0.0), цикл заканчивается. Команды *CYCLE и *EXIT могут использоваться в пределах цикла *DOWHILE. 4.5. Краткий справочник функций управления Следующая ниже таблица описывает команды APDL, которые выполняют функции управления в пределах макроса. Большинство важной информации об этих командах приведено здесь, но Вы може- те посмотреть на полные описания команд в справочной системе ANSYS. стр. 61 из 76 ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru Команды APDL Выполняемое действие Примечания *DO Определяет начало цикла. Команды после команды *DO выполняются (до команды *ENDDO) задан- ное количество раз. • Вы можете также управлять циклом через ко- манду *IF. • ANSYS допускает до 20 уровней вложенности циклов, хотя циклы, которые включают /INPUT, *USE, или "неизвестную" команду макроса, имеют меньше уровней вложения, по- тому что они делают внутреннюю смену фай- ла. • Команды *DO, *ENDDO, *CYCLE, и *EXIT должны все считываться из файла или вводить- ся с клавиатуры. • Не включайте операции интерактивного вы- бора в циклы. • Будьте внимательны, если Вы используете ко- манду /CLEAR в пределах цикла. Команда /CLEAR не очищает стек цикла, но она очища- ет все параметры, включая параметр цикла за- явленный в команде *DO. Вы можете избежать проблемы наличия неопределенного значения параметра обхода цикла, используя команду PARSAV перед командой /CLEAR, и затем, по- сле команды /CLEAR команду PARRES. *ENDDO Обозначает окончание цикла и запускает его на выполнение. Вы должны использовать одну команду *ENDDO для каждого вложенного цикла. Команды *ENDDO и *DO для цикла должны быть в одном и том же файле. *CYCLE Выполняя цикл, ANSYS обходит все команды ме- жду командами *CYCLE и *ENDDO, а затем (если применимо) начинает сле- дующий обход. Вы можете использовать опцию цикла по условию (через команду *IF). Команда *CYCLE должна быть в том же самом файле где и команда *DO и должна находиться перед командой *ENDDO. *EXIT Выходы цикла. Команда выполняется после команды *ENDDO. Команды *EXIT и *DO для цикла должны быть в том же самом файле. Вы можете использовать оп- цию выхода по условию (через команду *IF). стр. 62 из 76 ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru стр. 63 из 76 Команды APDL Выполняемое действие Примечания *IF Команда для считывания условия. • Вы можете иметь до 10 вложенных уровней *IF блока. • Вы не можете перескочить из или в пределах цикла или конструкции "if-then-else" к строке с меткой :label, и переход к строке с меткой :label не допускается вводом с клавиатуры. • Вы можете использовать команду /CLEAR в пределах конструкции "if-then-else". Команда /CLEAR не очищает *IF стек и число *IF уровней сохраняется. Команда *ENDIF необ- ходима для закрытия любой выполняющий переход конструкции. • Команда /CLEAR удаляет все параметры, включая любые параметры, которые исполь- зуются в ваших командах, выполняющих пе- реход. Вы можете избежать любых проблем, которые могли бы явиться результатом удале- ния параметров, использовав команду PARSAV перед /CLEAR, и затем после /CLEAR выпол- нить команду PARRES. *ENDIF Заканчивает конструкцию "if-then-else". Команды *IF и *ENDIF должны находиться в одном и том же файле. *ELSE Создает заключительный дополнительный раздел блока в пределах конст- рукции "if-then-else". Команды *ELSE и *IF должны находиться в од- ном и том же файле. *ELSEIF Создает дополнительный, промежуточный раздел блока в пределах конст- рукции "if-then-else". Если Oper = EQ или NE, VAL1 и VAL2 могут быть строками символов (заключенные в одиночные кавычки) или параметрами. Команды *IF и *ELSEIF должны находиться в одном и том же файле. 4.6. Использование параметров _STATUS и _RETURN в макросах Программа ANSYS генерирует два параметра, _STATUS и _RETURN, которые Вы можете также использовать в вашем макросе. Например, Вы могли бы использовать зна- чение _STATUS или _RETURN в конструкциях «if-then-else», чтобы получить макрос, ко- торый предпринимает некоторое действие, основанное на результате выполнения коман- ды или функции ANSYS. Функции твердотельного моделирования создают параметр _RETURN, который содержит результат выполнения функции. Следующая таблица определяет значения _RETURN для различных функций твердотельного моделирования: Таблица 4.1. Значения параметра _RETURN Команда Функция Значение параметра _RETURN Точки K Определяет точку Номер точки KL Точка на линии Номер точки ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru стр. 64 из 76 Команда Функция Значение параметра _RETURN KNODE Точка на узле Номер точки KBETW Точка между двумя точками Номер точки KCENTER Точка в центре Номер точки Линии BSPLIN Создает сплайн Номер линии CIRCLE Создает дугу окружности Номер первой линии L Линия между двумя точками Номер линии L2ANG Линия под углом к двум линиям Номер линии LANG Касательная к двум линиям Номер линии LARC Определяет дугу окружности Номер линии LAREA Линия между двумя точками Номер линии LCOMB Объединяет две линии в одну Номер линии LDIV Делит линии на две или более линии Номер первой точки LDRAG Линия вытянутая по точкам Номер первой линии LFILLT Линия скругления между двумя линиями Номер линии скругления LROTAT Дуга относительно точки поворота Номер первой линии LSTR Прямая линия Номер линии LTAN Линия из конца и по касательной Номер линии SPLINE Сегмент сплайна Номер первой линии Поверхности A Поверхность по точкам Номер поверхности ACCAT Объединяет две и более поверхности Номер поверхности ADRAG Протаскивание линии вдоль пути Номер первой поверхности AFILLT Скругление по пересечению двух поверх- ностей Номер поверхности скругле- ния AL Поверхность ограниченная линиями Номер поверхности ALPFILL Все циклы Номер поверхности AOFFST Поверхность смещенная относительно данной поверхности Номер поверхности AROTAT Поворот линий вокруг оси Номер первой поверхности ASKIN Натягивает поверхность по направляю- щим линиям Номер первой поверхности ASUB Поверхность используя форму сущест- вующей поверхности Номер поверхности Объемы V Объем по точкам Номер объема VA Объем Номер объема VDRAG Протаскивание поверхности вдоль траек- тории для создания объема Номер первого объема VEXT Объем выдавливанием поверхности Номер первого объема VOFFST Объем смещением относительно данной поверхности Номер объема VROTAT Объем поворотом поверхности Номер первого объема Выполнение команды ANSYS в макросе или в другом месте, создает параметр _STATUS. Этот параметр отражает состояние выполнения этой команды: • 0 нет ошибки ANSYS Release 10.0 Documentation / APDL Programmer's Guide Буквари для Инженеров http://cyberkolbasa.com1.ru • 1 для примечания • 2 для предупреждения • 3 для ошибки 4.7. Использование макросов с отдельными компонентами и бло- ками Чтобы сделать большие модели легко управляемыми, Вы можете разделить модель на отдельные компоненты, основанные на различных типах объектов: узлах, элементах, точках, линиях, поверхностях или объемах. Каждый компонент может содержать только один тип объекта. Это даст Вам возможность легко выполнить задачи типа приложения нагрузок или создания графических видов по отдельности на различных частях модели. Вы можете также создать блоки, которые являются группами скомбинированными из двух или более компонентов или даже мультиблоки. Вы можете вкладывать блоки до пятого уровня вложенности. Например, Вы можете построить блок, названный motor из компонентов по имени STATOR, PERMMAG, ROTOR, и WINDINGS. Следующая ниже таблица описывает некоторые из команд, которые Вы можете ис- пользовать, чтобы строить компоненты и блоки. Для более детального обсуждения этих команд см. справочную систему ANSYS. Для получения дополнительной информации от- носительно компонентов и сборок см. Selecting and Components в ANSYS Basic Analysis Guide. СМ Группы элементы геометрии в компонент. CMDELE Удаляет компонент или блок. CMEDIT Редактирует существующий компонент или блок. ANSYS обновляет блоки автоматически, чтобы отразить удаления низшего уровня или блоков. CMGRP Компоненты групп и блоки в один блок. Однажды определенный блок может быть выведен в листинг, удален, селектирован или анселектиро- ван с использованием тех же самых команд что и для компонентов. CMLIST Листинг объектов, содержащихся в компоненте или блоке. CMSEL Выбирает подмножество компонентов и блоков. 4.8. Примеры макросов Ниже следуют два примера макросов. Первый пример макроса, названный o ff- set.mac, смещает выбранные узлы в препроцессоре PREP7. Этот макрос выполнен толь- ко в целях демонстрации, потому что для этого более удобно применить команду NGEN. ! Макрос смещает выбранные узлы в PREP7 ! Следующий ниже файл сохранен как: offset.mac (нижний регистр) ! Использование: offset,dx,dy,dz /nop ! подавление вывода команд для этого макроса *get,nnode,node,,num,max ! получить количество узлов *dim,x,,nnode ! определение массивов для координат узлов *dim,y,,nnode *dim,z,,nnode *dim,sel,,nnode ! определение массива для выбранного вектора *vget,x(1),node,1,loc,x ! получение координат стр. 65 из 76 |