Различия
Здесь показаны различия между двумя версиями данной страницы.
recalc:cpx_sturm [2016/02/19 09:04] admin |
recalc:cpx_sturm [2018/11/12 15:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Cpx: by Sturm, 2002 with Fe3+ by Droop, 1983 ====== | ||
- | Recalculatation for Cpx. Fe3+ calculated. | ||
- | |||
- | === Подробнее === | ||
- | |||
- | <data recalc> | ||
- | Reference [wiki]: <ref:sturm02> | ||
- | Input data type: wtp | ||
- | Inputs: Si, Al, Fe, Ti, Cr, V, Zr, Sc, Zn, Mg, Mn, Li, Ca, Na | ||
- | Output data type: pfu | ||
- | Outputs: Fe_p2_pfu, Fe_p3_pfu, Si_T_pfu, Al_M1_pfu, Fe_M1_pfu, Al_T_pfu, Fe_T_pfu, Mg_M2_pfu, Fe_M2_pfu, Mg_M1_pfu | ||
- | Use [wiki]: <use:recalc.cpx_sturm> | ||
- | Test [wiki]: <test:recalc.cpx_sturm> | ||
- | </data> | ||
- | |||
- | [[:ppy:mod_recalc#cpx_sturm|Рассчитать]] | ||
- | [[:tests#recalc.cpx_sturm]] | ||
- | |||
- | <Code linenums lang-r> | ||
- | source("recalc_common_cation.r") | ||
- | source("recalc_common_oxygen.r") | ||
- | |||
- | recalc.cpx_sturm <- function (wtp_data, ...) { | ||
- | |||
- | ox_group <- c("SiO2_wtp","TiO2_wtp", "Al2O3_wtp", "FeO_wtp", | ||
- | "MnO_wtp", "MgO_wtp", "CaO_wtp", "K2O_wtp", | ||
- | "Na2O_wtp" ,"Li2O_wtp", "ZnO_wtp", "NiO_wtp", | ||
- | "Cr2O3_wtp", "Sc2O3_wtp"); | ||
- | |||
- | wtp_group <- selectNames(wtp_data,ox_group); | ||
- | |||
- | oxcoeff <- c( 2 / 60.0848, 2 / 79.8988, 3 / 101.96128, 1 / 71.8464, | ||
- | 1 / 70.9374, 1 / 40.3044, 1 / 56.0794, 1 / 94.1954, | ||
- | 1 / 61.97894, 1 / 29.8814, 1 / 81.3794, 1 / 74.7094, | ||
- | 3 / 151.9902, 3 / 137.91 ); | ||
- | |||
- | cxcoeff <- c( 1 / 60.0848, 1 / 79.8988, 2 / 101.96128, 1 / 71.8464, | ||
- | 1 / 70.9374, 1 / 40.3044, 1 / 56.0794, 2 / 94.1954, | ||
- | 2 / 61.97894, 2 / 29.8814, 2 / 81.3794, 1 / 74.7094, | ||
- | 2 / 151.9902, 2 / 137.91); | ||
- | |||
- | step1_data <- rowApply(`*`, wtp_group, oxcoeff); | ||
- | |||
- | step1_sum <- 6 / rowSums(step1_data); | ||
- | |||
- | step1_data <- rowApply(`*`, wtp_group, cxcoeff) * step1_sum; | ||
- | |||
- | sum_pfu <- rowSums(step1_data); | ||
- | |||
- | names(step1_data) <- c("Si_pfu","Ti_pfu", "Al_pfu", "Fe_pfu", | ||
- | "Mn_pfu", "Mg_pfu", "Ca_pfu", "K_pfu", | ||
- | "Na_pfu" ,"Li_pfu" , "Zn_pfu", "Ni_pfu", | ||
- | "Cr_pfu", "Sc_pfu"); | ||
- | |||
- | fe3_droop <- ifelse( | ||
- | ifelse( | ||
- | sum_pfu > 6 / 1.5, | ||
- | 2 * 6 * (1 - (6 / 1.5) / sum_pfu), | ||
- | 0 | ||
- | ) > step1_data$Fe_pfu, | ||
- | step1_data$Fe_pfu, | ||
- | ifelse( | ||
- | sum_pfu > 6 / 1.5, | ||
- | 2 * 6 * (1 - (6 / 1.5) / sum_pfu), | ||
- | 0 | ||
- | ) | ||
- | ); | ||
- | |||
- | fe3_lind <- ifelse( | ||
- | (2 - step1_data$Si_pfu * ((6 / 1.5) / sum_pfu) ) + | ||
- | step1_data$Na_pfu * ((6 / 1.5) / sum_pfu) - | ||
- | (step1_data$Al_pfu * ( (6 / 1.5) / sum_pfu) - | ||
- | (2 - step1_data$Si_pfu * ( (6 / 1.5) / sum_pfu) ) ) - | ||
- | step1_data$Cr_pfu * ( (6 / 1.5) / sum_pfu) - | ||
- | 2 * step1_data$Ti_pfu * ( (6 / 1.5) / sum_pfu) > 0, | ||
- | (2 - step1_data$Si_pfu * ( (6 / 1.5) / sum_pfu) ) + | ||
- | step1_data$Na_pfu * ( (6 / 1.5) / sum_pfu) - | ||
- | (step1_data$Al_pfu * ( (6 / 1.5) / sum_pfu) - | ||
- | (2 - step1_data$Si_pfu * ( (6 / 1.5) / sum_pfu) ) ) - | ||
- | step1_data$Cr_pfu * ( (6 / 1.5) / sum_pfu) - | ||
- | 2 * step1_data$Ti_pfu * ( (6 / 1.5) / sum_pfu), | ||
- | 0); | ||
- | |||
- | step1_data$Fe_p3_pfu <- fe3_droop; | ||
- | step1_data$Fe_p2_pfu <- step1_data$Fe_pfu - step1_data$Fe_p3_pfu; | ||
- | |||
- | compose_data <- step1_data; | ||
- | compose_data$Sum_T_pfu <- 0.0; | ||
- | compose_data$Sum_M1_pfu <- 0.0; | ||
- | compose_data$Sum_M2_pfu <- 0.0; | ||
- | |||
- | compose_data <- occupation (compose_data, "Sum_T_pfu", 2.0, | ||
- | c("Si_pfu", "Al_pfu", "Fe_p3_pfu")); | ||
- | |||
- | step1_data$Al_M1_pfu <- compose_data$Al_pfu; | ||
- | step1_data$Al_T_pfu <- step1_data$Al_pfu - step1_data$Al_M1_pfu; | ||
- | step1_data$Fe_T_pfu <- step1_data$Fe_p3_pfu - compose_data$Fe_p3_pfu; | ||
- | |||
- | compose_data <- occupation (compose_data, "Sum_M1_pfu", 1.0, | ||
- | c("Al_pfu", "Fe_p3_pfu", "Ti_pfu", | ||
- | "Cr_pfu", "Sc_pfu", "Zn_pfu", | ||
- | "Mg_pfu", "Fe_p2_pfu")); | ||
- | |||
- | step1_data$Fe_M1_pfu <- step1_data$Fe_p3_pfu - | ||
- | step1_data$Fe_T_pfu - | ||
- | compose_data$Fe_p3_pfu; | ||
- | |||
- | ret <- data.frame(Name = wtp_data$Name); | ||
- | |||
- | return (cbind(ret, step1_data)); | ||
- | } | ||
- | |||
- | recalc.cpx_sturm.test <- function () { | ||
- | src <- data.frame(Name="test", SiO2_wtp=57.10, TiO2_wtp=0.17, Al2O3_wtp=0.7, | ||
- | FeO_wtp=5.57, MnO_wtp=0.17, MgO_wtp=34.52, CaO_wtp=0.62, K2O_wtp=0.03, | ||
- | Na2O_wtp=0.07, Cr2O3_wtp=0.27); | ||
- | |||
- | result <- recalc.cpx_sturm (src); | ||
- | | ||
- | expect_equal(object = result$Fe_p2_pfu, 0.16, tolerance = 0.005); | ||
- | expect_equal(object = result$Si_pfu, 1.977, tolerance = 0.005); | ||
- | } | ||
- | </Code> |