← Back to team overview

dolfin team mailing list archive

Re: Subdomain.mark

 

Quoting Murtazo Nazarov <murtazo@xxxxxxxxxxx>:

> Anders Logg wrote:
> > On Tue, Apr 01, 2008 at 02:32:17PM +0200, Murtazo Nazarov wrote:
> >   
> >> Anders Logg wrote:
> >>     
> >>> On Mon, Mar 31, 2008 at 07:15:23PM +0200, Murtazo Nazarov wrote:
> >>>   
> >>>       
> >>>> Anders Logg wrote:
> >>>>     
> >>>>         
> >>>>> On Mon, Mar 31, 2008 at 03:52:57PM +0200, Murtazo Nazarov wrote:
> >>>>>   
> >>>>>       
> >>>>>           
> >>>>>> Hi,
> >>>>>>
> >>>>>> I want to apply a boundary condition to the vertices on a boundary.
> For that I define:
> >>>>>>
> >>>>>> // Sub domain for MyBC                                                
>                             
> >>>>>> class MyBC_Boundary2D : public SubDomain
> >>>>>> {
> >>>>>> public:
> >>>>>>   bool inside(const real* p, bool on_boundary) const
> >>>>>>   {
> >>>>>>     return  on_boundary && (p[0] < xmax - bmarg) && (p[0] > xmin +
> bmarg);
> >>>>>>   }
> >>>>>> };
> >>>>>>
> >>>>>> Then I initialize:
> >>>>>>
> //-----------------------------------------------------------------------------
>                      
> >>>>>> void MyBC::init(SubDomain& sub_domain)
> >>>>>> { ...
> >>>>>>   mesh.init(0);
> >>>>>>   sub_domains = new MeshFunction<uint>(mesh, 0);
> >>>>>> ...}
> >>>>>>     
> >>>>>>         
> >>>>>>             
> >>>>> Do you remember to set everything to 1 (number of subdomains) here?
> >>>>>
> >>>>>   
> >>>>>       
> >>>>>           
> >>>> Yes I do:
> >>>>
> >>>>   // Mark everything as sub domain 
> >>>> 1                                                                
> >>>>   (*sub_domains) = 1;
> >>>>
> >>>>
> >>>>   // Mark the sub domain as sub domain 
> >>>> 0                                                            
> >>>>   sub_domain.mark(*sub_domains, 0);
> >>>>
> >>>> /murtazo
> >>>>     
> >>>>         
> >>> Then I have no idea. You just need to dig into the code and see what
> >>> goes wrong.
> >>>
> >>>   
> >>>       
> >> I think I found a mistake in Subdomain.mark(). The thing is bool 
> >> on_boundary should be defined
> >>  inside the loop for computing subdomain marker:
> >>
> >>   // Always false when not marking 
> >> facets                                                                    
>                
> >>
> >>   //bool on_boundary = 
> >> false;                                                                    
>                            
> >>
> >>
> >>   // Compute sub domain 
> >> markers                                                                   
>                           
> >>
> >>   for (MeshEntityIterator entity(mesh, dim); !entity.end(); ++entity)
> >>   {
> >>     bool on_boundary = false;
> >>     ...
> >>    }
> >>
> >> Otherwise, if you want to apply a boundary condition on vertices, it 
> >> becomes always
> >> true after once meeting a vertex on the boundary.
> >>
> >>
> >> It solved problem for me.
> >>     
> >
> > I'm not sure. If you are marking vertices, then they will never be on
> > the boundary, unless you are doing this for a 1-dimensional mesh
> > (which typically has just 2 boundary vertices). Only *facets* will
> > ever be marked as being on the boundary, so for a 2-dimensional mesh,
> > edges on the boundary will be marked as being on the boundary and for
> > a 3-dimensional mesh, faces on the boundary will be marked as being on
> > the boundary.
> >
> >   
> With the change I wrote I was able to mark vertices. Because,
> if I mark facets or faces, I miss some nodes in the boundary
> of the subdomain where I am applying my bc. That destroys
> the solution. Now, I apply my boundary only for vertices
> I need, and I do not miss any nodes. It work perfectly with
> the slip BC.

Sounds like a similar issue that we have for Discontinuous elements. Have you
tried to apply BCs using a geometrical (or pointwise) approach?

Kristian
 
> /murtazo
> 
> 
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
> 




Follow ups

References