Matlab & Abaqus & Python

Matlab & Abaqus & Python


1. Operate Abaqus with Matlab

Matlab has a lot of command to run other softwares like dos,system,!,unix, etc. Here we use the command dos as a demo.

[s,w]=dos('abaqus job=1 inp=RW2.inp user=nam_sn-std.obj int','-echo');

In which the command dos means to open the CMD in windows, and the following strings is the command you want to run in the CMD. abaqus is the command to run abaqus command lines. job=1 means you job's name is '1', inp=xxxx is the inp file you want to submit to Abaqus, user is the command you need when you have a user defined subroutine file to add in the job session. The int means that the log information will show on the screen during calculation which is important because you need the command window to remain rolling so that you can run other commands only when the last calculation finishes. -echo means the information will show on the command window of Matlab which will also be stored in the variable 'w'.

Before you start the calculation, several proper .inp files are needed for the stochastic simulation. Here I use Matlab to read the .inp file that have already been built by Abaqus into a 'cell' kind of variable. This 'cell' is large array matrix with string as element. Every line in the file becomes a string element in the array. What's left is to find out which line you need to change and the location of the commands you want to add on. Then write the changed 'cell' into a new file.

Big discovery today, the inp file for the Abaqus command need to be more strict in format than the Abaqus cae, especially no blank lines inside one session. But the Abaqus cae can import the wrong inp file as a model.

2. Operate Python with Matlab

It's the same as the former one, because the dos command can run all the command that runs in the CMD window.

The interesting thing is the Python langurage, the data structure in this langurage is very powerful, the odb file of the Abaqus is also this kind of data structure, that's why Python is very useful in post-processing. Here I use Python to decompose the odb file and take out the displacement and the reaction force.

from odbAccess import *
odb = openOdb(path='Job-mc1.odb')

# 从输出数据库中提取场变量计算结果。
s2 = odb.steps['Step-2']
Ux1 = s2.historyRegions['Node RW2-1.48'].historyOutputs['U1'].data

Fx1 = s2.historyRegions['Node RW2-1.1'].historyOutputs['RF1'].data

print Ux1
print Fx1

Then the after code are used in Matlab:
[s,w]=dos('abaqus python readdata.py >> temp.txt');
The output of CMD will be stored in the temp.txt file and the last two rows will be the displacement and the force.

A problem pops up, because the data in temp.txt has a format below:

((0.0, -9840.1611328125), (0.0010000000474974513, -10147.7822265625), (0.0020000000949949026, -10139.9453125),...)

Which Matlab can't read, so I use:

tem=strrep(ordata,'(','[');
tem=strrep(tem,')',']');
tem=strrep(tem,'],','];');
U=str2num(tem);

to change the buklet so that Matlab can read it as a matrix.

你可能感兴趣的:(Matlab & Abaqus & Python)