Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations waross on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Subroutines!

Status
Not open for further replies.

rjd150

Mechanical
Feb 13, 2013
12
0
0
US
Hi All,

I use Abaqus for biofluids and biomechanical research. I was wondering if there was a comprehensive guide anywhere for using subroutines? (i.e. book, powerpoint, etc.) I've searched these forums for a reference, and have also read over the documentation but that hasn't been very helpful. Anything would be greatly appreciated. Especially on how to use VDISP and VDLOAD, and implementing subroutines in general!

Thanks!
 
Replies continue below

Recommended for you

You are aware that there is a Abaqus User Subroutines Reference Manual also right? :)
There is also an Abaqus course on using subroutines. If you are an academic user you get a discount.

If you want help from this forum, I suggest you ask more specific questions.
 
Why is everyone so cold on these forums? Ever post I read there's always a snarky response by someone, and I've seen your name before. Anyways, when I said documentation I meant the user manuals. I really want to learn how to use subroutines like VDSIP and VDLOAD. The things I have found online so far are not very helpful to me. I need to apply parametric load equations to the nodes along a beam, in the three Cartesian directions. I was just wondering if there was something other than the user manuals out there that might help?
 
rjd150 said:
Why is everyone so cold on these forums? Ever post I read there's always a snarky response by someone,

If you also tried to compile the list of people asking questions that they could've looked up in Google or the documentation or tried a simple example, you'll understand why, once in a blue moon, we lose our patience. Please understand that people who are offering their help for free are human; I certainly am guilty of being one which explains why I have put a couple of links as my signature. People who are taking time off to help others sometimes need to be helped too.

Coming to your question, I have a counter-question: Have you managed to run any subroutine on your machine? Does your machine have a Fortran compiler and Visual Studio (or equivalents) installed on it? Once this barrier is crossed, then we can begin addressing your question. If you have never managed to get a subroutine to work with a model (plenty available in the documentation), then please search the archives for instructions.

 
"" I've been using abaqus for over a year now but I am still not familiar with how to use subroutines and have a problem I need to address. Lets say I create a wire, with a certain length, and assign it a beam section. I then mesh the wire, with a certain number of beam elements. Now I want to give this wire a certain shape using some parametric equations. In order to do this, I need to apply a force or a displacement at each node of the wire mesh. Lets just say I want it to take the shape defined by F(x)=sin(x), where x is the distance along the wire. How do I create a sub-routine to make this happen? Is there already one that does this sort of thing. Thanks for the help! ""

If this is still your question, this is the answer:


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 displacement
c jBCType
c Indicator for type of prescribed variable: 0 for displacement, 1 for velocity, and 2 for acceleration.
c
if( jBCType .eq. 0 ) then
c
if( stepTime .lt. zero ) then
c
c Initialization 1
c
a0 = zero
do 310 k=1, nblock
do 310 j=1, nDof
if ( jDof(j) .gt. 0 ) then
rval(j,k) = 0
end if
310 continue
c
else if( stepTime .eq. zero ) then
c
c Initialization 2
c
a0 = zero
do 320 k=1, nblock
do 320 j=1, nDof
if ( jDof(j) .gt. 0 ) then
rval(j,k) = a0
end if
320 continue
c
else
c
c Time incrementation
c
c
do 350 k=1, nblock
do 350 j=1, nDof
if ( jDof(j) .gt. 0 ) then
Xcoord = coordNp(1, k)
rval(j,k) = sin (Xcoord)*amp(k)
end if
350 continue
end if
end if
c
return
end


this is when using the amplitude, else you can scale using stepTime.
Note: I just adjusted this from the example in the manual, I did not debug or anything and don't know if it'll work.
Also when c/p, make sure to obey all fortran syntax rules.
The initialization are a bit stupid and are only useful for giving velocities & accelerations.
 
sdebock, I appreciate the help. What is the example problem you looked at in the user manual? I use Abaqus 6.12. Maybe you can help me if I define my exact problem for you. Assuming you are in bioengineering, you may know what a catheter is used for. Basically what I need to do is push a straight wire from the inside of a catheter into a sphere with a small opening, and I need the wire to take on a certain shape based on parametric equations. I assign a beam section to the wire, and need it to form this shape as it is pushed into the sphere. So, for example, lets say I need it to take on the shape:

x=sin(t)
y=cos(t)
z=sin(t)*cos(t)

where t is the distance along the wire, and the other three are the Cartesian directions.

Like I said before, how would I model this in order to apply these constraints so that this wire takes this shape when it is pushed into a sphere? Would I use VDISP or VDLOAD in Exlicit, since I am modeling this wire as a beam section and need it to be applied to the nodes along the beam as it's being pushed out?

 
Status
Not open for further replies.
Back
Top