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

Source Code for Module PyFoam.RunDictionary.RegionCases

  1  #  ICE Revision: $Id: RegionCases.py 7963 2007-09-20 08:33:19Z bgschaid $  
  2  """Pseudo-Cases for Regions, built from symlinks""" 
  3   
  4  from SolutionDirectory import SolutionDirectory 
  5  from PyFoam.Error import error 
  6   
  7  from os import path,mkdir,symlink,unlink,listdir,system,renames 
  8   
9 -class RegionCases:
10 """Builds pseudocases for the regions""" 11
12 - def __init__(self,sol,clean=False):
13 """@param sol: solution directory 14 @param clean: Remove old pseudo-cases""" 15 16 self.master=sol 17 regions=self.master.getRegions() 18 if len(regions)<=0: 19 error("No regions in",self.master.name) 20 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 for p in self.master.processorDirs(): 45 pDir=path.join(self.master.name,p) 46 sDir=path.join(self.master.name+"."+r,p) 47 if not path.exists(sDir): 48 mkdir(sDir) 49 for f in listdir(pDir): 50 self._mklink(self.master.name,r,path.join(p,f),prefix=path.pardir)
51
52 - def resyncAll(self):
53 """Update the master Case from all the region-cases""" 54 55 for r in self.master.getRegions(): 56 self.resync(r)
57
58 - def resync(self,region):
59 """Update the master case from a region case 60 @param region: Name of the region""" 61 rCase=SolutionDirectory(self.master.name+"."+region) 62 rTimes=rCase.getTimes() 63 for t in rTimes+["constant"]: 64 if path.exists(path.join(rCase.name,t)): 65 if not path.exists(path.join(self.master.name,t,region)): 66 self._rename(self.master.name,region,t) 67 for p in rCase.processorDirs(): 68 pDir=path.join(self.master.name,p) 69 if not path.exists(pDir): 70 mkdir(pDir) 71 symlink(path.join(path.pardir,"system"),path.join(pDir,"system")) 72 73 if path.exists(path.join(rCase.name,p,t)): 74 if not path.exists(path.join(pDir,region,t)): 75 self._rename(self.master.name,region,t,processor=p,prefix=path.pardir) 76 if t=="constant": 77 for f in listdir(path.join(self.master.name,t,region)): 78 if f!="polyMesh": 79 # print path.join(pDir,"constant",region,f),"->",path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 80 # print path.exists(path.join(path.join(pDir,"constant",region),path.join(path.pardir,path.pardir,path.pardir,"constant",region,f))) 81 dest=path.join(pDir,"constant",region,f) 82 src=path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 83 if not path.exists(dest): 84 symlink(src,dest)
85 102
103 - def _rename(self,master,region,name,prefix="",processor=""):
104 """Moves a directory from 105 @param master: Name of the master directory 106 @param region: Name of one region 107 @param name: Name of the directory to link 108 @param prefix: A prefix to the path""" 109 110 rName=master+"."+region 111 112 if processor=="": 113 destName=path.join(master,name,region) 114 srcName=path.join(rName,name) 115 prefix=path.pardir 116 else: 117 destName=path.join(master,processor,name,region) 118 srcName=path.join(rName,processor,name) 119 prefix=path.join(path.pardir,path.pardir) 120 121 # print srcName,"->",destName 122 123 if not path.exists(destName): 124 renames(srcName,destName) 125 symlink(path.join(prefix,destName),srcName)
126
127 - def cleanAll(self):
128 for r in self.master.getRegions(): 129 self.clean(r)
130
131 - def clean(self,region):
132 system("rm -rf "+self.master.name+"."+region)
133