state(nStates,nNodState,nBlock) This array contains the user-defined, solution-dependent state variables for all the nodes on the slave surface. The use of state variables is applicable for node-to-face and node-to-analytical rigid surface contact. See “Frictional behavior,” Section 37.1.5 of the Abaqus Analysis User’s Guide, for more information on the size of this array. This array will be passed in containing the values of these variables prior to the call to user subroutine VFRICTION. If any of the solution-dependent state variables are being used in conjunction with the friction behavior, they must be updated in this subroutine. These state variables need to be updated with care: outside the user subroutine these state variables are single-valued per slave node, but multiple contact points may refer to the same slave node (if it contacts a master surface at more than one point). Each contact point may be passed into the user subroutine independently in a given increment, possibly on separate calls to the user subroutine; therefore, you may end up advancing the state variables for the associated node multiple times for a single increment. To keep track of whether or not a node state is advanced, you may want to use one of the state variables exclusively for this purpose. You could set that selected state variable to the current increment number and update the state only if it is not already set to the current increment number. Variables passed in for information ```txt nBlock Number of contact points to be processed in this call to VFRICCTION. nBlockAnal 1 for analytical rigid master surface; nBlock otherwise. nBlockEdge nBlock for edge-type slave surface; 1 otherwise. nNodState 1 for node-to-face contact and node-to-analytical rigid surface contact. nNodSlv 1 for node-to-face and node-to-analytical rigid surface contact; 2 for edge-to-edge contact. nNodMst 1 for analytical rigid master surface; 2 for edge-type master surface; 4 for facet-type master surface. nFricDir Number of tangent directions at the contact points (nFricDir = nDir - 1). nDir Number of coordinate directions at the contact points (equal to 3). ``` nStates Number of user-defined state variables. nProps User-specified number of property values associated with this friction model. nTemp 1 if the temperature is defined and 0 if the temperature is not defined. nFields Number of predefined field variables. jFlag(1) Step number. jFlag(2) Increment number. jFlag(3) 1 for node-to-face contact, 2 for edge-to-edge contact, and 3 for node-to-analytical rigid surface contact. rData(1) Value of step time. rData(2) Value of total time. rData(3) Current increment in time from to . rData(4) This variable contains the value of the total frictional dissipation in the entire model from the beginning of the analysis. The units are energy per unit area. surfInt User-specified surface interaction name, left justified. surfSlv Slave surface name, currently set to a blank. surfMst Master surface name, currently set to a blank. jConSlvUid(nNodSlv,nBlock) This array lists the surface node numbers of the slave surface nodes associated with each contact point. # jConMstUid(nNodMst,nBlockAnal) This array lists the surface node numbers of the master surface nodes that make up the facet, edge, or analytical rigid surface associated with each contact point. # props(nProps) User-specified vector of property values to define the frictional behavior between the contacting surfaces. # dSlipFric(nDir,nBlock) This array contains the incremental frictional slip during the current time increment for each contact point in the current local coordinate system. These incremental slips correspond to tangential motion in the time increment from $t = t _ { c u r r } - \Delta t$ to $t = t _ { c u r r }$ . This incremental slip is used to define the local coordinate system at each contact point (see Figure 1.2.8–1) so that only the first component of dSlipFric can be nonzero in the local system. # fStickForce(nBlock) This array contains the magnitude of frictional force required to enforce stick conditions at each contact point. This force depends on the previous frictional force, the value of the penalty stiffness, and the previous incremental slip. The penalty stiffness is assigned automatically. Occasionally, during recovery of elastic slip associated with the penalty method, the stick force will be assigned a negative value. # fTangPrev(nDir,nBlock) This array contains the values of the frictional force components calculated in the previous increment but provided in the current local coordinate system (zero for nodes that were not in contact). # fNormal(nBlock) This array contains the magnitude of the normal force for the contact points applied at the end of current time increment; i.e., at time $t = t _ { c u r r }$ . # areaCont(nBlock) Area associated with the contact points. The sum of the contact areas among all contact points associated with a single slave node equals the surface area associated with that slave node (equal to 1 for node-based surface nodes). Therefore, the contact area at a contact point depends on the number of contact points currently associated with the same slave node. A contact point contributes a frictional stress to the associated slave node that is equal to fTangential(1,k) divided by areaCont(k). # dircosN(nDir,nBlock) Direction cosines of the normals to the master surface at the contact points. # dirCosS1(nDir,nBlock) Direction cosines of the incremental slip at the contact points. The direction cosines are undefined (all components zero) if the incremental frictional slip is zero. shapeSlv(nNodSlv,nBlockEdge) For edge-to-edge contact this array contains the shape functions of the nodes of its slave edge, evaluated at the location of the contact point. If the contact is not edge-to-edge, this array is passed in as a dummy array. shapeMst(nNodMst,nBlockAnal) For node-to-face and edge-to-edge contact this array contains the shape functions of the nodes of its master surface, evaluated at the location of the contact point. If the master surface is an analytical rigid surface, this array is passed in as a dummy array. coordSlv(nDir,nNodSlv,nBlock) Array containing the nDir components of the current coordinates of the contact points. coordMst(nDir,nNodMst,nBlockAnal) Array containing the nDir components of the current coordinates of the master nodes associated with the contact points. If the master surface is an analytical rigid surface, this array is passed in as a dummy array. velSlv(nDir,nNodSlv,nBlock) Array containing the nDir components of the current velocity of the contact points. velMst(nDir,nNodMst,nBlockAnal) Array containing the nDir components of the current velocity of the master nodes associated with the contact points. If the master surface is an analytical rigid surface, this array is passed in as a dummy array. tempSlv(nBlock) Current temperature of the slave surface at the contact points. tempMst(nBlockAnal) Current temperature at the points on the master surface associated with the contact points. fieldSlv(nFields,nBlock) Current user-specified predefined field variables on the slave surface at the contact points (initial values at the beginning of the analysis and current values during the analysis). fieldMst(nFields,nBlockAnal) Current user-specified predefined field variables at the points on the master surface associated with the contact points (initial values at the beginning of the analysis and current values during the analysis). # 1.2.9 VUAMP: User subroutine to specify amplitudes. # Product: Abaqus/Explicit # References • “Amplitude curves,” Section 34.1.2 of the Abaqus Analysis User’s Guide • \*AMPLITUDE • \*OUTPUT # Overview User subroutine VUAMP: • allows you to define the current value of an amplitude definition as a function of time; • can be used to model control engineering aspects of your system when sensors are used (sensor values are from the beginning of the increment); • can use a predefined number of state variables in its definition; and • can optionally compute the derivatives and integrals of the amplitude function. # Explicit solution dependence The solution dependence introduced in this user subroutine is explicit: all data passed in the subroutine for information or to be updated are values at the beginning of that increment. # User subroutine interface SUBROUTINE VUAMP( ```javascript * ampName, time, ampValueOld, dt, nprops, props, nSvars, * svars, lFlagsInfo, nSensor, sensorValues, sensorNames, * jSensorLookUpTable, * AmpValueNew, * lFlagsDefine, * AmpDerivative, AmpSecDerivative, AmpIncIntegral) ``` INCLUDE 'VABA\_PARAM.INC' ```txt C time indices parameter (iStepTime = 1, * iTotalTime = 2, * nTime = 2) ``` C flags passed in for information ```prolog parameter (iInitialization = 1, * iRegularInc = 2, * ikStep = 3, * nFlagsInfo = 3) C optional flags to be defined parameter (iComputeDeriv = 1, * iComputeSecDeriv = 2, * iComputeInteg = 3, * iStopAnalysis = 4, * iConcludeStep = 5, * nFlagsDefine = 5) dimension time(nTime), lFlagsInfo(nFlagsInfo), * lFlagsDefine(nFlagsDefine), * sensorValues(nSensor), * props(nprops), * sVars(nSvars) character*80 sensorNames(nSensor) character*80 ampName dimension jSensorLookUpTable(*) user coding to define AmpValueNew, and optionally lFlagsDefine, AmpDerivative, AmpSecDerivative, AmpIncIntegral RETURN END ``` # Variable to be defined # AmpValueNew Current value of the amplitude. # Variables that can be updated # lFlagsDefine Integer flag array to determine whether the computation of additional quantities is necessary or to set step continuation requirements. lFlagsDefine(iComputeDeriv) If set to 1, you must provide the computation of the amplitude derivative. The default is 0, which means that Abaqus computes the derivative automatically.
| lFlagsDefine (iComputeSecDeriv) | If set to 1, you must provide the computation of the amplitude second derivative. The default is 0, which means that Abaqus computes the second derivative automatically. |
| lFlagsDefine (iComputeInteg) | If set to 1, you must provide the computation of the amplitude incremental integral. The default is 0, which means that Abaqus computes the incremental integral automatically. |
| lFlagsDefine (iStopAnalysis) | If set to 1, the analysis will be stopped and an error message will be issued. The default is 0, which means that Abaqus will not stop the analysis. |
| lFlagsDefine (iConcludeStep) | If set to 1, Abaqus will conclude the step execution and advance to the next step (if a next step is available). The default is 0. |