4.3. Solid to Solid

This option enables the transfer of stresses, strains, and history variables between solid meshes. Additionally, it enables repositioning the history variables as needed.

4.3.1. Main Mapping Command

ENVYO = SOLID-SOLID

4.3.2. Input and Output Meshes

SourceFile = STRINGDefine the name and, if needed, the path of the source file (usually a *.dynain file).
TargetFile = STRINGDefine the name and, if needed, the path of the target file. The target file must be an LS-DYNA application mesh.
MappingResult = STRINGDefine the result file name. The mapping result is written into this newly generated file.

OrientationFile = HISV

Nodes

To enable the transfer of orientations, define this flag. It informs the program that the orientation data is stored within the history variables (HISV). Alternatively, you have the option of deriving the orientations from the element nodes. This method may yield accurate results if the mesh is well-aligned initially.
TransformedMeshFile = STRINGSpecify the file name where the transformed mesh is written. This option is intended solely for postprocessing of the transformation. For additional details, refer to the Transformation Options section below.
AddEleHISVFile# = STRINGA file name carrying element histories in an additional file. Multiple of these files can be defined. The first 10 digits of the lines must hold the element ID, the following 10 digits carry some arbitrary value, interpreted as an additional history variable on the element level.
LookupTable# = STRINGA file name carrying lookup tables. Values within one line are separated by a space. As described in the Equation Parser section, the Envyo application enables history variable lookup based on these looktables provided by you. Following the lookup table command, you must define the columns that are considered for variable lookup. See the example in the Equation Parser section.

The following options are available for the source, target, and result file formats:

SourceFileFormat = LS-DYNA

ESI-PC

Nastran

HDF5

ESI-HDF5

GCODE

ABAQUS

STEP

CSV

The source file format. The preferred format is LS-DYNA.
TargetFileFormat = LS-DYNAThe target file format. The only format available is LS-DYNA.
ResultFileFormat = LS-DYNAThe result file format. The only format available is LS-DYNA.

4.3.3. Target Part IDs and Source Part IDs

NumTargetPids = INT

Define the number of parts in the target mesh which are considered within the mapping. This option must be followed by TargetPid#i definitions.

TargetPid#i = INTDefine as many part IDs as given in NumTargetPids. These parts are considered for the mapping.
NumSourcePIDs = INT

Define the number of parts in the source mesh which are considered within the mapping. This option must be followed by SourcePID#i definitions.

SourcePID#i = INTDefine as many part IDs as given in NumSourcePIDs. These parts are considered for the mapping.

Note:  The options above specifically narrow down the scope of the mapping procedure to defined-part IDs. Other parts are ignored on both the source and target meshes.


4.3.4. Transformation Options

TRANSFORMATION = YES

NO

Turn the transformation option on or off.

WriteTransformedMesh = YES

NO

Flag to enable output of the transformed mesh used for mapping. This enables verifying the success of the transformation. If set to YES, a TransformedMeshFile must be specified (see Input and Output Meshes).

There are three available methods for performing mesh transformation:

  • TRAFO_OPTION is required:

    • Iterative Closest Point (ICP)

    • Four-Points-Congruent Sets (4PCS)

  • TRAFO_OPTION is not required:

    • User-defined translation and rotation

The 4PCS method must be used with caution, as it is fully automatic and may not accurately transform stress tensors and fiber orientations between different coordinate systems. The ICP algorithm is the recommended approach.

The user-defined translation and rotation options are listed underneath TRAFO_OPTION.


Note:  Transformation options are used to transform the source mesh.


TRAFO_OPTION = 4PCS

ICP

Flag that enables specification of the desired transformation option.
NodalPair#i = INT INTDefine nodal pairs to initialize mesh alignment for the ICP algorithm. You may specify up to ten nodal pairs, with a minimum of three required. In each pair, the first integer represents a node ID in the source mesh, and the second corresponds to a node ID in the target mesh. Input values must be space-separated, with each nodal pair provided on a separate line.
MAX_NUM_ITER = INTMaximum number of iterations to be performed by the 4PCS algorithm.
GLOBAL_ERR = DOUBLEGlobal error measure to accept transformation as best fit 4PCS algorithm.
MATCHING_POINT_DIST = DOUBLE

