4545#include " fv/convection_diffusion_fv.h"
4646#include " fractfv1/convection_diffusion_fractfv1.h"
4747
48+ #include " convection_diffusion_plugin.h"
49+
4850using namespace std ;
4951using namespace ug ::bridge;
5052
@@ -74,8 +76,8 @@ struct Functionality
7476 * @param reg registry
7577 * @param parentGroup group for sorting of functionality
7678 */
77- template <typename TDomain>
78- static void Domain (Registry & reg, string grp)
79+ template <typename TDomain, typename TRegistry=ug::bridge::Registry >
80+ static void Domain (TRegistry & reg, string grp)
7981{
8082 static const int dim = TDomain::dim;
8183 string suffix = GetDomainSuffix<TDomain>();
@@ -86,7 +88,7 @@ static void Domain(Registry& reg, string grp)
8688 typedef ConvectionDiffusionBase<TDomain> T;
8789 typedef IElemDisc<TDomain> TBase;
8890 string name = string (" ConvectionDiffusionBase" ).append (suffix);
89- reg.add_class_ <T, TBase >(name, grp)
91+ reg.template add_class_ <T, TBase >(name, grp)
9092 .add_method (" set_diffusion" , static_cast <void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_diffusion), " " , " Diffusion" )
9193 .add_method (" set_diffusion" , static_cast <void (T::*)(number)>(&T::set_diffusion), " " , " Diagonal Diffusion" )
9294#ifdef UG_FOR_LUA
@@ -182,7 +184,7 @@ static void Domain(Registry& reg, string grp)
182184 typedef ConvectionDiffusionFV1<TDomain> T;
183185 typedef ConvectionDiffusionBase<TDomain> TBase;
184186 string name = string (" ConvectionDiffusionFV1" ).append (suffix);
185- reg.add_class_ <T, TBase >(name, grp)
187+ reg.template add_class_ <T, TBase >(name, grp)
186188 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
187189 .add_method (" set_condensed_FV" , &T::set_condensed_FV, " " , " [De-]Activates the condensed FV scvf ip's" )
188190 .add_method (" set_upwind" , &T::set_upwind, " " , " Sets the upwind type for the convective terms" )
@@ -197,7 +199,7 @@ static void Domain(Registry& reg, string grp)
197199 typedef ConvectionDiffusionFE<TDomain> T;
198200 typedef ConvectionDiffusionBase<TDomain> TBase;
199201 string name = string (" ConvectionDiffusionFE" ).append (suffix);
200- reg.add_class_ <T, TBase >(name, grp)
202+ reg.template add_class_ <T, TBase >(name, grp)
201203 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
202204 .add_method (" set_quad_order" , &T::set_quad_order)
203205 .set_construct_as_smart_pointer (true );
@@ -209,7 +211,7 @@ static void Domain(Registry& reg, string grp)
209211 typedef ConvectionDiffusionStabFE<TDomain> T;
210212 typedef IElemDisc<TDomain> TBase;
211213 string name = string (" ConvectionDiffusionStabFE" ).append (suffix);
212- reg.add_class_ <T, TBase >(name, grp)
214+ reg.template add_class_ <T, TBase >(name, grp)
213215 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
214216 .template add_constructor <void (*)(const char *,const char *,number)>(" Function(s)#Subset(s)#stabilization" )
215217 .template add_constructor <void (*)(const char *,const char *,number,number)>(" Function(s)#Subset(s)#stabilization" )
@@ -224,7 +226,7 @@ static void Domain(Registry& reg, string grp)
224226 typedef ConvectionDiffusionFVCR<TDomain> T;
225227 typedef ConvectionDiffusionBase<TDomain> TBase;
226228 string name = string (" ConvectionDiffusionFVCR" ).append (suffix);
227- reg.add_class_ <T, TBase >(name, grp)
229+ reg.template add_class_ <T, TBase >(name, grp)
228230 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
229231 .add_method (" set_upwind" , &T::set_upwind)
230232 .set_construct_as_smart_pointer (true );
@@ -236,16 +238,16 @@ static void Domain(Registry& reg, string grp)
236238 typedef ConvectionDiffusionFV<TDomain> T;
237239 typedef ConvectionDiffusionBase<TDomain> TBase;
238240 string name = string (" ConvectionDiffusionFV" ).append (suffix);
239- reg.add_class_ <T, TBase >(name, grp)
241+ reg.template add_class_ <T, TBase >(name, grp)
240242 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
241243 .add_method (" set_quad_order" , &T::set_quad_order)
242244 .set_construct_as_smart_pointer (true );
243245 reg.add_class_to_group (name, " ConvectionDiffusionFV" , tag);
244246 }
245247}
246248
247- template <int dim>
248- static void Dimension (Registry & reg, string grp)
249+ template <int dim, typename TRegistry=ug::bridge::Registry >
250+ static void Dimension (TRegistry & reg, string grp)
249251{
250252 string dimSuffix = GetDimensionSuffix<dim>();
251253 string dimTag = GetDimensionTag<dim>();
@@ -257,7 +259,7 @@ static void Dimension(Registry& reg, string grp)
257259 typedef typename T::line_sss_type TLineSSS;
258260
259261 string point_name = string (" CDPointSourcesSink" ).append (dimSuffix);
260- reg.add_class_ <TPointSSS>(point_name, grp)
262+ reg.template add_class_ <TPointSSS>(point_name, grp)
261263 .template add_constructor <void (*) (const std::vector<number>&)> ()
262264 .add_method (" set" , static_cast <void (TPointSSS::*) (number)> (&TPointSSS::set))
263265 .add_method (" set" , static_cast <void (TPointSSS::*) (typename TPointSSS::user_data_type)> (&TPointSSS::set))
@@ -268,15 +270,15 @@ static void Dimension(Registry& reg, string grp)
268270 reg.add_class_to_group (point_name, " CDPointSourcesSink" , dimTag);
269271
270272 string line_name = string (" CDLineSourcesSink" ).append (dimSuffix);
271- reg.add_class_ <TLineSSS>(line_name, grp)
273+ reg.template add_class_ <TLineSSS>(line_name, grp)
272274 .template add_constructor <void (*) (const std::vector<number>&, const std::vector<number>&)> ()
273275 .add_method (" set" , static_cast <void (TLineSSS::*) (number)> (&TLineSSS::set))
274276 .add_method (" set" , static_cast <void (TLineSSS::*) (LuaFunctionHandle)> (&TLineSSS::set))
275277 .set_construct_as_smart_pointer (true );
276278 reg.add_class_to_group (line_name, " CDLineSourcesSink" , dimTag);
277279
278280 string name = string (" CDSingularSourcesAndSinks" ).append (dimSuffix);
279- reg.add_class_ <T>(name, grp)
281+ reg.template add_class_ <T>(name, grp)
280282 .add_constructor ()
281283 .add_method (" add_point" , static_cast <void (T::*) (SmartPtr<TPointSSS>)> (&T::add_point))
282284 .add_method (" add_line" , static_cast <void (T::*) (SmartPtr<TLineSSS>)> (&T::add_line))
@@ -304,8 +306,8 @@ struct Functionality2d3d
304306 * @param reg registry
305307 * @param parentGroup group for sorting of functionality
306308 */
307- template <typename TDomain>
308- static void Domain (Registry & reg, string grp)
309+ template <typename TDomain, typename TRegistry=ug::bridge::Registry >
310+ static void Domain (TRegistry & reg, string grp)
309311{
310312 static const int dim = TDomain::dim;
311313 string suffix = GetDomainSuffix<TDomain>();
@@ -316,7 +318,7 @@ static void Domain(Registry& reg, string grp)
316318 typedef ConvectionDiffusionFractFV1<TDomain> T;
317319 typedef ConvectionDiffusionBase<TDomain> TBase;
318320 string name = string (" ConvectionDiffusionFractFV1" ).append (suffix);
319- reg.add_class_ <T, TBase >(name, grp)
321+ reg.template add_class_ <T, TBase >(name, grp)
320322 .template add_constructor <void (*)(const char *,const char *)>(" Function(s)#Subset(s)" )
321323 .add_method (" set_fract_manager" , static_cast <void (T::*)(SmartPtr<DegeneratedLayerManager<dim> >)>(&T::set_fract_manager), " Sets the fracture manager" , " Deg. fracture manager" )
322324 .add_method (" set_upwind" , &T::set_upwind)
@@ -351,11 +353,13 @@ static void Domain(Registry& reg, string grp)
351353} // end namespace ConvectionDiffusionPlugin
352354
353355
354- /* *
355- * This function is called when the plugin is loaded.
356- */
357- extern " C" void
358- InitUGPlugin_ConvectionDiffusion (Registry* reg, string grp)
356+
357+ #ifndef UG_USE_PYBIND11
358+
359+
360+ // ! This function is called when the plugin is loaded.
361+ extern " C"
362+ void InitUGPlugin_ConvectionDiffusion (ug::bridge::Registry* reg, string grp)
359363{
360364 grp.append (" /SpatialDisc/ElemDisc" );
361365 typedef ConvectionDiffusionPlugin::Functionality Functionality;
@@ -369,4 +373,37 @@ InitUGPlugin_ConvectionDiffusion(Registry* reg, string grp)
369373 UG_REGISTRY_CATCH_THROW (grp);
370374}
371375
376+ #else // UG_USE_PYBIND11
377+
378+ template <typename TRegistry=ug::bridge::Registry>
379+ void InitUGPlugin_ConvectionDiffusion_ (TRegistry* reg, string grp)
380+ {
381+ grp.append (" /SpatialDisc/ElemDisc" );
382+ typedef ConvectionDiffusionPlugin::Functionality Functionality;
383+ typedef ConvectionDiffusionPlugin::Functionality2d3d Functionality2d3d;
384+
385+ try {
386+ RegisterDimensionDependent<Functionality>(*reg,grp);
387+ RegisterDomainDependent<Functionality, TRegistry>(*reg,grp);
388+ RegisterDomain2d3dDependent<Functionality2d3d, TRegistry>(*reg,grp);
389+ }
390+ UG_REGISTRY_CATCH_THROW (grp);
391+ }
392+
393+
394+ // ! This function is called when the plugin is loaded.
395+ extern " C" void
396+ InitUGPlugin_ConvectionDiffusion (ug::bridge::Registry* reg, string grp)
397+ { InitUGPlugin_ConvectionDiffusion_ (reg, grp); }
398+
399+ #ifdef UG_USE_PYBIND11
400+ namespace ConvectionDiffusionPlugin {
401+
402+ void Init (ug::pybind::Registry* reg, string grp)
403+ { InitUGPlugin_ConvectionDiffusion_<ug::pybind::Registry>(reg, grp); }
404+ }
405+ #endif
406+
407+ #endif // UG_USE_PYBIND11
408+
372409}// namespace ug
0 commit comments