<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>Hi Matthew,</p>
<p>The file in the link you sent does not call <span>DMGetLocalToGlobalMapping
nor </span><span>ISLocalToGlobalMappingGetIndicesF90 though?</span></p>
<p><span>Anyway, e</span>verything you wanted is there:</p>
<p><a moz-do-not-send="true"
href="https://bitbucket.org/petsc/petsc/issues/262/fortran-unassociated-pointer-with">https://bitbucket.org/petsc/petsc/issues/262/fortran-unassociated-pointer-with</a></p>
<p>Thibaut</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 25/02/2019 12:03, Matthew Knepley
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAMYG4GkHUnRhbYLTwptwqmtjDkTqQfquJgby_+FSSKoCTHMJLQ@mail.gmail.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div dir="ltr">On Mon, Feb 25, 2019 at 3:19 AM Appel, Thibaut
<<a href="mailto:t.appel17@imperial.ac.uk"
moz-do-not-send="true">t.appel17@imperial.ac.uk</a>>
wrote:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="auto">
Hi Matthew,
<div><br>
</div>
<div>Yes I need F90 and the syntax in the file / yours</div>
<div>
<div dir="ltr">
<div dir="ltr">
<div class="gmail_quote">
<blockquote type="cite"><font color="#000000"><span
style="background-color:rgba(255,255,255,0)">PetscInt,
pointer :: id_ltog(:)</span></font></blockquote>
</div>
</div>
</div>
<div><br>
</div>
Is the exact same as</div>
<div>
<blockquote type="cite">PetscInt, dimension(:), pointer
:: id_ltog</blockquote>
</div>
<div><br>
</div>
<div>They’re both modern fortran ”correct”</div>
<div><br>
</div>
<div>Anyways I tried both and I still get the same error
message.</div>
</div>
</blockquote>
<div><br>
</div>
<div>Okay, that file I sent the link to is tested every night,
so I suspect a compiler bug in your version.</div>
<div>Please send your entire example so I can run it here.
Also, let us know what Fortran compiler</div>
<div>and version you are using again.</div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="auto">
<div>Thibaut<br>
<div dir="ltr"><br>
On 24 Feb 2019, at 23:38, Matthew Knepley <<a
href="mailto:knepley@gmail.com" target="_blank"
moz-do-not-send="true">knepley@gmail.com</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">On Sun, Feb 24, 2019 at 6:33 PM
Appel, Thibaut <<a
href="mailto:t.appel17@imperial.ac.uk"
target="_blank" moz-do-not-send="true">t.appel17@imperial.ac.uk</a>>
wrote:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div style="word-wrap:break-word">Is that for
the id_ltog argument? I tried declaring it
as IS, and you can’t declare an
deferred-shape array as target. Same
message. XXX(:) is syntactic sugar for
dimension(:) :: XXX
<div><br>
</div>
<div>I’m really confused because this</div>
<div><a
href="https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/ksp/examples/tutorials/ex14f.F90.html"
target="_blank" moz-do-not-send="true">https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/ksp/examples/tutorials/ex14f.F90.html</a></div>
<div>doesn’t use the xxxF90 variants of the
routines we’re talking about?</div>
</div>
</blockquote>
<div><br>
</div>
<div>You can use the F77 stuff if you want. I
thought you needed F90. For F90, I think you
need to declare it</div>
<div><br>
</div>
<div> PetscInt, pointer :: id_ltog(:)</div>
<div><br>
</div>
<div>like it is in the link I sent you.</div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div style="word-wrap:break-word">
<div>Thibaut<br>
<div><br>
<blockquote type="cite">
<div>On 24 Feb 2019, at 22:50, Matthew
Knepley <<a
href="mailto:knepley@gmail.com"
target="_blank"
moz-do-not-send="true">knepley@gmail.com</a>>
wrote:</div>
<br
class="gmail-m_5832061864260648120gmail-m_3669154753077176379Apple-interchange-newline">
<div>
<div dir="ltr">
<div dir="ltr">
<div dir="ltr">On Sun, Feb 24,
2019 at 4:28 PM Appel, Thibaut
<<a
href="mailto:t.appel17@imperial.ac.uk"
target="_blank"
moz-do-not-send="true">t.appel17@imperial.ac.uk</a>>
wrote:<br>
</div>
<div class="gmail_quote">
<blockquote
class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div
style="word-wrap:break-word"><span>Hi
Matthew,</span><span><br>
</span><span><br>
</span><span>With the
following data
declaration and routines
calls:</span></div>
</blockquote>
<div><br>
</div>
<div>I am not a Fortran90
expert, but your declaration
looks different than the
ones I have seen work:</div>
<div><br>
</div>
<div> <a
href="https://bitbucket.org/petsc/petsc/src/master/src/dm/impls/plex/examples/tutorials/ex1f90.F90"
target="_blank"
moz-do-not-send="true">https://bitbucket.org/petsc/petsc/src/master/src/dm/impls/plex/examples/tutorials/ex1f90.F90</a></div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote
class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div
style="word-wrap:break-word"><font
face="Courier"><span><br>
</span><span> DM :: da<br>
</span><span>
ISLocalToGlobalMapping
:: ltog<br>
</span><span> PetscInt,
DIMENSION(:), POINTER
:: id_ltog<br>
<br>
CALL
DMDACreate2D(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,(nx+1),(ny+1),
&<br>
PETSC_DECIDE,PETSC_DECIDE,neq,0,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
DMSetUp(da,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
DMDAGetCorners(da,icx,icy,PETSC_NULL_INTEGER,lx,ly,PETSC_NULL_INTEGER,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
DMGetLocalToGlobalMapping(da,ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
ISLocalToGlobalMappingGetIndicesF90(ltog,id_ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
ISLocalToGlobalMappingRestoreIndicesF90(ltog,id_ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
DMDestroy(da,ierr)<br>
CHKERRA(ierr)<br>
</span></font><br>
<br>
I get, with the most
recent Intel Fortran
compiler and a fresh “git
pull” PETsc:<span><br>
<br>
</span><span><font
face="Courier">forrtl:
severe (408): fort:
(7): Attempt to use
pointer ID_LTOG when
it is not associated
with a target</font></span>
<div><span><font
face="Courier"><br>
</font></span></div>
<div><span><font
face="Courier"><br>
</font></span></div>
<div><span>Thibaut<br>
<br>
<blockquote
type="cite">On 22
Feb 2019, at 15:13,
Matthew Knepley <<a
href="mailto:knepley@gmail.com" target="_blank" moz-do-not-send="true">knepley@gmail.com</a>>
wrote:<br>
<br>
On Fri, Feb 22, 2019
at 9:10 AM Thibaut
Appel via
petsc-users <<a
href="mailto:petsc-users@mcs.anl.gov"
target="_blank"
moz-do-not-send="true">petsc-users@mcs.anl.gov</a>>
wrote:<br>
I reckon that what
corresponds best to
my situation is to
create my own MPIAIJ
matrix, recover the
DMDA local to global
mapping, preallocate
myself and fill my
values with
MatSetValues.<br>
<br>
However, what is the
correct way to
call ISLocalToGlobalMappingGetIndices
in Fortran? It seems
there's something
missing in the
documentation as my
code just won't
work.<br>
<br>
Some examples
include a
PetscOffset argument
which is not
present in the
documentation and
there is no manual
page
for ISLocalToGlobalMappingGetIndicesF90:
the only information
I could find is on
/src/vec/is/utils/f90-custom/zisltogf90.c.
Are you supposed to
allocate the index
array yourself? I
tried declaring it
as a pointer too. I
keep getting an
error<br>
<br>
1) There was a bug
in that file, but I
don't think it
should have affected
you. I will put in a
PR<br>
<br>
2) You are supposed
to pass in a
pointer,
unallocated. We
manage all the
allocation, which is
why you call
Restore. What
happens when you do
that?<br>
<br>
Thanks,<br>
<br>
Matt<br>
[0]PETSC ERROR: #1
User provided
function() line 0 in
User file<br>
application called
MPI_Abort(MPI_COMM_SELF,
-42924) - process 0<br>
<br>
Minimal example:<br>
<br>
PROGRAM test_dmda<br>
<br>
#include
<petsc/finclude/petscdm.h><br>
#include
<petsc/finclude/petscdmda.h><br>
<br>
USE PetscDMDA<br>
<br>
IMPLICIT NONE<br>
<br>
PetscErrorCode ::
ierr<br>
PetscInt ::
irank, icx, icy, lx,
ly, n_ltog<br>
DM ::
da<br>
ISLocalToGlobalMapping
:: ltog<br>
<br>
PetscInt,
DIMENSION(:),
ALLOCATABLE ::
id_ltog<br>
!PetscInt,
DIMENSION(:),
POINTER :: id_ltog<br>
<br>
PetscInt,
PARAMETER :: nx=24,
ny=9, neq=4<br>
CHARACTER(LEN=100)
:: err_msg<br>
<br>
CALL
PetscInitialize(PETSC_NULL_CHARACTER,ierr)<br>
<br>
CALL
MPI_COMM_RANK(PETSC_COMM_WORLD,irank,ierr)<br>
<br>
CALL DMDACreate2D(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,(nx+1),(ny+1), &<br>
PETSC_DECIDE,PETSC_DECIDE,neq,0,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
DMSetUp(da,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL DMDAGetCorners(da,icx,icy,PETSC_NULL_INTEGER,lx,ly,PETSC_NULL_INTEGER,ierr)<br>
CHKERRA(ierr)<br>
<br>
WRITE(*,'(*(1X,A,I3))')
'I am process #',
irank, ' - my
lower left corner is
icx=', icx, &<br>
'and icy=',
icy, ' - the width
is lx=', lx, ' and
ly=', ly<br>
<br>
CALL
DMGetLocalToGlobalMapping(da,ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
ISLocalToGlobalMappingGetSize(ltog,n_ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
ALLOCATE(id_ltog(1:n_ltog),STAT=ierr,ERRMSG=err_msg)<br>
<br>
CALL
ISLocalToGlobalMappingGetIndices(ltog,id_ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
ISLocalToGlobalMappingRestoreIndices(ltog,id_ltog,ierr)<br>
CHKERRA(ierr)<br>
<br>
DEALLOCATE(id_ltog,STAT=ierr,ERRMSG=err_msg)<br>
<br>
CALL
DMDestroy(da,ierr)<br>
CHKERRA(ierr)<br>
<br>
CALL
PetscFinalize(ierr)<br>
<br>
END PROGRAM
test_dmda<br>
<br>
<br>
<br>
On 21/02/2019 17:49,
Matthew Knepley
wrote:<br>
<blockquote
type="cite">On
Thu, Feb 21, 2019
at 11:16 AM
Thibaut Appel via
petsc-users <<a
href="mailto:petsc-users@mcs.anl.gov" target="_blank"
moz-do-not-send="true">petsc-users@mcs.anl.gov</a>> wrote:<br>
Dear
PETSc developers/users,<br>
<br>
I’m solving linear
PDEs on a regular
grid with
high-order finite
differences, assembling an MPIAIJ matrix to solve linear systems or
eigenvalue
problems. I’ve
been using
vertex major,
natural ordering
for
the parallelism
with PetscSplitOwnership
(yielding
rectangular slices
of the physical
domain) and wanted
to move to DMDA
to have a more
square-ish domain
decomposition
and minimize
communication between
processes.<br>
<br>
However, my
application
is memory
critical, and I
have finely-tuned
matrix preallocation routines for allocating memory “optimally”. It
seems the memory
of a DMDA matrix
is allocated along
the value of
the stencil width
of DMDACreate and
the manual says
about it<br>
<br>
“These DMDA
stencils have
nothing directly
to do with any
finite
difference stencils
one might chose to
use for a
discretization”<br>
<br>
And
despite reading
the manual pages
there must be
something I do not
understand in the
DM topology, what
is that "stencil
width" for then? I
will not use ghost
values for my
FD-method, right?<br>
<br>
What this is
saying is, "You
might be using
some stencil that
is not STAR or
BOX, but we are
preallocating according
to one of those".<br>
If you really care
about how much
memory
is preallocated,
which it seems you
do, then you might
be able to use<br>
<br>
<a
href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDASetBlockFills.html"
target="_blank"
moz-do-not-send="true">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDASetBlockFills.html</a><br>
<br>
to tell use
exactly how to
preallocate.<br>
<br>
I was then
wondering if I
could just create
a MPIAIJ matrix,
and with a PETSc
routine get the
global indices of
the domain for
each process:
in other words, an
equivalent of
PetscSplitOwnership
that gives me the
DMDA
unknown ordering.
So I can feed
and loop on that
in my
preallocation and
assembly routines.<br>
<br>
You can make an
MPIAIJ matrix
yourself of
course. It should
have the same
division of rows
as the DMDA
division of dofs.
Also,
MatSetValuesStencil()
will not work for
a custom matrix.<br>
<br>
Thanks,<br>
<br>
Matt<br>
<br>
Thanks very much,<br>
<br>
Thibaut<br>
<br>
<br>
-- <br>
What most
experimenters take
for granted before
they begin their
experiments
is infinitely more
interesting than
any results
to which their
experiments lead.<br>
-- Norbert Wiener<br>
<br>
<a
href="https://www.cse.buffalo.edu/~knepley/"
target="_blank"
moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</blockquote>
<br>
<br>
-- <br>
What most
experimenters take
for granted before
they begin their
experiments is
infinitely more
interesting than any
results to which
their experiments
lead.<br>
-- Norbert Wiener<br>
<br>
<a
href="https://www.cse.buffalo.edu/~knepley/"
target="_blank"
moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</blockquote>
<br>
</span></div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr"
class="gmail-m_5832061864260648120gmail-m_3669154753077176379gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most
experimenters take
for granted before
they begin their
experiments is
infinitely more
interesting than
any results to
which their
experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a
href="http://www.cse.buffalo.edu/~knepley/"
target="_blank"
moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr"
class="gmail-m_5832061864260648120gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for
granted before they begin their
experiments is infinitely more
interesting than any results to
which their experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a
href="http://www.cse.buffalo.edu/~knepley/"
target="_blank"
moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for granted before
they begin their experiments is infinitely more
interesting than any results to which their
experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a href="http://www.cse.buffalo.edu/~knepley/"
target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</body>
</html>