Maximum distance between points so that they are accepted as matching (4PCS).

PERCENTAGE_OF_MATCHING_POINTS = DOUBLEPercentage of matching points to accept the transformation (4PCS).

Additionally, a custom sequence of user-defined transformations can be applied. These transformations are executed in the order in which they are specified and multiple transformations may be defined:

RotateSRC = DOUBLE;X

DOUBLE;Y

DOUBLE;Z

DOUBLE; DOUBLE DOUBLE DOUBLE

The source mesh rotates by a specified angle (first value, in degrees) around a defined axis. Predefined axes include X, Y, and Z. Alternatively, a custom axis can be specified by providing three space-separated floating-point values following a semicolon (; x y z).
MoveSRC = DOUBLE DOUBLE DOUBLEThe source mesh moves along the user-defined vector (x y z).
ScaleSRC = DOUBLEThe source mesh scales around the origin using the defined scale factor.

In addition to the transformation options, there are options to convert the unit systems:

ChangeUnitSystem = YES

NO

Activates or deactives unit system conversion.

SourceUnitSystem = kg - m - s

ton - mm - s

kg - mm - ms

g - mm - ms

lb - in - s

If the unit system conversion is activated, provide information about the source unit system.

TargetUnitSystem = kg - m - s

ton - mm - s

kg - mm - ms

g - mm - ms

lb - in - s

If the unit system conversion is activated, provide information about the target unit system.

4.3.5. Mapping Options

ALGORITHM = ClosestPointThe only available option is ClosestPoint. Values are mapped to the nearest node, integration point, or element center.

Search_Radius = SrcEleLen

TarEleLen

DOUBLE

Specifies the search radius for the mapping algorithm. By default, SrcEleLen is used, which sets the radius to the average element size of the source mesh. Alternatively, you can use TarEleLen to apply the average element size of the target mesh, or provide a positive DOUBLE value to define a custom radius.
Scale_SearchRadius = DOUBLECoefficient to scale search radius. The default value is 1.0.
ETYP = INT

1 - Reduced integrated solid elements.

2 - Fully integrated solid elements.

MapStress = YES

NO

Activates or deactivates stress mapping.

MapStrain = YES

NO

Activates or deactivates strain mapping.
InitialStress = DOUBLEEnables initializing a specific stress value for all elements and integration points. This flag is mainly used to remove all stresses after mapping is performed, so that InitialStress = 0.0.

HISV_HANDLING = YES

NO

CLEAR

Enables moving and modifying history variables with custom definitions. Regarding the meaning of histories, refer to [20], [4]. If CLEAR, all history variables are removed before generating the result file. If YES, define as many history variables as must be modified in the following way:
MAX_NUM_HISV = INTDefine a new maximum number of history variables. This is an easy way to get rid of unwanted histories which are not useful for the new model, but also enables extending the amount of histories being output. If a history variable is being moved to a position which is higher than the actual number of history variables in the input deck, the number of histories are extended automatically.
STRESS TENSOR POS = INTPosition of the beginning of the stress tensor, if stored on history variables.
SORT = BUCKETUsing bucket sort is strongly recommended, as it provides a substantial performance improvement for the search algorithm.
REPEAT = YESEnable this option to ensure that all elements and integration points receive mapped data. When there is a significant difference in element sizes between the source and target meshes, the default bucket refinement may be insufficient to cover all points, sometimes by design. In such cases, this flag must be set to guarantee complete data coverage.

4.3.6. Equation Parser

The Envyo application implements an equation parser based on the Shunting yard algorithm and is available as MIT license [6]. This equation parser is modified to work with common variables in the LS-DYNA application such as histories, eff. plast. strains, and stresses. Variables are declared, using the & symbol and commands are executed in the order of input. The following variables are available:

&HISV#iHistory variable at position i.
&EPSEffective plastic strain (the last entry in *INITIAL STRESS SHELL which may have a different meaning than eff. plast. strain).
&ELELENGTHElement length of the current element.
&SIG_IJComponents of the second order stress tensor.
&SIG_INITEnables initializing a specific stress value that refers to all stress components.
&ADD ELE HISV#iElement history variable from file i is used.
&LookupTable#iLookup table from file i is used.
expExponent. An alternative input is e**.

