Source code for PyFoam.Applications.ClearCase

"""
Application-class that implements pyFoamClearCase.py
"""
import sys
from os import path

from optparse import OptionGroup

from .PyFoamApplication import PyFoamApplication

from PyFoam.RunDictionary.SolutionDirectory import SolutionDirectory

from PyFoam.ThirdParty.six import print_

from PyFoam.Basics.Utilities import execute

[docs]class ClearCase(PyFoamApplication): def __init__(self, args=None, **kwargs): description="""\ Removes all timesteps but the first from a case-directory. Also removes other data that is generated by solvers/utilities/PyFoam If a Allclean-script is found then this is executed as well """ PyFoamApplication.__init__(self, args=args, description=description, usage="%prog <caseDirectory>", interspersed=True, changeVersion=False, nr=1, exactNr=False, **kwargs)
[docs] def addOptions(self): what=OptionGroup(self.parser, "What", "Define what should be cleared") self.parser.add_option_group(what) what.add_option("--after", type="float", dest="after", default=None, help="Only remove timesteps after this time") what.add_option("--processors-remove", action="store_true", dest="processor", default=False, help="Remove the processor directories") what.add_option("--vtk-keep", action="store_false", dest="vtk", default=True, help="Keep the VTK directory") what.add_option("--no-pyfoam", action="store_false", dest="pyfoam", default=True, help="Keep the PyFoam-specific directories and logfiles") what.add_option("--remove-analyzed", action="store_true", dest="removeAnalyzed", default=False, help="Also remove the directories thatend with 'analyzed' (usually created by PyFoam)") what.add_option("--keep-last", action="store_true", dest="latest", default=False, help="Keep the data from the last time-step") what.add_option("--keep-time", action="append", dest="keepTimes", default=[], help="Keep the specified time. Can be specified more than once") what.add_option("--keep-regular", action="store_true", dest="keepRegular", default=False, help="Keep all the 'regular' timesteps") what.add_option("--keep-parallel", action="store_true", dest="keepParallel", default=False, help="Keep all the timesteps in the processor-directories") what.add_option("--keep-interval", action="store", type=float, dest="keepInterval", default=None, help="Keep timesteps that are this far apart") what.add_option("--keep-postprocessing", action="store_true", dest="keepPostprocessing", default=False, help="Keep the directory 'postProcessing' where functionObjects write their stuff") what.add_option("--additional", action="append", dest="additional", default=[], help="Glob-pattern with additional files to be removes. Can be used more than once") what.add_option("--clear-history", action="store_true", dest="clearHistory", default=False, help="Clear the PyFoamHistory-file") what.add_option("--no-clear-parameters", action="store_false", dest="clearParameters", default=True, help="Don't clear the PyFoamPrepareCaseParameters-file") what.add_option("--function-object-data", action="store_true", dest="functionObjectData", default=False, help="Clear data written by functionObjects. Only works if the data directory has the same name as the functionObject") output=OptionGroup(self.parser, "Output", "What information should be given") self.parser.add_option_group(output) output.add_option("--fatal", action="store_true", dest="fatal", default=False, help="If non-cases are specified the program should abort") output.add_option("--silent", action="store_true", dest="silent", default=False, help="Don't complain about non-case-files") output.add_option("--verbose-cases", action="store_true", dest="verbose", default=False, help="Print what cases are cleared") output.add_option("--verbose-clear", action="store_true", dest="verboseClear", default=False, help="Print what is being cleared during clearing") how=OptionGroup(self.parser, "How", "How the clearing should take place") self.parser.add_option_group(how) how.add_option("--dry-run", action="store_true", dest="dryRun", default=False, help="Don't clear anything. Switches on --verbose-clear and --verbose-cases") how.add_option("--no-allclean-script", action="store_false", dest="allcleanScript", default=True, help="Do not use a Allclean-script if found")
[docs] def run(self): if not self.opts.keepPostprocessing: self.opts.additional.append("postProcessing") notCleared=[] if self.opts.dryRun: self.opts.verbose=True self.opts.verboseClear=True for cName in self.parser.getArgs(): if self.checkCase(cName,fatal=self.opts.fatal,verbose=not self.opts.silent): if self.opts.allcleanScript: scr=path.join(cName,"Allclean") if(path.exists(scr)): if self.opts.verbose or self.opts.verboseClear: print("Executing",scr) execute(scr,workdir=cName) try: self.addLocalConfig(cName) if self.opts.verbose: print_("Clearing",cName) sol=SolutionDirectory(cName, archive=None, parallel=True, paraviewLink=False) sol.clear(after=self.parser.getOptions().after, processor=self.parser.getOptions().processor, pyfoam=self.parser.getOptions().pyfoam, vtk=self.parser.getOptions().vtk, verbose=self.parser.getOptions().verboseClear, removeAnalyzed=self.parser.getOptions().removeAnalyzed, keepRegular=self.parser.getOptions().keepRegular, keepParallel=self.parser.getOptions().keepParallel, keepLast=self.parser.getOptions().latest, keepInterval=self.parser.getOptions().keepInterval, keepTimes=self.opts.keepTimes, clearHistory=self.parser.getOptions().clearHistory, clearParameters=self.parser.getOptions().clearParameters, additional=self.parser.getOptions().additional, dryRun=self.opts.dryRun, functionObjectData=self.parser.getOptions().functionObjectData) self.addToCaseLog(cName) except OSError: e = sys.exc_info()[1] # compatible with 2.x and 3.x self.warning("Can not clear",cName,"because of OSError",e) notCleared.append(cName) if len(notCleared)>0: self.warning("These case not cleared because of OS-problems:", ", ".join(notCleared))