mirror of
https://github.com/wassname/simpeg.git
synced 2026-10-03 12:50:34 +08:00
Merge branch 'startupScripts' of https://github.com/simpeg/simpeg into develop
This commit is contained in:
commit
dc62498a78
3 files changed
+813
No files matched your search
@@ -0,0 +1,470 @@
|
||||
#!/usr/bin/python
|
||||
"""
|
||||
Input and output functions.
|
||||
"""
|
||||
|
||||
|
||||
import os as _os
|
||||
import errno as _errno
|
||||
import sys as _sys
|
||||
import numpy as _np
|
||||
|
||||
from petsc4py import PETSc as _PETSc
|
||||
import fileinput as _fl
|
||||
|
||||
def vecToArray(obj):
|
||||
""" Converts a PETSc vector to a numpy array, available on *all* MPI nodes.
|
||||
|
||||
Args:
|
||||
obj (petsc4py.PETSc.Vec): input vector.
|
||||
|
||||
Returns:
|
||||
numpy.array :
|
||||
"""
|
||||
# scatter vector 'obj' to all processes
|
||||
comm = obj.getComm()
|
||||
scatter, obj0 = _PETSc.Scatter.toAll(obj)
|
||||
scatter.scatter(obj, obj0, False, _PETSc.Scatter.Mode.FORWARD)
|
||||
|
||||
return _np.asarray(obj0)
|
||||
|
||||
# deallocate
|
||||
comm.barrier()
|
||||
scatter.destroy()
|
||||
obj0.destroy()
|
||||
|
||||
|
||||
def vecToArray0(obj):
|
||||
""" Converts a PETSc vector to a numpy array available on MPI node 0.
|
||||
|
||||
Args:
|
||||
obj (petsc4py.PETSc.Vec): input vector.
|
||||
|
||||
Returns:
|
||||
numpy.array :
|
||||
"""
|
||||
# scatter vector 'obj' to process 0
|
||||
comm = obj.getComm()
|
||||
rank = comm.getRank()
|
||||
scatter, obj0 = _PETSc.Scatter.toZero(obj)
|
||||
scatter.scatter(obj, obj0, False, _PETSc.Scatter.Mode.FORWARD)
|
||||
|
||||
if rank == 0: return _np.asarray(obj0)
|
||||
|
||||
# deallocate
|
||||
comm.barrier()
|
||||
scatter.destroy()
|
||||
obj0.destroy()
|
||||
|
||||
|
||||
def arrayToVec(vecArray):
|
||||
""" Converts a (global) array to a PETSc vector over :attr:`petsc4py.PETSc.COMM_WORLD`.
|
||||
|
||||
Args:
|
||||
vecArray (array or numpy.array): input vector.
|
||||
|
||||
Returns:
|
||||
petsc4py.PETSc.Vec() :
|
||||
"""
|
||||
vec = _PETSc.Vec().create(comm=_PETSc.COMM_WORLD)
|
||||
vec.setSizes(len(vecArray))
|
||||
vec.setUp()
|
||||
(Istart,Iend) = vec.getOwnershipRange()
|
||||
return vec.createWithArray(vecArray[Istart:Iend],
|
||||
comm=_PETSc.COMM_WORLD)
|
||||
vec.destroy()
|
||||
|
||||
|
||||
def arrayToMat(matArray):
|
||||
""" Converts a (global) 2D array to a PETSc matrix over :attr:`petsc4py.PETSc.COMM_WORLD`.
|
||||
|
||||
Args:
|
||||
matArray (array or numpy.array): input square array.
|
||||
|
||||
:rtype: petsc4py.PETSc.Mat()
|
||||
|
||||
.. important::
|
||||
Requires `SciPy <http://www.scipy.org>`_.
|
||||
|
||||
"""
|
||||
try:
|
||||
import scipy.sparse as sparse
|
||||
except:
|
||||
print '\nERROR: loading matrices from txt files requires Scipy!'
|
||||
return
|
||||
|
||||
matSparse =matArray
|
||||
|
||||
mat = _PETSc.Mat().createAIJ(size=matSparse.shape,comm=_PETSc.COMM_WORLD)
|
||||
(Istart,Iend) = mat.getOwnershipRange()
|
||||
|
||||
ai = matSparse.indptr[Istart:Iend+1] - matSparse.indptr[Istart]
|
||||
aj = matSparse.indices[matSparse.indptr[Istart]:matSparse.indptr[Iend]]
|
||||
av = matSparse.data[matSparse.indptr[Istart]:matSparse.indptr[Iend]]
|
||||
|
||||
mat.setValuesCSR(ai,aj,av)
|
||||
mat.assemble()
|
||||
|
||||
return mat
|
||||
mat.destroy()
|
||||
|
||||
def matToSparse(mat):
|
||||
""" Converts a PETSc matrix to a (global) sparse matrix.
|
||||
|
||||
Args:
|
||||
mat (petsc4py.PETSc.Mat): input PETSc matrix.
|
||||
|
||||
:rtype: scipy.sparse.csr_matrix
|
||||
|
||||
.. important::
|
||||
Requires `SciPy <http://www.scipy.org>`_.
|
||||
|
||||
"""
|
||||
import scipy.sparse as sparse
|
||||
|
||||
data = mat.getValuesCSR()
|
||||
|
||||
(Istart,Iend) = mat.getOwnershipRange()
|
||||
columns = mat.getSize()[0]
|
||||
sparseSubMat = sparse.csr_matrix(data[::-1],shape=(Iend-Istart,columns))
|
||||
|
||||
comm = _PETSc.COMM_WORLD
|
||||
|
||||
sparseSubMat = comm.tompi4py().allgather(sparseSubMat)
|
||||
|
||||
return sparse.vstack(sparseSubMat)
|
||||
|
||||
def adjToH(adj,d=[0],amp=[0.]):
|
||||
""" Creates a 1 particle PETSc-type Hamiltonian matrix from a PETSc adjacency matrix.
|
||||
|
||||
Args:
|
||||
adj (petsc4py.PETSc.Mat): input PETSc-type adjacency matrix.
|
||||
|
||||
d (array of ints): an array containing *integers* indicating the nodes
|
||||
where diagonal defects are to be placed (e.g. ``d=[0,1,4]``).
|
||||
|
||||
amp (array of floats): an array containing *floats* indicating the diagonal defect
|
||||
amplitudes corresponding to each element in ``d`` (e.g. ``amp=[0.5,-1,4.2]``).
|
||||
|
||||
Returns:
|
||||
: 1 particle Hamiltonian matrix
|
||||
:rtype: petsc4py.PETSc.Mat()
|
||||
|
||||
Warning:
|
||||
* The size of ``a`` and ``d`` must be identical
|
||||
|
||||
>>> amp = [0.5,-1.,4.2]
|
||||
>>> len(d) == len(amp)
|
||||
True
|
||||
|
||||
* Elements of ``d`` can range from :math:`[0,N-1]` where the adjacency matrix is :math:`N\\times N`.
|
||||
|
||||
"""
|
||||
(Istart,Iend) = adj.getOwnershipRange()
|
||||
diagSum = []
|
||||
for i in range(Istart,Iend):
|
||||
diagSum.append(_np.sum(adj.getRow(i)[-1]))
|
||||
for j,val in enumerate(d):
|
||||
if i==val: diagSum[i-Istart] += amp[j]
|
||||
|
||||
mat = _PETSc.Mat().create(comm=_PETSc.COMM_WORLD)
|
||||
mat.setSizes(adj.getSize())
|
||||
mat.setUp()
|
||||
|
||||
for i in range(Istart,Iend):
|
||||
mat.setValue(i,i,diagSum[i-Istart])
|
||||
|
||||
mat.assemble()
|
||||
mat.axpy(-1,adj)
|
||||
|
||||
return mat
|
||||
mat.destroy()
|
||||
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#---------------------- Vec I/O functions ---------------------------
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
def exportVec(vec,filename,filetype):
|
||||
""" Export a PETSc vector to a file.
|
||||
|
||||
Args:
|
||||
vec (petsc4py.PETSc.Vec): input vector.
|
||||
filename (str): path to desired output file.
|
||||
filetype (str): the filetype of the exported vector.
|
||||
|
||||
* ``'txt'`` - a column vector in text format.
|
||||
* ``'bin'`` - a PETSc binary vector.
|
||||
"""
|
||||
if _os.path.isabs(filename):
|
||||
outDir = _os.path.dirname(filename)
|
||||
else:
|
||||
outDir = './'+_os.path.dirname(filename)
|
||||
|
||||
# create output directory if it doesn't exist
|
||||
try:
|
||||
_os.mkdir(outDir)
|
||||
except OSError as exception:
|
||||
if exception.errno != _errno.EEXIST:
|
||||
raise
|
||||
|
||||
if filetype == 'txt':
|
||||
# scatter prob to process 0
|
||||
comm = vec.getComm()
|
||||
rank = comm.getRank()
|
||||
scatter, vec0 = _PETSc.Scatter.toZero(vec)
|
||||
scatter.scatter(vec, vec0, False, _PETSc.Scatter.Mode.FORWARD)
|
||||
|
||||
# use process 0 to write to text file
|
||||
if rank == 0:
|
||||
array0 = _np.asarray(vec0)
|
||||
with open(filename,'w') as f:
|
||||
for i in range(len(array0)):
|
||||
f.write('{0: .12e}\n'.format(array0[i]))
|
||||
|
||||
# deallocate
|
||||
comm.barrier()
|
||||
scatter.destroy()
|
||||
vec0.destroy()
|
||||
|
||||
elif filetype == 'bin':
|
||||
binSave = _PETSc.Viewer().createBinary(filename, 'w')
|
||||
binSave(vec)
|
||||
binSave.destroy()
|
||||
|
||||
vec.comm.barrier()
|
||||
|
||||
def loadVec(filename,filetype):
|
||||
""" Import a PETSc vector from a file.
|
||||
|
||||
Args:
|
||||
filename (str): path to input file.
|
||||
filetype (str): the filetype.
|
||||
|
||||
* ``'txt'`` - a column vector in text format.
|
||||
* ``'bin'`` - a PETSc binary vector.
|
||||
"""
|
||||
if filetype == 'txt':
|
||||
try:
|
||||
vecArray = _np.loadtxt(filename,dtype=_PETSc.ScalarType)
|
||||
return arrayToVec(vecArray)
|
||||
except:
|
||||
print "\nERROR: input state space file " + filename\
|
||||
+ " does not exist or is in an incorrect format"
|
||||
_sys.exit()
|
||||
|
||||
elif filetype == 'bin':
|
||||
binLoad = _PETSc.Viewer().createBinary(filename, 'r')
|
||||
try:
|
||||
return _PETSc.Vec().load(binLoad)
|
||||
except:
|
||||
print "\nERROR: input state space file " + filename\
|
||||
+ " does not exist or is in an incorrect format"
|
||||
_sys.exit()
|
||||
binLoad.destroy()
|
||||
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#---------------------- Mat I/O functions ---------------------------
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
def exportMat(mat,filename,filetype,mattype=None):
|
||||
""" Export a PETSc matrix to a file.
|
||||
|
||||
Args:
|
||||
mat (petsc4py.PETSc.Mat): input matrix.
|
||||
filename (str): path to desired output file.
|
||||
filetype (str): the filetype of the exported vector.
|
||||
|
||||
* ``'txt'`` - a 2D matrix array in text format.
|
||||
* ``'bin'`` - a PETSc binary matrix.
|
||||
mattype (str): (``None``,``'adj'``) - if set to ``adj``, only
|
||||
integers ``0`` and ``1`` are written. Note
|
||||
that this only applied in ``txt`` mode.
|
||||
"""
|
||||
rank = _PETSc.Comm.Get_rank(_PETSc.COMM_WORLD)
|
||||
|
||||
if _os.path.isabs(filename):
|
||||
outDir = _os.path.dirname(filename)
|
||||
else:
|
||||
outDir = './'+_os.path.dirname(filename)
|
||||
|
||||
# create output directory if it doesn't exist
|
||||
try:
|
||||
_os.mkdir(outDir)
|
||||
except OSError as exception:
|
||||
if exception.errno != _errno.EEXIST:
|
||||
raise
|
||||
|
||||
if filetype == 'txt':
|
||||
txtSave = _PETSc.Viewer().createASCII(filename, 'w',
|
||||
format=_PETSc.Viewer.Format.ASCII_DENSE, comm=_PETSc.COMM_WORLD)
|
||||
txtSave(mat)
|
||||
txtSave.destroy()
|
||||
|
||||
if rank == 0:
|
||||
for line in _fl.FileInput(filename,inplace=1):
|
||||
if line[2] != 't':
|
||||
if mattype == 'adj':
|
||||
line = line.replace(" i","j")
|
||||
line = line.replace(" -","-")
|
||||
line = line.replace("+-","-")
|
||||
line = line.replace("0000e+01+0.00000e+00j","")
|
||||
line = line.replace(".00000e+00+0.00000e+00j","")
|
||||
line = line.replace(".","")
|
||||
line = line.replace(" -","\t-")
|
||||
line = line.replace(" ","\t")
|
||||
line = line.replace(" ","")
|
||||
line = line.replace("\t"," ")
|
||||
print line,
|
||||
else:
|
||||
line = line.replace(" i","j")
|
||||
line = line.replace(" -","-")
|
||||
line = line.replace("+-","-")
|
||||
print line,
|
||||
|
||||
elif filetype == 'bin':
|
||||
binSave = _PETSc.Viewer().createBinary(filename, 'w', comm=_PETSc.COMM_WORLD)
|
||||
binSave(mat)
|
||||
binSave.destroy()
|
||||
|
||||
mat.comm.barrier()
|
||||
|
||||
def loadMat(filename,filetype,delimiter=None):
|
||||
""" Import a PETSc matrix from a file.
|
||||
|
||||
Args:
|
||||
filename (str): path to input file.
|
||||
filetype (str): the filetype.
|
||||
|
||||
* ``'txt'`` - a 2D matrix array in text format.
|
||||
* ``'bin'`` - a PETSc matrix vector.
|
||||
|
||||
delimiter (str): this is passed to `numpy.genfromtxt\
|
||||
<http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html>`_
|
||||
in the case of strange delimiters in an imported ``txt`` file.
|
||||
"""
|
||||
if filetype == 'txt':
|
||||
try:
|
||||
try:
|
||||
if delimiter is None:
|
||||
matArray = _np.genfromtxt(filename,dtype=_PETSc.ScalarType)
|
||||
else:
|
||||
matArray = _np.genfromtxt(filename,dtype=_PETSc.ScalarType,delimiter=delimiter)
|
||||
except:
|
||||
filefix = []
|
||||
for line in _fl.FileInput(filename,inplace=0):
|
||||
if line[2] != 't':
|
||||
line = line.replace(" i","j")
|
||||
line = line.replace(" -","-")
|
||||
line = line.replace("+-","-")
|
||||
filefix.append(line)
|
||||
|
||||
matArray = _np.genfromtxt(filefix,dtype=_PETSc.ScalarType)
|
||||
|
||||
return arrayToMat(matArray)
|
||||
except:
|
||||
print "\nERROR: input state space file " + filename\
|
||||
+ " does not exist or is in an incorrect format"
|
||||
_sys.exit()
|
||||
|
||||
elif filetype == 'bin':
|
||||
binLoad = _PETSc.Viewer().createBinary(filename, 'r')
|
||||
try:
|
||||
return _PETSc.Mat().load(binLoad)
|
||||
except:
|
||||
print "\nERROR: input state space file " + filename\
|
||||
+ " does not exist or is in an incorrect format"
|
||||
_sys.exit()
|
||||
binLoad.destroy()
|
||||
|
||||
def exportVecToMat(vec,filename,filetype):
|
||||
""" Export a :math:`N^2` element PETSc vector as a :math:`N\\times N` matrix.
|
||||
|
||||
This is useful when wanting to view the full statespace of a 2 particle
|
||||
quantum walk.
|
||||
|
||||
Args:
|
||||
vec (petsc4py.PETSc.Vec): input :math:`N^2` element vector.
|
||||
filename (str): path to desired output file.
|
||||
filetype (str): the filetype of the exported vector.
|
||||
|
||||
* ``'txt'`` - an :math:`N\\times N` 2D matrix array in text format.
|
||||
* ``'bin'`` - an :math:`N\\times N` PETSc binary matrix.
|
||||
"""
|
||||
rank = _PETSc.Comm.Get_rank(_PETSc.COMM_WORLD)
|
||||
|
||||
if _os.path.isabs(filename):
|
||||
outDir = _os.path.dirname(filename)
|
||||
else:
|
||||
outDir = './'+_os.path.dirname(filename)
|
||||
|
||||
# create output directory if it doesn't exist
|
||||
try:
|
||||
_os.mkdir(outDir)
|
||||
except OSError as exception:
|
||||
if exception.errno != _errno.EEXIST:
|
||||
raise
|
||||
|
||||
vecArray = vecToArray(vec)
|
||||
matArray = vecArray.reshape([_np.sqrt(vecArray.size),_np.sqrt(vecArray.size)])
|
||||
|
||||
if filetype == 'txt':
|
||||
#if rank == 0: _np.savetxt(filename,matArray)
|
||||
txtSave = _PETSc.Viewer().createASCII(filename, 'w',
|
||||
format=_PETSc.Viewer.Format.ASCII_DENSE, comm=_PETSc.COMM_WORLD)
|
||||
txtSave(arrayToMat(matArray))
|
||||
txtSave.destroy()
|
||||
|
||||
if rank == 0:
|
||||
for line in _fl.FileInput(filename,inplace=1):
|
||||
if line[2] != 't':
|
||||
line = line.replace(" i","j")
|
||||
line = line.replace(" -","-")
|
||||
line = line.replace("+-","-")
|
||||
print line,
|
||||
|
||||
elif filetype == 'bin':
|
||||
binSave = _PETSc.Viewer().createBinary(filename, 'w', comm=_PETSc.COMM_WORLD)
|
||||
binSave(arrayToMat(matArray))
|
||||
binSave.destroy()
|
||||
vec.comm.barrier()
|
||||
|
||||
|
||||
def loadMatToVec(filename,filetype):
|
||||
""" Load a :math:`N\\times N` matrix as a :math:`N^2` element PETSc vector.
|
||||
|
||||
This is useful when wanting to import the full statespace of a 2 particle
|
||||
quantum walk to use for propagation.
|
||||
|
||||
Args:
|
||||
filename (str): path to the input file.
|
||||
filetype (str): the filetype
|
||||
|
||||
* ``'txt'`` - an :math:`N\\times N` 2D matrix array in text format.
|
||||
* ``'bin'`` - **Not yet implemented! Please use a txt \
|
||||
format for this type of import**.
|
||||
"""
|
||||
if filetype == 'txt':
|
||||
try:
|
||||
try:
|
||||
matArray = _np.loadtxt(filename,dtype=_PETSc.ScalarType)
|
||||
except:
|
||||
filefix = []
|
||||
for line in _fl.FileInput(filename,inplace=0):
|
||||
if line[2] != 't':
|
||||
line = line.replace(" i","j")
|
||||
line = line.replace(" -","-")
|
||||
line = line.replace("+-","-")
|
||||
filefix.append(line)
|
||||
|
||||
matArray = _np.loadtxt(filefix,dtype=_PETSc.ScalarType)
|
||||
|
||||
vecArray = matArray.reshape(matArray.shape[0]**2)
|
||||
return arrayToVec(vecArray)
|
||||
except:
|
||||
print "\nERROR: input state space file " + filename\
|
||||
+ " does not exist or is in an incorrect format"
|
||||
_sys.exit()
|
||||
|
||||
elif filetype == 'bin':
|
||||
print '\nERROR: only works for txt storage!'
|
||||
_sys.exit()
|
||||
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": ""
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from SimPEG import *\n",
|
||||
"%pylab inline"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"Populating the interactive namespace from numpy and matplotlib\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"M = mesh.TensorMesh([20,30]) \n",
|
||||
"A = M.faceDiv*M.faceDiv.T + sp.identity(M.nC)\n",
|
||||
"b = np.random.rand(M.nC)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 35
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"phi = Solver(A).solve(b)\n",
|
||||
"colorbar(M.plotImage(phi))"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 37,
|
||||
"text": [
|
||||
"<matplotlib.colorbar.Colorbar instance at 0x6c411b8>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x67e6050>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 37
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print np.linalg.norm(A*phi-b)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"1.5220841846e-13\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 38
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import petsc4py\n",
|
||||
"import sys\n",
|
||||
"petsc4py.init(sys.argv)\n",
|
||||
"from petsc4py import PETSc"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 39
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import PETScIO as IO\n",
|
||||
"Apetsc = PETSc.Mat().createAIJ(size=A.shape,csr=(A.indptr, A.indices, A.data))\n",
|
||||
"bpetsc = IO.arrayToVec(b)\n",
|
||||
"xpetsc = IO.arrayToVec(0*b)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 40
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"ksp = PETSc.KSP().create()\n",
|
||||
"pc = PETSc.PC().create()\n",
|
||||
"\n",
|
||||
"ksp.setOperators(Apetsc)\n",
|
||||
"\n",
|
||||
"ksp.setType(ksp.Type.CG)\n",
|
||||
"pc = ksp.getPC()\n",
|
||||
"pc.setType(pc.Type.HYPRE)\n",
|
||||
"ksp.view()\n",
|
||||
"\n",
|
||||
"ksp.solve(bpetsc, xpetsc)\n",
|
||||
"print ksp.its"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"3\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 76
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"X = IO.vecToArray(xpetsc)\n",
|
||||
"print np.linalg.norm(A*X-b)\n",
|
||||
"M.plotImage(X)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0.000199616893249\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 77,
|
||||
"text": [
|
||||
"<matplotlib.collections.QuadMesh at 0x792ae50>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x77479d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 77
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
Executable
+145
@@ -0,0 +1,145 @@
|
||||
#! /bin/bash
|
||||
|
||||
locale-gen en_US en_US.UTF-8 hu_HU hu_HU.UTF-8 > output.t
|
||||
dpkg-reconfigure locales >> output.t
|
||||
|
||||
sudo apt-get update >> output.t
|
||||
echo " "
|
||||
echo " "
|
||||
echo " ============================================"
|
||||
echo " | Installing packages form package manager |"
|
||||
echo " ============================================"
|
||||
echo " "
|
||||
echo " "
|
||||
|
||||
sudo apt-get -y install aptitude >> output.t
|
||||
|
||||
packages=(gcc gfortran git libopenmpi-dev python-pip python-dev git flex bison cmake vim cython ipython python-scipy python-numpy python-nose python-pip python-matplotlib python-vtk python-h5py libmumps-ptscotch-4.10.0 libmumps-ptscotch-dev libblas-dev liblapack-dev )
|
||||
|
||||
|
||||
for item in ${packages[*]}
|
||||
do
|
||||
printf " %-30s\n" $item
|
||||
|
||||
done
|
||||
|
||||
for item in ${packages[*]}
|
||||
do
|
||||
tput cuu1
|
||||
done
|
||||
|
||||
for item in ${packages[*]}
|
||||
do
|
||||
sudo aptitude -y install $item >> output.t
|
||||
printf " %-30s %-4s\n" $item done
|
||||
done
|
||||
|
||||
|
||||
echo " "
|
||||
echo " "
|
||||
echo " ====================================="
|
||||
echo " | Installing extra Python libraries |"
|
||||
echo " ====================================="
|
||||
echo " "
|
||||
echo " "
|
||||
|
||||
|
||||
pipPackages=(mpi4py pymumps)
|
||||
|
||||
for item in ${pipPackages[*]}
|
||||
do
|
||||
printf " %-30s\n" $item
|
||||
done
|
||||
|
||||
for item in ${pipPackages[*]}
|
||||
do
|
||||
tput cuu1
|
||||
done
|
||||
|
||||
for item in ${pipPackages[*]}
|
||||
do
|
||||
sudo pip install $item >> output.t
|
||||
printf " %-30s %-4s\n" $item done
|
||||
done
|
||||
|
||||
Upgrade=(scipy numpy ipython)
|
||||
|
||||
for item in ${Upgrade[*]}
|
||||
do
|
||||
printf " %-8s%-7s\n" $item upgrade
|
||||
|
||||
done
|
||||
|
||||
for item in ${Upgrade[*]}
|
||||
do
|
||||
tput cuu1
|
||||
done
|
||||
|
||||
for item in ${Upgrade[*]}
|
||||
do
|
||||
sudo pip install $item --upgrade >> output.t
|
||||
printf " %-8s%-7s %-4s\n" $item upgrade done
|
||||
done
|
||||
|
||||
|
||||
|
||||
echo " "
|
||||
echo " "
|
||||
echo " ====================="
|
||||
echo " | Installing SimPEG |"
|
||||
echo " ====================="
|
||||
echo " "
|
||||
echo " "
|
||||
cd ~
|
||||
|
||||
|
||||
git clone https://github.com/simpeg/simpeg.git >> output.t
|
||||
cd simpeg/SimPEG/
|
||||
python setup.py >> output.t
|
||||
cd ~
|
||||
|
||||
mkdir petsc
|
||||
cd petsc
|
||||
|
||||
echo " "
|
||||
echo " "
|
||||
echo " ===================="
|
||||
echo " | Installing PETSc |"
|
||||
echo " ===================="
|
||||
echo " "
|
||||
echo " "
|
||||
wget http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.4.3.tar.gz
|
||||
|
||||
tar -zxf petsc-3.4.3.tar.gz
|
||||
|
||||
cd petsc-3.4.3
|
||||
|
||||
./configure --with-debugging=no --dowload-mpich=yes --download-blacs=yes --download-f-blas-lapack=yes --download-scalapack=yes --download-mumps=yes --download-ml=yes --download-spooles=yes --download-hypre=yes --dowload-trilinos=yes --download-metis=yes --download-parmetis=yes --download-umfpack=yes --download-ptscotch=yes --download-superlu=yes --download-superlu_dist=yes --download-essl=yes --download-eucild=yes --download-spai=yes --download-mpi4py=yes --download-petsc4py=yes --download-scientificpython=yes
|
||||
|
||||
|
||||
echo "export PETSC_DIR=/home/${USER}/petsc/petsc-3.4.3" >> ~/.bashrc
|
||||
echo "export PETSC_ARCH=arch-linux2-c-opt" >> ~/.bashrc
|
||||
export PETSC_DIR=/home/${USER}/petsc/petsc-3.4.3
|
||||
export PETSC_ARCH=arch-linux2-c-opt
|
||||
. ~/.bashrc
|
||||
|
||||
make PETSC_DIR=/home/${USER}/petsc/petsc-3.4.3 PETSC_ARCH=arch-linux2-c-opt all
|
||||
make PETSC_DIR=/home/${USER}/petsc/petsc-3.4.3 PETSC_ARCH=arch-linux2-c-opt test
|
||||
|
||||
cd ~/petsc
|
||||
echo " "
|
||||
echo " "
|
||||
echo " ======================="
|
||||
echo " | Installing PETSc4PY |"
|
||||
echo " ======================="
|
||||
echo " "
|
||||
echo " "
|
||||
git clone https://bitbucket.org/petsc/petsc4py.git
|
||||
cd petsc4py/
|
||||
python setup.py build >> output.t
|
||||
python setup.py install --prefix=~/petsc >> output.t
|
||||
|
||||
echo "export PYTHONPATH=~/petsc/lib/python2.7/site-packages:/home/$USER/simpeg:${PYTHONPATH}" >> ~/.bashrc
|
||||
|
||||
cd ~
|
||||
source ~/.bashrc
|
||||
Reference in new issue
Block a user