Package PyFoam :: Package Applications :: Module PotentialRunner
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Applications.PotentialRunner

  1  #  ICE Revision: $Id: /local/openfoam/Python/PyFoam/PyFoam/Applications/PotentialRunner.py 7319 2011-03-03T23:10:51.400635Z bgschaid  $  
  2  """ 
  3  Application class that implements pyFoamSteadyRunner 
  4  """ 
  5   
  6  from os import path,environ 
  7  from optparse import OptionGroup 
  8   
  9  from PyFoamApplication import PyFoamApplication 
 10   
 11  from PyFoam.Execution.BasicRunner import BasicRunner 
 12  from PyFoam.RunDictionary.SolutionDirectory import SolutionDirectory 
 13   
 14  from PyFoam.Error import warning,error 
 15   
 16  from PyFoam.FoamInformation import oldAppConvention as oldApp 
 17   
 18  from CommonParallel import CommonParallel 
 19  from CommonStandardOutput import CommonStandardOutput 
 20  from CommonServer import CommonServer 
 21  from CommonVCSCommit import CommonVCSCommit 
 22   
 23  from PyFoam.FoamInformation import oldTutorialStructure 
 24   
25 -class PotentialRunner(PyFoamApplication, 26 CommonStandardOutput, 27 CommonServer, 28 CommonParallel, 29 CommonVCSCommit):
30 - def __init__(self,args=None):
31 description=""" 32 Runs the potentialFoam solver on a case to get a decent initial condition. 33 34 Copies the current fields for U and p to backup-files. 35 """ 36 37 PyFoamApplication.__init__(self, 38 args=args, 39 description=description, 40 usage="%prog [options] <caseDirectory>", 41 interspersed=True, 42 nr=1)
43
44 - def addOptions(self):
45 pot=OptionGroup(self.parser, 46 "Solver settings", 47 "Basic settings for the potentialFoam-solver") 48 49 pot.add_option("--non-orthogonal-correctors", 50 type="int", 51 dest="noCorr", 52 default=None, 53 help="The number of non-orthogonal corrections") 54 pot.add_option("--tolerance", 55 type="float", 56 dest="tolerance", 57 default=None, 58 help="Overwrite the tolerance of the linear solver") 59 pot.add_option("--relTol", 60 type="float", 61 dest="relTol", 62 default=None, 63 help="Overwrite the relative tolerance of the linear solver") 64 pot.add_option("--no-write-p", 65 action="store_false", 66 dest="writep", 67 default=True, 68 help="Don't write pressure p") 69 pot.add_option("--pRefCell", 70 type="int", 71 dest="pRefCell", 72 default=None, 73 help="Sets the number of the reference cell for closed cases") 74 pot.add_option("--pRefValue", 75 type="int", 76 dest="pRefValue", 77 default=None, 78 help="Sets the pressure reference value for closed cases") 79 self.parser.add_option_group(pot) 80 81 CommonParallel.addOptions(self) 82 CommonStandardOutput.addOptions(self) 83 CommonServer.addOptions(self,False) 84 CommonVCSCommit.addOptions(self)
85
86 - def run(self):
87 cName=self.parser.getArgs()[0] 88 sol=SolutionDirectory(cName,archive=None) 89 self.addLocalConfig(cName) 90 initial=sol[0] 91 if "U" not in initial or "p" not in initial: 92 error("Either 'p' or 'U' missing from the initial directory",initial.baseName()) 93 if self.opts.writep: 94 initial["p.prepotential"]=initial["p"] 95 initial["U.prepotential"]=initial["U"] 96 97 lam=self.getParallel(sol) 98 99 if self.opts.writep: 100 writep=["-writep"] 101 else: 102 writep=[] 103 104 argv=["potentialFoam"] 105 if oldApp(): 106 argv+=[".",cName] 107 else: 108 argv+=["-case",cName] 109 110 self.setLogname(default="Potential",useApplication=False) 111 112 self.checkAndCommit(sol) 113 114 run=BasicRunner(argv=argv+writep, 115 server=self.opts.server, 116 logname=self.opts.logname, 117 compressLog=self.opts.compress, 118 silent=self.opts.progress, 119 lam=lam, 120 noLog=self.opts.noLog) 121 122 print "Setting system-directory for potentialFoam" 123 trig=PotentialTrigger(sol, 124 self.opts.noCorr, 125 self.opts.tolerance, 126 self.opts.relTol, 127 pRefCell=self.opts.pRefCell, 128 pRefValue=self.opts.pRefValue) 129 run.addEndTrigger(trig.resetIt) 130 131 self.addToCaseLog(cName,"Starting") 132 133 run.start() 134 135 self.addToCaseLog(cName,"Ending")
136 137 import re 138 from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile 139
140 -class PotentialTrigger:
141 - def __init__(self,sol,correctors,tolerance,relTol,pRefValue=None,pRefCell=None):
142 self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True) 143 self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True) 144 self.control=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),backup=True) 145 pre=environ["FOAM_TUTORIALS"] 146 if not oldTutorialStructure(): 147 pre=path.join(pre,"basic") 148 pot=SolutionDirectory(path.join(pre,"potentialFoam","cylinder"),archive=None,paraviewLink=False) 149 150 self.fresh=True 151 152 try: 153 if "SIMPLE" not in self.solution: 154 self.solution["SIMPLE"]=ParsedParameterFile(path.join(pot.systemDir(),"fvSolution"),backup=False)["SIMPLE"] 155 156 if "nNonOrthogonalCorrectors" not in self.solution["SIMPLE"] and correctors==None: 157 correctors=3 158 warning("Setting number of correctors to default value",correctors) 159 if correctors!=None: 160 self.solution["SIMPLE"]["nNonOrthogonalCorrectors"]=correctors 161 162 if pRefCell!=None: 163 self.solution["SIMPLE"]["pRefCell"]=pRefCell 164 if pRefValue!=None: 165 self.solution["SIMPLE"]["pRefValue"]=pRefValue 166 167 if tolerance!=None: 168 try: 169 self.solution["solvers"]["p"][1]["tolerance"]=tolerance 170 except KeyError: 171 # 1.6 format 172 self.solution["solvers"]["p"]["tolerance"]=tolerance 173 174 if relTol!=None: 175 try: 176 self.solution["solvers"]["p"][1]["relTol"]=relTol 177 except KeyError: 178 # 1.6 format 179 self.solution["solvers"]["p"]["relTol"]=relTol 180 181 self.schemes.content=ParsedParameterFile(path.join(pot.systemDir(),"fvSchemes"),backup=False).content 182 self.control.content=ParsedParameterFile(path.join(pot.systemDir(),"controlDict"),backup=False).content 183 184 self.solution.writeFile() 185 self.schemes.writeFile() 186 self.control.writeFile() 187 except Exception,e: 188 warning("Restoring defaults") 189 self.solution.restore() 190 self.schemes.restore() 191 self.control.restore() 192 raise e
193
194 - def resetIt(self):
195 if self.fresh: 196 warning("Trigger called: Resetting fvSchemes and fvSolution") 197 self.solution.restore() 198 self.schemes.restore() 199 self.control.restore() 200 self.fresh=False
201