Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

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

DISP SUBROUTINE does nothing! 2

Status
Not open for further replies.

eng23bio

Structural
Oct 11, 2011
24
Hi everybody!

I would like to use the DISP subroutine to impose displacements in some nodes. Since I am new with this subroutine I am trying with a simple experiment....


SUBROUTINE DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION U(3),TIME(2),COORDS(3)
C
PRINT*,'----the program goes past this point-----'
IF(NODE.EQ.10.AND.JDOF.EQ.1) THEN
U(1)=2
ENDIF
RETURN
END


.... but it simply does not work. It does not even write the '----the program goes past this point-----' line. Any ideas about what I'm missing?

Thank you!

 
Replies continue below

Recommended for you

Hi

It looks like the subroutine is not called by Abaqus during calculation.
Do you have "USER" option set for *BOUNDARY keyword?

Regards,
Bartosz
 
Hi akabarten!
Thank you for you answer
I have *BOUNDARY, USER in my input file but it does no work. I have also tried

*BOUNDARY, USER
10,1,1

but it does not work either. Any ideas?

Thank you all!

Regards

 
Hi,

I have got one more idea.
You mentioned the message under PRINT statement is not print at all.
Do you run analysis with "interactive" option to sent all abaqus message to a console?

Could you post your subrotine and inputdeck, please?

Regards,
Bartosz
 
Hi,

when I use other subroutines i get this messages in my .log file. Here is my input file


*Heading
** Job name: P1 Model name: Model-1
** Generated by: Abaqus/CAE 6.9-1
*Preprint, echo=NO, model=NO, history=NO, contact=NO
**
** PARTS
**
*Part, name=Part-1
*End Part
**
**
** ASSEMBLY
**
*Assembly, name=Assembly
**
*Instance, name=Part-1-1, part=Part-1
*Node
1, 250., 250.
2, -250., 250.
3, -250., -250.
4, 250., -250.
5, 150., 250.
6, 50., 250.
7, -50., 250.
8, -150., 250.
9, -250., 150.
10, -250., 50.
11, -250., -50.
12, -250., -150.
13, -150., -250.
14, -50., -250.
15, 50., -250.
16, 150., -250.
17, 250., -150.
18, 250., -50.
19, 250., 50.
20, 250., 150.
21, 149.841141, -50.4932442
22, 49.8204613, 150.103104
23, -49.9058075, 150.056396
24, -149.659592, -150.633453
25, -49.7323875, -150.778061
26, 149.78331, 150.00351
27, -149.547684, 49.7620125
28, -149.616501, -50.4850159
29, -49.6826248, -50.7036057
30, 150.066208, -150.457352
31, 149.763687, 49.880291
32, 50.0062866, 49.7244682
33, 50.1059875, -50.6545715
34, -49.7329483, 49.7550774
35, -149.766846, 150.030121
36, 50.1085968, -150.5383
*Element, type=CPS4R
1, 31, 21, 18, 19
2, 18, 21, 30, 17
3, 36, 33, 29, 25
4, 23, 22, 6, 7
5, 10, 27, 35, 9
6, 2, 9, 35, 8
7, 23, 35, 27, 34
8, 29, 28, 24, 25
9, 13, 24, 12, 3
10, 14, 25, 24, 13
11, 4, 17, 30, 16
12, 31, 26, 22, 32
13, 6, 22, 26, 5
14, 20, 1, 5, 26
15, 23, 7, 8, 35
16, 21, 33, 36, 30
17, 28, 27, 10, 11
18, 12, 24, 28, 11
19, 23, 34, 32, 22
20, 25, 14, 15, 36
21, 20, 26, 31, 19
22, 34, 27, 28, 29
23, 33, 32, 34, 29
24, 16, 30, 36, 15
25, 31, 32, 33, 21
*Nset, nset=_PickedSet2, internal, generate
1, 36, 1
*Elset, elset=_PickedSet2, internal, generate
1, 25, 1
** Section: Section-1
*Solid Section, elset=_PickedSet2, material=Material-1
,
*End Instance
**
*Nset, nset=_PickedSet7, internal, instance=Part-1-1, generate
1, 20, 1
*Elset, elset=_PickedSet7, internal, instance=Part-1-1
1, 2, 4, 5, 6, 9, 10, 11, 13, 14, 15, 17, 18, 20, 21, 24
*Nset, nset=Set-1, instance=Part-1-1
34,
*End Assembly
**
** MATERIALS
**
*Material, name=Material-1
*Elastic
70., 0.3
**
** BOUNDARY CONDITIONS
**
** Name: BC-1 Type: Symmetry/Antisymmetry/Encastre
*Boundary
_PickedSet7, PINNED
** ----------------------------------------------------------------
**
** STEP: Step-1
**
*Step, name=Step-1
*Static
1., 1., 1e-05, 1.
**
** BOUNDARY CONDITIONS
**
** Name: BC-2 Type: Displacement/Rotation
*Boundary,user
**
** OUTPUT REQUESTS
**
*Restart, write, frequency=0
**
** FIELD OUTPUT: F-Output-1
**
*Output, field, variable=PRESELECT
**
** HISTORY OUTPUT: H-Output-1
**
*Output, history, variable=PRESELECT
*End Step



and my subroutine file is on the first message. I have never heard of the "interactive option". I really appreciate your help!
Thank you very much! I wait for your answer

Regards,
 
Hello,

Thank you for the inpudeck file.
I see you have user boundary keyword but you have no information for which nodes the boundary condition is active.
In line following *BOUNDARY keyword you need to give information about nodes id and degree of freedom.

The syntax is:
Code:
*BOUNDARY, USER
node_id_1, first_DOF, last_DOF
node_id_2, first_DOF, last_DOF
...
node_id_n, first_DOF, last_DOF

According to your subroutine it should be:
Code:
*BOUNDARY, USER
10, 1, 1

I have never heard of the "interactive option".
You can run any abaqus analysis without Abaqus/CAE. Just open system console, go to directory with *.inp file and use command:
abaqus user=subroutine_file.for job=inputdeck_file

If you want to get information about analysis on console you need to add interactive option otherwise the job will be running in the background:
abaqus interactive user=subroutine_file.for job=inputdeck_file

More information you will find in abaqus documentation: 3.2 Execution procedures

Regards,
Bartosz
 
Hi akabarten,

thank you very much!! It works perfectly now, curiosly it works only if i make a node-set with node 10.

If i write this code,

*BOUNDARY, USER
10, 1, 1

i get an error relating to the assembly.
Any idea on this problem?

Again than you very much for your help.

Sincerely,
 
Hello,
i get an error relating to the assembly.Any idea on this problem?
In Abaqus your model can be defined in terms of assembly of part instance, as your example model.

Depent how your model looks you need to use following syntax:
Code:
**
** for model without assembly
**
*BOUNDARY, USER
global_node_id, first_DOF, last_DOF
name_of_nset, first_DOF, last_DOF
**
** for model with assembly
**
*BOUNDARY, USER
assembly_name.instance_name.node_id, first_DOF, last_DOF
assembly_name.instance_name.nset_name, first_DOF, last_DOF
**

Please remember, When you use model with assembly Abaqus will be using different nodes id during calculation (global id) than you have in your inputdeck (local id).
To obtain global node id for specific local id you need to use GETPARTINFO or GETINTERNAL routines.
Example how to use them you can find in Abaqus documentation: Abaqus Verification Manual, 4.1.2 DISP

Regards,
Bartosz
 
Hi akabarten

thank you very much for your explanation. I have learnt a lot with your help! Thanks,

Regards
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor