You are on page 1of 16

Module 10

Macro Basics
10. Macro Basics Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


One of the most powerful features of APDL (ANSYS
Parametric Design Language) is the ability to create macros.
A macro is a sequence of ANSYS commands stored in a file
and executed just like a regular command.
Some useful macro capabilities:
It can have arguments as in a standard ANSYS command.
Branching and looping to control the sequence of commands.
Interactive features such as graphical picking, prompting, and
dialog boxes.
Nested macros one macro calling a second one, which in turn
calls a third one, etc. up to 20 levels deep.

October 30, 2001


Inventory #001571
10-2
...Macro Basics Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


In this chapter, we will present the basics of macro writing:
A. Creating a Macro
B. Macro with Arguments
C. Branching
D. Looping
E. General Guidelines
F. Workshop

For more details, please refer to your APDL Programmers


Guide or the Programming in ANSYS seminar notes.

October 30, 2001


Inventory #001571
10-3
Macro Basics
A. Creating a Macro Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


To create a macro, simply start a text editor, insert the desired
sequence of commands, and save them to a file called
name.mac.
name can be up to 32 characters, starting with a letter.
Spaces are not allowed in the name.
Also avoid special characters.
Make sure that name is not a valid ANSYS command by
typing in name at Begin level and in all processors (PREP7,
POST1, etc.). If you get the message not a recognized
command or macro then the name is safe.
Extension .mac allows you to execute the macro as if it were a
command by simply typing in name.

October 30, 2001


Inventory #001571
10-4
Macro Basics
...Creating a Macro Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


Example:
A macro totvolume.mac to calculate the total volume of all
elements:
esel,all ! Select all elements
etable,volume,volu ! Store volume in element table
ssum ! Sum element table items
*get,totvol,ssum,,item,volume ! totvol = sum of volume
*stat,totvol ! List totvol value
Issue totvolume in POST1 (after a solve) to calculate the total
volume.

October 30, 2001


Inventory #001571
10-5
Macro Basics
...Creating a Macro Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


Search Path:
ANSYS will execute the first name.mac file it finds in the
following search sequence:
1. /ansys60/docu
2. directory(ies) in ANSYS_MACROLIB environment variable
3. login directory (home directory on Windows systems)
4. current (working) directory
If the search finds both upper-case and lower-case files of the
same name, the upper-case file is used.

October 30, 2001


Inventory #001571
10-6
Macro Basics
B. Macro with Arguments Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


By using special parameter names, you can create a macro
with up to 20 arguments:
NAME, arg1, arg2, arg3, , ar10, ar11, ar12, , ar20

The arguments behave just like the fields on a standard


ANSYS command and can accept:
numbers
alphanumeric characters (enclosed in single quotes)
parameters (scalar or array)
parametric expressions

The meaning of the arguments depends on how you want to


design the macro.

October 30, 2001


Inventory #001571
10-7
Macro Basics
...Macro with Arguments Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


For example, we could design totvolume.mac to calculate the
total volume for all elements of a specified type:
TOTVOLUME, TYPE

The macro would then look like this:


esel,s,type,,arg1 ! Select elements of specified type
etable,volume,volu ! Store volume in element table
ssum ! Sum element table items
*get,totvol,ssum,,item,volume ! totvol = sum of volume
*vwrite,arg1,totvol ! Write out arg1 and totvol
(Total volume for type , F4.0, elements = , F8.2)

Issuing totvolume,1 in POST1 after a solution will then result in:

October 30, 2001


Inventory #001571
10-8
Macro Basics
...Macro with Arguments Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


Notes:
The special parameter names ARG1-ARG9 and AR10-AR99 are
local parameters valid only within a macro.
They hold no meaning once the macro has finished execution
and control is returned to main ANSYS.
Avoid using these names elsewhere in the model.
Whenever you use arguments, be sure to describe their meaning
by including comments in the macro.
For example, the following comments at the beginning of
totvolume.mac would be helpful.
! Macro TOTVOLUME.MAC to calculate total volume of elements
! Usage: TOTVOLUME, TYPE - valid only in POST1 after a solve
! TYPE = valid element type number
esel,s,type,,arg1 ! Select elements of specified type

October 30, 2001


