SimVascular / svFSIplus

This repository contains a line-by-line conversion of the Fortran svFSI solver to C++.
Other
7 stars 20 forks source link

Add equilibrated constrained mixture model #49

Open mrp089 opened 1 year ago

mrp089 commented 1 year ago

Add the material model from svFSI branch https://github.com/mrp089/svFSI/tree/add_equilibrated_gr

Steps:

Steps 3 and 4 are also required for #2 and #33 (I will coordinate).

mrp089 commented 7 months ago

I have a first prototype running in this branch (i.e. a "literal translation of implementation from svFSI"), containing the new test case struct/gr_equilibrated. Note that this relies on PETSc as this material model has a minor-only symmetry stiffness matrix that I could only solve successfully with a (parallel) direct solver (MUMPS).

I couldn't confirm if the results match with svFSI due to #148, but so far, they look similar. Once I can confirm that the results are identical (and keep running my test case during development), my steps toward a pull request are:

While working on the steps above, there are still modifications I need to make to the material model itself to improve its stability (as discussed in the lab meeting on 11-28-2023). My first step is smoothing the internal growth variables in every Newton iteration via the vtkAttributeSmoothingFilter. For that, I need to have the current simulation data (mesh + internal growth variables stored on nodes) as a vtkUnstructuredGrid object. I've seen functionality like this in VtkData for file IO, but I'm unsure how to call that during the Newton loop without any actual file IO and getting access to vtk_ugrid. @ktbolt, can you show me how to do this best? Thank you!

ktbolt commented 7 months ago

@mrp089 VtkData was implemented to just read/write VTK files with the intent to isolate VTK from the solver so in future we could eliminate needing to build with VTK, perhaps create a plugin VTK file reader for backwards compatibility (there are still VTK calls in vtk_xml_parser.cpp which we should remove).

You can create a vtkUnstructuredGrid object using VtkData (see write_vtu() in vtk_xml.cpp), just need to add a method to return the object rather than write it, I can do that.

I would recommend as a longer-term goal not use any VTK functions in the code if you can, svSolver suffers from this.