Question
In UserMat.f, there are a number of parameters that are not clearly identified. In particular, for code parallelization, we need to know the Domain number, integration point number, element element. Would you please explain the meaning of the arguments
kDomIntPt (int,sc,i) "k"th domain integration point
kLayer (int,sc,i) "k"th layer
kSectPt (int,sc,i) "k"th Section point
Answer:
The word DOMAIN as used in USERMAT and the word DOMAIN as used in parallel processing do not refer to the same thing. In USERMAT, domain refers to the range of integration points for a particular element. In parallel processing, domain refers to the CPU number being used for a particular part of the processing. The kDomIntPt argument in USERMAT has nothing to do with parallel processing and can only be used to identify the location within the element where USERMAT calculations are being performed. This SOLUTION address the USERMAT arguments and how the values for the arguments are calculated for the various ANSYS elements that call USERMAT.
The USERMAT subroutine is called once for each integration point in the calling element. The current integration point is identified by the arguments list, including the arguments
elemId ' the element number
kDomIntPt ' the overall identifier for the element integration point
kLayer ' the layer number for elements that have multiple layers
kSectPt ' the section integration point number
USERMAT is only called by some elements new to the program after release 5.0. Elements available in release 4.4 do not call USERMAT as an option but may call other nonlinear material user subroutines. This solution does not address any of those other nonlinear user subroutines. And not all newer elements call USERMAT. Elements that currently (release 9.0) call USERMAT include the 18x family of elements, SHELL131/132 and SHELL 208/209.
The actual number of integration points varies with element type and depends o
Question In UserMat.f, there are a number of parameters that are not clearly identified. In particular, for code parallelization, we need to know the Domain number, integration point number, element element. Would you please explain the meaning of the arguments kDomIntPt (int,sc,i) "k"th domain integration point kLayer (int,sc,i) "k"th layer kSectPt (int,sc,i) "k"th Section point Answer: The word DOMAIN as used in USERMAT and the word DOMAIN as used in parallel processing do not refer to the same thing. In USERMAT, domain refers to the range of integration points for a particular element. In parallel processing, domain refers to the CPU number being used for a particular part of the processing. The kDomIntPt argument in USERMAT has nothing to do with parallel processing and can only be used to identify the location within the element where USERMAT calculations are being performed. This SOLUTION address the USERMAT arguments and how the values for the arguments are calculated for the various ANSYS elements that call USERMAT. The USERMAT subroutine is called once for each integration point in the calling element. The current integration point is identified by the arguments list, including the arguments elemId ` the element number kDomIntPt ` the overall identifier for the element integration point kLayer ` the layer number for elements that have multiple layers kSectPt ` the section integration point number USERMAT is only called by some elements new to the program after release 5.0. Elements available in release 4.4 do not call USERMAT as an option but may call other nonlinear material user subroutines. This solution does not address any of those other nonlinear user subroutines. And not all newer elements call USERMAT. Elements that currently (release 9.0) call USERMAT include the 18x family of elements, SHELL131/132 and SHELL 208/209. The actual number of integration points varies with element type and depends on the element characteristics. The actual number also depends upon whether element properties are defined by real constants or whether the properties are defined using SECDATA. Each element type has a fundamental number of integration points that are usually referred to as the domain integration points and is NOT the same as the kDomIntPt argument in the USERMAT subroutine. For continuum elements PLANE182/183, SOLID185/186/187 the number of domain integration points is identified in the Theory manual. For full integration, PLANE182/183 use 2X2 integration and SOLID185/186 use 2X2X2 integration; SOLID 187 has 4 integration points. For reduced integration for PLANE182 and SOLID185, the number of domain integration points is 1. Then, for continuum elements kDomIntPt = the integration point number kLayer = 1 kSectPt =1 For LINK180, the element stiffness matrix is formed directly and integration points are not required. However the USERMAT subroutine is called once to define the material property Jacobian required to form the stiffness matrix. Then, for LINK180 kDomIntPt = 1 kLayer = 1 kSectPt =1 For SHELL181, the number of domain integration points is 4. In addition, SHELL 181 has integration points through the thickness that are usually called section integration points. When real constant input is used for SHELL181, the number of section integration points is 5 (for a total of 20 integration points for the element). When SECDATA is used to define the shell, the user has the option of defining the number of integration points as any odd number; the default is 3 per layer. These section integration points are located at the domain integration point position in the plane of the shell and uniformly distributed through the thickness of the shell. Section integration points are called from bottom to top. The order of integration of the stiffness matrix (or the order of assembly of the layers of the shell) is on a domain integration point basis so that all of the section integration points will be called in order before moving to the next domain. As an example, consider a shell with 5 layers and the default number of integration points per layer, 3. The number of section integration points would then be 15 and the total number of integration points for the shell would be 60. . Then, for SHELL181, kDomIntPt = (Domain ` 1) * numSecIntPt + kSectPt (will vary from 1 to 60 for this example. kLayer = layer number associated with the current integration point (will vary from 1 to 5 for this example) kSectPt = the section integration point number (will vary from 1 to 15 for this example) SHELL208/209 functions in a manner similar to SHELL181 except that the number of domain integration points varies with the number of nodes. The minimum number is 1. SHELL131/132 functions in a manner similar to SHELL181 except that the number of section integration points is dependent upon the number of layers and the setting for KEYOPT(3). If KEYOPT(3) is zero, the number of section integration points is 2 per layer; otherwise the number of section integration points is 1 per layer. Also, SHELL132 uses a 3X3 domain integration scheme. As an example, consider a SHELL132 shell with 10 layers and KEYOPT(3) = 0. The number of integration points per layer would be 2 and the number of section integration points would then be 20. The total number of integration points for the shell would be 180. Then, kDomIntPt = (Domain ` 1) * numSecIntPt + kSectPt (will vary from 1 to 180 for this example. kLayer = layer number associated with the current integration point (will vary from 1 to 10 for this example) kSectPt = the section integration point number (will vary from 1 to 20 for this example) For BEAM188/189, the number of integration points varies with the shape of the section. BEAM188 has 1 domain integration point along its length and BEAM189 has two domain integration points along its length. At each domain integration point, the secti 

