← Back to team overview

yade-users team mailing list archive

[Question #692441]: OpenFOAM YADE coupling iterations

 

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

I have got 9 YADE iterations for 1 OpaneFOAM iteration. But I can't understand, why it is so. In code it looks like 1 OpenFOAM iteration for 1 YADE iteration or few OpenFOAM iterations for 1 YADE iteration. But not several iterations of YADE for 1 iteration OpenFOAM

scriptYade.py
###

from __future__ import print_function
import sys
from yadeimport import *
from yade.wrapper import *
from yade.utils import *

initMPI() #Initialize the mpi environment, always required.
fluidCoupling = yade.FoamCoupling(); #Initialize the engine
fluidCoupling.getRank(); #part of Initialization.

#example of spheres in shear flow : two-way point force coupling
class simulation():

 def __init__(self):
  O.periodic = True
  O.cell.setBox(0.4,0.4,0.4)

  numspheres=1000
  young = 5e6
  density = 1000

  mat1 = FrictMat(young=young,poisson=0.5,frictionAngle=radians(15),density=density,label='spheremat')
  O.materials.append(mat1)
  mat2 = FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='wallmat')
  O.materials.append(mat2)

  epsilon = 1e-08
  minval = 0 + epsilon
  maxval = 0.4 - epsilon
  #wall coords, use facets for wall BC:
  v0 = Vector3(minval, minval, minval)
  v1 = Vector3(minval,minval,maxval)
  v2 = Vector3(maxval,minval,minval)
  v3 = Vector3(maxval,minval,maxval)

  v4 = Vector3(minval,maxval,minval)
  v5 = Vector3(minval,maxval,maxval)
  v6 = Vector3(maxval,maxval,minval)
  v7 = Vector3(maxval, maxval, maxval)

  lf0 = facet(vertices=[v0,v1,v2], material='wallmat')
  O.bodies.append(lf0)
  lf1 = facet(vertices=[v0,v2,v3], material='wallmat')
  O.bodies.append(lf1)

  uf0 = facet(vertices=[v4,v5,v6], material='wallmat')
  O.bodies.append(uf0)
  uf1 = facet(vertices=[v4,v6,v7], material='wallmat')
  O.bodies.append(uf1)

  ff0 = facet(vertices=[v1,v2,v6], material='wallmat')
  O.bodies.append(ff0)
  ff1 = facet(vertices=[v1,v6,v5], material='wallmat')
  O.bodies.append(ff1)

  bf0 = facet(vertices=[v0,v3,v7], material='wallmat')
  O.bodies.append(bf0)
  bf1 = facet(vertices=[v0,v7,v4], material='wallmat')
  O.bodies.append(bf1)

  cyl = Cylinder(segment=[0,0,1],radius=0.05)
  b = Body()
  b.shape = cyl
  b.mat = O.materials['wallmat']
  O.bodies.append(b)

  #spheres
  #mn, mx= Vector3(minval + epsilon, minval + epsilon, minval + epsilon), Vector3(maxval - epsilon, maxval - epsilon, maxval - epsilon)
  mn, mx= Vector3(minval + epsilon, minval + epsilon, minval + epsilon), Vector3(-0.06, maxval - epsilon, maxval - epsilon)
  sp = pack.SpherePack();
  sp.makeCloud(mn,mx,rMean=0.00075,rRelFuzz=0.10, num=numspheres)
  O.bodies.append([sphere(center,rad,material='spheremat') for center,rad in sp])
  sphereIDs = [b.id for b in O.bodies if type(b.shape)==Sphere]

  #coupling engine settings
  fluidCoupling.setNumParticles(len(sphereIDs))
  fluidCoupling.setIdList(sphereIDs)
  fluidCoupling.isGaussianInterp=False; #use pimpleFoamYade for gaussianInterp

  # Integrator
  newton=NewtonIntegrator(damping=0.0, gravity = (0.0 ,0.0, 0.0))
  # add small damping in case of stability issues.. ~ 0.1 max, also note : If gravity is needed, set it in constant/g dir.

  #O.dynDt = False
  #O.dt=1e-4

  O.engines=[
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()], allowBiggerThanPeriod=True),
   InteractionLoop(
    [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()],
    [Ip2_FrictMat_FrictMat_FrictPhys()],
    [Law2_ScGeom_FrictPhys_CundallStrack()]
   ),
   GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.7, label = "ts"),
   fluidCoupling, #to be called after timestepper
   PyRunner(command='sim.printMessage()', iterPeriod= 1, label='outputMessage'),
   newton,
   VTKRecorder(fileName='yadep/3d-vtk-',recorders=['spheres'],iterPeriod=100),
  ]

 def printMessage(self):
  print("********************************YADE-ITER = " + str(O.iter) +" **********************************")
  print("********************************YADE-TIME = " + str(O.time) +" **********************************")

 def irun(self,num):
  O.run(num,1)

if __name__=="__main__":
 sim = simulation()
 sim.irun(10)
 fluidCoupling.killMPI()

import builtins
builtins.sim=sim

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