/* Copyright (C) 1995 Evgenii Rudnyi, http://Evgenii.Rudnyi.Ru/ Software for paper E. B. Rudnyi. Statistical model of systematic errors: An assessment of the Ba-Cu and Cu-Y phase diagram. Chemometrics and Intelligent Laboratory Systems, 1997, v. 36, p. 213-227. This software is a copyrighted work licensed under the terms, described in the file "FREE_LICENSE". */ extern double R; extern double& A0; extern double& A1; extern double& A2; extern double& A3; extern double& B0; extern double& B1; extern double& B2; extern double& B3; extern double& C0; extern double& C1; extern double& C2; extern double& C3; extern double xtmp; extern cString log_name; extern ofstream ofpd; double DmixG(double& T, double& x); double DmixS(double& T, double& x); double DmixH(double& T, double& x); double Dmixg1(double& T, double& x); double Dmixg2(double& T, double& x); double Dmixs1(double& T, double& x); double Dmixs2(double& T, double& x); double Dmixh1(double& T, double& x); double Dmixh2(double& T, double& x); double Dmixconv(double& T, double& x); double g1s(double& T); double g1l(double& T, double x = 0.); double g2s(double& T); double g2l(double& T, double x = 0.); double h1s(double& T); double h2s(double& T); class elem { public: char* name; double xs; double Tm; virtual double h(double& T); virtual double dif(double T, double x = xtmp); elem(char *name, double xs, double Tm) : name(name), xs(xs), Tm(Tm) {} }; class linephase : public elem { public: double& H; double& S; double& C; linephase(char* name, double xs, double& H, double& S, double& C) : elem(name, xs, 0.), H(H), S(S), C(C) {} double g(double& T) {return (1. - xs)*g1s(T) + xs*g2s(T) + H - T*S - C*T*log(T);} virtual double h(double& T) {return (1. - xs)*h1s(T) + xs*h2s(T) + H + C*T;} virtual double dif(double T, double x = xtmp); }; class linephase1 { public: char* name; double xs; double H; double S; double C; double G(double& T) {return H - T*S - C*T*log(T);} }; class nonvar { public: double Tin; double xin; double T; double x; boolean est; boolean conv; double T1; double T2; }; extern int nlp; extern int nnon; extern elem e1; extern elem e2; extern linephase lp[5]; extern nonvar non[6]; extern elem* subst1; extern elem* subst2; extern double Tmin; extern double Tmax; extern double xmin; extern double xmax; extern int iii; void init_est(); extern "C"{ double difT(double *T); double T_solve(double *reg); void xtoz(double x, double& z, double xmin = 0., double xmax = 1.); void ztox(double& x, double z, double xmin = 0., double xmax = 1.); void difTx(double* x, int *m, int *n, double* f); double Tx_solve(double* reg, int i); } extern int irun; void set_hide(); void deviates(); void read_extra_x(char *name); double patch_x(cString &ID, size_t i); void read_errors(char* name); void eb_vs_ea(); void test_convex_solids(); void test_convex_L();