Это старая версия документа!


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

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

Details

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

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

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

Source

  1. #Загрузка файла с методом пересчета
  2. source('recalc_amp_13ecnk.r');
  3.  
  4. #Основная функция сенсора
  5. sensors.p.amp_simakin <- function(Amp, usePFU = FALSE, ...){
  6.  
  7. #Параметр usePFU позволяет пропускать пересчет, предполагая, что на входе уже к.ф.
  8. if(!usePFU) Amp <- recalc.amp_13ecnk(Amp);
  9.  
  10. #Расчет "давления" по точкам во всем наборе
  11. 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;
  12.  
  13. #Максимальное значение
  14. Pmax <- max(P)
  15. Pmean <- mean(P[Pmax-P <= 1])
  16. comm <- 'norm'
  17. #нужно прокомментировать, что при Рmax<2 расплав был кислым или амфибол заместил другую фазу при реакции с расплавом 'silicious or replace'
  18. if(Pmax<1.5){Pmax<-0; comm <-'silicious or replace'}
  19. #нужно прокомментировать, что среди них есть закалочный кристалл или метаморфический 'quenching or metamorphic'
  20. if(Pmax>15){Pmax<-100; comm <-'quenching or metamorphic'}
  21. if(Pmax==0){Pmean<-0}
  22. if(Pmax==100){Pmean<-0}
  23. n1 <- nrow(Amp)
  24. # Упорядочение значений "давления" во всех точках состава
  25. for (j in 1:n1-1) {
  26. for (i in 1:n1-1) {
  27. if (P[i+1]>P[i])z<-P[i]; P[i]<-P[i+1]; P[i+1]<-z;
  28. }};
  29.  
  30. # j=1; for {j 1:nrow(Amp)} {while (P[1]-P[j]<1.0}{j=j+1}}
  31. # k=1; while (k<=j}{k=k+1; sum=sum+P[k]/j}
  32.  
  33. df1<-data.frame(Name='Summary', P_max=Pmax,P_mean=Pmean,comment=comm,n_points=n1,end=' ');
  34. df2<-data.frame(Name=Amp$Name, P_max=P,P_mean=' ',comment=' ',n_points=' ',end=' ');
  35. return (rbind(df1, df2));
  36. #return (data.frame(Name='Summary', P_max=Pmax,P_mean=Pmean,comment=comm,n_points=n1,end=' '));
  37. # return (data.frame(Name=Amp$Name, P_max=replicate(nrow(Amp), Pmax), P_mean=replicate(nrow(Amp), Pmean)));
  38. }
  39.  
  40. #Функция определяющая входные параметры сенсора
  41. sensors.p.amp_simakin.args <- function() {
  42. ars <- list();
  43.  
  44. #Список минералов в данном случае 1 элемент
  45. ars$minerals = c('Amp');
  46.  
  47. ars$ranges = c();
  48.  
  49. return(ars);
  50. }
  51.  
  52. #Функция тестирования
  53. sensors.p.amp_simakin.test <- function() {
  54. #Тестовый набор данных
  55. test_data = data.frame(Name=c('test1', 'test2'), SiO2_wtp=c(42.890, 42.890),
  56. TiO2_wtp=c(1.800, 1.800), Al2O3_wtp=c(11.550, 11.550),
  57. FeO_wtp=c(14.960, 14.960), MgO_wtp=c(11.120, 11.120),
  58. CaO_wtp=c(11.490, 11.490), Na2O_wtp=c(1.870, 1.870),
  59. K2O_wtp=c(1.060, 1.060));
  60. #Расчет
  61. result <- sensors.p.amp_simakin(test_data);
  62.  
  63. print(result);
  64. #Проверка соответствия результат заданному значению
  65. expect_equal(object = result[1,]$P_mean, 2.228, tolerance = 0.05);
  66. }
  • sensors/p/amp_simakin.1491151188.txt.gz
  • Последние изменения: 2018/11/12 15:08
  • (внешнее изменение)