Following are the user subroutines for modifying or 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)
*deck,userou USERDISTRIB
subroutine userou (elem,iout,nbsvr,bsvr,nnrsvr,nrsvr,npsvr,psvr,
x ncsvr,csvr,nusvr,usvr,nnode,nodes,xyz,vol,leng,time,
x timinc,nutot,utot,maxdat,numdat,udbdat)
c
c *** primary function: store user supplied element output
c in nmisc record
c
c in order to activate this user programmable feature,
c the user must enter the usrcal command.
c
c
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c this routine is called by almost every element
c the data is stored on the nmisc record.
c warning: other data may be stored between the
c documented data and this data.
c in order to see the actual information on the nmisc
c record, insert the command:
c dblist,elp,elnum1,elnum2,elinc,11
c where elnum1 = the first element
c elnum2 = the last element
c elinc = the element increment number
c after a set command in post1.
c
c input arguments:
c variable (typ,siz,intent) description
c elem (int,sc,in) - element number
c iout (int,sc,in) - output unit number
c nbsvr (int,sc,in) - number of basic element variables
c bsvr (dp,ar(nbsvr),in) - basic element variables
c nnrsvr (int,sc,in) - number of nonlinear element variables
c nrsvr (dp,ar(nnrsvr),in) - nonlinear element variables
c npsvr (int,sc,in) - number of plasticity element variables
c psvr (dp,ar(npsvr),in) - plasticity element variables
c ncsvr (int,sc,in) - number of creep element variables
c csvr (dp,ar(ncsvr),in) - creep element variables
c nusvr (int,sc,in) - number of user-supplied element variables
c (= nstv on the nsvr command)
c usvr (dp,ar(nusvr),in) - user-supplied element variables
c nnode (int,sc,in) - number of nodes
c nodes (int,ar(nnode),in) - node numbers
c xyz (dp,ar(6,nnode),in) - nodal coordinates and rotations (virgin)
c vol (dp,sc,in) - element volume (or area if 2-d)
c leng (dp,sc,in) - element length (beams,spars,etc)
c time (dp,sc,in) - current time
c timinc (dp,sc,in) - current sub step time increment
c nutot (int,sc,in) - length of dof solution vector utot
c utot (dp,ar(nutot),in) - solution vector
c maxdat (int,sc,in) - size of user output array (3 x nnode)
c for contact element it is equale to nusvr
c but it dode not exceed 120
c
c output arguments:
c variable (typ,siz,intent) description
c numdat (int,sc,out) - number of user output items in array udbdat
c (maximum size of numdat is ielc(NMNMUP)
c which is usually three times the number
c of nodes.
c For contact elements CONTA171-178,it
c should be equal or less than NSTV
c on nsvr command). It cannot exceed 120.
c udbdat (dp,ar(maxdat),out) - user output items to be placed at the end
c of the nmisc record
c
*deck,useran USERDISTRIB
subroutine useran (vn,vref,elem,thick,xyzctr,bsangl)
c user written routine to modify orientation of material properties
c and stresses ***************************
c applicable to: shell43,63,93,99, solid64
c accessed by keyopt
c
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c **** warning *** do not change any arguments other than bsangl.
c if you do, your results are probably wrong.
c
c input(do not change)---
c vn = vector normal to element
c vref = unit vector orienting element, essentially edge i-j
c elem = element number
c thick = total thickness of element at this point (see note below)
c xyzctr = location of element centroid or integration point
c
c output---
c bsangl = output from this subroutine. it represents the angle(s)
c between vref and the desired orientation. it may have
c the default orientation coming in to useran.
c This will be combined with the angles derived from
c the ESYS command.
c use 1 angle for 2-d elements and shells
c use 3 angles for 3-d solids
c
*deck,userrc USERDISTRIB
subroutine userrc (elem,ireal,type,nusvr,usvr,parm,parmld,
x c1,c2,c3,c4,fcon)
c primary function: user operation on parameter for combin37
c accessed with keyopt(9) = 1
c
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c *** Notice - This file contains ANSYS Confidential information ***
c
c input arguments:
c variable (typ,siz,intent) description
c elem (int,sc,in) - element number
c ireal (int,sc,in) - element real constant number
c type (int,sc,in) - element type number
c nusvr (int,sc,in) - number of user-supplied element variables
c (input with the NSVR command)
c usvr (dp,ar(nusvr),inout) - user-supplied element variables
c parm (dp,sc,in) - current value of the paramater
c parmld (dp,sc,in) - value of the parameter at previous time ste
c c1 (dp,sc,in) - real constant c1
c c2 (dp,sc,in) - real constant c2
c c3 (dp,sc,in) - real constant c3
c c4 (dp,sc,in) - real constant c4
c
c output arguments:
c variable (typ,siz,intent) description
c usvr (dp,ar(nusvr),inout) - user-supplied element variables
c may be sent .rst file with usereo
c fcon (dp,sc,out) - result of calculation
c
c either c1 or c3 must be nonzero for this logic to be accessed,
c
*deck,UElMatx USERDISTRIB
subroutine UElMatx (elem,nr,ls,zs,zsc,uelm,ielc,nodes,
x ElDofEachNode,elmdat,xyzang,lenu)
c primary function: User routine to access element matrices and load vectors.
c Needs to have USRCAL,UELMATX to be accessed.
c Called after the call to the element routine and
c before the solver.
c May be used to monitor and/or modify the element matrices
c and load vectors.
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
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 elem (int,sc,in) - User element number
c nr (int,sc,in) - number of rows in element matrix
c ls (int,ar(nr),in) - Dof Index vector for this element matrix
c zs (dp,ar(nr,nr,*),inout)- K,M,C,SS,KCPLX matrices for this element
c zsc (dp,ar(nr,2),inout) - Element load vector and N-R correction vec
c uelm (dp,ar(nr,5),in) - Nodal displacements for this element
c ielc (int,ar(*),in) - Element type characteristics
c nodes (int,ar(*),in) - Nodes for this element
c ElDofEachNode (int,ar(nr),in) - list of dofs for each node in Global
c elmdat (int,ar(10),in) - Element data for this element
c xyzang (dp,ar(6,*),in) - X,Y,Z,THXY,THYZ,THZX for each element node
c lenu (int,sc,in) - Length of global displacement vector
c output arguments:
c zs (dp,ar(nr,nr,4),inout)- K,M,C,SS matrices for this element
c zsc (dp,ar(nr,2),inout) - Element load vector and N-R correction vec
c WARNING: any CHANGES to these (or any other) arguments will have a direc
c impact on the solution, possibly giving meaningless results. The normal
c usage of this routine is simply monitor what is happening.
*deck,uthick USERDISTRIB
SUBROUTINE uthick (elemId, elemType, matId, realId,
$ numDomIntPts, curCoords, thickness)
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c *** primary function: get the user defined thickness
c
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c
c input arguments
c ===============
c Variable (type,sz,i/o) description
c elemId (int,sc,i) element number
c elemType (int,sc,i) element TYPE (181 etc.)
c matId (int,sc,i) material number
c realId (int,sc,i) real constant set number
c numDomIntPts (int,sc,i) number of integration points
c curCoords (dp,ar(3,numDomIntPts),i)
c current coordinates
c
c output arguments
c ================
c thickness (dp,ar(3,numDomIntPts),o)
c thickness at the integration points
c
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
c --- parameters
c
*deck,uflex USERDISTRIB
subroutine uflex (elemId,pressInt,pressExt,ex,pois, sflex,twten)
c *** primary function: to (re)compute the flexibility factors
c for pipe288 and pipe289
c this is accessed by inputting the axial flexibility factor
c as -10.
c *** secondary functions: none
c
c *** Notice - This file contains ANSYS Confidential information ***
c
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c
c typ=int,dp,log,chr,dcp siz=sc,ar(n) intent=in,out,inout
c
c input arguments:
c elemId (int,sc,in) - element number
c pressInt (dp,ar(2),in) - internal pressures at end nodes
c pressExt (dp,ar(2),in) - external pressures at end nodes
c Pressures include hydrostatatic but
c not hydrodynamic effects.
c ex (dp,sc,in) - Young's Modulus
c pois (dp,sc,in) - Poisson's ratio
c sflex (dp,ar(6),inout) - input flexibility factors
c (axial, bending about element z,
c bending about element y, twist, y shear, z shear)
c twten (dp,sc,inout) - twist-tension factor
c
c output arguments:
c sflex (dp,ar(6),inout) - output flexibility factors
c (axial, bending about element z,
c bending about element y, twist, y shear, z shear)
c twten (dp,sc,inout) - twist-tension factor
c
This subroutine allows you to create a user-defined time step to override the one determined by the program. Activate the subroutine via the USRCAL,UTIMEINC command.
*deck,UTimeInc USERDISTRIB
subroutine UTimeInc (deltmin,deltmax,delt)
c primary function: User routine to override the program determined time step
c Needs to have USRCAL,UTIMEINC to be accessed.
c Called after the program determined the next time step
c increment (AUTOTS,ON only)
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c input arguments:
c deltmin (int,dp,in) - minimum time step size (user input)
c deltmax (int,dp,in) - maximum time step size (user input)
c delt (int,dp,inout) - on input, the value determined by the program
c output arguments:
c delt (int,dp,inout) - on output, the value you have determined
This subroutine allows you to create user-defined convergence checking and to override the convergence determined by the program. Activate the subroutine via the USRCAL,UCNVRG command.
*deck,UCnvrg USERDISTRIB
subroutine UCnvrg (ConvergenceType,ConvergenceFlag)
c primary function: User routine to perform custom convergence checking and
c override the program-determined convergence
c Needs to have USRCAL,UCNVRG to be accessed.
c Called after the program convergence checks.
c *** Copyright ANSYS. All Rights Reserved.
c *** ansys, inc.
c input arguments:
c ConvergenceType (int,sc,in) - type of convergence to be checked
c 1, nonlinear element (called after
c element matrix formation)
c 2, force convergence (called after
c element matrix formation)
c 3, displacement convergence (called after
c equation solution)
c ConvergenceFlag (int,sc,inout) - on input, the value the program determined
c for this Type
c 0, not converged
c 1, converged
c output arguments:
c ConvergenceFlag (int,sc,inout) - on output, the value the you have determined
c for this Type
c 0, not converged
c 1, converged
c Note: For overall convergence, all 3 Types must be converged. Not all
c Types are evaluated (dependent on CNVTOL input and program defaults)