bool only_translation(agg::trans_affine& mat, double epsilon) { double temp[6]; mat.store_to(temp); return (f_eq(temp[0], 1.0) && f_eq(temp[1], 0.0) && f_eq(temp[2], 0.0) && f_eq(temp[3], 1.0)); }
double t_E(double nn, double np, set_const * C) { double f = f_eq(nn, np, C); double res = t_E(nn, np, f, C); double me = m_e; double pf_e = 0; if (pow(mu_e(nn + np, np, f, C), 2.0) - me*me >= 0){ pf_e = sqrt(pow(mu_e(nn + np, np, f, C), 2.0) - me*me); } if (np != 0.0){ res += KineticIntegral(pf_e, m_e, C); } double mmu = m_mu; double pf_mu = 0; if (pow(mu_e(nn + np, np, f, C), 2.0) - mmu*mmu >= 0){ pf_mu = sqrt(pow(mu_e(nn + np, np, f, C), 2.0) - mmu*mmu); } if (np != 0.0){ res += KineticIntegral(pf_mu, m_mu, C); } return res; }
double func_np(double np, void * params) { struct func_np_params *p = (struct func_np_params *) params; double n = p->ntot; set_const * C = p->C; vec n_ext = p->n_ext; double sum = 0.0; for (int i = 0; i < n_ext.size(); i++){ sum += n_ext[i]; } double sum_ch = 0.0; for (int i = 0; i < n_ext.size(); i++){ sum_ch += n_ext[i]*C->Q[i+2]; } //n = n - sum; vec _n; _n.push_back(n - np); _n.push_back(np); for (int i = 0; i < n_ext.size(); i++){ _n.push_back(n_ext[i]); } double f = f_eq(_n, C); //double mue = mu_e(n, np, f, C); double mu_n = mu(0, _n, C); double mu_p = mu(1, _n, C); double mue = mu_n - mu_p; // printf("%f \n", mue); double mue2 = mu_e(n, np, f, C); //mue = mue2; //cout << "MUE = " << mue << " N = "<< n << " NP = " << np << " F = " << f << endl; double result = np; //cout << "RESULT = " << result << endl; double n_l = 0.0; if (mue*mue - m_e*m_e >= 0){ n_l += pow(mue*mue - m_e*m_e, 3.0 / 2.0) / (3.0*D*pi*pi); } //cout << "RESULT = " << result << endl; if (mue*mue - m_mu*m_mu >= 0){ n_l += pow(mue*mue - m_mu*m_mu, 3.0 / 2.0) / (3.0*D*pi*pi); } result -= n_l - sum_ch; /*printf("np_eq: mue = %f, n_ch = %f \n", mue, sum_ch);*/ //cout << "RESULT = " << result << endl; // printf("ntot = %f, result = %f \n", n, result); return result; }
double mu(int i, vec n, set_const * C){ double f = f_eq(n, C); double dn = 1e-7; double E_p, E_m, E_s; //mu_n double mu; n[i] = n[i] + dn; E_p = t_E(n, f, C); n[i] = n[i] - dn; E_m = t_E(n, f, C); n[i] = n[i] + 2*dn; double E_pp = t_E(n, f, C); mu = (-3*E_m + 4*E_p - E_pp) / (D * 2 * dn); return mu; }
bool is_identity(agg::trans_affine& mat, double epsilon) { double temp[6]; mat.store_to(temp); return (f_eq(temp[0], 1.0) && f_eq(temp[1], 0.0) && f_eq(temp[2], 0.0) && f_eq(temp[3], 1.0) && f_eq(temp[4], 0.0) && f_eq(temp[5], 0.0)); // return (temp[0] == 1.0 && temp[1] == 0.0 && // temp[2] == 0.0 && temp[3] == 1.0 && // temp[4] == 0.0 && temp[5] == 0.0); }