Opx-Cpx: Fonarev, Graphchikov, 1991

Two-pyroxene thermometry: a critical evaluation.

Details

Source {Fonarev V.I., Graphchikov A.A.} «Two-pyroxene thermometry: a critical evaluation».In:«Progress in metamorphic and magmatic petrology. A memorial volume in honor of D.S.Korzhinskiy.» Edt. L.L.Perchuk Cambridge University Press, Cambridge, p.65-92, 1991.
Link
Calibration
Accuracy
Ranges 600-1250 °C
Renew sensors

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

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

Multiple sensors with different constrains:

Number 1:

Number 2:

Number 3:

Number 4:

Code

source('recalc_cpx_tpf_realc0.r');
source('recalc_opx_tpf_realc0.r');

sensors.t.opx_cpx_fonarev_graphchikov <- function(Opx, Cpx, P, ...){

    OpxP <- recalc.opx_tpf_realc0(Opx);
    CpxP <- recalc.cpx_tpf_realc0(Cpx);
    
    X = CpxP$Fe_pfu / (CpxP$Mg_pfu+CpxP$Fe_pfu+CpxP$Ca_pfu+CpxP$Mn_pfu+CpxP$Al_c6_pfu+CpxP$Ti_pfu+CpxP$K_pfu+CpxP$Na_pfu);
    Y = OpxP$Fe_pfu / (OpxP$Mg_pfu+OpxP$Fe_pfu+OpxP$Ca_pfu+OpxP$Mn_pfu+OpxP$Al_c6_pfu+OpxP$Ti_pfu+OpxP$K_pfu+OpxP$Na_pfu);
    Z = Cpx$Al2O3_wtp + Cpx$TiO2_wtp + Cpx$MnO_wtp + Cpx$Na2O_wtp;

    X2 = CpxP$Fe_pfu / (CpxP$Mg_pfu+CpxP$Fe_pfu+CpxP$Ca_pfu);
    Y2 = OpxP$Fe_pfu / (OpxP$Mg_pfu+OpxP$Fe_pfu+OpxP$Ca_pfu);

    OZ = Opx$Al2O3_wtp + Opx$TiO2_wtp + Opx$MnO_wtp + Opx$Na2O_wtp; 

    X = ifelse(Z<OZ, X2, X);
    Y = ifelse(Z<OZ, Y2, Y);   
    
    #Method1 T in 900-1250
    
    A = -15.9135*X+112.8452*X^2-232.7006*X^3+156.3120*X^4-Y*(1-(0.5-X)*0.01*P);
    B = 44.2986*X-313.6564*X^2+660.4657*X^3-446.5655*X^4;
    G = -27.1202*X+212.7500*X^2-462.5763*X^3+316.4015*X^4;
    M = (2*G*1000/(-B+sqrt(B**2-4*A*G)))-273.15;
    
    T_1 = ifelse( Z>5.0 | X<0.1 | M<900.001 | M>1250.001, NA, M);
    
    #Method2 T in 600-900
    
    A = 5.6066*X+13.6767*X^2-23.6366*X^3-60.7866*X^4-Y*(1-(0.35-X)*0.01*P);
    B = -9.9203*X-25.1949*X^2+30.5070*X^3+148.9344*X^4;
    G = 6.9830*X+10.0505*X^2-9.1097*X^3-85.1719*X^4;
    N = (2*G*1000/(-B+sqrt(B^2-4*A*G)))-273.15;
   
    N = ifelse(N > 850 & M < 900.001,(M+N)/2,N);
   
    T_2 = ifelse( Z>5.0 | X<0.1 | N<600 | N>900, NA, N);
    
    #Method3 T in 600-900
    

    X = CpxP$Fe_pfu/(CpxP$Mg_pfu+CpxP$Fe_pfu+CpxP$Ca_pfu);
    Y = OpxP$Fe_pfu/(OpxP$Mg_pfu+OpxP$Fe_pfu+OpxP$Ca_pfu);
    Z = Opx$MnO_wtp;
    C = CpxP$Fe_pfu/CpxP$Mn_pfu;
    O = OpxP$Fe_pfu/OpxP$Mn_pfu;
    LK = log(C/O);
    
    K = 1.0221-0.2816*LK;
    A = 5.6066*X+13.6767*X^2-23.6366*X^3-60.7866*X^4-Y*(1-(0.35-X)*0.01*P);
    B = (-9.9203*X-25.1949*X^2+30.5070*X^3+148.9344*X^4)*K;
    G = (6.9830*X+10.0505*X^2-9.1097*X^3-85.1719*X^4)*K^2;
    N = (2*G*1000/(-B+sqrt(B^2-4*A*G)))-273.15;


    A = -15.9135*X+112.8452*X^2-232.7006*X^3+156.3120*X^4-Y*(1-(0.5-X)*0.01*P);
    B = (44.2986*X-313.6564*X^2+660.4657*X^3-446.5655*X^4)*K;
    G = (-27.1202*X+212.7500*X^2-462.5763*X^3+316.4015*X^4)*K^2;
    M = (2*G*1000/(-B+sqrt(B**2-4*A*G)))-273.15;


    T_3 = ifelse( Z<4.0 | X<0.10 | N<600.001 | M>900.001, NA, N); 
    T_3 = ifelse(T_3<850, N, (M+N)/2);
    
    #Method 4
    
    X = CpxP$Fe_pfu/(CpxP$Mg_pfu+CpxP$Fe_pfu+CpxP$Ca_pfu);
    Y = CpxP$Ca_pfu/(CpxP$Mg_pfu+CpxP$Fe_pfu+CpxP$Ca_pfu);
    Z = Cpx$Al2O3_wtp+Cpx$TiO2_wtp+Cpx$MnO_wtp+Cpx$Na2O_wtp;

    A = 0.0435-2.0422*X+14.2661*X^2-38.4323*X^3+34.4206*X^4-Y*(1-(0.5-X)*0.012*P);
    B = 0.6859+1.2269*X-37.7330*X^2+119.7173*X^3-109.3990*X^4;
    G = -0.2832+0.9887*X+27.5921*X^2-97.3991*X^3+88.8668*X^4;
    Q = (2*G*1000/(-B+sqrt(B^2-4*G*A)))-273.15;
    
    T_4 = ifelse( Z>5.0 | X<0.10 | Q<890 | Q>1250, NA, N); 
    
    return (data.frame(Name=paste0(Opx$Name,'-',Cpx$Name),P = P,
                       T_calc_OpxCpx_FonarevGraphchikov1 = T_1,
                       T_calc_OpxCpx_FonarevGraphchikov2 = T_2,
                       T_calc_OpxCpx_FonarevGraphchikov4 = T_4));
}

sensors.t.opx_cpx_fonarev_graphchikov.args <- function() {
    ars <- list();
    ars$minerals = c('Opx','Cpx');
    ars$ranges = c('P');
    return(ars);
}