<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Feb 24, 2016 at 9:58 AM, Florian Lindner <span dir="ltr"><<a href="mailto:mailinglists@xgm.de" target="_blank">mailinglists@xgm.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I create a couple of index sets:<br>
<br>
  ISLocalToGlobalMapping _ISmapping;<br>
  IS ISlocal, ISlocalInv, ISglobal, ISidentity, ISidentityGlobal;<br>
  ISLocalToGlobalMapping ISidentityMapping;<br>
<br>
  // Create an index set which maps myIndizes to continous chunks of matrix rows.<br>
  ierr = ISCreateGeneral(PETSC_COMM_WORLD, myIndizes.size(), myIndizes.data(), PETSC_COPY_VALUES, &ISlocal); CHKERRV(ierr);<br>
  ierr = ISSetPermutation(ISlocal); CHKERRV(ierr);<br>
  ierr = ISInvertPermutation(ISlocal, myIndizes.size(), &ISlocalInv); CHKERRV(ierr);<br>
  ierr = ISAllGather(ISlocalInv, &ISglobal); CHKERRV(ierr); // Gather the IS from all processors<br>
  ierr = ISLocalToGlobalMappingCreateIS(ISglobal, &_ISmapping); CHKERRV(ierr); // Make it a mapping<br>
<br>
  // Create an identity mapping and use that for the rows of matrixA.<br>
  ierr = ISCreateStride(PETSC_COMM_WORLD, _matrixA.ownerRange().second - _matrixA.ownerRange().first, _matrixA.ownerRange().first, 1, &ISidentity); CHKERRV(ierr);<br>
  ierr = ISSetIdentity(ISidentity); CHKERRV(ierr);<br>
  ierr = ISAllGather(ISidentity, &ISidentityGlobal); CHKERRV(ierr);<br>
  ierr = ISLocalToGlobalMappingCreateIS(ISidentityGlobal, &ISidentityMapping); CHKERRV(ierr);<br>
<br>
  ierr = MatSetLocalToGlobalMapping(_matrixC.matrix, _ISmapping, _ISmapping); CHKERRV(ierr); // Set mapping for rows and cols<br>
  ierr = MatSetLocalToGlobalMapping(_matrixA.matrix, ISidentityMapping, _ISmapping); CHKERRV(ierr); // Set mapping only for cols, use identity for rows<br>
<br>
<br>
Two questions:<br>
<br>
1) Since I only need the _ISmapping again, is there any way to optimize that, i.e. use less temporary variables?<br></blockquote><div><br></div><div>It is not clear to me what is being done.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2) Do all IS variables (_ISmapping, ISlocal, ISlocalInv, ISglobal, ISidentity, ISidentityGlobal, ISidentityMapping) need to be destroyed using ISDestroy at the end? Or only the ones that were created using a ISCreate* function (ISlocal, ISidentity)?<br></blockquote><div><br></div><div>All of them since you create new ISes with all those functions like ISInvertPermutation.</div><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks,<br>
<br>
Florian<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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></div>