Hello, I want to carry out a modal analysis of a full coupled system (piezoelectric system with displacements and potential as unknowns), which renders the eigenvalues and eigenvectors of the system.
The following blockmatrices describe the system. The first line describes the mechanical displacements while the second line is for the electric potential: _ _ I I¯ M 0 ¯I *eigenvalue + I¯ Kmm Kme ¯I I *eigenvector =0 I I_ 0 0 _I I_ Kme Kee _I I ¯ ¯ When I express the potential with the displacements I get for the eigenvalueproblem: potential=-(Kee)^-1*Kem *displacements -> [M*eigenvalue+(Kmm-Kme*(Kee)^-1*Kem)]*eigenvector=0; I implemented this with linear operators in the following way: const auto &Kmm=stiffness.block(0,0); const auto op_Kmm = linear_operator(Kmm); const auto &Kme=stiffness.block(0,1); const auto op_Kme = linear_operator(Kme); const auto &Kem=stiffness.block(1,0); const auto op_Kem = linear_operator(Kem); const auto &Kee=stiffness.block(1,1); const auto op_Kee = linear_operator(Kee); const auto &M = mass.block(0,0); const auto op_M = linear_operator(M); //Kee^1 ReductionControl reduction_control_Kee(200000, 1.0e-18, 1.0e-10); SolverCG<> solver_Kee(reduction_control_Kee); PreconditionJacobi<> preconditioner_Kee; preconditioner_Kee.initialize(Kee); const auto op_Kee_inv = inverse_operator(op_Kee, solver_Kee, preconditioner_Kee); //K_Piezo=Kmm-Kme*(Kee)^-1*Kem const auto op_K_Piezo=op_Kmm-op_Kme*op_Kee_inv*op_Kem; //(K_Piezo)^-1 for Arpack solver SolverControl solver_control_K_Piezo(200000, 1.0e-10); SolverCG<> solver_K_Piezo(solver_control_K_Piezo); const auto op_K_Piezo_inv=inverse_operator(op_K_Piezo, solver_K_Piezo, PreconditionIdentity()); Here I need a preconditioner //solve Eigenproblem SolverControl solver_control(dof_handler.n_dofs(), 1e-10); ArpackSolver eigensolver(solver_control);//, additional_data); eigensolver.solve(op_K_Piezo, op_M, op_K_Piezo_inv, eigenvalues_Arpack, eigenfunctions_Arpack, eigenvalues_Arpack.size()); This works but the code is very slow because I dont know how to build a preconditioner out of a linear operator. The following Questions arises: 1. Is it possible to build a preconditioner out of a linear operator in my application? 2. Are there better ways to solve this Eigenproblem, maybe with another solver? Thank you very much in advance, every help is welcomed! Andreas -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to dealii+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/96b55f2e-2d69-4ead-a8d5-9df3056ec3af%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.