Skip to content

Commit 8f77ddb

Browse files
committed
Many updates.
1 parent 11492cb commit 8f77ddb

File tree

9 files changed

+43
-24
lines changed

9 files changed

+43
-24
lines changed

LibTrussSolver/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ set(SOURCES
5858
"src/Section_Beam.cpp"
5959
"src/Node.cpp"
6060
"src/BeamUniformLoad.cpp"
61-
"src/CSTriangle.cpp" src/Section_CSTriangle.cpp include/Truss/Set/NodeSet.cpp include/Truss/Set/NodeSet.hpp include/Truss/Set/SetBase.hpp include/Truss/Load/NodeSetLoad.hpp include/Truss/Constraint/NodeSetConstraint.hpp include/Truss/Utils/GaussianQuadrature.hpp include/Truss/Element/CSQuad.hpp src/CSQuad.cpp include/Truss/Section/Section_CSQuad.hpp src/Section_CSQuad.cpp)
61+
"src/CSTriangle.cpp" src/Section_CSTriangle.cpp include/Truss/Set/NodeSet.cpp include/Truss/Set/NodeSet.hpp include/Truss/Set/SetBase.hpp include/Truss/Load/NodeSetLoad.hpp include/Truss/Constraint/NodeSetConstraint.hpp include/Truss/Utils/GaussianQuadrature.hpp include/Truss/Element/Quad4.hpp src/Quad4.cpp include/Truss/Section/Section_CSQuad.hpp src/Section_CSQuad.cpp)
6262

6363

6464
option(LibTrussSolver_DOUBLE_PRECISION "Build LibTrussSolver As Double Precision Version" OFF)

LibTrussSolver/include/Truss/Element/CSQuad.hpp LibTrussSolver/include/Truss/Element/Quad4.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Truss::Element
77
{
8-
class CSQuad : public ElementBase
8+
class Quad4 : public ElementBase
99
{
1010
public:
1111
bool IsConstantStrainTriangle{false};
@@ -20,11 +20,11 @@ namespace Truss::Element
2020
Node* Node4{};
2121
Section::Section_CSQuad* Section{};
2222

23-
~CSQuad() override = default;
23+
~Quad4() override = default;
2424

2525
[[nodiscard]] constexpr std::string GetElementName() const noexcept override
2626
{
27-
return "CSQuad";
27+
return "Quad4";
2828
}
2929

3030
void Build(Resources& resources) override;
@@ -46,7 +46,7 @@ namespace Truss::Element
4646

4747
[[nodiscard]] std::vector<ID> GetNodeIds() const override;
4848

49-
[[nodiscard]] Eigen::Matrix<Numeric, 3, 24> GetBMatrix() const;
49+
[[nodiscard]] Eigen::Matrix<Numeric, 3, 24> GetBMatrix(const VectorX<Numeric>& x, const VectorX<Numeric>& y) const;
5050

5151
[[nodiscard]] Matrix3x3<Numeric> GetDMatrix() const;
5252

LibTrussSolver/include/Truss/Utils/GaussianQuadrature.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ namespace Truss
120120
}
121121

122122

123-
template<typename TScalar, typename TFuncRetrun = TScalar>
124-
using IntegrateFunc = std::function<Eigen::VectorX<TFuncRetrun>(const Eigen::VectorX<TScalar>&, const Eigen::VectorX<TScalar>&)>;
123+
template<typename TScalar, typename TFuncRetrun = TScalar, typename TFuncArg = const Eigen::VectorX<TScalar>&>
124+
using IntegrateFunc = std::function<Eigen::VectorX<TFuncRetrun>(TFuncArg, TFuncArg)>;
125125

126126
template<typename TScalar, typename TFuncRetrun = TScalar>
127127
inline TFuncRetrun GaussianQuadrature2D(const IntegrateFunc<TScalar, TFuncRetrun>& func,

LibTrussSolver/src/CSTriangle.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ namespace Truss::Element
2121
(LeftNode->X * (RightNode->Y - TopNode->Y) +
2222
RightNode->X * (TopNode->Y - LeftNode->Y) +
2323
TopNode->X * (LeftNode->Y - RightNode->Y)));
24-
assert(area > 0);
2524
return area;
2625
}
2726

LibTrussSolver/src/CSQuad.cpp LibTrussSolver/src/Quad4.cpp

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
#include "Truss/Element/CSQuad.hpp"
1+
#include "Truss/Element/Quad4.hpp"
22
#include "Truss/Common/Resources.hpp"
33
#include "Truss/Utils/GaussianQuadrature.hpp"
44

