Re: [petsc-dev] GCC8 Fortran length changes from int to size_t

2018-05-04 Thread Jed Brown
Jed Brown  writes:

> Huh?  Or a test that uses enough arguments to not pass in registers if
> you insist on creating a test failure.  Alternatively, do what the
> documentation says.  If you doubt the documentation, we can check the
> assembly.
>
> $ cat stringarg.f 
> 
>   subroutine stringarg(s) 
>   
>   
>   character(*) s
>   end
>
> With gfortran-7.3.1:
>
>   push   rbp  
>   
>   
> 0001  movrbp,rsp
> 0004  movQWORD PTR [rbp-0x8],rdi
> 0008  movDWORD PTR [rbp-0xc],esi
> 000b  moveax,DWORD PTR [rbp-0xc]
> 000e  cdqe   
> 0010  movrdx,rax
> 0013  movecx,0x0
> 0018  poprbp
> 0019  ret
>
>
> Note the use of esi instead of rsi for the integer argument:
>
> 0008  movDWORD PTR [rbp-0xc],esi
>
> Presumably if you build with gfortran-8.1, the analogous line will use
> rsi.

Confirmed with gfortran-8.1:

  push   rbp
0001  movrbp,rsp
0004  movQWORD PTR [rbp-0x8],rdi
0008  movQWORD PTR [rbp-0x10],rsi
000c  movrax,QWORD PTR [rbp-0x10]
0010  movrdx,rax
0013  movecx,0x0
0018  poprbp
0019  ret


Re: [petsc-dev] FieldSplit with different nonzero pattern

2018-05-04 Thread Hong
Pierre:
Thanks for creating this use case. I'll check it and get back to you
sometime next week.
Hong

> Hong,
> Thanks for your reply.
> It’s not so minimalist, but at least it is based on one of your example.
> diff --git a/src/ksp/ksp/examples/tutorials/ex42.c b/src/ksp/ksp/examples/
> tutorials/ex42.c
> index 8be4389a2d..520c82569a 100644
> --- a/src/ksp/ksp/examples/tutorials/ex42.c
> +++ b/src/ksp/ksp/examples/tutorials/ex42.c
> @@ -1953,6 +1953,15 @@ static PetscErrorCode solve_stokes_3d_coupled(PetscInt
> mx,PetscInt my,PetscInt m
>  }
>}
>ierr = KSPSolve(ksp_S,f,X);CHKERRQ(ierr);
> +  PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,
> PETSC_VIEWER_ASCII_INFO);
> +  MatView(A, PETSC_VIEWER_STDOUT_WORLD);
> +  Mat C;
> +  MatMatMult(A, A, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &C);
> +  MatView(C, PETSC_VIEWER_STDOUT_WORLD);
> +  PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD);
> +  ierr = KSPSetOperators(ksp_S,C,C);CHKERRQ(ierr);
> +  ierr = KSPSolve(ksp_S,f,X);CHKERRQ(ierr);
> +  MatDestroy(&C);
>
>ierr = PetscOptionsGetBool(NULL,NULL,"-write_pvts",&write_output,
> NULL);CHKERRQ(ierr);
>if (write_output) {ierr = DAView3DPVTS(da_Stokes,X,"up")
> ;CHKERRQ(ierr);}
>
> $ mpirun -np 1 ./ex42 -mx 2 -my 2 -mz 2 -stokes_pc_type fieldsplit
> This should give you this exact error.
> Do you know of a way to bypass the error by flushing/destroying the PC
> while still keeping the options for the following KSPSolve?
>
> Thanks in advance,
> Pierre
>
> On 3 May 2018, at 5:07 PM, Hong  wrote:
>
> Pierre :
> The code crashes inside
> if (scall == MAT_REUSE_MATRIX) {
> ...
> }
> which assumes both original matrix and its submatrices data structures
> remain unchanged.
> We did not anticipate the usage of looping
>
>>
>> 3) change the sparsity pattern of the Mat for one of the field
>> 4) do a KSPSolve
>>
>
> Can you send us a stand-alone code for this type of application.
> We will investigate how to support it.
>
> Hong
>
> I cannot change this calling sequence, because I’d like to nest 3) and 4)
>> inside a loop.
>> However, I end up with this error during 4):
>> [0]PETSC ERROR: Nonconforming object sizes
>> [0]PETSC ERROR: Cannot reuse matrix. wrong no of nonzeros
>> [0]PETSC ERROR: Petsc Development GIT revision: v3.9-13-g05d412bc58  GIT
>> Date: 2018-04-09 08:39:52 -0500
>>
>> [0]PETSC ERROR: #1 MatCreateSubMatrix_SeqAIJ() line 2330 in
>> /Users/jolivet/Documents/repositories/petsc/src/mat/impls/aij/seq/aij.c
>> [0]PETSC ERROR: #2 MatCreateSubMatrix_MPIAIJ_SameRowColDist() line 3184
>> in /Users/jolivet/Documents/repositories/petsc/src/mat/impls/
>> aij/mpi/mpiaij.c
>> [0]PETSC ERROR: #3 MatCreateSubMatrix_MPIAIJ() line 3310 in
>> /Users/jolivet/Documents/repositories/petsc/src/mat/impls/
>> aij/mpi/mpiaij.c
>> [0]PETSC ERROR: #4 MatCreateSubMatrix() line 7813 in
>> /Users/jolivet/Documents/repositories/petsc/src/mat/interface/matrix.c
>> [0]PETSC ERROR: #5 PCSetUp_FieldSplit() line 564 in
>> /Users/jolivet/Documents/repositories/petsc/src/ksp/pc/impls
>> /fieldsplit/fieldsplit.c
>> [0]PETSC ERROR: #6 PCSetUp() line 923 in /Users/jolivet/Documents/repos
>> itories/petsc/src/ksp/pc/interface/precon.c
>> [0]PETSC ERROR: #7 PCApply() line 453 in /Users/jolivet/Documents/repos
>> itories/petsc/src/ksp/pc/interface/precon.c
>> [0]PETSC ERROR: #8 KSP_PCApply() line 276 in
>> /Users/jolivet/repo/petsc/include/petsc/private/kspimpl.h
>> [0]PETSC ERROR: #9 KSPFGMRESCycle() line 166 in
>> /Users/jolivet/Documents/repositories/petsc/src/ksp/ksp/
>> impls/gmres/fgmres/fgmres.c
>> [0]PETSC ERROR: #10 KSPSolve_FGMRES() line 291 in
>> /Users/jolivet/Documents/repositories/petsc/src/ksp/ksp/
>> impls/gmres/fgmres/fgmres.c
>> [0]PETSC ERROR: #11 KSPSolve() line 669 in /Users/jolivet/Documents/repos
>> itories/petsc/src/ksp/ksp/interface/itfunc.c
>>
>> Is this the expected behaviour? Would you need a MWE?
>> What I find funny is that if I turn -info on, then just before the error,
>> I get:
>> [0] PCSetUp(): Setting up PC with different nonzero pattern
>> So why is it trying to reuse the matrix? I am missing a call to some
>> function?
>>
>> Thanks in advance,
>> Pierre
>
>
>
>