Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assembling only specific entries of the stiffness matrix of static elastic problems (for ROM) #19

Open
bakar-a opened this issue Dec 3, 2021 · 1 comment
Labels
enhancement New feature or request

Comments

@bakar-a
Copy link

bakar-a commented Dec 3, 2021

Describe the solution you'd like
Hi all, I'm interested in using PolyFEM for a Reduced Order Modelling (ROM) application.

The idea I'm trying to explore: Creating a elastostatic ROM for parametric geometry deformations

The fact that the solution of PolyFEM is still accurate given highly deformed elements means that we can keep the same mesh for large geometry deformation. And since the same mesh can be kept, a ROM can be created for it.

The only modification I need to make to the solver is to add the functionality to evaluate specific entries (k_ij for some i,j) of the stiffness matrix without constructing the entire stiffness matrix. I will then use these specific entries to estimate the reduced order stiffness matrix (significantly smaller matrix and therefore solves faster)

I'm wondering if you would be able to give me some pointers on which part of the code assembles the stiffness matrix and how you'd go about assembling it for specific entries only?

Thank you in advance for your time!

@bakar-a bakar-a added the enhancement New feature or request label Dec 3, 2021
@teseoch
Copy link
Member

teseoch commented Dec 8, 2021

The assembly of the matrix is here https://github.com/polyfem/polyfem/blob/aug_lagr/src/assembler/Assembler.cpp

The local assembler depends on the formulation, the different local assemblers are in this folder:
https://github.com/polyfem/polyfem/tree/aug_lagr/src/assembler

In the loop over elements (

for (int e = start; e < end; ++e)
for linear, or
for (int e = start; e < end; ++e)
for non-linear) you can see how the local to global works. You can use a similar loop and update only some entries in the matrix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants