cra_penalty_solve

compas_cra.equilibrium.cra_penalty_solve(assembly, mu=0.84, density=1.0, d_bnd=0.001, eps=0.0001, verbose=False, timer=False)

CRA solver with penalty formulation using Pyomo + IPOPT.

Parameters:
assemblyAssembly

The rigid block assembly.

mufloat, optional

Friction coefficient value.

densityfloat, optional

Density of the block material.

d_bndfloat, optional

The bound of virtual displacement d.

epsfloat, optional

Epsilon, contact overlapping parameter.

verbosebool, optional

Print information during the execution of the algorithm.

timerbool, optional

Time the solving time.

Returns:
Assembly

The assembly is updated in place, also return Assembly for compas.rpc and compas.cloud

Notes

This function solves the following optimisation problem, Eq.(14) :

\[\begin{split}\begin{align} \begin{split} \min_{{\bf{\tilde{f}}},\, \delta{\bf{q}},\, \pmb\alpha} \quad & \left\| {\bf{f}}_n^{+} \right\|_2^2 + \gamma \left\| {\bf{f}}_n^{-} \right\|_2^2 + \left\| \pmb\alpha \right\|_2^2 \\ \textrm{s.t.} \quad & {{\bf{A}}_{eq}}\:{\bf{B}}\:{\bf{\tilde{f}}} = -{\bf{p}} \\ & {\bf{A}}_{fr}\:{\bf{B}}\:{\bf{\tilde{f}}} \le {\bf{0}} \\ & {\bf{A}}_{eq}^\intercal\:{\delta\bf{q}} = \delta{\bf{d}} \\ & {f_{jkn}^{i+}}\:({\delta d_{jkn}^i} + \varepsilon) = 0 \\ & {f_{jkn}^{i+}} \: {f_{jkn}^{i-}} = 0 \\ & {\bf{f}}_{jkt}^{i} = -{\alpha_{jk}^i} \: \delta{\bf{d}}_{jkt}^{i} \\ & \left\lvert\, \delta {\bf{d}}_{jk\cdot}^{i} \,\right\lvert \le \eta \\ & \gamma \, , \varepsilon \, , \eta \ge 0 \\ & f_{jkn}^{i+}\, ,f_{jkn}^{i-} \, , {\alpha_{jk}^i} \, , ({\delta d_{jkn}^i} + \varepsilon) \ge 0 \;, \quad \forall i,j,k \;, \end{split} \end{align}\end{split}\]

For more information please check our research paper: Coupled Rigid-Block Analysis: Stability-Aware Design of Complex Discrete-Element Assemblies