Package PyFoam :: Package RunDictionary :: Module RegionCases
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.RunDictionary.RegionCases

  1  #  ICE Revision: $Id: /local/openfoam/Python/PyFoam/PyFoam/RunDictionary/RegionCases.py 6624 2010-05-27T22:52:22.964263Z bgschaid  $  
  2  """Pseudo-Cases for Regions, built from symlinks""" 
  3   
  4  from SolutionDirectory import SolutionDirectory 
  5  from PyFoam.Error import error 
  6  from glob import glob 
  7   
  8  from os import path,mkdir,symlink,unlink,listdir,system,renames 
  9   
10 -class RegionCases:
11 """Builds pseudocases for the regions""" 12
13 - def __init__(self,sol,clean=False,processorDirs=True):
14 """@param sol: solution directory 15 @param clean: Remove old pseudo-cases""" 16 17 self.master=sol 18 regions=self.master.getRegions() 19 if len(regions)<=0: 20 error("No regions in",self.master.name) 21 if clean: 22 self.cleanAll() 23 else: 24 for r in regions: 25 rName=self.master.name+"."+r 26 if path.exists(rName): 27 error("Directory",rName,"alread existing. Did not clean up?") 28 29 for r in regions: 30 rName=self.master.name+"."+r 31 mkdir(rName) 32 33 mkdir(path.join(rName,"system")) 34 for f in listdir(self.master.systemDir(region=r)): 35 self._mklink(self.master.name,r,"system",prefix=path.pardir,postfix=f) 36 symlink(path.join(path.pardir,path.pardir,self.master.name,"system","controlDict"), 37 path.join(rName,"system","controlDict")) 38 symlink(path.join(path.pardir,path.pardir,self.master.name,"system","decomposeParDict"), 39 path.join(rName,"system","decomposeParDict")) 40 41 self._mklink(self.master.name,r,"constant") 42 for t in self.master.getTimes(): 43 self._mklink(self.master.name,r,t) 44 if processorDirs: 45 for p in self.master.processorDirs(): 46 pDir=path.join(self.master.name,p) 47 sDir=path.join(self.master.name+"."+r,p) 48 if not path.exists(sDir): 49 mkdir(sDir) 50 for f in listdir(pDir): 51 self._mklink(self.master.name,r,path.join(p,f),prefix=path.pardir)
52
53 - def resyncAll(self):
54 """Update the master Case from all the region-cases""" 55 56 for r in self.master.getRegions(): 57 self.resync(r)
58
59 - def resync(self,region):
60 """Update the master case from a region case 61 @param region: Name of the region""" 62 rCase=SolutionDirectory(self.master.name+"."+region) 63 rTimes=rCase.getTimes() 64 for t in rTimes+["constant"]: 65 if path.exists(path.join(rCase.name,t)): 66 if not path.exists(path.join(self.master.name,t,region)): 67 self._rename(self.master.name,region,t) 68 for p in rCase.processorDirs(): 69 pDir=path.join(self.master.name,p) 70 if not path.exists(pDir): 71 mkdir(pDir) 72 symlink(path.join(path.pardir,"system"),path.join(pDir,"system")) 73 74 if path.exists(path.join(rCase.name,p,t)): 75 if not path.exists(path.join(pDir,region,t)): 76 self._rename(self.master.name,region,t,processor=p,prefix=path.pardir) 77 if t=="constant": 78 for f in listdir(path.join(self.master.name,t,region)): 79 if f!="polyMesh": 80 # print path.join(pDir,"constant",region,f),"->",path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 81 # print path.exists(path.join(path.join(pDir,"constant",region),path.join(path.pardir,path.pardir,path.pardir,"constant",region,f))) 82 dest=path.join(pDir,"constant",region,f) 83 src=path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 84 if not path.exists(dest): 85 symlink(src,dest)
86 105
106 - def _rename(self,master,region,name,prefix="",processor=""):
107 """Moves a directory from 108 @param master: Name of the master directory 109 @param region: Name of one region 110 @param name: Name of the directory to link 111 @param prefix: A prefix to the path""" 112 113 rName=master+"."+region 114 115 if processor=="": 116 destName=path.join(master,name,region) 117 srcName=path.join(rName,name) 118 prefix=path.pardir 119 else: 120 destName=path.join(master,processor,name,region) 121 srcName=path.join(rName,processor,name) 122 prefix=path.join(path.pardir,path.pardir) 123 124 # print srcName,"->",destName 125 126 if not path.exists(destName): 127 renames(srcName,destName) 128 symlink(path.join(prefix,destName),srcName)
129
130 - def cleanAll(self):
131 for r in self.master.getRegions(): 132 self.clean(r)
133
134 - def clean(self,region):
135 system("rm -rf "+self.master.name+"."+region)
136