Source code for issm.toolkits
from IssmConfig import IssmConfig
from mumpsoptions import mumpsoptions
from iluasmoptions import iluasmoptions
from fielddisplay import fielddisplay
from checkfield import checkfield
from issmgslsolver import issmgslsolver
from issmmumpssolver import issmmumpssolver
[docs]class toolkits(object):
"""
TOOLKITS class definition
Usage:
self=toolkits();
"""
def __init__(self): # {{{
#default toolkits
if IssmConfig('_HAVE_PETSC_')[0]:
#MUMPS is the default toolkits
if IssmConfig('_HAVE_MUMPS_')[0]:
self.DefaultAnalysis = mumpsoptions()
else:
self.DefaultAnalysis = iluasmoptions()
else:
if IssmConfig('_HAVE_MUMPS_')[0]:
self.DefaultAnalysis = issmmumpssolver()
elif IssmConfig('_HAVE_GSL_')[0]:
self.DefaultAnalysis = issmgslsolver()
else:
raise IOError("ToolkitsFile error: need at least Mumps or Gsl to define issm solver type")
#The other properties are dynamic
# }}}
def __repr__(self): # {{{
s ="List of toolkits options per analysis:\n\n"
for analysis in vars(self).iterkeys():
s+="%s\n" % fielddisplay(self,analysis,'')
return s
# }}}
[docs] def addoptions(self,analysis,*args): # {{{
# Usage example:
# md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis',FSoptions());
# md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis');
#Create dynamic property if property does not exist yet
if not hasattr(self,analysis):
setattr(self,analysis,None)
#Add toolkits options to analysis
if len(args)==1:
setattr(self,analysis,args[0])
return self
# }}}
[docs] def checkconsistency(self,md,solution,analyses): # {{{
for analysis in vars(self).iterkeys():
if not getattr(self,analysis):
md.checkmessage("md.toolkits.%s is empty" % analysis)
return md
# }}}
[docs] def ToolkitsFile(self,filename): # {{{
"""
TOOLKITSFILE- build toolkits file
Build a Petsc compatible options file, from the toolkits model field + return options string
This file will also be used when the toolkit used is 'issm' instead of 'petsc'
Usage: ToolkitsFile(toolkits,filename);
"""
#open file for writing
try:
fid=open(filename,'w')
except IOError as e:
raise IOError("ToolkitsFile error: could not open '%s' for writing." % filename)
#write header
fid.write("%s%s%s\n" % ('%Petsc options file: ',filename,' written from Matlab toolkits array'))
#start writing options
for analysis in vars(self).iterkeys():
options=getattr(self,analysis)
#first write analysis:
fid.write("\n+%s\n" % analysis) #append a + to recognize it's an analysis enum
#now, write options
for optionname,optionvalue in options.iteritems():
if not optionvalue:
#this option has only one argument
fid.write("-%s\n" % optionname)
else:
#option with value. value can be string or scalar
if isinstance(optionvalue,(bool,int,long,float)):
fid.write("-%s %g\n" % (optionname,optionvalue))
elif isinstance(optionvalue,(str,unicode)):
fid.write("-%s %s\n" % (optionname,optionvalue))
else:
raise TypeError("ToolkitsFile error: option '%s' is not well formatted." % optionname)
fid.close()
# }}}