New question #701015 on Yade: https://answers.launchpad.net/yade/+question/701015
Hi, I am working on a similar problem as explained in the question [1]. I am trying implement the solution suggested by Robert in #7 by using print all the vertices [2]. I have compacted spherical particles into a cylinder shape, and want estimates/measure pore size in the compact. I was running the suggestion by print all vertices.. When I am using this I am getting following error message: "ArgumentError: Python argument types in FlowEngineT.printVertices() did not match C++ signature: printVertices(yade::TemplateFlowEngine_FlowEngineT<yade::FlowCellInfo_FlowEngineT, yade::FlowVertexInfo_FlowEngineT, yade::CGT::_Tesselation<yade::CGT::TriangulationTypes<yade::FlowVertexInfo_FlowEngineT, yade::FlowCellInfo_FlowEngineT> >, yade::CGT::FlowBoundingSphereLinSolv<yade::CGT::_Tesselation<yade::CGT::TriangulationTypes<yade::FlowVertexInfo_FlowEngineT, yade::FlowCellInfo_FlowEngineT> >, yade::CGT::FlowBoundingSphere<yade::CGT::_Tesselation<yade::CGT::TriangulationTypes<yade::FlowVertexInfo_FlowEngineT, yade::FlowCellInfo_FlowEngineT> > > > > {lvalue}) " My question how should implement this code to extract the vertices and type of the void/pore space? What should I use as an input? Best regards, Mithu [1] https://answers.launchpad.net/yade/+question/700963 [2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.FlowEngine.printVertices MWE: # -*- coding: utf-8 -*- """ Created on Thu Jul 15 16:29:55 2021 @author: njb18198 """ #!/usr/bin/env python #encoding: ascii # Testing of the Deformation Enginge with Luding Contact Law # Modified Oedometric Test # The reference paper [Haustein2017] from __future__ import print_function from yade import utils, plot, timing from yade import pack import pandas as pd import numpy as np from PIL import Image from yade import pack, export from scipy.interpolate import interp1d from csv import writer import os from scipy.integrate import odeint import matplotlib.pyplot as plt import csv from matplotlib.pyplot import figure from pylab import * from scipy.optimize import curve_fit readParamsFromTable(comp_press=0.54e8,h_tab=2.05,m_tab=0.1974, r_tab=5.02,tab_porosity=20,tab_height=1,save=0) from yade.params.table import * o = Omega() save=save # Physical parameters fr = 0.41 rho = 1561 Diameter = 7.9e-5 D=Diameter r1 = Diameter/2 #r2 = Diameter/2 k1 = 10000 kp = 140000 kc = k1 * 0.1 ks = k1 * 0.1 DeltaPMax = Diameter/3.0 Chi1 = 0.34 if save==0: g=-9.81 elif save==1: g=0 o.dt = 1.0e-8 particleMass = (4.0/3.0)*math.pi*r1*r1*r1*rho Tab_rad=0.001 r_tab=r_tab*1e-3 #real size h_tab=h_tab*1e-3 m_tab=m_tab*1e-3 v_tab=math.pi*(r_tab**2)*h_tab v_1mm=math.pi*(Tab_rad**2)*(0.4e-3) #m_tot=4e-06 m_tot=(v_1mm/v_tab)*m_tab no_p=m_tot/particleMass #no_p=8000 Vi1 = math.sqrt(k1/particleMass)*DeltaPMax*Chi1 PhiF1=0.999 #PhiF1 = DeltaPMax*(kp-k1)*(r1+r2)/(kp*2*r1*r2) Cyl_height=0.005 cross_area=math.pi*(Tab_rad**2) Comp_press_up= comp_press Comp_force_up=Comp_press_up*cross_area Comp_press_lp= comp_press Comp_force_lp=Comp_press_lp*cross_area compression_data_save=[] sc_por_15=2 #sc_por_2=2 #sc_por_1=1 data_to_save=[comp_press/1e6,round(no_p),rho] compression_data_save.append(data_to_save) # Add material mat1 = O.materials.append(LudingMat(frictionAngle=fr, density=rho, k1=k1, kp=kp, ks=ks, kc=kc, PhiF=PhiF1, G0 = 0.0)) # Spheres for compression and walls sp=pack.SpherePack() sp.makeCloud((-7.5*Diameter,-7.5*Diameter,-30*Diameter),(7.5*Diameter,7.5*Diameter,5.0*Diameter), rMean=Diameter/2.0,rRelFuzz=0.18,num=round(no_p)) sp.toSimulation(material=mat1) walls=O.bodies.append(yade.geom.facetCylinder((0,0,0),radius=Tab_rad,height=Cyl_height,segmentsNumber=20,wallMask=6,material=mat1)) vtkRecorder = VTKRecorder(fileName='vtkRecorder_'+str(tab_porosity),recorders=['all']) tab_porosity=tab_porosity tab_height=tab_height ##Single particle swelling model def model(r,t,Q_max,rho_t,rho_w,r_0,Diff): Q=((rho_w*(r**3))/(rho_t*(r_0**3)))-(rho_w/rho_t)+1; drdt =((Diff*rho_t)/(r*rho_w))*((Q_max-Q)/Q); return drdt P=[1.45,rho,1000,396.39e-12] # Add engines o.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.05), Bo1_Wall_Aabb(), Bo1_Facet_Aabb() ]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.05), Ig2_Facet_Sphere_ScGeom(), Ig2_Wall_Sphere_ScGeom()], [Ip2_LudingMat_LudingMat_LudingPhys()], [Law2_ScGeom_LudingPhys_Basic()] ), NewtonIntegrator(damping=0.1, gravity=[0, 0, g]), PyRunner(command='checkForce()', realPeriod=1, label="fCheck"), #DeformControl(label="DefControl") ] def checkForce(): if O.iter < 3000000: return if unbalancedForce() > 1: return global upper_punch upper_punch=O.bodies.append(geom.facetCylinder((0,0,((-Cyl_height/2)+0.0001)+utils.aabbDim()[2]),Tab_rad-.00001,0,segmentsNumber=50,wallMask=1)) for i in upper_punch: body= O.bodies[i] body.state.vel = (0,0,-0.02) global lower_punch lower_punch= O.bodies.append(geom.facetCylinder((0,0,(-Cyl_height/2)-0.0001),Tab_rad-.00001,0,segmentsNumber=50,wallMask=1)) for n in lower_punch: body= O.bodies[n] body.state.vel = (0,0,0.02) O.engines = O.engines + [PyRunner(command='storeData()', iterPeriod=25000)]+ [PyRunner(command='saveData()', iterPeriod=100000)] fCheck.command = 'unloadPlate()' def unloadPlate(): force_up=0 for i in upper_punch: body= O.bodies[i] force_up=force_up+abs(O.forces.f(body.id)[2]) force_lp=0 for n in lower_punch: body = O.bodies[n] force_lp = force_lp + abs(O.forces.f(body.id)[2]) if ((force_up > Comp_force_up) and (force_lp > Comp_force_lp)): for i in upper_punch: body= O.bodies[i] body.state.vel = (0,0,0.04) for n in lower_punch: body= O.bodies[n] body.state.vel = (0,0,-0.04) fCheck.command = 'stopUnloading()' def stopUnloading(): #force_up=0 #for i in upper_punch: #body= O.bodies[i] #force_up=force_up+(O.forces.f(body.id)[2]) force_lp=0 for n in lower_punch: body = O.bodies[n] force_lp = force_lp + abs(O.forces.f(body.id)[2]) if force_lp==0: for i in lower_punch: body= O.bodies[i] body.state.vel = (0,0,0) #if ((force_up==0) and (force_lp==0)): for i in upper_punch: body=O.bodies[i] pos_up=body.state.pos for i in lower_punch: body=O.bodies[i] pos_lp=body.state.pos if pos_up[2]> pos_lp[2]+utils.aabbDim()[2]+0.0002: for j in upper_punch: O.bodies.erase(j) fCheck.command = 'Savecheck()' def Savecheck(): if save==1: utils.saveVars('lower_punch',lower_punch=lower_punch) save_filename='PH101_'+str(tab_porosity)+'_'+str(tab_height)+'mm.xml' o.save(save_filename) o.pause() if save==0: o.engines = o.engines+[PyRunner(command='ParticleSwelling()', iterPeriod=100000)] fCheck.dead = True # (!!!) storeData.dead=True saveData.dead=True if save==1: O.run() # when running with yade-batch, the script must not finish until the simulation is done fully # this command will wait for that (has no influence in the non-batch mode) waitIfBatch() g=-9.81 if save==0: read_filename='PH101_'+str(tab_porosity)+'_'+str(tab_height)+'mm.xml' o.load(read_filename) utils.loadVars('lower_punch') from yade.params.lower_punch import * for b in O.bodies: if isinstance(b.shape, Sphere): #b.state.blockedDOFs = 'xyXY' r=b.shape.radius oldm=b.state.mass oldI=b.state.inertia m=oldm*3./4./r b.state.mass=m b.state.inertia[0] = 15./16./r*oldI[0] #inertia with respect to x and y axes are not used and the computation here is wrong b.state.inertia[1] = 15./16./r*oldI[1] #inertia with respect to x and y axes are not used and the computation here is wrong b.state.inertia[2] = 15./16./r*oldI[2] #only inertia with respect to z axis is usefull o.dt=1e-6)) for j in lower_punch: O.bodies.erase(j) for b in O.bodies: if isinstance(b.shape, Sphere): continue else: O.bodies.erase(b.id) g=0 walls=O.bodies.append(yade.geom.facetCylinder((0,0,-0.00095),radius=Tab_rad+0.0008,height=Cyl_height,segmentsNumber=20,wallMask=6,material=mat1)) FlowEngine(dead=1,label="flow") FlowEngine.printVertices() -- 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 : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp