Line data Source code
1 : /*
2 : * Copyright (c) 2012-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 : // extern headers
34 : #include <iostream>
35 : #include <sstream>
36 : #include <string>
37 :
38 : // include bridge
39 : #include "bridge/bridge.h"
40 : #include "bridge/util.h"
41 : #include "bridge/util_domain_algebra_dependent.h"
42 :
43 : // lib_disc includes
44 : #include "lib_disc/function_spaces/grid_function.h"
45 : #include "lib_disc/function_spaces/integrate.h"
46 : #include "lib_disc/function_spaces/integrate_flux.h"
47 :
48 : #include "lib_disc/quadrature/quad_test.h"
49 :
50 : using namespace std;
51 :
52 : namespace ug{
53 : namespace bridge{
54 : namespace Integrate{
55 :
56 : /**
57 : * \defgroup integrate_bridge Integration Bridge
58 : * \ingroup disc_bridge
59 : * \{
60 : */
61 :
62 : /**
63 : * Class exporting the functionality. All functionality that is to
64 : * be used in scripts or visualization must be registered here.
65 : */
66 : struct Functionality
67 : {
68 :
69 : /**
70 : * Function called for the registration of Domain and Algebra dependent parts.
71 : * All Functions and Classes depending on both Domain and Algebra
72 : * are to be placed here when registering. The method is called for all
73 : * available Domain and Algebra types, based on the current build options.
74 : *
75 : * @param reg registry
76 : * @param parentGroup group for sorting of functionality
77 : */
78 : template <typename TDomain, typename TAlgebra>
79 9 : static void DomainAlgebra(Registry& reg, string grp)
80 : {
81 : // typedef
82 : static const int dim = TDomain::dim;
83 : typedef GridFunction<TDomain, TAlgebra> TFct;
84 :
85 : // Integral
86 : {
87 27 : reg.add_function("Integral", static_cast<number (*)(SmartPtr<UserData<number,dim> >, SmartPtr<TFct>, const char*, number, int)>(&Integral<TFct>), grp, "Integral", "Data#GridFunction#Subsets#Time#QuadOrder");
88 27 : reg.add_function("Integral", static_cast<number (*)(SmartPtr<UserData<number,dim> >, SmartPtr<TFct>, const char*, number)>(&Integral<TFct>), grp, "Integral", "Data#GridFunction#Subsets#Time");
89 27 : reg.add_function("Integral", static_cast<number (*)(SmartPtr<UserData<number,dim> >, SmartPtr<TFct>, number)>(&Integral<TFct>), grp, "Integral", "Data#GridFunction#Time");
90 27 : reg.add_function("Integral", static_cast<number (*)(SmartPtr<UserData<number,dim> >, SmartPtr<TFct>, const char*)>(&Integral<TFct>), grp, "Integral", "Data#GridFunction#Subsets");
91 27 : reg.add_function("Integral", static_cast<number (*)(SmartPtr<UserData<number,dim> >, SmartPtr<TFct>)>(&Integral<TFct>), grp, "Integral", "Data#GridFunction");
92 :
93 27 : reg.add_function("Integral", static_cast<number (*)(number, SmartPtr<TFct>, const char*, number, int)>(&Integral<TFct>), grp, "Integral", "ConstantValue#GridFunction#Subsets#Time#QuadOrder");
94 27 : reg.add_function("Integral", static_cast<number (*)(number, SmartPtr<TFct>, const char*, number)>(&Integral<TFct>), grp, "Integral", "ConstantValue#GridFunction#Subsets#Time");
95 27 : reg.add_function("Integral", static_cast<number (*)(number, SmartPtr<TFct>, number)>(&Integral<TFct>), grp, "Integral", "ConstantValue#GridFunction#Time");
96 27 : reg.add_function("Integral", static_cast<number (*)(number, SmartPtr<TFct>, const char*)>(&Integral<TFct>), grp, "Integral", "ConstantValue#GridFunction#Subsets");
97 27 : reg.add_function("Integral", static_cast<number (*)(number, SmartPtr<TFct>)>(&Integral<TFct>), grp, "Integral", "ConstantValue#GridFunction");
98 :
99 : #ifdef UG_FOR_LUA
100 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number, int, std::string)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction#Subsets#Time#QuadOrder#QuadType");
101 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number, int)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction#Subsets#Time#QuadOrder");
102 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction#Subsets#Time");
103 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>, number)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction#Time");
104 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction#Subsets");
105 27 : reg.add_function("Integral", static_cast<number (*)(const char*, SmartPtr<TFct>)>(&Integral<TFct>), grp, "Integral", "LuaFunction#GridFunction");
106 : #endif
107 :
108 27 : reg.add_function("Integral",static_cast<number (*)(SmartPtr<TFct>, const char*, const char*, int)>(Integral<TFct>),grp, "Integral", "GridFunction#Component#Subsets#QuadOrder");
109 27 : reg.add_function("Integral",static_cast<number (*)(SmartPtr<TFct>, const char*, const char*)>(Integral<TFct>),grp, "Integral", "GridFunction#Component#Subsets");
110 27 : reg.add_function("Integral",static_cast<number (*)(SmartPtr<TFct>, const char*)>(Integral<TFct>),grp, "Integral", "GridFunction#Component");
111 : }
112 :
113 : {
114 27 : reg.add_function("Minimum",static_cast<number (*)(SmartPtr<TFct>, const char*, const char*)>(&Minimum<TFct>), grp);
115 : }
116 : // L2Error
117 : {
118 27 : reg.add_function("L2Error",static_cast<number (*)(SmartPtr<TFct>, const char*, SmartPtr<TFct>, const char*, int, const char*)>(&L2Error<TFct>), grp);
119 27 : reg.add_function("L2Error",static_cast<number (*)(SmartPtr<TFct>, const char*, SmartPtr<TFct>, const char*, int)>(&L2Error<TFct>), grp);
120 27 : reg.add_function("L2Error",static_cast<number (*)(SmartPtr<UserData<number, dim> >, SmartPtr<TFct>, const char*, number, int, const char*)>(&L2Error<TFct>), grp);
121 27 : reg.add_function("L2Error",static_cast<number (*)(SmartPtr<UserData<number, dim> >, SmartPtr<TFct>, const char*, number, int)>(&L2Error<TFct>), grp);
122 : #ifdef UG_FOR_LUA
123 27 : reg.add_function("L2Error",static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number, int, const char*)>(&L2Error<TFct>), grp);
124 27 : reg.add_function("L2Error",static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number, int)>(&L2Error<TFct>), grp);
125 : #endif
126 : }
127 :
128 : // H1Error
129 : {
130 27 : reg.add_function("H1Error",static_cast<number (*)(SmartPtr<TFct>, const char*, SmartPtr<TFct>, const char*, int, const char*)>(&H1Error<TFct>), grp);
131 27 : reg.add_function("H1Error",static_cast<number (*)(SmartPtr<TFct>, const char*, SmartPtr<TFct>, const char*, int)>(&H1Error<TFct>), grp);
132 27 : reg.add_function("H1Error",static_cast<number (*)(SmartPtr<UserData<number, dim> >, SmartPtr<UserData<MathVector<dim>, dim> >, SmartPtr<TFct>, const char*, number, int, const char*)>(&H1Error<TFct>), grp);
133 27 : reg.add_function("H1Error",static_cast<number (*)(SmartPtr<UserData<number, dim> >, SmartPtr<UserData<MathVector<dim>, dim> >, SmartPtr<TFct>, const char*, number, int)>(&H1Error<TFct>), grp);
134 : #ifdef UG_FOR_LUA
135 27 : reg.add_function("H1Error",static_cast<number (*)(const char*, const char*, SmartPtr<TFct>, const char*, number, int, const char*)>(&H1Error<TFct>), grp);
136 27 : reg.add_function("H1Error",static_cast<number (*)(const char*, const char*, SmartPtr<TFct>, const char*, number, int)>(&H1Error<TFct>), grp);
137 : #endif
138 : }
139 :
140 : // L2Norm
141 : {
142 27 : reg.add_function("L2Norm",static_cast<number (*)(SmartPtr<TFct>, const char*, int, const char*)>(&L2Norm<TFct>),grp);
143 27 : reg.add_function("L2Norm",static_cast<number (*)(SmartPtr<TFct>, const char*, int)>(&L2Norm<TFct>),grp);
144 :
145 27 : reg.add_function("H1SemiNorm",static_cast<number (*)(SmartPtr<TFct>, const char*, int)>(&H1SemiNorm<TFct>),grp);
146 27 : reg.add_function("H1SemiNorm",static_cast<number (*)(SmartPtr<TFct>, const char*, int, const char*)>(&H1SemiNorm<TFct>),grp);
147 :
148 27 : reg.add_function("H1Norm",static_cast<number (*)(SmartPtr<TFct>, const char*, int)>(&H1Norm<TFct>),grp);
149 27 : reg.add_function("H1Norm",static_cast<number (*)(SmartPtr<TFct>, const char*, int, const char*)>(&H1Norm<TFct>),grp);
150 : }
151 :
152 : // IntegrateNormalGradientOnManifold
153 : {
154 27 : reg.add_function("IntegrateNormalGradientOnManifold",static_cast<number (*)(TFct&, const char*, const char*, const char*)>(&IntegrateNormalGradientOnManifold<TFct>),grp, "Integral", "GridFunction#Component#BoundarySubset#InnerSubset");
155 : }
156 :
157 : // IntegralNormalComponentOnManifold
158 : {
159 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(SmartPtr<UserData<MathVector<dim>,dim> >, SmartPtr<TFct>, const char*, const char*, number, int)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "Data#GridFunction#BoundarySubsets#InnerSubsets#Time#QuadOrder");
160 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(SmartPtr<UserData<MathVector<dim>,dim> >, SmartPtr<TFct>, const char*, const char*, number)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "Data#GridFunction#BoundarySubsets#InnerSubsets#Time");
161 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(SmartPtr<UserData<MathVector<dim>,dim> >, SmartPtr<TFct>, const char*, number)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "Data#GridFunction#BoundarySubsets#Time");
162 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(SmartPtr<UserData<MathVector<dim>,dim> >, SmartPtr<TFct>, const char*, const char*)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "Data#GridFunction#BoundarySubsets#InnerSubsets");
163 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(SmartPtr<UserData<MathVector<dim>,dim> >, SmartPtr<TFct>, const char*)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "Data#GridFunction#BoundarySubsets");
164 : #ifdef UG_FOR_LUA
165 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, const char*, number, int)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "LuaData#GridFunction#BoundarySubsets#InnerSubsets#Time#QuadOrder");
166 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, const char*, number)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "LuaFunction#GridFunction#BoundarySubsets#InnerSubsets#Time");
167 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, number)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "LuaFunction#GridFunction#BoundarySubsets#Time");
168 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*, const char*)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "LuaFunction#GridFunction#BoundarySubsets#InnerSubsets");
169 27 : reg.add_function("IntegralNormalComponentOnManifold", static_cast<number (*)(const char*, SmartPtr<TFct>, const char*)>(&IntegralNormalComponentOnManifold<TFct>), grp, "Integral", "LuaFunction#GridFunction#BoundarySubsets");
170 : #endif
171 : {
172 27 : reg.add_function("IntegrateNormalComponentOnManifold", static_cast<number (*)(TFct&, const char*, const char*)>(&IntegrateNormalComponentOnManifold<TFct>),grp, "Integral", "GridFunction#Component#BoundarySubset");
173 : }
174 : }
175 :
176 : // IntegrateDiscFlux
177 : {
178 27 : reg.add_function("IntegrateDiscFlux", &IntegrateDiscFlux<TFct>, grp, "Integral");
179 : }
180 :
181 9 : }
182 :
183 : }; // end Functionality
184 :
185 : // end group integrate_bridge
186 : /// \}
187 :
188 : }// end Integrate
189 :
190 : /// \addtogroup integrate_bridge
191 1 : void RegisterBridge_Integrate(Registry& reg, string grp)
192 : {
193 1 : grp.append("/Discretization");
194 : typedef Integrate::Functionality Functionality;
195 :
196 :
197 : {
198 2 : reg.add_function("TestQuadRule", &ug::TestQuadRule);
199 : }
200 :
201 : try{
202 1 : RegisterDomainAlgebraDependent<Functionality>(reg,grp);
203 : }
204 0 : UG_REGISTRY_CATCH_THROW(grp);
205 1 : }
206 :
207 : }// end of namespace bridge
208 : }// end of namespace ug
|