You are on page 1of 4

VDISP http://bobcat.nus.edu.sg:2080/English/SIMACAESUBRefMap/simasub-...

User subroutine VDISP: Related Topics

can be used to prescribe translational and rotational boundary conditions;


is called for all degrees of freedom listed in the associated boundary condition; In Other Guides
allows user to specify values for either the degree of freedom or its time Boundary conditions in
derivatives such as velocity and acceleration; Abaqus/Standard and
releases the boundary condition by default if the user does not specify a value Abaqus/Explicit
for the boundary condition;
*BOUNDARY
can be used to apply a concentrated load, instead, by adjusting the default
motion of the node; VDISP
can be called for blocks of nodes for which the boundary conditions are defined
in the subroutine.

The following topics are discussed:


Initial velocity
Acceleration
User subroutine interface
Variables to be defined
Variables passed in for information
Example: Imposition of acceleration on a rigid body with nonzero initial velocity

Products: Abaqus/Explicit

Initial velocity
At the beginning of each step user subroutine VDISP is called once to establish the initial velocity; and then, it is called once
on each configuration, including the initial configuration, to establish the nodal acceleration.
The first call to user subroutine VDISP is made to establish the initial velocity, which is indicated by the passing of a step
time value of into the subroutine, where is the current time increment. If displacement is prescribed, the returned
variable, rval, corresponds to , where and are the initial displacement and velocity respectively. If velocity
is prescribed, the returned variable corresponds to the initial velocity . If acceleration is prescribed, the returned variable
corresponds to , where is the initial velocity.

The default value of rval is consistent with the velocity at the end of previous step or that specified as an initial condition in
case of the first step. You only need to reset the rval if a different initial velocity is desired. The arrays u and v stand for the
default initial displacement and velocity, respectively. The array a contains a zero value.

Acceleration
During time incrementation user subroutine VDISP is called once for each configuration, including the initial configuration, to
establish the nodal acceleration.
If displacement is prescribed, the returned variable should be set equal to the displacement at stepTime+dtNext, where
stepTime is the step time and dtNext is the next time increment. If velocity is prescribed, the returned variable should be
set equal to the mean velocity at stepTime+dtNext/2. If acceleration is prescribed, the returned variable should be set equal
to the acceleration at stepTime. Note that stepTime is zero for the initial configuration.

The variable rval has a default value that is computed with the constraints not yet applied. You can leave rval at this value,
if desired. The variable u contains values at stepTime. Whereas, the variable v contains initial velocity when stepTime is
zero and, otherwise, velocity at stepTime—dt/2. The variable a contains values at stepTime computed with the constraints
not yet applied.

Tip: If the node does not participate in any other conflicting constraints or connector elements, leaving rval at
the incoming value would amount to leaving the node unconstrained. Alternatively, if you want to apply a
concentrated load at such a node (instead of the boundary condition), you can compute the change in
acceleration due to this load and modify the rval value to account for that change. The nodal mass and the
rotary inertia are available in VDISP for computing the change in acceleration. In addition, the default value of
rval at the node already reflects the forces from any contact, user-defined load, and elements (except for
connectors) at that node.

1 of 4 7/6/2018, 10:12 PM
VDISP http://bobcat.nus.edu.sg:2080/English/SIMACAESUBRefMap/simasub-...

User subroutine interface


subroutine vdisp(
c Read only variables -
1 nblock, nDof, nCoord, kstep, kinc,
2 stepTime, totalTime, dtNext, dt,
3 cbname, jBCType, jDof, jNodeUid, amp,
4 coordNp, u, v, a, rf, rmass, rotaryI,
c Write only variable -
5 rval )
c
include 'vaba_param.inc'
c
character*80 cbname
dimension jDof(nDof), jNodeUid(nblock),
1 amp(nblock), coordNp(nCoord,nblock),
2 u(nDof,nblock), v(nDof,nblock), a(nDof,nblock),
3 rf(nDof,nblock), rmass(nblock), rotaryI(3,3,nblock),
4 rval(nDof,nblock)
c
do 100 k = 1, nblock
do 100 j = 1, nDof
if( jDof(j) .gt. 0 ) then
user coding to define rval(j, k)
end if
100 continue
c
return
end

Variables to be defined
rval(nDof, nblock)
Values of the prescribed variable for degrees of freedom 1–6 (translation and rotation) at the nodes. The variable
can be displacement, velocity, or acceleration, depending on the type specified in the associated boundary
condition. The variable type is indicated by jBCType. The variable rval has a default value that is computed
without taking the constraints into account. You may reset the rval.

Variables passed in for information


nblock
Number of nodal points to be processed in this call to VDISP.
nDof
Number of degrees of freedom (equals 6).
nCoord
Number of coordinate components (equals 3).
kstep
Step number.
kinc
Increment number.
stepTime
Value of time since the step began.
totalTime
Value of total time. The time at the beginning of the step is given by totalTime-stepTime.
dtNext
Next time increment size.
dt
Current time increment size.
cbname
User-specified name corresponding to the associated boundary condition.
jBCType
Indicator for type of prescribed variable: 0 for displacement, 1 for velocity, and 2 for acceleration.

