FiberVISH 0.2
Fish - The Fiber Bundle API for the Vish Visualization Shell
UniformCartesianArray.hpp
1#ifndef __FIBER__UNIFORMCARTESIANARRAY_HPP
2#define __FIBER__UNIFORMCARTESIANARRAY_HPP
3
4#ifndef DONT_USE_PRAGMA_ONCE
5#pragma once
6#endif
7
8#include "DirectProductArray.hpp"
9#include <eagle/PhysicalSpace.hpp>
10#include <aerie/BoundingBox.hpp>
11
12namespace Fiber
13{
14
15//extern template class FIELD_API LinearDirectProductMemArray<Eagle::point3, Eagle::tvector3>;
16//extern template class LinearDirectProductMemArray<Eagle::point3, Eagle::tvector3>;
17
21class FIELD_API UniformCartesianArray : public LinearDirectProductMemArray<Eagle::point3, Eagle::tvector3>
22{
23
24static Eagle::point3 DeltaPoint(const Eagle::tvector3&what, const MultiIndex<3>&divisor)
25 {
26 Eagle::point3 retval;
27 for(int i=0; i<3; i++)
28 {
29 if (divisor[i]<2)
30 {
31//
32// exceptions are not good in constructors.
33// better use this as default.
34// if (divisor[i]<1)
35// throw Exception( i, divisor[i]);
36
37 retval[i] = what[i];
38 }
39 else
40 retval[i] = what[i] / (divisor[i]-1);
41 }
42 return retval;
43 }
44
45public:
46
47static Eagle::tvector3 idiv(const Eagle::tvector3&what, const MultiIndex<3>&divisor)
48 {
49 Eagle::tvector3 retval;
50 for(int i=0; i<3; i++)
51 {
52 if (divisor[i]<2)
53 {
54 retval[i] = what[i];
55 }
56 else
57 retval[i] = what[i] / (divisor[i]-1);
58 }
59 return retval;
60 }
61
62public:
63
65
71 UniformCartesianArray(const Eagle::point3&start, const MultiIndex<3>&dims,
72 const Eagle::point3&end,
74
82
83
89 UniformCartesianArray(const MultiIndex<3>&dims, const Eagle::point3&start,
90 const Eagle::tvector3&delta, const MemBase::Creator_t&C = MemCore::NullPtr() );
91
92
94 : MemBase(FiberType<Eagle::point3>::getFiberType()->getFiberTypeIndex(), C)
96 {}
97
98 RefPtr<MemBase> copy(const MemBase::Creator_t&C = nullptr) const override
99 {
100 return new UniformCartesianArray(*this, C);
101 }
102
108 RefPtr<Eagle::BoundingBox> getBoundingBox() const;
109
114 Eagle::tvector3 cell_diagonal() const
115 {
116 return Delta();
117 }
118
119protected:
122};
123
124
128typedef DirectProductMemArray<Eagle::point3, ExplicitCoordinateAxisArray> RectilinearCartesianArray;
129
130
131} // namespace Fiber
132
133#endif // __FIBER__UNIFORMCARTESIANARRAY_HPP
constexpr auto end(_Container &__cont) -> decltype(__cont.end())
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
Description of types, which is meta-information like what is the number of elements of some array-lik...
Definition FiberType.hpp:61
Convenience class - a Direct Product array which uses linear expressions for each index dimension.
Definition DirectProductArray.hpp:552
Base class for multidimensional arrays with MemCore memory management.
Definition MemBase.hpp:70
Convenience class for procedural linear arrays in cartesian coordinates.
Definition UniformCartesianArray.hpp:22
Eagle::tvector3 cell_diagonal() const
Return the "size" of a cell as a tangential vector that crosses the diagonal corners of a cell.
Definition UniformCartesianArray.hpp:114
RefPtr< MemBase > copy(const MemBase::Creator_t &C=nullptr) const override
Create a copy of the current array, duplicating all data and allocating new memory for it.
Definition UniformCartesianArray.hpp:98
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2
DirectProductMemArray< Eagle::point3, ExplicitCoordinateAxisArray > RectilinearCartesianArray
Rectilinear coordinates.
Definition DirectProductArrayTypes.hpp:34
std::nullptr_t NullPtr