The following subroutines enable you to customize contact interfacial behavior for contact elements (CONTA172, CONTA174, CONTA175, CONTA177, and CONTA178):
The subroutines enable you to:
Perform a user-defined operation on real constants (subroutine
usercnprop
)Write your own friction laws (subroutine
userfric
)Write your own contact interactions (subroutine
userinter
)Write your own wear law (subroutine
userwear
)
This subroutine applies to the CONTA17x
contact elements.
*deck,usercnprop USERDISTRIB subroutine usercnprop (ndim,coor,nkeyopt,keyopt,nrl,rlconst, x nintIn,intIn,nrealIn,realIn,kupdhis,localr,nuval,nintp,usvr, x ncomp,stress,strain0,strain,kstat,mu,kcnprop,cnprop,keyerr) c c *** primary function: Allow users to define their own contact properties c in real constant table c This logic is accessed with real constant defined c by table name: %_CNPROP% c (e.g. rmod,cid,kcnprop,%_CNPROP%) c c *** Notice - This file contains ANSYS Confidential information *** c c c Copyright ANSYS. All Rights Reserved. c *** ansys, inc. c c input arguments: c variable (type,sze,intent) description c c elem (int,sc,in) - element number c intpt (int,sc,in) - element integration point number c ndim (int,sc,in) - number of dimensions of the problem c = 2 2D c = 3 3D c nintp (int,sc,in) - the total number of integration points of c an element to be used with this routine c nuval (int) - number of additional state variables per c integration point c note: nuval x nintp = nstv(on nsvr command); cannot exceed 840! c c intIn (int,ar(*),in) - integer variables passed in c intIn (int,ar(*),in) - integer variables passed in c intIn(1) = element number c intIn(2) = element integration point number c intIn(3) = material reference number c intIn(4) = element type ID number (absolute value) c > 0 for CONTA171-CONTA177 c < 0 for CONTA178 c intIn(5) = real constant ID number c intIn(6) = associated contact nodal number c intIn(7) = contact indicator c 0: intersection is found c otherwise: no intersection c intIn(8) = target element number c intIn(9) = flag for forcing sliding c frictional case c 0 : not forcing c 1 : forcing (Slip direction is c defined through CMROT command) c intIn(10) = 1 first pass through c (1st iteration) c (useful for initializing state c variables to a non-zero value) c = 2 first pass through key of c a restart c = 3 first pass through key of c a rezoning c intIn(11) = current load step number c intIn(12) = current substep number c intIn(13) = current equilibrium iteration c number c intIn(14) = flag for using unsymmetric c matrices (nropt,unsym) c 0 : symmetric c 1 : unsymmetric c intIn(15) = Linear perturbation flag c 0 : a general load step c 1 : a linear perturbation step c intIn(16) = key to indicate output pass c 0 : not a output pass c 1 : output pass c intIn(17) = key to indicate if history- c dependent variables c (user defined) need to be c updated after the substep has c converged c 1 : update (converged) c 0 : do not update (not converged) c intIn(18) = key to indicate transient effects c 1 : transient is active c 0 : transient is not active c intIn(19) = large deformation key [nlgeom cmd] c 1 : on c 0 : off c intIn(20) = analysis type (derived from c antype cmd) c 0 : a static analysis c 1 : a buckling analysis c 2 : a modal analysis c 3 : a harmonic analysis c 4 : a transient analysis c 7 : a substructure analysis c 8 : a spectrum analysis c intIn(21) = key for displacement & force c convergence c 1 : converged c 0 : not converged c realIn (dp,ar(*),in) - real variables passed in c realIn(1) = contact element length c realIn(2) = contact element depth c realIn(3) = area associated with the contact c detection point c realIn(4) = pinball radius c realIn(5) = un-scaled normal penalty stiffness c realIn(6) = time (or frequency for a harmonic c analysis) at the beginning of this c load step c realIn(7) = time (or frequency for a harmonic c analysis) at the end of this load step c realIn(8) = current time value (or frequency value c for a harmonic analysis) c realIn(9) = time increment (or frequency increment c for a harmonic analysis) over this c substep c realIn(10)= temperature offset from absolute c zero c realIn(11)= geometric penetration/gap c (current substep) c > 0 : gap c < 0 : penetration c realIn(12)= time increment scaling factor to c be used for structural transient c dynamics c nkeyopt (int,sc,in) - number of key options c keyopt (int,ar(nkeyopt),in)- array containing key options c keyopt(1) : Select degree of freedom c keyopt(2) : Contact algorithm c ... so on (see ANSYS documentation) c nrl (int,sc,in) - number of real constants c rlconst (dp,ar(nrl),in) - array containing real constants c Elements CONTA171 to CONTA177 c rlconst(1) : R1 c rlconst(2) : R2 c rlconst(3) : FKN c rlconst(4) : FTOLN c ... so on (see ANSYS documentation) c Element CONTA178 c rlconst(1) : FKN c rlconst(2) : GAP c ... so on (see ANSYS documentation) c c kcnprop (int,sc,in) - the position of constant in the real set c c (see ANSYS contact element manual) c ncomp (int,sc,in) - number of stress/force component c = 9 for CONTA171-CONTA177 c = 7 for CONTA178 c stress (dp,ar(ncomp),in) - stress components at the beginning of c the current iteaation/substep. c stress(1) = frictional stress in direction 1 c stress(2) = frictional stress in direction 2 c (3D only) c stress(3) = contact normal pressure c > 0 : compression c < 0 : tension c the above contact traction must be defined in c a local coordinate system (see localr) c stress(4) = heat flux (per area) c flowing into contact c stress(5) = heat flux (per area) c flowing into target c < 0 heat flowing into a surface c > 0 heat flowing out of a surface c stress(6) = electrical current density c (or pore fluid flux density) c (per area) flowing into contact c stress(7) = electrical current density c (or pore fluid flux density) c (per area) flowing into target c > 0 current flowing out of a surface c < 0 current flowing into a surface c stress(8) = diffusion flux density c (per area) flowing into contact c stress(9) = diffusion flux density c (per area) flowing into target c > 0 flux flowing out of a surface c < 0 flux flowing into a surface c strain0 (dp,ar(ncomp),in) - strain components in the end of the previous c substep c (see strain for each component definition) c strain (dp,ar(ncomp),in) - current strain components c strain(1) = slip increment in direction 1 c strain(2) = slip increment in direction 2 c (3D only) c strain(3) = contact normal gap/penetration c < 0 : gap c > 0 : penetration c strain(4) = temperature at the contact point c (from TEMP DOF or temperature load) c strain(5) = temperature at the target point c (only from TEMP DOF) c strain(6) = voltage (or pore pressure) c at the contact point c strain(7) = voltage (or pore pressure) c at the target point c strain(8) = concentrationat the contact point c strain(9) = concentrationat the target point c kstat (int,sc,in) - contact status at the end of the previous c substep c 3 : stick c 2 : sliding c 1 : open contact (near) c 0 : open contact (far) c mu (dp,sc,in) - The frictional coef at the end of previous c substep c coor (dp,ar(6),in) - Coordinates of the contact detection point c coor(1) current x c coor(2) current y c coor(3) current z c coor(4) initial x c coor(5) initial y c coor(6) initial z c localr (dp,ar(3,3),in) - the direction cosines of the local surface c coordinate system at contact detection c localr(1,1),localr(1,2),localr(1,3) in slip c direction 1 c localr(2,1),localr(2,2),localr(2,3) in slip c direction 2 c localr(3,1),localr(3,2),localr(3,3) in normal c direction c c usvr (dp,ar(nuval,nintp),inout)- additional state variables from c previous equilibrium iteration (saved c if the nsvr command is used) c kupdhis (int,sc,in) - key to indicate if history-dependent c variables (user defined) need to be c updated after the substep has converged c 1 : update (converged) c 0 : do not update (not converged) c c output arguments: c variable (type,sze,intent) description c cnprop (dp,ar(5),out) - user defined real constant value and c derivatives w.r.t. kcnprop position c cnprop(1) = user defined real constant value c (e.g. kcnprop = 3 for normal contact c stiffness FKN. c positive as scaling factor; c negative value as the absolute value) c cnprop(2) = derivative of the real constant c w.r.t. geometric penetration/gap c cnprop(3) = derivative of the real constant c w.r.t. contact normal pressure c cnprop(4) = derivative of the real constant c w.r.t. temperature at contact c cnprop(5) = derivative of the real constant c w.r.t. temperature at target c usvr (dp,ar(nuval,nintp),inout)- updated additional state variables c They are passed in as the values at the c beginning of this substep. c They are updated to be the values at the c end of this substep c Use NSVR command to size usvr array and c set nuval to same value as number of c variables on NSVR commands c Use userou.F to save these values c on NMISC record for output purposes. c The number of user defined output items on c NMISC should be equal or less than NSTV c on nsvr command). It cannot exceed 120. c c keyerr (int,sc,inout) - key to indicate if there is any element c formulation error. c The error could be caused by too c large incremental step, illegal model. c = 0 no error (present value before calling) c = 1 some error happens. ANSYS will c decide to stop the analysis or cutback c the substep (bi-section) based on other c user input and information at higher c level. c
This subroutine applies to the CONTA17x
contact elements.
*deck,userfric USERDISTRIB subroutine userfric (elem,mat,intpt,nkeyopt,keyopt,nrl,rlconst, x ncomp,npropu,uprop,kfirst,kfsteq,kn,kt,elen,kstat,timval, x timinc,tcont,ttarg,toffst,dslip,slip,pres,tau,dt,usvr, x fdiss,elener,kupdhis,mu,dtdp,coor) c c *** primary function: Allow users to write their own friction laws. c This logic is accessed with tb,fric with tbopt=user. c The below demonstration logic is the same as using c tb,fric for isotropic Coulomb friction. c Other friction laws may require more general c definition of friction forces. c *** secondary function: demonstrate the use of user-written friction laws c in this routine: c a. update history variables c b. compute consistent tangent matrix c c *** Notice - This file contains ANSYS Confidential information *** c c c Copyright ANSYS. All Rights Reserved. c *** ansys, inc. c c input arguments: c variable (type,sze,intent) description c c elem (int,sc,in) - element number (label) c mat (int,sc,in) - material reference number c intpt (int,sc,in) - element integration point number c nkeyopt (int,sc,in) - number of key options c keyopt (int,ar(nkeyopt),in)- array containing key options c keyopt(1) : Select degree of freedom c keyopt(2) : Contact algorithm c ... so on (see ANSYS documentation) c nrl (int,sc,in) - number of real constants c rlconst (dp,ar(nrl),in) - array containing real constants c Elements CONTA171 to CONTA177 c rlconst(1) : R1 c rlconst(2) : R2 c rlconst(3) : FKN c rlconst(4) : FTOLN c ... so on (see ANSYS documentation) c Element CONTA178 c rlconst(1) : FKN c rlconst(2) : GAP c ... so on (see ANSYS documentation) c ncomp (int,sc,in) - no. of friction stress components (1 or 2) c npropu (int,sc,in) - no. of user-defined friction properties c uprop (dp,ar(npropu),in) - user-defined material properties c kfirst (int,sc,in) - 1 if first time through, 0 otherwise c (useful for initializing state variables c to a non-zero value) c kfsteq (int,sc,in) - 1 if first equilibrium iteration of a c substep, 0 otherwise c kn (dp,sc,in) - normal penalty stiffness c kt (dp,sc,in) - tangential penalty stiffness c (an initial guess is provided but c the user must pick a suitable c value that allows minimal tangential c slip during sticking without c adversely affecting the convergence; c a possible choice could be kt=mu*kn). c For Lagrange multiplier method (keyopt(2)=4 c use a small kt (several orders of magnitude c smaller than mu*pres). c elen (dp,sc,in) - length of contact element c kstat (int,sc,inout) - contact status c 3 : stick c 2 : sliding c 1 : open contact (near) c 0 : open contact (far) c timval (dp,sc,in) - current time value c timinc (dp,sc,in) - time increment over this substep c tcont (dp,sc,in) - contact surface temperature c (from temperature DOF or temperature load) c ttarg (dp,sc,in) - target surface temperature c (only from temperature DOF) c toffst (dp,sc,in) - temperature offset from absolute zero c dslip (dp,ar(ncomp),in) - slip increment (current substep) c slip (dp,ar(ncomp),inout)- accumulated slip (previous substep) c pres (dp,sc,in) - normal pressure/force (current substep) c > 0 : compression c < 0 : tension c tau (dp,ar(ncomp),inout)- frictional stress (previous substep) c Lagrange multiplier contribution is added c if keyopt(2)=4 c usvr (dp,ar(nuval,nintp),inout)- additional state variables from c previous equilibrium iteration (saved c if the nsvr command is used) c kupdhis (int,sc,in) - key to indicate if history-dependent c variables (user defined) need to be c updated after the substep has converged c 1 : update (converged) c 0 : do not update (not converged) c coor (dp,ar(6),in) - Coordinates of the contact detection point c coor(1) current x c coor(2) current y c coor(3) current z c coor(4) initial x c coor(5) initial y c coor(6) initial z c c output arguments: c variable (type,sze,intent) description c c kstat (int,sc,inout) - updated contact status c mu (dp,sc inout) - updated friction coefficient c slip (dp,ar(ncomp),inout)- updated accumulated slip c tau (dp,ar(ncomp),inout)- updated frictional stress c dt (dp,ar(5,5),out) - material tangent modulus c rows and columns of dt matrix are c associated to: c row 1 : frictional stress in direction 1 c row 2 : frictional stress in direction 2 c row 3 : normal pressure c row 4 : blank c row 5 : blank c col 1 : sliding in direction 1 c col 2 : sliding in direction 2 c col 3 : normal gap c col 4 : temperature at contact c col 5 : temperature at targte c relevant components to be filled in are: c dt(1,1): d(tau1)/d(slip1) c dt(1,2): d(tau1)/d(slip2) c dt(1,3): d(tau1)/d(normal gap) c dt(2,1): d(tau2)/d(slip1) c dt(2,2): d(tau2)/d(slip2) c dt(2,3): d(tau2)/d(normal gap) c dt(3,3): d(pres)/d(normal gap) c dt(3,3) set to kn internally c dt(1,4) : d(tau1)/d(tcont) c dt(1,5) : d(tau1)/d(ttarg) c dt(2,4) : d(tau2)/d(tcont) c dt(2,5) : d(tau2)/d(ttarg) c dtdp (dp,ar(ncomp),out) - partial derivative of the frictional c stress in direction 1/2 w.r.t. normal c pressure used in Lagrange multiplier c method (keyopt(2)=3,4). c usvr (dp,ar(nuval,nintp),inout)- updated additional state variables c For example, mu value and absolute c accumulated slip could be output as follows: c usvr(1,intpt) : mu c usvr(2,intpt) : abs. acc. slip in dir1 c usvr(3,intpt) : abs. acc. slip in dir2 c Use NSVR command to size usvr array and c set nuval to same value as number of c variables on NSVR commands c Use userou.F to save these values c on NMISC record for output purposes. c The number of user defined output items on c NMISC should be equal or less than NSTV c on nsvr command). It cannot exceed 120. c c fdiss (dp,sc,out) - incremental frictional dissipation c per unit area c elener (dp,sc,out) - incremental elastic stored energy c per unit area c c fortran parameters (to be defined by the user): c variable (type) description c nuval (int) - number of additional state variables per c integration point c nintp (int) - maximum number of integration points of c an element to be used with this routine c (14 is the maximum) c note: nuval x nintp = nstv(on nsvr command); cannot exceed 840! c c internal variables: c variable (type,sze) description c dtfac (dp,sc) - temporary variable c taulim (dp,sc) - limit frictional stress c taueq (dp,sc) - equivalent frictional stress c dir1 (dp,sc) - slip increment direction 1 c dir2 (dp,sc) - slip increment direction 2 c dslipeq (dp,sc) - equivalent slip increment c oldt1 (dp,sc) - frictional stress 1 from prev substep c oldt2 (dp,sc) - frictional stress 2 from prev substep c err (dp,ar(2)) - data array for diagnostic message c
This subroutine applies to the CONTA17x
contact elements.
*deck,userinter USERDISTRIB subroutine userinter (ndim,coor,nkeyopt,keyopt,nrl,rlconst, x npropu,uprop,nintIn,intIn,nrealIn,realIn,kupdhis,localr, x nuval,nintp,usvr,ncomp,stress,strain0,strain, x kstat,mu,dt,dtdp,kdamp,damp,fdiss,elener,keyerr,keycnv) c c *** primary function: Allow users to write their own interaction behavior. c This logic is accessed with tb,inter with tbopt=user. c *** secondary function: demonstrate the use of user-written interface laws c in this routine: c a. update history variables c b. compute consistent tangent matrix c c *** Notice - This file contains ANSYS Confidential information *** c c c *** Copyright ANSYS. All Rights Reserved. c *** ansys, inc. c c input arguments: c variable (type,sze,intent) description c c elem (int,sc,in) - element number c intpt (int,sc,in) - element integration point number c ndim (int,sc,in) - number of dimensions of the problem c = 2 2D c = 3 3D c nintp (int,sc,in) - the total number of integration points of c an element to be used with this routine c nuval (int) - number of additional state variables per c integration point c note: nuval x nintp = nstv(on nsvr command); cannot exceed 840! c c intIn (int,ar(*),in) - integer variables passed in c intIn(1) = element number c intIn(2) = element integration point number c intIn(3) = material reference number c intIn(4) = element type ID number (absolute value) c > 0 for CONTA171-CONTA177 c < 0 for CONTA178 c intIn(5) = real constant ID number c intIn(6) = associated contact nodal number c intIn(7) = contact indicator c 0: intersection is found c otherwise: no intersection c intIn(8) = target element number c intIn(9) = flag for forcing sliding c frictional case c 0: - not forcing c 1: - forcing (Slip direction is c defined through CMROT command) c intIn(10) = 1 first pass through c (1st iteration) c (useful for initializing state c variables to a non-zero value) c = 2 first pass through key of c a restart c = 3 first pass through key of c a rezoning c intIn(11) = current load step number c intIn(12) = current substep number c intIn(13) = current equilibrium iteration number c intIn(14) = flag for using unsymmetric matrices c (nropt,unsym) c 0: - symmetric c 1: - unsymmetric c intIn(15) = Linear perturbation flag c 0: - a general load step c 1: - a linear perturbation step c intIn(16) = key to indicate output pass c 0: not a output pass c 1: output pass c intIn(17) = key for displacement & force c convergence c 1: converged c 0: not converged c intIn(18) = key to indicate transient effects c 1 : transient is active c 0 : transient is not active c intIn(19) = large deformation key [nlgeom cmd] c 1 : on c 0 : off c intIn(20) = analysis type (derived from antype) c 0 : a static analysis c 1 : a buckling analysis c 2 : a modal analysis c 3 : a harmonic analysis c 4 : a transient analysis c 7 : a substructure analysis c 8 : a spectrum analysis c realIn (dp,ar(*),in) - real variables passed in c realIn(1) = contact element length c realIn(2) = contact element depth c realIn(3) = area associated with the contact c detection point c realIn(4) = pinball radius c realIn(5) = unscaled normal penalty stiffness c realIn(6) = time (or frequency for a harmonic c analysis) at the beginning of this c load step c realIn(7) = time (or frequency for a harmonic c analysis) at the end of this load step c realIn(8) = current time value (or frequency value c for a harmonic analysis) c realIn(9) = time increment (or frequency increment c for a harmonic analysis) over this c substep c realIn(10) = temperature offset from absolute c zero c realIn(11) = geometric penetration/gap c (current substep) c > 0 : gap c < 0 : penetration c realIn(12) = time increment scaling factor to c be used for structural transient c dynamics c realIn(13) = convection coefficient (SFE command) c realIn(14) = bulk temp (SFE command) c nkeyopt (int,sc,in) - number of key options c keyopt (int,ar(nkeyopt),in)- array containing key options c keyopt(1) : Select degree of freedom c keyopt(2) : Contact algorithm c ... so on (see ANSYS documentation) c nrl (int,sc,in) - number of real constants c rlconst (dp,ar(nrl),in) - array containing real constants c Elements CONTA171 to CONTA177 c rlconst(1) : R1 c rlconst(2) : R2 c rlconst(3) : FKN c rlconst(4) : FTOLN c ... so on (see ANSYS documentation) c Element CONTA178 c rlconst(1) : FKN c rlconst(2) : GAP c ... so on (see ANSYS documentation) c ncomp (int,sc,in) - number of stress/force component c = 9 for CONTA171-CONTA177 c = 7 for CONTA178 c stress (dp,ar(ncomp),inout)- stress components (current substep) c It is passed in as the stress at the beginning c of the current substep. It is updated to be c the stress at the end of this current substep c stress(1) = frictional stress in direction 1 c stress(2) = frictional stress in direction 2 c (3D only) c stress(3) = contact normal pressure c > 0 : compression c < 0 : tension c the above contact traction must be defined in c a local coordinate system (see localr) c Lagrange multiplier contribution is added c if keyopt(2)=3,4 c stress(4) = heat flux (per area) c flowing into contact c stress(5) = heat flux (per area) c flowing into target c < 0 heat flowing into a surface c > 0 heat flowing out of a surface c stress(6) = electrical current density c (or pore fluid flux density) c (per area) flowing into contact c stress(7) = electrical current density c (or pore fluid flux density) c (per area) flowing into target c > 0 current flowing out of a surface c < 0 current flowing into a surface c stress(8) = diffusion flux density c (per area) flowing into contact c stress(9) = diffusion flux density c (per area) flowing into target c > 0 flux flowing out of a surface c < 0 flux flowing into a surface c strain0 (dp,ar(ncomp),in) - strain components in the end of the previous c substep c (see strain for each component definition) c strain (dp,ar(ncomp),in) - current strain components c strain(1) = slip increment in direction 1 c strain(2) = slip increment in direction 2 c (3D only) c strain(3) = contact normal gap/penetration c < 0 : gap c > 0 : penetration c strain(4) = temperature at the contact point c (from TEMP DOF or temperature load) c strain(5) = temperature at the target point c (only from TEMP DOF) c strain(6) = voltage (or pore pressure) c at the contact point c strain(7) = voltage (or pore pressure) c at the target point c strain(8) = concentrationat the contact point c strain(9) = concentrationat the target point c c kstat (int,sc,inout) - contact status (current substep) c It is passed in as the status at the c beginning of the current substep. c It is updated to be the status at the c end of the current substep c 3 : stick c 2 : sliding c 1 : open contact (near) c 0 : open contact (far) c coor (dp,ar(6),in) - Coordinates of the contact detection point c coor(1) current x c coor(2) current y c coor(3) current z c coor(4) initial x c coor(5) initial y c coor(6) initial z c localr (dp,ar(3,3),in) - the direction cosines of the local surface c coordinate system at contact detection c localr(1,1),localr(1,2),localr(1,3) in c slip direction 1 c localr(2,1),localr(2,2),localr(2,3) in c slip direction 2 c localr(3,1),localr(3,2),localr(3,3) in c normal direction c c npropu (int,sc,in) - number of user-defined interaction properties c uprop (dp,ar(npropu),in) - user-defined material properties c c usvr (dp,ar(nuval,nintp),inout)- additional state variables from c previous equilibrium iteration (saved c if the nsvr command is used) c kupdhis (int,sc,in) - key to indicate if history-dependent c variables (user defined) need to be c updated after the substep has converged c 1 : update (converged) c 0 : do not update (not converged) c c output arguments: c variable (type,sze,intent) description c c kstat (int,sc,inout) - updated contact status c stress (dp,ar(ncomp),inout)- updated stress components c c dt (dp,ar(ncomp,ncomp),out)- interface stiffness matrix: c dt(i,j) defines the partial derivative of c the ith stress component at the current c substep w.r.t. the jth component of the c relative strain increment array. c If symmetric solver option used, ANSYS will c symmetrize the matrix bu averaging the c off-diagonal terms. c rows and columns of dt matrix are c associated to: c row 1 : frictional stress in direction 1 c row 2 : frictional stress in direction 2 c row 3 : normal pressure c > 0 : compression c < 0 : tension c row 4 : heat flux out the contact surface c < 0 heat flowing into contact c > 0 heat flowing out of target c row 5 : heat flux out the target surface c < 0 heat flowing into target c > 0 heat flowing out of target c row 6 : electrical current density c (or pore prssure) c flowing out the contact surface c > 0 current flowing out of contact c < 0 current flowing into contact c row 7 : electrical current density c (or pore prssure) c > 0 current flowing out of target c < 0 current flowing into target c row 8 : diffusion flux density c flowing out the contact surface c > 0 flux flowing out of contact c < 0 flux flowing into contact c row 9 : diffusion flux density c > 0 flux flowing out of target c < 0 flux flowing into target c col 1 : sliding in direction 1 c col 2 : sliding in direction 2 c col 3 : normal gap c < 0 : gap c > 0 : penetration c col 4 : temperature at the contact surface c col 5 : temperature at the target surface c col 6 : voltage at the contact surface c col 7 : voltage at the target surface c col 8 : concentration at the contact surface c col 9 : concentration at the target surface c relevant components to be filled in are: c dt(1,1): d(tau1)/d(slip1) c dt(1,2): d(tau1)/d(slip2) c dt(1,3): d(tau1)/d(normal gap) c dt(1,4): d(tau1)/d(tempC) c dt(1,5): d(tau1)/d(tempT) c dt(1,6): d(tau1)/d(voltC) c dt(1,7): d(tau1)/d(voltT) c dt(1,8): d(tau1)/d(concC) c dt(1,9): d(tau1)/d(concT) c dt(2,1): d(tau2)/d(slip1) c dt(2,2): d(tau2)/d(slip2) c dt(2,3): d(tau2)/d(normal gap) c ... c dt(3,1): d(pres)/d(slip 1) c dt(3,2): d(pres)/d(slip 2) c dt(3,3): d(pres)/d(normal gap) c ... c dt(4,1): d(fluxC)/d(slip 1) c dt(4,2): d(fluxC)/d(slip 2) c dt(4,3): d(fluxC)/d(normal gap) c dt(4,4): d(fluxC)/d(tempC) c dt(4,5): d(fluxC)/d(tempT) c dt(4,6): d(fluxC)/d(voltC) c dt(4,7): d(fluxC)/d(voltT) c dt(4,8): d(fluxC)/d(concC) c dt(4,9): d(fluxC)/d(concT) c ... c dt(5,4): d(fluxT)/d(tempC) c dt(5,5): d(fluxT)/d(tempT) c dt(5,6): d(fluxT)/d(voltC) c dt(5,7): d(fluxT)/d(voltT) c dt(5,8): d(fluxT)/d(concC) c dt(5,9): d(fluxT)/d(concT) c ... c dt(6,4): d(eleC)/d(tempC) c dt(6,5): d(eleC)/d(tempT) c dt(6,6): d(eleC)/d(voltC) c dt(6,7): d(eleC)/d(voltT) c dt(6,8): d(eleC)/d(concC) c dt(6,9): d(eleC)/d(concT) c ... c dt(7,4): d(eleT)/d(tempC) c dt(7,5): d(eleT)/d(tempT) c dt(7,6): d(eleT)/d(voltC) c dt(7,7): d(eleT)/d(voltT) c dt(7,8): d(eleT)/d(concC) c dt(7,9): d(eleT)/d(concT) c ... c dt(8,4): d(diffC)/d(tempC) c dt(8,5): d(diffC)/d(tempT) c dt(8,6): d(diffC)/d(voltC) c dt(8,7): d(diffC)/d(voltT) c dt(8,8): d(diffC)/d(concC) c dt(8,9): d(diffC)/d(concT) c ... c dt(9,4): d(diffT)/d(tempC) c dt(9,5): d(diffT)/d(tempT) c dt(9,6): d(diffT)/d(voltC) c dt(9,7): d(diffT)/d(voltT) c dt(9,8): d(diffT)/d(concC) c dt(9,9): d(diffT)/d(concT) c dtdp (dp,ar(ncomp),out) - partial derivative of the frictional stress c in direction 1,2 w.r.t. normal pressure c used in Lagrange multiplier method c (keyopt(2)=3,4). c damp (dp,ar(3,3),out) - interface damping matrix (structure only) c it can be used only in Linear perturbation c modal analysis or transient analysis or c harmonic analysis in frequence domain. c damp(i,j) defines the partial derivative of c the ith stress component at the current c substep w.r.t. the jth component of the c strain increment rate array. c rows and columns of dt matrix are c associated to: c row 1 : frictional stress in direction 1 c row 2 : frictional stress in direction 2 c row 3 : normal pressure c col 1 : sliding rate in direction 1 c col 2 : sliding rate in direction 2 c col 3 : normal gap rate c kdamp (int,sr,out) - damping matrix index c 0 : no damping matrix c 1 : taking damping matrix into account c usvr (dp,ar(nuval,nintp),inout)- updated additional state variables c For example, mu value and absolute/relative c accumulated slip could be output as follows: c usvr(1,intpt) : mu c usvr(2,intpt) : abs. acc. slip in dir1 c usvr(3,intpt) : abs. acc. slip in dir2 c usvr(4,intpt) : acc. slip in dir1 c usvr(5,intpt) : acc. slip in dir2 c They are passed in as the values at the c beginning of this substep. They are updated c to be the values at the end of this substep. c Use NSVR command to size usvr array and c set nuval to same value as number of c variables on NSVR commands c Use userou.F to save these values c on NMISC record for output purposes. c The number of user defined output items on c NMISC should be equal or less than NSTV c on nsvr command). It cannot exceed 120. c c mu (dp,sc,inout) - The current frictional coefficient c fdiss (dp,sc,out) - incremental frictional dissipation c per unit area c elener (dp,sc,inout) - Total elastic stored energy c per unit area. c Previous converged value is passed in and c current total should be the output c c keyerr (int,sc,out) - key to indicate if there is any element c formulation error, like c contact status changes abruptly, c too much penetration. c The error could be caused by too c large incremental step, illegal model. c = 0 no error (preset value before calling) c = 1 some error happens. ANSYS will c decide to stop the analysis or cutback c the substep (bi-section) based on other c user input and information at higher c level. c keycnv (int,sc,inout) - key to flag if this element satisfies c the user defined element convergence c criterion. c = 1, yes, the criterion is satisfied c or don't have any criterion at all c it is preset value before calling c = 0, no, the element doesn't satisfy c element convergence criterion. If c this is the case, the iteration will c not converge even when both force c and displacement converge c c internal variables: c variable (type,sze) description c
This subroutine applies to CONTA17x
contact elements.
*deck,userwear USERDISTRIB subroutine userwear(WearInc,WearDir,TotWearOld,strain, x stress,temperature,dtime,YieldStress,nTbprop,Tbprop, x coor,kstat,elem,intpt,ndim,localr,intIn,realIn,usvr, x keyopt,rlconst) c *** Primary Function: Calculates the Wear Increment and (optionally) wear direction c *** Notice - This file contains ANSYS Confidential information *** c c c *** Copyright ANSYS. All Rights Reserved. c *** ansys, inc. c input arguments: c variable (type,sze,intent) description c c ndim (int,sc,in) - number of dimensions of the problem c = 2 2D c = 3 3D c TotWearOld(dp,ar(ndim),in) - Total Wear at the contact point at the previous substep c strain (dp,ar(3),in) - current strain components in contact surface coordinate system c strain(1) = slip increment in direction 1 c strain(2) = slip increment in direction 2 c (3D only) c strain(3) = contact normal gap/penetration c < 0 : gap c > 0 : penetration c stress (dp,ar(3),in) - stress components in contact surface coordinate system c stress(1) = frictional stress in direction 1 c stress(2) = frictional stress in direction 2 c (3D only) c stress(3) = contact normal pressure c > 0 : compression c < 0 : tension c temperature (dp,sc,in) - temperature c dtime (dp,sc,in) - time increment c YieldStress (dp,sc,in) - Yield stress of underlying element (defined only for Plastic material-see doc for restrictions) c nTbprop (int,sc,in) - Number of TBdata for Tb,Wear per field c Tbprop (dp,ar(nTbprop,in) - TB data for the the Tb,Wear option at the given temperature c coor (dp,ar(6),in) - Coordinates of the contact detection point c coor(1) current x c coor(2) current y c coor(3) current z c coor(4) initial x c coor(5) initial y c coor(6) initial z c kstat (int,sc,in) - contact status (current substep) c 3 : stick c 2 : sliding c 1 : open contact (near) c 0 : open contact (far) c elem (int,sc,in) - element number c intpt (int,sc,in) - element integration point number c localr (dp,ar(3,3),in) - the direction cosines of the local surface c coordinate system at contact detection c localr(1,1),localr(1,2),localr(1,3) in c slip direction 1 c localr(2,1),localr(2,2),localr(2,3) in c slip direction 2 c localr(3,1),localr(3,2),localr(3,3) in c normal direction c intIn (int,ar(*),in) - integer variables passed in c intIn(1) = target element number the contact element c is in contat with (or is closest) c intIn(2) = Attached contact element number (if any) c to the target element in passed in intIn(1) c intIn(3) = number of additional state variables per c integration point (nuval) c intIn(4) = the total number of integration points of c an element to be used with this routine (nintp) c intIn(5) = key to indicate if history-dependent c variables (user defined) need to be c updated after the substep has converged c 1 : update (converged) c 0 : do not update (not converged) c realIn (dp,ar(*),in) - real variables passed in c realIn(1) = contact element length c realIn(2) = contact element depth c realIn(3) = area associated with the contact c detection point c c usvr (dp,ar(nuval*nintp),inout)- additional state variables from c previous equilibrium iteration (saved c if the nsvr command is used c keyopt (int,ar(*),in) - array containing key options for the element c rlconst (dp,ar(*),in) - array containing real constants for the element c Output Arguments: c variable (type,sze,intent) description c c WearInc (dp,sc) - Increment in the Wear (magnitude)- User must define c WearDir (dp,ar(ndim),inout) - Direction cosines in global coordinate system c in which wear increment will be applied- Optional c default coming in -Contact normal direction