Question #665314 on Yade changed:
https://answers.launchpad.net/yade/+question/665314

azim posted a new comment:
Hi Bruno,
[1] really solved my problem.
thanks.


this is what i  really was looking for, as i said in #2:


# -*- coding: utf-8 -*-
#  Copyright (C) 2010 by Bruno Chareyre                                  *
#  bruno.chareyre_at_grenoble-inp.fr                                     *

## This short modified version of examples/triax-tutorial/script-session1.py 
shows how to reload saved states and continue
## without the need to save user variables and functions separately (a typical 
issue as seen in e.g.
## https://answers.launchpad.net/yade/+question/665314).
## Here the technique is combined with batch execution, getting some parameters 
from readParamsFromTable(),
## but it is not a requirement.
## Comments on the simulation itself can be found in script-session1.py

nRead=readParamsFromTable(
        num_spheres=1001,
        compFricDegree = 30,
        key='_triax_base_',
        unknownOk=True
)
from yade.params import table

## Define the filename for saved state. By including paramater values in the 
name
## we make sure that a new state is generated for each parameter set - 
including a different 'key' name.
initStateFilename="confined_N="+table.key+str(table.num_spheres)+"_fric="+str(table.compFricDegree)+"_.yade.gz"
secondStateFilename="load_N="+table.key+str(table.num_spheres)+"_fric="+str(table.compFricDegree)+"_.yade.gz"
thirdStateFilename="final_N="+table.key+str(table.num_spheres)+"_fric="+str(table.compFricDegree)+"_.yade.gz"
## Check if a saved state exists and proceed to function/variable declarations 
as usual.
import os.path
savedState = os.path.exists(initStateFilename)
savedState0 = os.path.exists(secondStateFilename)

## user defined variables
num_spheres=table.num_spheres
key=table.key
targetPorosity = 0.43
compFricDegree = table.compFricDegree
finalFricDegree = 30
rate=-0.02
damp=0.2
stabilityThreshold=0.01
young=5e6
mn,mx=Vector3(0,0,0),Vector3(1,1,1)

import time
startTime=time.time()

## user function saving variables, it will not be saved with the simulation; 
which is ok since it is always re-defined here.
from yade import plot
def history():
        plot.addData(e11=-triax.strain[0], e22=-triax.strain[1], 
e33=-triax.strain[2],
                    ev=-triax.strain[0]-triax.strain[1]-triax.strain[2],
                    s11=-triax.stress(triax.wall_right_id)[0],
                    s22=-triax.stress(triax.wall_top_id)[1],
                    s33=-triax.stress(triax.wall_front_id)[2],
                    i=O.iter)

O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
        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),
        TriaxialStressController(maxMultiplier=1.+2e4/young, 
finalMaxMultiplier=1.+2e3/young, thickness = 0, stressMask = 7, 
internalCompaction=True,label="triax"),
        PyRunner(iterPeriod=20,command='history()',label='recorder'),
        NewtonIntegrator(damping=damp,label="newton")
]
def continueRun():
        triax.internalCompaction=False
        setContactFriction(radians(finalFricDegree))
        triax.stressMask = 5
        triax.goal2=rate
        triax.goal1=-20000
        triax.goal3=-20000
        newton.damping=0.1
        O.run(100,True)
        print "Total execution time (savedState0=",str(savedState0),"): 
",str(time.time()-startTime),"s"
        O.save(thirdStateFilename)

## the cloud generation is made conditional only because makeCloud() takes time 
for large num_spheres. Regenerating an initial
## cloud before reloading a saved state would be harmless but useless since the 
cloud will be replaced by the saved state anyway.
## materials defined hereabove will also be replaced by the the reloaded ones 
(which are identical) with no real impact on
## initialization time, hence no real need for a condition in that case
from yade import pack
sp=pack.SpherePack()
if not savedState0:
        if not savedState:
                sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
                O.bodies.append([sphere(center,rad,material='spheres') for 
center,rad in sp])
        triax.goal1=triax.goal2=triax.goal3=-10000

        ## If no dense state has been generated previously proceed to 
confinement, else reload
        if not savedState:
                print "No saved state - running isotropic confinement for 
num_spheres=", str(table.num_spheres),", compFricDegree=", 
str(table.compFricDegree),", key='",str(table.key),"'"
                while 1:
                        O.run(1000, True)
                        unb=unbalancedForce()
                        print 'unbalanced force:',unb,' mean stress: 
',triax.meanStress
                        if unb<stabilityThreshold and 
abs(-10000-triax.meanStress)/10000<0.001:
                                break
                while triax.porosity>targetPorosity:
                        compFricDegree = 0.95*compFricDegree
                        setContactFriction(radians(compFricDegree))
                        O.run(500,1)
                print "Confinement achieved, save then proceed to deviatoric 
loading"
                O.save(initStateFilename)
        else:
                print "Saved state found - reload then proceed to deviatoric 
loading for num_spheres=", str(table.num_spheres),", compFricDegree=", 
str(table.compFricDegree),", key='",str(table.key),"'"
                O.load(initStateFilename)


        ## Run triaxial simulation starting from a dense  packing
        triax.internalCompaction=False
        setContactFriction(radians(finalFricDegree))
        triax.stressMask = 5
        triax.goal2=rate
        triax.goal1=-10000
        triax.goal3=-10000
        newton.damping=0.1
        O.run(100,True)
        print "Total execution time (savedState=",str(savedState),"): 
",str(time.time()-startTime),"s"
        O.save(secondStateFilename)
        continueRun()
else:
        print "second Saved state found - reload then proceed to deviatoric 
loading for num_spheres=", str(table.num_spheres),", compFricDegree=", 
str(table.compFricDegree),", key='",str(table.key),"'"
        O.load(secondStateFilename)
        continueRun()

-- 
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