1
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
10 """Builds pseudocases for the regions"""
11
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
53 """Update the master Case from all the region-cases"""
54
55 for r in self.master.getRegions():
56 self.resync(r)
57
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
80
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
86 - def _mklink(self,master,region,name,prefix="",postfix=""):
87 """Makes a link from the master case to the pseudo-case
88 @param master: Name of the master directory
89 @param region: Name of one region
90 @param name: Name of the directory to link
91 @param prefix: A prefix to the path
92 @param postfix: An actual file to the path"""
93
94 destname=path.join(master+"."+region,name)
95 srcname=path.join(prefix,path.pardir,master,name,region,postfix)
96 if postfix!="":
97 destname=path.join(destname,postfix)
98
99
100
101 symlink(srcname,destname)
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
122
123 if not path.exists(destName):
124 renames(srcName,destName)
125 symlink(path.join(prefix,destName),srcName)
126
130
132 system("rm -rf "+self.master.name+"."+region)
133