Hi,

I've tried to get this running, but still have some problems...

What I'm trying to do is:

1) Refine the mesh
2) Find and store hanging nodes
3) Move points on boundary to the "real" boundary
then I do a do{...}While() including
4) Check that Jacobian>0, if not switch node 0 and 2 (the pointers in the elem)
   I'm not sure this doesn't mess up something for neighbors..
5) Move the hanging nodes
6) If all Jacobian's>0 and all hanging nodes are in between there parents, go
   on...

This works for a few iterations, then when looking for hanging nodes, i.e. the
first thing I do after coursing and refining there is an element that has 
a neighbor with level==0 but that is not real... In the debugger

  Refining the mesh...
[0] /usr/local/libmesh/include/geom/remote_elem.h, line 94, compiled Oct 11 
2009 at 15:02:42
terminate called after throwing an instance of 'libMesh::LogicError'
  what():  Error in libMesh internal logic

Program received signal SIGABRT, Aborted.
0x00007fff80dcdff6 in __kill ()
(gdb) up
#1  0x00007fff80e6f072 in abort ()
(gdb) 
#2  0x00007fff811185d2 in __gnu_cxx::__verbose_terminate_handler ()
(gdb) 
#3  0x00007fff81116ae1 in __cxxabiv1::__terminate ()
(gdb) 
#4  0x00007fff81116b16 in std::terminate ()
(gdb) 
#5  0x00007fff81116bfc in __cxa_throw ()
(gdb) 
#6  0x000000010282d7b4 in RemoteElem::n_sides ()
(gdb) 
#7  0x000000010189880e in Elem::which_neighbor_am_i (this=0x101903b80, e=<value 
temporarily unavailable, due to optimizations>) at elem.h:1293
1293      for (unsigned int s=0; s<this->n_neighbors(); s++)
(gdb) print *neigh
No symbol "neigh" in current context.
(gdb) up
#8  0x0000000101889418 in AGATAGeFEM::libMESH::find_hanging_nodes_and_parents 
(mesh=<value temporarily unavailable, due to optimizations>, 
hanging_nod...@0x7fff5fbfd4f0) at ../../libs/libmesh/LaplaceProblem.cc:339
warning: Source file is more recent than executable.
339                   neigh->which_neighbor_am_i(ancestor);
(gdb) print *neigh
$1 = {
  <ReferenceCountedObject<Elem>> = {
    <ReferenceCounter> = {
      _vptr$ReferenceCounter = 0x102d0ad90, 
      static _n_objects = {
        _val = 605251
      }, 
      static _mutex = {<No data fields>}
    }, <No data fields>}, 
  <DofObject> = {
    <ReferenceCountedObject<DofObject>> = {
      <ReferenceCounter> = {
        _vptr$ReferenceCounter = 0x102d0af08, 
        static _n_objects = {
          _val = 605251
        }, 
        static _mutex = {<No data fields>}
      }, <No data fields>}, 
    members of DofObject: 
    old_dof_object = 0x0, 
    static invalid_id = 4294967295, 
    static invalid_processor_id = 65535, 
    _id = 4294967295, 
    _processor_id = 65535, 
    _n_systems = 0 '\0', 
    _n_v_comp = 0x0, 
    _dof_ids = 0x0
  }, 
  members of Elem: 
  static type_to_n_nodes_map = {2, 3, 4, 3, 6, 4, 8, 9, 4, 10, 8, 20, 27, 6, 
15, 18, 5, 2, 4, 6, 8, 16, 18, 6, 16, 1, 0}, 
  _nodes = 0x0, 
  _neighbors = 0x0, 
  _parent = 0x0, 
  _children = 0x0, 
  _rflag = 1 '\001', 
  _pflag = 1 '\001', 
  _p_level = 0 '\0', 
  _sbd_id = 0 '\0', 
  static _bp1 = 65449, 
  static _bp2 = 48661
}


So, any ideas? Bugs in the my implementation of logical issues?



cheers


Joa  

On Wed, Oct 14, 2009 at 05:15:26PM -0500, Roy Stogner wrote:
> 
> On Wed, 14 Oct 2009, Derek Gaston wrote:
> 
> >I thought I ran into similar problems when I did mesh redistribution /
> >smoothing + adaptivity.   I was able to go in and "fix" the hanging
> >nodes somehow... But I don't remember where I did it ( I thought it
> >was down inside the library and I committed it back).
> 
> Heh, and I thought your solution to that was to just do the adaptivity
> first and the redistribution second.  ;-)
> 
> >I'm not near a computer right now where I can go look at what I did
> >(I'm traveling this week)... But I bet if you look back a few years
> >(2007?) you might see a checkin from me referencing it.
> 
> Aha!  MeshTools::find_hanging_nodes_and_parents() looks like it's
> exactly the trick we'd need.
> 
> Call that function, get the hanging_nodes map.
> 
> Do
>   hanging_node_moved = false
>   Loop over hanging_nodes
>     If a node isn't already in between its parents
>       move it
>       hanging_node_moved = true
> While(hanging_node_moved == true)
> 
> The loop probably isn't the most efficient way to handle recursive
> constraints (maybe a depth-first descent into hanging_nodes at each
> entry?) but it would work.
> ---
> Roy

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to