Px: MacGregor, 2015

Cations on the basis of 6 oxygens. FeO - total.

Details

Reference Ian D. MacGregor Empirical geothermometers and geothermobarometers for spinel peridotite phase assemblages, 2015 [ref]
Input SiO2_wtp, TiO2_wtp, Al2O3_wtp, Cr2O3_wtp, FeO_wtp, MnO_wtp, MgO_wtp, CaO_wtp, Na2O_wtp, K2O_wtp
Output Si_pfu, Ti_pfu, Al_pfu, Cr_pfu, Fe_p3_pfu, Fe_p2_pfu, Mn_pfu, Mg_pfu, Ca_pfu, Na_pfu, K_pfu

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

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

Source

recalc.px_macgreg <- function (wtp_data, ...)
{
# part 1

  pOx_ox_names <- c('SiO2_wtp', 'TiO2_wtp', 'Al2O3_wtp', 'Cr2O3_wtp',
                    'Fe2O3_wtp', 'MnO_wtp', 'MgO_wtp', 'CaO_wtp',
                    'Na2O_wtp', 'K2O_wtp');
                    
  pOx_Wi <- selectNames(wtp_data,pOx_ox_names);
  pOx_Wi$Fe2O3_wtp <- wtp_data$FeO_wtp*1.1113;

  pOx_Mi <- c(60.084, 79.879, 101.960, 151.990, 159.692, 70.937, 40.304, 56.079, 61.977, 94.196);
  pOx_Ci <- c(1, 1, 2, 2, 2, 1, 1, 1, 2, 2);
  pOx_Oi <- c(2, 2, 3, 3, 3, 1, 1, 1, 1, 1); 
  pOx_Ei <- rowApply('/', pOx_Wi, pOx_Mi);
  pOx_MOi <- rowApply('*', pOx_Ei, pOx_Oi); 
  
  pOx_S <- rowSums(pOx_MOi);
  pOx_FC <- 6/pOx_S;
  
  pOx_AEi <- rowApply('*', pOx_Ei, pOx_Ci) * pOx_FC;
  pOx_AS <- rowSums(pOx_AEi);
  
# part 2
  pCat_ox_names <- c('SiO2_wtp','TiO2_wtp','Al2O3_wtp',
                     'Cr2O3_wtp','Fe2O3_wtp','FeO_wtp',
                     'FeO_wtp','MnO_wtp','MgO_wtp',
                     'CaO_wtp','Na2O_wtp','K2O_wtp');
            
  pCat_group <- selectNames(wtp_data,pCat_ox_names);

  colnames(pCat_group)[7] <- "FeO_tot_wtp";
  pCat_group$FeO_wtp <- 0.0;
  pCat_group$Fe2O3_wtp <- 0.0;
    
  pCat_Mi <- c(60.084, 79.879, 101.960, 151.990, 159.692, 71.846, 71.846, 70.937, 40.304, 56.079, 61.977, 94.196);
  pCat_Ci <- c(1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2);
  pCat_Oi <- c(2, 2, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1); 
    
  pCat_Ei <- rowApply('/', pCat_group, pCat_Mi);
  pCat_totEi <- (pCat_Ei$SiO2_wtp + pCat_Ei$TiO2_wtp + 2*pCat_Ei$Al2O3_wtp +
                2*pCat_Ei$Cr2O3_wtp + pCat_Ei$FeO_tot_wtp + pCat_Ei$MnO_wtp +
                pCat_Ei$MgO_wtp + pCat_Ei$CaO_wtp + 2*pCat_Ei$Na2O_wtp + 2*pCat_Ei$K2O_wtp)*6/4;
    
  pCat_MOi <- rowApply('*', pCat_Ei, pCat_Oi);
  
  pCat_totMOi <- pCat_MOi$SiO2_wtp + pCat_MOi$TiO2_wtp + pCat_MOi$Al2O3_wtp +
                 pCat_MOi$Cr2O3_wtp + pCat_MOi$FeO_tot_wtp + pCat_MOi$MnO_wtp + pCat_MOi$MgO_wtp +
                 pCat_MOi$CaO_wtp + pCat_MOi$Na2O_wtp + pCat_MOi$K2O_wtp;

  pCat_MOi2<- pCat_MOi;
  pCat_MOi2$FeO_wtp <- 0.0;
  pCat_MOi2$Fe2O3_wtp <- 0.0;
  pCat_MOi2$FeO_tot_wtp <- 0.0;
    
  pCat_Ei2 <- pCat_Ei;
  pCat_Ei2$FeO_wtp <- 0.0;
  pCat_Ei2$Fe2O3_wtp <- 0.0;
  pCat_Ei2$FeO_tot_wtp <- 0.0;
  
  pCat_FC1 <-  6/pCat_totMOi;
  pCat_FC2 <-  6/pCat_totEi;  
  
  pCat_U <- rowApply('*', pCat_Ei2, pCat_Ci) * pCat_FC2;  
  
  pCat_Utot <- 4 - (pCat_U$SiO2_wtp + pCat_U$TiO2_wtp + pCat_U$Al2O3_wtp +
                   pCat_U$Cr2O3_wtp + pCat_U$MnO_wtp + pCat_U$MgO_wtp +
                   pCat_U$CaO_wtp + pCat_U$Na2O_wtp + pCat_U$K2O_wtp);
  
  pCat_MOi2tot2 <- (pCat_totEi - pCat_totMOi)+ pCat_MOi$FeO_tot_wtp;
  
  pCat_MOi2$Fe2O3_wtp <- ((pCat_Utot/pCat_FC2)-pCat_MOi2tot2)/(2/3-1);
  pCat_MOi2$FeO_wtp <- pCat_MOi2tot2-pCat_MOi2$Fe2O3_wtp;
  pCat_MOi2$FeO_tot_wtp <- 0.0;
  pCat_MOi2$pCat_MOi2tot2 <- pCat_MOi2tot2;
  
  pCat_Ei2$FeO_wtp <- pCat_MOi2$FeO_wtp;
  pCat_Ei2$Fe2O3_wtp <- pCat_MOi2$Fe2O3_wtp/3;
  pCat_Ei2$FeO_tot_wtp <- 0.0;

  pCat_AEi <- rowApply('*', pCat_Ei, pCat_Ci) * pCat_FC1;
  pCat_pfu <- rowApply('*', pCat_Ei2, pCat_Ci) * pCat_FC2; 

  pResEnd <- data.frame(Name=wtp_data$Name);

 
  pCat_pfu$f_1 <- ifelse(pCat_pfu$FeO_wtp<0,1,0);
  pCat_pfu$f_2 <- ifelse(pCat_pfu$FeO_wtp>=0 & pCat_pfu$Fe2O3_wtp<0,1,0);
  pCat_pfu$f_3 <- ifelse(pCat_pfu$FeO_wtp>=0 & pCat_pfu$Fe2O3_wtp>=0,1,0);

  pResEnd$Si_pfu <- pCat_pfu$f_1*pOx_AEi$SiO2_wtp+pCat_pfu$f_2*pCat_AEi$SiO2_wtp+pCat_pfu$f_3*pCat_pfu$SiO2_wtp;
  pResEnd$Ti_pfu <- pCat_pfu$f_1*pOx_AEi$TiO2_wtp+pCat_pfu$f_2*pCat_AEi$TiO2_wtp+pCat_pfu$f_3*pCat_pfu$TiO2_wtp;
  pResEnd$Al_pfu <- pCat_pfu$f_1*pOx_AEi$Al2O3_wtp+pCat_pfu$f_2*pCat_AEi$Al2O3_wtp+pCat_pfu$f_3*pCat_pfu$Al2O3_wtp;
  pResEnd$Cr_pfu <- pCat_pfu$f_1*pOx_AEi$Cr2O3_wtp+pCat_pfu$f_2*pCat_AEi$Cr2O3_wtp+pCat_pfu$f_3*pCat_pfu$Cr2O3_wtp;
  pResEnd$Fe_p3_pfu <- pCat_pfu$f_1*0+pCat_pfu$f_2*pCat_AEi$Fe2O3_wtp+pCat_pfu$f_3*pCat_pfu$Fe2O3_wtp;
  pResEnd$Fe_p2_pfu <- pCat_pfu$f_1*pOx_AEi$Fe2O3_wtp+pCat_pfu$f_2*pCat_AEi$FeO_tot_wtp+pCat_pfu$f_3*pCat_pfu$FeO_wtp;
  pResEnd$Fe_pfu <- pResEnd$Fe_p2_pfu + pResEnd$Fe_p3_pfu;
  pResEnd$Mn_pfu <- pCat_pfu$f_1*pOx_AEi$MnO_wtp+pCat_pfu$f_2*pCat_AEi$MnO_wtp+pCat_pfu$f_3*pCat_pfu$MnO_wtp;
  pResEnd$Mg_pfu <- pCat_pfu$f_1*pOx_AEi$MgO_wtp+pCat_pfu$f_2*pCat_AEi$MgO_wtp+pCat_pfu$f_3*pCat_pfu$MgO_wtp; 
  pResEnd$Ca_pfu <- pCat_pfu$f_1*pOx_AEi$CaO_wtp+pCat_pfu$f_2*pCat_AEi$CaO_wtp+pCat_pfu$f_3*pCat_pfu$CaO_wtp;
  pResEnd$Na_pfu <- pCat_pfu$f_1*pOx_AEi$Na2O_wtp+pCat_pfu$f_2*pCat_AEi$Na2O_wtp+pCat_pfu$f_3*pCat_pfu$Na2O_wtp;
  pResEnd$K_pfu <- pCat_pfu$f_1*pOx_AEi$K2O_wtp+pCat_pfu$f_2*pCat_AEi$K2O_wtp+pCat_pfu$f_3*pCat_pfu$K2O_wtp;

  
  return (pResEnd);
}

