VM2D  1.12
Vortex methods for 2D flows simulation
v3D.h
Go to the documentation of this file.
1 /*--------------------------------*- VMlib -*----------------*---------------*\
2 | ## ## ## ## ## ## ## | | Version 1.12 |
3 | ## ## ### ### ## ## | VMlib: VM2D/VM3D Library | 2024/01/14 |
4 | ## ## ## # ## ## ## #### | Open Source Code *----------------*
5 | #### ## ## ## ## ## ## | https://www.github.com/vortexmethods/VM2D |
6 | ## ## ## #### ### #### | https://www.github.com/vortexmethods/VM3D |
7 | |
8 | Copyright (C) 2017-2024 Ilia Marchevsky |
9 *-----------------------------------------------------------------------------*
10 | File name: v3D.h |
11 | Info: Source code of VMlib |
12 | |
13 | This file is part of VMlib. |
14 | VMLib is free software: you can redistribute it and/or modify it |
15 | under the terms of the GNU General Public License as published by |
16 | the Free Software Foundation, either version 3 of the License, or |
17 | (at your option) any later version. |
18 | |
19 | VMlib is distributed in the hope that it will be useful, but WITHOUT |
20 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
21 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22 | for more details. |
23 | |
24 | You should have received a copy of the GNU General Public License |
25 | along with VMlib. If not, see <http://www.gnu.org/licenses/>. |
26 \*---------------------------------------------------------------------------*/
27 
36 #ifndef V3D_H_
37 #define V3D_H_
38 
39 #include "numvector.h"
40 
41 namespace VMlib
42 {
43 
55  class v3D : public numvector<double, 3>
56  {
57  public:
58 
59 //#ifndef __CUDACC__
60 // /// MPI-описатель типа
61 // static MPI_Datatype mpiv3D;
62 //#endif
63 
65  v3D() { };
66 
70  v3D(const numvector<double, 3>& _r);
71 
75  v3D(const v3D& _r);
76 
77 #ifndef __CUDACC__
78  v3D(const std::initializer_list<double>& z);
83 #endif
84 
86  ~v3D() { };
87 
93  v3D rotated(const double angle, const v3D& axis) const;
94 
95 //#ifndef __CUDACC__
96 // /// Cоздание MPI-описателя типа
97 // static void CreateMpiType();
98 //#endif
99 
100  //operator numvector<double, 3>&()
101  //{
102  // return *this;
103  //}
104 
105  };
106 
107 
109  inline v3D operator*(double c, const v3D& x)
110  {
111  v3D res(x);
112  for (size_t i = 0; i < 3; ++i)
113  res[i] *= c;
114  return res;
115  }//operator*(...)
116 
117 
118  inline std::pair<v3D, v3D>& operator+=(std::pair<v3D, v3D>& a, const std::pair<v3D, v3D>& b)
119  {
120  a.first += b.first;
121  a.second += b.second;
122  return a;
123  }//operator+=(...)
124 
125  inline std::pair<v3D, v3D>& operator*=(std::pair<v3D, v3D>& a, double c)
126  {
127  a.first *= c;
128  a.second *= c;
129  return a;
130  }//operator+=(...)
131 
132  inline std::pair<v3D, v3D> operator*(std::pair<v3D, v3D>& a, double c)
133  {
134  return {a.first * c, a.second * c};
135  }//operator+=(...)
136 
137 }//namespace VMlib
138 
139 using VMlib::v3D;
140 
141 #endif
142 
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
Описание класса numvector.
auto operator*(const P c) const -> numvector< typename std::remove_const< decltype(this->data[0]*c)>::type, n >
Оператор "*" умножения вектора на число (вектор слева, число справа)
Definition: numvector.h:267
numvector< double, n > & operator+=(const numvector< P, n > &y)
Оператор "+=" прибавления другого вектора
Definition: numvector.h:204
Класс, опеделяющий двумерный вектор
Definition: v3D.h:55
~v3D()
Деструктор
Definition: v3D.h:86
v3D()
Пустой конструктор
Definition: v3D.h:65
v3D rotated(const double angle, const v3D &axis) const
Поворот вектора на произвольный угол против часовой стрелки (по умолчанию 90 градусов) ...
Definition: v3D.cpp:71
numvector< double, n > & operator*=(P c)
Оператор "*=" домножения вектора на действительное число
Definition: numvector.h:172