ProductsAbaqus/Explicit Component ordering in tensorsThe component ordering depends upon whether the tensor is a “strain” variable or a “stress” variable. Symmetric tensorsTensors such as the strain and strain increment have four components, and tensors such as stress have three components, with the difference between the two sets of variables arising from the assumed plane stress condition. The component order with the arrays for these variables is listed in the table below:
The shear strain components in user subroutine VFABRIC are stored as tensor components and not as engineering components. Initial calculations and checksIn the datacheck phase of the analysis Abaqus/Explicit calls user subroutine VFABRIC with a set of fictitious strains and a totalTime and stepTime that are both equal to 0.0. This step serves as a check on your constitutive relation and calculates the equivalent initial material properties, upon which the initial elastic wave speeds are computed. Orientation of the fabric yarnIn general, the yarn directions may not be orthogonal to each other in the reference configuration. You can specify these local directions with respect to the in-plane axes of an orthogonal orientation system at a material point. Both the local directions and the orthogonal system are defined together as a single orientation definition. If the local directions are not specified, these directions are assumed to match the in-plane axes of the orthogonal system. The local direction may not remain orthogonal with deformation. Abaqus updates the local directions with deformation and computes the nominal strains along these directions and the drop in angle between them (the fabric engineering shear strain). The constitutive behavior for the fabric defines the fabric nominal stresses as a function of the fabric strains. Abaqus converts these fabric stresses into the Cauchy stress and the resulting internal forces. Material point deletionMaterial points that satisfy a user-defined failure criterion can be deleted from the model (see User-defined mechanical material behavior). You must specify the state variable number controlling the element deletion flag when you allocate space for the solution-dependent state variables, as explained in Fabric material behavior. The deletion state variable should be set to a value of one or zero in user subroutine VFABRIC. A value of one indicates that the material point is active, while a value of zero indicates that Abaqus/Explicit should delete the material point from the model by setting the stresses to zero. The structure of the block of material points passed to user subroutine VFABRIC remains unchanged during the analysis; deleted material points are not removed from the block. Abaqus/Explicit will pass zero stresses and strain increments for all deleted material points. Once a material point has been flagged as deleted, it cannot be reactivated. User subroutine interface subroutine vfabric(
C Read only (unmodifiable)variables -
1 nblock, ndim, npt, layer, kspt, kstep, kinc,
2 nstatev, nfieldv, nprops,
3 lOp, jElem, stepTime, totalTime, dt, cmname, coordMp,
4 charLength, props, density, braidAngle, fabricStrain,
5 fabricStrainInc,
6 tempOld, fieldOld, fabricStressOld, stateOld,
7 tempNew, fieldNew, enerIntern,
C Write only (modifiable) variables -
8 fabricStressNew, stateNew, enerInelas )
C
C NOTE: In addition to the above "Write only" variables,
C the thickness direction component of fabricStrainInc
C i.e, fabricStrainInc(*,ndirStrain) may also be set by
C the user for changing thickness as a function
C of material in-plane state.
C
include 'vaba_param.inc'
C
parameter ( ndirStrain = 3, nshr = 1, ndirStress = 2)
C
C NOTE: The constants defined above are used for array
C dimensions below.
C
dimension
* jElem(nblock),
* coordMp(nblock,ndim),
* charLength(nblock),
* props(nprops),
* density(nblock),
* braidAngle(nblock),
* fabricStrain(nblock,ndirStrain+nshr),
* strainFabricInc(nblock,ndirStrain+nshr),
* tempOld(nblock),
* fieldOld(nblock,nfieldv),
* fabricStressOld(nblock,ndirStress+nshr),
* stateOld(nblock,nstatev),
* tempNew(nblock),
* fieldNew(nblock,nfieldv),
* fabricStressNew(nblock,ndirStress+nshr),
* stateNew(nblock,nstatev),
* enerIntern(nblock),
* enerInelas(nblock)
*
character*80 cmname
C
do 100 km = 1,nblock
user coding
100 continue
return
end Variables to be defined
Variables that can be updated
Variables passed in for information
Example: Using more than one user-defined material modelTo use more than one user-defined fabric material model, the variable cmname can be tested for different fabric material names inside user subroutine VFABRIC, as illustrated below: if (cmname(1:4) .eq. 'MAT1') then call VFABRIC_MAT1(argument_list) else if (cmname(1:4) .eq. 'MAT2') then call VFABRIC_MAT2(argument_list) end if VFABRIC_MAT1 and VFABRIC_MAT2 are the actual fabric material user subroutines containing the constitutive material models for each material MAT1 and MAT2, respectively. User subroutine VFABRIC merely acts as a directory here. The argument list can be the same as that used in subroutine VFABRIC. The material names must be in uppercase characters since cmname is passed in as an uppercase character string. Example: Influence of nonorthogonal material directions in highly anisotropic elastic materialAs an example of the coding of user subroutine VFABRIC, consider a simple elastic lamina material with highly anisotropic properties. For a fabric the material definitions need not remain orthogonal with deformation, whereas the directions do remain orthogonal for a built-in elastic material. The simple VFABRIC routine given below defines an elastic fabric and can be used to compare the fabric and the built-in elastic materials under different loading conditions. The user subroutine would be coded as follows: subroutine vfabric( C Read only (unmodifiable)variables - 1 nblock, ndim, npt, layer, kspt, kstep, kinc, 2 nstatev, nfieldv, nprops, 3 lOp, jElem, stepTime, totalTime, dt, cmname, coordMp, 4 charLength, props, density, braidAngle, fabricStrain, 5 fabricStrainInc, 6 tempOld, fieldOld, fabricStressOld, stateOld, 7 tempNew, fieldNew, enerIntern, C Write only (modifiable) variables - 8 fabricStressNew, stateNew, enerInelas ) C C NOTE: In addition to the above "Write only" variables, C the thickness direction component of fabricStrainInc C i.e, fabricStrainInc(*,ndirStrain) may also be set by the user C for changing thickness as a function of material in-plane C state. C include 'vaba_param.inc' C parameter( ndirStrain = 3, nshr = 1, ndirStress = 2, one = 1.d0, two = 2.d0 ) C C NOTE: The constants defined above are used for array C dimensions and computation below. C dimension * jElem(nblock), * coordMp(nblock,ndim), * charLength(nblock), * props(nprops), * density(nblock), * braidAngle(nblock), * fabricStrain(nblock,ndirStrain+nshr), * fabricStrainInc(nblock,ndirStrain+nshr), * tempOld(nblock), * fieldOld(nblock,nfieldv), * fabricStressOld(nblock,ndirStress+nshr), * stateOld(nblock,nstatev), * tempNew(nblock), * fieldNew(nblock,nfieldv), * fabricStressNew(nblock,ndirStress+nshr), * stateNew(nblock,nstatev), * enerIntern(nblock), * enerInelas(nblock) C character*80 cmname C C C Read properties E1 = props(1) E2 = props(2) xnu12 = props(3) twiceG12 = two * props(4) C xnu21 = E2 * xnu12 / E1 C C Let us assume: xnu13 = xnu12 xnu23 = xnu21 C xnu13OverE1 = xnu13/E1 xnu23OverE2 = xnu23/E2 C fr = one / ( one - xnu12 * xnu21 ) D11 = E1 * fr D22 = E2 * fr D12 = E2 * xnu12 * fr C do k = 1 , nblock C C Update the stress stressInc11 = D11 * fabricStrainInc(k,1) * + D12 * fabricStrainInc(k,2) stressInc22 = D22 * fabricStrainInc(k,2) * + D12 * fabricStrainInc(k,1) stressInc12 = twiceG12 * * fabricStrainInc(k,ndirStrain + 1) C fabricStressNew(k,1) = fabricStressOld(k,1) * + stressInc11 fabricStressNew(k,2) = fabricStressOld(k,2) * + stressInc22 C C shear stress fabricStressNew(k,ndirStress+1) = * fabricStressOld(k,ndirStress+1) + stressInc12 C C Thickness direction strain C fabricStrainInc(k,ndirStrain) = C * - ( xnu13OverE1 * stressInc11 C * + xnu23OverE2 * stressInc22 C * ) C end do return end |