Trisurf Monte Carlo simulator
Samo Penic
2016-07-13 6415a3e0127eb4278e0975f0ba280840ceb1ef95
Merge branch 'master' of bitbucket.org:samop/trisurf-ng
5 files modified
106 ■■■■■ changed files
python/trisurf/VTKRendering.py 85 ●●●●● patch | view | raw | blame | history
src/general.h 1 ●●●● patch | view | raw | blame | history
src/io.c 2 ●●● patch | view | raw | blame | history
src/poly.c 4 ●●●● patch | view | raw | blame | history
src/tape 14 ●●●●● patch | view | raw | blame | history
python/trisurf/VTKRendering.py
@@ -4,6 +4,80 @@
    from vtk import *
class MultiRender:
    def __init__(self,args,host):
        target_runs=getRargetRunIdxList(args)
        if target_runs==None:
            target_runs=list(range(1,len(host['runs'])+1))
        nruns=len(target_runs)
        #prepare rendering window
        self.renderer_window = vtkRenderWindow()
        self.renderer_window.AddRenderer(self.renderer)
        self.renderer_window.SetSize(1200,600)
        interactor = vtkRenderWindowInteractor()
        interactor.SetRenderWindow(self.renderer_window)
        interactor.Initialize()
         interactor.AddObserver("TimerEvent", self.RenderUpdate)
        timerIDR = interactor.CreateRepeatingTimer(1000)
        self.filename=[]
        self.renderer=[]
        i=0
        for run in target_runs:
            #for each target run calculate renderer location
            r.vtkRenderer()
            r.SetBackground(0,0,0)
            p=1.0/float(nruns)
            x1=i*p
            x2=(i+1)*p
            r.SetViewport(x1,0.0,x2,1.0)
            self.renderer.Append(r)
            self.renderer_window.AddRenderer(r)
            i=i+1
        #call Renderer object with Run, renderer
        #start endless loop of interactor
        interactor.Start()
    def lastVTU(self,run):
        Dir=trisurf.Directory(maindir=run.maindir,simdir=run.subdir)
        filename=os.path.join("./",Dir.fullpath(),run.getLastVTU())
        return filename
    def lastActorForRun(self,run):
        filename=self.lastVTU(run)
        reader=vtkXMLUnstructuredGridReader()
        reader.SetFileName(self.filename)
        reader.Update() # Needed because of GetScalarRange
        output = reader.GetOutput()
        scalar_range = output.GetScalarRange()
        mapper = vtkDataSetMapper()
        mapper.SetInput(output)
        mapper.SetScalarRange(scalar_range)
        # Create the Actor
        actor = vtkActor()
        actor.SetMapper(mapper)
        return actor
    def RenderUpdate(self, obj, event):
        i=0
        for run in runs:
            if(self.lastVTU(run)!=self.filename[i]):
                #print("updejt")
                self.renderer.RemoveActor(self.actor)
                self.renderer.RemoveActor(self.textactor)
                self.actor=self.lastActor()
                self.textactor=self.textActor()
                self.renderer.AddActor(self.actor)
                self.renderer.AddActor(self.textactor)
                self.renderer_window.Render()
            #self.render.RemoveActor(self.actor)
            i=i+1
        return
class Renderer:
    def __init__(self,args,host):
        self.host=host
@@ -14,11 +88,16 @@
        self.renderer.AddActor(self.actor)
        self.renderer.AddActor(self.textactor)
        self.renderer.SetBackground(0, 0, 0) # Set background to white
        # Create the RendererWindow
        self.renderer_window = vtkRenderWindow()
        self.renderer_window.AddRenderer(self.renderer)
        self.renderer_window.SetSize(1200,600)
        self.renderer.SetViewport(0.0,0.0,0.5,1.0)
        rend=vtk.vtkRenderer()
        rend.AddActor(self.actor)
        rend.SetViewport(0.5,0.0,1.0,1.0)
        self.renderer_window.AddRenderer(rend)
# Set up a check for aborting rendering.
        # Create the RendererWindowInteractor and display the vtk_file
        interactor = vtkRenderWindowInteractor()
