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]>
> To: [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

Reply via email to