Trying sending the simplest possible piece of code (simpler than that
below) that compiles and reproduces the error to the mailing list.
Garth
Chong Luo wrote:
> After some debuggin, I have found a weird problem. Let me try to explain.
>
> I've modified /dolfin-0.9.1/dolfin/fem/DirichletBC.cpp to add the
> following function to check the dimension of the function space.
> void DirichletBC::dim() const
> {
> cout << "dim of the subspace is " << V->dim() << endl;
> }
>
> I have defined a NonlinearProblem of my own "class MyNonlinearProblem :
> public NonlinearProblem", which have two pointers to DirichletBC.
> // Pointers to boundary conditions
> DirichletBC* bcDsp;
> DirichletBC* bcOrt;
> I've made both of them public, so that they are available for debugging.
>
> Here is how I created bcDsp and bcOrt in the constructor of class
> MyNonlinearProblem:
> // Create boundary conditions
> MeshFunction<unsigned int> sub_domains(mesh, mesh.topology().dim()
> -1);
> sub_domains = 2;
> dirichlet_boundary.mark(sub_domains, 5);
> // Define sub systems for boundary
> std::vector<unsigned int> u12lev(3);
> for(int i=0; i<3; ++i){
> u12lev[i] = 0;
> }
> SubSpace u12(*V, u12lev);
> bcDsp = new DirichletBC(u12, uD, sub_domains, 5);
> std::vector<unsigned int> n12lev(3);
> for(int i=0; i<3; ++i){
> n12lev[i] = 0;
> }
> n12lev[2] = 1;
> SubSpace n12(*V, n12lev);
> bcOrt = new DirichletBC(n12, nD, sub_domains, 5);
> bcDsp->dim(); //(*)
> bcOrt->dim(); //(**)
> cout << "init is fine" << endl << endl;
> Then in the main() function, I also checked bcDsp->dim() and
> bcOrt->dim() like this:
> MyNonlinearProblem nonlinear_problem(mesh, dirichlet_boundary, u,
> uD, nD, c10, alpha, beta);
> cout << "check bcDsp after initialization" << endl;
> nonlinear_problem.bcDsp->dim(); //(***)
> cout << "check bcOrt after initialization" << endl;
> nonlinear_problem.bcOrt->dim(); //(****)
>
> Here is the program output:
> dim of the subspace is 2178
> dim of the subspace is 2178
> init is fine
>
> check bcDsp after initialization
> dim of the subspace is 2178
> check bcOrt after initialization
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation
> Violation, probably memory access out of range
> ....
>
> From the output, we can see the weird problem is that, bcDsp and bcOrt
> are perfectly fine in the first three places (*), (**), and (***).
> However, bcOrt became corrupted at (****) right after the creation of
> the object "MyNonlinearProblem nonlinear_problem".
>
> I'm really confused why this should happen. Do you have any idea?
>
> Thank you!
>
> Best,
> Chong
> ------------------------------------------------------------------------
> *From:* Anders Logg <[email protected]>
> *To:* [email protected]
> *Sent:* Sunday, March 1, 2009 3:21:21 PM
> *Subject:* Re: [DOLFIN-dev] Fw: [FEniCS-dev] Dimension of function space
> too large for application to linear system
>
> On Sun, Mar 01, 2009 at 01:03:54PM -0800, Chong Luo wrote:
> > I sent the email before I subscribed to the mailing list, so I try again.
> >
> > Best,
> > Chong
> > ----- Forwarded Message ----
> > From: Chong Luo <[email protected] <mailto:[email protected]>>
> > To: [email protected] <mailto:[email protected]>
> > Sent: Sunday, March 1, 2009 2:58:46 PM
> > Subject: Re: [FEniCS-dev] Dimension of function space too large for
> application
> > to linear system
> >
> > Yes, I'm sure I have 4 levels of nested sub spaces. The function space is
> > defined as follows:
> >
> > vector = VectorElement("Lagrange", "triangle", 2)
> > scalar = FiniteElement("Lagrange", "triangle", 1)
> > mixed = vector+vector+scalar+scalar #
> > displacement+orientation+pressure+lambda
>
> What does this last line do? It just adds stuff. Do you use it for
> anything?
>
> Also, lambda is not a good name as it is in conflict with a Python
> keyword. I'm surprised it compiles at all.
>
> > v = TestFunction(mixed) u = TrialFunction(mixed)
> >
> > Thus u12 corresponds to the subspace of displacement, and n12
> corresponds to
> > the subspace of the orientation.
>
> The way you write it above, the mixed space will actually have 4 levels:
>
> mixed = ((vector + vector) + scalar) + scalar
>
> In particular, the first component of the original vector space will
> be subspace (0, 0, 0, 0). Is this what you intend? Note the order of
> nesting from left to right above.
>
> If this is what you intend, can you post a minimal example that breaks?
> With minimal, I mean less than 10 lines of code. The simpler it is,
> the greater the chance that someone will find time to track down the
> bug.
>
> --
> Anders
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> DOLFIN-dev mailing list
> [email protected]
> http://www.fenics.org/mailman/listinfo/dolfin-dev
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev