suanPan
🧮 An Open Source, Parallel and Heterogeneous Finite Element Analysis Framework
Loading...
Searching...
No Matches
Orientation.h
Go to the documentation of this file.
1/*******************************************************************************
2 * Copyright (C) 2017-2026 Theodore Chang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 ******************************************************************************/
33#ifndef ORIENTATION_H
34#define ORIENTATION_H
35
36#include <Domain/Tag.h>
37
38class Element;
39
40class Orientation : public CopyableTag {
41protected:
42 const Element* element_ptr = nullptr;
43
44 vec z_axis;
45
46 double length = 0., inclination = 0.;
47
49
50 void check_element_ptr() const;
51
52 virtual void update_transformation() = 0;
53
54public:
55 enum class Type {
56 T2D,
57 T3D,
58 B2D,
59 B3D,
60 B3DOS
61 };
62
63 explicit Orientation(unsigned = 0, vec&& = {});
64
65 void update_axis(const vec&);
66
67 virtual void set_element_ptr(const Element*);
68
69 [[nodiscard]] virtual bool is_nlgeom() const;
70
71 [[nodiscard]] virtual Type type() const = 0;
72
73 [[nodiscard]] double get_length() const;
74 [[nodiscard]] double get_inclination() const;
75 [[nodiscard]] const mat& get_transformation() const;
76
77 virtual unique_ptr<Orientation> unique_copy() = 0;
78
79 virtual void update_status();
80 virtual void commit_status();
81 virtual void reset_status();
82 virtual void clear_status();
83
84 [[nodiscard]] virtual vec to_local_vec(double) const;
85 [[nodiscard]] virtual vec to_global_vec(double) const;
86 [[nodiscard]] virtual mat to_global_mass_mat(double) const;
87 [[nodiscard]] virtual mat to_global_geometry_mat(double) const;
88 [[nodiscard]] virtual mat to_global_stiffness_mat(double) const;
89
90 [[nodiscard]] virtual vec to_local_vec(vec&&) const;
91 [[nodiscard]] virtual vec to_global_vec(vec&&) const;
92 [[nodiscard]] virtual mat to_global_mass_mat(mat&&) const;
93 [[nodiscard]] virtual mat to_global_geometry_mat(mat&&) const;
94 [[nodiscard]] virtual mat to_global_stiffness_mat(mat&&) const;
95
102 [[nodiscard]] virtual vec to_local_vec(const vec&) const = 0;
109 [[nodiscard]] virtual vec to_global_vec(const vec&) const = 0;
115 [[nodiscard]] virtual mat to_global_mass_mat(const mat&) const;
116 [[nodiscard]] virtual mat to_global_geometry_mat(const mat&) const;
117 [[nodiscard]] virtual mat to_global_stiffness_mat(const mat&) const = 0;
118};
119
120#endif
121
Label objects that can be copied.
Definition Tag.h:73
A Element class.
Definition Element.h:118
A Orientation class.
Definition Orientation.h:40
virtual void update_status()
Definition Orientation.cpp:47
virtual bool is_nlgeom() const
Definition Orientation.cpp:39
virtual mat to_global_mass_mat(double) const
Definition Orientation.cpp:62
vec z_axis
Definition Orientation.h:44
virtual void update_transformation()=0
virtual vec to_global_vec(double) const
Definition Orientation.cpp:60
virtual vec to_local_vec(const vec &) const =0
transform anything from global to local system e.g., disp -> disp, vel -> vel, acc -> acc,...
virtual mat to_global_geometry_mat(double) const
Definition Orientation.cpp:64
double get_length() const
Definition Orientation.cpp:41
virtual mat to_global_stiffness_mat(const mat &) const =0
virtual vec to_global_vec(const vec &) const =0
transform anything from local to global system e.g., disp -> disp, vel -> vel, acc -> acc,...
mat direction_cosine
Definition Orientation.h:48
void update_axis(const vec &)
Definition Orientation.cpp:30
void check_element_ptr() const
Definition Orientation.cpp:22
double length
Definition Orientation.h:46
virtual void reset_status()
Definition Orientation.cpp:54
virtual void set_element_ptr(const Element *)
Definition Orientation.cpp:34
const mat & get_transformation() const
Definition Orientation.cpp:45
virtual vec to_local_vec(double) const
Definition Orientation.cpp:58
double inclination
Definition Orientation.h:46
virtual unique_ptr< Orientation > unique_copy()=0
double get_inclination() const
Definition Orientation.cpp:43
virtual mat to_global_stiffness_mat(double) const
Definition Orientation.cpp:66
virtual Type type() const =0
virtual void clear_status()
Definition Orientation.cpp:56
virtual void commit_status()
Definition Orientation.cpp:52
const Element * element_ptr
Definition Orientation.h:42
Type
Definition Orientation.h:55