| | |
| | | #!/usr/bin/python3 |
| | | |
| | | import configobj |
| | | import xml.etree.ElementTree as ET |
| | | import base64 |
| | |
| | | ''' |
| | | try: |
| | | self.config=configobj.ConfigObj(tape) |
| | | with open (tape, "r") as myfile: |
| | | self.rawText=myfile.read() #read the file |
| | | |
| | | except: |
| | | print("Error reading or parsing tape file!\n") |
| | | exit(1) |
| | |
| | | def setTape(self, string): |
| | | '''Method setTape(string) parses the string in memory that hold the tape contents.''' |
| | | self.config=configobj.ConfigObj(io.StringIO(string)) |
| | | self.rawText=string |
| | | return |
| | | |
| | | def getValue(self,key): |
| | |
| | | else: |
| | | try: |
| | | with open (os.path.join(self.Dir.fullpath(),"tape"), "w") as myfile: |
| | | myfile.write("#This is automatically generated tape file from snapshot") |
| | | myfile.write(str(self.tape)) |
| | | #myfile.write("#This is automatically generated tape file from snapshot") |
| | | myfile.write(str(self.tape.rawText)) |
| | | except: |
| | | print("Error -- cannot make tapefile "+ os.path.join(self.Dir.fullpath(),"tape")+" from the snapshot in the running directory") |
| | | exit(1) |
| | | try: |
| | | os.symlink(os.path.abspath(self.snapshotFile), os.path.join(self.Dir.fullpath(),self.snapshotFile)) |
| | | os.symlink(os.path.abspath(self.snapshotFile), os.path.join(self.Dir.fullpath(),"initial_snapshot.vtu")) |
| | | except: |
| | | print("Error while symlinking "+os.path.abspath(self.snapshotFile)+" to "+os.path.join(self.Dir.fullpath(),self.snapshotFile)) |
| | | |
| | |
| | | return |
| | | |
| | | cwd=Directory(maindir=os.getcwd()) |
| | | lastVTU=self.getLastVTU() #we get last VTU file in case we need to continue the simulation from last snapshot. Need to be done before the Dir.goto() call. |
| | | self.Dir.goto() |
| | | print("Starting trisurf-ng executable in "+self.Dir.fullpath()) |
| | | if(self.fromSnapshot==True): |
| | | params=["trisurf", "--restore-from-vtk",self.snapshotFile]+self.runArgs |
| | | #here we try to determine whether we should continue the simulation or start from last known VTU snapshot. |
| | | if(lastVTU==None): |
| | | initSnap="initial_snapshot.vtu" |
| | | else: |
| | | initSnap=lastVTU |
| | | print("WARNING: Not using initial snapshot as starting point, but selecting "+initSnap+" as a starting vesicle") |
| | | params=["trisurf", "--restore-from-vtk",initSnap]+self.runArgs |
| | | print("InitSnap is: "+initSnap) |
| | | else: |
| | | #veify if dump exists. If not it is a first run and shoud be run with --force-from-tape |
| | | if(os.path.isfile("dump.bin")==False): |
| | |
| | | print("Process in "+self.Dir.fullpath()+" already running. Not starting.") |
| | | return |
| | | |
| | | def stop(self): |
| | | pass |
| | | |
| | | def setMaindir(self,prefix,variables): |
| | | maindir="" |
| | |
| | | report=["N/A","N/A",statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()] |
| | | return report |
| | | |
| | | |
| | | def stop(self): |
| | | p=psutil.Process(self.getPID()) |
| | | p.kill() |
| | | |
| | | def writeComment(self, data, mode='w'): |
| | | self.Dir=Directory(maindir=self.maindir,simdir=self.subdir) |
| | | self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment")) |
| | | self.Comment.writefile(data,mode=mode) |
| | | |
| | | |
| | | def getLastVTU(self): |
| | | vtuidx=self.getLastIteration() |
| | | if vtuidx<0: |
| | | return None |
| | | else: |
| | | return 'timestep_{:06d}.vtu'.format(vtuidx) |
| | | |
| | | def __str__(self): |
| | | if(self.getStatus()==0): |
| | | str=" not running." |