XIAN-FEM-2026June/opticsfem-master/test/Test_OutputData.cpp

356 lines
13 KiB
C++

#include"../kernel/Assemble_Base.h"
#include"../solver/Solver_Base.h"
#include<string>
#include <fstream>
#include <iostream>
#include <iomanip>
void OpticsFEM_2D_EigenMode::Test_OutputMatrix()
{
if (_mIsReal)
{
std::ofstream outAi, outAj, outAv, outBi, outBj, outBv;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv.open("Av.txt", std::ios::out | std::ios::trunc);
outBi.open("Bi.txt", std::ios::out | std::ios::trunc);
outBj.open("Bj.txt", std::ios::out | std::ios::trunc);
outBv.open("Bv.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv << std::scientific;
outBi << std::fixed; outBj << std::fixed; outBv << std::scientific;
Eigen::SparseMatrix<double> tempA = Eigen::SparseMatrix<double>(_mA_real);
Eigen::SparseMatrix<double> tempB = Eigen::SparseMatrix<double>(_mB_real);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<double>::InnerIterator it(tempA, k); it; ++it)
{
outAv << std::setprecision(12) << it.value() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv << std::endl;
for (int k = 0; k < tempB.outerSize(); k++)
for (Eigen::SparseMatrix<double>::InnerIterator it(tempB, k); it; ++it)
{
outBv << std::setprecision(12) << it.value() << " ";
outBi << std::setprecision(12) << it.row() + 1 << " ";
outBj << std::setprecision(12) << it.col() + 1 << " ";
}
outBi << std::endl;
outBj << std::endl;
outBv << std::endl;
outAi.close();
outAj.close();
outAv.close();
outBi.close();
outBj.close();
outBv.close();
}
else
{
std::ofstream outAi, outAj, outAv_real, outAv_imag, outBi, outBj, outBv_real, outBv_imag, outPi, outPj, outPv_real, outPv_imag;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv_real.open("Av_real.txt", std::ios::out | std::ios::trunc);
outAv_imag.open("Av_imag.txt", std::ios::out | std::ios::trunc);
outBi.open("Bi.txt", std::ios::out | std::ios::trunc);
outBj.open("Bj.txt", std::ios::out | std::ios::trunc);
outBv_real.open("Bv_real.txt", std::ios::out | std::ios::trunc);
outBv_imag.open("Bv_imag.txt", std::ios::out | std::ios::trunc);
outPi.open("Pi.txt", std::ios::out | std::ios::trunc);
outPj.open("Pj.txt", std::ios::out | std::ios::trunc);
outPv_real.open("Pv_real.txt", std::ios::out | std::ios::trunc);
outPv_imag.open("Pv_imag.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv_real << std::scientific;
outBi << std::fixed; outBj << std::fixed; outBv_real << std::scientific;
outPi << std::fixed; outPj << std::fixed; outPv_real << std::scientific;
outAv_imag << std::scientific; outBv_imag << std::scientific; outPv_imag << std::scientific;
Eigen::SparseMatrix<complex<double>> tempA = Eigen::SparseMatrix<complex<double>>(_mA_complex);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempA, k); it; ++it)
{
outAv_real << std::setprecision(12) << it.value().real() << " ";
outAv_imag << std::setprecision(12) << it.value().imag() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv_real << std::endl;
outAv_imag << std::endl;
Eigen::SparseMatrix<complex<double>> tempB = Eigen::SparseMatrix<complex<double>>(_mB_complex);
for (int k = 0; k < tempB.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempB, k); it; ++it)
{
outBv_real << std::setprecision(12) << it.value().real() << " ";
outBv_imag << std::setprecision(12) << it.value().imag() << " ";
outBi << std::setprecision(12) << it.row() + 1 << " ";
outBj << std::setprecision(12) << it.col() + 1 << " ";
}
outBi << std::endl;
outBj << std::endl;
outBv_real << std::endl;
outBv_imag << std::endl;
Eigen::SparseMatrix<complex<double>> tempP = Eigen::SparseMatrix<complex<double>>(_mP_complex);
for (int k = 0; k < tempP.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempP, k); it; ++it)
{
outPv_real << std::setprecision(12) << it.value().real() << " ";
outPv_imag << std::setprecision(12) << it.value().imag() << " ";
outPi << std::setprecision(12) << it.row() + 1 << " ";
outPj << std::setprecision(12) << it.col() + 1 << " ";
}
outPi << std::endl;
outPj << std::endl;
outPv_real << std::endl;
outPv_imag << std::endl;
outAi.close();
outAj.close();
outAv_real.close();
outAv_imag.close();
outBi.close();
outBj.close();
outBv_real.close();
outBv_imag.close();
outPi.close();
outPj.close();
outPv_real.close();
outPv_imag.close();
}
}
void OpticsFEM_2D_EigenFreq::Test_OutputMatrix()
{
if (_mIsReal)
{
std::ofstream outAi, outAj, outAv, outBi, outBj, outBv;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv.open("Av.txt", std::ios::out | std::ios::trunc);
outBi.open("Bi.txt", std::ios::out | std::ios::trunc);
outBj.open("Bj.txt", std::ios::out | std::ios::trunc);
outBv.open("Bv.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv << std::scientific;
outBi << std::fixed; outBj << std::fixed; outBv << std::scientific;
Eigen::SparseMatrix<double> tempA = Eigen::SparseMatrix<double>(_mA_real);
Eigen::SparseMatrix<double> tempB = Eigen::SparseMatrix<double>(_mB_real);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<double>::InnerIterator it(tempA, k); it; ++it)
{
outAv << std::setprecision(12) << it.value() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv << std::endl;
for (int k = 0; k < tempB.outerSize(); k++)
for (Eigen::SparseMatrix<double>::InnerIterator it(tempB, k); it; ++it)
{
outBv << std::setprecision(12) << it.value() << " ";
outBi << std::setprecision(12) << it.row() + 1 << " ";
outBj << std::setprecision(12) << it.col() + 1 << " ";
}
outBi << std::endl;
outBj << std::endl;
outBv << std::endl;
outAi.close();
outAj.close();
outAv.close();
outBi.close();
outBj.close();
outBv.close();
}
else
{
std::ofstream outAi, outAj, outAv_real, outAv_imag, outBi, outBj, outBv_real, outBv_imag, outPi, outPj, outPv_real, outPv_imag;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv_real.open("Av_real.txt", std::ios::out | std::ios::trunc);
outAv_imag.open("Av_imag.txt", std::ios::out | std::ios::trunc);
outBi.open("Bi.txt", std::ios::out | std::ios::trunc);
outBj.open("Bj.txt", std::ios::out | std::ios::trunc);
outBv_real.open("Bv_real.txt", std::ios::out | std::ios::trunc);
outBv_imag.open("Bv_imag.txt", std::ios::out | std::ios::trunc);
outPi.open("Pi.txt", std::ios::out | std::ios::trunc);
outPj.open("Pj.txt", std::ios::out | std::ios::trunc);
outPv_real.open("Pv_real.txt", std::ios::out | std::ios::trunc);
outPv_imag.open("Pv_imag.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv_real << std::scientific;
outBi << std::fixed; outBj << std::fixed; outBv_real << std::scientific;
outPi << std::fixed; outPj << std::fixed; outPv_real << std::scientific;
outAv_imag << std::scientific; outBv_imag << std::scientific; outPv_imag << std::scientific;
Eigen::SparseMatrix<complex<double>> tempA = Eigen::SparseMatrix<complex<double>>(_mA_complex);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempA, k); it; ++it)
{
outAv_real << std::setprecision(12) << it.value().real() << " ";
outAv_imag << std::setprecision(12) << it.value().imag() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv_real << std::endl;
outAv_imag << std::endl;
Eigen::SparseMatrix<complex<double>> tempB = Eigen::SparseMatrix<complex<double>>(_mB_complex);
for (int k = 0; k < tempB.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempB, k); it; ++it)
{
outBv_real << std::setprecision(12) << it.value().real() << " ";
outBv_imag << std::setprecision(12) << it.value().imag() << " ";
outBi << std::setprecision(12) << it.row() + 1 << " ";
outBj << std::setprecision(12) << it.col() + 1 << " ";
}
outBi << std::endl;
outBj << std::endl;
outBv_real << std::endl;
outBv_imag << std::endl;
Eigen::SparseMatrix<complex<double>> tempP = Eigen::SparseMatrix<complex<double>>(_mP_complex);
for (int k = 0; k < tempP.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempP, k); it; ++it)
{
outPv_real << std::setprecision(12) << it.value().real() << " ";
outPv_imag << std::setprecision(12) << it.value().imag() << " ";
outPi << std::setprecision(12) << it.row() + 1 << " ";
outPj << std::setprecision(12) << it.col() + 1 << " ";
}
outPi << std::endl;
outPj << std::endl;
outPv_real << std::endl;
outPv_imag << std::endl;
outAi.close();
outAj.close();
outAv_real.close();
outAv_imag.close();
outBi.close();
outBj.close();
outBv_real.close();
outBv_imag.close();
outPi.close();
outPj.close();
outPv_real.close();
outPv_imag.close();
}
}
void OpticsFEM_2D_Scatter::Test_OutputMatrix()
{
if(_mIsReal)
{
std::ofstream outAi, outAj, outAv, outBv, outX;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv.open("Av.txt", std::ios::out | std::ios::trunc);
outBv.open("Bv.txt", std::ios::out | std::ios::trunc);
outX.open("X.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv << std::scientific; outBv << std::scientific; outX << std::scientific;
Eigen::SparseMatrix<double> tempA = Eigen::SparseMatrix<double>(_mA_real);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<double>::InnerIterator it(tempA, k); it; ++it)
{
outAv << std::setprecision(12) << it.value() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv << std::endl;
for (int k = 0; k < _mB_real.rows(); k++)
{
outBv << std::setprecision(12) << _mB_real(k) << endl;
outX << std::setprecision(12) << _mX(k).real() << endl;
}
outAi.close();
outAj.close();
outAv.close();
outBv.close();
outX.close();
}
else
{
std::ofstream outAi, outAj, outAv_real, outAv_imag, outBv_real, outBv_imag,outX_real,outX_imag;
outAi.open("Ai.txt", std::ios::out | std::ios::trunc);
outAj.open("Aj.txt", std::ios::out | std::ios::trunc);
outAv_real.open("Av_real.txt", std::ios::out | std::ios::trunc);
outAv_imag.open("Av_imag.txt", std::ios::out | std::ios::trunc);
outBv_real.open("Bv_real.txt", std::ios::out | std::ios::trunc);
outBv_imag.open("Bv_imag.txt", std::ios::out | std::ios::trunc);
outX_real.open("X_real.txt", std::ios::out | std::ios::trunc);
outX_imag.open("X_imag.txt", std::ios::out | std::ios::trunc);
outAi << std::fixed; outAj << std::fixed; outAv_real << std::scientific;
outAv_imag << std::scientific; outBv_real << std::scientific; outBv_imag << std::scientific;
outX_real << std::scientific; outX_imag << std::scientific;
Eigen::SparseMatrix<complex<double>> tempA = Eigen::SparseMatrix<complex<double>>(_mA_complex);
for (int k = 0; k < tempA.outerSize(); k++)
for (Eigen::SparseMatrix<complex<double>>::InnerIterator it(tempA, k); it; ++it)
{
outAv_real << std::setprecision(12) << it.value().real() << " ";
outAv_imag << std::setprecision(12) << it.value().imag() << " ";
outAi << std::setprecision(12) << it.row() + 1 << " ";
outAj << std::setprecision(12) << it.col() + 1 << " ";
}
outAi << std::endl;
outAj << std::endl;
outAv_real << std::endl;
outAv_imag << std::endl;
for (int k = 0; k < _mB_complex.rows(); k++)
{
outBv_real << std::setprecision(12) << _mB_complex(k).real() << endl;
outBv_imag << std::setprecision(12) << _mB_complex(k).imag() << endl;
outX_real << std::setprecision(12) << _mX(k).real() << endl;
outX_imag << std::setprecision(12) << _mX(k).imag() << endl;
}
outAi.close();
outAj.close();
outAv_real.close();
outAv_imag.close();
outBv_real.close();
outBv_imag.close();
outX_real.close();
outX_imag.close();
}
}
void Solver_LdaDom::Test_OutputX(Eigen::VectorXcd* x)
{
std::ofstream outX;
outX.open("X.txt", std::ios::out | std::ios::trunc);
outX << std::fixed;
for(int i=0;i<x[0].rows();i++)
outX<<std::setprecision(12) << x[0](i).real()<<" "<<x[0](i).imag()<<endl;
outX.close();
}