-
Notifications
You must be signed in to change notification settings - Fork 0
/
GaussianPoint.cpp
75 lines (71 loc) · 2.28 KB
/
GaussianPoint.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "GaussianPoint.h"
#include <iostream>
#include <iomanip>
#include <assert.h>
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
GaussianPoint1D::GaussianPoint1D(mpz_class _point_num, const vector<mpf_class>& _gauss_point, const vector<mpf_class>& _weight)
:point_num{_point_num},gauss_point{_gauss_point},weight{_weight}
{
assert(gauss_point.size() == weight.size());
};
vector<mpf_class>& GaussianPoint1D::get_points()
{
return gauss_point;
};
vector<mpf_class>& GaussianPoint1D::get_weights()
{
return weight;
};
void writeGaussianInfo(string dirpaths, const GaussianPoint1D& p)
{
fs::path dirpath = dirpaths;
if (!fs::exists(dirpath)) {
fs::create_directory(dirpath);
std::cout << "Directory created successfully.\n";
}
string filename = to_string(p.point_num.get_ui()) + ".txt";
fs::path filepath = dirpath / filename;
if (fs::exists(filepath)) {
// 如果文件已经存在,则以覆盖模式打开
std::ofstream ofs(filepath, ofstream::out | ofstream::trunc);
if (ofs.is_open()) {
// 文件成功打开,可以进行写操作
ofs << p;
ofs.close();
} else {
// 文件无法打开,输出错误信息并退出程序
std::cerr << "Failed to open file " << filename <<".\n";
exit(1);
}
} else {
// 如果文件不存在,则创建文件
std::ofstream ofs(filepath, ofstream::out);
if (ofs.is_open()) {
// 文件成功创建,可以进行写操作
ofs << p;
ofs.close();
} else {
// 文件无法创建,输出错误信息并退出程序
std::cerr << "Failed to create file " << filename <<".\n";
exit(1);
}
}
};
ostream& operator<<(ostream& out,const GaussianPoint1D& p)
{
//out << "number of gauss points is: " << p.point_num << "\n";
//out << "\t\tpoint" << "\t\t\t\t" << "weight" << "\n";
out << p.point_num << "\n";
vector<mpf_class> gauss_point = p.gauss_point;
vector<mpf_class> weight = p.weight;
for(int i = 0; i < gauss_point.size(); ++i)
{
out << fixed << setprecision(80);
out << gauss_point.at(i) <<"\t";
out << weight.at(i) << "\n";
}
out << endl;
return out;
};