# TPMplt package tutorial

#### Chen Zhang

#### 2024-01-19

## Main functions

TPMplt is a tool-kit for building and visualizing the dynmaic
materials model (DMM), suggested by Prasad and
Gegel. It provides an easy approach to calculate constructive
functions and other related material constants based on a given strain
condiiton. 2D and 3D processing-maps with temperature as its x axis,
while logarithm strain rate as its y axis are also available.

## Conceptual knowledge about VBTree data frame

It is necessary to build the conceptions for layers and levels in
layer for variables, defined by VBTree package. For
example, run the following codes to check all column names in the demo
dataset in TPMplt pacakge:

```
colnames(TPMdata)
#> [1] "Strain-900-0.001-60%" "Stress-900-0.001-60%" "Strain-900-0.01-60%"
#> [4] "Stress-900-0.01-60%" "Strain-900-0.1-60%" "Stress-900-0.1-60%"
#> [7] "Strain-900-1-60%" "Stress-900-1-60%" "Strain-950-0.001-60%"
#> [10] "Stress-950-0.001-60%" "Strain-950-0.01-60%" "Stress-950-0.01-60%"
#> [13] "Strain-950-0.1-60%" "Stress-950-0.1-60%" "Strain-950-1-60%"
#> [16] "Stress-950-1-60%" "Strain-1000-0.001-60%" "Stress-1000-0.001-60%"
#> [19] "Strain-1000-0.01-60%" "Stress-1000-0.01-60%" "Strain-1000-0.1-60%"
#> [22] "Stress-1000-0.1-60%" "Strain-1000-1-60%" "Stress-1000-1-60%"
#> [25] "Strain-1050-0.001-60%" "Stress-1050-0.001-60%" "Strain-1050-0.01-60%"
#> [28] "Stress-1050-0.01-60%" "Strain-1050-0.1-60%" "Stress-1050-0.1-60%"
#> [31] "Strain-1050-1-60%" "Stress-1050-1-60%" "Strain-1100-0.001-60%"
#> [34] "Stress-1100-0.001-60%" "Strain-1100-0.01-60%" "Stress-1100-0.01-60%"
#> [37] "Strain-1100-0.1-60%" "Stress-1100-0.1-60%" "Strain-1100-1-60%"
#> [40] "Stress-1100-1-60%" "Strain-1150-0.001-60%" "Stress-1150-0.001-60%"
#> [43] "Strain-1150-0.01-60%" "Stress-1150-0.01-60%" "Strain-1150-0.1-60%"
#> [46] "Stress-1150-0.1-60%" "Strain-1150-1-60%" "Stress-1150-1-60%"
#> [49] "Strain-1200-0.001-60%" "Stress-1200-0.001-60%" "Strain-1200-0.01-60%"
#> [52] "Stress-1200-0.01-60%" "Strain-1200-0.1-60%" "Stress-1200-0.1-60%"
#> [55] "Strain-1200-1-60%" "Stress-1200-1-60%"
```

As we can see, all column names are arranged by the style of
“(Strain&Stress)-(Temperature)-(Strain Rate)-(Other)”. In this case,
we attribute the variable the concept ‘layer’, and the order of values
in specified layer the ‘level’. The layer for temperature is 2, while
the layer for strain rate is 3; the temperature of 1000 is at level 3 in
layer 2.

The function `epsExtract`

is capable to export a strain
rate-temperature table by specifying `eps`

as the selected
strain condition. However, `lyT`

and `lySR`

, the
two necessary arguments corresponding to layers for temperature and
strain rate respectively, require correct assignment as well.

Executinge the following codes:

```
require(VBTree)
#> 载入需要的程辑包：VBTree
dl2vbt(chrvec2dl(colnames(TPMdata)))
#> $tree
#> $tree[[1]]
#> [1] "Strain" "Stress"
#>
#> $tree[[2]]
#> $tree[[2]][[1]]
#> [1] "900" "950" "1000" "1050" "1100" "1150" "1200"
#>
#> $tree[[2]][[2]]
#> $tree[[2]][[2]][[1]]
#> [1] "0.001" "0.01" "0.1" "1"
#>
#> $tree[[2]][[2]][[2]]
#> $tree[[2]][[2]][[2]][[1]]
#> [1] "60%"
#>
#> $tree[[2]][[2]][[2]][[2]]
#> list()
#>
#>
#>
#>
#>
#> $dims
#> [1] 2 7 4 1
#>
#> attr(,"class")
#> [1] "Vector.Binary.Tree"
```

