# How can polyhedron use CpmMat 、Ip2_CpmMat_CpmMat_CpmPhys()and Law2_ScGeom_CpmPhys_Cpm() ？

Dear all,

I want to use polyhedron to simulate coarse aggregate of concrete. After I create interactions for non-overlapping polyhedron -polyhedron and sphere -polyhedron[1], I find that polyhedron can't use CpmMat. The script and error are as follows:

script:

##################

concrete = O.materials.

young = young,

poisson = poisson,

frictionAngle = frictionAngle,

epsCrackOnset = epsCrackOnset,

relDuctility = relDuctility,

sigmaT = sigmaT,

))

poly1= polyhedra_

#######

error:

#######

poly1= polyhedra_

File "/home/

b.mat = material

Boost.Python.

None.None(Body, int)

did not match C++ signature:

None(yade::Body {lvalue}, boost::

#######

1）How can I modify the source code so that polyhedron can use CpmMat correctly？

2）How can I modify the source code so that polyhedron can use Ip2_CpmMat_

For law2, I found a place that may need to be modified[2]. The calculation of reflength, crosssection and refpd for polyhedron - polyhedron as well as polyhedron - sphere is added.I don't know whether this modification is correct or whether there are any other places that need to be modified. The added code is as follows:

#######

const int polyIndex=

if(b1index == polyIndex && b2index == polyIndex) {

const Vector3r& pos1 = Body::byId(I->id1, scene)->state->pos;

const Vector3r& pos2 = Body::byId(I->id2, scene)->state->pos;

Real minRad = (geom->refR1 <= 0 ? geom->refR2 : (geom->refR2 <= 0 ? geom->refR1 : math::min(

Vector3r shift2 = scene->cell->hSize * I->cellDist.

phys->refLength = (pos2 - pos1 + shift2).norm();

phys-

phys->refPD = geom->refR1 + geom->refR2 - phys->refLength;

}

if((b1index == sphereIndex && b2index == polyIndex)

const Vector3r& pos1 = Body::byId(I->id1, scene)->state->pos;

const Vector3r& pos2 = Body::byId(I->id2, scene)->state->pos;

Real minRad = (geom->refR1 <= 0 ? geom->refR2 : (geom->refR2 <= 0 ? geom->refR1 : math::min(

Vector3r shift2 = scene->cell->hSize * I->cellDist.

phys->refLength = (pos2 - pos1 + shift2).norm();

phys-

phys->refPD = geom->refR1 + geom->refR2 - phys->refLength;

}

#######

Thanks in advance.

Jie

[1]https:/

[2]https:/

## Question information

- Language:
- English Edit question

- Status:
- Solved

- For:
- Yade Edit question

- Assignee:
- No assignee Edit question

- Solved by:
- Jan Stránský

- Solved:

- Last query:

- Last reply: