TPMplt package introduction

ZHANG Chen

2018-10-02

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.

Input data

Valid data for TPMplt strictly obey the management logic in VBTree package. Additionally, factors for temperature (celsius) and strain rates should be written in the format of pure numeric. All different variables are desired to be connected using “-” symbol. For example, if there’s a strain data collected in the conditions of 900 celsius, \(10^{-3}\) strain rate, “0.001-Strain-900” is one of available column names for this data, rather than “10e-3_Strain_T900C”, “SR0.001-Strain-1173K” or such like. If your data contains some unnecessary patterns, a certain degree of data cleaning for column names is required.

The following codes partially display a typical valid data for TPMplt:

library(TPMplt)
head(TPMdata[,1:3])
#>   Strain-900-0.001-60% Stress-900-0.001-60% Strain-900-0.01-60%
#> 1              0.00009                 2.81             0.00030
#> 2              0.00026                 2.95             0.00052
#> 3              0.00059                 3.37             0.00068
#> 4              0.00076                 3.37             0.00084
#> 5              0.00093                 3.65             0.00112
#> 6              0.00104                 3.79             0.00122

Users can apply any applicable tools to make the summary table for TPMplt, with the format as above-showed.

Besides, it is common to obtain multiple exported files based on different experiments. TPMplt affords two functions to automatically generate a summary table from multiple exported files. For details, please check the R documents for API4TMZ and TMZdatainput.

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%" 
#>  [3] "Strain-900-0.01-60%"   "Stress-900-0.01-60%"  
#>  [5] "Strain-900-0.1-60%"    "Stress-900-0.1-60%"   
#>  [7] "Strain-900-1-60%"      "Stress-900-1-60%"     
#>  [9] "Strain-950-0.001-60%"  "Stress-950-0.001-60%" 
#> [11] "Strain-950-0.01-60%"   "Stress-950-0.01-60%"  
#> [13] "Strain-950-0.1-60%"    "Stress-950-0.1-60%"   
#> [15] "Strain-950-1-60%"      "Stress-950-1-60%"     
#> [17] "Strain-1000-0.001-60%" "Stress-1000-0.001-60%"
#> [19] "Strain-1000-0.01-60%"  "Stress-1000-0.01-60%" 
#> [21] "Strain-1000-0.1-60%"   "Stress-1000-0.1-60%"  
#> [23] "Strain-1000-1-60%"     "Stress-1000-1-60%"    
#> [25] "Strain-1050-0.001-60%" "Stress-1050-0.001-60%"
#> [27] "Strain-1050-0.01-60%"  "Stress-1050-0.01-60%" 
#> [29] "Strain-1050-0.1-60%"   "Stress-1050-0.1-60%"  
#> [31] "Strain-1050-1-60%"     "Stress-1050-1-60%"    
#> [33] "Strain-1100-0.001-60%" "Stress-1100-0.001-60%"
#> [35] "Strain-1100-0.01-60%"  "Stress-1100-0.01-60%" 
#> [37] "Strain-1100-0.1-60%"   "Stress-1100-0.1-60%"  
#> [39] "Strain-1100-1-60%"     "Stress-1100-1-60%"    
#> [41] "Strain-1150-0.001-60%" "Stress-1150-0.001-60%"
#> [43] "Strain-1150-0.01-60%"  "Stress-1150-0.01-60%" 
#> [45] "Strain-1150-0.1-60%"   "Stress-1150-0.1-60%"  
#> [47] "Strain-1150-1-60%"     "Stress-1150-1-60%"    
#> [49] "Strain-1200-0.001-60%" "Stress-1200-0.001-60%"
#> [51] "Strain-1200-0.01-60%"  "Stress-1200-0.01-60%" 
#> [53] "Strain-1200-0.1-60%"   "Stress-1200-0.1-60%"  
#> [55] "Strain-1200-1-60%"     "Stress-1200-1-60%"

As we seen, all column names are arranged by the style of “(Strain&Stress)-(Temperature)-(Strain Rate)-(Other)”. Under this circumstance, we call the layer for temperature is 2, while the layer for strain rate is 3.

The function epsExtract is capable to export a strain rate-temperature table by specifying eps as the strain condition. However, lyT and lySR, the two necessary arguments corresponding to layers for temperature and strain rate respectively, require correct declaration as well.

Executinge the following codes:

require(VBTree)
#> Loading required package: 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. The argument grpby determines the group methods for plots. As an instance, stress-strain curves grouped by strain rates, separated by temperature condition in each individual plot is very common. Since the layer for strain rate is 3, we can simply set the argument grpby as 3 then run the code SSplots(TPMdata, 3, mfrow=c(3, 3)) to obtain the following plots (7 figures, therefore it is reasonable to use a 3*3 division to display):

Grouped by temperature is also available, by running SSplots(TPMdata, 2, mfrow=c(2, 2)), four figures will be exported as:

But pay attention, multiple plots export using graphics is very sensitive to the Plots pane’s area. Before plotting, please zoom in this pane large enough to obtain correct export.

Extraction based on given strain