The complete structure for all variables is showed. As the result
showed above, there’re 7 temperatures and 4 strain rates in our summary
table, therefore the numbers of level for temperature and strain rate
are 7 and 4 respectively. Based on all introduced knowledge, we can
easily find that all factors will be corresponded with a unique identity
with the format as (layer, level). For example, we can define the factor
“950” is located in layer 2, level 2.

## Auto plots for stress-strain curves

`SSplots`

is automatic completion for stress-strain curve
plots, using VBTree
package group strategy. It help researchers check the profiles of
their experimental data conveniently. The argument `grpby`

determines attribute to be grouped for each plot. As an instance,
stress-strain curves grouped by strain rates, separated by temperature
condition in each individual plot can be achieved using the code
`SSplots(TPMdata, 3, mfrow=c(3, 3))`

. The layer for strain
rate is 3, therefore the 2nd argument `grpby`

is 3 (7 figures
totally, therefore `mfrow`

use a 3*3 division to ensure
correct display):

Grouped by temperature is also available, by running
`SSplots(TPMdata, 2, mfrow=c(2, 2))`

, four figures will be
exported as:

However, multiple plots export using `graphics`

is very
sensitive to the Plots pane’s in RStudio. Before plotting, please make
sure the area of this pane is large enough to include all your
output.

## Applying Kalman smoothing

Sometimes, curves of flow stress as function of flow strain might be
of high vibration, therefore the fitting process for all data is
necessary. However, in most circumstances, raw stress-strain curves
always present too complicated appreance to be fitted by a single linear
model. The function `KFprocess()`

in this package is designed
to solve this problem. From the aforementioned raw stress-strain curves
generated by `SSplots(TPMdata, 2, mfrow=c(2, 2))`

, it is not
difficult to find for most curves, vibration starts from where the
plastic deformation occurs; Using the `dV`

as 0.3 and
`dW`

as 0.006, the main paths of flow stress vs. flow strain
curves can successfully obtained:

```
Fitted_data <- KFprocess(TPMdata, dV = 0.3, dW = 0.006)
SSplots(Fitted_data, 2, mfrow=c(2, 2))
```

Compared to the raw curves, we can find the fitted curves keep the
most appearance with less vibrations or noises. For desired output, you
may try different combinations of arguments `dV`

and
`dW`

. Help documentation and references might be helpful. The
calculation of adiabatic heating correction will utilize the integral of
those curves, the smoothing by Kalman will make a more robust output
rationally.

## Adiabatic heating correction

Adiabatic heating correction can be implemented after smoothing if it
is necessary. We can use the function `TCorrect()`

to output
the adiabatic heating correction on data by declaring some necessary
material contants. Take the conventional steel as the example, the heat
capacity constant and material density are 502.416 J/(kJ*K) and 7.8
g*cm^(-3). The corrected data of flow strain ranged from 0 to 0.9 with
0.02 increase in each step would be:

```
TCorrect_data <- TCorrect(TPMdata, 2, 3, 0.9, 7.8, 502.416, seq(0, 0.9, 0.02))
SSplots(TCorrect_data, 2, mfrow=c(2, 2))
```

The 2nd and 3rd argument in `TCorrect()`

are integers to
specify the layer for temperatures and strain rates.

After temperature correction, it is noted that flow stress increase
significantly in low temperature, high strain rate, the two conditions
which is experientially corresponding to our common sense that working
hardening effect will be even obvious.

## Automatic calculation

On the basis of dynamic materials modeling (DMM), constructive
function and all material constants can be calculated from a certain
strain rate-temperature table. The function `DMMprocess`

includes all calculation steps for DMM processing. Call it on our
previous result (strain rate-temperature table through specified value
of strain), the complete output can be observed as following:

