<!-- 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;">
 Dear PETSc experts, I’m trying to set up a simple constrained optimization problem with petsc4py. TAO and I’m hitting a [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range Below is a minimal
</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="pfptBanner3dljtst" 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="pfptBanner3dljtst" style="all: unset !important; float:left !important; display:block !important; margin: 0px 0px 1px 0px !important; max-width: 600px !important;">
      <div id="pfptBanner3dljtst" 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="pfptBanner3dljtst" 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 xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
  #pfptBanner3dljtst { all: revert !important; display: block !important; 
    visibility: visible !important; opacity: 1 !important; 
    background-color: #D0D8DC !important; 
    max-width: none !important; max-height: none !important }
  .pfptPrimaryButton3dljtst:hover, .pfptPrimaryButton3dljtst:focus {
    background-color: #b4c1c7 !important; }
  .pfptPrimaryButton3dljtst:active {
    background-color: #90a4ae !important; }
</style>

<!-- BaNnErBlUrFlE-HeAdEr-end -->

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Dear PETSc experts,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I’m trying to set up a simple constrained optimization problem with petsc4py.TAO and I’m hitting a<br>
<br>
[0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt"><br>
Below is a minimal failing example (which also highlights how little I know about PETSc :) ). I hit this error because I was trying to understand how to assign values to the Jacobian of the equality constraint in the function myEqualityJacobian. Any advice
 on how to avoid the segmentation violation (and more generally, any advice about how to code this up better) are warmly welcomed.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">import petsc4py.PETSc as PETSc<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"># initial guess<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">x = PETSc.Vec().createSeq(2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">x.set(0)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">x.assemble()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">print("initial guess: ", x.array_r)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"># create TAO solver and set solution<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver = PETSc.TAO().create()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setType("almm")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setFromOptions()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"># add objective and gradient routines<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setSolution(x)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">def myObjGrad(tao, x, g): <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    J = x[0]**2 + x[1]**2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    dJ = 2*x <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    dJ.copy(g)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    return J<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setObjectiveGradient(myObjGrad, None)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"># add equality constraint and its derivative<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">def myEqualityConstraint(tao, x, ce):<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    ce.set((x[0]-2)**2 + x[1]**2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">ce = PETSc.Vec().createSeq(1)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">ce.assemble()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setEqualityConstraints(myEqualityConstraint, ce)
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">def myEqualityJacobian(tao, x, JE, JEpre):<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    v = PETSc.Vec().createSeq(2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    v.setValue(0, 4)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    v.assemble()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    vals = 2*x - v <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    # How should I enter vals into JE?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    col = JE.getColumnVector(0)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    vals.copy(col)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    #col = JE.getDenseColumnVec(0)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    #JE.restoreDenseColumnVec(0)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.setJacobianEquality(myEqualityJacobian)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"># solve the problem<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.solve()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">print("found optimum at: ", solver.getSolution().array_r)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">solver.destroy()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Many thanks in advance for your help.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><br>
Best,<br>
Alberto<o:p></o:p></span></p>
</div>
</div>
</div>
</body>
</html>