Amp: 13eCNK

Droop equation No 6 assuming 13 cations excluding Ca,Na & K and with ZrO2.

Подробнее

Reference Based on Gabbresoft spreadsheet AMPH13
Input SiO2_wtp, TiO2_wtp, Al2O3_wtp, Cr2O3_wtp, FeO_wtp, MnO_wtp, MgO_wtp, CaO_wtp, Na2O_wtp, K2O_wtp, ZrO2_wtp
Output All elements in pfu, also Fe_p2_pfu, Fe_p3_pfu, Al_c4_pfu, Al_c6_pfu, and elements by groups T,C,B and A with sum for each group
Results pfu

Использовать Проверить

  • заголовок
  • краткое описание
  • статья
  • ссылка
  • карточка
  • подробное описание
  • код
  • тест

Source

  1. recalc.amp_13ecnk <- function (wtp_data, ...) {
  2. wnames <- c('SiO2_wtp', 'TiO2_wtp', 'Al2O3_wtp', 'Cr2O3_wtp',
  3. 'FeO_wtp', 'MnO_wtp', 'MgO_wtp', 'CaO_wtp', 'Na2O_wtp',
  4. 'K2O_wtp', 'ZrO2_wtp');
  5.  
  6. anames <- c('Si_pfu', 'Ti_pfu', 'Al_pfu', 'Cr_pfu',
  7. 'Fe_pfu', 'Mn_pfu', 'Mg_pfu', 'Ca_pfu', 'Na_pfu',
  8. 'K_pfu', 'Zr_pfu');
  9.  
  10. xmweights <- c(60.08, 79.88, 101.96, 151.99, 71.85, 70.94, 40.3, 56.08, 61.98, 94.2, 123.22);
  11. ocount <- c(2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1);
  12. xcount <- c(1/2, 1/2, 2/3, 2/3, 1, 1, 1, 1, 2, 2, 1/2);
  13.  
  14. wtp <- selectNames(wtp_data, wnames)
  15.  
  16. mprop <- rowApply(`/`,wtp,xmweights);
  17. atpropo <- rowApply(`*`,mprop,ocount);
  18.  
  19. atproposumm <- rowSums(atpropo);
  20. t2 <- 23/atproposumm;
  21. noanions <- atpropo*t2;
  22. formula <- rowApply(`*`,noanions,xcount);
  23. names(formula) <- anames;
  24.  
  25. cationCNK <- formula$Si_pfu + formula$Ti_pfu + formula$Al_pfu + formula$Cr_pfu + formula$Fe_pfu + formula$Mn_pfu + formula$Mg_pfu + formula$Zr_pfu;
  26. ToverS <- 13 / cationCNK;
  27.  
  28. fnorm <- formula*ToverS;
  29.  
  30. Fe_p3 <- (2*23)*(1-ToverS);
  31.  
  32. Fe_p2 <- ifelse(Fe_p3>fnorm$Fe_pfu,0,fnorm$Fe_pfu-Fe_p3);
  33. Fe_p3 <- ifelse(Fe_p3>fnorm$Fe_pfu,fnorm$Fe_pfu,Fe_p3);
  34.  
  35. rformula <- formula[0, ];
  36.  
  37. for(i in 1:nrow(formula)){
  38. if (cationCNK[i]<13) {
  39. rformula <- rbind(rformula, formula[i,]);
  40. } else {
  41. rformula <- rbind(rformula, fnorm[i,]);
  42. }
  43. }
  44.  
  45. rformula$Fe_p3_pfu <- ifelse(cationCNK<13,0,Fe_p3);
  46. rformula$Fe_p2_pfu <- ifelse(cationCNK<13,formula$Fe_pfu,Fe_p2);
  47. rformula$Fe_pfu <- rformula$Fe_p3_pfu+rformula$Fe_p2_pfu;
  48. Ca_2m <- 2 - rformula$Ca_pfu;
  49. Si_8m <- 8 - rformula$Si_pfu;
  50. Al_mSi_8m <- rformula$Al_pfu - Si_8m;
  51.  
  52. rformula$Si_T_pfu <- rformula$Si_pfu;
  53. rformula$Al_T_pfu <- ifelse(rformula$Al_pfu<Si_8m,rformula$Al_pfu,Si_8m);
  54. rformula$Al_c4_pfu <- rformula$Al_T_pfu;
  55. rformula$Sum_T <- rformula$Si_T_pfu + rformula$Al_T_pfu;
  56.  
  57. rformula$Al_C_pfu <- ifelse(rformula$Al_pfu<Si_8m,0,Al_mSi_8m);
  58. rformula$Al_c6_pfu <- rformula$Al_C_pfu;
  59. rformula$Ti_C_pfu <- rformula$Ti_pfu;
  60. rformula$Cr_C_pfu <- rformula$Cr_pfu;
  61. rformula$Fe_p2_C_pfu <- rformula$Fe_p2_pfu;
  62. rformula$Fe_p3_C_pfu <- rformula$Fe_p3_pfu;
  63. rformula$Fe_C_pfu <- rformula$Fe_pfu;
  64. rformula$Mn_C_pfu <- rformula$Mn_pfu;
  65. rformula$Mg_C_pfu <- rformula$Mg_pfu;
  66. rformula$Sum_C <- rformula$Al_C_pfu+rformula$Ti_C_pfu+rformula$Cr_C_pfu+rformula$Fe_pfu+rformula$Mn_C_pfu+rformula$Mg_C_pfu;
  67.  
  68. rformula$Ca_B_pfu <- rformula$Ca_pfu;
  69. rformula$Na_B_pfu <- ifelse(Ca_2m>rformula$Na_pfu, rformula$Na_pfu, Ca_2m);
  70. rformula$Sum_B <- rformula$Ca_B_pfu + rformula$Na_B_pfu;
  71.  
  72. rformula$Na_A_pfu <- rformula$Na_pfu - rformula$Na_B_pfu;
  73. rformula$K_A_pfu <- rformula$K_pfu;
  74. rformula$Sum_A <- rformula$Na_A_pfu + rformula$K_A_pfu;
  75.  
  76. result <- cbind(data.frame(Name=wtp_data$Name),rformula);
  77. return(result);
  78. }
  79. # избыточная выдача; невозможно прочитать всю строку
  80. # или удвоить строку или вывести необходимые величины вперед
  81. # достаточно SiT/ AlT/ Al6/ Fe3/ Ti/ Cr/ Fe2/ Mn/ Mg/ Ca/ Na/ K/ TOTAL
  82.  
  83. recalc.amp_13ecnk.test <- function (){
  84. tdata = data.frame(Name=c('test1', 'test2'), SiO2_wtp=c(42.890, 30), TiO2_wtp=c(1.800, 1.800), Al2O3_wtp=c(11.550, 11.550), FeO_wtp=c(14.960,14.960),
  85. MgO_wtp=c(11.120,11.120), CaO_wtp=c(11.490,11.490), Na2O_wtp=c(1.870,1.870), K2O_wtp=c(1.060,1.060));
  86.  
  87. result <- recalc.amp_13ecnk(tdata);
  88. expect_equal(object = result[1,]$Fe_p3_pfu,0.308, tolerance = 0.05);
  89. expect_equal(object = result[2,]$Si_pfu,5.267, tolerance = 0.05);
  90. }
  91.