# wall servo command

Syntax

wall servo keyword ... <range>

Primary keywords:

The wall servo provides the ability to control the translational velocity of select walls using a servo-mechanism in order to apply or maintain a desired force.

The servo-mechanism uses a proportional controller with adaptive gain as follows.

Let $$\mathbf{F}^{t}$$ be the target force (input by the user), and $$\mathbf{F}^{c}$$ be the reaction force exerted by all pieces in the model on a wall. The wall velocity $$\mathbf{v}$$ is decomposed in two components:

(1)$\mathbf{v} = v_n \mathbf{\hat{n}} + \left( \mathbf{v} - v_n \mathbf{\hat{n}} \right)$

where $$v_n$$ is the signed magnitude of the velocity in direction $$\mathbf{\hat{n}}$$,

(2)$v_n = \left( \mathbf{v} \cdot \mathbf{\hat{n}} \right)$

where $$\mathbf{\hat{n}} = \mathbf{F}^{t} / \left\| \mathbf{F}^{t} \right\|$$ is a unit vector in the direction of the target force.

The value of $$v_n$$ is adjusted as:

(3)$v_n = G \left( F^{t} + F^{c} \right)$

where $$G$$ is the controller gain and $$F^{t} = \mathbf{F}^{t} \cdot \mathbf{\hat{n}}$$ and $$F^{c} = \mathbf{F}^{c} \cdot \mathbf{\hat{n}}$$ are the signed magnitudes of the target servo force and of the reaction force, respectively.

To ensure stability, the gain is automatically evaluated as

(4)$G = \frac{\alpha} {K^{c} \Delta t}$

where $$\alpha$$ is a relaxation factor that can be set by the user with the gain-factor keyword (defaults to 0.8), $$K^{c}$$ is the sum of the effective translational stiffness of all mechanical contacts involving the wall, and $$\Delta t$$ is the current timestep. Note that the user can specify a gain update interval with the gain-update keyword.

Note

• Only the component of the velocity in the direction of the target servo force is adjusted by the servo control. The orthogonal velocity is not altered.
• The target load is expressed as a force instead of a stress because PFC cannot assess which region of a wall is effectively applying load on the particles.
• The wall servo activate command may be used to activate or deactivate the servo control for select walls at anytime during the modeling sequence. Make sure to also reset the wall velocity to zero (using the wall attribute velocity command) if you want the wall to stop moving.

The following keywords apply:

activate b

Set the servo-control active status. Defaults to false.

force v

Set the target force (expressed in the global coordinate system).

gain-factor f

Set the gain relaxation factor. Defaults to 0.8.

gain-update i

Set the gain update interval. Defaults to 1.

velocity-max f

Specify the maximum velocity magnitude.

force-x f

Set the x-component of the target force (expressed in the global coordinate system).

force-y f

Set the y-component of the target force (expressed in the global coordinate system).

force-z f (3D ONLY)

Set the z-component of the target force (expressed in the global coordinate system).

Usage Examples

The example “Probing a Granular Specimen” demonstrates usage of the wall servo command to perform isotropic or deviatoric loading on a granular specimen.

The lines below demonstrate usage of the command to perform a direct-shear test in a shearbox:

model new
model title 'Wall servo example: Shear Box'

model random 10001
model domain extent -0.4 0.4 -0.3 0.3
model large-strain on
contact cmat default model linear method deformability emod 1e7 krat 2.5 ...
prop dp_nratio 0.2

; --- create the shearbox upper part
wall generate name 'top' box -0.25 0.25  0.0   0.125
wall delete wall range set name 'topBottom'
wall create name 'topExt' vertices -0.3 0.0 -0.25 0.0
wall group 'top'
; --- create the shearbox lower part
wall generate name 'bot' box -0.25 0.25 -0.125 0.0
wall delete wall range set name 'botTop'
wall create name 'botExt' vertices 0.25 0.0 0.3 0.0
wall group 'bot' range group 'top' not

; --- generate a ball assembly, settle under gravity
ball distribute poros 0.17                  ...
resolution 0.006            ...
box -0.25 0.25 -0.125 0.125
ball attribute density 2500.0
ball property 'fric' 0.01
model gravity 10.0
model cycle 100 calm 10
model solve ratio-average 1e-3
model mechanical time-total 0.0
model save 'sb-init'

; --- activate servo on top wall to apply a target force
ball attribute displacement 0.0 0.0 damp 0.7
ball property 'fric' 0.5
[m=100.0]              ; mass
[p=m*global.gravity()] ; force
wall servo force [p] activate on range set name 'topTop'
model history name 'timeTotal' mechanical time-total
model history name 'ratioAvg' mechanical solve ratio-average
wall history displacement-x name 'topTop'
wall history displacement-y name 'topTop'
wall history force-contact-y name 'topTop'
wall history force-contact-x name 'botRight'
wall history force-contact-y name 'botRight'
model solve

Note that the test is undertaken in two stages. During the first stage, the servo-mechanism is activated on the top platen with a prescribed force. During the second stage, a horizontal velocity is also set to the top platen. Since the prescribed velocity is orthogonal to the direction of force used in the wall servo command, it is not modified.