Loading [MathJax]/extensions/tex2jax.js
ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
neumann_boundary_fv1.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013-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__ELEM_DISC__NEUMANN_BOUNDARY___NEUMANN_BOUNDARY_FV1__
34#define __H__UG__LIB_DISC__SPATIAL_DISC__ELEM_DISC__NEUMANN_BOUNDARY___NEUMANN_BOUNDARY_FV1__
35
36// other ug4 modules
37#include "common/common.h"
38
39// library intern headers
40#include "../neumann_boundary_base.h"
41
42namespace ug{
43
44template<typename TDomain>
46 : public NeumannBoundaryBase<TDomain>
47{
48 private:
51
54
57
58 public:
60 static const int dim = base_type::dim;
61
62 public:
64 NeumannBoundaryFV1(const char* function);
65
68 void add(SmartPtr<CplUserData<number, dim> > data, const char* BndSubsets, const char* InnerSubsets);
69 void add(SmartPtr<CplUserData<number, dim, bool> > user, const char* BndSubsets, const char* InnerSubsets);
70 void add(SmartPtr<CplUserData<MathVector<dim>, dim> > user, const char* BndSubsets, const char* InnerSubsets);
72
73 protected:
74 using typename base_type::Data;
75
78 {
80 std::string BndSubsets, std::string InnerSubsets)
81 : base_type::Data(BndSubsets, InnerSubsets)
82 {
83 import.set_data(data);
84 }
85
86 template<typename TElem, typename TFVGeom>
87 void extract_bip(const TFVGeom& geo);
88
89 template <typename TElem, typename TFVGeom>
90 void lin_def(const LocalVector& u,
91 std::vector<std::vector<number> > vvvLinDef[],
92 const size_t nip);
93
94 template <int refDim>
95 void set_local_ips(const MathVector<refDim>* ips, std::size_t nIPs)
96 {import.template set_local_ips<refDim>(ips, nIPs);}
97
98 void set_global_ips(const MathVector<dim>* ips, std::size_t nIPs)
99 {import.set_global_ips(ips, nIPs);}
100
101 template <int refDim>
102 std::vector<MathVector<refDim> >* local_ips();
103
105 std::vector<MathVector<3> > vLocIP_dim3;
106 std::vector<MathVector<2> > vLocIP_dim2; // might have Neumann bnd for lower-dim elements!
107 std::vector<MathVector<1> > vLocIP_dim1;
108 std::vector<MathVector<dim> > vGloIP;
109 };
110
113 {
115 std::string BndSubsets, std::string InnerSubsets)
116 : base_type::Data(BndSubsets, InnerSubsets), functor(functor_) {}
117
119 };
120
123 {
125 std::string BndSubsets, std::string InnerSubsets)
126 : base_type::Data(BndSubsets, InnerSubsets), functor(functor_) {}
127
129 };
130
131 std::vector<NumberData> m_vNumberData;
132 std::vector<BNDNumberData> m_vBNDNumberData;
133 std::vector<VectorData> m_vVectorData;
134
137
139 int m_si;
140
141 public:
143 virtual void prepare_setting(const std::vector<LFEID>& vLfeID, bool bNonRegularGrid);
144
145 protected:
148 template<typename TElem, typename TFVGeom>
149 void prep_elem_loop(const ReferenceObjectID roid, const int si);
150 template<typename TElem, typename TFVGeom>
151 void prep_elem(const LocalVector& u, GridObject* elem, const ReferenceObjectID roid, const MathVector<dim> vCornerCoords[]);
152 template<typename TElem, typename TFVGeom>
153 void fsh_elem_loop();
154 template<typename TElem, typename TFVGeom>
155 void add_rhs_elem(LocalVector& d, GridObject* elem, const MathVector<dim> vCornerCoords[]);
156
158 template <typename TElem, typename TFVGeom>
159 void prep_err_est_elem_loop(const ReferenceObjectID roid, const int si);
160
162 template <typename TElem, typename TFVGeom>
163 void prep_err_est_elem(const LocalVector& u, GridObject* elem, const MathVector<dim> vCornerCoords[]);
164
166 template <typename TElem, typename TFVGeom>
167 void compute_err_est_rhs_elem(GridObject* elem, const MathVector<dim> vCornerCoords[], const number& scale);
168
170 template <typename TElem, typename TFVGeom>
172
173
175
176 static const int _C_ = 0;
177
178 private:
179 void register_all_funcs(bool bHang);
180 template <typename TElem, typename TFVGeom> void register_func();
181};
182
183} // end namespac ug
184
185#endif /*__H__UG__LIB_DISC__SPATIAL_DISC__ELEM_DISC__NEUMANN_BOUNDARY___NEUMANN_BOUNDARY_FV1__*/
Definition smart_pointer.h:108
Type based UserData.
Definition user_data.h:501
Data import.
Definition data_import.h:180
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition grid_base_objects.h:157
Definition local_algebra.h:198
a mathematical Vector with N entries.
Definition math_vector.h:97
Definition neumann_boundary_base.h:47
static const int dim
World dimension.
Definition neumann_boundary_base.h:57
void update_subset_groups(Data &userData)
method used to extract subsets id
Definition neumann_boundary_base.cpp:60
Definition neumann_boundary_fv1.h:47
int m_si
current inner subset
Definition neumann_boundary_fv1.h:139
void prep_err_est_elem_loop(const ReferenceObjectID roid, const int si)
prepares the loop over all elements of one type for the computation of the error estimator
Definition neumann_boundary_fv1.cpp:284
SideAndElemErrEstData< TDomain > err_est_type
error estimator type
Definition neumann_boundary_fv1.h:56
void prep_err_est_elem(const LocalVector &u, GridObject *elem, const MathVector< dim > vCornerCoords[])
prepares the element for assembling the error estimator
Definition neumann_boundary_fv1.cpp:346
void add_rhs_elem(LocalVector &d, GridObject *elem, const MathVector< dim > vCornerCoords[])
Definition neumann_boundary_fv1.cpp:179
NeumannBoundaryFV1< TDomain > this_type
Base class type.
Definition neumann_boundary_fv1.h:53
void register_all_funcs(bool bHang)
void add(SmartPtr< CplUserData< number, dim > > data, const char *BndSubsets, const char *InnerSubsets)
Definition neumann_boundary_fv1.cpp:67
static const int dim
World dimension.
Definition neumann_boundary_fv1.h:60
void prep_elem(const LocalVector &u, GridObject *elem, const ReferenceObjectID roid, const MathVector< dim > vCornerCoords[])
Definition neumann_boundary_fv1.cpp:161
std::vector< NumberData > m_vNumberData
Definition neumann_boundary_fv1.h:131
NeumannBoundaryBase< TDomain > base_type
Base class type.
Definition neumann_boundary_fv1.h:50
void prep_elem_loop(const ReferenceObjectID roid, const int si)
Definition neumann_boundary_fv1.cpp:107
std::vector< VectorData > m_vVectorData
Definition neumann_boundary_fv1.h:133
void compute_err_est_rhs_elem(GridObject *elem, const MathVector< dim > vCornerCoords[], const number &scale)
computes the error estimator contribution for one element
Definition neumann_boundary_fv1.cpp:373
void fsh_elem_loop()
Definition neumann_boundary_fv1.cpp:239
virtual void prepare_setting(const std::vector< LFEID > &vLfeID, bool bNonRegularGrid)
type of trial space for each function used
Definition neumann_boundary_fv1.cpp:53
void fsh_err_est_elem_loop()
postprocesses the loop over all elements of one type in the computation of the error estimator
Definition neumann_boundary_fv1.cpp:490
void register_func()
Definition neumann_boundary_fv1.cpp:619
std::vector< BNDNumberData > m_vBNDNumberData
Definition neumann_boundary_fv1.h:132
void update_subset_groups()
Definition neumann_boundary_fv1.cpp:90
static const int _C_
Definition neumann_boundary_fv1.h:176
Error estimator data class storing a number vector per side and per element.
Definition err_est_data.h:221
double number
Definition types.h:124
the ug namespace
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition grid_base_objects.h:74
base class for user data
Definition neumann_boundary_base.h:87
Conditional scalar user data.
Definition neumann_boundary_fv1.h:113
SmartPtr< CplUserData< number, dim, bool > > functor
Definition neumann_boundary_fv1.h:118
BNDNumberData(SmartPtr< CplUserData< number, dim, bool > > functor_, std::string BndSubsets, std::string InnerSubsets)
Definition neumann_boundary_fv1.h:114
Unconditional scalar user data.
Definition neumann_boundary_fv1.h:78
std::vector< MathVector< 1 > > vLocIP_dim1
Definition neumann_boundary_fv1.h:107
std::vector< MathVector< 3 > > vLocIP_dim3
Definition neumann_boundary_fv1.h:105
std::vector< MathVector< refDim > > * local_ips()
Definition neumann_boundary_fv1.cpp:567
void lin_def(const LocalVector &u, std::vector< std::vector< number > > vvvLinDef[], const size_t nip)
Definition neumann_boundary_fv1.cpp:508
void set_local_ips(const MathVector< refDim > *ips, std::size_t nIPs)
Definition neumann_boundary_fv1.h:95
void extract_bip(const TFVGeom &geo)
Definition neumann_boundary_fv1.cpp:530
std::vector< MathVector< 2 > > vLocIP_dim2
Definition neumann_boundary_fv1.h:106
NumberData(SmartPtr< CplUserData< number, dim > > data, std::string BndSubsets, std::string InnerSubsets)
Definition neumann_boundary_fv1.h:79
void set_global_ips(const MathVector< dim > *ips, std::size_t nIPs)
Definition neumann_boundary_fv1.h:98
std::vector< MathVector< dim > > vGloIP
Definition neumann_boundary_fv1.h:108
Unconditional vector user data.
Definition neumann_boundary_fv1.h:123
VectorData(SmartPtr< CplUserData< MathVector< dim >, dim > > functor_, std::string BndSubsets, std::string InnerSubsets)
Definition neumann_boundary_fv1.h:124
SmartPtr< CplUserData< MathVector< dim >, dim > > functor
Definition neumann_boundary_fv1.h:128