recalc.px_macgreg.test <- function ()
{
  src <- data.frame(Name='test', SiO2_wtp=54.86, TiO2_wtp=0.13, Al2O3_wtp=2.76, Cr2O3_wtp=0.72,
                    FeO_wtp=6.81, MnO_wtp=0.00, MgO_wtp=34.72, CaO_wtp=0.75, Na2O_wtp=0.00, K2O_wtp=0.00);

  result <- recalc.px_macgreg(src);
  
  expect_equal(object = result$Si_pfu, 1.875, tolerance = 0.05);
  expect_equal(object = result$Fe_p2_pfu, 0.082, tolerance = 0.05);
  expect_equal(object = result$Mg_pfu, 1.769, tolerance = 0.05);

  src <- data.frame(Name='test', SiO2_wtp=53.51, TiO2_wtp=0.10, Al2O3_wtp=9.10, Cr2O3_wtp=0.11,
                    FeO_wtp=7.24, MnO_wtp=0.00, MgO_wtp=29.78, CaO_wtp=2.08, Na2O_wtp=0.00, K2O_wtp=0.00);

  result <- recalc.px_macgreg(src);
  
  expect_equal(object = result$Si_pfu, 1.824, tolerance = 0.05);
  expect_equal(object = result$Fe_p2_pfu, 0.206, tolerance = 0.05);
  expect_equal(object = result$Mg_pfu, 1.513, tolerance = 0.05);

}
  • recalc/px_macgreg.txt
  • Последние изменения: 2018/11/12 15:08
  • (внешнее изменение)