The following example illustrates the usage of the equation parser in combination with the lookup tables. The commands following the additional history and lookup table definition are executed in the order of input.

Example of History Variable Manipulation

 AddEleHISVFile#1 = Results A.dyn 
 AddEleHISVFile#2 = Results B.dyn 
 LookupTable#1 = data A.txt,&COL#1,&COL#2,&COL#3 
 LookupTable#2 = data B.txt,&COL#1,&COL#2,&COL#3 
 &HISV#3 = &ADDELE HISV#2 
 &HISV#2 = &ADDELE HISV#1 
 &HISV#4 = abs(&HISV#3-&HISV#2)*0.000467354 
 &EPS = &LookupTable#1,linearInterpolation,&HISV#4,&ELELENGTH,&COL#3 
 &HISV#6 = &LookupTable#2,nextNeighbour,&EPS,&ELELENGTH,&COL#3 
 &HISV#8 = &HISV#2 
 &HISV#9 = &ELELENGTH MAX_NUM_HISV = 8 

Two additional element history files are loaded into the Envyo application, and are stored internally. Additionally, two lookup table files are read. Columns one, two, and three are considered for both files. The column numbers can be different, and the lookup tables may have more than three columns. After reading the data, the following commands are executed:

  • Additional element history variable from file 2 is stored as history variable #3. Additional element history variable from file 1 is stored as history variable #2. The value of history variable #4 is calculated by multiplying the absolute value of history #3-#2 with a scale factor.

  • To get information about the eff. plastic strain, lookup table #1 is used. If values are inbetween two values provided within one of the columns, linear interpolation is used. In this case, history variable #4 is compared to values stored in column #1. Following that, Envyo takes the element length of each element, and compares it with the values stored in column #2 of lookup table #1. The final result is the value provided in column #3.

  • The value of history variable #6 is derived in a comparable way, considering the next neighbor instead of performing a linear interpolation between the values. The first input is the resulting eff. plastic strain from the previous step. Again, results are provided in column #3.

  • Following these operations, history variable #8 is assigned the value at history variable #2, and the element length is stored at history variable #9. Nevertheless, only eight history variables are written to the final result file due to MAX_NUM_HISV.

4.3.7. Clustering Methods

Part clustering is available on arbitrary history variables or even stress values. The input is as follows:

CLUSTERID#i = STRING, STRING, DOUBLE, DOUBLE, INT (,INT)

  • The value at i refers to the old part ID in the target mesh.

  • The first STRING refers to the history variable or stress component which is used for part clustering (see the Equation Parser section).

  • The second STRING refers to the clustering method. Possible inputs are AVG for average or MinMax. In any case, the average of the values stored on integration points is used for evaluation.

  • The DOUBLE values refer to the values to which the averaged component (first STRING) is compared to. If AVG is defined, comparison uses these exact intervals. If the MinMax option is chosen, these values are the overall range of history variable values that are split into equally-spaced intervals by the provided optional (last) INT value. The first DOUBLE value refers to .GE., the second DOUBLE value to .LT.

  • The following INT value refers to the assigned part ID after clustering. If the MinMax option is chosen, this is the starting part ID for the lowest equally-spaced range.

  • The last INT value is only required for the MinMax option, and defines the number of equally-spaced splits to be performed.

Example

CLUSTERID#500004 = &HISV3,MinMax,1.248,9.120E+02,12,6

Target part ID 500004 is split based on history variable #3. The MinMax option is chosen, therefore, internally, the Envyo application creates 6 equally spaced regions between 1.248 and 9.12E+02. Averaged values of history variable #3 are assigned part IDs starting at part ID 12.

CLUSTERID#500004 = &HISV3,AVG,1.248,2.803E+02,12 
CLUSTERID#500004 = &HISV3,AVG,2.803E+02,4.067E+02,13 
CLUSTERID#500004 = &HISV3,AVG,4.067E+02,5.330E+02,14 
CLUSTERID#500004 = &HISV3,AVG,5.330E+02,6.593E+02,15 
CLUSTERID#500004 = &HISV3,AVG,6.593E+02,8.857E+02,16 
CLUSTERID#500004 = &HISV3,AVG,8.857E+02,9.120E+02,17

