コード例 #1
0
ファイル: solvers.py プロジェクト: maglunengineering/dssolver
    def solve(self, problem:Problem):
        problem.reassign_dofs()
        M = problem.M(True)
        K = problem.K(True)
        ndofs = 3 * len(problem.nodes)
        free_dofs = problem.free_dofs()
        full_eigenvectors = np.zeros((len(free_dofs), ndofs))

        # Unsymmetric reduction
        A = np.linalg.solve(M, K)

        # Symmetry preserving reduction
        #L = np.linalg.cholesky(M)
        #A = np.linalg.inv(L) @ K @ np.linalg.inv(L.T)

        eigenvalues, eigenvectors = np.linalg.eig(A)

        eigenvectors = eigenvectors.T # Row-major
        eigenvectors = eigenvectors[eigenvalues.argsort()]
        eigenvalues.sort()
        full_eigenvectors[:,free_dofs] = eigenvectors

        return results.ResultsModal(problem, eigenvalues, full_eigenvectors)