LCOV - code coverage report
Current view: top level - /builds/ug4-project/ugcore/ug4-new/plugins/ConvectionDiffusion - convection_diffusion_plugin.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 99.3 % 142 141
Test Date: 2025-09-21 23:31:46 Functions: 100.0 % 9 9

            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              : /**
      34              :  * File for registration of ConvectionDiffusion routines.
      35              :  */
      36              : 
      37              : #include "bridge/util.h"
      38              : #include "bridge/util_domain_dependent.h"
      39              : #include "convection_diffusion_base.h"
      40              : #include "convection_diffusion_sss.h"
      41              : #include "fv1/convection_diffusion_fv1.h"
      42              : #include "fe/convection_diffusion_fe.h"
      43              : #include "fe/convection_diffusion_stab_fe.h"
      44              : #include "fvcr/convection_diffusion_fvcr.h"
      45              : #include "fv/convection_diffusion_fv.h"
      46              : #include "fractfv1/convection_diffusion_fractfv1.h"
      47              : 
      48              : #include "convection_diffusion_plugin.h"
      49              : 
      50              : using namespace std;
      51              : using namespace ug::bridge;
      52              : 
      53              : namespace ug{
      54              : namespace ConvectionDiffusionPlugin{
      55              : 
      56              : /** 
      57              :  *  \defgroup convection_diffusion Convection Diffusion
      58              :  *  \ingroup plugins
      59              :  *  This plugin provides the discretization of convection and diffusion problems.
      60              :  *  \{
      61              :  */
      62              : 
      63              : /**
      64              :  * Class exporting the functionality of the plugin. All functionality that is to
      65              :  * be used in scripts or visualization must be registered here.
      66              :  */
      67              : struct Functionality
      68              : {
      69              : 
      70              : /**
      71              :  * Function called for the registration of Domain dependent parts
      72              :  * of the plugin. All Functions and Classes depending on the Domain
      73              :  * are to be placed here when registering. The method is called for all
      74              :  * available Domain types, based on the current build options.
      75              :  *
      76              :  * @param reg                           registry
      77              :  * @param parentGroup           group for sorting of functionality
      78              :  */
      79              : template <typename TDomain, typename TRegistry=ug::bridge::Registry>
      80            3 : static void Domain(TRegistry& reg, string grp)
      81              : {
      82              :         static const int dim = TDomain::dim;
      83              :         string suffix = GetDomainSuffix<TDomain>();
      84              :         string tag = GetDomainTag<TDomain>();
      85              : 
      86              : //      Convection Diffusion Base
      87              :         {
      88              :                 typedef ConvectionDiffusionBase<TDomain> T;
      89              :                 typedef IElemDisc<TDomain> TBase;
      90            3 :                 string name = string("ConvectionDiffusionBase").append(suffix);
      91            9 :                 reg.template add_class_<T, TBase >(name, grp)
      92            6 :                         .add_method("set_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<MathMatrix<dim, dim>, dim> >)>(&T::set_diffusion), "", "Diffusion")
      93            6 :                         .add_method("set_diffusion", static_cast<void (T::*)(number)>(&T::set_diffusion), "", "Diagonal Diffusion")
      94              : #ifdef UG_FOR_LUA
      95            6 :                         .add_method("set_diffusion", static_cast<void (T::*)(const char*)>(&T::set_diffusion), "", "Diffusion")
      96            6 :                         .add_method("set_diffusion", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_diffusion), "", "Diffusion")
      97              : #endif
      98              : 
      99            6 :                         .add_method("set_velocity", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_velocity), "", "Velocity Field")
     100            6 :                         .add_method("set_velocity", static_cast<void (T::*)(const std::vector<number>&)>(&T::set_velocity), "", "Velocity Field")
     101              : #ifdef UG_FOR_LUA
     102            6 :                         .add_method("set_velocity", static_cast<void (T::*)(const char*)>(&T::set_velocity), "", "Velocity Field")
     103            6 :                         .add_method("set_velocity", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_velocity), "", "Velocity Field")
     104              : #endif
     105              : 
     106            6 :                         .add_method("set_flux", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_flux), "", "Flux")
     107            6 :                         .add_method("set_flux", static_cast<void (T::*)(const std::vector<number>&)>(&T::set_flux), "", "Flux")
     108              : #ifdef UG_FOR_LUA
     109            6 :                         .add_method("set_flux", static_cast<void (T::*)(const char*)>(&T::set_flux), "", "Flux")
     110            6 :                         .add_method("set_flux", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_flux), "", "Flux")
     111              : #endif
     112              : 
     113            6 :                         .add_method("set_reaction_rate", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_reaction_rate), "", "Reaction Rate")
     114            6 :                         .add_method("set_reaction_rate", static_cast<void (T::*)(number)>(&T::set_reaction_rate), "", "Reaction Rate")
     115              : #ifdef UG_FOR_LUA
     116            6 :                         .add_method("set_reaction_rate", static_cast<void (T::*)(const char*)>(&T::set_reaction_rate), "", "Reaction Rate")
     117            6 :                         .add_method("set_reaction_rate", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_reaction_rate), "", "Reaction Rate")
     118              : #endif
     119              : 
     120            6 :                         .add_method("set_reaction", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_reaction), "", "Reaction")
     121            6 :                         .add_method("set_reaction", static_cast<void (T::*)(number)>(&T::set_reaction), "", "Reaction")
     122              : #ifdef UG_FOR_LUA
     123            6 :                         .add_method("set_reaction", static_cast<void (T::*)(const char*)>(&T::set_reaction), "", "Reaction")
     124            6 :                         .add_method("set_reaction", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_reaction), "", "Reaction")
     125              : #endif
     126              : 
     127            6 :                         .add_method("set_reaction_rate_explicit", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_reaction_rate_explicit), "", "Reaction Rate Explicit")
     128            6 :                         .add_method("set_reaction_rate_explicit", static_cast<void (T::*)(number)>(&T::set_reaction_rate_explicit), "", "Reaction Rate Explicit")
     129              : #ifdef UG_FOR_LUA
     130            6 :                         .add_method("set_reaction_rate_explicit", static_cast<void (T::*)(const char*)>(&T::set_reaction_rate_explicit), "", "Reaction Rate Explicit")
     131              : #endif
     132              : 
     133            6 :                         .add_method("set_reaction_explicit", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_reaction_explicit), "", "Reaction Explicit")
     134            6 :                         .add_method("set_reaction_explicit", static_cast<void (T::*)(number)>(&T::set_reaction_explicit), "", "Reaction Explicit")
     135              : #ifdef UG_FOR_LUA
     136            6 :                         .add_method("set_reaction_explicit", static_cast<void (T::*)(const char*)>(&T::set_reaction_explicit), "", "Reaction Explicit")
     137              : #endif
     138              : 
     139            6 :                         .add_method("set_source_explicit", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_source_explicit), "", "Source Explicit")
     140            6 :                         .add_method("set_source_explicit", static_cast<void (T::*)(number)>(&T::set_source_explicit), "", "Source Explicit")
     141              :                         #ifdef UG_FOR_LUA
     142            6 :                         .add_method("set_source_explicit", static_cast<void (T::*)(const char*)>(&T::set_source_explicit), "", "Source Explicit")
     143              :                         #endif
     144              : 
     145            6 :                         .add_method("set_source", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_source), "", "Source")
     146            6 :                         .add_method("set_source", static_cast<void (T::*)(number)>(&T::set_source), "", "Source")
     147              : #ifdef UG_FOR_LUA
     148            6 :                         .add_method("set_source", static_cast<void (T::*)(const char*)>(&T::set_source), "", "Source")
     149            6 :                         .add_method("set_source", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_source), "", "Source")
     150              : #endif
     151              : 
     152            6 :                         .add_method("set_vector_source", static_cast<void (T::*)(SmartPtr<CplUserData<MathVector<dim>, dim> >)>(&T::set_vector_source), "", "Vector Source")
     153              : #ifdef UG_FOR_LUA
     154            6 :                         .add_method("set_vector_source", static_cast<void (T::*)(const char*)>(&T::set_vector_source), "", "Vector Source")
     155            6 :                         .add_method("set_vector_source", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_vector_source), "", "Vector Source")
     156              : #endif
     157              : 
     158            6 :                         .add_method("set_mass_scale", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_mass_scale), "", "Mass Scale")
     159            6 :                         .add_method("set_mass_scale", static_cast<void (T::*)(number)>(&T::set_mass_scale), "", "Mass Scale")
     160              : #ifdef UG_FOR_LUA
     161            6 :                         .add_method("set_mass_scale", static_cast<void (T::*)(const char*)>(&T::set_mass_scale), "", "Mass Scale")
     162            6 :                         .add_method("set_mass_scale", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_mass_scale), "", "Mass Scale")
     163              : #endif
     164              : 
     165            6 :                         .add_method("set_mass", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_mass), "", "Mass")
     166            6 :                         .add_method("set_mass", static_cast<void (T::*)(number)>(&T::set_mass), "", "Mass")
     167              : #ifdef UG_FOR_LUA
     168            6 :                         .add_method("set_mass", static_cast<void (T::*)(const char*)>(&T::set_mass), "", "Mass")
     169            6 :                         .add_method("set_mass", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_mass), "", "Mass")
     170              : #endif
     171              : 
     172            9 :                         .add_method("value", &T::value)
     173            9 :                   .add_method("gradient", &T::gradient);
     174              :                   /*
     175              :                         .add_method("set_partial_velocity", &T::set_partial_velocity)
     176              :                         .add_method("set_partial_flux", &T::set_partial_flux)
     177              :                         .add_method("set_partial_mass", &T::set_partial_mass);
     178              :                   */
     179            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionBase", tag);
     180              :         }
     181              : 
     182              : //      Convection Diffusion FV1
     183              :         {
     184              :                 typedef ConvectionDiffusionFV1<TDomain> T;
     185              :                 typedef ConvectionDiffusionBase<TDomain> TBase;
     186            3 :                 string name = string("ConvectionDiffusionFV1").append(suffix);
     187            9 :                 reg.template add_class_<T, TBase >(name, grp)
     188            6 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     189            9 :                         .add_method("set_condensed_FV", &T::set_condensed_FV, "", "[De-]Activates the condensed FV scvf ip's")
     190           12 :                         .add_method("set_upwind", &T::set_upwind, "", "Sets the upwind type for the convective terms")
     191           12 :                         .add_method("set_singular_sources_and_sinks", &T::set_sss_manager, "", "Sets the singular sources and sinks manager")
     192            9 :                         .add_method("singular_sources_and_sinks", &T::sss_manager, "", "Returns the singular sources and sinks manager")
     193            3 :                         .set_construct_as_smart_pointer(true);
     194            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionFV1", tag);
     195              :         }
     196              : 
     197              : //      Convection Diffusion FE
     198              :         {
     199              :                 typedef ConvectionDiffusionFE<TDomain> T;
     200              :                 typedef ConvectionDiffusionBase<TDomain> TBase;
     201            3 :                 string name = string("ConvectionDiffusionFE").append(suffix);
     202            9 :                 reg.template add_class_<T, TBase >(name, grp)
     203            6 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     204            6 :                         .add_method("set_quad_order", &T::set_quad_order)
     205            3 :                         .set_construct_as_smart_pointer(true);
     206            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionFE", tag);
     207              :         }
     208              : 
     209              : //      Convection Diffusion (FE) stabilization
     210              :         {
     211              :                 typedef ConvectionDiffusionStabFE<TDomain> T;
     212              :                 typedef IElemDisc<TDomain> TBase;
     213            3 :                 string name = string("ConvectionDiffusionStabFE").append(suffix);
     214            9 :                 reg.template add_class_<T, TBase >(name, grp)
     215            6 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     216            6 :                         .template add_constructor<void (*)(const char*,const char*,number)>("Function(s)#Subset(s)#stabilization")
     217            6 :                         .template add_constructor<void (*)(const char*,const char*,number,number)>("Function(s)#Subset(s)#stabilization")
     218            6 :                         .add_method("set_quad_order", &T::set_quad_order)
     219            3 :                         .set_construct_as_smart_pointer(true);
     220            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionStabFE", tag);
     221              :         }
     222              : 
     223              : 
     224              : //      Convection Diffusion FVCR
     225              :         {
     226              :                 typedef ConvectionDiffusionFVCR<TDomain> T;
     227              :                 typedef ConvectionDiffusionBase<TDomain> TBase;
     228            3 :                 string name = string("ConvectionDiffusionFVCR").append(suffix);
     229            9 :                 reg.template add_class_<T, TBase >(name, grp)
     230            6 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     231            6 :                         .add_method("set_upwind", &T::set_upwind)
     232            3 :                         .set_construct_as_smart_pointer(true);
     233            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionFVCR", tag);
     234              :         }
     235              : 
     236              : //      Convection Diffusion FV
     237              :         {
     238              :                 typedef ConvectionDiffusionFV<TDomain> T;
     239              :                 typedef ConvectionDiffusionBase<TDomain> TBase;
     240            3 :                 string name = string("ConvectionDiffusionFV").append(suffix);
     241            9 :                 reg.template add_class_<T, TBase >(name, grp)
     242            6 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     243            6 :                         .add_method("set_quad_order", &T::set_quad_order)
     244            3 :                         .set_construct_as_smart_pointer(true);
     245            9 :                 reg.add_class_to_group(name, "ConvectionDiffusionFV", tag);
     246              :         }
     247            3 : }
     248              : 
     249              : template <int dim, typename TRegistry=ug::bridge::Registry>
     250            3 : static void Dimension(TRegistry& reg, string grp)
     251              : {
     252            3 :         string dimSuffix = GetDimensionSuffix<dim>();
     253            3 :         string dimTag = GetDimensionTag<dim>();
     254              : 
     255              :         //      singular sources and sinks 
     256              :         {
     257              :                 typedef CDSingularSourcesAndSinks<dim> T;
     258              :                 typedef typename T::point_sss_type TPointSSS;
     259              :                 typedef typename T::line_sss_type TLineSSS;
     260              : 
     261            3 :                 string point_name = string("CDPointSourcesSink").append(dimSuffix);
     262            9 :                 reg.template add_class_<TPointSSS>(point_name, grp)
     263            6 :                         .template add_constructor<void (*) (const std::vector<number>&)> ()
     264            9 :                         .add_method ("set", static_cast<void (TPointSSS::*) (number)> (&TPointSSS::set))
     265           12 :                         .add_method ("set", static_cast<void (TPointSSS::*) (typename TPointSSS::user_data_type)> (&TPointSSS::set))
     266              : #ifdef UG_FOR_LUA
     267            9 :                         .add_method ("set", static_cast<void (TPointSSS::*) (LuaFunctionHandle)> (&TPointSSS::set))
     268              : #endif
     269            3 :                         .set_construct_as_smart_pointer(true);
     270            9 :                 reg.add_class_to_group(point_name, "CDPointSourcesSink", dimTag);
     271              : 
     272            3 :                 string line_name = string("CDLineSourcesSink").append(dimSuffix);
     273            9 :                 reg.template add_class_<TLineSSS>(line_name, grp)
     274            6 :                         .template add_constructor<void (*) (const std::vector<number>&, const std::vector<number>&)> ()
     275            9 :                         .add_method ("set", static_cast<void (TLineSSS::*) (number)> (&TLineSSS::set))
     276              : #ifdef UG_FOR_LUA
     277            9 :                         .add_method ("set", static_cast<void (TLineSSS::*) (LuaFunctionHandle)> (&TLineSSS::set))
     278              : #endif
     279            3 :                         .set_construct_as_smart_pointer(true);
     280            9 :                 reg.add_class_to_group(line_name, "CDLineSourcesSink", dimTag);
     281              : 
     282            3 :                 string name = string("CDSingularSourcesAndSinks").append(dimSuffix);
     283            9 :                 reg.template add_class_<T>(name, grp)
     284            3 :                         .add_constructor()
     285            9 :                         .add_method ("add_point", static_cast<void (T::*) (SmartPtr<TPointSSS>)> (&T::add_point))
     286            9 :                         .add_method ("add_line", static_cast<void (T::*) (SmartPtr<TLineSSS>)> (&T::add_line))
     287            3 :                         .set_construct_as_smart_pointer(true);
     288            9 :                 reg.add_class_to_group(name, "CDSingularSourcesAndSinks", dimTag);
     289              :         }
     290            3 : }
     291              : 
     292              : }; // end Functionality
     293              : 
     294              : /**
     295              :  * Class exporting the functionality of the plugin restricted to 2 and 3 spatial
     296              :  * dimensions. All functionality that is to be used in scripts or visualization
     297              :  * only in 2d and 3d must be registered here.
     298              :  */
     299              : struct Functionality2d3d
     300              : {
     301              : 
     302              : /**
     303              :  * Function called for the registration of Domain dependent parts
     304              :  * of the plugin. All Functions and Classes depending on the Domain
     305              :  * are to be placed here when registering. The method is called for all
     306              :  * available Domain types, based on the current build options.
     307              :  *
     308              :  * @param reg                           registry
     309              :  * @param parentGroup           group for sorting of functionality
     310              :  */
     311              : template <typename TDomain, typename TRegistry=ug::bridge::Registry>
     312            2 : static void Domain(TRegistry& reg, string grp)
     313              : {
     314              :         static const int dim = TDomain::dim;
     315              :         string suffix = GetDomainSuffix<TDomain>();
     316              :         string tag = GetDomainTag<TDomain>();
     317              : 
     318              : //      Convection Diffusion FV1 for the low-dimensional fractures
     319              :         {
     320              :                 typedef ConvectionDiffusionFractFV1<TDomain> T;
     321              :                 typedef ConvectionDiffusionBase<TDomain> TBase;
     322            2 :                 string name = string("ConvectionDiffusionFractFV1").append(suffix);
     323            6 :                 reg.template add_class_<T, TBase >(name, grp)
     324            4 :                         .template add_constructor<void (*)(const char*,const char*)>("Function(s)#Subset(s)")
     325            4 :                         .add_method("set_fract_manager", static_cast<void (T::*)(SmartPtr<DegeneratedLayerManager<dim> >)>(&T::set_fract_manager), "Sets the fracture manager", "Deg. fracture manager")
     326            6 :                         .add_method("set_upwind", &T::set_upwind)
     327            6 :                         .add_method("set_aperture", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_aperture), "", "Fract. aperture")
     328            4 :                         .add_method("set_aperture", static_cast<void (T::*)(number)>(&T::set_aperture), "", "Fract. aperture")
     329              : #ifdef UG_FOR_LUA
     330            4 :                         .add_method("set_aperture", static_cast<void (T::*)(const char*)>(&T::set_aperture), "", "Fract. aperture")
     331            4 :                         .add_method("set_aperture", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_aperture), "", "Fract. aperture")
     332              : #endif
     333            4 :                         .add_method("set_ortho_velocity", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_ortho_velocity), "", "Orthogonal Velocity Field")
     334            4 :                         .add_method("set_ortho_velocity", static_cast<void (T::*)(number)>(&T::set_ortho_velocity), "", "Orthogonal Velocity Field")
     335              : #ifdef UG_FOR_LUA
     336            4 :                         .add_method("set_ortho_velocity", static_cast<void (T::*)(const char*)>(&T::set_ortho_velocity), "", "Orthogonal Velocity Field")
     337            4 :                         .add_method("set_ortho_velocity", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_ortho_velocity), "", "Orthogonal Velocity Field")
     338              : #endif
     339            4 :                         .add_method("set_ortho_diffusion", static_cast<void (T::*)(SmartPtr<CplUserData<number, dim> >)>(&T::set_ortho_diffusion), "", "Orthogonal Diffusion")
     340            4 :                         .add_method("set_ortho_diffusion", static_cast<void (T::*)(number)>(&T::set_ortho_diffusion), "", "Orthogonal Diffusion")
     341              : #ifdef UG_FOR_LUA
     342            4 :                         .add_method("set_ortho_diffusion", static_cast<void (T::*)(const char*)>(&T::set_ortho_diffusion), "", "Orthogonal Diffusion")
     343            4 :                         .add_method("set_ortho_diffusion", static_cast<void (T::*)(LuaFunctionHandle)>(&T::set_ortho_diffusion), "", "Orthogonal Diffusion")
     344              : #endif
     345            6 :                         .add_method("set_singular_sources_and_sinks", &T::set_sss_manager, "", "Sets the singular sources and sinks manager")
     346            6 :                         .add_method("singular_sources_and_sinks", &T::sss_manager, "", "Returns the singular sources and sinks manager")
     347            2 :                         .set_construct_as_smart_pointer(true);
     348            6 :                 reg.add_class_to_group(name, "ConvectionDiffusionFractFV1", tag);
     349              :         }
     350            2 : }
     351              : 
     352              : }; // end Functionality2d3d
     353              : 
     354              : // end group convection_diffusion
     355              : /// \}
     356              : 
     357              : } // end namespace ConvectionDiffusionPlugin
     358              : 
     359              : 
     360              : 
     361              : #ifndef UG_USE_PYBIND11
     362              : 
     363              : 
     364              : //! This function is called when the plugin is loaded.
     365              : extern "C"
     366            1 : void InitUGPlugin_ConvectionDiffusion(ug::bridge::Registry* reg, string grp)
     367              : {
     368            1 :         grp.append("/SpatialDisc/ElemDisc");
     369              :         typedef ConvectionDiffusionPlugin::Functionality Functionality;
     370              :         typedef ConvectionDiffusionPlugin::Functionality2d3d Functionality2d3d;
     371              : 
     372              :         try{
     373            2 :                 RegisterDimensionDependent<Functionality>(*reg,grp);
     374            2 :                 RegisterDomainDependent<Functionality>(*reg,grp);
     375            1 :                 RegisterDomain2d3dDependent<Functionality2d3d>(*reg,grp);
     376              :         }
     377            0 :         UG_REGISTRY_CATCH_THROW(grp);
     378            1 : }
     379              : 
     380              : #else // UG_USE_PYBIND11
     381              : 
     382              : template <typename TRegistry=ug::bridge::Registry>
     383              : void InitUGPlugin_ConvectionDiffusion_(TRegistry* reg, string grp)
     384              : {
     385              :         grp.append("/SpatialDisc/ElemDisc");
     386              :         typedef ConvectionDiffusionPlugin::Functionality Functionality;
     387              :         typedef ConvectionDiffusionPlugin::Functionality2d3d Functionality2d3d;
     388              : 
     389              :         try{
     390              :                 RegisterDimensionDependent<Functionality>(*reg,grp);
     391              :                 RegisterDomainDependent<Functionality, TRegistry>(*reg,grp);
     392              :                 RegisterDomain2d3dDependent<Functionality2d3d, TRegistry>(*reg,grp);
     393              :         }
     394              :         UG_REGISTRY_CATCH_THROW(grp);
     395              : }
     396              : 
     397              : 
     398              : //! This function is called when the plugin is loaded.
     399              : extern "C" void
     400              : InitUGPlugin_ConvectionDiffusion(ug::bridge::Registry* reg, string grp)
     401              : { InitUGPlugin_ConvectionDiffusion_(reg, grp); }
     402              : 
     403              : #ifdef UG_USE_PYBIND11
     404              : namespace ConvectionDiffusionPlugin{
     405              : 
     406              :         void Init(ug::pybind::Registry* reg, string grp)
     407              :         { InitUGPlugin_ConvectionDiffusion_<ug::pybind::Registry>(reg, grp); }
     408              : }
     409              : #endif
     410              : 
     411              : #endif // UG_USE_PYBIND11
     412              : 
     413              : }// namespace ug
        

Generated by: LCOV version 2.0-1