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.
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.
- 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
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
|