Topic: Additional information from eigenvalue solver

As I mentioned in my previous post, I am building topology optimization simulations with PlaneStress2d and LSpace. One of the optimization criteria is maximizing the first eigenfrequency, so I have some questions specific to EigenValueDynamic.

1) What scaling factor is used to normalize the eigenvectors (ex. L2 norm, mass norm)?

2) What information, if any, besides the eigenfrequency and corresponding eigenvector does the analysis produce? The optimization sensitivities require calculating relative elastic and inertial energy, so ideally I would like to be able to calculate stress/strain with the eigenvector effectively acting as a static displacement without having to formulate the stiffness and mass matrices myself post-simulation.

- Bailey C

Re: Additional information from eigenvalue solver

So, I didn't find any indication in the documentation or code that exporting additional information from EigenValueDynamic simulations would be possible. I wrote a routine in my own code to run another simulation to get the information I need, but if anyone has ideas for how it might be possible to get elastic energy for an eigenmode without running an additional simulation, I'd appreciate it.

With the elastic energy and eigenfrequencies as well as some searching through the code, I was able to figure out that 1) eigenvectors are not normalized individually after solution with subspace iteration, and 2) they are normalized with the mass matrix for inverse iteration. In the end, I figured things out, but that would be valuable information to include in the documentation. Also, I think normalizing eigenvectors after subspace iteration to be consistent with the inverse iteration solver would be a helpful improvement. I'm only really concerned with the first eigenmode for my application, but others might want consistently normalized eigenvectors without sacrificing the better efficiency of the subspace algorithm.

3

Re: Additional information from eigenvalue solver

HI,
it is definitely possible to compute stress and strains corresponding to eigen-vectors (linear analysis), however some coding would be necessary consisting of just calling the necessary routines form eigen value solver for each eigen mode.
It simply requires to loop over modes (represented as time steps, see EigenValueDynamic :: giveUnknownComponent) and for each mode call
EigenValueDynamic::updateYourself service (that will do the job of evaluating stress and strains) and printing the results. Note that updateYourself have to be overloaded to call  EngngModel :: updateYourself(tStep).

I can add it on my to do list, but if you are able to code, you can make the extension much faster

Re: Additional information from eigenvalue solver

At the moment, I have a solution where I simply solve another system where each load case prescribes fixed displacements to all of the nodes corresponding to an eigenmode. It obviously takes more computational time, but the development was a lot quicker for me than spending the time to understand the structure of the OOFEM source. I may look into making changes to EigenValueDynamic in order to speed things up when I start doing 3D optimizations with denser meshes.