170 likes | 592 Views
Module 10. Macro Basics. 10. 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:
E N D
Module 10 Macro Basics
10. 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. October 30, 2001 Inventory #001571 10-2
...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. October 30, 2001 Inventory #001571 10-3
Macro BasicsA. 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. October 30, 2001 Inventory #001571 10-4
Macro Basics...Creating a Macro • 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 • 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 BasicsB. 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. October 30, 2001 Inventory #001571 10-7
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 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 • 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
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 Macro BasicsC. Branching October 30, 2001 Inventory #001571 10-10
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. Macro Basics...Branching *if, x, eq, y,then October 30, 2001 Inventory #001571 10-11
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 *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 BasicsD. 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. October 30, 2001 Inventory #001571 10-13
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 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 BasicsE. 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. October 30, 2001 Inventory #001571 10-15
Macro BasicsF. Workshop • 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