[petsc-users] loosing preallocation information
Barry Smith
bsmith at mcs.anl.gov
Mon Mar 7 16:58:20 CST 2011
On Mar 7, 2011, at 9:48 AM, Ethan Coon wrote:
> On Mon, 2011-03-07 at 15:41 +0100, Alexander Grayver wrote:
>> It works! Great, Matt.
>>
>> I guess there is no other way to know all these small issues but to
>> get all possible errors? :)
This should not have happened. Here is
void PETSC_STDCALL matcreateseqaij_(MPI_Comm *comm,PetscInt *m,PetscInt *n,PetscInt *nz,
PetscInt *nnz,Mat *newmat,PetscErrorCode *ierr)
{
CHKFORTRANNULLINTEGER(nnz);
*ierr = MatCreateSeqAIJ(MPI_Comm_f2c(*(MPI_Fint *)&*comm),*m,*n,*nz,nnz,newmat);
}
and here is
#define CHKFORTRANNULLINTEGER(a) \
if (FORTRANNULL(a) || FORTRANNULLDOUBLE(a) || FORTRANNULLSCALAR(a) || FORTRANNULLREAL(a) || FORTRANNULLOBJECT(a) || FORTRANNULLFUNCTION(a)) { \
PetscError(PETSC_COMM_SELF,__LINE__,"fortran_interface_unknown_file",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONG,PETSC_ERROR_INITIAL, \
"Use PETSC_NULL_INTEGER"); *ierr = 1; return; } \
else if (FORTRANNULLINTEGER(a)) { a = PETSC_NULL; }
If you passed in PETSC_NULL instead of PETSC_NULL_INTEGER it should have printed a (slightly helpful) error message right at this point, it should not have gotten to that place later in the code where it stopped.
Are you sure you passed in PETSC_NULL? And did you include petsc.h or petscsys.h to make sure that PETSC_NULL was defined or did you pass 0 in for nnz?
I'd like to know so we can fix any PETSc bug there might be there.
Barry
>>
>
> PETSc in Fortran has a lot of oddities due to the difference between the
> languages (this "null pointer" thing and different ways of looking at
> array bounds being the primary two). If you haven't seen it yet, you
> should really look through Chapter 10 of the manual
>
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manual.pdf
>
> which explains most of them. Trust me when I say it will save you a lot
> of frustrated time (speaking as someone who learned it the hard way!)
>
> Ethan
>
>> Jed, Matt, thank you a lot!
>>
>> On 07.03.2011 15:35, Matthew Knepley wrote:
>>> On Mon, Mar 7, 2011 at 8:04 AM, Alexander Grayver
>>> <agrayver at gfz-potsdam.de> wrote:
>>> Jed, but why do I get in line 3003 in
>>> src/mat/impls/aij/seq/aij.c at all? As far as understand, if
>>> I don't pass nnz (NULL in C/C++ or PETSC_NULL in fortran) I
>>> have to avoid this loop in aij.c code.
>>>
>>>
>>>
>>> This is the problem. Fortran does not allow this kind of flexible
>>> checking, so there are different kinds of "NULL"s. You
>>> need to pass PETSC_NULL_INTEGER for nnz.
>>>
>>>
>>> Matt
>>>
>>> I don't have much experience with valgrind. Could you
>>> provide me with right parameters to run my code under
>>> valgrind?
>>> Thanks a lot for your help.
>>>
>>>
>>> On 07.03.2011 14:59, Jed Brown wrote:
>>>> Looks like a memory error. Best bet is to run in Valgrind.
>>>>
>>>>> On Mar 7, 2011 5:52 AM, "Alexander Grayver"
>>>>> <agrayver at gfz-potsdam.de> wrote:
>>>>>
>>>>> Hi Jed,
>>>>>
>>>>> It's getting even stranger.
>>>>>
>>>>> When I run this code under linux I've got error:
>>>>>
>>>>> [0]PETSC ERROR: --------------------- Error Message
>>>>> ------------------------------------
>>>>> [0]PETSC ERROR: Argument out of range!
>>>>> [0]PETSC ERROR: nnz cannot be greater than row length:
>>>>> local row 98 value 1455203639 rowlength 343!
>>>>> [0]PETSC ERROR:
>>>>> ------------------------------------------------------------------------
>>>>> [0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 7,
>>>>> Mon Dec 20 14:26:37 CST 2010
>>>>> [0]PETSC ERROR: See docs/changes/index.html for recent
>>>>> updates.
>>>>> [0]PETSC ERROR: See docs/faq.html for hints about
>>>>> trouble shooting.
>>>>> [0]PETSC ERROR: See docs/index.html for manual pages.
>>>>> [0]PETSC ERROR:
>>>>> ------------------------------------------------------------------------
>>>>> [0]PETSC
>>>>> ERROR: /home/mt/agrayver/mt-soft/multiem/INV3D/_tiger/em_model on a openmpi-i named glic by agrayver Mon Mar 7 14:49:43 2011
>>>>> [0]PETSC ERROR: Libraries linked
>>>>> from /panfs/panfs.gfz-hpcc.cluster/home/mt/agrayver/lib/petsc-3.1-p7/openmpi-intel-complex-debug/lib
>>>>> [0]PETSC ERROR: Configure run at Fri Mar 4 12:43:58
>>>>> 2011
>>>>> [0]PETSC ERROR: Configure options
>>>>> --with-petsc-arch=openmpi-intel-complex-debug
>>>>> --with-mpi-dir=/opt/mpi/intel/openmpi-1.4.2
>>>>> --with-scalar-type=complex
>>>>> --with-blas-lapack-dir=/opt/intel/Compiler/11.1/072/mkl/lib/em64t --with-precision=double --with-x=0
>>>>> [0]PETSC ERROR:
>>>>> ------------------------------------------------------------------------
>>>>> [0]PETSC ERROR: MatSeqAIJSetPreallocation_SeqAIJ() line
>>>>> 3003 in src/mat/impls/aij/seq/aij.c
>>>>> [0]PETSC ERROR: MatCreateSeqAIJ() line 2906 in
>>>>> src/mat/impls/aij/seq/aij.c
>>>>>
>>>>>
>>>>> Then I traced it under debugger both on Windows and
>>>>> Linux and realized that it doesn't crash under Windows
>>>>> only by luck.
>>>>>
>>>>> The call stack if the folowing:
>>>>> [C] MatSeqAIJSetPreallocation_SeqAIJ, FP=7fffb4513880
>>>>> [C] MatCreateSeqAIJ, FP=7fffb4513900
>>>>> [C] matcreateseqaij_, FP=7fffb4513960
>>>>> [F90] MODELING_MOD`modeling, FP=7fffb4517740
>>>>>
>>>>> As far as I understand after debugging the problem is
>>>>> that nnz in MatSeqAIJSetPreallocation isn't 0 and I go
>>>>> through this code:
>>>>> if (nnz) {
>>>>> for (i=0; i<B->rmap->n; i++) {
>>>>> if (nnz[i] < 0)
>>>>> SETERRQ2(PETSC_ERR_ARG_OUTOFRANGE,"nnz cannot be less
>>>>> than 0: local row %d value %d",i,nnz[i]);
>>>>> if (nnz[i] > B->cmap->n)
>>>>> SETERRQ3(PETSC_ERR_ARG_OUTOFRANGE,"nnz cannot be greater
>>>>> than row length: local row %d value %d rowlength %
>>>>> d",i,nnz[i],B->cmap->n);
>>>>> }
>>>>> }
>>>>>
>>>>> But why is nnz nonzero? I passed PETSC_NULL. It seems
>>>>> like macros CHKFORTRANNULLINTEGER in matcreateseqaij_
>>>>> should set it to zero, but it doesn't.
>>>>>
>>>>>
>>>>>
>>>>> Thanks.
>>>>>
>>>>> On 06.03.2011 16:49, Jed Brown wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> On Sun, Mar 6, 2011 at 07:39, Alexander Grayver
>>>>> <agrayver at gfz-potsdam.de> wrote:
>>>>>>>
>>>>>>> Hello,
>>>>>> ...
>>>>>
>>>>>
>>>
>>>
>>>
>>>
>>>
>>> --
>>> What most experimenters take for granted before they begin their
>>> experiments is infinitely more interesting than any results to which
>>> their experiments lead.
>>> -- Norbert Wiener
>>
>
> --
> ------------------------------------
> Ethan Coon
> Post-Doctoral Researcher
> Applied Mathematics - T-5
> Los Alamos National Laboratory
> 505-665-8289
>
> http://www.ldeo.columbia.edu/~ecoon/
> ------------------------------------
>
More information about the petsc-users
mailing list