Amp: Симакин, Шапошникова, 2017

Краткое описание сенсора

Details

Article А. Г. Симакин, О. Ю. Шапошникова Новый амфиболовый геобарометр для высокомагнезиальных андезитовых и базальтовых магм, 2017 [ref]
Collibration Как выполнялась калибровка
Precision ± 1 kbar
Ranges 950<T<1050oC; 2<P<15 kbar
Renew sensors Обновляет сенсоры (если имеются)

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

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

Source

#Загрузка файла с методом пересчета
source('recalc_amp_13ecnk.r');

#Основная функция сенсора
sensors.p.amp_simakin <- function(Amp, usePFU = FALSE, ...){

    #Параметр usePFU позволяет пропускать пересчет, предполагая, что на входе уже к.ф.
    if(!usePFU) Amp <- recalc.amp_13ecnk(Amp);

    #Расчет "давления" по точкам во всем наборе
    P <- 16.051*(1.8*Amp$Al_c6_pfu/(1.8-Amp$Fe_p3_pfu-Amp$Ti_C_pfu-Amp$Cr_C_pfu))-7.819;

    #Максимальное значение
    Pmax <- max(P)
    Pmean <- mean(P[Pmax-P <= 1])
    comm <- 'norm'
    #нужно прокомментировать, что при Рmax<2 расплав был кислым или амфибол заместил другую фазу при реакции с расплавом 'silicious or replace'
    if(Pmax<1.5){Pmax<-0; comm <-'silicious or replacement'}
    #нужно прокомментировать, что  среди них есть закалочный кристалл или метаморфический 'quenching or metamorphic'
    if(Pmax>15){Pmax<-100; comm <-'quenching or metamorphic'}
    if(Pmax==0){Pmean<-0}
    if(Pmax==100){Pmean<-0}
    
   n1 <- nrow(Amp)
   ij <- 1:n1
     
#  Упорядочение значений "давления" во всех точках состава
for (j in 1:n1) {
  for (i in 1:(n1-1)) { 
   if (P[i+1]>P[i]){z<-P[i]; P[i]<-P[i+1]; P[i+1]<-z;
#   nam<-Amp$Name[i]; Amp$Name[i]<-Amp$Name[i+1]; Amp$Name[i+1]<-nam; }
   li<-Amp[i, ]; Amp[i, ]<-Amp[i+1, ]; Amp[i+1, ]<-li; }
       }};

      
       
# j<-1;   for(j in 1:n1) {while (P[1]-P[j]<1.0}{break}  
#  k<-1;   while(k<=j){sum<-sum+P[k]/j}

df1<-data.frame(Name='Summary', P_max=Pmax,P_mean=Pmean,comment=comm,n_points=n1,end=' ');
df2<-data.frame(Name=Amp$Name, P_max=P,P_mean=0.0,comment=' ',n_points=' ',end=' ');
df0<-data.frame(Name='_', P_max=0.0,P_mean=0.0,comment='_',n_points=' ',end=' ');
return (rbind(df1,df0,df2));

 # return (data.frame(Name=Amp$Name, P_max=replicate(nrow(Amp), Pmax), P_mean=replicate(nrow(Amp), Pmean)));
 }

#Функция определяющая входные параметры сенсора
sensors.p.amp_simakin.args <- function() {
    ars <- list();

    #Список минералов в данном случае 1 элемент
    ars$minerals = c('Amp');

    ars$ranges = c();

    return(ars);
}

#Функция тестирования
sensors.p.amp_simakin.test <- function() {
    #Тестовый набор данных
    test_data = data.frame(Name=c('test1', 'test2'), SiO2_wtp=c(42.890, 42.890),
                           TiO2_wtp=c(1.800, 1.800), Al2O3_wtp=c(11.550, 11.550),
                           FeO_wtp=c(14.960, 14.960), 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));
    
    #Расчет
    result <- sensors.p.amp_simakin(test_data);

    print(result);
    
    #Проверка соответствия результат заданному значению
    expect_equal(object = result[1,]$P_mean, 2.228, tolerance = 0.05);
}