Trisurf Monte Carlo simulator
Samo Penic
2016-06-02 08a4a2072e2248696eeb2a5cf93a8bcb90390596
python/trisurf/trisurf.py
@@ -1,5 +1,3 @@
#!/usr/bin/python3
import configobj
import xml.etree.ElementTree as ET
import base64
@@ -84,6 +82,9 @@
      '''
      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)
@@ -91,6 +92,7 @@
   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):
@@ -364,13 +366,13 @@
            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))
      
@@ -380,10 +382,18 @@
            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):
@@ -395,8 +405,6 @@
         print("Process in "+self.Dir.fullpath()+" already running. Not starting.")
      return
   def stop(self):
      pass
   def setMaindir(self,prefix,variables):
      maindir=""
@@ -441,11 +449,24 @@
         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."