New question #687646 on Yade:
https://answers.launchpad.net/yade/+question/687646

My yade is come from GitLib source, and cmake, make, make-install to my 
computer.  I build a symbol link named "yadeImport".
The system can run very nice, if I use the command in terminal 
"~/myYade/install/bin/yade  my.py". I can controll the simulation by 
controller, and see the 3D simuliation process. 

But, today, I want run the code by script.  the yade.qt.View(),  
yade.qt.Controller(), just get two black windows. I hope to find the answer 
from there. And somebody says that the  example of "triax-tutorial" could be 
help me. So I use the code as script-session2.py
The problem is the same. The yade.qt.View() and yade.qt.controller() just the 
black windows.  I have two problems:

(1) How to get 3D view() by runing the script?
(2) If I cannot get the 3D process during simulation, how to save the date of 
each step of process, and replay after simulation?


Beacause my code is complex, I put the script-session2.py as below, the problem 
is the same.



# -*- coding: utf-8 -*-
from __future__ import print_function
from yade import pack

num_spheres=500
## corners of the initial packing
mn,mx=Vector3(0,0,0),Vector3(1,1,1)
thick = 0.01
compFricDegree = 2
rate=0.2
damp=0.1
stabilityThreshold=0.001
key='_define_a_name_'

## create material #0, which will be used as default
O.materials.append(FrictMat(young=5e6,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictMat(young=5e6,poisson=0.5,frictionAngle=0,density=0,label='walls'))

## create walls around the packing
walls=aabbWalls([mn,mx],thickness=thick,material='walls')
wallIds=O.bodies.append(walls)

sp=pack.SpherePack()
sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95)

volume = (mx[0]-mn[0])*(mx[1]-mn[1])*(mx[2]-mn[2])
mean_rad = pow(0.09*volume/num_spheres,0.3333)

clumps=False
if clumps:
        
c1=pack.SpherePack([((-0.2*mean_rad,0,0),0.5*mean_rad),((0.2*mean_rad,0,0),0.5*mean_rad)])
        sp.makeClumpCloud((0,0,0),(1,1,1),[c1],periodic=False)
        O.bodies.append([sphere(center,rad,material='spheres') for center,rad 
in sp])
        standalone,clumps=sp.getClumps()
        for clump in clumps:
                O.bodies.clump(clump)
                for i in clump[1:]: 
O.bodies[i].shape.color=O.bodies[clump[0]].shape.color
        #sp.toSimulation()
else:
        O.bodies.append([sphere(center,rad,material='spheres') for center,rad 
in sp])

O.dt=.5*PWaveTimeStep() # initial timestep, to not explode right away
O.usesTimeStepper=True

triax=ThreeDTriaxialEngine(
        maxMultiplier=1.005,
        finalMaxMultiplier=1.002,
        thickness = thick,
        stressControl_1 = False,
        stressControl_2 = False,
        stressControl_3 = False,
        ## Independant stress values for anisotropic loadings
        goal1=-10000,
        goal2=-10000,
        goal3=-10000,
        internalCompaction=True,
        Key=key,
)

newton=NewtonIntegrator(damping=damp)

O.engines=[
        ForceResetter(),
        
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()],verletDist=-mean_rad*0.06),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()]
        ),
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8,
 defaultDt=4*PWaveTimeStep()),
        triax,
        TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+key),
        newton
]

#Display spheres with 2 colors for seeing rotations better
Gl1_Sphere.stripes=0
yade.qt.Controller(), yade.qt.View()

while 1:
  O.run(1000, True)
  #the global unbalanced force on dynamic bodies, thus excluding boundaries, 
which are not at equilibrium
  unb=unbalancedForce()
  #average stress
  #note: triax.stress(k) returns a stress vector, so we need to keep only the 
normal component
  
meanS=(triax.stress(triax.wall_right_id)[0]+triax.stress(triax.wall_top_id)[1]+triax.stress(triax.wall_front_id)[2])/3
  print('unbalanced force:',unb,' mean stress: ',meanS)
  if unb<stabilityThreshold and abs(meanS+10000)/10000<0.001:
    break

O.save('compressedState'+key+'.xml')
print("###      Isotropic state saved      ###")

#let us turn internal compaction off...
triax.internalCompaction=False

#
triax.setContactProperties(30)

#... and make stress control independant on each axis
triax.stressControl_1=triax.stressControl_2=triax.stressControl_3=True
# We have to turn all these flags true, else boundaries will be fixed
triax.wall_bottom_activated=True
triax.wall_top_activated=True
triax.wall_left_activated=True
triax.wall_right_activated=True
triax.wall_back_activated=True
triax.wall_front_activated=True


#If we want a triaxial loading at imposed strain rate, let's assign srain rate 
instead of stress
triax.stressControl_2=0 #we are tired of typing "True" and "False", we use 
implicit conversion from integer to boolean
triax.strainRate2=0.01
triax.strainRate1=triax.strainRate3=1000.0



-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to