A few things:

1 ) I assume you are running up against the limit of the machines
memory. You might want to check this, by looking at top while the job
is running to make sure. Sometimes I've had memory limited for other
reasons to make sure I don't crash the computer, so make sure you are
getting all the resources.

2) I am not sure what type of problem you are running, but fipy can
use a lot of extra memory through creation of binops and caching. One
thing you might want to try is to put all the variable dependencies in
one long expression. For example,

   E = A * B

   F = C * D

   G = E * F

probably uses more memory than

   G = A * B * C * D

3) Take a look at your equations and figure out the order i.e. do you
have second order or fourth order diffusion. From that you can figure
out the bandwidth. Also figure out how many variables you are solving
for. From this information you should get a pretty good idea of the
minimum memory requirement that any simulation will need. You have to
store old and new values of the variables and the largest matrix. The
matrices are destroyed after being used in fipy.

4) Make sure you are actually using the uniform grid classes. These
have massive savings in memory. At the moment non uniform meshes use a
lot more memory, but this will possibly be rectified when the new
variable mesh branch is merged.

5) The direct solvers use a lot more memory then just the size of the matrix.

6) If things just don't add up you can step through the program by
putting in raw_inputs and then looking at top and figure out where the
memory is allocated. You may want to print the variable values after
each deceleration to make them evaluate and allocate memory if they
are cached. Step though each equation as well as at least a few time
steps.

Cheers

On Thu, Nov 13, 2008 at 12:47 PM, Zhiwen Liang <[EMAIL PROTECTED]> wrote:
> Hi all,
> I am working on a 3D model that requires a very large mesh. When I tried a
> uniform grid of 80*80*80 cells, I got the following attached memory error. I
> wonder if there are ways to overcome this limit. Thank you in advance for
> any advice.
> Regards,
> Zhiwen
> python(12494) malloc: *** mmap(size=73728000) failed (error code=12)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> Traceback (most recent call last):
>   File "run_pyramid.py", line 55, in <module>
>
>  eq_u,eq_v,eq_w=getEquations(u=u,v=v,w=w,c11=c11,c12=c12,c13=c13,c33=c33,c44=
> c44,beta11=beta11,beta22=beta22,beta33=beta33,cinn=cinn)
>   File "/Volumes/RAID2/Users/liangz/DEV/Elastic/Solve/elasticEquations.py",
> line
>  41, in getEquations
>
>  graduvw_w=Gradc(c13,Zhat)*Gradc(u,Xhat)+Gradc(c44,Xhat)*Gradc(u,Zhat)+Gradc(
> c13,Zhat)*Gradc(v,Yhat)+Gradc(c44,Yhat)*Gradc(v,Zhat)
>   File "/Volumes/RAID2/Users/liangz/DEV/Elastic/Solve/myGrads.py", line 15,
> in G
> radc
>     return _Gradc(var).dot(hat)
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/meshVariable.py", line 193, in dot
>     return _MeshVariable.__dot(self, other,
> self._OperatorVariableClass(baseClas
> s))
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/meshVariable.py", line 165, in __dot
>     opShape = numerix._broadcastShape(A[index].shape, B.shape)
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/variable.py", line 1287, in __getitem__
>     unit=self.getUnit(),
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/variable.py", line 249, in getUnit
>     return self._extractUnit(self.getValue())
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/variable.py", line 453, in getValue
>     value = self._calcValue()
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/gaussCellGradVariable.py", line 93, in _calcValue
>     return inline._optionalInline(self._calcValueIn, self._calcValuePy, N,
> M, id
> s, orientations, volumes)
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/tools/inline/inline.py", line 9, in _optionalInline
>     return pythonFn(*args)
>   File
> "/Volumes/RAID2/usr/local/stow/fipy-trunk/lib/python2.5/site-packages/fip
> y/variables/gaussCellGradVariable.py", line 80, in _calcValuePy
>     grad = numerix.array(numerix.sum(orientations * contributions, 1))
>   File "/sw/lib/python2.5/site-packages/numpy/ma/core.py", line 1712, in
> __mul__
>     return multiply(self, other)
>   File "/sw/lib/python2.5/site-packages/numpy/ma/core.py", line 514, in
> __call__
>     (d1, d2) = (get_data(a), get_data(b))
>   File "/sw/lib/python2.5/site-packages/numpy/ma/core.py", line 317, in
> get_data
>     data = getattr(a, '_data', np.array(a, subok=subok))
> MemoryError
>
>



-- 
Daniel Wheeler

Reply via email to