Skip to main content

Matrix Transfer between MATLAB and Ansys

Matrix Transfer*

Reading and writing matrix or arrays to MATLAB and back can be painstaking as described by SimuTech in a well written article using *TREAD or *VREAD. Wouldn't it be great to have someone else do the heavy lifting for you on formatting etc?

Fortunately there is a Matrix Market format sponsored by NIST that is also supported by Ansys and Matlab. There are two very useful MATLAB functions created just for this purpose:

  • mmread.m  for reading in the Market Matrix file into MATLAB
  • mmwrite.m for writing the matrix into a Matrix Market file

Writing Matrix or Arrays from Ansys to be Read by MATLAB
In Ansys...
/prep7
*dim, c,, 10,10, 1 ! Example Matrix
enow = 0
*do, ct, 1, 10        
    *do, ct2, 1, 10
        c(ct,ct2) = ct*ct2
    *enddo    
*enddo    

!!! Writes out Matrix to matlab
*dmat, exportmatrix, D, import, APDL, c ! export to matrix file
*export, exportmatrix, mmf, mytemp.mtx

In MATLAB, the command is simply...
c = mmread('mytemp.mtx'); % mmread.m must is in working directory

Writing Matrix from MATLAB to be Read by Ansys
In MATLAB...
m = transpose(1:10) * (1:10);  % example matrix
mmwrite('toansys.mtx', m, 'example matrix');  % writes out matrix 

In Ansys...
*dmat, importmatrix, d, import, mmf, toansys.mtx ! imports 
*dim, fromMatlab, array, 10, 10 ! pre-define matrix size
*export, importmatrix, apdl, fromMatlab, 1, 10 
! writes out to apdl named fromMatlab, 1st column to 10th column

You may now access the matrix in Ansys for example via...
q = fromMatlab(3, 4) 
*stat, q

Other Comments
The Harwell-Boeing format can also be an alternative that is also supported by *EXPORT. It might come in handy for large sparse matrix though I've not tried it myself. 

Comments

Post a Comment