Ejemplo n.º 1
0
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();
};
Ejemplo n.º 2
0
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();
};
Ejemplo n.º 3
0
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();
};