--- Begin Message ---
------------------------------------------------------------
revno: 5663
committer: Marie E. Rognes <meg@xxxxxxxxx>
branch nick: dolfin-main
timestamp: Sun 2011-02-13 21:50:39 +0100
message:
Add init to child after mesh refinement (why is this needed?!) and
allow more general DirichletBCs in refinement.
modified:
dolfin/adaptivity/AdaptiveVariationalSolver.cpp
dolfin/adaptivity/refine.cpp
--
lp:~dolfin-core/dolfin/rognes
https://code.launchpad.net/~dolfin-core/dolfin/rognes
Your team DOLFIN Core Team is subscribed to branch lp:~dolfin-core/dolfin/rognes.
To unsubscribe from this branch go to https://code.launchpad.net/~dolfin-core/dolfin/rognes/+edit-subscription
=== modified file 'dolfin/adaptivity/AdaptiveVariationalSolver.cpp'
--- dolfin/adaptivity/AdaptiveVariationalSolver.cpp 2011-02-09 19:37:05 +0000
+++ dolfin/adaptivity/AdaptiveVariationalSolver.cpp 2011-02-13 20:50:39 +0000
@@ -4,7 +4,7 @@
// Modified by Anders Logg, 2010-2011.
//
// First added: 2010-08-19
-// Last changed: 2011-02-09
+// Last changed: 2011-02-13
#include <dolfin/common/utils.h>
#include <dolfin/common/Variable.h>
@@ -75,10 +75,6 @@
// Extract function space and mesh
const FunctionSpace& V(u.function_space());
const Mesh& mesh(V.mesh());
-
- // FIXME: Init mesh (should only initialize required stuff.)
- // FIXME: Remove this, should not be needed!
- mesh.init();
end();
//--- Stage 1: Estimate error ---
@@ -125,6 +121,7 @@
//--- Stage 4: Refine mesh ---
begin("Stage %d.4: Refining mesh...", i);
refine(mesh, markers);
+ mesh.child().init();
if (parameters["plot_mesh"])
plot(mesh.child(), "Refined mesh");
end();
=== modified file 'dolfin/adaptivity/refine.cpp'
--- dolfin/adaptivity/refine.cpp 2011-02-13 18:51:20 +0000
+++ dolfin/adaptivity/refine.cpp 2011-02-13 20:50:39 +0000
@@ -301,18 +301,28 @@
boost::shared_ptr<const FunctionSpace> V = bc.function_space_ptr();
refine(*V, refined_mesh);
- // Refine value
- const Function& g(dynamic_cast<const Function&>(bc.value()));
- refine(g, refined_mesh);
-
// Extract but keep sub-domain
boost::shared_ptr<const SubDomain> domain = bc.user_sub_domain_ptr();
+
+ // Refine value
+ const Function* g = dynamic_cast<const Function*>(bc.value_ptr().get());
+
+ boost::shared_ptr<DirichletBC> refined_bc;
+
// Create refined boundary condition
- boost::shared_ptr<DirichletBC>
- refined_bc(new DirichletBC(V->child_shared_ptr(), g.child_shared_ptr(),
- domain));
-
+ if (g != 0)
+ {
+ refine(*g, refined_mesh);
+ refined_bc.reset(new DirichletBC(V->child_shared_ptr(),
+ g->child_shared_ptr(),
+ domain));
+ } else
+ {
+ refined_bc.reset(new DirichletBC(V->child_shared_ptr(),
+ bc.value_ptr(),
+ domain));
+ }
// Set parent / child
set_parent_child(bc, refined_bc);
--- End Message ---