From: Michael P. <pov...@in...> - 2007-06-07 13:47:58
|
> > Basically what's going wrong here is that uniformly_coarsen() was only > designed to be called following uniformly_refine(); if it's called on > an arbitrary mesh it can flag level 0 elements for coarsening, > flag elements for coarsening whose siblings can't be coarsened, etc. - > problems that _coarsen_elements() can't handle. It shouldn't be too > hard to extend uniformly_coarsen() to handle arbitrary meshes, though; > a single call to make_coarsening_compatible() before > _coarsen_elements() may be sufficient. > --- > Roy > I followed your suggestion. Namely, I put make_coarsening_compatible() before _coarsen_elements(). The coarsening worked. But when I tried to refine the mesh again for the next calculation, I have got errors: Bad element ID = 64, Bad neighbor ID = 19 ERROR: Active Element at level 1 with ancestor parent share ancestor neighbor at level 0 [0] src/mesh/mesh.C, line 559, compiled Jun 7 2007 at 09:39:33 Program received signal SIGABRT, Aborted. [Switching to Thread 1033350528 (LWP 1581)] 0xffffe410 in __kernel_vsyscall () (gdb) up #1 0x3cf20821 in raise () from /lib/tls/i686/cmov/libc.so.6 (gdb) up #2 0x3cf21fb9 in abort () from /lib/tls/i686/cmov/libc.so.6 (gdb) up #3 0x3ae1f0dd in Mesh::find_neighbors (this=0x85efca8) at src/mesh/mesh.C:559 559 error(); (gdb) up #4 0x3ae29552 in MeshBase::prepare_for_use (this=0x85efca8, skip_renumber_nodes_and_elements=false) at src/mesh/mesh_base.C:92 92 this->find_neighbors(); (gdb) up #5 0x3ae7353e in MeshRefinement::refine_and_coarsen_elements (this=0xaf8cba2c, maintain_level_one=true) at src/mesh/mesh_refinement.C:408 408 _mesh.prepare_for_use (); (gdb) up #6 0x3ca57ed7 in TunnelingCurrent::do_solve (this=0x80f4ec8) at TunnelingCurrent.C:283 283 mesh_refinement.refine_and_coarsen_elements(); My question: is it possible to use mesh object as I do, namely, adaptively refine and uniformally coarsen and do it several times? Or I should create a copy of a mesh? Thank you, Michael. |