void ISOP2P1::outputTecplotP(const std::string &prefix) { RegularMesh<DIM> &mesh_v = irregular_mesh_v->regularMesh(); RegularMesh<DIM> &mesh_p = irregular_mesh_p->regularMesh(); int n_node = mesh_p.n_geometry(0); int n_ele = mesh_p.n_geometry(2); std::stringstream result; result.setf(std::ios::fixed); result.precision(4); result << prefix << ".dat"; std::ofstream tecplot(result.str().c_str()); tecplot.setf(std::ios::fixed); tecplot.precision(20); tecplot << "VARIABLES = \"X\", \"Y\", \"P\""; tecplot << std::endl; tecplot << "ZONE NODES=" << n_node << ", ELEMENTS=" << n_ele << ", DATAPACKING=BLOCK," << std::endl; tecplot << "ZONETYPE=FETRIANGLE" << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[0] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[1] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << p_h(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_ele; ++i) { std::vector<int> &vtx = fem_space_p.element(i).geometry().vertex(); tecplot << vtx[0] + 1 << "\n" << vtx[1] + 1 << "\n" << vtx[2] + 1 << std::endl; } tecplot.close(); };
void ISOP2P1::outputTecplotP(const std::string &prefix) { computeMonitor(); RegularMesh<DIM> &mesh_p = irregular_mesh_p->regularMesh(); int n_node = mesh_p.n_geometry(0); int n_ele = mesh_p.n_geometry(2); /// 直接在压力数值解p上减掉均值. // FEMFunction<double, DIM> _p_h(p_h); p_h.add(-Functional::meanValue(p_h, 3)); // /// 用于burgurs方程的输出,如果不是需要注释掉. // Operator::L2Interpolate(v_h[0], p_h); std::stringstream result; result.setf(std::ios::fixed); result.precision(4); result << prefix << ".dat"; std::ofstream tecplot(result.str().c_str()); tecplot.setf(std::ios::fixed); tecplot.precision(20); tecplot << "VARIABLES = \"X\", \"Y\", \"P\", \"delta_x\", \"delta_y\", \"monitor\""; // tecplot << "VARIABLES = \"X\", \"Y\", \"P\""; tecplot << std::endl; tecplot << "ZONE NODES=" << n_node << ", ELEMENTS=" << n_ele << ", DATAPACKING=BLOCK," << std::endl; tecplot << "VARLOCATION=([6]=CELLCENTERED)," << "ZONETYPE=FETRIANGLE" << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[0] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[1] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << p_h(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[0] - mesh_bak.point(i)[0] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_p.point(i)[1] - mesh_bak.point(i)[1] << "\n"; tecplot << std::endl; for (int i = 0; i < n_ele; ++i) { if (isMoving == 0) tecplot << Monitor[i]<< "\n"; else tecplot << monitor(i) << "\n"; } tecplot << std::endl; for (int i = 0; i < n_ele; ++i) { std::vector<int> &vtx = fem_space_p.element(i).geometry().vertex(); tecplot << vtx[0] + 1 << "\n" << vtx[1] + 1 << "\n" << vtx[2] + 1 << std::endl; } tecplot.close(); };
void ISOP2P1::outputTecplot(const std::string &prefix) { /// 计算速度单元上的涡量和散度. computeDiv_and_Vor(); RegularMesh<DIM> &mesh_p = irregular_mesh_p->regularMesh(); RegularMesh<DIM> &mesh_v = irregular_mesh_v->regularMesh(); int n_node = mesh_v.n_geometry(0); int n_ele = mesh_v.n_geometry(2); FEMFunction <double, DIM> p_h_refine(fem_space_v); Operator::L2Interpolate(p_h, p_h_refine); /// 减掉均值. p_h_refine.add(-Functional::meanValue(p_h_refine, 3)); DiVx divx(viscosity, t); DiVy divy(viscosity, t); // RealVx divx; // RealVy divy; std::stringstream result; result.setf(std::ios::fixed); result.precision(4); result << prefix << ".dat"; std::ofstream tecplot(result.str().c_str()); tecplot.setf(std::ios::fixed); tecplot.precision(20); tecplot << "VARIABLES = \"X\", \"Y\", \"P\", \"U\", \"V\", \"L2Error\", \"divergence\", \"vorticity\""; tecplot << std::endl; tecplot << "ZONE NODES=" << n_node << ", ELEMENTS=" << n_ele << ", DATAPACKING=BLOCK," << std::endl; tecplot << "VARLOCATION=([6, 7]=CELLCENTERED)," << "ZONETYPE=FETRIANGLE" << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_v.point(i)[0] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_v.point(i)[1] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << p_h_refine(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << v_h[0](i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << v_h[1](i) << "\n"; tecplot << std::endl; // for (int i = 0; i < n_node; ++i) // { // double error = fabs(divx.value(mesh_v.point(i)) - v_h[0](i)); // tecplot << error << "\n"; // } // for (int i = 0; i < n_node; ++i) // { // double error = fabs(divy.value(mesh_v.point(i)) - v_h[1](i)); // tecplot << error << "\n"; // } for (int i = 0; i < n_ele; ++i) tecplot << err_ele[i] << "\n"; tecplot << std::endl; for (int i = 0; i < n_ele; ++i) tecplot << divergence[i] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << vorticity(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_ele; ++i) { std::vector<int> &vtx = fem_space_v.element(i).geometry().vertex(); tecplot << vtx[0] + 1 << "\n" << vtx[1] + 1 << "\n" << vtx[2] + 1 << std::endl; } tecplot.close(); };
void ISOP2P1::outputTecplot(const std::string &prefix) { if (output_vorticity == true) computVorticity(); if (output_divergence == true) computDivergence(); RegularMesh<DIM> &mesh_p = irregular_mesh_p->regularMesh(); RegularMesh<DIM> &mesh_v = irregular_mesh_v->regularMesh(); int n_node = mesh_v.n_geometry(0); int n_ele = mesh_v.n_geometry(2); FEMFunction <double, DIM> p_h_refine(fem_space_v); Operator::L2Interpolate(p_h, p_h_refine); std::stringstream result; result.setf(std::ios::fixed); result.precision(4); result << prefix << ".dat"; std::ofstream tecplot(result.str().c_str()); tecplot.setf(std::ios::fixed); tecplot.precision(20); tecplot << "VARIABLES = \"X\", \"Y\", \"P\", \"U\", \"V\""; if (output_vorticity == true) tecplot << ", \"W\""; if (output_divergence == true) tecplot << ", \"D\""; tecplot << std::endl; tecplot << "ZONE NODES=" << n_node << ", ELEMENTS=" << n_ele << ", DATAPACKING=BLOCK," << std::endl; tecplot << "ZONETYPE=FETRIANGLE" << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_v.point(i)[0] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << mesh_v.point(i)[1] << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << p_h_refine(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << v_h[0](i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_node; ++i) tecplot << v_h[1](i) << "\n"; tecplot << std::endl; if (output_vorticity == true) { for (int i = 0; i < n_node; ++i) tecplot << vot(i) << "\n"; tecplot << std::endl; } if (output_divergence == true) for (int i = 0; i < n_node; ++i) tecplot << div(i) << "\n"; tecplot << std::endl; for (int i = 0; i < n_ele; ++i) { std::vector<int> &vtx = fem_space_v.element(i).geometry().vertex(); tecplot << vtx[0] + 1 << "\n" << vtx[1] + 1 << "\n" << vtx[2] + 1 << std::endl; } tecplot.close(); };