7 #include "imstkLinearFemForceModel.h" 9 #include "imstkMacros.h" 12 DISABLE_WARNING_HIDES_CLASS_MEMBER
14 #include <StVKElementABCDLoader.h> 15 #include <StVKStiffnessMatrix.h> 22 LinearFemForceModel::LinearFemForceModel(std::shared_ptr<vega::VolumetricMesh> mesh,
23 const bool withGravity,
const double gravity) : InternalForceModel()
25 auto tetMesh = std::dynamic_pointer_cast<vega::TetMesh>(mesh);
27 vega::StVKElementABCD* precomputedIntegrals = vega::StVKElementABCDLoader::load(tetMesh.get());
28 m_stVKInternalForces = std::make_shared<vega::StVKInternalForces>(tetMesh.get(), precomputedIntegrals, withGravity, gravity);
30 auto stVKStiffnessMatrix = std::make_shared<vega::StVKStiffnessMatrix>(m_stVKInternalForces.get());
32 stVKStiffnessMatrix->GetStiffnessMatrixTopology(&m_stiffnessMatrixRawPtr);
33 std::shared_ptr<vega::SparseMatrix> m_stiffnessMatrix2(m_stiffnessMatrixRawPtr);
34 m_stiffnessMatrix = m_stiffnessMatrix2;
36 auto K = m_stiffnessMatrix.get();
37 stVKStiffnessMatrix->GetStiffnessMatrixTopology(&K);
38 double* zero = (
double*)calloc(m_stiffnessMatrix->GetNumRows(),
sizeof(double));
39 stVKStiffnessMatrix->ComputeStiffnessMatrix(zero, m_stiffnessMatrix.get());
43 LinearFemForceModel::~LinearFemForceModel()
45 if (m_stiffnessMatrixRawPtr)
47 delete m_stiffnessMatrixRawPtr;