×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

How to save the original coordinates COORDS in the DISP subroutine?

How to save the original coordinates COORDS in the DISP subroutine?

How to save the original coordinates COORDS in the DISP subroutine?

(OP)
Hi everybody,

I built up a model that calls a DISP subroutine to compute the displacement at its outside boundary.

When i use only one step to get to the solution then i get the final displacement that i expected.

But when  i use two or more steps then the solution is always higher than i expected because the COORDS vector is updated at each step so that the new coordinates in the previous step become the original coordinates in the next step. I would like to be able to save the first original coordinates in the DISP subroutine.

I am not good at Fortran but i have been told that i could save the original coordinates of the point using a
COMMON block along with the command SAVE so it should be something like:

COMMON /block/ name of the variables
SAVE /block/

But how can i use this feature in a DISP subroutine?

Thanks,

Malik

SUBROUTINE  DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION U(3),TIME(2),COORDS(3)
C


      U(1)=10*COORDS(2)


      RETURN
      END

 

RE: How to save the original coordinates COORDS in the DISP subroutine?

DISP is called to prescribe the displacements. I.e. the displacements at the nodes for which DISP is called are known by the user.

Therefore, the original coordinates could be computed by subtracting the known (applied) displacement field from the current coordinates.

Also if NLGEOM=OFF then, DISP is called with COORDS containing the original coordinates.

Alternatively you can define an array in a COMMON block:

Real(8), dimension(no_of_nodes, no_of_dimensions)::COORDS0
common /myblock/ COORDS0

end


SUBROUTINE  DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION U(3),TIME(2),COORDS(3)
C
       Real(8), dimension(number of nodes, no. of dimensions)::COORDS0
       common /myblock/ COORDS0
     
      if((KSTEP==1).and.(KINC==1)) then
      ! during the first increment of first step
      ! store the orginal coordinates
         COORDS0(NODE,1)=COORDS(1)
         COORDS0(NODE,2)=COORDS(2)
         COORDS0(NODE,3)=COORDS(3) ! if necessary
      endif

      U(1)=10*COORDS0(NODE,2)


      RETURN
      END

However, the code above is a bit redundant if DISP is called for more than 1 DOF (displacement) for each node.

Also, you waste some memory since you define an array as for storing the coordinates of all nodes whereas only the coordinates of the nodes for which DISP is called are stored. But is a quick solution.





 

RE: How to save the original coordinates COORDS in the DISP subroutine?

(OP)
Hi,

First of all thank you for your precious help.

I successfully ran the subroutine but i have a few questions to ask you.

Indeed i would like to make sure that i understood well the meaning of the following statement:

Real(8), dimension(number of nodes,no. of dimensions)

So in this statement i should replace:

1) "number of nodes" by the number of nodes to which the Disp subroutine is applied?

2) "no. of dimensions" by the degree of freedom of the general model? As an example, i mean for a plane stress membrane with 3 degrees of freedom (ux, uy + 1 rotation) i should type in 3...

Let me know if i am right or wrong.

Best regards,

Malik

RE: How to save the original coordinates COORDS in the DISP subroutine?

number of nodes = total number of nodes in the model
no. of dimensions = actually should be the number of coordinates (per node) you want to store.

RE: How to save the original coordinates COORDS in the DISP subroutine?

(OP)
Ok so in my case since i would like to store only one coordinate (along the y-axis) then i should type in 1.

You mean that i have to type in the total number of nodes in the model. Is there a way to boil it down to the number of nodes to which the DISP constraint is applied?

Cause what i did yesterday is that i tipped in the actual number of nodes to which the subroutine was applied and it worked... I don't know if i was lucky ...

Thanks,

Malik
 

RE: How to save the original coordinates COORDS in the DISP subroutine?

Yes, there's a way I think.

Add an extra column to COORDS0 to store the node labels.

For example, column 1 store the node labels, column 2 store the original y coord.

When disp is called, you have to iterate over COORDS0 to identify the node label and to recover the initial y-coordinate for that node.


 

RE: How to save the original coordinates COORDS in the DISP subroutine?

(OP)
Hi xerf,

I see what you mean. It is a good idea.

You seem to be quite familiar with these things and i would like to read up on them. Could you let me know if you have any document or website which deals with these things.

Thanks again for your precious help,

Malik

RE: How to save the original coordinates COORDS in the DISP subroutine?

Sorry, I do not have/know any helpful document or web-site.

I try/test/study everything by myself.

When it comes to programming, it's always difficult in the beginning when you start using a new language. The most important is not to give up.

The HTML ABAQUS documentation is pretty good if you have patience and use the search capabilities.

Best.

RE: How to save the original coordinates COORDS in the DISP subroutine?

(OP)
Hi xerf,

You were very helpful and even if i am not very familiar with Fortran i can assure you i am not going to give up.

Most important to me is to move on.

Best regards,

Malik  

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources