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