wall servo command
Syntax
- wall servo keyword ... <range>
Primary keywords:
activate force gain-factor gain-update velocity-max force-x force-y force-z
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 thegain-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 thewall attribute velocity
command) if you want the wall to stop moving.
The following keywords apply:
- 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
contact cmat default model linear method def 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 ...
radius 0.8 1.2 ...
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 '1' mechanical age
model history name '2' mechanical ratio-average
wall history name '11' displacement-x name 'topTop'
wall history name '12' displacement-y name 'topTop'
wall history name '21' force-contact-y name 'topTop'
wall history name '22' force-contact-x name 'botRight'
wall history name '23' force-contact-y name 'botRight'
model solve
model save 'sb-load'
; --- maintain servo on top wall but superimpose an orthogonal velocity
history purge
model mechanical time-total 0.0
ball attribute displacement 0.0 0.0
wall attribute displacement 0.0 0.0
wall attribute velocity-x 0.001 range group 'top'
model solve time 5.0
model save 'sb-move'
program return
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.
Was this helpful? ... | PFC 6.0 © 2019, Itasca | Updated: Nov 19, 2021 |