<!DOCTYPE html>
<!-- BaNnErBlUrFlE-BoDy-start -->
<!-- Preheader Text : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">
On Fri, 01 Mar 2024 10: 09: 17 -0600, Junchao Zhang wrote: >No. MatMPIBAIJSetPreallocationCSR() copies the data, but >VecCreateMPIWithArray() does not copy (only use pointers user provided). OK, my understanding was that MatMPIBAIJSetPreallocationCSR
</div>
<!-- Preheader Text : END -->
<!-- Email Banner : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerStart</div>
<!--[if ((ie)|(mso))]>
<table border="0" cellspacing="0" cellpadding="0" width="100%" style="padding: 16px 0px 16px 0px; direction: ltr" ><tr><td>
<table border="0" cellspacing="0" cellpadding="0" style="padding: 0px 10px 5px 6px; width: 100%; border-radius:4px; border-top:4px solid #90a4ae;background-color:#D0D8DC;"><tr><td valign="top">
<table align="left" border="0" cellspacing="0" cellpadding="0" style="padding: 4px 8px 4px 8px">
<tr><td style="color:#000000; font-family: 'Arial', sans-serif; font-weight:bold; font-size:14px; direction: ltr">
This Message Is From an External Sender
</td></tr>
<tr><td style="color:#000000; font-weight:normal; font-family: 'Arial', sans-serif; font-size:12px; direction: ltr">
This message came from outside your organization.
</td></tr>
</table>
</td></tr></table>
</td></tr></table>
<![endif]-->
<![if !((ie)|(mso))]>
<div dir="ltr" id="pfptBannerbao2awv" style="all: revert !important; display:block !important; text-align: left !important; margin:16px 0px 16px 0px !important; padding:8px 16px 8px 16px !important; border-radius: 4px !important; min-width: 200px !important; background-color: #D0D8DC !important; background-color: #D0D8DC; border-top: 4px solid #90a4ae !important; border-top: 4px solid #90a4ae;">
<div id="pfptBannerbao2awv" style="all: unset !important; float:left !important; display:block !important; margin: 0px 0px 1px 0px !important; max-width: 600px !important;">
<div id="pfptBannerbao2awv" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-weight:bold !important; font-weight:bold; font-size:14px !important; line-height:18px !important; line-height:18px">
This Message Is From an External Sender
</div>
<div id="pfptBannerbao2awv" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-weight:normal; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size:12px !important; line-height:18px !important; line-height:18px; margin-top:2px !important;">
This message came from outside your organization.
</div>
</div>
<div style="clear: both !important; display: block !important; visibility: hidden !important; line-height: 0 !important; font-size: 0.01px !important; height: 0px"> </div>
</div>
<![endif]>
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerEnd</div>
<!-- Email Banner : END -->
<!-- BaNnErBlUrFlE-BoDy-end -->
<html>
<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
#pfptBannerbao2awv { all: revert !important; display: block !important;
visibility: visible !important; opacity: 1 !important;
background-color: #D0D8DC !important;
max-width: none !important; max-height: none !important }
.pfptPrimaryButtonbao2awv:hover, .pfptPrimaryButtonbao2awv:focus {
background-color: #b4c1c7 !important; }
.pfptPrimaryButtonbao2awv:active {
background-color: #90a4ae !important; }
</style>
<!-- BaNnErBlUrFlE-HeAdEr-end -->
<meta charset="us-ascii"></head><body><pre style="font-family: sans-serif; font-size: 100%; white-space: pre-wrap; word-wrap: break-word">On Fri, 01 Mar 2024 10:09:17 -0600, Junchao Zhang wrote:
>No. MatMPIBAIJSetPreallocationCSR() copies the data, but
>VecCreateMPIWithArray() does not copy (only use pointers user provided).
OK, my understanding was that MatMPIBAIJSetPreallocationCSR DOES NOT copy since
it has direct access to matrix entries in the required PETSc layout -> thank you
>I think your intention is to avoid memory copies.
Yes. (not only copies but also avoid unnecessary increase of memory footprint)
>If it is MATMPIAIJ, we can do
> MatMPIAIJSetPreallocationCSR(A, i, j, v); // let petsc copy i, j v
>
> // To quickly update A when you have an updated v[]
>
> MatUpdateMPIAIJWithArray(A, v); // copy v[], but faster than MatSetValues()
Thanks for this input!
>But it seems we currently do not have a MatUpdateMPIBAIJWithArray() :(
So when my v[] changed during iterations (only the v[] used during the
MatMPIBAIJSetPreallocationCSR call, the matrix structure/connectivity has NOT
changed), it is not sufficient to just call KSPSetOperators() before calling
KSPSolve()? I must copy the updated values in v[] explicitly into the PETSc
matrix, then call KSPSetOperators() followed by KSPSolve()? (for every
iteration in my application)
The preferred method then is to use MatSetValues() for the copies (or possibly
MatSetValuesRow() or MatSetValuesBlocked())?
The term "Preallocation" is confusing to me. For example,
MatCreateMPIBAIJWithArrays clearly states in the doc that arrays are copied
(<a href="https://urldefense.us/v3/__https://petsc.org/release/manualpages/Mat/MatCreateMPIBAIJWithArrays/__;!!G_uCfscf7eWS!a-UBfuP3o9tlDwzsoQk96J7OEVPKPRJONV_Ewy4C4o-hTcNCvl1nz1zV1BOPmUPBV8Ut1KzogHxpgV7VG46E46g$">https://urldefense.us/v3/__https://petsc.org/release/manualpages/Mat/MatCreateMPIBAIJWithArrays/__;!!G_uCfscf7eWS!a-UBfuP3o9tlDwzsoQk96J7OEVPKPRJONV_Ewy4C4o-hTcNCvl1nz1zV1BOPmUPBV8Ut1KzogHxpgV7VG46E46g$</a>), I would
then assume PETSc maintains internal storage for it. If something is
preallocated, I would not make that assumption.
Thank you for your time, I appreciate the inputs!
All best,
--
fabs
</pre></body></html>