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

Source Code for Module PyFoam.Applications.PotentialRunner

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