Expand/Collapse all
Preface
I. Guide to Interfacing with Mechanical APDL
1. Format of Binary Data Files
1.1. Understanding Mechanical APDL Binary Files
1.1.1. Conventions Used to Describe Binary Files
1.1.2. The Standard Header for Mechanical APDL Binary Files
1.2. Description of the Results File
1.2.1. Nomenclature
1.2.2. Standard Mechanical APDL File Header
1.2.3. Results File Format
1.3. Description of the Reduced Displacement File
1.3.1. Standard Mechanical APDL File Header
1.3.2. RDSP File Format
1.4. Description of the Reduced Complex Displacement File
1.4.1. Standard Mechanical APDL File Header
1.4.2. RFRQ File Format
1.5. Description of the Modal Results File
1.5.1. Standard Mechanical APDL File Header
1.5.2. MODE File Format
1.6. Description of the Element Matrices File
1.6.1. Standard Mechanical APDL File Header
1.6.2. EMAT File Format
1.7. Description of the Substructure Matrices File
1.7.1. Standard Mechanical APDL File Header
1.7.2. SUB File Format
1.8. Description of the Component Mode Synthesis Matrices (CMS) File
1.8.1. Standard Mechanical APDL File Header
1.8.2. CMS File Format
1.8.3. TCMS File Format
1.9. Description of the Full Stiffness-Mass File
1.9.1. Standard Mechanical APDL File Header
1.9.2. FULL File Format
1.10. Description of the Substructure Displacement File
1.10.1. Standard Mechanical APDL File Header
1.10.2. DSUB File Format
2. Accessing Binary Data Files
2.1. Accessing Mechanical APDL Binary Files
2.1.1. Access Routines for Results Files
2.1.2. Characteristics of Mechanical APDL Binary Files
2.1.3. Viewing Binary File Contents
2.1.4. Abbreviations
2.1.5. binini (Initializing Buffered Binary I/O Systems)
2.1.6. Function sysiqr (Retrieving the Status of a File)
2.1.7. Function biniqr8 (Retrieving System-Dependent Parameters)
2.1.8. Function binset (Opening a Blocked Binary File or Initializing Paging Space)
2.1.9. Subroutine bintfo (Defining Data for a Standard Mechanical APDL File Header)
2.1.10. Subroutine binhed8 (Writing the Standard Mechanical APDL File Header)
2.1.11. Subroutine binrd8 (Reading Data from a Buffered File)
2.1.12. Subroutine binwrt8 (Writing Data to a Buffered File)
2.1.13. Subroutine exinc4 (Decoding an Integer String into a Character String)
2.1.14. Subroutine inexc4 (Coding a Character String into an Integer String)
2.1.15. Subroutine binclo (Closing or Deleting a Blocked Binary File)
2.1.16. Subroutine largeIntGet (Converting Two Integers into a Pointer)
2.2. Demonstration Routines
2.2.1. Program bintst (Demonstrates Dumping a Binary File and Copying It for Comparison Purposes)
2.2.2. Subroutine bintrd (Demonstrates Printing a Dump of File Contents)
2.2.3. Subroutine bintwr (Demonstrates Copying Binary File Contents)
2.2.4. Program ResRdDemo (Demonstrates Reading a Results File)
2.2.5. Program ResWrDemo (Demonstrates Writing a Results File)
2.3. Retrieving Data from the Results File
2.3.1. Results File Reader
2.3.2. Results File Access Routines
3. The CDWRITE (CDB) File Format
3.1. Using the CDWRITE Command
3.1.1. Customizing Degree of Freedom Labels: the /DFLAB Command
3.2. Coded Database File Commands
3.2.1. BFBLOCK Command
3.2.2. BFEBLOCK Command
3.2.3. CE Command
3.2.4. CP Command
3.2.5. CMBLOCK Command
3.2.6. CYCLIC Command
3.2.7. EBLOCK Command
3.2.8. EN Command
3.2.9. ETBLOCK Command
3.2.10. LOCAL Command
3.2.11. M Command
3.2.12. MPDATA Command
3.2.13. MPTEMP Command
3.2.14. N Command
3.2.15. NBLOCK Command
3.2.16. *PREAD Command
3.2.17. R Command
3.2.18. RLBLOCK Command
3.2.19. SE Command
3.2.20. SECBLOCK Command
3.2.21. SFBEAM Command
3.2.22. SFE Command
3.2.23. SFEBLOCK Command
II. Guide to User-Programmable Features
1. Understanding User-Programmable Features (UPFs)
1.1. What Are User-Programmable Features?
1.2. What You Should Know Before Using UPFs
1.3. Planning Your UPFs
1.4. Studying the Mechanical APDL User Routines
1.5. Programming in Languages Other Than Fortran
1.6. Developing UPFs: a Suggested Strategy
1.7. Include Decks
1.8. Choosing a Linking Method
1.9. Compiling and Linking UPFs on Linux Systems
1.9.1. Using the /UPF Command
1.9.2. Creating a Shared Library
1.9.3. Using the ANS_ADMIN Utility
1.9.4. Downloading and Installing the GCC Compiler
1.10. Sharing Data Between User Routines
1.11. Compiling and Linking UPFs on Windows Systems
1.11.1. Using the /UPF Command
1.11.2. Creating a Dynamic-link (DLL) Library
1.11.3. Using the ANS_ADMIN Procedure
1.12. Activating UPFs
1.13. Running Your Custom Executable
1.14. Verifying Your Routines
1.15. Debugging Commands
1.16. Other Useful Commands
1.17. Generating Output
1.18. Reading Large Data Files More Rapidly
2. UPF Subroutines and Functions
2.1. Creating a New Element
2.1.1. Input and Output Abbreviations
2.1.2. Creating a New Element via the User-Defined Element API
2.1.3. Creating a New Element by Directly Accessing the Program Database
2.2. Supporting Subroutines for Element Creation
2.2.1. Subroutine nminfo (Returning Element Reference Names)
2.2.2. Subroutine svgidx (Fetching the Index for Saved Variables)
2.2.3. Subroutine svrget (Fetching Saved Variable Data for an Element)
2.2.4. Subroutine svrput (Writing an Element's Saved Variable Set)
2.2.5. Subroutine svpidx (Writing the Saved Variable Element Index to a File)
2.2.6. Subroutine mreuse (Determining Which Element Matrices Can Be Reused)
2.2.7. Subroutine subrd (Reading Element Load Data for a Substructure Generation Run)
2.2.8. Subroutine subwrt (Writing an Element Load Vector to a File for a Substructure Generation Run)
2.2.9. Subroutine rvrget (Fetching Real Constants for an Element)
2.2.10. Subroutine propev (Evaluating a Group of Material Properties)
2.2.11. Subroutine prope1 (Evaluating One Material Property)
2.2.12. Subroutine pstev1 (Evaluating Material Properties for 1D Elements)
2.2.13. Subroutine tbuser (Retrieving User Table Data)
2.2.14. Subroutine plast1 (Updating an Element's Plastic History)
2.2.15. Subroutine plast3 (Updating an Element's Plastic History, 4 or 6 components)
2.2.16. Subroutine creep1 (Updating an Element's Creep History)
2.2.17. Subroutine creep3 (Updating an Element's Creep History, 3D Elements)
2.2.18. Subroutine swell1 (Updating an Element's Swelling History)
2.2.19. Subroutine swell3 (Updating an Element's Swelling History, 3D Elements)
2.2.20. Function elLenPsvrBuf (Determining Additional ESAV Record for Plasticity)
2.2.21. Function tbgettbtype (Retrieving the Unique Index Associated with a TB Table)
2.2.22. Function tbgetnumtables (Retrieving the Number of Subtables for a TB Type)
2.2.23. Function tbgetnumfldvars (Retrieving the Number of Field Variables for a TB Type)
2.2.24. Function tbgetfldvars (Retrieving Field Variable Types for a TB Type)
2.2.25. Function tbgetfldname (Retrieving a Field Variable Name)
2.2.26. Function tbgettbopt (Retrieving the TBOPT Associated with a TB Type)
2.2.27. Function tbgettboptname (Retrieving a String or Documented Name Associated with a TBOPT)
2.2.28. Function tbgetdataperfield (Retrieving the Data per Field for Each Subtable)
2.2.29. Function tbgetnumfldsets (Retrieving the Number of TBFIELD+TBDATA/TBOPT Sets)
2.2.30. Function tbgettabledata (Retrieving All Table Data and Field Variable Values)
2.2.31. Function tbgettabledatasz (Retrieving All Table Data and Field Variable Sizes)
2.2.32. Function nlget (Retrieving Material Nonlinear Property Information)
2.2.33. Subroutine usereo (Storing Data in the nmisc Record)
2.2.34. Subroutine eldwrtL (Writing Element Data to a File)
2.2.35. Subroutine eldwrnL (Writing Element Nonsummable Miscellaneous Data to the Results File)
2.2.36. Subroutine trrot (Calculating the Rotation Vector)
2.2.37. Subroutine rottr (Calculating the Transformation Matrix)
2.2.38. Subroutine xyzup3 (Updating an Element's 3D Nodal Coordinates)
2.2.39. Subroutine tmpget (Defining Current Temperature Loads)
2.2.40. Subroutine prsget (Defining Current Pressure Loads)
2.2.41. Subroutine cnvget (Defining Current Convection Loads)
2.2.42. Subroutine hgnget (Defining Current Heat Generation Loads)
2.2.43. Subroutine prinst (Calculating Principal Stress and Stress Intensity)
2.3. Subroutines for Modifying and Monitoring Existing Elements
2.3.1. Subroutine userou (Storing User-Provided Element Output)
2.3.2. Subroutine useran (Modifying Orientation of Material Properties)
2.3.3. Subroutine userrc (Performing User Operations on COMBIN37 Parameters)
2.3.4. Subroutine UElMatx (Accessing Element Matrices and Load Vectors)
2.3.5. Subroutine uthick (Getting User-Defined Initial Thickness)
2.3.6. Subroutine uflex (Calculating Flexibility Factors for PIPE288 and PIPE289)
2.3.7. Subroutine UTimeInc (Overriding the Program-Determined Time Step)
2.3.8. Subroutine UCnvrg (Overriding the Program-Determined Convergence)
2.4. Subroutines for Customizing Material Behavior
2.4.1. Subroutine UserMat (Creating Your Own Material Model)
2.4.2. Subroutine UserMatTh (Creating Your Own Thermal Material Model)
2.4.3. Subroutine UserHyper (Writing Your Own Isotropic Hyperelasticity Laws)
2.4.4. Subroutine UserHyperAniso (Writing Your Own Anisotropic Hyperelasticity Laws)
2.4.5. Subroutine userMullins (Writing Your Own Pseudo-Elastic Mullins Effect Law)
2.4.6. Subroutine UserCreep (Defining Your Own Implicit Creep Material Behavior)
2.4.7. Subroutine UserCr (Defining Your Own Explicit Creep Material Behavior)
2.4.8. Subroutine user_tbelastic (Defining Material Linear Elastic Properties)
2.4.9. Subroutine userfc (Defining Your Own Failure Criteria)
2.4.10. Subroutine userCZM (Creating Your Own Cohesive Zone Material)
2.4.11. Subroutine userswstrain (Defining Your Own Swelling Laws)
2.4.12. Subroutine userthstrain (Defining Your Own Thermal Strain)
2.4.13. Subroutine userfreestrain (Defining Your Own Free-Strain Increment)
2.4.14. Subroutine userfld (Update User-Defined Field Variables)
2.4.15. Subroutine UsrShift (Calculating a Pseudotime Time Increment)
2.4.16. Subroutine userck (Checking User-Defined Material Data)
2.4.17. Support Function egen
2.5. Subroutines for Customizing Contact Interfacial Behavior
2.5.1. Subroutine usercnprop (Programming Your Own Contact Properties)
2.5.2. Subroutine userfric (Writing Your Own Friction Laws)
2.5.3. Subroutine userinter (Writing Your Own Contact Interactions)
2.5.4. Subroutine userwear (Writing Your Own Wear Law)
2.6. Subroutines for Customizing Loads
2.6.1. Subroutine usrefl (Changing Scalar Fields to User-Defined Values)
2.6.2. Subroutine userpr (Changing Element Pressure Information)
2.6.3. Subroutine usercv (Changing Element Face Convection Surface Information)
2.6.4. Subroutine userfx (Changing Element Face Heat Flux Surface Information)
2.6.5. Subroutine userch (Changing Element Face Charge Density Surface Information)
2.6.6. Subroutine userfd (Calculating the Complex Load Vector for Frequency Domain Logic)
2.6.7. Function userpe (Calculating Rotation Caused by Internal Pressure)
2.6.8. Subroutine usrsurf116 (Modifying SURF151 and SURF152 Film Coefficients and Bulk Temperatures)
2.6.9. Subroutine User116Cond (Calculating the Conductance Coefficient for FLUID116)
2.6.10. Subroutine User116Hf (Calculating the Film Coefficient for FLUID116)
2.6.11. Subroutine userPartVelAcc (Calculating Particle Velocities and Accelerations of Ocean Waves)
2.6.12. Subroutine userPanelHydFor (Calculating Panel Loads Caused by Ocean Loading)
2.7. Subroutines for Sharing Data Between User Routines
2.7.1. Subroutine userdata (Store Common Block Functionality and Data)
2.7.2. Subroutine usercm.inc (Add Common Block Variables)
2.8. Running Mechanical APDL as a Subroutine
2.8.1. Mechanical APDL Exit Codes
2.9. Defining Your Own Commands
2.9.1. Function user01 (Defining Custom Commands)
2.9.2. Function user02 (Demonstrates Offsetting Selected Nodes)
2.9.3. Function user03 (Demonstrates Using Memory)
2.9.4. Function user04 (Demonstrates Getting a List of Nodes)
2.9.5. Functions user05 through user10
2.10. Support Subroutines
2.10.1. Function GetRForce (Getting Nodal Reaction Force Values)
2.10.2. Function GetStackDisp (Getting Current Displacement Values)
2.10.3. Subroutine ElResultStrt (Getting Load Data from Analysis Results)
2.10.4. Subroutine ElResultGet (Getting Results Values at Selected Points)
2.10.5. Subroutine ElInterp (Finding Element Coordinates)
2.11. Access at the Beginning and End of Various Operations
2.12. Memory-Management Subroutines
2.12.1. Using the Memory Manager in a FORTRAN UPF
2.12.2. Using the Memory Manager in a C or C++ UPF
2.13. Parameter-Processing Subroutines
2.13.1. Subroutine pardim (Creating a Dimensioned Parameter)
2.13.2. Subroutine parevl (Finding and Evaluating a Parameter)
2.13.3. Subroutine pardef (Adding a Parameter)
2.14. Other Useful Functions
2.14.1. Using Function RunCommand
2.14.2. Using the /UNDO Command
2.14.3. Using the /HOLD command
3. Accessing the Mechanical APDL Database
3.1. Routines for Selecting and Retrieving Nodes and Elements
3.1.1. Function ndnext (Getting the Next Node Number)
3.1.2. Function ndprev (Getting the Number of the Previous Selected Node)
3.1.3. Function ndnxdf (Getting the Number of the Next Defined Node)
3.1.4. Function ndsel (Selecting, Unselecting, Deleting, or Inverting a Node)
3.1.5. Function elnext (Getting the Number of the Next Element)
3.1.6. Function elprev (Getting the Number of the Previous Selected Element)
3.1.7. Function elnxdf (Getting the Number of the Next Defined Element)
3.1.8. Subroutine elsel (Selecting, Unselecting, Deleting, or Inverting an Element)
3.2. Node Information Routines
3.2.1. Function ndinqr (Getting Information About a Node)
3.2.2. Function getnod (Getting a Nodal Point)
3.2.3. Function putnod (Storing a Node)
3.2.4. Function ndgall (Getting the XYZ/Rotation Coordinates Vector for a Node)
3.2.5. Subroutine ndspgt (Getting the Nodal Solution for a Node of an Element)
3.3. Element Attribute Routines
3.3.1. Function elmiqr (Getting Information About an Element)
3.3.2. Function elmget (Getting an Element's Attributes and Nodes)
3.3.3. Subroutine elmput (Storing an Element)
3.3.4. Function etyiqr (Getting a Data Item About an Element Type)
3.3.5. Function etyget (Getting Information About an Element Type)
3.3.6. Subroutine etyput (Storing Element Type Data)
3.3.7. Subroutine echrtr (Getting Information About Element Characteristics)
3.3.8. Subroutine etysel (Selecting, Unselecting, Deleting, or Inverting an Element Type)
3.3.9. Function mpinqr (Getting Information About a Material Property)
3.3.10. Function mpget (Getting a Material Property Table)
3.3.11. Subroutine mpput (Storing a Material Property Table)
3.3.12. Subroutine mpdel (Deleting a Material Property Table)
3.3.13. Function rlinqr (Getting Information About a Real Constant Set)
3.3.14. Function rlget (Getting Real Constant Data)
3.3.15. Subroutine rlsel (Selecting or Deleting a Real Constant Set)
3.3.16. Function csyiqr (Getting Information About a Coordinate System)
3.3.17. Function csyget (Getting a Coordinate System)
3.3.18. Subroutine csyput (Storing a Coordinate System)
3.3.19. Subroutine csydel (Deleting a Coordinate System)
3.3.20. Subroutine userac (Demonstrates Use of Element Attribute Routines)
3.4. Coupling and Constraint Routines
3.4.1. Function cpinqr (Getting Information About a Coupled Set)
3.4.2. Function cpget (Getting a Coupled Set)
3.4.3. Subroutine cpput (Storing a Coupled Set)
3.4.4. Subroutine cpsel (Selecting or Deleting a Coupled Set)
3.4.5. Function ceinqr (Getting Information About a Constraint Equation Set)
3.4.6. Function ceget (Getting a Constraint Equation)
3.4.7. Subroutine ceput (Storing a Constraint Equation)
3.4.8. Subroutine cesel (Deleting or Selecting a Constraint Equation)
3.5. Nodal Loading Routines
3.5.1. Function disiqr (Getting Information About Constraints)
3.5.2. Function disget (Getting a Constraint at a Node)
3.5.3. Subroutine disput (Storing a Constraint at a Node)
3.5.4. Subroutine disdel (Deleting a Constraint at a Node)
3.5.5. Function foriqr (Getting Information About Nodal Loads)
3.5.6. Function forget (Getting a Nodal Load at a Node)
3.5.7. Subroutine forput (Storing a Nodal Load at a Node)
3.5.8. Subroutine fordel (Deleting a Nodal Load at a Node)
3.5.9. Function ansNodeBodyLoadIqr (Getting Information About a Nodal Body Load)
3.5.10. Function ansNodeBodyLoadGet (Getting a Nodal Body Load Value)
3.5.11. Subroutine ansNodeBodyLoadPut (Storing a Nodal Body Load)
3.5.12. Subroutine ansNodeBodyLoadDel (Deleting a Nodal Body Load)
3.6. Element Loading Routines
3.6.1. Function ansElemBodyLoadIqr (Getting Information About an Element Body Load)
3.6.2. Function ansElemBodyLoadGet (Getting an Element Body Load Value)
3.6.3. Subroutine ansElemBodyLoadPut (Storing an Element Body Load)
3.6.4. Subroutine ansElemBodyLoadDel (Deleting an Element Body Load)
3.6.5. Function ansElemSurfLoadIqr (Getting Information About an Element Surface Load)
3.6.6. Function ansElemSurfLoadGet (Getting an Element Surface Load Value)
3.6.7. Subroutine ansElemSurfLoadPut (Storing an Element Surface Load)
3.6.8. Subroutine ansElemSurfLoadDel (Deleting an Element Surface Load)
3.7. Results Information Routines
3.7.1. Function dspiqr (Getting Information About Nodal Results)
3.7.2. Function dspget (Getting a Nodal Result from the Database)
3.7.3. Subroutine dspput (Storing a Result at a Node)
3.7.4. Subroutine dspdel (Deleting a Result at a Node)
3.7.5. Function emsiqr (Getting Information About an Element's Miscellaneous Summable Data)
3.7.6. Function emsget (Getting an Element's Miscellaneous Summable Data)
3.7.7. Subroutine emsput (Storing an Element's Miscellaneous Summable Data)
3.7.8. Subroutine emsdel (Deleting an Element's Miscellaneous Summable Data)
3.7.9. Function enfiqr (Getting Information About Element Nodal Forces)
3.7.10. Function enfget (Getting an Element's Nodal Forces)
3.7.11. Subroutine enfput (Storing an Element's Nodal Forces)
3.7.12. Subroutine enfdel (Deleting an Element's Nodal Forces)
3.7.13. Function ensiqr (Getting Information About an Element's Nodal Stresses)
3.7.14. Function ensget (Getting an Element's Nodal Stresses)
3.7.15. Subroutine ensput (Storing Nodal Stresses at an Element)
3.7.16. Subroutine ensdel (Deleting an Element's Nodal Stresses)
3.7.17. Function esfiqr (Getting Information About Element Surface Stress Data)
3.7.18. Function esfget (Getting Element Surface Stress Data)
3.7.19. Subroutine esfput (Storing Element Surface Stress Data)
3.7.20. Subroutine esfdel (Deleting an Element's Surface Stress Data)
3.7.21. Function engiqr (Getting Information About an Element's Energies)
3.7.22. Function engget (Getting an Element's Energies)
3.7.23. Subroutine engput (Storing an Element's Energies and Volume)
3.7.24. Subroutine engdel (Deleting an Element's Energies)
3.7.25. Function egriqr (Getting Information About an Element's Nodal Gradients)
3.7.26. Function egrget (Getting an Element's Nodal Gradients)
3.7.27. Subroutine egrput (Storing an Element's Nodal Gradients)
3.7.28. Subroutine egrdel (Deleting an Element's Nodal Gradients)
3.7.29. Function eeliqr (Getting Information About an Element's Nodal Elastic Strains)
3.7.30. Function eelget (Getting an Element's Nodal Elastic Strains)
3.7.31. Subroutine eelput (Storing an Element's Nodal Elastic Strains)
3.7.32. Subroutine eeldel (Deleting an Element's Nodal Elastic Strains)
3.7.33. Function epliqr (Getting Information About an Element's Nodal Plastic Strains)
3.7.34. Function eplget (Getting an Element's Nodal Plastic Strains)
3.7.35. Subroutine eplput (Storing an Element's Nodal Plastic Strains)
3.7.36. Subroutine epldel (Deleting an Element's Nodal Plastic Strains)
3.7.37. Function ecriqr (Getting Information About an Element's Nodal Creep Strains)
3.7.38. Function ecrget (Getting an Element's Nodal Creep Strains)
3.7.39. Subroutine ecrput (Storing an Element's Nodal Creep Strains)
3.7.40. Subroutine ecrdel (Deleting an Element's Nodal Creep Strains)
3.7.41. Function ethiqr (Getting Information About an Element's Nodal Thermal Strains)
3.7.42. Function ethget (Getting an Element's Nodal Thermal Strains)
3.7.43. Subroutine ethput (Storing an Element's Nodal Thermal Strains)
3.7.44. Subroutine ethdel (Deleting an Element's Thermal, Initial, and Swelling Strains)
3.7.45. Function euliqr (Getting Information About an Element's Euler Angles)
3.7.46. Function eulget (Getting an Element's Nodal Euler Angles)
3.7.47. Subroutine eulput (Storing an Element's Euler Angles)
3.7.48. Subroutine euldel (Deleting an Element's Euler Angles)
3.7.49. Function efxiqr (Getting Information About Element Fluxes)
3.7.50. Function efxget (Getting an Element Flux)
3.7.51. Subroutine efxput (Storing an Element's Fluxes)
3.7.52. Subroutine efxdel (Deleting Element Fluxes)
3.7.53. Function elfiqr (Getting Information About Element Local Forces)
3.7.54. Function elfget (Getting an Element Local Force)
3.7.55. Subroutine elfput (Storing an Element's Local Forces)
3.7.56. Subroutine elfdel (Deleting Element Local Forces)
3.7.57. Function emniqr (Getting Information About Element Miscellaneous Non-summable Data)
3.7.58. Function emnget (Getting an Element's Miscellaneous Non-summable Data)
3.7.59. Subroutine emnput (Storing an Element's Miscellaneous Non-summable Data)
3.7.60. Subroutine emndel (Deleting an Element's Miscellaneous Non-summable Data)
3.7.61. Function ecdiqr (Getting Information About Element Current Densities)
3.7.62. Function ecdget (Getting an Element Current Density)
3.7.63. Subroutine ecdput (Storing an Element's Current Densities)
3.7.64. Subroutine ecddel (Deleting Element Current Densities)
3.7.65. Function enliqr (Getting Information About Element Nonlinear Tables)
3.7.66. Function enlget (Getting Element Nonlinear Tables)
3.7.67. Subroutine enlput (Storing an Element's Nonlinear Tables)
3.7.68. Subroutine enldel (Deleting Element Nonlinear Tables)
3.7.69. Function ehciqr (Getting Information About Calculated Element Heat Generations)
3.7.70. Function ehcget (Getting a Calculated Element Heat Generation)
3.7.71. Subroutine ehcput (Storing an Element's Calculated Heat Generations)
3.7.72. Subroutine ehcdel (Deleting Element Calculated Heat Generations)
4. Subroutines for Your Convenience
4.1. Input and Output Abbreviations
4.2. General Subroutines
4.2.1. Subroutine dptoch (Retrieve Eight Characters From a Double Precision Variable)
4.2.2. Function ppinqr (Obtain Information About Threads)
4.2.3. Function pplock (Locking a Thread in Shared Memory)
4.2.4. Function ppunlock (Unlocking a Thread in Shared Memory)
4.2.5. Function ppproc (Get the Active Thread Index)
4.2.6. Function wrinqr (Obtain Information About Output)
4.2.7. Subroutine erinqr (Obtaining Information from the Errors Common)
4.2.8. Subroutine erhandler (Displaying Program Errors)
4.2.9. Subroutine intrp (Doing Single Interpolation)
4.2.10. Subroutine tranx3 (Processing Geometry for 3D Line Elements)
4.2.11. Subroutine systop (Stopping a Program Run)
4.3. Vector Functions
4.3.1. Function vdot (Computing the Dot Product of Two Vectors)
4.3.2. Function vidot (Computing the Dot Product of Two Vectors with Increments)
4.3.3. Function vsum (Summing Vector Components)
4.3.4. Function vmax (Retrieving the Maximum Vector Value at a Given Location)
4.3.5. Function lastv (Retrieving the Position of the Last Nonzero Term in a Double Precision Vector)
4.3.6. Function izero (Setting an Integer Vector to Zero)
4.3.7. Function imove (Assigning Equal Values to Two Integer Vectors)
4.3.8. Subroutine vzero (Initializing a Vector to Zero)
4.3.9. Subroutine vmove (Moving One Vector into Another)
4.3.10. Subroutine vimove (Moving One Vector into Another Incrementally)
4.3.11. Subroutine vinit (Assigning a Scalar Constant to a Vector)
4.3.12. Subroutine viinit (Assigning a Scalar Constant to a Vector Incrementally)
4.3.13. Subroutine vapb (Setting a Vector to Sum of Two vectors)
4.3.14. Subroutine vapb1 (Combining Two Vectors in One)
4.3.15. Subroutine vapcb1 (Multiplying a Vector to a Constant)
4.3.16. Subroutine vamb (Gets a Third Vector by Subtracting One Vector from Another)
4.3.17. Subroutine vamb1 (Subtracting One Vector from Another)
4.3.18. Subroutine vmult (Multiplying a Vector by a Constant)
4.3.19. Subroutine vmult1 (Multiplying a Vector by a Constant)
4.3.20. Subroutine vcross (Defining a Vector via a Cross Product)
4.3.21. Subroutine vnorme (Normalizing a Three-Component Vector)
4.3.22. Subroutine vnorm (Normalizing a Vector to Unit Length)
4.3.23. Function ndgxyz (Getting the X,Y,Z Vector for a Node)
4.3.24. Subroutine ndpxyz (Storing X,Y,Z for a Node)
4.4. Matrix Subroutines
4.4.1. Subroutine maxv (Multiplying a Vector by a Matrix)
4.4.2. Subroutine maxv1 (Multiplying a Vector by a Matrix)
4.4.3. Subroutine matxv (Multiplying a Vector by a Full Transposed Matrix)
4.4.4. Subroutine matxv1 (Multiplying a Vector by a Full Transposed Matrix)
4.4.5. Subroutine matxb (Transposing a matrix)
4.4.6. Subroutine maat (Changing a Matrix Value via Addition, Multiplication, and Transposition)
4.4.7. Subroutine matba (Updating Matrix Value via Transposition, Multiplications, and Addition)
4.4.8. Subroutine matsym (Filling the Upper Triangle from the Lower Triangle)
4.4.9. Subroutine mctac (Transposing a symmetric matrix)
4.4.10. Subroutine tran (Transposing a matrix)
4.4.11. Subroutine symeqn (Solving Simultaneous Linear Equations)
5. Using Python to Code UPF Subroutines
5.1. Supported UPF Subroutines
5.2. Python UPF Methodology
5.3. Accessing the Database from the Python Code
5.4. Python UPF Limitations
5.5. Python UPF Examples
5.5.1. Example: Python UserMat Subroutine
5.5.2. Example: Python UsrShift Subroutine
5.5.3. Example: Python UserHyper Subroutine
A. Creating External Commands for Linux
A.1. Tasks in Creating an External Command
A.1.1. Creating Compatible Code
A.1.2. Creating a Shared Library
A.1.3. Creating an External Table File
A.1.4. Setting the ANSYS_EXTERNAL_PATH Environment Variable
A.1.5. Using External Commands
A.1.6. Checking External Command Status
A.1.7. Resetting External Commands
B. Creating External Commands for Windows
B.1. Tasks in Creating an External Command
B.1.1. Creating Compatible Code
B.1.2. Creating a Visual Studio Project
B.1.3. Creating an External Definition File
B.1.4. Creating a Shared Library
B.1.5. Creating an External Table File
B.1.6. Setting the ANSYS_EXTERNAL_PATH Environment Variable
B.1.7. Using External Commands
B.1.8. Checking External Command Status
B.1.9. Resetting External Commands
B.1.10. Example: Creating an External Command Using Visual Studio 2019 Professional
C. User Material (UserMat) Subroutine Example
C.1. UserMat Example Description
C.2. UserMat Example Input Data
C.3. UserMat Example POST26 Output Results
C.4. USERMAT.F List File for This Example
C.5. Accessing Solution and Material Data
D. Structural-Thermal User Material (UserMat, UserMatTh) Example
D.1. Example Description
D.2. Example Input Data
E. Fully Coupled Wind Turbine Example in Mechanical APDL
E.1. Implementing a Fully Coupled Wind Turbine Analysis
E.2. Theory
E.3. Compiling a Custom Version of Mechanical APDL
E.4. Performing a Wind Coupled Analysis
E.4.1. The Wind Coupling Process
E.4.2. Data Exchange Routines
E.4.3. Important Analysis Notes
E.5. Example Analysis Using Provided “WindProg” Example for Aeroelastic Coupling
E.6. References