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!

Getting Stresses at Nodes in the 2

Status
Not open for further replies.

MCC1966

Geotechnical
Jul 30, 2006
60
In the Visualization Module, there is Field Output under Result. As shown in this Field Output window the Stresses will be calcualted at the Integration Points while Displacements at Nodes. No how can one get the stresses to at Nodes so that this can appear in this window
Thanks
 
Replies continue below

Recommended for you

You can use the query tool and select nodes when choosing one of the stress outputs, or you can print the nodal stresses to the dat file but I forget the exact command for that.

corus
 
Corus
The goal from this quesion was as follows: if you open the window Creat Field Output- from Field Variable you will find the Stresses Compenents in this window reported at the Integration Points and not at Nodes. So I was wondering how I get them at Nodes. Any help on that
Thanks
 
Reported where? The field output lets you view the results as contours with values at the nodes. Using the query tools you can get the value at the nodes by clicking on the model.

corus
 
Hi MCC1966,

If I'm not mistaken understanding your question: you want to get stress value calculated at a certain time (not the evolution of the stress) at the nodes. First I would try to build a path that passes the nodes I want by using: \Tools\Part\Create.
Then, I would get the stress by create XY-data based on that path by using: \Tools\XY Data\Create\(choose) Path.
Note that this stress is calculated at the node but it's a result of extrapolation from the integration point. It's also worth to note that this stress is only at a certain time increment.

If you ask about the evolution of the stress, yes it is only shown in integration point(default).

Hope this could answer your question.

regards,
Sendy.
 
I think in the abaqus visualization module, when you select
Report Field Output there is an option where you can change the position where you the results to be, by default it is integration point if you change that to Unique Nodal then you can get the stresses output at nodes which will be written in an .rpt file.
Hope this helps

Hemanth.
 
Dear Corus, Sendy and Hemanthwsu

My goal is as follows: I am trying to creat a new Field Variable from Field which is U1 (displacment)/S11 (Stress)
However, the I get a message : INCOMPATIBLE DATA LOCATION.
This incompatibility occurs because ABAQUS calculates stress at Integration points and Displacement at nodes. That is why I thought of getting the Default of streees to be at Nodes. If I can . If you have any other way to resolve this issue I will appreciate it
 
Hy MCC1966,
I have only a complicated way which needs some python programming as follows :
1. open results (*.odb) with
from odbAccess import *
odb=openOdb(odbName+'.odb',readOnly=FALSE)
2. read the stress results and interpolate them to the nodes
(not as quick as it sounds)
3. calculate your new data
4. save data with
odb.save()
odb.close()
I think with programming and debugging about two days of work.

Hope that helps a bit.

Greetings Tamlin
 
MCC1966

You can show the quantity X-displacement/XX-stress as a contour plot using Roshaz, however where the stress is zero or extremely small numerical problems will occur (by a division by zero error) so you will have to modify your equation by adding a small number to the stress value.
 

You can use the next script to obtain the stress field at the nodes. Just save the code in a 'script_file_name.py' modify the variables below according to your needs and run it.


from abaqusConstants import *
from odbAccess import *
# ***********************************************
# Modify the next variables accordingly
odbPath="C:\\Temp\\database_name.odb"
stepName="Step-1"
frameNumber=-1 #last frame in the stepName
sourceOutputFieldName='S' #stress field
newOutputFieldName='S_at_NODES'
# ************************************************

odb=session.openOdb(name=odbPath,readOnly=FALSE)
step=odb.steps[stepName]
frame=step.frames[frameNumber]
sourceField=frame.fieldOutputs[sourceOutputFieldName]
subField=sourceField.getSubset(position=ELEMENT_NODAL)
newField=frame.FieldOutput(name=newOutputFieldName, field=subField)
odb.save()
odb.close()
#you must re-open the database to see the new field
 
Xerf

I still need Fortran Compiler to run the scripr you have provided. I am very poor programer. YI highly appreciat it if you detailed the steps of executing your answer
 
Actually the script is written in the ABAQUS Scripting Interface (ASI) which is Python (+ ABAQUS extensions). Python != Fortran. You don't need to compile this script.

Just create a blank text file, cut/paste Xerf's code and save it as xerf.py (or whatever.py)

With ABAQUS/CAE running go to File-Run Script.

That's it!
 
Hi
1-I just modified the step name to the desired step at which I need the stresses at nodes and (Step 2) and last frame in this step is 35. These are I thing the variables Xref meant. is that right ?
2-This text file I saved in the ABAQUS file with index .py but when in CAE I went to File/ Run Script I didnot find the file.
Plesee comment about 1 and 2

from abaqusConstants import *
from odbAccess import *
# ***********************************************
# Modify the next variables accordingly
odbPath="C:\\Temp\\database_name.odb"
stepName="Step-2"
frameNumber= 35 #last frame in the stepName
sourceOutputFieldName='S' #stress field
newOutputFieldName='S_at_NODES'
# ************************************************

