Line data Source code
1 : /*
2 : * Copyright (c) 2010-2015: G-CSC, Goethe University Frankfurt
3 : * Author: Andreas Vogel
4 : *
5 : * This file is part of UG4.
6 : *
7 : * UG4 is free software: you can redistribute it and/or modify it under the
8 : * terms of the GNU Lesser General Public License version 3 (as published by the
9 : * Free Software Foundation) with the following additional attribution
10 : * requirements (according to LGPL/GPL v3 §7):
11 : *
12 : * (1) The following notice must be displayed in the Appropriate Legal Notices
13 : * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14 : *
15 : * (2) The following notice must be displayed at a prominent place in the
16 : * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17 : *
18 : * (3) The following bibliography is recommended for citation and must be
19 : * preserved in all covered files:
20 : * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21 : * parallel geometric multigrid solver on hierarchically distributed grids.
22 : * Computing and visualization in science 16, 4 (2013), 151-164"
23 : * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24 : * flexible software system for simulating pde based models on high performance
25 : * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26 : *
27 : * This program is distributed in the hope that it will be useful,
28 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 : * GNU Lesser General Public License for more details.
31 : */
32 :
33 :
34 : #ifndef __H__UG__LIB_DISC__SPATIAL_DISC__ELEM_DISC__ELEM_DISC_INTERFACE_IMPL__
35 : #define __H__UG__LIB_DISC__SPATIAL_DISC__ELEM_DISC__ELEM_DISC_INTERFACE_IMPL__
36 :
37 : #include "elem_disc_interface.h"
38 : #include "common/util/string_util.h"
39 :
40 : namespace ug{
41 :
42 : ///////////////////////////////////////////////////////////////////////////////
43 : // setting of elem ass functions
44 : ///////////////////////////////////////////////////////////////////////////////
45 :
46 : template <typename TLeaf, typename TDomain>
47 : template<typename TAssFunc>
48 : void IElemAssembleFuncs<TLeaf, TDomain>::set_prep_timestep_fct(size_t algebra_id, TAssFunc func)
49 : {
50 : m_vPrepareTimestepFct[algebra_id] = static_cast<PrepareTimestepFct>(func);
51 : };
52 : template <typename TLeaf, typename TDomain>
53 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_prep_timestep_fct(size_t algebra_id)
54 : {
55 0 : m_vPrepareTimestepFct[algebra_id] = NULL;
56 0 : };
57 :
58 : template <typename TLeaf, typename TDomain>
59 : template<typename TAssFunc>
60 : void IElemAssembleFuncs<TLeaf, TDomain>::set_prep_timestep_elem_fct(ReferenceObjectID id, TAssFunc func)
61 : {
62 : m_vPrepareTimestepElemFct[id] = static_cast<PrepareTimestepElemFct>(func);
63 : };
64 : template <typename TLeaf, typename TDomain>
65 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_prep_timestep_elem_fct(ReferenceObjectID id)
66 : {
67 0 : m_vPrepareTimestepElemFct[id] = NULL;
68 0 : };
69 :
70 : template <typename TLeaf, typename TDomain>
71 : template<typename TAssFunc>
72 : void IElemAssembleFuncs<TLeaf, TDomain>::set_prep_elem_fct(ReferenceObjectID id, TAssFunc func)
73 : {
74 0 : m_vPrepareElemFct[id] = static_cast<PrepareElemFct>(func);
75 : };
76 : template <typename TLeaf, typename TDomain>
77 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_prep_elem_fct(ReferenceObjectID id)
78 : {
79 0 : m_vPrepareElemFct[id] = NULL;
80 0 : };
81 :
82 : template <typename TLeaf, typename TDomain>
83 : template<typename TAssFunc>
84 : void IElemAssembleFuncs<TLeaf, TDomain>::set_prep_elem_loop_fct(ReferenceObjectID id, TAssFunc func)
85 : {
86 0 : m_vPrepareElemLoopFct[id] = static_cast<PrepareElemLoopFct>(func);
87 : };
88 : template <typename TLeaf, typename TDomain>
89 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_prep_elem_loop_fct(ReferenceObjectID id)
90 : {
91 0 : m_vPrepareElemLoopFct[id] = NULL;
92 0 : };
93 :
94 : template <typename TLeaf, typename TDomain>
95 : template<typename TAssFunc>
96 : void IElemAssembleFuncs<TLeaf, TDomain>::set_fsh_elem_loop_fct(ReferenceObjectID id, TAssFunc func)
97 : {
98 0 : m_vFinishElemLoopFct[id] = static_cast<FinishElemLoopFct>(func);
99 : };
100 : template <typename TLeaf, typename TDomain>
101 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_fsh_elem_loop_fct(ReferenceObjectID id)
102 : {
103 0 : m_vFinishElemLoopFct[id] = NULL;
104 0 : };
105 :
106 : template <typename TLeaf, typename TDomain>
107 : template<typename TAssFunc>
108 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_jac_A_elem_fct(ReferenceObjectID id, TAssFunc func)
109 : {
110 0 : m_vElemJAFct[id] = static_cast<ElemJAFct>(func);
111 : };
112 : template <typename TLeaf, typename TDomain>
113 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_jac_A_elem_fct(ReferenceObjectID id)
114 : {
115 0 : m_vElemJAFct[id] = NULL;
116 0 : };
117 :
118 : template <typename TLeaf, typename TDomain>
119 : template<typename TAssFunc>
120 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_jac_M_elem_fct(ReferenceObjectID id, TAssFunc func)
121 : {
122 0 : m_vElemJMFct[id] = static_cast<ElemJMFct>(func);
123 : };
124 : template <typename TLeaf, typename TDomain>
125 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_jac_M_elem_fct(ReferenceObjectID id)
126 : {
127 0 : m_vElemJMFct[id] = NULL;
128 0 : };
129 :
130 : template <typename TLeaf, typename TDomain>
131 : template<typename TAssFunc>
132 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_def_A_elem_fct(ReferenceObjectID id, TAssFunc func)
133 : {
134 0 : m_vElemdAFct[id] = static_cast<ElemdAFct>(func);
135 : };
136 : template <typename TLeaf, typename TDomain>
137 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_def_A_elem_fct(ReferenceObjectID id)
138 : {
139 0 : m_vElemdAFct[id] = NULL;
140 0 : };
141 :
142 : template <typename TLeaf, typename TDomain>
143 : template<typename TAssFunc>
144 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_def_A_expl_elem_fct(ReferenceObjectID id, TAssFunc func)
145 : {
146 0 : m_vElemdAExplFct[id] = static_cast<ElemdAFct>(func);
147 : };
148 : template <typename TLeaf, typename TDomain>
149 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_def_A_expl_elem_fct(ReferenceObjectID id)
150 : {
151 0 : m_vElemdAExplFct[id] = NULL;
152 0 : };
153 :
154 : template <typename TLeaf, typename TDomain>
155 : template<typename TAssFunc>
156 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_def_M_elem_fct(ReferenceObjectID id, TAssFunc func)
157 : {
158 0 : m_vElemdMFct[id] = static_cast<ElemdMFct>(func);
159 : };
160 : template <typename TLeaf, typename TDomain>
161 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_def_M_elem_fct(ReferenceObjectID id)
162 : {
163 0 : m_vElemdMFct[id] = NULL;
164 0 : };
165 :
166 : template <typename TLeaf, typename TDomain>
167 : template<typename TAssFunc>
168 : void IElemAssembleFuncs<TLeaf, TDomain>::set_add_rhs_elem_fct(ReferenceObjectID id, TAssFunc func)
169 : {
170 0 : m_vElemRHSFct[id] = static_cast<ElemRHSFct>(func);
171 : };
172 : template <typename TLeaf, typename TDomain>
173 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_add_rhs_elem_fct(ReferenceObjectID id)
174 : {
175 0 : m_vElemRHSFct[id] = NULL;
176 0 : };
177 :
178 : template <typename TLeaf, typename TDomain>
179 : template<typename TAssFunc>
180 : void IElemAssembleFuncs<TLeaf, TDomain>::set_fsh_timestep_fct(size_t algebra_id, TAssFunc func)
181 : {
182 : m_vFinishTimestepFct[algebra_id] = static_cast<FinishTimestepFct>(func);
183 : };
184 : template <typename TLeaf, typename TDomain>
185 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_fsh_timestep_fct(size_t algebra_id)
186 : {
187 0 : m_vFinishTimestepFct[algebra_id] = NULL;
188 0 : };
189 :
190 : template <typename TLeaf, typename TDomain>
191 : template<typename TAssFunc>
192 : void IElemAssembleFuncs<TLeaf, TDomain>::set_fsh_timestep_elem_fct(ReferenceObjectID id, TAssFunc func)
193 : {
194 : m_vFinishTimestepElemFct[id] = static_cast<FinishTimestepElemFct>(func);
195 : };
196 : template <typename TLeaf, typename TDomain>
197 0 : void IElemAssembleFuncs<TLeaf, TDomain>::remove_fsh_timestep_elem_fct(ReferenceObjectID id)
198 : {
199 0 : m_vFinishTimestepElemFct[id] = NULL;
200 0 : };
201 :
202 : template <typename TLeaf, typename TDomain>
203 : template<typename TAssFunc>
204 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_prep_err_est_elem_loop(ReferenceObjectID id, TAssFunc func)
205 : {
206 0 : m_vPrepareErrEstElemLoopFct[id] = static_cast<PrepareErrEstElemLoopFct>(func);
207 : };
208 : template <typename TLeaf, typename TDomain>
209 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_prep_err_est_elem_loop(ReferenceObjectID id)
210 : {
211 0 : m_vPrepareErrEstElemLoopFct[id] = NULL;
212 0 : };
213 :
214 : template <typename TLeaf, typename TDomain>
215 : template<typename TAssFunc>
216 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_prep_err_est_elem(ReferenceObjectID id, TAssFunc func)
217 : {
218 0 : m_vPrepareErrEstElemFct[id] = static_cast<PrepareErrEstElemFct>(func);
219 : };
220 : template <typename TLeaf, typename TDomain>
221 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_prep_err_est_elem(ReferenceObjectID id)
222 : {
223 0 : m_vPrepareErrEstElemFct[id] = NULL;
224 0 : };
225 :
226 : template <typename TLeaf, typename TDomain>
227 : template<typename TAssFunc>
228 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_compute_err_est_A_elem(ReferenceObjectID id, TAssFunc func)
229 : {
230 0 : m_vElemComputeErrEstAFct[id] = static_cast<ElemComputeErrEstAFct>(func);
231 : };
232 : template <typename TLeaf, typename TDomain>
233 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_compute_err_est_A_elem(ReferenceObjectID id)
234 : {
235 0 : m_vElemComputeErrEstAFct[id] = NULL;
236 0 : };
237 :
238 : template <typename TLeaf, typename TDomain>
239 : template<typename TAssFunc>
240 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_compute_err_est_M_elem(ReferenceObjectID id, TAssFunc func)
241 : {
242 0 : m_vElemComputeErrEstMFct[id] = static_cast<ElemComputeErrEstMFct>(func);
243 : };
244 : template <typename TLeaf, typename TDomain>
245 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_compute_err_est_M_elem(ReferenceObjectID id)
246 : {
247 0 : m_vElemComputeErrEstMFct[id] = NULL;
248 0 : };
249 :
250 : template <typename TLeaf, typename TDomain>
251 : template<typename TAssFunc>
252 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_compute_err_est_rhs_elem(ReferenceObjectID id, TAssFunc func)
253 : {
254 0 : m_vElemComputeErrEstRhsFct[id] = static_cast<ElemComputeErrEstRhsFct>(func);
255 : };
256 : template <typename TLeaf, typename TDomain>
257 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_compute_err_est_rhs_elem(ReferenceObjectID id)
258 : {
259 0 : m_vElemComputeErrEstRhsFct[id] = NULL;
260 0 : };
261 :
262 : template <typename TLeaf, typename TDomain>
263 : template<typename TAssFunc>
264 : void IElemEstimatorFuncs<TLeaf, TDomain>::set_fsh_err_est_elem_loop(ReferenceObjectID id, TAssFunc func)
265 : {
266 0 : m_vFinishErrEstElemLoopFct[id] = static_cast<FinishErrEstElemLoopFct>(func);
267 : };
268 : template <typename TLeaf, typename TDomain>
269 0 : void IElemEstimatorFuncs<TLeaf, TDomain>::remove_fsh_err_est_elem_loop(ReferenceObjectID id)
270 : {
271 0 : m_vFinishErrEstElemLoopFct[id] = NULL;
272 0 : };
273 :
274 : }
275 :
276 : #endif /* __H__UG__LIB_DISC__SPATIAL_DISC__ELEM_DISC__ELEM_DISC_INTERFACE_IMPL__ */
|