def main(): results_root = pjoin(mm.rootdir(), "experiments", "parameter_sweeps", "odblock-eigs") for _rdir in os.listdir(results_root): results_dir = pjoin(results_root, _rdir) data = mm.parse_run(results_dir) if data is None: continue print("\nrefinement level", data['refinement']) print("disable-ms?", data['disable-ms']) first_m_block = 2 nblock = 5 # Just first Jacobian for now with warnings.catch_warnings(): A = omat.import_blocks(pjoin(results_dir, "J_3_1_block"), nblock) # Get only LLG blocks A = omat.sub_matrix(A, first_m_block) # Get only offdiagonal blocks A = omat.off_diagonal_blocks(A) evs = [] non_sym = [] for block in A.flat: if block.nnz > 0: ev, evec = sp.sparse.linalg.eigs(block) evs.append(ev) TT = block - block.T nnz = len(filter(lambda x: x> 1e-8, TT.data)) non_sym.append(nnz) # if nnz > 0: # print(sp.mean(block.data)) # print(TT) # print("overall abs", map(maxabs, evs)) # print("max real part", map(maxreal, evs)) print("max imaginary part", max(map(maximag, evs))) print("max nnz in B - B^T", max(non_sym)) return 0
Z = sp.where(abs(Z.todense()) > precision, 1.0, 0.0) fig, axes = plt.subplots(1, 1) axes.imshow(Z.T, interpolation='nearest', cmap=binary) return fig def print_block_shapes(blocks): for i in range(0, blocks.shape[0]): for j in range(0, blocks.shape[1]): print(i, j, blocks[i, j].shape) # Load matrices # first Jacobian of first time step blocks = omat.import_blocks(pjoin(results_dir, "J_1_1_block"), 7) # Get blocks of interest F = omat.mergeblocks(blocks[2:5, 2:5]) A = blocks[0, 0].tocsr() D = omat.mergeblocks(sp.array(blocks[0, 2:5], ndmin=2)) B = omat.mergeblocks(sp.array([[blocks[2,0]], [blocks[3,0]], [blocks[4,0]]])) # Some info on shapes print("F", F.shape) print("A", A.shape) print("B", B.shape) print("D", D.shape) # Calculate the schur complement Ainv = sp.sparse.linalg.inv(A.tocsc())