33 #ifndef __H__UG__LIB_DISC__FUNCTION_SPACE__METRIC_SPACES_H_
34 #define __H__UG__LIB_DISC__FUNCTION_SPACE__METRIC_SPACES_H_
56 template<
typename TVector>
64 virtual double norm(TVector &x)
67 virtual double distance(TVector& x, TVector& y)
79 template<
typename TGr
idFunction>
92 virtual double norm(TGridFunction& x) = 0;
93 virtual double norm2(TGridFunction& x) = 0;
98 virtual double distance(TGridFunction& x, TGridFunction& y) = 0;
99 virtual double distance2(TGridFunction& x, TGridFunction& y) = 0;
109 TGridFunction* gfX=
dynamic_cast< TGridFunction*
>(&x);
110 UG_ASSERT(gfX!=NULL,
"Huhh: GridFunction required!");
116 {
return distance(
static_cast<TGridFunction &
>(x),
static_cast<TGridFunction &
>(y)); }
122 {
return std::string(
"IGridFunctionSpace"); }
125 template<
typename TGr
idFunction>
131 virtual double norm(TGridFunction& x)
134 virtual double norm2(TGridFunction& x)
135 {
double n = this->
norm(x);
return n*n; }
137 virtual double distance(TGridFunction& x, TGridFunction& y)
140 virtual double distance2(TGridFunction& x, TGridFunction& y)
141 {
double d = this->
distance(x,y);;
return d*d;}
147 template <
typename W>
189 template <
typename TGr
idFunction>
214 virtual double norm(TGridFunction& uFine)
215 {
return sqrt(
norm2(uFine)); }
218 virtual double distance(TGridFunction& uFine, TGridFunction& uCoarse)
219 {
return sqrt(
distance2(uFine, uCoarse)); }
221 virtual double norm2(TGridFunction& uFine) = 0;
222 virtual double distance2(TGridFunction& uFine, TGridFunction& uCoarse) = 0;
229 std::stringstream ss;
232 ss << this->m_fctNames <<
", " << this->m_ssNames <<
", " << this->m_quadorder
233 <<
", type=" << std::endl;
236 ss << this->m_fctNames <<
", (no name), " << this->m_quadorder
237 <<
", type=" << std::endl;
246 template <
typename TGr
idFunction>
259 virtual double norm2(TGridFunction& uFine)
266 UG_CATCH_THROW(
"Could not convert function names to function indices.");
273 UG_CATCH_THROW(
"Could not convert subset names to subset indices.");
281 const size_t sgSz = sg.
size();
282 for (
size_t i = 0; i < sgSz; ++i)
285 if (dd->max_dofs(
VERTEX, si)) add_norm_values<Vertex>(sum, uFine, dd, sg[i], fg);
286 if (dd->max_dofs(
EDGE, si)) add_norm_values<Edge>(sum, uFine, dd, sg[i], fg);
287 if (dd->max_dofs(
FACE, si)) add_norm_values<Face>(sum, uFine, dd, sg[i], fg);
288 if (dd->max_dofs(
VOLUME, si)) add_norm_values<Volume>(sum, uFine, dd, sg[i], fg);
302 virtual double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
306 "GridFunctionComponentSpace::distance2: GF1 DoF distro is not the same as for GF2.\n"
307 "This case is not implemented.");
312 UG_CATCH_THROW(
"Could not convert function names to function indices.");
319 UG_CATCH_THROW(
"Could not convert subset names to subset indices.");
327 const size_t sgSz = sg.
size();
328 for (
size_t i = 0; i < sgSz; ++i)
331 if (dd->max_dofs(
VERTEX, si)) add_distance_values<Vertex>(sum, uFine, uCoarse, dd, sg[i], fg);
332 if (dd->max_dofs(
EDGE, si)) add_distance_values<Edge>(sum, uFine, uCoarse, dd, sg[i], fg);
333 if (dd->max_dofs(
FACE, si)) add_distance_values<Face>(sum, uFine, uCoarse, dd, sg[i], fg);
334 if (dd->max_dofs(
VOLUME, si)) add_distance_values<Volume>(sum, uFine, uCoarse, dd, sg[i], fg);
349 template <
typename TBaseElem>
353 const TGridFunction& uFine,
354 const TGridFunction& uCoarse,
369 std::vector<DoFIndex> vInd;
370 for (; iter != iterEnd; ++iter)
383 for (
size_t fi = 0; fi < nFct; ++fi)
385 dd->inner_dof_indices(elem, fg[fi], vInd);
387 const size_t nDof = vInd.size();
388 for (
size_t dof = 0; dof < nDof; ++dof)
398 template <
typename TBaseElem>
402 const TGridFunction& uFine,
417 std::vector<DoFIndex> vInd;
418 for (; iter != iterEnd; ++iter)
431 for (
size_t fi = 0; fi < nFct; ++fi)
433 dd->inner_dof_indices(elem, fg[fi], vInd);
435 const size_t nDof = vInd.size();
436 for (
size_t dof = 0; dof < nDof; ++dof)
450 template <
typename TGr
idFunction>
480 std::stringstream ss;
481 ss <<
"TimeDependentSpace for " << std::endl;
493 template <
typename TGr
idFunction>
532 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
541 template <
typename TGr
idFunction>
558 L2QuotientSpace(
const char *fctNames,
int order,
double weight,
const char* ssNames=0)
581 SPUserData spConst=
make_sp(
new MyConstUserData(1.0));
585 std::cerr <<
"Average:=" << uAvg <<
"/" << Meas <<
" = " << uAvg/Meas << std::endl;
586 SPUserData spAvg =
make_sp(
new MyConstUserData(uAvg/Meas));
593 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
598 SPUserData spConst=
make_sp(
new MyConstUserData(1.0));
603 std::cerr <<
"Average:=(" << avgFine <<
"-" << avgCoarse<<
")/" << Meas <<
" = " << (avgFine-avgCoarse)/Meas << std::endl;
607 (avgFine-avgCoarse)/Meas);
616 template <
typename TGr
idFunction>
656 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
738 template <
typename TGr
idFunction>
741 public IObjectWithWeights<typename H1EnergyDistIntegrand<TGridFunction>::weight_type >
788 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
804 template <
typename TGr
idFunction>
824 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
835 template <
typename TGr
idFunction>
851 double norm(TGridFunction& uFine)
852 {
return(sqrt(
norm2(uFine))); }
861 double snorm2 = it->first->norm2(uFine);
862 unorm2 += it->second * snorm2;
863 UG_LOG(
"composite-norm2:\t" << snorm2 <<
"\t*\t" << it->second
864 <<
"\t=\t" << it->second * snorm2 << std::endl);
866 UG_LOG(
"composite-norm2-final:\t" << unorm2 << std::endl);
871 double distance2(TGridFunction& uFine, TGridFunction& uCoarse)
877 double sdist2 = it->first->distance2(uFine, uCoarse);
878 unorm2 += it->second * sdist2;
879 UG_LOG(
"composite-dist2:\t" << sdist2 <<
"\t*\t" << it->second
880 <<
"\t=\t" << it->second * sdist2 << std::endl);
882 UG_LOG(
"composite-dist2-final:\t" << unorm2 << std::endl);
887 double distance(TGridFunction& uFine, TGridFunction& uCoarse)
888 {
return sqrt(
distance2(uFine, uCoarse)); }
901 std::stringstream ss;
902 ss <<
"CompositeSpace:" << std::endl;
906 { ss << it->first->config_string(); }
919 if (spSpaceT.
valid()) spSpaceT->update_time_data(t);
930 if (spSpaceT.
valid())
return true;
bool valid() const
returns true if the pointer is valid, false if not.
Definition: smart_pointer.h:206
Definition: pcl_process_communicator.h:70
void allreduce(const void *sendBuf, void *recBuf, int count, DataType type, ReduceOperation op) const
performs MPI_Allreduce on the processes of the communicator.
Definition: pcl_process_communicator.cpp:318
Definition: metric_spaces.h:127
virtual double distance(TGridFunction &x, TGridFunction &y)
distance (for grid functions)
Definition: metric_spaces.h:137
TGridFunction::vector_type vector_type
Definition: metric_spaces.h:128
virtual ~AlgebraicSpace()
Definition: metric_spaces.h:129
virtual double distance2(TGridFunction &x, TGridFunction &y)
Definition: metric_spaces.h:140
virtual double norm2(TGridFunction &x)
Definition: metric_spaces.h:134
virtual double norm(TGridFunction &x)
norm (for grid functions)
Definition: metric_spaces.h:131
Defines a composite space, (i.e., additive composition from other spaces)
Definition: metric_spaces.h:837
IGridFunctionSpace< TGridFunction > base_type
Definition: metric_spaces.h:839
TimeDependentSpace< TGridFunction > time_dependent_obj_type
Definition: metric_spaces.h:841
std::string config_string() const
print config string
Definition: metric_spaces.h:899
double norm(TGridFunction &uFine)
norm (for grid functions)
Definition: metric_spaces.h:851
double norm2(TGridFunction &uFine)
Definition: metric_spaces.h:855
bool is_time_dependent() const
Check, if any object is time-dependent.
Definition: metric_spaces.h:924
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
Definition: metric_spaces.h:871
std::vector< weighted_obj_type > m_spWeightedSubspaces
Definition: metric_spaces.h:939
void add(SmartPtr< obj_type > spSubSpace)
add space to composite (with weight 1.0)
Definition: metric_spaces.h:891
std::pair< SmartPtr< obj_type >, number > weighted_obj_type
Definition: metric_spaces.h:842
void update_time_data(number t)
Forward update to all members.
Definition: metric_spaces.h:913
const std::vector< weighted_obj_type > & get_subspaces() const
Definition: metric_spaces.h:935
void add(SmartPtr< obj_type > spSubSpace, number sigma)
add space to composite (with variable weight)
Definition: metric_spaces.h:895
double distance(TGridFunction &uFine, TGridFunction &uCoarse)
Definition: metric_spaces.h:887
CompositeSpace()
Definition: metric_spaces.h:844
IComponentSpace< TGridFunction > obj_type
Definition: metric_spaces.h:840
constant matrix user data
Definition: const_user_data.h:232
constant scalar user data
Definition: const_user_data.h:153
Definition: function_group.h:52
void add(size_t fct)
adds a function by id to this group
Definition: function_group.cpp:79
size_t size() const
number of functions in this group
Definition: function_group.h:116
Definition: metric_spaces.h:249
virtual double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
Definition: metric_spaces.h:302
GridFunctionComponentSpace(const char *fctNames, const char *ssNames)
Definition: metric_spaces.h:254
void add_distance_values(number &sum, const TGridFunction &uFine, const TGridFunction &uCoarse, ConstSmartPtr< DoFDistribution > dd, int si, const FunctionGroup &fg) const
Definition: metric_spaces.h:351
virtual double norm2(TGridFunction &uFine)
Definition: metric_spaces.h:259
void add_norm_values(number &sum, const TGridFunction &uFine, ConstSmartPtr< DoFDistribution > dd, int si, const FunctionGroup &fg) const
Definition: metric_spaces.h:400
GridFunctionComponentSpace(const char *fctNames)
Definition: metric_spaces.h:251
virtual ~GridFunctionComponentSpace()
Definition: metric_spaces.h:257
Definition: metric_spaces.h:807
~H1ComponentSpace()
Definition: metric_spaces.h:814
H1ComponentSpace(const char *fctNames, const char *ssNames, int order)
Definition: metric_spaces.h:813
H1ComponentSpace(const char *fctNames)
Definition: metric_spaces.h:811
double norm2(TGridFunction &uFine)
norm (for grid functions)
Definition: metric_spaces.h:820
H1ComponentSpace(const char *fctNames, int order)
Definition: metric_spaces.h:812
IComponentSpace< TGridFunction > base_type
Definition: metric_spaces.h:809
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
norm (for grid functions)
Definition: metric_spaces.h:824
Definition: metric_spaces.h:742
IObjectWithWeights< weight_type > weighted_obj_type
Definition: metric_spaces.h:746
H1SemiDistIntegrand< TGridFunction >::weight_type weight_type
Definition: metric_spaces.h:745
H1EnergyComponentSpace(const char *fctNames, int order, ConstSmartPtr< weight_type > spWeight, const char *ssNames=0)
Definition: metric_spaces.h:760
double norm2(TGridFunction &uFine)
Definition: metric_spaces.h:776
SmartPtr< velocity_type > m_spVelocity
Definition: metric_spaces.h:799
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
Definition: metric_spaces.h:788
IComponentSpace< TGridFunction > base_type
Definition: metric_spaces.h:744
UserData< MathVector< dim >, dim > velocity_type
Definition: metric_spaces.h:749
static const int dim
Definition: metric_spaces.h:748
~H1EnergyComponentSpace()
DTOR.
Definition: metric_spaces.h:767
H1EnergyComponentSpace(const char *fctNames)
Definition: metric_spaces.h:751
H1EnergyComponentSpace(const char *fctNames, int order)
Definition: metric_spaces.h:754
H1EnergyComponentSpace(const char *fctNames, int order, number weight, const char *ssNames=0)
Definition: metric_spaces.h:757
void set_velocity(SmartPtr< velocity_type > spVelocity)
Definition: metric_spaces.h:795
Definition: metric_spaces.h:620
H1SemiDistIntegrand< TGridFunction >::weight_type weight_type
Definition: metric_spaces.h:623
IComponentSpace< TGridFunction > base_type
Definition: metric_spaces.h:622
ConstSmartPtr< weight_type > m_spWeight
Definition: metric_spaces.h:167
H1SemiComponentSpace(const char *fctNames, int order, ConstSmartPtr< weight_type > spWeight, const char *ssNames=0)
Definition: metric_spaces.h:636
IObjectWithWeights< weight_type > weighted_obj_type
Definition: metric_spaces.h:624
H1SemiComponentSpace(const char *fctNames, int order, const char *ssNames, ConstSmartPtr< weight_type > spWeight)
Definition: metric_spaces.h:639
H1SemiComponentSpace(const char *fctNames, int order)
Definition: metric_spaces.h:630
~H1SemiComponentSpace()
DTOR.
Definition: metric_spaces.h:643
H1SemiComponentSpace(const char *fctNames, int order, number weight, const char *ssNames=0)
Definition: metric_spaces.h:633
H1SemiComponentSpace(const char *fctNames)
Definition: metric_spaces.h:627
double norm2(TGridFunction &uFine)
Definition: metric_spaces.h:652
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
Definition: metric_spaces.h:656
Abstract base class for (algebraic) vectors.
Definition: metric_spaces.h:58
virtual double norm(TVector &x)
euclidean norm (default)
Definition: metric_spaces.h:64
virtual double distance(TVector &x, TVector &y)
Definition: metric_spaces.h:67
virtual ~IBanachSpace()
Definition: metric_spaces.h:61
Estimate the error (based on the difference between two grid functions)
Definition: metric_spaces.h:192
virtual std::string config_string() const
print config string
Definition: metric_spaces.h:227
int m_quadorder
Definition: metric_spaces.h:196
IGridFunctionSpace< TGridFunction > base_type
Definition: metric_spaces.h:199
virtual double distance2(TGridFunction &uFine, TGridFunction &uCoarse)=0
IComponentSpace(const char *fctNames, int order)
Definition: metric_spaces.h:205
IComponentSpace(const char *fctNames, const char *ssNames, int order)
Definition: metric_spaces.h:208
IComponentSpace(const char *fctNames)
Definition: metric_spaces.h:202
virtual double norm(TGridFunction &uFine)
norm (for grid functions)
Definition: metric_spaces.h:214
virtual double norm2(TGridFunction &uFine)=0
virtual ~IComponentSpace()
Definition: metric_spaces.h:211
std::string m_fctNames
Definition: metric_spaces.h:194
virtual double distance(TGridFunction &uFine, TGridFunction &uCoarse)
distance (for grid functions)
Definition: metric_spaces.h:218
const char * m_ssNames
Definition: metric_spaces.h:195
static const int dim
Definition: metric_spaces.h:200
Abstract base class for grid functions.
Definition: metric_spaces.h:82
virtual double distance(vector_type &x, vector_type &y)
OVERRIDE distance (for vectors)
Definition: metric_spaces.h:115
virtual ~IGridFunctionSpace()
DTOR.
Definition: metric_spaces.h:89
virtual std::string config_string() const
Definition: metric_spaces.h:121
virtual double distance2(TGridFunction &x, TGridFunction &y)=0
virtual double norm(vector_type &x)
OVERRIDE norm (for vectors)
Definition: metric_spaces.h:107
TGridFunction grid_function_type
Definition: metric_spaces.h:86
virtual double norm(TGridFunction &x)=0
norm (for grid functions)
TGridFunction::vector_type vector_type
Definition: metric_spaces.h:85
virtual double distance(TGridFunction &x, TGridFunction &y)=0
distance (for grid functions)
virtual double scaling() const
Definition: metric_spaces.h:118
virtual double norm2(TGridFunction &x)=0
Definition: metric_spaces.h:149
W weight_type
Definition: metric_spaces.h:151
ConstSmartPtr< weight_type > m_spWeight
Definition: metric_spaces.h:167
void set_weight(ConstSmartPtr< weight_type > spWeight)
for weighted norms
Definition: metric_spaces.h:160
IObjectWithWeights()
Definition: metric_spaces.h:153
IObjectWithWeights(ConstSmartPtr< weight_type > spW)
Definition: metric_spaces.h:156
ConstSmartPtr< weight_type > get_weight()
Definition: metric_spaces.h:163
Definition: metric_spaces.h:497
L2DistIntegrand< TGridFunction >::weight_type weight_type
Definition: metric_spaces.h:500
IComponentSpace< TGridFunction > base_type
Definition: metric_spaces.h:499
L2ComponentSpace(const char *fctNames, int order, double weight, const char *ssNames=0)
Definition: metric_spaces.h:510
L2ComponentSpace(const char *fctNames, int order, ConstSmartPtr< weight_type > spWeight, const char *ssNames=0)
Definition: metric_spaces.h:513
L2ComponentSpace(const char *fctNames, int order)
Definition: metric_spaces.h:507
~L2ComponentSpace()
DTOR.
Definition: metric_spaces.h:517
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
distance (for grid functions)
Definition: metric_spaces.h:532
IObjectWithWeights< weight_type > weighted_obj_type
Definition: metric_spaces.h:501
L2ComponentSpace(const char *fctNames)
CTOR.
Definition: metric_spaces.h:504
double norm2(TGridFunction &uFine)
norm (for grid functions)
Definition: metric_spaces.h:528
Definition: metric_spaces.h:545
L2QuotientSpace(const char *fctNames, int order)
Definition: metric_spaces.h:555
~L2QuotientSpace()
DTOR.
Definition: metric_spaces.h:565
IComponentSpace< TGridFunction > base_type
Definition: metric_spaces.h:547
L2QuotientSpace(const char *fctNames)
CTOR.
Definition: metric_spaces.h:552
L2QuotientSpace(const char *fctNames, int order, ConstSmartPtr< weight_type > spWeight, const char *ssNames=0)
Definition: metric_spaces.h:561
double distance2(TGridFunction &uFine, TGridFunction &uCoarse)
distance (for grid functions)
Definition: metric_spaces.h:593
double norm2(TGridFunction &u)
norm (for grid functions)
Definition: metric_spaces.h:576
IObjectWithWeights< weight_type > weighted_obj_type
Definition: metric_spaces.h:549
L2DistIntegrand< TGridFunction >::weight_type weight_type
Definition: metric_spaces.h:548
L2QuotientSpace(const char *fctNames, int order, double weight, const char *ssNames=0)
Definition: metric_spaces.h:558
Definition: multi_grid.h:72
TChild * get_child(TElem *elem, size_t ind) const
returns the i-th child of the given child-type
Definition: multi_grid.h:268
size_t num_children(TElem *elem) const
returns the number of children of the given child-type
Definition: multi_grid.h:225
Group of subsets.
Definition: subset_group.h:51
size_t size() const
number of subsets in this group
Definition: subset_group.h:122
void add_all()
select all subsets of underlying subset handler
Definition: subset_group.cpp:133
void add(int si)
adds a subset by number to this group
Definition: subset_group.cpp:64
Const iterator to traverse the surface of a multi-grid hierarchy.
Definition: surface_view.h:237
Represents the surface view of a multi-grid hierarchy.
Definition: surface_view.h:61
bool is_contained(TGeomObj *obj, const GridLevel &gl, SurfaceState validStates=ALL) const
returns if the element is contained in the surface view
Definition: surface_view_impl.hpp:442
@ SURFACE_RIM
Definition: surface_view.h:94
@ ALL
Definition: surface_view.h:102
@ SHADOW_RIM_COPY
Definition: surface_view.h:95
Wrapper class for time dependence.
Definition: metric_spaces.h:453
void update_time_data(number tScale)
characteristic time
Definition: metric_spaces.h:474
virtual ~TimeDependentSpace()
DTOR.
Definition: metric_spaces.h:463
double scaling() const
scaling (OVERRIDE)
Definition: metric_spaces.h:470
IGridFunctionSpace< TGridFunction > base_type
Definition: metric_spaces.h:455
SmartPtr< comp_space_type > m_spSpatialSpace
Definition: metric_spaces.h:487
TimeDependentSpace(SmartPtr< comp_space_type > spSpace, number tScale)
time dependent CTOR
Definition: metric_spaces.h:459
IComponentSpace< TGridFunction > comp_space_type
Definition: metric_spaces.h:456
number m_tScale
Definition: metric_spaces.h:488
std::string config_string() const
print config string
Definition: metric_spaces.h:478
Type based UserData.
Definition: user_data.h:143
For arbitrary UserData (of type TData), this class defines the integrand .
Definition: integrate.h:557
#define PCL_RO_SUM
Definition: pcl_methods.h:63
int NumProcs()
returns the number of processes
Definition: pcl_base.cpp:91
base_type::TBaseElem TBaseElem
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition: smart_pointer.h:90
#define UG_ASSERT(expr, msg)
Definition: assert.h:70
#define UG_CATCH_THROW(msg)
Definition: error.h:64
#define UG_LOG(msg)
Definition: log.h:367
#define UG_COND_THROW(cond, msg)
UG_COND_THROW(cond, msg) : performs a UG_THROW(msg) if cond == true.
Definition: error.h:61
double number
Definition: types.h:124
number L2Distance2(TGridFunction &spGridFct1, const char *cmp1, TGridFunction &spGridFct2, const char *cmp2, int quadOrder, const char *subsets, ConstSmartPtr< typename L2Integrand< TGridFunction >::weight_type > spWeight, number avgDist12=0.0)
computes the squared l2 distance between two functions
Definition: integrate.h:1911
number & DoFRef(TMatrix &mat, const DoFIndex &iInd, const DoFIndex &jInd)
Definition: multi_index.h:276
number L2Norm2(TGridFunction &u, const char *cmp, int quadOrder, const char *subsets, ConstSmartPtr< typename L2Integrand< TGridFunction >::weight_type > spWeight)
Definition: integrate.h:1680
number IntegrateSubsets(IIntegrand< number, TGridFunction::dim > &spIntegrand, TGridFunction &spGridFct, const char *subsets, int quadOrder, std::string quadType=std::string())
Definition: integrate.h:393
void TokenizeTrimString(const string &str, vector< string > &vToken, const char delimiter)
Definition: string_util.cpp:83
@ VOLUME
Definition: grid_base_objects.h:63
@ VERTEX
Definition: grid_base_objects.h:60
@ EDGE
Definition: grid_base_objects.h:61
@ FACE
Definition: grid_base_objects.h:62
number L2Error(SmartPtr< UserData< number, TGridFunction::dim > > spExactSol, TGridFunction &gridFct, const char *cmp, number time, int quadOrder, const char *subsets)
computes the l2 error function on the whole domain or on some subsets
Definition: integrate.h:1185
number Integral(SmartPtr< UserData< number, TGridFunction::dim > > spData, TGridFunction &spGridFct, const char *subsets, number time, int quadOrder, std::string quadType)
Definition: integrate.h:856
SmartPtr< T, FreePolicy > make_sp(T *inst)
returns a SmartPtr for the passed raw pointer
Definition: smart_pointer.h:836
function ProblemDisc new(problemDesc, dom)