Source code for PyFoam.Applications.CommonSafeTrigger

"""Implements a trigger that sets and resets 'safer' settings for
Steady runs"""

import re
import sys

from os import path
from optparse import OptionGroup
from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
from PyFoam.Error import warning

[docs]class CommonSafeTrigger(object): """ The class that does the actual triggering """
[docs] def addOptions(self): grp=OptionGroup(self.parser, "Safe settings", "Set safer settings for steady runs") grp.add_option("--safe-until", type="float", dest="safeUntil", default=None, help="Sets lower under-relaxation and lower-order convection-schemes for the start of the simulation") grp.add_option("--safe-relaxation-factor", type="float", dest="safeRelaxation", default=0.5, help="The factor by which the relaxation-factors should be scaled down (when calculating safe). Default: %default") self.parser.add_option_group(grp)
[docs] def addSafeTrigger(self,run,sol,steady=True): if self.opts.safeUntil: if not steady: warning("This is an unsteady run. No safe settings set") else: warning("Adding Trigger and resetting to safer start-settings") trig=SafeTrigger(sol,self.opts.safeRelaxation) run.addTrigger(self.opts.safeUntil,trig.resetIt) run.addEndTrigger(trig.resetIt)
[docs]class SafeTrigger: def __init__(self,sol,factor): self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True) self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True) self.fresh=True try: relax=self.solution["relaxationFactors"] for var in relax: relax[var]*=factor cExp=re.compile("div\((.+),(.+)\)") conv=self.schemes["divSchemes"] for nm in conv: if cExp.match(nm) or nm=="default": conv[nm]="Gauss upwind" self.solution.writeFile() self.schemes.writeFile() except Exception: e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e' warning("Restoring defaults") self.solution.restore() self.schemes.restore() raise e
[docs] def resetIt(self): if self.fresh: warning("Trigger called: Resetting fvSchemes and fvSolution") self.solution.restore() self.schemes.restore() self.fresh=False
# Should work with Python3 and Python2