/usr/share/psi4/samples/matrix1/test.in is in psi4-data 1:1.1-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #! An example of using BLAS and LAPACK calls directly from the Psi input file, demonstrating
#! matrix multiplication, eigendecomposition, Cholesky decomposition and LU decomposition.
#! These operations are performed on vectors and matrices provided from the Psi library.
# Example of matrix multiplication
print_out('\n ==> Matrix Multiplication <== \n\n')
n = 3
A = psi4.Matrix(n, n)
B = psi4.Matrix(n, n)
C = psi4.Matrix(n, n)
A.name = 'A'
B.name = 'B'
C.name = 'C'
# The matrix set method takes 4 arguments: irrep, row, col, value
# Values are initialized to 0 by default
B.set(0, 0, 1, 1.0)
B.set(0, 1, 0, 2.0)
B.set(0, 2, 0, 3.0)
A.set(0, 0, 0, 2.0)
A.set(0, 1, 1, 2.0)
A.set(0, 2, 2, 2.0)
A.print_out()
B.print_out()
psi4.DGEMM(0, 'N', 'N', n, n, n, 1.0, A, n, B, n, 0.0, C, n)
C.print_out()
mmultRef = psi4.Matrix(n, n) #TEST
mmultRef.name = "Matrix-Matrix Multiplication Reference" #TEST
mmultRef.set(0, 0, 0, 0.0000000); mmultRef.set(0, 0, 1, 2.0000000); mmultRef.set(0, 0, 2, 0.0000000) #TEST
mmultRef.set(0, 1, 0, 4.0000000); mmultRef.set(0, 1, 1, 0.0000000); mmultRef.set(0, 1, 2, 0.0000000) #TEST
mmultRef.set(0, 2, 0, 6.0000000); mmultRef.set(0, 2, 1, 0.0000000); mmultRef.set(0, 2, 2, 0.0000000) #TEST
compare_matrices(mmultRef, C, 6, "Matrix multiplication") #TEST
print_out('\n ==> Eigendecomposition (Hilbert Matrix) <== \n\n')
n = 4;
A = psi4.Matrix(n,n)
for i in range(1,n+1):
for j in range(1,n+1):
A.set(0, i-1, j-1, 1.0/(i + j - 1))
A.name = 'Hilbert Matrix'
A.print_out();
# Allocate a work array and some storage for the eigenvalues
W = psi4.Vector(4*n);
D = psi4.Vector(n);
# On input, A is the matrix and on output it contains the eigenvectors
info = psi4.DSYEV(0, 'V','U', n, A, n, D, W, 4*n)
A.name = "Eigenvectors"
# Make first element of eigenvector positive if desired
for i in range(1,n):
if A.get(i,0) < 0 :
A.scale_row(0, i, -1)
evecRef = psi4.Matrix(n,n) #TEST
evecRef.set(0, 0, 0, 0.0291933); evecRef.set(0, 0, 1, -0.3287121) #TEST
evecRef.set(0, 0, 2, 0.7914111); evecRef.set(0, 0, 3, -0.5145527) #TEST
evecRef.set(0, 1, 0, 0.1791863); evecRef.set(0, 1, 1, -0.7419178) #TEST
evecRef.set(0, 1, 2, 0.1002281); evecRef.set(0, 1, 3, 0.6382825) #TEST
evecRef.set(0, 2, 0, 0.5820757); evecRef.set(0, 2, 1, -0.3705022) #TEST
evecRef.set(0, 2, 2, -0.5095786); evecRef.set(0, 2, 3, -0.5140483) #TEST
evecRef.set(0, 3, 0, 0.7926083); evecRef.set(0, 3, 1, 0.4519231) #TEST
evecRef.set(0, 3, 2, 0.3224164); evecRef.set(0, 3, 3, 0.2521612) #TEST
evecRef.name = "Reference Eigenvectors" #TEST
compare_matrices(evecRef, A, 6, "Eigenvectors") #TEST
evalRef = psi4.Vector(n) #TEST
evalRef.set(0, 0, 0.0000967); evalRef.set(0, 1, 0.0067383) #TEST
evalRef.set(0, 2, 0.1691412); evalRef.set(0, 3, 1.5002143) #TEST
compare_vectors(evalRef, D, 6, "Eigenvalues") #TEST
print_out(' Eigenvalues')
D.print_out()
A.print_out()
print_out('\n ==> Cholesky Decomposition (Hilbert Matrix) <== \n\n')
n = 4
A = psi4.Matrix(n,n)
for i in range(1,n+1):
for j in range(1,n+1):
A.set(0, i-1, j-1, 1.0/(i + j - 1))
A.name = 'Hilbert Matrix'
A.print_out()
info = psi4.DPOTRF(0, 'U', n, A, n)
for i in range(0,n):
for j in range(i+1,n):
A.set(0, i, j, 0.0)
cholRef = psi4.Matrix(n, n) #TEST
cholRef.set(0, 0, 0, 1.0000000); cholRef.set(0, 0, 1, 0.0000000); #TEST
cholRef.set(0, 0, 2, 0.0000000); cholRef.set(0, 0, 3, 0.0000000); #TEST
cholRef.set(0, 1, 0, 0.5000000); cholRef.set(0, 1, 1, 0.2886751); #TEST
cholRef.set(0, 1, 2, 0.0000000); cholRef.set(0, 1, 3, 0.0000000); #TEST
cholRef.set(0, 2, 0, 0.3333333); cholRef.set(0, 2, 1, 0.2886751); #TEST
cholRef.set(0, 2, 2, 0.0745356); cholRef.set(0, 2, 3, 0.0000000); #TEST
cholRef.set(0, 3, 0, 0.2500000); cholRef.set(0, 3, 1, 0.2598076); #TEST
cholRef.set(0, 3, 2, 0.1118034); cholRef.set(0, 3, 3, 0.0188982); #TEST
cholRef.name = "Cholesky Decomposition Reference" #TEST
compare_matrices(cholRef, A, 6, "Cholesky Decomposition") #TEST
A.name = 'Hilbert Matrix Cholesky Decomposition (T)'
A.print_out()
print_out('\n ==> LU Decomposition (Hilbert Matrix) <== \n\n')
n = 4;
A = psi4.Matrix(n,n)
piv = psi4.IntVector(n)
for i in range(1,n+1):
for j in range(1,n+1):
A.set(0, i-1, j-1, 1.0/(i + j - 1))
A.name = 'Hilbert Matrix'
A.print_out();
info = psi4.DGETRF(0, n, n, A, n, piv)
luRef = psi4.Matrix(n, n) #TEST
luRef.set(0, 0, 0, 1.0000000); luRef.set(0, 0, 1, 0.3333333); #TEST
luRef.set(0, 0, 2, 0.5000000); luRef.set(0, 0, 3, 0.2500000); #TEST
luRef.set(0, 1, 0, 0.5000000); luRef.set(0, 1, 1, 0.0833333); #TEST
luRef.set(0, 1, 2, 1.0000000); luRef.set(0, 1, 3, 0.9000000); #TEST
luRef.set(0, 2, 0, 0.3333333); luRef.set(0, 2, 1, 0.0888889); #TEST
luRef.set(0, 2, 2, -0.0055556); luRef.set(0, 2, 3, -0.6000000); #TEST
luRef.set(0, 3, 0, 0.2500000); luRef.set(0, 3, 1, 0.0833333); #TEST
luRef.set(0, 3, 2, -0.0083333); luRef.set(0, 3, 3, 0.0003571); #TEST
luRef.name = "LU Decomposition Reference" #TEST
compare_matrices(luRef, A, 6, "LU Decomposition") #TEST
A.name = 'Hilbert Matrix LU Decomposition (T)'
A.print_out()
|