A Navaei wrote:
> [snip]
>>>> Function should not change the FunctionSpace (that's why FunctionSpace is
>>>> const). FunctionSpace shouldn't depend on the data and its size should be
>>>> defined when creating the FunctionSpace.
>>> The same applies for FunctionSpace as its member variables are private
>>> and the public accessors are read-only which. Consider a sub-class
>>> ImageFunctionSpace:FunctionSpace, with a constructor like:
>>>
>>> ImageFunctionSpace(ImageType *imagePtr)
>>>
>>> where imagePtr is supposed to initialise FunctionSpace::_mesh using
>>> the image size, and then _dofmaps itself is initialised using _mesh.
>>> How would you do that considering the restrictions?
>>>
>> The FunctionSpace has pointers to the mesh, etc. You just need to create
>> your mesh and pass it to the FunctionSpace constructor. What else you then
>> do with the mesh, etc is up to you.
> 
> That can be done _outside_ of a sub-class. A sub-class of
> FunctionSpace doesn't have a control over _mesh of its own parent
> FunctionSpace. The following example may make this more clear:
> 
> template <typename TImage>
> class DolfinImageFunctionSpace : public dolfin::FunctionSpace
> {
> public:
>         // just some itk typedefs -- ignore
>       typedef TImage ImageType;
>       typedef typename ImageType::PixelType PixelType;
>       typedef typename ImageType::SizeType SizeType;
> 
>         // .. and some dolfin typedefs -- ignore
>       typedef typename std::tr1::shared_ptr<const dolfin::Mesh> 
> MeshConstPointerType;
>       typedef typename std::tr1::shared_ptr<const dolfin::FiniteElement>
> ElementConstPointerType;
>       typedef typename std::tr1::shared_ptr<const dolfin::DofMap>
> DofMapConstPointerType;
> 
>         // the ctor
>       DolfinImageFunctionSpace(ImageType* imageData,
>                                               MeshConstPointerType mesh,
>                                               ElementConstPointerType element,
>                                               DofMapConstPointerType dofmap) :
>       dolfin::FunctionSpace(mesh, element, dofmap)
>       {
>               SizeType imageSize = imageData->GetBufferedRegion().GetSize();
> 
>                 // here, we whish to call some thing like:
>                 // _mesh = UnitSquare(imageSize[0], imageSize[1]);
>                 // but it's private and the accessor is read-only.
>       };
> }
>

This breaks the concept of a function space. A function space is defined 
in terms of a mesh (and other things). A function space does not define 
its mesh.

It looks to me like the class that you're creating should be called 
something like

   DolfinImageProblem,

which can create its own Mesh, FunctionSpace and other objects.

Garth

> 
> -Ali

_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to