tlinalg_numpy.py - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
 (HTM) git clone git://src.adamsgaard.dk/pism
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tlinalg_numpy.py (1845B)
       ---
            1 ############################################################################
            2 #
            3 #  This file is a part of siple.
            4 #
            5 #  Copyright 2010 David Maxwell
            6 #
            7 #  siple is free software: you can redistribute it and/or modify
            8 #  it under the terms of the GNU General Public License as published by
            9 #  the Free Software Foundation, either version 2 of the License, or
           10 #  (at your option) any later version.
           11 # 
           12 ############################################################################
           13 
           14 from .linalg_abstract import AbstractVector
           15 import numpy as np
           16 
           17 class NumpyVector(AbstractVector):
           18   """Implements the siple.linalg.AbstractVector interface for a numpy array."""
           19   def __init__(self,u):
           20     if isinstance(u,tuple):
           21       u = np.ndarray(u)
           22     elif not isinstance(u,np.ndarray):
           23       raise ValueError("An NumpyVector can only be constructed from a numpy array or a size specification: found %s" % u)
           24 
           25     self._core = u
           26 
           27   def _set_from_abstract(self,rhs):
           28     self._core[:] = rhs._core[:]
           29 
           30   def _set_from_array(self,rhs):
           31     self._core[:] = rhs[:]
           32 
           33   def acc(self,rhs):
           34     self._core += rhs._core
           35   
           36   def scale(self,t):
           37     self._core *= t
           38   
           39   def axpy(self,t,v):
           40     self._core += t*v._core
           41   
           42   def copy(self):
           43     return NumpyVector(self._core.copy())
           44   
           45   def vector_like(self):
           46     return NumpyVector(np.ndarray(self._core.shape))
           47     
           48   def zero_like(self):
           49     z = np.zeros(self._core.shape)
           50     return NumpyVector(z)
           51   
           52   def dim(self):
           53     return self._core.shape[0]
           54   
           55   def core(self):
           56     return self._core
           57 
           58   def norm(self,name):
           59     if name == 'l2':
           60       return np.linalg.norm(self._core,2)
           61     if name == 'l1':
           62       return np.linalg.norm(self._core,1)
           63     if name == 'linf':
           64       return np.linalg.norm(self._core,np.inf)
           65   
           66   def __repr__(self):
           67     return self._core.__repr__()
           68   def __str__(self):
           69