2 of 4 7/6/2018, 10:12 PM
VDISP http://bobcat.nus.edu.sg:2080/English/SIMACAESUBRefMap/simasub-...

jDof(nDof)
Indicator for prescribed degrees of freedom. The values given by rval(j,k) are prescribed only if jDof(j) equals
1.
jNodeUid(nblock)
Node numbers.
amp(nblock)
Amplitude values corresponding to the associated amplitude functions. These values are passed in for information
only and will not contribute to the values of the prescribed variable automatically.
coordNp(nCoord, nblock)
Nodal point coordinates.
u(nDof, nblock)
Initial displacements when stepTime is negative, and, otherwise, displacement at stepTime. All translations are
included if one or more translational degrees of freedom are prescribed. All rotations are included if one or more
rotational degrees of freedom are prescribed.
v(nDof, nblock)
Initial nodal velocities when stepTime is non-positive and, otherwise, mean velocities at stepTime-dt/2 during
time incrementation. All translational velocities are included if one or more translational degrees of freedom are
prescribed. All angular velocities are included if one or more rotational degrees of freedom are prescribed.
a(nDof, nblock)
Contains a zero value when stepTime is negative and, otherwise, the accelerations, computed without accounting
for the boundary condition, at stepTime. All translational accelerations are included if one or more translational
degrees of freedom are prescribed. All angular accelerations are included if one or more rotational degrees of
freedom are prescribed.
rf(nDof, nblock)
Nodal point reaction at stepTime-dt. All reaction forces are included if one or more translational degrees of
freedom are prescribed. All reaction moments are included if one or more rotational degrees of freedom are
prescribed.
rmass(nblock)
Nodal point masses.
rotaryI(3, 3, nblock)
Nodal point rotary inertia.

Example: Imposition of acceleration on a rigid body with nonzero initial velocity


In this example a sinusoidal acceleration is imposed on the reference node of a rigid body. Nonzero initial velocity is also
specified for the rigid body. User subroutine VDISP given below illustrates how the return value array is to be computed for
different phases of the solution. The analysis results show that both the initial velocity and acceleration are correctly
specified.
Input file
*HEADING
Test VDISP with S4R element
*NODE, NSET=NALL
1,
2, 2., 0.
3, 0., 2.
4, 2., 2.
9, 1., 1., 0.
*ELEMENT, TYPE=S4R, ELSET=SHELL
10, 1,2,4,3
*SHELL SECTION, ELSET=SHELL, MATERIAL=ELSHELL
2.0000000e-02, 3
*MATERIAL, NAME=ELSHELL
*DENSITY
7850.0,
*ELASTIC
2.5000000e+11, 3.0000000e-01
*RIGID BODY, REF NODE=9, ELSET=SHELL
*INITIAL CONDITIONS, Type=VELOCITY
9, 1, 0.4
*STEP
*DYNAMIC, EXPLICIT, DIRECT USER CONTROL
0.01, 0.8
*BOUNDARY, USER, TYPE=ACCELERATION

3 of 4 7/6/2018, 10:12 PM
VDISP http://bobcat.nus.edu.sg:2080/English/SIMACAESUBRefMap/simasub-...

9, 1
*OUTPUT, HISTORY, TIME INTERVAL=0.01, OP=NEW
*NODE OUTPUT, NSET=NALL
U, V, A
*END STEP
User subroutine
subroutine vdisp(
c Read only variables -
* nblock, nDof, nCoord, kstep, kinc,
* stepTime, totalTime, dtNext, dt,
* cbname, jBCType, jDof, jNodeUid, amp,
* coordNp, u, v, a, rf, rmass, rotaryI,
c Write only variable -
* rval )
c
include 'vaba_param.inc'
parameter( zero = 0.d0, half = 0.5d0, one = 1.d0 )
c
character*80 cbname
dimension jDof(nDof), jNodeUid(nblock),
* amp(nblock), coordNp(nCoord,nblock),
* u(nDof,nblock), v(nDof,nblock), a(nDof,nblock),
* rf(nDof,nblock), rmass(nblock),
* rotaryI(3,3,nblock), rval(nDof,nblock)
c
c Impose acceleration
c
if( jBCType .eq. 2 ) then
c
if( stepTime .lt. zero ) then
c
c Initialization 1
c
do 310 k=1, nblock
do 310 j=1, nDof
if ( jDof(j) .gt. 0 ) then
v0 = v(j,k)
rval(j,k) = v0/dt
end if
310 continue
c
else
c
c Time incrementation
c
amplitude = 2.0
period = 0.8
twopi = 6.2831853d0
c
do 350 k=1, nblock
do 350 j=1, nDof
if ( jDof(j) .gt. 0 ) then
rval(j,k) = amplitude*
* sin( twopi*stepTime / period )
end if
350 continue
end if
end if
c
return

end

4 of 4 7/6/2018, 10:12 PM