16
Macro Basics Module 10

2_10-macro

Embed Size (px)

Citation preview

Page 1: 2_10-macro

Macro Basics

Module 10

Page 2: 2_10-macro

October 30, 2001

Inventory #001571

10-2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual10. Macro Basics

• 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.

Page 3: 2_10-macro

October 30, 2001

Inventory #001571

10-3

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual...Macro Basics

• 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 Programmer’s Guide or the Programming in ANSYS seminar notes.

Page 4: 2_10-macro

October 30, 2001

Inventory #001571

10-4

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

A. Creating a Macro

• 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.

Page 5: 2_10-macro

October 30, 2001

Inventory #001571

10-5

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Creating a Macro

• Example:

– A macro totvolume.mac to calculate the total volume of all elements:

esel,all ! Select all elementsetable,volume,volu ! Store volume in element tablessum ! 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.

Page 6: 2_10-macro

October 30, 2001

Inventory #001571

10-6

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Creating a Macro

• 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.

Page 7: 2_10-macro

October 30, 2001

Inventory #001571

10-7

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

B. Macro with Arguments

• 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.

Page 8: 2_10-macro

October 30, 2001

Inventory #001571

10-8

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Macro with Arguments

• 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 typeetable,volume,volu ! Store volume in element tablessum ! 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:

Page 9: 2_10-macro

October 30, 2001

Inventory #001571

10-9

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Macro with Arguments

• 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 numberesel,s,type,,arg1 ! Select elements of specified

type……

Page 10: 2_10-macro

October 30, 2001

Inventory #001571

10-10

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

C. Branching

• 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

Page 11: 2_10-macro

October 30, 2001

Inventory #001571

10-11

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Branching

• The condition can be:

x, EQ, y ! x = y

x, NE, y ! x y

x, LT, y ! x < y

x, GT, y ! x > y

x, LE, y ! x y

x, GE, y ! x y

x, ABLT, y ! |x| < |y|

x, ABGT, y ! |x| > |y|

• x and y can be numbers, parameters, or parametric expressions.

• The action can be:

THEN to execute the subsequent block of commands

*EXIT to exit a do-loop

*CYCLE to skip to the end of a do-loop

• The action takes place only if the condition is true. Otherwise, ANSYS will move on to *ELSEIF (if present), *ELSE (if present), and *ENDIF.

*if, x, eq, y, then

Page 12: 2_10-macro

October 30, 2001

Inventory #001571

10-12

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Branching

• 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

*endifesel,s,type,,arg1 ! Select elements of specified typeetable,volume,volu ! Store volume in element tablessum ! Sum element table items...

• Issuing totvolume,-1 will now result in:

Page 13: 2_10-macro

October 30, 2001

Inventory #001571

10-13

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

D. Looping

• 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.

Page 14: 2_10-macro

October 30, 2001

Inventory #001571

10-14

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

...Looping

! -- 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 ietable,volume,volu ! Store volume in element tablessum ! 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 volumeesel,all ! Activate full set of elements

Page 15: 2_10-macro

October 30, 2001

Inventory #001571

10-15

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

E. General Guidelines

• 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.

Page 16: 2_10-macro

October 30, 2001

Inventory #001571

10-16

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

INTR

OD

UC

TIO

N T

O A

NS

YS

6.0

- Part 2

Training Manual

Macro Basics

F. Workshop

• This workshop consists of the following problem:

W9. Verifying Pressures

Please refer to your Workshop Supplement for instructions.