odb=session.openOdb(name=odbPath,readOnly=FALSE)
step=odb.steps[stepName]
frame=step.frames[frameNumber]
sourceField=frame.fieldOutputs[sourceOutputFieldName]
subField=sourceField.getSubset(position=ELEMENT_NODAL)
newField=frame.FieldOutput(name=newOutputFieldName, field=subField)
odb.save()
odb.close()
#you must re-open the database to see the new field
 
-Open any text editor (i.e., Notepad, WordPad) and copy-paste the code there.
-Update the odbPath="C:\\Temp\\database_name.odb" with the correct path and name of your database.
-Save the file as 'script.txt', close the editor and change the extension of the file you just saved from .txt to .py
-Go to ABAQUS and run the script.


BTW, what do you mean by :
"This text file I saved in the ABAQUS file with index .py ..." ?!!! :)
 
I think something is missing
from the way it is explained it seems very easy
I cut and paste the code in a word text document. I name it xerf.py and save it in C.
In ABAQUS/ CAE I went to File and then Run Script but I didnot find xerf in C

 
Did you check the file's name on C:\ ?
I suspect it is 'xerf.py.doc'. If so, you need to rename the file to 'xerf.py'.
Regards.
 
I've just realized. If you use MS Word, do not save the file as .doc. You must save the code as plain text file. The .py files are common text files. You could use Notepad instead.
 
Thank you Xerf for help. If you have minutes please read below.
After extracting the stresses to the nodes. I have failed to combine it with the pore pressure (filed output which is (by default)calcualted at nodes. I saked ABAQUS support . and here is their answer.
" the script you had sent creates a new field output by extracting the stresses to the nodes. However, please note that you still will not be able to combine this field output with nodal variables like pore pressure. You will have to extend the script to include the additional steps 1) Extract the integration point variable to the element nodes for the desired field output variable. This can be done using the getSubset() method and specifying position=ELEMENT_NODAL (see Section 30.3.8 getSubset(...) of the ABAQUS/Scripting Reference Manual). This will extract the values to the nodes, but will not average the data.

2) You must come up with logic to average the multiple data to a single value at the nodes (note that there will be contributions from neighboring integration points since a typical node will be shared by multiple elements) .

3) Create a new scalar field output by combining the values obtained from the previous step and the values from the other nodal field output variable.
An alternative and perhaps easier way to do this is to use the user subroutine UVARM. It allows you to define output quantities that are functions of any of the available integration point quantities (which include both stress invariants such as pressure and pore pressure). A sample user subroutine is attached to this incident. You will need to add the following to the material option block of your input file:

*user output variables
1,

and the following to the output requests in your step definition:

*Output, field, variable=PRESELECT
*element output
uvarm,


As Iam poor programmer I do not know How easy to do either of the above ways.


 
Xerf , by the way , here is the attachment of UVARM they were talking about

subroutine uvarm(uvar,direct,t,time,dtime,cmname,orname,
1 nuvarm,noel,npt,layer,kspt,kstep,kinc,ndi,nshr,coord,
2 jmac,jmatyp,matlayo,laccfla)
c
include 'aba_param.inc'
c
character*80 cmname,orname
character*3 flgray(15)
dimension uvar(nuvarm),direct(3,3),t(3,3),time(2)
dimension array(15),jarray(15),jmac(*),jmatyp(*),coord(*)
c
c error counter:
jerror = 0

c stress invariants:
call getvrm('SINV',array,jarray,flgray,jrcd,jmac,jmatyp,
1 matlayo,laccfla)
jerror = jerror + jrcd
press = array(3)

c pore pressure:
call getvrm('POR',array,jarray,flgray,jrcd,jmac,jmatyp,
1 matlayo,laccfla)
jerror = jerror + jrcd
por = array(1)

uvar(1) = press/por

c if error, write comment to .dat file:
if(jerror.ne.0)then
write(6,*) 'request error in uvarm for element number ',
1 noel,'integration point number ',npt
endif

return
end
 
The problem is that the Stress is a tensorial field (it may have up to six components/location) whereas the pore pressure is a scalar field (one component per location).

If you want to combine the two fields you might have in mind a formula to relate the stress components.

You mentioned earlier:
My goal is as follows: I am trying to creat a new Field Variable from Field which is U1 (displacment)/S11 (Stress)

You have now the stress field at nodes.

In the Visualization module, you can use Tools->Create Field Output to create new scalar Output Fields from the individual components of the tensorial fields. Thus you can create a scalar field from the S11 stress component at nodes. Also you can create a scalar field from the U1 displacement component (which is already at nodes). In the end you can create a new scalar field based on your above formula. A similar approach can be used if you need to include the pore pressure.

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor