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

Reply via email to