I tried Davids tip with the CondensedEigenSystem. For the scalar
valued problem of a laplace operator it works very good, but i still
have no correct solution for the Stokes equations.

It seems i'm assembling the Mass matrix in a wrong way. Using the
notation of the example, is it correct, that the Mass matrix has
contributions from the coupling of uu,vv,uv,vu? So i tried using

Me(i,j) += JxW[qp]*(phi[i][qp]*phi[j][qp]);

in the Kuu, Kvv, Kuv, Kvu loops, without success.

Any help appreciated :)


On Tue, Sep 1, 2015 at 8:26 PM, Julian Andrej <j...@tf.uni-kiel.de> wrote:
> I am aware of that, but I think i should get a bunch of 1 eigenvalues
> (number depending on the problem size and thus number of Dirichlet BCs) and
> then the correct eigenvalues for my problem with the posted code.
>
> On Tue, Sep 1, 2015 at 6:38 PM, David Knezevic <david.kneze...@akselos.com>
> wrote:
>>
>> On Tue, Sep 1, 2015 at 12:35 PM, Julian Andrej <j...@tf.uni-kiel.de>
>> wrote:
>>>
>>> On Tue, Sep 1, 2015 at 6:15 PM, John Peterson <jwpeter...@gmail.com>
>>> wrote:
>>>
>>> >
>>> >
>>> > On Tue, Sep 1, 2015 at 8:29 AM, Julian Andrej <j...@tf.uni-kiel.de>
>>> > wrote:
>>> >
>>> >> I'm trying to get into libMesh, so i tried to convert an existing
>>> >> project.
>>> >>
>>> >> So far i could reproduce the lid driven cavity case for the Stokes
>>> >> equations like in
>>> >> example examples/systems_of_equations/systems_of_equations_ex1.
>>> >>
>>> >> Now i'm trying to build a mass matrix so i can solve the generalized
>>> >> eigenproblem in order to retrieve the physical eigenvalues in the
>>> >> following
>>> >> domain:
>>> >>
>>> >> build_square (mesh,
>>> >>             16, 16,
>>> >>
>>> >>             -1., 1.,
>>> >>
>>> >>             -1., 1.,
>>> >>
>>> >>             TRI6);
>>> >>
>>> >> So the eigenvalues should be (rounded to int) [13, 23, 23, 32, 38,
>>> >> 41...].
>>> >>
>>> >> My approach is that i add a matrix
>>> >>
>>> >> system.add_matrix("mass");
>>> >>
>>> >> in the assemble loop i add:
>>> >>
>>> >> DenseMatrix<Number> Me;
>>> >> Me.resize (n_dofs, n_dofs);
>>> >>
>>> >> and to the integration parts:
>>> >> Me(i,j) += JxW[qp]*(phi[i][qp]*phi[j][qp]);
>>> >>
>>> >> then i close the matrices
>>> >> system.get_matrix("mass").close();
>>> >>
>>> >> and convert them to PETSc so i can use my own SLEPc object
>>> >> Mat A = (static_cast<PetscMatrix<Number> *>(system.matrix))->mat();
>>> >>
>>> >> Mat M = (static_cast<PetscMatrix<Number>
>>> >> &>(system.get_matrix("mass"))).mat();
>>> >>
>>> >> The problem is, the calculated eigenvalues are not the ones i expect
>>> >> (so
>>> >> they're wrong).
>>> >> This method worked for me for the poisson equation.
>>> >> Do i miss something?
>>> >>
>>> >
>>> > So are you trying to solve the generalized eigenvalue problem
>>> >
>>> > A*x = lambda*B*x,
>>> >
>>>
>>> > where A corresponds to the Stokes operator and B to the "mass" matrix,
>>> > which should have a zero block for the pressure equation?
>>> >
>>>
>>> Exactly
>>>
>>>
>>> > If yes, then
>>> > .) Are you building both matrices, since you only talk about the mass
>>> > matrix?
>>> >
>>>
>>> Yes i build the Stiffness matrix based on the example code
>>>
>>>
>>> > .) Are you building the correct mass matrix for Stokes?
>>> >
>>>
>>> That is the main question i guess. I'm adding the code
>>>
>>> Me(i,j) += JxW[qp]*(phi[i][qp]*phi[j][qp]);
>>>
>>> to the Kuu and Kvv loops. I've also tried adding it to the Kup, Kvp, Kpv,
>>> Kvp, as well but the quadrature seems to be zero there (using mat view
>>> from
>>> petsc and viewing the matrix structure).
>>>
>>>
>>> >
>>> > Another question is BCs: what are they, and how are you imposing them
>>> > (e.g. penalty method, constraints, etc.)?  I can't remember if BCs
>>> > should
>>> > be imposed in both the A and B matrices or not...
>>> >
>>>
>>> I'm imposing pure zero dirichlet using the penalty method as in the
>>> example
>>> code. I tried applying them just to A and also tried A and M.
>>>
>>> You can take a look at what i've got in that paste
>>> http://hastebin.com/raw/ekasibazan. I don't know if it is desired that
>>> i'd
>>> attach the code (i could do so for further reference). It is basically
>>> the
>>> example code with a few changes.
>>
>>
>>
>> Regarding BCs: Constraint rows introduce spurious eigenvalues. For
>> Dirichlet boundary conditions, I would recommend following the approach in
>> eigenproblems_ex3 which uses a CondensedEigenSystem, which eliminates
>> Dirichlet dofs from the system before doing the solve.
>>
>> David
>>
>

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to