double func_f_eq_hyper(double f, void * params){ struct func_f_eq_multi_params *p = (struct func_f_eq_multi_params *) params; set_const * C = p->C; std::vector<double> n_small = p->n; vec n; double dx = 1e-6; return (t_E(n, f + dx, C) - t_E(n, f - dx, C)) / (2 * dx); }
double func_f_eq_multi(double f, void * params){ struct func_f_eq_multi_params *p = (struct func_f_eq_multi_params *) params; set_const * C = p->C; std::vector<double> n = p->n; double dx = 1e-6; //return (t_E(n, f + dx, C) - t_E(n, f - dx, C)) / (2 * dx); double res = (t_E(n, f + dx, C) - t_E(n, f, C)) / (dx); //printf("res=%f \n", res); return res; }
double func_f_eq(double f, void * params) { struct func_f_eq_params *p = (struct func_f_eq_params *) params; double nn = p->nn; double np = p->np; set_const * C = p->C; double dx = 1e-6; double res = (t_E(nn, np, f + dx, C) - t_E(nn, np, f, C)) / (dx); //printf("\n Cs = %f, Co = %f, b = %f, c = %f \n", C->C_s, C->C_o, C->b, C->c); //printf("f = %f, nn = %f, np = %f, res = %f \n", f, nn, np, res); return res; }
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; }
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 E(double n, set_const * C){ vec n_ext; double np = np_eq(n, n_ext, C); vec _n; _n.push_back(n - np); _n.push_back(np); //double f = f_eq(_n, C); //return t_E(n - np, np, f, C); //printf("n = %.18f, np = %.18f, feq = %.18f \n",n , np, f); return t_E(n - np, np, C); //return 0; }
double mu_e(double n, double np, double f, set_const * C) { double res = pow(C->C_r, 2.0) * D *(n - 2.0 * np) / (2.0 * m_n *m_n* C->eta_r(f)); res -= sqrt(pow(m_n * C->phi_n(f), 2.0) + pow(p_f(np), 2.0)); res += sqrt(pow(m_n * C->phi_n(f), 2.0) + pow(p_f(n - np), 2.0)); double dn = 1e-6; if (dn > np){ dn = np / 2.0; } double mu_n = (t_E(n - np - 2 * dn, np, f, C) - 8 * t_E(n - np - dn, np, f, C) + 8 * t_E(n - np + dn, np, f, C) - t_E(n - np + 2 * dn, np, f, C)) / (12 * D * dn); double mu_p = (t_E(n - np, np - 2 * dn, f, C) - 8 * t_E(n - np, np - dn, f, C) + 8 * t_E(n - np, np + dn, f, C) - t_E(n - np, np + 2 * dn, f, C)) / (12 * D * dn); double res2 = mu_n - mu_p; return res; }
unsigned int t_constant_exponent(struct common_lexer_state * common_lexer_state, unsigned int tentative_position){ unsigned int count = 0; unsigned int e_size; if((count = t_D(common_lexer_state, tentative_position + count))){ while(t_D(common_lexer_state, tentative_position + count)){ count++; } if((e_size = t_E(common_lexer_state, tentative_position + count))){ count += e_size; if(t_FS(common_lexer_state, tentative_position + count)){ count++; } return count; } } return 0; }
//Just a wrapper for a 2-component system! double t_E(double nn, double np, double f, set_const * C) { //double res = 0.5 * pow(m_n * m_n * f / C->C_s, 2.0); //res += C->U(f); //res += KineticIntegral(p_f(np), m_n*C->phi_n(f), C); //res += KineticIntegral(p_f(nn), m_n*C->phi_n(f), C); //res += 0.5 * pow(C->C_o * D * (nn + np) / m_n, 2.0) / (C->eta_o(f)); //res += pow(C->C_r * D * (nn - np) / m_n, 2.0) / (8.0 * C->eta_r(f)); // //return res; vec n; n.push_back(nn); n.push_back(np); double res2 = t_E(n, f, C); /* REALIZED IN t_E(double, double, set_const*)*/ // double me = m_e; // // double pf_e = 0; // if (pow(mu_e(n[0] + n[1], n[1], f, C), 2.0) - me*me >= 0){ // pf_e = sqrt(pow(mu_e(n[0] + n[1], n[1], f, C), 2.0) - me*me); // } // // if (n[1] != 0.0){ // res2+= KineticIntegral(pf_e, m_e, C); // } // // double mmu = m_mu; // double pf_mu = 0; // if (pow(mu_e(n[0] + n[1], n[1], f, C), 2.0) - mmu*mmu >= 0){ // pf_mu = sqrt(pow(mu_e(n[0] + n[1], n[1], f, C), 2.0) - mmu*mmu); // } // // if (n[1] != 0.0){ // res2 += KineticIntegral(pf_mu, m_mu, C); // } return res2; }
unsigned int t_constant_float_large(struct common_lexer_state * common_lexer_state, unsigned int tentative_position){ unsigned int count = 0; unsigned int e_size; if((count = t_D(common_lexer_state, tentative_position + count))){ while(t_D(common_lexer_state, tentative_position + count)){ count++; } if(accept('.', common_lexer_state, tentative_position + count)){ count++; while(t_D(common_lexer_state, tentative_position + count)){ count++; } if((e_size = t_E(common_lexer_state, tentative_position + count))){ count += e_size; if(t_FS(common_lexer_state, tentative_position + count)){ count++; } } return count; } } return 0; }