double EW_ABC::Mw(const bool bAlternative) const { if (!bAlternative) return NPE.Mw_eps(eps1(), eps2(), eps3()); else { double delta_alpha = (NPE.alphaMz() - 1.0 / 128.90) / NPE.getAle(); double cW2_Born = 0.768905 * (1.0 - 0.40 * delta_alpha); double cW2 = cW2_Born * (1.0 + 1.43 * eps1() - 1.00 * eps2() - 0.86 * eps3()); return ( sqrt(cW2) * NPE.getMz()); } }
void HeedMatterDef::replace_epsi12(const String& file_name) { mfunnamep("void HeedMatterDef::replace_epsi12(const String& file_name)"); #ifdef USE_STLSTRING std::ifstream file(file_name.c_str()); #else std::ifstream file(hist_file_name); #endif if (!file) { funnw.ehdr(mcerr); mcerr << "cannot open file " << file_name << std::endl; spexit(mcerr); } else { mcout << "file " << file_name << " is opened" << std::endl; } long qe = 0; // number of points in input mesh file >> qe; check_econd11(qe, <= 2, mcerr); DynLinArr<double> ener(qe); DynLinArr<double> eps1(qe); DynLinArr<double> eps2(qe); for (long ne = 0; ne < qe; ++ne) { file >> ener[ne] >> eps1[ne] >> eps2[ne]; check_econd11(eps2[ne], < 0.0, mcerr); if (ne > 0) { check_econd12(ener[ne], <, ener[ne - 1], mcerr); } }
int main() { /* Machine epsilon se prej (podle wiki) meri od jednicky */ printf("Moje : %g\n", eps1(1)); printf("Wiki : %g\n", eps2(1)); printf("Konstanta : %g\n", FLT_EPSILON); printf("Yay!\n"); return 0; }
void pbsolver(Mat<>& eps, Mat<>& phi, Mat<>& bgf, double dcel, double tol, int iter){ size_t nx = eps.nx(), ny = eps.ny(), nz = eps.nz(); double dx = comdata.deltax, dy = comdata.deltay, dz = comdata.deltaz; Mat<> eps1(nx,ny,nz), eps2(nx,ny,nz), eps3(nx,ny,nz); for(size_t i=1; i<nx; ++i){ for(size_t j=1; j<ny; ++j){ for(size_t k=1; k<nz; ++k){ eps1(i,j,k) = (eps(i+1,j,k) + eps(i,j,k))/2.0; eps2(i,j,k) = (eps(i,j+1,k) + eps(i,j,k))/2.0; eps3(i,j,k) = (eps(i,j,k+1) + eps(i,j,k))/2.0; }}} std::vector< Eigen::Triplet<double> > tripletList; tripletList.reserve(nx*ny*nz); Eigen::VectorXd phi_flat(nx*ny*nz); size_t n = nx*ny*nz; for(size_t i=1; i<=nx; ++i){ for(size_t j=1; j<=ny; ++j){ for(size_t k=1; k<=nz; ++k){ size_t ijk = (i-1)*nz*ny + (j-1)*nz + k-1; if(i==1 || i==nx || j==1 || j==ny || k==1 || k==nz){ tripletList.push_back( Eigen::Triplet<double>(ijk, ijk, 1.0) ); }else{ double f = -( (eps1(i,j,k) + eps1(i-1,j,k))/dx/dx + (eps2(i,j,k) + eps2(i,j-1,k))/dy/dy + (eps3(i,j,k) + eps3(i,j,k-1))/dz/dz ); tripletList.push_back( Eigen::Triplet<double>(ijk, ijk, f) ); double weit[6]; weit[0] = eps1(i-1,j,k)/dx/dx; weit[1] = eps2(i,j-1,k)/dy/dy; weit[2] = eps3(i,j,k-1)/dz/dz; weit[3] = eps3(i,j,k)/dz/dz; weit[4] = eps2(i,j,k)/dy/dy; weit[5] = eps1(i,j,k)/dx/dx; size_t jj = ijk - nz*ny; if(jj>=0){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[0]) ); } jj = ijk - nz; if(jj>=0){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[1]) ); } jj = ijk - 1; if(jj>=0){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[2]) ); } jj = ijk + 1; if(jj<n){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[3]) ); } jj = ijk + nz; if(jj<n){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[4]) ); } jj = ijk + nz*ny; if(jj<n){ tripletList.push_back( Eigen::Triplet<double>(ijk, jj, weit[5]) ); } } phi_flat(ijk) = phi(i,j,k); }}} Eigen::SparseMatrix<double> A(n, n); A.setFromTriplets(tripletList.begin(), tripletList.end()); A.makeCompressed(); Eigen::BiCGSTAB<Eigen::SparseMatrix<double>, Eigen::IdentityPreconditioner > solver(A); solver.setMaxIterations(iter); solver.setTolerance(tol); phi_flat = solver.solveWithGuess(bgf.baseInterface(), phi_flat); for(size_t i=1; i<=nx; ++i){ for(size_t j=1; j<=ny; ++j){ for(size_t k=1; k<=nz; ++k){ size_t ijk = (i-1)*nz*ny + (j-1)*nz + k-1; phi(i,j,k) = phi_flat(ijk); }}} }