Target part ID 500004 is split based on the average values on each element of history varibale #3. Averaged values within a range of 1.248 ≤ x < 2.803E+02 are assigned the new part ID 12, values within the range of 2.803E + 02 ≤ x < 4.067E + 02 are assigned the new part ID 13, and so forth.

4.3.8. Workflow with MAT_TAUGHENED_ADHESIVE_POLYMER Material Model

If the SOLID-SOLID mapping is concerned with degree of cure (DoC) data, it can be augmented by a specific workflow with an explicit focus on the *MAT_TAUGHENED_ADHESIVE_POLYMER material model (also known as *MAT252 or *MAT TAPO). For brevity, the name *MAT252 is used.

For a better understanding of this workflow, some materials in the LS-DYNA application support a history variable for the DoC, which expresses the solidification state of the material during the hardening or curing processes. Depending on the DoC-value (in the range from 0 to 1), the original material properties are altered during the simulation in the LS-DYNA application. One option supporting this workflow is the *MAT307 card, which directly accepts DoC parameters on the history variables in the *INITIAL_STRESS_SOLID cards. On the contrary, it requires several parameters to setup the model. Another option is the *MAT252 card, which represents a more lightweight material model. However, it does not directly support DoC-values on the integration points. Via the two workflows characterized in Output: Initial Stress Cards and Output: New *PART and *MAT252 Cards, even the *MAT252 model can be adjusted based on the DoC parameter.

The main idea is discussed in the next section, while the corresponding commands are presented later in Commands. For a similar workflow, see Theseus to Solid.

4.3.9. Output: Initial Stress Cards

While the *MAT252 card does not support DoC-values on the history variables, it does support writing out four other history variables. If these are computed properly based on the DoC-values, they achieve the desired scaling of the material properties in the LS-DYNA application. The overall procedure is described below, while the corresponding commands are given in Output: Initial Stress Cards.

  1. Read in the DoC-values stored as history variables at the integration points in the *INITIAL_STRESS_SOLID cards.

  2. For every integration point, the four equations below and depicted in their respective figures are evaluated, where denotes the degree of cure. Furthermore, refers to a gel point above which the solidification of the material begins. Both and the remaining five parameters (, , , , and ) are set for achieving the required characteristic curves.

  3. For every element, write out *INITIAL_STRESS_SOLID cards containing the new history variables (, , , and ) at the integration points.

The following table contains the visualization of the curves given in their equations, using these parameters: , , , , , and .

(4–1)

(4–2)

(4–3)

(4–4)

4.3.10. Output: New *PART and *MAT252 Cards

For considering the DoC for the *MAT252 model, another option is to scale the material parameters directly within the Envyo application. As a result, a series of material cards is created and written out to the Envyo application's output file. In order to avoid writing out a modified material card for every element, in this approach, a clustering of elements is conducted, where each cluster represents a unique part with its own material. Otherwise, the strategy is almost equivalent to the one discussed in Output: Initial Stress Cards with the difference that here, each element has its own material definition instead of each integration point. The overall procedure is described below, and see Output: New *PART and *MAT252 Cards for the corresponding commands:

  1. Read in the DoC-values stored as history variables at the integration points in the *INITIAL_STRESS_SOLID cards.

  2. Compute the average DoC for each element.

  3. Based on their average DoC values, sort the elements into buckets, which are characterized by their lower and upper DoC values. You must set the number of buckets and the ranges these cover.

  4. For every bucket, create a new *PART card and corresponding *MAT252 card. The material properties for the given part are modified based on the average DoC associated with bucket limits. To achieve this, the functions in Output: Initial Stress Cards are evaluated first. Then, the resulting values are used according the seven equations below, where the parameters on the left-hand side are parameters for the new, modified *MAT252 card, while the values on the right-hand side with the ref extension refer to the parameters of the reference *MAT252, which is modified depending on the DoC. All elements that fall into a given bucket are added to that part.

    (4–5)

    (4–6)

    (4–7)

    (4–8)

    (4–9)

    (4–10)

    (4–11)

    For more information about these parameters, see the LS-DYNA User's Guide.

