Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: FEM substructuring  (static condensation) -> out ot memory; ANSYS can do it
Date: Sat, 31 May 2008 14:57:01 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 55
Message-ID: <g1rovt$8ep$1@fred.mathworks.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: webapp-05-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1212245821 8665 172.30.248.35 (31 May 2008 14:57:01 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Sat, 31 May 2008 14:57:01 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1337510
Xref: news.mathworks.com comp.soft-sys.matlab:471553



Hi,

I'm coding my own FEM code in Matlab and want to implement
the so-called substructuring technique, which basically is a
static condensation.

However Matlab runs out of memory quiet fast. As soon as I
want to reduce my stiffness matrix by about 5000dof the
calculations fails.

Here's the formula for substructuring, so you can get an
idea of it, if you don't know it.

K*u = F

u= [ua; ub];
F = [Fa; Fb];
K = [Kaa Kab; Kba Kbb]
Kab=Kba';

ua are the degrees of freedom i want to keep, whereas ub are
the ones which should be removed. Therefore I obtain a new
matrix for the left side and a new vector on the right side;

K_new = [Kaa - Kab*Kbb^-1*Kba]
F_new = [Kaa - Kab*Kbb^-1*Fb]

Now of course I'm not computing the full inverse of Kbb, but 

Kaa-Kab/Kbb*Kba

I'm not quiet sure why Matlab runs out of memory when Kbb
reaches about n=5000 (as I mentioned above). Either it's the
computation of Kab/Kbb or maybe as Kab/Kbb most probably
becomes a full matrix it just needs to much memory.

The only thing I know for sure is that ANSYS can calculate
that kind of substructuring without any problems. It even
manages to remove well over 100 000 degrees of freedom
without any major computing needs (takes only about 5 min).

So there must be a major difference in the way Matlab  (or
myself) is calculating K_new compared to ANSYS.

Is it the way matrix are being stored. As far as I know
ANSYS uses Harwell-Boeing (not quiet sure). This maybe is
more memory efficient then the way Matlab is storing sparse
matrixes, but that still wouldn't explain why the
calculation fails.

Any ideas or reason on how I would have to change my code?

Thanks a lot!!!