matrixContainerTest.py

You can view and download this file on Github: matrixContainerTest.py

 1#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2# This is an EXUDYN example
 3#
 4# Details:  Simple test for MatrixContainer, similar as Examples given in Docu
 5#
 6# Author:   Johannes Gerstmayr
 7# Date:     2024-10-09
 8#
 9# Copyright:This file is part of Exudyn. Exudyn is free software. You can redistribute it and/or modify it under the terms of the Exudyn license. See 'LICENSE.txt' for more details.
10#
11#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
13import exudyn as exu
14
15testIsActive = exu.sys.get('testIsActive', False)
16
17import numpy as np
18from scipy.sparse import csr_matrix
19from exudyn import MatrixContainer
20
21u = 0 #result
22mc = MatrixContainer()
23
24#Create MatrixContainer with dense matrix:
25#matrix can be initialized with a dense matrix, using a numpy array or list of lists , e.g.:
26matrix = np.eye(3)
27mcDense1 = MatrixContainer(matrix)
28u+= mcDense1.Convert2DenseMatrix()[0,1]
29mcDense2 = MatrixContainer([[1,2],[3,4]])
30
31u+= mcDense1.Convert2DenseMatrix()[1,0]
32mcSparse = MatrixContainer(csr_matrix(np.array([[1,5],[0,7]])))
33u+= mcSparse.Convert2DenseMatrix()[0,1]
34
35#Set with dense pyArray (a numpy array): 
36pyArray = np.array(matrix)
37mc.SetWithDenseMatrix(pyArray, useDenseMatrix = True)
38u+= mc.Convert2DenseMatrix()[1,0]
39
40#Set empty matrix:
41mc.SetWithDenseMatrix([[]], useDenseMatrix = True)
42
43#Set with list of lists, stored as sparse matrix:
44mc.SetWithDenseMatrix([[1,2],[3,4]], useDenseMatrix = False)
45u+= mc.Convert2DenseMatrix()[1,0]
46
47#Set with sparse triplets (list of lists or numpy array):
48mc.SetWithSparseMatrix([[0,0,13.3],[1,1,4.2],[1,2,42.]], 
49                       numberOfRows=2, numberOfColumns=3, 
50                       useDenseMatrix=True)
51u+= mc.Convert2DenseMatrix()[1,2]
52
53exu.Print(mc)
54#gives dense matrix:
55#[[13.3  0.   0. ]
56# [ 0.   4.2 42. ]]
57
58#Set with scipy matrix:
59#WARNING: only use csr_matrix
60#         csc_matrix would basically run, but gives the transposed!!!
61spmat = csr_matrix(matrix) 
62mc.SetWithSparseMatrix(spmat) #takes rows and column format automatically
63u+= mc.Convert2DenseMatrix()[1,1]
64
65#initialize and add triplets later on
66mc.Initialize(3,3,useDenseMatrix=False)
67mc.AddSparseMatrix(spmat, factor=1)
68#can also add smaller matrix
69mc.AddSparseMatrix(csr_matrix(np.eye(2)), factor=0.5)
70exu.Print('mc=',mc.Convert2DenseMatrix())
71u+= mc.Convert2DenseMatrix()[0,0]
72
73#set matrix with smaller sparse matrix than the final dimensions
74mc.SetWithSparseMatrix(csr_matrix(np.array([[1,2],[3,4]])), numberOfRows=4, numberOfColumns=2)
75exu.Print('mc=',mc.Convert2DenseMatrix())
76u+= mc.Convert2DenseMatrix()[1,1]
77
78
79result = u
80exu.Print('solution of matrixContainerTest=',result)
81
82exu.sys['testResult'] = result