55
namespace Truss::Element
66
{
7-
void CSQuad::Build(Resources& resources)
7+
void Quad4::Build(Resources& resources)
88
{
99
Node1 = &resources.Nodes.at(Node1Key);
1010
Node2 = &resources.Nodes.at(Node2Key);
@@ -14,34 +14,35 @@ namespace Truss::Element
1414
Section = std::static_pointer_cast<Section::Section_CSQuad>(section).get();
1515
}
1616

17-
std::vector<ID> CSQuad::GetNodeIds() const
17+
std::vector<ID> Quad4::GetNodeIds() const
1818
{
1919
return {Node1->Id, Node2->Id, Node3->Id, Node4->Id};
2020
}
2121

22-
MatrixX<Numeric> CSQuad::GetStiffnessGlobal() const
22+
MatrixX<Numeric> Quad4::GetStiffnessGlobal() const
2323
{
2424
return {};
2525
}
2626

27-
StressVector CSQuad::CalculateStress(const VectorX<Numeric>& displacement) const
27+
StressVector Quad4::CalculateStress(const VectorX<Numeric>& displacement) const
2828
{
2929
return {};
3030
}
3131

32-
MatrixX<Numeric> CSQuad::GetStiffnessLocal() const
32+
MatrixX<Numeric> Quad4::GetStiffnessLocal() const
3333
{
3434
// TODO: integrate B^TScalar D B
3535
return {};
3636
}
3737

38-
Eigen::Matrix<Numeric, 3, 24> CSQuad::GetBMatrix() const
38+
Eigen::Matrix<Numeric, 3, 24> Quad4::GetBMatrix(const VectorX<Numeric>& x, const VectorX<Numeric>& y) const
3939
{
40-
// TODO: is a function about x,y
40+
Eigen::Matrix<Numeric, 3, 24> result = Eigen::Matrix<Numeric, 3, 24>::Zero();
41+
//result(Eigen::all, {0, 1}) <<
4142
return {};
4243
}
4344

44-
Matrix3x3<Numeric> CSQuad::GetDMatrix() const
45+
Matrix3x3<Numeric> Quad4::GetDMatrix() const
4546
{
4647
Numeric v = Section->Mat->PoissonRation;
4748
Numeric E = Section->Mat->YoungsModules;

Tools/K2TrussConverter/K2Truss.cpp

+18-4
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ using namespace Truss::Tools;
1818

1919
int main(int argc, char* argv[])
2020
{
21-
if (argc < 2)
21+
if (argc < 3)
2222
{
23-
cout << "Usage: " << argv[0] << " <kdoc file>" << endl;
23+
cout << "Usage: K2Truss <input.k> <output.truss>" << endl;
2424
return 1;
2525
}
2626

@@ -32,21 +32,35 @@ int main(int argc, char* argv[])
3232
cout << "Failed to open file: " << argv[1] << endl;
3333
return 1;
3434
}
35+
ofstream ofs(argv[2]);
36+
if (!ofs.is_open())
37+
{
38+
cout << "Failed to open file: " << argv[2] << endl;
39+
return 1;
40+
}
41+
3542
string kdoc((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
3643
auto result = KDoc::Parse(kdoc);
44+
45+
auto tdoc = TrussDocument::Object();
46+
3747
for (auto& doc: result)
3848
{
3949
if (doc.Keyword == "NODE")
4050
{
4151
auto nodes = GetNodes(doc);
42-
cout << nodes.ToString() << endl;
52+
tdoc.Add("Node", nodes);
4353
}
4454
else if (doc.Keyword == "ELEMENT_SHELL")
4555
{
4656
auto triangles = GetTriangles(doc);
47-
cout << triangles.ToString() << endl;
57+
tdoc.Add("Element", triangles);
4858
}
4959
}
60+
61+
ofs << tdoc.ToString() << endl;
62+
cout << "Done." << endl;
63+
5064
}
5165
catch (exception& e)
5266
{

TrussCLI/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ set(CMAKE_CXX_STANDARD 20)
44

55
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
66
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
7+
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/bigobj>")
78

89
## FetchContent
910
include(FetchContent)

TrussCLI/src/TrussCLI.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "csv_to_string.hpp"
99
#include "Csv/CsvWriter.hpp"
1010
#include <Eigen/Dense>
11-
#include <Truss/Element/CSTriangle.hpp>
11+
1212
#include <Truss/Solver.hpp>
1313
#include <TrussDocument/TrussDocument.hpp>
1414
#include <backward.hpp>
@@ -86,7 +86,9 @@ int main(int argc, char* argv[])
8686
basic_output_file << K << endl;
8787
basic_output_file << "{F} = " << endl;
8888
basic_output_file << F << endl;
89-
VectorXf D = K.colPivHouseholderQr().solve(F);
89+
// VectorXf D = K.colPivHouseholderQr().solve(F);
90+
// VectorXf D = K.fullPivLu().solve(F);
91+
VectorXf D = K.bdcSvd(ComputeThinU | ComputeThinV).solve(F);
9092
basic_output_file << "{D} = " << endl;
9193
basic_output_file << D << endl;
9294

@@ -124,6 +126,8 @@ int main(int argc, char* argv[])
124126
node_keys.segment(node_count, 8 - node_count).fill(-1);
125127
elements_csv_file << std::make_tuple(element->Key, element->GetElementName(), node_count, node_keys, stress);
126128
}
129+
130+
cout << "Done." << endl;
127131
}
128132
catch (const exception& exception)
129133
{

UnitTest/LibTrussSolver/test.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ TEST_CASE("Utils", "[Utils]")
279279
Eigen::Matrix<float, 4, 2> vertices;
280280
vertices << 0, 0, 5, -1, 4, 5, 1, 4;
281281
auto result1 = GaussianQuadrature2D(func, vertices, GaussianPoint2D::One);
282-
// requires all element of result1 is 20
282+
283283
for (float element: Eigen::Vector<float, 9>(result1.reshaped(9, 1)))
284284
{
285285
REQUIRE(element == Catch::Approx(20.0f));

0 commit comments

Comments
 (0)