Merge pull request 'test' (#1) from test into master
Reviewed-on: https://git.tjoyspotifylastfm.tech/ParkSuMin/MemMAPR/pulls/1
This commit is contained in:
@@ -20,7 +20,7 @@ public:
|
||||
double X() const;
|
||||
double Y() const;
|
||||
|
||||
//double Dist(const Node*) const;
|
||||
double Dist(const Node*) const;
|
||||
void LinkX(Node*, Node*);
|
||||
void LinkY(Node*, Node*);
|
||||
Node*& l();
|
||||
@@ -30,8 +30,6 @@ public:
|
||||
void SetT(double);
|
||||
bool IsBound();
|
||||
void SetB(int);
|
||||
|
||||
double operator-(const Node*) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
39
src/Node.cpp
39
src/Node.cpp
@@ -9,64 +9,60 @@ double Node::T() const {
|
||||
if (_btype == 2) {
|
||||
if (!_left)
|
||||
if (_right)
|
||||
return _right->T();
|
||||
return _right->T() / (1 + Dist(_right));
|
||||
if (!_right)
|
||||
if (_left)
|
||||
return _left->T();
|
||||
return _left->T() / (1 + Dist(_left));
|
||||
if (!_above)
|
||||
if (_below)
|
||||
return _below->T();
|
||||
return _below->T() / (1 + Dist(_below));
|
||||
if (!_below)
|
||||
if (_above)
|
||||
return _above->T();
|
||||
return _above->T() / (1 + Dist(_above));
|
||||
if (_right && _left) {
|
||||
if (_right->IsBound())
|
||||
return _left->T();
|
||||
return _right->T();
|
||||
return _left->T() / (1 + Dist(_left));
|
||||
return _right->T() / (1 + Dist(_right));
|
||||
}
|
||||
if (_above && _below) {
|
||||
if (_above->IsBound())
|
||||
return _below->T();
|
||||
return _above->T();
|
||||
return _below->T() / (1 + Dist(_below));
|
||||
return _above->T() / (1 + Dist(_above));
|
||||
}
|
||||
}
|
||||
|
||||
if (_btype == 3) {
|
||||
if (!_left)
|
||||
if (_right)
|
||||
return _right->T() / (1 + this - _right);
|
||||
return _right->T();
|
||||
if (!_right)
|
||||
if (_left)
|
||||
return _left->T() / (1 + this - _left);
|
||||
return _left->T();
|
||||
if (!_above)
|
||||
if (_below)
|
||||
return _below->T() / (1 + this - _below);
|
||||
return _below->T();
|
||||
if (!_below)
|
||||
if (_above)
|
||||
return _above->T() / (1 + this - _above);
|
||||
return _above->T();
|
||||
if (_right && _left) {
|
||||
if (_right->IsBound())
|
||||
return _left->T() / (1 + this - _left);
|
||||
return _right->T() / (1 + this - _right);
|
||||
return _left->T();
|
||||
return _right->T();
|
||||
}
|
||||
if (_above && _below) {
|
||||
if (_above->IsBound())
|
||||
return _below->T() / (1 + this - _below);
|
||||
return _above->T() / (1 + this - _above);
|
||||
return _below->T();
|
||||
return _above->T();
|
||||
}
|
||||
}
|
||||
|
||||
return _t;
|
||||
}
|
||||
|
||||
double Node::operator-(const Node* to) const {
|
||||
double Node::Dist(const Node* to) const {
|
||||
return std::sqrt(pow(X() - to->X(), 2) + pow(Y() - to->Y(), 2));
|
||||
}
|
||||
|
||||
//double Node::Dist(const Node* to) const {
|
||||
// return std::sqrt(pow(X() - to->X(), 2) + pow(Y() - to->Y(), 2));
|
||||
//}
|
||||
|
||||
Node*& Node::l() { return _left; }
|
||||
Node*& Node::r() { return _right; }
|
||||
Node*& Node::u() { return _above; }
|
||||
@@ -88,4 +84,3 @@ void Node::SetT(double t) {
|
||||
|
||||
bool Node::IsBound() { return _btype; }
|
||||
void Node::SetB(int type) { _btype = type; }
|
||||
|
||||
|
||||
@@ -80,8 +80,8 @@ void Solver::SolveImplicit(System& sys, double tstop) const {
|
||||
|
||||
void Solver::SolveLine(System& sys, std::vector<Node*>& n) const {
|
||||
int size = n.size() - 2;
|
||||
double mu1 = (n.front() - n[1]) / sys.step();
|
||||
double mu2 = (n.back() - n[n.size() - 2]) / sys.step();
|
||||
double mu1 = n.front()->Dist(n[1]) / sys.step();
|
||||
double mu2 = n.back()->Dist(n[n.size() - 2]) / sys.step();
|
||||
/* Защита от нуля */
|
||||
if (mu2 == 0.)
|
||||
mu2 = .1;
|
||||
|
||||
19
src/main.cpp
19
src/main.cpp
@@ -2,6 +2,8 @@
|
||||
#include <fstream>
|
||||
#include <Solver.hpp>
|
||||
|
||||
#define STEP 1
|
||||
|
||||
#define WIDTH 500.
|
||||
#define HEIGHT 400.
|
||||
|
||||
@@ -11,8 +13,8 @@
|
||||
//#define SQUARE_Y 155.
|
||||
//#define SQUARE_SIDE 100.
|
||||
|
||||
#define HOLE_X 355.
|
||||
#define HOLE_Y 155.
|
||||
#define HOLE_X 155.
|
||||
#define HOLE_Y 255.
|
||||
#define HOLE_RADIUS 50.
|
||||
|
||||
#define CONDUCTIVITY 50. // Теплопроводность материала
|
||||
@@ -38,13 +40,12 @@ int main()
|
||||
int top = 1;
|
||||
int right = 3;
|
||||
int bottom = 1;
|
||||
int r2 = 3;
|
||||
int s = 3;
|
||||
int arc_bound = 3;
|
||||
int hole_bound = 1;
|
||||
|
||||
double step_5 = 5;
|
||||
double step_10 = 10;
|
||||
|
||||
double time_step = 1;
|
||||
double time_end = 100;
|
||||
|
||||
std::map<std::string, double> plate{
|
||||
@@ -58,8 +59,8 @@ int main()
|
||||
};
|
||||
|
||||
Object obj;
|
||||
obj.Add_Form("Circle", circle, true, s);
|
||||
obj.Add_Form("Arc", arc, true, r2);
|
||||
obj.Add_Form("Circle", circle, true, hole_bound);
|
||||
obj.Add_Form("Arc", arc, true, arc_bound);
|
||||
obj.Add_Form("Rectangle", plate, false, 1);
|
||||
|
||||
System explicit5(obj, step_5, CONDUCTIVITY);
|
||||
@@ -74,8 +75,8 @@ int main()
|
||||
implicit5.DefineBounds(left, top, right, bottom);
|
||||
implicit10.DefineBounds(left, top, right, bottom);
|
||||
|
||||
Solver slv5("explicit5.txt", "implicit5.txt", time_step);
|
||||
Solver slv10("explicit10.txt", "implicit10.txt", time_step);
|
||||
Solver slv5("explicit5.txt", "implicit5.txt", STEP);
|
||||
Solver slv10("explicit10.txt", "implicit10.txt", STEP);
|
||||
|
||||
slv5.SolveExplicit(explicit5, time_end);
|
||||
slv5.SolveImplicit(implicit5, time_end);
|
||||
|
||||
Reference in New Issue
Block a user