2.10. Support Subroutines

2.10.1. Function GetRForce (Getting Nodal Reaction Force Values)

*deck,GetRForce
      function GetRForce (Node,Label,Value)
c primary function:    Get the K * u - F at a node from the rfsum vector.
c                       warning: This routine is called after the elements
c                       are formed, but before solution.  Therefore,
c                       F is from the current iteration, but
c                       u is from the previous iteration.  At convergence,
c                       this difference will have little effect.
c                       The computations are done immediately after the
c                       call to UElMatx.
c                Use the RFSUM command to ask for the summation.
c                Use *GET,Parm,NODE,num,RF,DOFLAB to access the reaction
c                         sum from the command line.
c secondary functions: Return pointer for fast access

c object/library:  usr

c *** Notice - This file contains ANSYS Confidential information ***
c     Prolog is not CONFIDENTIAL INFORMATION

c  input arguments:
c     variable (typ,siz,intent)    description
c     Node     (int,sc,in)       - Node Number (User)
c     Label    (ch*4,sc,in)      - DOF Label (Upper Case)
c                                  'UX  ','UY  ','TEMP','VOLT','ROTY', etc

c  output arguments:
c     GetRForce (int,func,out)   - status/pointer
c                                  = 0 - data not valid
c                                  > 0 - Rfsum pointer to data for fast access
c                                         see comments below
c     Value    (dp,sc,out)       - Solution value for Node,Label
c                                   All results are in the nodal coordinate
c                                   system

c  example usage:

c       external  GetRForce
c       integer   GetRForce, ptr, Node2
c       double precision  Value
c #include "handlecom.inc"   (if Value = Rfsum(ptr) form is to be used)

c       ptr  = GetRForce (Node2,'UY  ',Value)

c     later...
c       Value = Rfsum(ptr)
c   directionID is used to translate label into corresponding position in dislab's position


2.10.2. Function GetStackDisp (Getting Current Displacement Values)

*deck,GetStackDisp
      function GetStackDisp (Node,Label,Value)

c primary function:    Get the displacement at a node from the disp vector
c secondary functions: Return pointer for fast access

c object/library:  usr

c *** Notice - This file contains ANSYS Confidential information ***
c     Prolog is not CONFIDENTIAL INFORMATION

c     typ=int,dp,log,chr,dcp   siz=sc,ar(n)   intent=in,out,inout

c  input arguments:
c     variable (typ,siz,intent)    description
c     Node     (int,sc,in)       - Node Number (User)
c     Label    (ch*4,sc,in)      - DOF Label (Upper Case)
c                                  'UX  ','UY  ','TEMP','VOLT','ROTY', etc

c  output arguments:
c     variable (typ,siz,intent)    description
c     GetStackDisp (int,sc,out)  - status/pointer
c                                  = 0 - data not valid
c                                  > 0 - UDisp pointer to data for fast access
c                                        see comments below
c     Value    (dp,sc,out)       - Solution value for Node,Label

c  example usage:

c       external  GetStackDisp
c#include "handlecom.inc"  (only if UDisp(ptr) form is used
c       integer   GetStackDisp, ptr, Node2
c       double precision  Value

c       ptr  = GetStackDisp (Node2,'UY  ',Value)

c     later...
c       Value = UDisp(ptr)



2.10.3. Subroutine ElResultStrt (Getting Load Data from Analysis Results)

*deck,ElResultStrt
      subroutine ElResultStrt (Label,Comp,LabAvg,TypeData,nVal,iLoc)
c *** primary function:    (post1) Load data for later ElResultGet

c *** Notice - This file contains ANSYS Confidential information ***
c               (prolog is not confidential)

c  input arguments:
c     Label    (ch*4,sc,in)          - Result Type
c     Comp     (ch*4,sc,in)          - Result Component (8 char for ESTR)
c     LabAvg   (ch*4,sc,in)          - 'AVG ' or 'NOAV' ('AVG ' default)

c  output arguments:
c     TypeData (int,sc,out)          - Code for data type
c     nVal     (int,sc,out)          - Number of values per point
c                                      If 0, no data
c     iLoc      (int,sc,out)          - Location of Comp in values


2.10.4. Subroutine ElResultGet (Getting Results Values at Selected Points)

*deck,ElResultGet
      subroutine ElResultGet (nPoints,ebest,elcord,TypeData,iLoc,
     x                        nVal,result)
c *** primary function:    (post1) Get results at selected points 

c *** Notice - This file contains ANSYS Confidential information ***
c               (prolog is not confidential)

c  input arguments:
c     nPoints  (int,sc,in)           - Number of evaluation points
c                     *** from ElInterp ***
c     ebest    (int,ar(nPoints),in)  - Element(s) containing points
c     elcord   (dp,ar(3,nPoints),in) - Element coordinates
c                     *** from ElResultStrt ***
c     TypeData (int,sc,in)           - Data type code
c     iLoc      (int,sc,in)           - Start of selected data
c     nVal     (int,sc,in)           - Number of results per point

c  output arguments:
c     Result   (dp,ar(nvar,nPoints),out)  - Array of results


2.10.5. Subroutine ElInterp (Finding Element Coordinates)

*deck,ElInterp
      subroutine ElInterp (piFEML,nPoints,xyzPoints,tolInsidein,
     x                     tolOutsidein,MoveTol,ebest,elcord)

c primary function:    Find element numbers containing xyz points 
c secondary functions: Find element coordinates of these points 

c object/library: upf

c *** Notice - This file contains ANSYS Confidential information ***
c     (Prolog is not CONFIDENTIAL INFORMATION)
                                                                 
c input arguments:
c   piFEML   (ptr,sc,in)          - If non 0, pointer of a FEM Object
c   nPoints  (int,sc,in)          - Number of points to find (do in one group)
c   xyzPoints(dp,ar(3,nPoints),in)- XYZ coordinates of each point
c   tolInsidein(dp,sc,in)         - Tolerance for point inside element
c                                     (0.0d0 defaults to 1.0d-4)
c   tolOutsidein(dp,sc,in)        - Maximum distance outside to be associated
c                                     with an element (0.0d0 defaults to 0.25)
c   MoveTol   (dp,sc,in)          - Node move tolerance (0.0d0, no move)
                                             
c output arguments:
c   ebest    (int,ar(nPoints),out)  - Best element number for each point
c   elcord   (dp,ar(3,nPoints),out) - Element coordinates of the point