Chong Luo wrote:
> Attached is the minimal code that can reproduce the problem.
> 

You need to make the code shorter for anyone to take a look at.

Garth


> However, I also modified /dolfin-0.9.1/dolfin/fem/DirichletBC.cpp to add 
> the following function:
>     void DirichletBC::dim() const
>    {
>      cout << "dim of the subspace is " << V->dim() << endl;
>    }
> And /dolfin-0.9.1/dolfin/fem/DirichletBC.h is changed accordingly to add 
> the declaration of that function:
>     /// report the dimension of the subspace
>     void dim() const;
> 
> Thank you for your attention!
> 
> Best,
> Chong
> 
> ------------------------------------------------------------------------
> *From:* Garth N. Wells <[email protected]>
> *To:* Chong Luo <[email protected]>
> *Cc:* [email protected]
> *Sent:* Friday, March 13, 2009 11:09:26 AM
> *Subject:* Re: [DOLFIN-dev] Dimension of function space too large for 
> application to linear system
> 
> 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] <mailto:[email protected]>>
>  > *To:* [email protected] <mailto:[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]> 
> <mailto:[email protected] <mailto:[email protected]>>>
>  >  > To: [email protected] <mailto:[email protected]> 
> <mailto:[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] <mailto:[email protected]>
>>  http://www.fenics.org/mailman/listinfo/dolfin-dev
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> 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