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

Source Code for Module PyFoam.RunDictionary.RegionCases

  1  #  ICE Revision: $Id: RegionCases.py 9441 2008-09-22 20:51:21Z 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 if clean: 21 self.cleanAll() 22 else: 23 for r in regions: 24 rName=self.master.name+"."+r 25 if path.exists(rName): 26 error("Directory",rName,"alread existing. Did not clean up?") 27 28 for r in regions: 29 rName=self.master.name+"."+r 30 mkdir(rName) 31 32 mkdir(path.join(rName,"system")) 33 for f in listdir(self.master.systemDir(region=r)): 34 self._mklink(self.master.name,r,"system",prefix=path.pardir,postfix=f) 35 symlink(path.join(path.pardir,path.pardir,self.master.name,"system","controlDict"), 36 path.join(rName,"system","controlDict")) 37 symlink(path.join(path.pardir,path.pardir,self.master.name,"system","decomposeParDict"), 38 path.join(rName,"system","decomposeParDict")) 39 40 self._mklink(self.master.name,r,"constant") 41 for t in self.master.getTimes(): 42 self._mklink(self.master.name,r,t) 43 for p in self.master.processorDirs(): 44 pDir=path.join(self.master.name,p) 45 sDir=path.join(self.master.name+"."+r,p) 46 if not path.exists(sDir): 47 mkdir(sDir) 48 for f in listdir(pDir): 49 self._mklink(self.master.name,r,path.join(p,f),prefix=path.pardir)
50
51 - def resyncAll(self):
52 """Update the master Case from all the region-cases""" 53 54 for r in self.master.getRegions(): 55 self.resync(r)
56
57 - def resync(self,region):
58 """Update the master case from a region case 59 @param region: Name of the region""" 60 rCase=SolutionDirectory(self.master.name+"."+region) 61 rTimes=rCase.getTimes() 62 for t in rTimes+["constant"]: 63 if path.exists(path.join(rCase.name,t)): 64 if not path.exists(path.join(self.master.name,t,region)): 65 self._rename(self.master.name,region,t) 66 for p in rCase.processorDirs(): 67 pDir=path.join(self.master.name,p) 68 if not path.exists(pDir): 69 mkdir(pDir) 70 symlink(path.join(path.pardir,"system"),path.join(pDir,"system")) 71 72 if path.exists(path.join(rCase.name,p,t)): 73 if not path.exists(path.join(pDir,region,t)): 74 self._rename(self.master.name,region,t,processor=p,prefix=path.pardir) 75 if t=="constant": 76 for f in listdir(path.join(self.master.name,t,region)): 77 if f!="polyMesh": 78 # print path.join(pDir,"constant",region,f),"->",path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 79 # print path.exists(path.join(path.join(pDir,"constant",region),path.join(path.pardir,path.pardir,path.pardir,"constant",region,f))) 80 dest=path.join(pDir,"constant",region,f) 81 src=path.join(path.pardir,path.pardir,path.pardir,"constant",region,f) 82 if not path.exists(dest): 83 symlink(src,dest)
84 101
102 - def _rename(self,master,region,name,prefix="",processor=""):
103 """Moves a directory from 104 @param master: Name of the master directory 105 @param region: Name of one region 106 @param name: Name of the directory to link 107 @param prefix: A prefix to the path""" 108 109 rName=master+"."+region 110 111 if processor=="": 112 destName=path.join(master,name,region) 113 srcName=path.join(rName,name) 114 prefix=path.pardir 115 else: 116 destName=path.join(master,processor,name,region) 117 srcName=path.join(rName,processor,name) 118 prefix=path.join(path.pardir,path.pardir) 119 120 # print srcName,"->",destName 121 122 if not path.exists(destName): 123 renames(srcName,destName) 124 symlink(path.join(prefix,destName),srcName)
125
126 - def cleanAll(self):
127 for r in self.master.getRegions(): 128 self.clean(r)
129
130 - def clean(self,region):
131 system("rm -rf "+self.master.name+"."+region)
132