← Back to team overview

yade-users team mailing list archive

[Question #687646]: no view about qt.View() and yade.qt.Controller()

 

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.