xref: /petsc/config/PETSc/options/dataFilesPath.py (revision 9d310bb76ceaf4434dd2e79465b7666f9cb0876a)
1*9d310bb7SBarry Smithfrom __future__ import generators
2*9d310bb7SBarry Smithimport config.base
3*9d310bb7SBarry Smithimport os
4*9d310bb7SBarry Smithimport re
5*9d310bb7SBarry Smith
6*9d310bb7SBarry Smithclass Configure(config.base.Configure):
7*9d310bb7SBarry Smith  def __init__(self, framework):
8*9d310bb7SBarry Smith    config.base.Configure.__init__(self, framework)
9*9d310bb7SBarry Smith    self.headerPrefix  = 'PETSC'
10*9d310bb7SBarry Smith    self.substPrefix   = 'PETSC'
11*9d310bb7SBarry Smith    self.updated       = 0
12*9d310bb7SBarry Smith    self.strmsg        = ''
13*9d310bb7SBarry Smith    self.datafilespath = ''
14*9d310bb7SBarry Smith    return
15*9d310bb7SBarry Smith
16*9d310bb7SBarry Smith  def __str__(self):
17*9d310bb7SBarry Smith    return self.strmsg
18*9d310bb7SBarry Smith
19*9d310bb7SBarry Smith  def setupHelp(self, help):
20*9d310bb7SBarry Smith    import nargs
21*9d310bb7SBarry Smith    help.addArgument('PETSc', '-DATAFILESPATH=<dir>',                 nargs.Arg(None, None, 'Specifiy location of PETSc datafiles, e.g. test matrices'))
22*9d310bb7SBarry Smith    return
23*9d310bb7SBarry Smith
24*9d310bb7SBarry Smith  def setupDependencies(self, framework):
25*9d310bb7SBarry Smith    config.base.Configure.setupDependencies(self, framework)
26*9d310bb7SBarry Smith    self.petscdir = framework.require('PETSc.options.petscdir', self)
27*9d310bb7SBarry Smith    return
28*9d310bb7SBarry Smith
29*9d310bb7SBarry Smith  def getDatafilespath(self):
30*9d310bb7SBarry Smith    '''Checks what DATAFILESPATH should be'''
31*9d310bb7SBarry Smith    self.datafilespath = None
32*9d310bb7SBarry Smith    if self.framework.argDB.has_key('DATAFILESPATH'):
33*9d310bb7SBarry Smith      if os.path.isdir(self.framework.argDB['DATAFILESPATH']) & os.path.isdir(os.path.join(self.framework.argDB['DATAFILESPATH'], 'matrices')):
34*9d310bb7SBarry Smith        self.datafilespath = str(self.framework.argDB['DATAFILESPATH'])
35*9d310bb7SBarry Smith      else:
36*9d310bb7SBarry Smith        raise RuntimeError('Path given with option -DATAFILES='+self.framework.argDB['DATAFILESPATH']+' is not a valid datafiles directory')
37*9d310bb7SBarry Smith    elif os.path.isdir(os.path.join('/home','petsc','datafiles')) & os.path.isdir(os.path.join('/home','petsc','datafiles','matrices')):
38*9d310bb7SBarry Smith      self.datafilespath = os.path.join('/home','petsc','datafiles')
39*9d310bb7SBarry Smith    elif os.path.isdir(os.path.join(self.petscdir.dir, '..', 'datafiles')) &  os.path.isdir(os.path.join(self.petscdir.dir, '..', 'datafiles', 'matrices')):
40*9d310bb7SBarry Smith      self.datafilespath = os.path.join(self.petscdir.dir, '..', 'datafiles')
41*9d310bb7SBarry Smith    if self.datafilespath is not None:
42*9d310bb7SBarry Smith      self.addMakeMacro('DATAFILESPATH',self.datafilespath)
43*9d310bb7SBarry Smith    return
44*9d310bb7SBarry Smith
45*9d310bb7SBarry Smith  def configure(self):
46*9d310bb7SBarry Smith    self.executeTest(self.getDatafilespath)
47*9d310bb7SBarry Smith    return
48