Changeset 24115 for issm/trunk-jpl/src/m/classes/toolkits.py
- Timestamp:
- 07/30/19 07:52:21 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/toolkits.py
r24082 r24115 3 3 from iluasmoptions import iluasmoptions 4 4 from fielddisplay import fielddisplay 5 from checkfield import checkfield6 5 from issmgslsolver import issmgslsolver 7 6 from issmmumpssolver import issmmumpssolver 8 7 8 9 9 class toolkits(object): 10 11 10 """ 11 TOOLKITS class definition 12 12 13 14 15 13 Usage: 14 self=toolkits(); 15 """ 16 16 17 18 19 20 21 22 self.DefaultAnalysis= mumpsoptions()23 24 self.DefaultAnalysis= iluasmoptions()25 26 27 self.DefaultAnalysis= issmmumpssolver()28 29 self.DefaultAnalysis= issmgslsolver()30 31 17 def __init__(self): # {{{ 18 #default toolkits 19 if IssmConfig('_HAVE_PETSC_')[0]: 20 #MUMPS is the default toolkits 21 if IssmConfig('_HAVE_MUMPS_')[0]: 22 self.DefaultAnalysis = mumpsoptions() 23 else: 24 self.DefaultAnalysis = iluasmoptions() 25 else: 26 if IssmConfig('_HAVE_MUMPS_')[0]: 27 self.DefaultAnalysis = issmmumpssolver() 28 elif IssmConfig('_HAVE_GSL_')[0]: 29 self.DefaultAnalysis = issmgslsolver() 30 else: 31 raise IOError("ToolkitsFile error: need at least Mumps or Gsl to define issm solver type") 32 32 33 34 33 #Use same solver for Recovery mode 34 self.RecoveryAnalysis = self.DefaultAnalysis 35 35 36 37 38 39 s ="List of toolkits options per analysis:\n\n"40 41 s+="%s\n" % fielddisplay(self,analysis,'')36 #The other properties are dynamic 37 # }}} 38 def __repr__(self): # {{{ 39 s = "List of toolkits options per analysis:\n\n" 40 for analysis in list(vars(self).keys()): 41 s += "%s\n" % fielddisplay(self, analysis, '') 42 42 43 return s 44 # }}} 45 def addoptions(self,analysis,*args): # {{{ 46 # Usage example: 47 # md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis',FSoptions()); 48 # md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis'); 43 return s 44 # }}} 49 45 50 #Create dynamic property if property does not exist yet 51 if not hasattr(self,analysis): 52 setattr(self,analysis,None) 46 def addoptions(self, analysis, *args): # {{{ 47 # Usage example: 48 # md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis',FSoptions()); 49 # md.toolkits=addoptions(md.toolkits,'StressbalanceAnalysis'); 53 50 54 #Add toolkits options to analysis 55 if len(args)==1:56 setattr(self,analysis,args[0])51 #Create dynamic property if property does not exist yet 52 if not hasattr(self, analysis): 53 setattr(self, analysis, None) 57 54 58 return self 59 # }}} 60 def checkconsistency(self,md,solution,analyses): # {{{ 61 for analysis in list(vars(self).keys()): 62 if not getattr(self,analysis): 63 md.checkmessage("md.toolkits.%s is empty" % analysis) 55 #Add toolkits options to analysis 56 if len(args) == 1: 57 setattr(self, analysis, args[0]) 64 58 65 return md 66 # }}} 67 def ToolkitsFile(self,filename): # {{{ 68 """ 69 TOOLKITSFILE- build toolkits file 59 return self 60 # }}} 70 61 71 Build a Petsc compatible options file, from the toolkits model field + return options string 72 This file will also be used when the toolkit used is 'issm' instead of 'petsc' 62 def checkconsistency(self, md, solution, analyses): # {{{ 63 for analysis in list(vars(self).keys()): 64 if not getattr(self, analysis): 65 md.checkmessage("md.toolkits.%s is empty" % analysis) 66 67 return md 68 # }}} 69 70 def ToolkitsFile(self, filename): # {{{ 71 """ 72 TOOLKITSFILE- build toolkits file 73 74 Build a Petsc compatible options file, from the toolkits model field + return options string 75 This file will also be used when the toolkit used is 'issm' instead of 'petsc' 73 76 74 77 75 76 78 Usage: ToolkitsFile(toolkits,filename); 79 """ 77 80 78 79 80 fid=open(filename,'w')81 82 81 #open file for writing 82 try: 83 fid = open(filename, 'w') 84 except IOError as e: 85 raise IOError("ToolkitsFile error: could not open '%s' for writing." % filename) 83 86 84 85 fid.write("%s%s%s\n" % ('%Toolkits options file: ',filename,' written from Python toolkits array'))87 #write header 88 fid.write("%s%s%s\n" % ('%Toolkits options file: ', filename, ' written from Python toolkits array')) 86 89 87 88 89 options=getattr(self,analysis)90 #start writing options 91 for analysis in list(vars(self).keys()): 92 options = getattr(self, analysis) 90 93 91 92 93 94 for optionname,optionvalue in list(options.items()):94 #first write analysis: 95 fid.write("\n+%s\n" % analysis) #append a + to recognize it's an analysis enum 96 #now, write options 97 for optionname, optionvalue in list(options.items()): 95 98 96 97 98 99 100 101 if isinstance(optionvalue,(bool,int,float)):102 fid.write("-%s %g\n" % (optionname,optionvalue))103 elif isinstance(optionvalue,str):104 fid.write("-%s %s\n" % (optionname,optionvalue))105 106 99 if not optionvalue: 100 #this option has only one argument 101 fid.write("-%s\n" % optionname) 102 else: 103 #option with value. value can be string or scalar 104 if isinstance(optionvalue, (bool, int, float)): 105 fid.write("-%s %g\n" % (optionname, optionvalue)) 106 elif isinstance(optionvalue, str): 107 fid.write("-%s %s\n" % (optionname, optionvalue)) 108 else: 109 raise TypeError("ToolkitsFile error: option '%s' is not well formatted." % optionname) 107 110 108 109 111 fid.close() 112 # }}}
Note:
See TracChangeset
for help on using the changeset viewer.