# Craig-Bampton method on large problems

**URL:** <https://discourse.julialang.org/t/craig-bampton-method-on-large-problems/10696>\
**Category:** Performance\
**Created:** [May 4, 2018, 10:23am UTC](https://discourse.julialang.org/t/craig-bampton-method-on-large-problems/10696 "2018-05-04T10:23:01Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![mrapo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mrapo/32/3911_2.png) [@mrapo](https://discourse.julialang.org/u/mrapo)\
**Post date:** [May 4, 2018, 10:23am UTC](https://discourse.julialang.org/t/craig-bampton-method-on-large-problems/10696/1 "2018-05-04T10:23:01Z")

</div>

I’ve implemented the Craig-Bampton method for model reduction at [https://github.com/JuliaFEM/ModelReduction.jl/blob/master/src/craig\_bampton.jl](https://github.com/JuliaFEM/ModelReduction.jl/blob/master/src/craig_bampton.jl). Now I would like to perform the reduction on very large models (at least 1 M x 1 M sized matrices), but some of the matrix operations (such as calculating a huge matrix inversion or instead perform huge matrix chain multiplication) would need an enormous amount of computational resources.

Would anyone have an idea how this method is implemented in commercial softwares? Is Julia able to operate on matrices at this scale? If it is, then what would be the trick to perform the matrix operations without getting an OutOfMemoryError or without taking a huge amount of time? Most implementations of this method are for academic use only and they only work on very small examples.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [May 4, 2018, 10:41am UTC](https://discourse.julialang.org/t/craig-bampton-method-on-large-problems/10696/2 "2018-05-04T10:41:32Z")

</div>

The inputs will be sparse and you never want to form their explicit inverses (these are in general dense). Use e.g. `Kmm \ X'` instead of `inv(Kmm) * X'`.

If you do something like Finite element modeling and you accidentally form an `ndof x ndof` matrix, you are, for any real problem, out of memory.
