-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvm2ug.h
163 lines (146 loc) · 4.85 KB
/
vm2ug.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/*
* Copyright (c) 2009-2019: G-CSC, Goethe University Frankfurt
*
* Author: Stephan Grein
* Creation date: 2015-06-19
*
* This file is part of NeuroBox, which is based on UG4.
*
* NeuroBox and UG4 are free software: You can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* (as published by the Free Software Foundation) with the following additional
* attribution requirements (according to LGPL/GPL v3 §7):
*
* (1) The following notice must be displayed in the appropriate legal notices
* of covered and combined works: "Based on UG4 (www.ug4.org/license)".
*
* (2) The following notice must be displayed at a prominent place in the
* terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
*
* (3) The following bibliography is recommended for citation and must be
* preserved in all covered files:
* "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
* parallel geometric multigrid solver on hierarchically distributed grids.
* Computing and visualization in science 16, 4 (2013), 151-164"
* "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
* flexible software system for simulating PDE based models on high performance
* computers. Computing and visualization in science 16, 4 (2013), 165-179"
* "Stepniewski, M., Breit, M., Hoffer, M. and Queisser, G.
* NeuroBox: computational mathematics in multiscale neuroscience.
* Computing and visualization in science (2019).
* "Breit, M. et al. Anatomically detailed and large-scale simulations studying
* synapse loss and synchrony using NeuroBox. Front. Neuroanat. 10 (2016), 8"
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*/
#ifndef UG__PLUGINS__MEMBRANE_POTENTIAL_MAPPING__VM2UG_H
#define UG__PLUGINS__MEMBRANE_POTENTIAL_MAPPING__VM2UG_H
#include <cstddef>
#include <vector>
#include <utility>
#include "common/types.h" // for number
#include "common/math/math_vector_matrix/math_vector.h" // for MathVector
#include "kdtree/kd_tree.h" // for kdtree
/*! \defgroup mpm_plugin Membrane Potential Mapping plugin
* \ingroup plugins_experimental
* \{
*/
namespace ug {
namespace membrane_potential_mapping {
template <size_t dim, typename M> class Mapper {
private:
//// non-static members
kd_tree<dim, M> m_kdtree;
size_t m_delimIndex;
/// common typedefs
typedef typename std::vector<std::pair<MathVector<dim, number>, M> >::const_iterator CITVPMNM;
typedef typename std::vector<std::pair<std::vector<number>, M> >::const_iterator CITVPVNM;
public:
/*!
* \brief ctor
*/
Mapper()
: m_kdtree(kd_tree<dim, M>()),
m_delimIndex(0) { }
/*!
* \brief build an empty tree
*/
void build_tree();
/*!
* \brief build populated tree from given vector of pairs
* \param[in] points to be used for the tree construction
*/
void build_tree
(
const std::vector<std::pair<MathVector<dim, number>, M> >& points
);
/*!
* \brief build populated tree from given file
* \param[in] filename where the points are stored (with meta data)
* \param[in] delimiter in the file to separate values
*/
void build_tree
(
const std::string& filename
);
/*!
* \brief build populated tree from given vector of pairs
* \param[in] points to be used for the tree construction
*/
void build_tree
(
const std::vector<std::pair<std::vector<number>, M> >& points
);
/*!
* \brief add a single node
* \param[in] node a single point with meta data
*/
void add_node
(
const std::pair<MathVector<dim, number>, M>& node
);
/*!
* \brief add a single node
* \param[in] node a single point with meta data
*/
void add_node
(
const std::pair<std::vector<number>, M>& node
);
/*!
* \brief add a single node with a value
* \param[in] node a single point with meta data
* \param[in] value the meta data
*/
inline void add_node
(
const std::vector<number>&,
const M& value
);
/*!
* \brief query the tree for the data of the very nearest neighbor
* \param[in] query coordinates of a given point
* \return \c data
*/
M get_data_from_nearest_neighbor
(
const MathVector<dim, number>& query
) const;
/*!
* \brief query the tree for the data of the very nearest neighbor
* \param[in] query coordinates of a given point
* \return \c data
*/
M get_data_from_nearest_neighbor
(
const std::vector<number>& query
) const;
};
} // end namespace mpm
} // end namespace ug
//<! \}
#include "vm2ug_impl.h"
#endif // UG__PLUGINS__MEMBRANE_POTENTIAL_MAPPING__VM2UG_H