Inventory #001571
10-9
Macro Basics
C. Branching Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


By using an IF-THEN-ELSE construct, you can execute a command
or block of commands only if certain conditions are met.
Additional comparison operation are available for the *IF and
*ELSEIF commands with AND, OR, or XOR options.
*IF,A,EQ,B,AND,C,GT,D,THEN
Branching begins with *IF and ends with *ENDIF. *ELSEIF and
*ELSE are also allowed in between:
*if, x, eq, y, then


*elseif, x, eq, z, then


*else


*endif

*IF constructs can be nested up to twenty levels October 30, 2001


Inventory #001571
10-10
Macro Basics
...Branching Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


*if, x, eq, y, then

The condition can be: The action can be:


x, EQ, y !x=y THEN to execute the
x, NE, y !xy subsequent block of
commands
x, LT, y !x<y
x, GT, y !x>y *EXIT to exit a do-loop

x, LE, y !xy *CYCLE to skip to the end of a


do-loop
x, GE, y !xy
x, ABLT, y ! |x| < |y| The action takes place only if
x, ABGT, y ! |x| > |y| the condition is true.
Otherwise, ANSYS will move
x and y can be numbers, on to *ELSEIF (if present),
parameters, or parametric *ELSE (if present), and *ENDIF.
expressions.

October 30, 2001


Inventory #001571
10-11
Macro Basics
...Branching Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


For example, you can add an if-test to totvolume.mac to test
for valid values of the input argument:
*if,arg1,lt,1,then ! If arg1 < 1
*msg,warn ! Issue a warning...
Element type number must be 1 or greater
/eof ! and exit the macro
*endif
esel,s,type,,arg1 ! Select elements of specified type
etable,volume,volu ! Store volume in element table
ssum ! Sum element table items
...
Issuing totvolume,-1 will now result in:

October 30, 2001


Inventory #001571
10-12
Macro Basics
D. Looping Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


Do-loops allow you to loop through a block of commands
several times.
There is virtually no limit to what you can include in an
ANSYS do-loop. You can loop through an entire analysis
session including preprocessing, solution, and
postprocessing if the situation warrants it.
*DO or *DOWHILE begins a loop, *ENDDO ends it.
You can control the looping using *EXIT, which exits the do-loop,
and *CYCLE, which skips to the end of the do-loop.
Exit and cycle can also be done as a result of an if-test.

As an example, we can extend the totvolume.mac macro to


loop through all element types in the model and store the
volume for each type in an array parameter.
October 30, 2001
Inventory #001571
10-13
Macro Basics
...Looping Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


! -- Macro TOTVOLUME.MAC to calculate total element volume.
! -- Usage: Issue TOTVOLUME in POST1 after a solution.
! -- Result:
! -- a) evolume(i) = total volume for element type i
! -- b) totvol = grand total volume
!
*get,numtypes,etype,,num,count ! Get number of element types
*dim,evolume,array,numtypes ! Open a numtypes x 1 array
*do,i,1,numtypes ! For i = 1 - numtypes...
esel,s,type,,i ! Select elements of type i
etable,volume,volu ! Store volume in element table
ssum ! Sum element table items
*get,totvol,ssum,,item,volume ! totvol = sum of volume
evolume(i) = totvol ! Store totvol in evolume(i)
*enddo ! End of do-loop
*vscfun,totvol,sum,evolume(i) ! totvol = grand total volume
esel,all ! Activate full set of elements

October 30, 2001


Inventory #001571
10-14
Macro Basics
E. General Guidelines Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


Start with small, simple macros.
As you create the macro, remember that you can cut and
paste the commands into the ANSYS Input window to test
and make sure that the command sequence is correct.
Use comments to describe the intent or expected outcome of
commands.
Place your personal macros in your login directory.
Place company-wide macros in a directory that everyone can
access, and include that directory in ANSYS_MACROLIB
environment variable.

October 30, 2001


Inventory #001571
10-15
Macro Basics
F. Workshop Training Manual

INTRODUCTION TO ANSYS 6.0 - Part 2


This workshop consists of the following problem:
W9. Verifying Pressures

Please refer to your Workshop Supplement for instructions.

October 30, 2001


Inventory #001571
10-16

You might also like