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