@@ -40,7 +119,7 @@
        textactor.SetInput(self.filename)
        tp=textactor.GetTextProperty()
        tp.SetColor(1,1,1)
        tp.SetFontSize(18)
        tp.SetFontSize(11)
        textactor.SetDisplayPosition(20,30)
        return textactor
src/general.h
@@ -257,6 +257,7 @@
    long int nczmax;
    long int npoly;
    long int nmono;
    long int internal_poly;
    long int nfil;
    long int nfono;
    long int R_nucleus;
src/io.c
@@ -888,7 +888,6 @@
        fprintf(fh,"</DataArray>\n");
    
    fprintf(fh,"</PointData>\n<CellData>\n</CellData>\n<Points>\n<DataArray type=\"Float64\" Name=\"Koordinate tock\" NumberOfComponents=\"3\" format=\"ascii\">\n");
    for(i=0;i<vlist->n;i++){
        fprintf(fh,"%.17e %.17e %.17e\n",vtx[i]->x,vtx[i]->y, vtx[i]->z);
@@ -1066,6 +1065,7 @@
        CFG_SIMPLE_INT("nmono", &tape->nmono),
    CFG_SIMPLE_INT("nfil",&tape->nfil),
    CFG_SIMPLE_INT("nfono",&tape->nfono),
    CFG_SIMPLE_INT("internal_poly",&tape->internal_poly),
    CFG_SIMPLE_INT("R_nucleus",&tape->R_nucleus),
    CFG_SIMPLE_FLOAT("R_nucleusX",&tape->R_nucleusX),
    CFG_SIMPLE_FLOAT("R_nucleusY",&tape->R_nucleusY),
src/poly.c
@@ -83,6 +83,7 @@
    if (vlist!=NULL){
    /* Make straight grafted poylmers normal to membrane (polymer brush). Dist. between poly vertices put to 1*/
        ts_int intpoly=vesicle->tape->internal_poly;
        for (i=0;i<poly_list->n;i++){
    
            xnorm=0.0;
@@ -94,6 +95,9 @@
                znorm-=poly_list->poly[i]->grafted_vtx->tristar[j]->znorm;    
            }
            normlength=sqrt(xnorm*xnorm+ynorm*ynorm+znorm*znorm);
            if(intpoly && i%2){
                normlength=-normlength;
            }
            xnorm=xnorm/normlength;
            ynorm=ynorm/normlength;
            znorm=znorm/normlength;
src/tape
@@ -1,6 +1,6 @@
####### Vesicle definitions ###########
# nshell is a number of divisions of dipyramid
nshell=5
nshell=17
# dmax is the max. bond length (in units l_min)
dmax=1.7
# dmin_interspecies in the min. dist. between different vertex species (in units l_min)
@@ -14,7 +14,7 @@
# (pswitch=1: calc. p*dV energy contribution)
pswitch = 0
# pressure difference: p_inside - p_outside (in units kT/l_min^3):
pressure=-10.0
pressure=10.0
#Constant volume constraint (0 disable constant volume, 1 enable wiht additional vertex move, 2 enable with epsvol)
constvolswitch=0
@@ -25,11 +25,13 @@
####### Polymer (brush) definitions ###########
# npoly is a number of polymers attached to npoly distinct vertices on vesicle
npoly=0
npoly=800
# nmono is a number of monomers in each polymer
nmono=2
nmono=6
# Spring constant between monomers of the polymer
k_spring=800
#set to 1 if half of the polymeres are inside the vesicle
internal_poly=1
####### Filament (inside the vesicle) definitions ###########
# nfil is a number of filaments inside the vesicle
@@ -37,7 +39,7 @@
# nfono is a number of monomers in each filament
nfono=3
# Persistence lenght of the filaments (in units l_min)
xi=0
xi=100
####### Nucleus (inside the vesicle) ###########
# Radius of an impenetrable hard sphere inside the vesicle
@@ -69,6 +71,8 @@
#shut up if we are using cluster!!!
quiet=false
#what type of multiprocessing? (*none, smp, cluster, distributed, cuda, auto)
#currently only none makes sense.