```
DMM <- DMMprocess(epstable)
DMM
#> $MaterialCoefficients
#> $MaterialCoefficients$base
#> [1] 10
#>
#> $MaterialCoefficients$epsilon.strain
#> [1] 0.7
#>
#>
#> $tablelist
#> $tablelist$SRTtable
#> 900 950 1000 1050 1100 1150 1200
#> 0.001 93.20607 72.89237 56.57545 41.81621 28.54170 16.14671 4.628616
#> 0.01 173.00795 138.43819 108.38777 83.91802 57.85085 37.67723 17.191613
#> 0.1 254.18349 205.85830 161.76956 120.09987 95.91450 66.25144 39.840429
#> 1 292.08106 240.83446 201.05563 166.40103 133.61666 103.63520 78.347986
#>
#> $tablelist$etatable
#> 900 950 1000 1050 1100 1150 1200
#> 0.001 0.4821623 0.4989540 0.5143547 0.5917198 0.5232698 0.6239722 0.8350506
#> 0.01 0.3589281 0.3674713 0.3650931 0.3429635 0.4142833 0.4550536 0.6160868
#> 0.1 0.2056066 0.2140968 0.2290617 0.2246296 0.3048442 0.3439621 0.4698911
#> 1 0.0104753 0.0329846 0.1208608 0.3033972 0.1983005 0.3234620 0.4645742
#>
#> $tablelist$xitable
#> 900 950 1000 1050 1100 1150
#> 0.001 0.224795781 0.22189737 0.19878697 0.03604194 0.24504314 0.1575992
#> 0.01 0.156394203 0.15762142 0.15510319 0.12251926 0.19505528 0.1866591
#> 0.1 0.083198325 0.08768193 0.10260601 0.12190650 0.14289945 0.1783580
#> 1 0.003901329 0.01276194 0.05634805 0.23643104 0.09207504 0.2042067
#> 1200
#> 0.001 -0.2421264
#> 0.01 0.1417022
#> 0.1 0.2411929
#> 1 0.3590626
#>
#>
#> attr(,"class")
#> [1] "DMMresult"
```

If the constructive function is also the thing we concerned, set the
argument `ConsFunc`

in `DMMprocess`

as
`TRUE`

:

```
DMM <- DMMprocess(epstable, ConsFunc = TRUE)
#> Constitutive equation in0.7strain:
#> Epsilon=A{[sinh(Alpha*Sigma)]^n}*exp[-Q/(RT)]
#> Where A =1458354157082817s^-1
#> Alpha =0.0125766595139204MPa^-1 = 1.257666e-02Pa^-1
#> Q =427084.271412688J/mol = 427.084271412688kJ/mol
#> R = 8.314J/(mol*K)
#> Epsilon is strain rate
#> Sigma is flow stress
#> T is Temperature (K)
```

Additionally, if the argument `InteractMode`

is TRUE, all
computation process and corresponding fitting figures can be output step
by step. There shows some results in following figures:

All workflow control will be prompted in the console, something
like:

## Preparation for visualization

As we can see, the “etatable” and “xitable” in tablelist are two
constitutive parts for building processing-map. The former is for power
dissipation efficiency factor eta, and the later is for rheological
stability coefficient xi. However, since the values in both are
discrete, regression process for these tables is necessary.

Support vector regression (SVR)
is suggested in this package. The function `SVRModel`

will
return a regression result which can be utilized by following functions
for plots.

The following demonstration save the returned result into the
vairable “PLTbd”, for the meaning of “Plots builder”.

## 2D processing map visualization

Function `TPM2dplt`

can generate a thermal processing map
from regression result easily. Following codes demonstrates the
processing map from “PLTbd” with default settings:

In this processing map plot, customarily the power dissipation
efficiency factor eta is denoted by contour with gradient blue, while
the rheological stability coefficient xi is represented by a gradient
colours from blue (low) to red (high). Annotation in top-left show the
strain condition for current processing map.

Locations for annotation, gradient colors for rheological stability
coefficient xi is customizable in `TPM2dplt`

function. Refer
the documentation for details.

## 3D processing map visualization

Function `TPM3dplt`

can build a thermal processing results
as similar as `TPM2dplt`

did. The difference is, eta and xi
will be separately plotted.

By running the following code, we can easily obtain the results as
shown in the next figure.