I would like to understand better if and how I can control filling of coefficient matrices and prevent generation of any additional unwanted arrays. Any ideas on how to modify the 'high-level' interface so as to increase memory efficiency? Having 140,000 grid points, 3D and 4 variables, I would expect the coefficient matrix (of floats) to be ~ 240MB. However, coeff.setIsACoefficientMatrix consumes 0.4GB and the subsequent filling (coeff=xCoefficients(...) etc.), specifically the scalar assignment #0 doubleMappedGridFunction::operator= (this=0xad7fa68, x=0) at doubleMappedGridFunction.C:2779 #1 0x011cbceb in GenericCompositeGridOperators::yCoefficients (this=0xbff94e80, C1=@0xbff98460, C2=@0xbff9844c, C3=@0x839e770, C4=@0x839e770) at GenericCompositeGridOperators.C:564, consumes my remaining 2GB (?!) of RAM, crashing with HEAP ERROR. Can I prevent this? Also, are the doubles being used instead of floats (the error mentions MDI_double_Allocate)? Thank you, Petr On Sun, Mar 8, 2009 at 11:00 PM, Petr Hotmar <petr.hotmar@xxxxxxxxx> wrote: > Data overflow > I'm solving a system of two simple Helmholtz equations on a single > rectangular 3D grid using coefficient matrices. After relatively mild > refinement of the grid (from 20x20x20 to 50x50x50 grid lines), the > code crashes upon filling coeffs for interior points > (coeff=op.laplacianCoefficients(0,0)+...) with: > HEAP ERROR: Array_Data_Pointer == NULL in double* MDI_double_Allocate (Size > = 79361856)! > > I understand the matrix is stored in sparse format, so I would assume the > size of the problem to be still manageable even in the serial environment. > > Any ideas greatly welcome, > > Petr > > > >