Based on previous introduction, it is not difficult to find the layer 2 is for temperature while the layer 3 is for strain rate in TPMdata. Therefore the two arguments, lyT and lySR will be set as 2 and 3 respectively. If we want the strain rate-temperature table in condition of 0.7 strain, by running the following codes the result will be returned automatically:

epstable <- epsExtract(TPMdata, eps = 0.7, lyT = 2, lySR = 3)
epstable
#> $SRT.table
#>          900    950    1000    1050    1100    1150    1200
#> 0.001 22.070  8.464  83.843  55.503  47.455  27.325  28.351
#> 0.01  41.416 17.471 159.480 118.790  81.380  88.220  40.692
#> 0.1   69.463 53.144 232.820 183.190 123.460  56.540  92.850
#> 1     87.040 83.843 269.780 183.000 158.640 146.750 119.110
#> 
#> $epsilon
#> [1] 0.7
#> 
#> attr(,"class")
#> [1] "SR-T.table"

Pay attention, for correct exporting, the number of levels for Strain and Stress must be 2 in our input data.

Additionally, although the function epsExtract can automatically read the layer and levels in this layer for Strain and Stress using some specific regexs in most conditions, it is not guaranteed to be matched correctly everytime. If mismatch occurs, please manually set the argument manual in epsExtract according to its R document.

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 steps for DMM processing. Applying it on our previous result (strain rate-temperature table by specific value of strain), the complete output can be observed as following:

DMM <- DMMprocess(epstable)
DMM
#> $MaterialCoefficients
#> $MaterialCoefficients$m.StrainRateSensitivity
#> [1] 0.2012335 0.3470810 0.1686943 0.1742526 0.1753401 0.1996843 0.2228412
#> 
#> $MaterialCoefficients$n1.StressIndex
#> [1] 4.700741
#> 
#> $MaterialCoefficients$beta.StressIndex
#> [1] 0.06885769
#> 
#> $MaterialCoefficients$alpha.MaterialConstant
#> [1] 0.01464826
#> 
#> $MaterialCoefficients$Q.ActivatingEnergy
#> [1] 45.01241
#> 
#> $MaterialCoefficients$n.PowerValue
#> [1] 1.461455
#> 
#> $MaterialCoefficients$A.MaterialConstant
#> [1] 2.80227e-05
#> 
#> $MaterialCoefficients$epsilon.strain
#> [1] 0.7
#> 
#> $MaterialCoefficients$base
#> [1] 2.718282
#> 
#> 
#> $tablelist
#> $tablelist$SRTtable
#>          900    950    1000    1050    1100    1150    1200
#> 0.001 22.070  8.464  83.843  55.503  47.455  27.325  28.351
#> 0.01  41.416 17.471 159.480 118.790  81.380  88.220  40.692
#> 0.1   69.463 53.144 232.820 183.190 123.460  56.540  92.850
#> 1     87.040 83.843 269.780 183.000 158.640 146.750 119.110
#> 
#> $tablelist$etatable
#>              900        950       1000       1050      1100        1150
#> 0.001 0.74653405  0.1724305 1.03752414  1.2585170 0.6829465  -8.7415766
#> 0.01  0.70983935  1.8060851 0.56194553  0.7285048 0.5341198  -0.1138792
#> 0.1   0.42203656  1.4256013 0.25153800  0.2260331 0.3476842  -0.1945707
#> 1     0.01757061 -0.1747197 0.03810044 -0.1984372 0.1425365 -14.9458514
#>             1200
#> 0.001 -0.1721890
#> 0.01   0.9978111
#> 0.1    0.8920934
#> 1     -0.2867421
#> 
#> $tablelist$xitable
#>              900         950        1000        1050       1100
#> 0.001  0.2425190  0.05478584  0.30733992  0.32864754 0.23428408
#> 0.01   0.2326584  0.44993934  0.18511418  0.20942150 0.19050447
#> 0.1    0.1449581  0.39157457  0.07748920  0.04396445 0.12782984
#> 1     -0.0205817 -0.12030847 -0.01553501 -0.16772361 0.04626016
#>              1150       1200
#> 0.001  1.29046783 -0.1074511
#> 0.01  -0.06657615  0.3196005
#> 0.1   -0.11396843  0.2952133
#> 1      1.14829097 -0.1806126
#> 
#> 
#> attr(,"class")
#> [1] "DMMresult"

If the constructive function is the only thing we concerned about, set the argument consfuncPRT in DMMprocess as TRUE:

DMM <- DMMprocess(epstable, consfuncPRT = TRUE)
#> [1] "the constitutive equation in strain 0.7 is: sigma=(1/0.01)ln{(Z/2.80227019283101e-05)^(1/1.46)+[(Z/2.80227019283101e-05)^(2/1.46)+1]^(1/2)}"

Preparation for visualization

As we can see, the “etatable” and “xitable” in tablelist are two key 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 recommanded. The function SVRModel will return a regression result which can be utilized by ploting functions.

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

PLTbd <- SVRModel(DMM)

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:

TPM2dplt(PLTbd)