The *MAT252 material model represents an adhesive material and as such, it is typically augmented by the *MAT_ADD_COHESIVE keyword. Since depending on the number of requested buckets, a large amount of new parts and material cards are created, and adding the *MAT_ADD_COHESIVE cards by hand can potentially be a tedious task. Thus, these cards are also generated by the Envyo application based on certain inputs.

4.3.11. Mapping

The previous section describes workflows that apply to the case, where instead of mapping the results from a source to a target mesh, only the data on a source mesh is modified. No actual mapping takes place. If the discussed workflows are used while transferring data from one mesh to another, the notions from Output: Initial Stress Cards and Output: New *PART and *MAT252 Cards are modified as follows: In both cases, after performing step 1, the DoC-data stored on the integration points is mapped from the source mesh to the target mesh. After that, the procedure continues from step 2 for the target mesh, and the Envyo application's input file must contain the appropriate commands regarding the mapping.

4.3.12. Commands

Below is a review of the commands regarding the *MAT252 keyword. First, the commands are covered which are the same for both workflows. Then, in Output: Initial Stress Cards and Output: New *PART and *MAT252 Cards, the additional commands are discussed which are specific to the workflows of Output: Initial Stress Cards and Output: New *PART and *MAT252 Cards, respectively.

TargetMaterialModel = INTThis must be set to 252.
MAT252Parameter = DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLE, DOUBLEThis command is used to inform the Envyo application about the six parameters that are necessary for computing the four functions given in Output: Initial Stress Cards section. The six parameters must be given in the following order: , , , , , and .
MAT252Strategy = INT

1 - Output: Initial Stress Cards is triggered.

2 - Output: New *PART and *MAT252 Cards is triggered.

MAT252Definition = FILEThis command expects a .k- or .key-file containing a single instance of a *MAT252 keyword. The parsed keyword tells the Envyo application what material parameters to work with in this workflow.
DegreeOfCureHistoryPosition = INTThis command is used for telling the Envyo application at which history position is the DoC stored in the source mesh.

4.3.12.1. Output: Initial Stress Cards

If MAT252Strategy=1 is used, the above given commands must be extended by one additional command defined below.

MAT252IHIS = INTTypically, MAT252IHIS = 6 is recommended.

4.3.12.2. Output: New *PART and *MAT252 Cards

If MAT252Strategy = 2 is used, a clustering pipeline is invoked as described in Output: New *PART and *MAT252 Cards. Below, the additional commands are listed and explained, which are mandatory for MAT252Strategy = 2.

NumberOfBuckets = INTNumber of buckets for clustering the elements. If every bucket contains at least one element, the number of newly created parts equals NumberOfBuckets. Otherwise, *PART cards with no elements are deleted from the input deck.
StartingPartID = INTStarting ID for the new parts resulting from the clustering of the elements.
SecID = INTEach newly created *PART keyword requires the definition of a material ID and a section ID. While the material IDs are assigned to the parts by Envyo, you must define the section IDs. Currently, the section ID provided in this command is assigned to every new part.
StartingMatID = INTStarting ID for the new *MAT252 keywords.
AddMatCohesiveParameters = DOUBLE, DOUBLE, DOUBLE, DOUBLEAdhesive materials, such as the *MAT252 model, are often used in conjunction with the *MAT_ADD_COHESIVE keyword, which is characterized by the following five parameters: PID, ROFLG, INTFAIL, THICK, UNIAX. The pard ID (PID) for the newly created parts is already generated via the Envyo application. The remaining four parameters are parsed from this command and use for all *MAT_ADD_COHESIVE keywords.
MAT252ClusteringDegreeOfCureStartValue = INTIn addition to the number of buckets, you are required to provide a starting value for the DoC-range which is divided into buckets. In the current implementation start value of the range is by the command MAT252_Clustering_DegreeOfCureStartValue and the end value is DoC=1.0. Typically, the value pgel is used for this command, from which the solidification starts. However, if it is known a priori that all DoC value fall into range starting from much higher than pgel, other values can be used as well. Note that in all cases, an additional bucket is created that contains all elements in the DoC-range from 0.0 to start value set by you.