ug4
Loading...
Searching...
No Matches
user_data.h
Go to the documentation of this file.
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#ifndef __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__USER_DATA__
34#define __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__USER_DATA__
35
36#include <vector>
37#include <cstring>
38#include <functional>
39
40#include "common/types.h"
44
45namespace ug{
46
48// UserData Info
50
53 public:
55 virtual int get_dim() const = 0;
56
58 virtual std::string type() const = 0;
59
61 virtual bool continuous() const = 0;
62
64 virtual ~UserDataInfo() {}
65
66 public:
68 virtual bool requires_grid_fct() const = 0;
69
74
76 const FunctionGroup& function_group() const {return m_fctGrp;}
77
79 const FunctionIndexMapping& map() const{return m_map;}
80
82 size_t num_fct() const {return m_map.num_fct();}
83
85
88 void set_obj_name(const char * name)
89 {
90 if (name == NULL) {m_objName = SPNULL; return;}
91 if (m_objName.valid ()) // we assume that the name is assigned once; otherwise we warn
92 UG_LOG ("Warning: Replacing existing UserData object name '" << m_objName.get() << "' with '" << name << "'.\n");
93 const size_t name_len = strnlen (name, 128);
94 SmartPtr<char> new_name (new char [name_len+1]);
95 memcpy (new_name.get(), name, name_len); (new_name.get()) [name_len] = '\0';
96 m_objName = new_name;
97 }
98
100
103 const char * obj_name () {return m_objName.get ();}
104
105 protected:
108
111
114};
115
117// UserData
119
120// Traits
121template <typename TData>
122struct user_data_traits{static std::string name() {return "(unknown)";}};
123template <>
124struct user_data_traits<number>{static std::string name() {return "Number";}};
125template <std::size_t dim>
126struct user_data_traits< MathVector<dim> >{static std::string name() {return "Vector";}};
127template <std::size_t dim>
128struct user_data_traits< MathMatrix<dim,dim> >{static std::string name() {return "Matrix";}};
129template <std::size_t dim>
130struct user_data_traits< MathTensor<4,dim> >{static std::string name() {return "Tensor4";}};
131
133
142template <typename TData, int dim, typename TRet = void>
143class UserData : virtual public UserDataInfo
144{
145 public:
146 typedef TData data_type;
147 typedef TRet return_type;
148
150 int get_dim() const {return dim;}
151
153 std::string type() const {return user_data_traits<TData>::name();}
154
156 virtual bool continuous() const = 0;
157
159 virtual bool requires_grid_fct() const = 0;
160
161 public:
163 virtual TRet operator() (TData& value,
164 const MathVector<dim>& globIP,
165 number time, int si) const = 0;
166
168 virtual void operator()(TData vValue[],
169 const MathVector<dim> vGlobIP[],
170 number time, int si, const size_t nip) const = 0;
171
173 virtual void operator() (TData& value,
174 const MathVector<dim>& globIP,
175 number time, int si,
176 Vertex* vrt) const
177 {
178 // The standard version uses only the coordinates. But it can be redefined.
179 operator()(value, globIP, time, si);
180 }
181
184 TRet operator() (TData& value,
185 const MathVector<dim>& globIP,
186 number time, int si,
187 GridObject* elem,
188 const MathVector<dim> vCornerCoords[],
189 const MathVector<1>& locIP,
190 LocalVector* u) const {
191 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
192 }
193
194 TRet operator() (TData& value,
195 const MathVector<dim>& globIP,
196 number time, int si,
197 GridObject* elem,
198 const MathVector<dim> vCornerCoords[],
199 const MathVector<2>& locIP,
200 LocalVector* u) const {
201 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
202 }
203
204 TRet operator() (TData& value,
205 const MathVector<dim>& globIP,
206 number time, int si,
207 GridObject* elem,
208 const MathVector<dim> vCornerCoords[],
209 const MathVector<3>& locIP,
210 LocalVector* u) const {
211 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
212 }
214
217 virtual void operator()(TData vValue[],
218 const MathVector<dim> vGlobIP[],
219 number time, int si,
220 GridObject* elem,
221 const MathVector<dim> vCornerCoords[],
222 const MathVector<1> vLocIP[],
223 const size_t nip,
224 LocalVector* u,
225 const MathMatrix<1, dim>* vJT = NULL) const = 0;
226
227 virtual void operator()(TData vValue[],
228 const MathVector<dim> vGlobIP[],
229 number time, int si,
230 GridObject* elem,
231 const MathVector<dim> vCornerCoords[],
232 const MathVector<2> vLocIP[],
233 const size_t nip,
234 LocalVector* u,
235 const MathMatrix<2, dim>* vJT = NULL) const = 0;
236
237 virtual void operator()(TData vValue[],
238 const MathVector<dim> vGlobIP[],
239 number time, int si,
240 GridObject* elem,
241 const MathVector<dim> vCornerCoords[],
242 const MathVector<3> vLocIP[],
243 const size_t nip,
244 LocalVector* u,
245 const MathMatrix<3, dim>* vJT = NULL) const = 0;
247};
249// UserData Interface
251
253
259template <int dim>
260class ICplUserData : virtual public UserDataInfo
261{
262 public:
264 ICplUserData();
265
267 void clear();
268
269 public:
271 void set_subset(int si) {m_si = si;}
272
274 int subset() const {return m_si;}
275
277 void set_times(const std::vector<number>& vTime) {m_vTime = vTime;}
278
280 void set_time_point(size_t timePoint) {m_timePoint = timePoint;}
281
283 size_t time_point() {return m_timePoint;}
284
286 number time() const {return m_vTime[m_timePoint];}
287
288 public:
290 virtual bool constant() const {return false;}
291
293 virtual size_t num_needed_data() const {return 0;}
294
296 virtual SmartPtr<ICplUserData> needed_data(size_t i) {return SPNULL;}
297
299 virtual void compute(LocalVector* u,
300 GridObject* elem,
301 const MathVector<dim> vCornerCoords[],
302 bool bDeriv = false) = 0;
303
306 GridObject* elem,
307 const MathVector<dim> vCornerCoords[],
308 bool bDeriv = false) = 0;
309
311 virtual void check_setup() const {}
312
314 virtual ~ICplUserData() {};
315
316 public:
318 virtual bool zero_derivative() const {return true;}
319
321 virtual void update_dof_sizes(const LocalIndices& ind) {}
322
323 public:
325 size_t num_series() const {return m_vNumIP.size();}
326
328 size_t num_ip(size_t s) const {UG_ASSERT(s < num_series(), "Invalid series"); return m_vNumIP[s];}
329
331
339 template <int ldim>
341 const size_t numIP,
342 const int timePointSpec,
343 bool bMayChange = true);
344
346 template <int ldim>
348 const size_t numIP,
349 bool bMayChange = true)
350 {
351 return this->template register_local_ip_series<ldim> (vPos, numIP, -1, bMayChange);
352 };
353
355
360 template <int ldim>
361 void set_local_ips(const size_t seriesId, const MathVector<ldim>* vPos,
362 const size_t numIP);
363
365
370 void set_time_point(const size_t seriesId, const int timePointSpec);
371
373 int dim_local_ips() const {return m_locPosDim;}
374
376 template <int ldim>
377 const MathVector<ldim>* local_ips(size_t s) const;
378
380 template <int ldim>
381 const MathVector<ldim>& local_ip(size_t s, size_t ip) const;
382
384 inline int time_point_specification(size_t s) const;
385
387 inline size_t time_point(size_t s) const;
388
390 number time(size_t s) const {return m_vTime[time_point(s)];}
391
393 inline bool at_current_time(size_t s) const;
394
396 void set_global_ips(size_t s, const MathVector<dim>* vPos, size_t numIP);
397
399 const MathVector<dim>* ips(size_t s) const {check_s(s); return m_vvGlobPos[s];}
400
402 const MathVector<dim>& ip(size_t s, size_t ip) const{check_s_ip(s,ip); return m_vvGlobPos[s][ip];}
403
404 protected:
406
418 virtual void local_ip_series_added(const size_t seriesID){m_vvGlobPos.resize(seriesID+1);}
419
421 virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP) = 0;
422
425
427
432 virtual void global_ips_changed(const size_t seriesID, const MathVector<dim>* vPos, const size_t numIP) {};
433
435 inline void check_s(size_t s) const;
436
438 inline void check_s_ip(size_t s, size_t ip) const;
439
440 protected:
442 std::vector<const MathVector<1>*>& get_local_ips(Int2Type<1>) {return m_pvLocIP1d;}
443 std::vector<const MathVector<2>*>& get_local_ips(Int2Type<2>) {return m_pvLocIP2d;}
444 std::vector<const MathVector<3>*>& get_local_ips(Int2Type<3>) {return m_pvLocIP3d;}
445 const std::vector<const MathVector<1>*>& get_local_ips(Int2Type<1>) const {return m_pvLocIP1d;}
446 const std::vector<const MathVector<2>*>& get_local_ips(Int2Type<2>) const {return m_pvLocIP2d;}
447 const std::vector<const MathVector<3>*>& get_local_ips(Int2Type<3>) const {return m_pvLocIP3d;}
448
449 protected:
451 std::vector<bool> m_vMayChange;
452
454 std::vector<size_t> m_vNumIP;
455
458
460 std::vector<const MathVector<1>*> m_pvLocIP1d;
461 std::vector<const MathVector<2>*> m_pvLocIP2d;
462 std::vector<const MathVector<3>*> m_pvLocIP3d;
463
465 std::vector<int> m_vTimePoint;
466
468 std::vector<const MathVector<dim>*> m_vvGlobPos;
469
471 std::vector<number> m_vTime;
472
475
478
480 int m_si;
481};
482
484// UserData
486
487// predeclaration
488template <typename TData, int dim> class DataImport;
489
491
500template <typename TData, int dim, typename TRet = void>
501class CplUserData : public ICplUserData<dim>, public UserData<TData,dim,TRet>
502{
503 public:
506
510
511 public:
513 const TData& value(size_t s, size_t ip) const
514 {check_series_ip(s,ip); return m_vvValue[s][ip];}
515
517 const TData* values(size_t s) const
518 {
520 if(m_vvValue[s].empty())
521 return NULL;
522 return &(m_vvValue[s][0]);
523 }
524
526 TData& value(size_t s, size_t ip)
527 {check_series_ip(s,ip);return m_vvValue[s][ip];}
528
530 TData* values(size_t s)
531 {
533 if(m_vvValue[s].empty())
534 return NULL;
535 return &(m_vvValue[s][0]);
536 }
537
539 bool defined(size_t s, size_t ip) const
540 {check_series_ip(s,ip); return m_vvBoolFlag[s][ip];}
541
544
547
550
551 protected:
553 inline void check_series(size_t s) const;
554
556 inline void check_series_ip(size_t s, size_t ip) const;
557
559 virtual void local_ip_series_added(const size_t seriesID);
560
562 virtual void local_ip_series_to_be_cleared();
563
565 virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP);
566
568 virtual void value_storage_changed(const size_t seriesID) {}
569
571 void call_storage_callback() const;
572
573 private:
575 std::vector<std::vector<TData> > m_vvValue;
576
578 std::vector<std::vector<bool> > m_vvBoolFlag;
579
581// typedef void (DataImport<TData,dim>::*CallbackFct)();
582 typedef std::function<void ()> CallbackFct;
583 std::vector<std::pair<DataImport<TData,dim>*, CallbackFct> > m_vCallback;
584
585};
586
588// Dependent UserData
590
592
596template <typename TData, int dim>
597class DependentUserData : public CplUserData<TData, dim>
598{
599 public:
602
603 // explicitly forward methods of ICplUserData
607
608 public:
611
614 DependentUserData(const char* symbFct) {set_functions(symbFct);}
615 DependentUserData(const std::string& symbFct) {set_functions(symbFct);}
616 DependentUserData(const std::vector<std::string>& symbFct) {set_functions(symbFct);}
618
619 public:
621 size_t num_sh(size_t fct) const
622 {
623 UG_ASSERT(fct < m_vvNumDoFPerFct.size(), "Wrong index");
624 return m_vvNumDoFPerFct[fct];
625 }
626
628 const TData& deriv(size_t s, size_t ip, size_t fct, size_t dof) const
629 {check_s_ip_fct_dof(s,ip,fct,dof);return m_vvvvDeriv[s][ip][fct][dof];}
630
632 TData& deriv(size_t s, size_t ip, size_t fct, size_t dof)
633 {check_s_ip_fct_dof(s,ip,fct,dof);return m_vvvvDeriv[s][ip][fct][dof];}
634
636 TData* deriv(size_t s, size_t ip, size_t fct)
637 {check_s_ip_fct(s,ip,fct);return &(m_vvvvDeriv[s][ip][fct][0]);}
638
640 const TData* deriv(size_t s, size_t ip, size_t fct) const
641 {check_s_ip_fct(s,ip,fct);return &(m_vvvvDeriv[s][ip][fct][0]);}
642
644 static void set_zero(std::vector<std::vector<TData> > vvvDeriv[], const size_t nip);
645
646 public:
648 virtual bool zero_derivative() const {return false;}
649
651 virtual bool requires_grid_fct() const {return true;}
652
654 virtual void update_dof_sizes(const LocalIndices& ind);
655
658
661 void set_functions(const char* symbFct);
662 void set_functions(const std::string& symbFct);
663 void set_functions(const std::vector<std::string>& symbFct);
665
666 protected:
668 void extract_fct_grp();
669
670 protected:
672 std::vector<std::string> m_SymbFct;
673
674 protected:
676 inline void check_s_ip(size_t s, size_t ip) const;
677
679 inline void check_s_ip_fct(size_t s, size_t ip, size_t fct) const;
680
682 inline void check_s_ip_fct_dof(size_t s, size_t ip, size_t fct, size_t dof) const;
683
685 virtual void local_ip_series_added(const size_t seriesID);
686
688 virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP);
689
691 virtual void local_ip_series_to_be_cleared();
692
694 void resize_deriv_array();
695
697 void resize_deriv_array(const size_t seriesID);
698
699 protected:
701 std::vector<size_t> m_vvNumDoFPerFct;
702
703 // Data (size: (0,...,num_series-1) x (0,...,num_ip-1) x (0,...,num_fct-1) x (0,...,num_sh(fct) )
705 std::vector<std::vector<std::vector<std::vector<TData> > > > m_vvvvDeriv;
706};
707
708} // end namespace ug
709
710//include implementation
711#include "user_data_impl.h"
712
713#endif /* __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__USER_DATA__ */
parameterString s
location name
Definition checkpoint_util.lua:128
Definition smart_pointer.h:296
Definition smart_pointer.h:107
T * get()
returns encapsulated pointer
Definition smart_pointer.h:197
bool valid() const
returns true if the pointer is valid, false if not.
Definition smart_pointer.h:206
Type based UserData.
Definition user_data.h:502
void check_series(size_t s) const
checks in debug mode the correct index
Definition user_data_impl.h:308
TData * values(size_t s)
returns all values for a series
Definition user_data.h:530
void register_storage_callback(DataImport< TData, dim > *obj, void(DataImport< TData, dim >::*func)())
register external callback, invoked when data storage changed
Definition user_data_impl.h:273
std::vector< std::vector< bool > > m_vvBoolFlag
bool flag at ip (size: (0,...num_series-1) x (0,...,num_ip-1))
Definition user_data.h:578
ICplUserData< dim > base_type
type of base class
Definition user_data.h:505
std::vector< std::pair< DataImport< TData, dim > *, CallbackFct > > m_vCallback
Definition user_data.h:583
void call_storage_callback() const
calls are registered external storage callbacks
Definition user_data_impl.h:296
void check_series_ip(size_t s, size_t ip) const
checks in debug mode the correct index
Definition user_data_impl.h:315
virtual void local_ip_series_added(const size_t seriesID)
resizes the data field, when local ip changed signaled
Definition user_data_impl.h:323
std::vector< std::vector< TData > > m_vvValue
data at ip (size: (0,...num_series-1) x (0,...,num_ip-1))
Definition user_data.h:575
TData & value(size_t s, size_t ip)
returns the value at ip
Definition user_data.h:526
virtual void local_ip_series_to_be_cleared()
free the data field memory and set series to zero
Definition user_data_impl.h:349
const TData * values(size_t s) const
returns all values for a series
Definition user_data.h:517
const TData & value(size_t s, size_t ip) const
returns the value at ip
Definition user_data.h:513
bool defined(size_t s, size_t ip) const
returns flag, if data is evaluated (for conditional data)
Definition user_data.h:539
std::function< void()> CallbackFct
registered callbacks
Definition user_data.h:582
void unregister_storage_callback(DataImport< TData, dim > *obj)
register all callbacks registered by class
Definition user_data_impl.h:282
size_t num_ip(size_t s) const
returns the number of integration points
Definition user_data.h:328
virtual void value_storage_changed(const size_t seriesID)
callback, invoked when storage of data has changed for a series
Definition user_data.h:568
~CplUserData()
destructor
Definition user_data.h:543
size_t num_series() const
explicitly forward some functions
Definition user_data.h:325
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)
implement callback, called when local IPs changed
Definition user_data_impl.h:361
Data import.
Definition data_import.h:180
Dependent UserData.
Definition user_data.h:598
std::vector< std::vector< std::vector< std::vector< TData > > > > m_vvvvDeriv
Derivatives.
Definition user_data.h:705
TData * deriv(size_t s, size_t ip, size_t fct)
returns the derivatives of the local function, at ip
Definition user_data.h:636
void resize_deriv_array()
resizes the derivative arrays for current number of ips.
Definition user_data_impl.h:466
std::vector< std::string > m_SymbFct
string of symbolic functions required
Definition user_data.h:672
std::vector< size_t > m_vvNumDoFPerFct
number of functions and their dofs
Definition user_data.h:701
TData & deriv(size_t s, size_t ip, size_t fct, size_t dof)
returns the derivative of the local function, at ip and for a dof
Definition user_data.h:632
virtual bool zero_derivative() const
returns that data depends on solution
Definition user_data.h:648
DependentUserData(const std::string &symbFct)
Definition user_data.h:615
virtual void local_ip_series_to_be_cleared()
implement callback, invoked when local ips are cleared
Definition user_data_impl.h:535
const TData * deriv(size_t s, size_t ip, size_t fct) const
returns the derivatives of the local function, at ip
Definition user_data.h:640
void extract_fct_grp()
extracts the function group
Definition user_data_impl.h:410
virtual void local_ip_series_added(const size_t seriesID)
resizes the derivative field when local ip change is signaled
Definition user_data_impl.h:525
const TData & deriv(size_t s, size_t ip, size_t fct, size_t dof) const
returns the derivative of the local function, at ip and for a dof
Definition user_data.h:628
void check_s_ip_fct(size_t s, size_t ip, size_t fct) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:511
static void set_zero(std::vector< std::vector< TData > > vvvDeriv[], const size_t nip)
sets all derivative values to zero
Definition user_data_impl.h:491
DependentUserData(const std::vector< std::string > &symbFct)
Definition user_data.h:616
size_t num_sh(size_t fct) const
number of shapes for local function
Definition user_data.h:621
DependentUserData()
default constructor
Definition user_data.h:610
DependentUserData(const char *symbFct)
Definition user_data.h:614
CplUserData< TData, dim > base_type
Base class type.
Definition user_data.h:601
virtual void set_function_pattern(ConstSmartPtr< FunctionPattern > fctPatt)
sets the associated function pattern
Definition user_data_impl.h:384
virtual void update_dof_sizes(const LocalIndices &ind)
resize lin defect arrays
Definition user_data_impl.h:451
void check_s_ip_fct_dof(size_t s, size_t ip, size_t fct, size_t dof) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:518
void check_s_ip(size_t s, size_t ip) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:502
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)
implement callback, called when local IPs changed
Definition user_data_impl.h:545
void set_functions(const char *symbFct)
Definition user_data_impl.h:391
virtual bool requires_grid_fct() const
returns if grid function is needed for evaluation
Definition user_data.h:651
Definition function_group.h:52
void set_function_pattern(ConstSmartPtr< FunctionPattern > spFuncPattern)
set underlying function pattern
Definition function_group.cpp:72
describes a mapping between two local index sets
Definition function_group.h:186
size_t num_fct() const
returns the number of indices that are mapped
Definition function_group.h:195
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition grid_base_objects.h:157
Base class for UserData.
Definition user_data.h:261
int dim_local_ips() const
returns current local ip dimension
Definition user_data.h:373
std::vector< const MathVector< 2 > * > m_pvLocIP2d
Definition user_data.h:461
bool at_current_time(size_t s) const
returns true iff the time point specification is equal to the current one, or not specified
Definition user_data_impl.h:221
ICplUserData()
default constructor
Definition user_data_impl.h:46
void check_s(size_t s) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:253
std::vector< const MathVector< dim > * > m_vvGlobPos
global ips
Definition user_data.h:468
void set_subset(int si)
set the subset of evaluation
Definition user_data.h:271
const MathVector< ldim > * local_ips(size_t s) const
returns local ips
Definition user_data_impl.h:176
void clear()
clear all data
Definition user_data_impl.h:57
virtual bool constant() const
returns if data is constant
Definition user_data.h:290
size_t register_local_ip_series(const MathVector< ldim > *vPos, const size_t numIP, bool bMayChange=true)
set local positions without the specification of the time point, returns series id
Definition user_data.h:347
virtual void compute(LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)=0
compute values (and derivatives iff compDeriv == true, but only for the 'current' time point)
int subset() const
returns the subset of evaluation
Definition user_data.h:274
std::vector< int > m_vTimePoint
time points for the series
Definition user_data.h:465
virtual void local_ip_series_to_be_cleared()
callback invoked, when local ips are cleared
Definition user_data.h:424
void set_local_ips(const size_t seriesId, const MathVector< ldim > *vPos, const size_t numIP)
sets new local ip positions for a local ip series
Definition user_data_impl.h:119
void set_time_point(size_t timePoint)
sets the current time point
Definition user_data.h:280
int m_si
subset for evaluation
Definition user_data.h:480
size_t time_point()
returns the current time point
Definition user_data.h:283
number time(size_t s) const
get the specified evaluation time
Definition user_data.h:390
std::vector< const MathVector< 1 > * > m_pvLocIP1d
local ips of dimension 1d-3d
Definition user_data.h:460
std::vector< const MathVector< 3 > * > m_pvLocIP3d
Definition user_data.h:462
number time() const
get the current evaluation time
Definition user_data.h:286
virtual size_t num_needed_data() const
number of other Data this data depends on
Definition user_data.h:293
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)=0
callback invoked, if a local ip series has been changed
const MathVector< dim > * ips(size_t s) const
returns global ips
Definition user_data.h:399
size_t m_timePoint
current time point (used if no explicit specification for series)
Definition user_data.h:474
const std::vector< const MathVector< 2 > * > & get_local_ips(Int2Type< 2 >) const
Definition user_data.h:446
void check_s_ip(size_t s, size_t ip) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:260
std::vector< const MathVector< 3 > * > & get_local_ips(Int2Type< 3 >)
Definition user_data.h:444
virtual void update_dof_sizes(const LocalIndices &ind)
resize arrays
Definition user_data.h:321
virtual ~ICplUserData()
virtual desctructor
Definition user_data.h:314
virtual void compute(LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)=0
compute values (and derivatives iff compDeriv == true)
std::vector< size_t > m_vNumIP
number of evaluation points (-1 indicates no ips set)
Definition user_data.h:454
std::vector< const MathVector< 1 > * > & get_local_ips(Int2Type< 1 >)
help function to get local ips
Definition user_data.h:442
std::vector< number > m_vTime
time for evaluation
Definition user_data.h:471
const MathVector< dim > & ip(size_t s, size_t ip) const
returns global ip
Definition user_data.h:402
size_t num_ip(size_t s) const
returns the number of integration points
Definition user_data.h:328
virtual void global_ips_changed(const size_t seriesID, const MathVector< dim > *vPos, const size_t numIP)
callback invoked after global ips have been changed
Definition user_data.h:432
int m_defaultTimePoint
default time point (or -1 if not specified)
Definition user_data.h:477
virtual void local_ip_series_added(const size_t seriesID)
callback invoked after local ips have been added to the series
Definition user_data.h:418
size_t register_local_ip_series(const MathVector< ldim > *vPos, const size_t numIP, const int timePointSpec, bool bMayChange=true)
set local positions, returns series id
Definition user_data_impl.h:71
size_t num_series() const
returns the number of ip series
Definition user_data.h:325
int m_locPosDim
dimension of local position (-1 indicates no dim set)
Definition user_data.h:457
void set_global_ips(size_t s, const MathVector< dim > *vPos, size_t numIP)
set global positions
Definition user_data_impl.h:232
int time_point_specification(size_t s) const
returns the time point specification (note: it may be -1, i.e. not specified)
Definition user_data_impl.h:201
std::vector< const MathVector< 2 > * > & get_local_ips(Int2Type< 2 >)
Definition user_data.h:443
virtual bool zero_derivative() const
returns if data depends on solution
Definition user_data.h:318
const std::vector< const MathVector< 1 > * > & get_local_ips(Int2Type< 1 >) const
Definition user_data.h:445
const std::vector< const MathVector< 3 > * > & get_local_ips(Int2Type< 3 >) const
Definition user_data.h:447
const MathVector< ldim > & local_ip(size_t s, size_t ip) const
returns local ip
Definition user_data_impl.h:189
void set_times(const std::vector< number > &vTime)
set evaluation time
Definition user_data.h:277
std::vector< bool > m_vMayChange
flags if local ips may change
Definition user_data.h:451
virtual void check_setup() const
returns if the dependent data is ready for evaluation
Definition user_data.h:311
virtual SmartPtr< ICplUserData > needed_data(size_t i)
return needed data
Definition user_data.h:296
Definition local_algebra.h:50
Definition local_algebra.h:198
time series of local vectors
Definition solution_time_series.h:167
A class for fixed size, dense matrices.
Definition math_matrix.h:63
a mathematical Tensor of rank TRank and N entries.
Definition math_tensor.h:56
a mathematical Vector with N entries.
Definition math_vector.h:97
Type based UserData.
Definition user_data.h:144
TRet return_type
Definition user_data.h:147
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 3 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 3, dim > *vJT=NULL) const =0
std::string type() const
returns type of data as string (e.g. "Number", "Vector", "Matrix")
Definition user_data.h:153
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 1 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 1, dim > *vJT=NULL) const =0
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 2 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 2, dim > *vJT=NULL) const =0
virtual bool requires_grid_fct() const =0
returns if grid function is needed for evaluation
virtual bool continuous() const =0
returns if provided data is continuous over geometric object boundaries
TData data_type
Definition user_data.h:146
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, const size_t nip) const =0
returns values for global positions
int get_dim() const
returns dimension
Definition user_data.h:150
virtual TRet operator()(TData &value, const MathVector< dim > &globIP, number time, int si) const =0
returns value for a global position
base class providing runtime-info on dimension and type
Definition user_data.h:52
virtual std::string type() const =0
returns type of data as string (e.g. "Number", "Vector", "Matrix")
const FunctionGroup & function_group() const
Function Group of functions.
Definition user_data.h:76
const FunctionIndexMapping & map() const
get function mapping
Definition user_data.h:79
virtual int get_dim() const =0
returns dimension
const char * obj_name()
gets the name of the object (s. the field m_objName)
Definition user_data.h:103
virtual bool requires_grid_fct() const =0
returns if grid function is needed for evaluation
FunctionIndexMapping m_map
Mapping for import fct.
Definition user_data.h:110
FunctionGroup m_fctGrp
functions the data depends on
Definition user_data.h:107
virtual bool continuous() const =0
returns if provided data is continuous over geometric object boundaries
virtual ~UserDataInfo()
virtual destructor
Definition user_data.h:64
void set_obj_name(const char *name)
sets the name of the object (s. the field m_objName)
Definition user_data.h:88
size_t num_fct() const
number of functions this export depends on
Definition user_data.h:82
virtual void set_function_pattern(ConstSmartPtr< FunctionPattern > fctPatt)
sets the function pattern for a possibly needed grid function
Definition user_data.h:71
SmartPtr< char > m_objName
This field is used mainly for debugging: One can assign a name to the object to identify it when runn...
Definition user_data.h:113
Base-class for all vertex-types.
Definition grid_base_objects.h:231
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition smart_pointer.h:89
#define UG_ASSERT(expr, msg)
Definition assert.h:70
#define UG_LOG(msg)
Definition log.h:367
double number
Definition types.h:124
the ug namespace
function func(x, y, z, t, si)
Definition metaprogramming_util.h:42
static std::string name()
Definition user_data.h:128
static std::string name()
Definition user_data.h:130
static std::string name()
Definition user_data.h:126
static std::string name()
Definition user_data.h:124
Definition user_data.h:122
static std::string name()
Definition user_data.h:122