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

Source Code for Module PyFoam.Applications.PotentialRunner

  1  #  ICE Revision: $Id: PotentialRunner.py 8341 2008-01-01 15:46:18Z bgschaid $  
  2  """ 
  3  Application class that implements pyFoamSteadyRunner 
  4  """ 
  5   
  6  from os import path,environ 
  7   
  8  from PyFoamApplication import PyFoamApplication 
  9  from PyFoam.FoamInformation import changeFoamVersion 
 10   
 11  from PyFoam.Execution.BasicRunner import BasicRunner 
 12  from PyFoam.RunDictionary.SolutionDirectory import SolutionDirectory 
 13   
 14  from PyFoam.Execution.ParallelExecution import LAMMachine 
 15  from PyFoam.Error import warning,error 
 16   
17 -class PotentialRunner(PyFoamApplication):
18 - def __init__(self,args=None):
19 description=""" 20 Runs the potentialFoam solver on a case to get a decent initial condition. 21 22 Copies the current fields for U and p to backup-files. 23 """ 24 25 PyFoamApplication.__init__(self, 26 args=args, 27 description=description, 28 usage="%prog [options] <caseDirectory>", 29 interspersed=True, 30 nr=1)
31
32 - def addOptions(self):
33 self.parser.add_option("--procnr", 34 type="int", 35 dest="procnr", 36 default=None, 37 help="The number of processors the run should be started on") 38 self.parser.add_option("--machinefile", 39 dest="machinefile", 40 default=None, 41 help="The machinefile that specifies the parallel machine") 42 self.parser.add_option("--foamVersion", 43 dest="foamVersion", 44 default=None, 45 help="Change the OpenFOAM-version that is to be used") 46 self.parser.add_option("--non-orthogonal-correctors", 47 type="int", 48 dest="noCorr", 49 default=None, 50 help="The number of non-orthogonal corrections") 51 self.parser.add_option("--tolerance", 52 type="float", 53 dest="tolerance", 54 default=None, 55 help="Overwrite the tolerance of the linear solver") 56 self.parser.add_option("--relTol", 57 type="float", 58 dest="relTol", 59 default=None, 60 help="Overwrite the relative tolerance of the linear solver") 61 self.parser.add_option("--no-write-p", 62 action="store_false", 63 dest="writep", 64 default=True, 65 help="Don't write pressure p") 66 self.parser.add_option("--pRefCell", 67 type="int", 68 dest="pRefCell", 69 default=None, 70 help="Sets the number of the reference cell for closed cases") 71 self.parser.add_option("--pRefValue", 72 type="int", 73 dest="pRefValue", 74 default=None, 75 help="Sets the pressure reference value for closed cases")
76
77 - def run(self):
78 if self.opts.foamVersion!=None: 79 changeFoamVersion(self.opts.foamVersion) 80 81 cName=self.parser.getArgs()[0] 82 sol=SolutionDirectory(cName,archive=None) 83 initial=sol[0] 84 if "U" not in initial or "p" not in initial: 85 error("Either 'p' or 'U' missing from the initial directory",initial.baseName()) 86 if self.opts.writep: 87 initial["p.prepotential"]=initial["p"] 88 initial["U.prepotential"]=initial["U"] 89 90 lam=None 91 if self.opts.procnr!=None or self.opts.machinefile!=None: 92 lam=LAMMachine(machines=self.opts.machinefile,nr=self.opts.procnr) 93 94 if self.opts.writep: 95 writep=["-writep"] 96 else: 97 writep=[] 98 99 run=BasicRunner(argv=["potentialFoam",".",cName]+writep, 100 server=False, 101 logname="PotentialFoam", 102 lam=lam) 103 104 print "Setting system-directory for potentialFoam" 105 trig=PotentialTrigger(sol, 106 self.opts.noCorr, 107 self.opts.tolerance, 108 self.opts.relTol, 109 pRefCell=self.opts.pRefCell, 110 pRefValue=self.opts.pRefValue) 111 run.addEndTrigger(trig.resetIt) 112 113 run.start()
114 115 import re 116 from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile 117
118 -class PotentialTrigger:
119 - def __init__(self,sol,correctors,tolerance,relTol,pRefValue=None,pRefCell=None):
120 self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True) 121 self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True) 122 self.control=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),backup=True) 123 pot=SolutionDirectory(path.join(environ["FOAM_TUTORIALS"],"potentialFoam","cylinder"),archive=None,paraviewLink=False) 124 125 self.fresh=True 126 127 try: 128 if "SIMPLE" not in self.solution: 129 self.solution["SIMPLE"]=ParsedParameterFile(path.join(pot.systemDir(),"fvSolution"),backup=False)["SIMPLE"] 130 131 if "nNonOrthogonalCorrectors" not in self.solution["SIMPLE"] and correctors==None: 132 correctors=3 133 warning("Setting number of correctors to default value",correctors) 134 if correctors!=None: 135 self.solution["SIMPLE"]["nNonOrthogonalCorrectors"]=correctors 136 137 if pRefCell!=None: 138 self.solution["SIMPLE"]["pRefCell"]=pRefCell 139 if pRefValue!=None: 140 self.solution["SIMPLE"]["pRefValue"]=pRefValue 141 142 if tolerance!=None: 143 self.solution["solvers"]["p"][1]["tolerance"]=tolerance 144 if relTol!=None: 145 self.solution["solvers"]["p"][1]["relTol"]=relTol 146 147 self.schemes.content=ParsedParameterFile(path.join(pot.systemDir(),"fvSchemes"),backup=False).content 148 self.control.content=ParsedParameterFile(path.join(pot.systemDir(),"controlDict"),backup=False).content 149 150 self.solution.writeFile() 151 self.schemes.writeFile() 152 self.control.writeFile() 153 except Exception,e: 154 warning("Restoring defaults") 155 self.solution.restore() 156 self.schemes.restore() 157 self.control.restore() 158 raise e
159
160 - def resetIt(self):
161 if self.fresh: 162 warning("Trigger called: Resetting fvSchemes and fvSolution") 163 self.solution.restore() 164 self.schemes.restore() 165 self.control.restore() 166 self.fresh=False
167