<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family:"Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, "system-ui", Roboto, "Helvetica Neue", sans-serif;font-size:15px;background-color:rgb(255, 255, 255);display:inline !important">Yahe,</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family:"Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, "system-ui", Roboto, "Helvetica Neue", sans-serif;font-size:15px;background-color:rgb(255, 255, 255);display:inline !important">What problem do you want to solve,
 a linear/nonlinear optimisation problem with equality constrains? </span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family:"Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, "system-ui", Roboto, "Helvetica Neue", sans-serif;font-size:15px;background-color:rgb(255, 255, 255);display:inline !important">Hong</span></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> petsc-dev <petsc-dev-bounces@mcs.anl.gov> on behalf of Barry Smith <bsmith@petsc.dev><br>
<b>Sent:</b> Friday, April 8, 2022 10:04 AM<br>
<b>To:</b> 高亚贺 <gaoyahe@buaa.edu.cn><br>
<b>Cc:</b> petsc-dev@mcs.anl.gov <petsc-dev@mcs.anl.gov><br>
<b>Subject:</b> Re: [petsc-dev] About the problem of Lagrange multiplier</font>
<div> </div>
</div>
<div class="" style="word-wrap:break-word; line-break:after-white-space">
<div class=""><br class="">
</div>
    How can Q be non-square? U has n entries so presumably K is n by n. Q has the same number of rows as K and from your definition of Q containing a_1 .... a_n entries per row Q has n columns. So Q is also n by n. If this is the case then it appears you have
 the same number of Lagrange multipliers as u so you can simply create a DMDA with twice as many degrees of freedom on each vertex, on each vertex the first half of the degrees of freedom are u and the second half lambda. Note that this means the u and lambda
 (and hence the matrix entries also) are interlaced between u and lambda, but this is fine; it is only a convenience for human eyes that we like to write all the u before all the lambda; any representation in the computer is fine.
<div class=""><br class="">
</div>
<div class="">  Barry</div>
<div class=""><br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On Apr 8, 2022, at 1:34 AM, 高亚贺 <<a href="mailto:gaoyahe@buaa.edu.cn" class="">gaoyahe@buaa.edu.cn</a>> wrote:</div>
<br class="x_Apple-interchange-newline">
<div class="">
<p class="x_MsoNormal">Dear Mr./Ms., </p>
<p class="x_MsoNormal"><br class="">
</p>
<p class="x_MsoNormal">In fact, I want to solve a discretized equation like this </p>
<p class="x_MsoNormal" style="text-align:center"><span id="x_cid:7a16cc49$1$18007a94a81$Coremail$gaoyahe$buaa.edu.cn"><1649395840117.png></span>
</p>
<div class="" style="text-align:center"><span class=""></span><br class="x_webkit-block-placeholder">
</div>
<p class="x_MsoNormal">where <b class="">K, U=</b>[<i class="">u</i><sub class="">1</sub><b class="">
</b><i class="">u</i><sub class="">2 </sub><b class="">…</b><i class="">u<sub class="">n</sub></i>]<sup class="">T</sup><b class="">
</b>and <b class="">F </b>are fields sit on the vertices, and can easily be created by ‘DMCreateMatrix’ or ‘DMCreateGlobalVector’.
<b class="">λ</b> is the Lagrange multiplier vector. The augmented <b class="">Q </b>
(non-square) is the constraint coefficient matrix and has the form as </p>
<p class="x_MsoNormal" style="text-align:center"><span id="x_cid:6c20363c$2$18007a94a81$Coremail$gaoyahe$buaa.edu.cn"><1649395860765.png></span>
</p>
<br class="">
<p class="x_MsoNormal">The <b class="">Q</b> is employed here to satisfy the following constraints
</p>
<p class="x_MsoNormal" style="text-align:center"><span id="x_cid:5bc1a62c$3$18007a94a81$Coremail$gaoyahe$buaa.edu.cn"><1649395881836.png></span>
</p>
<p class="x_MsoNormal" align="center" style="text-align:center"><br class="">
</p>
<p class="x_MsoNormal">So how to build the entire system in-place in one big matrix<b class=""> (K</b><sub class="">λ</sub>)? Could you give me more specific suggestions on this problem?
</p>
<p class="x_MsoNormal"><br class="">
</p>
<p class="x_MsoNormal">Thank you very much! </p>
<p class="x_MsoNormal"><br class="">
</p>
<p class="x_MsoNormal">Best regards, </p>
<p class="x_MsoNormal">Yahe </p>
<br class="">
<br class="">
<br class="">
<blockquote name="x_replyContent" class="x_ReferenceQuote" style="padding-left:5px; margin-left:5px; border-left:#b6b6b6 2px solid; margin-right:0">
-----原始邮件-----<br class="">
<b class="">发件人:</b><span id="x_rc_from" class="">"Barry Smith" <<a href="mailto:bsmith@petsc.dev" class="">bsmith@petsc.dev</a>></span><br class="">
<b class="">发送时间:</b><span id="x_rc_senttime" class="">2022-04-07 23:10:20 (星期四)</span><br class="">
<b class="">收件人:</b> "Matthew Knepley" <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>><br class="">
<b class="">抄送:</b> "高亚贺" <<a href="mailto:gaoyahe@buaa.edu.cn" class="">gaoyahe@buaa.edu.cn</a>>, PETSc <<a href="mailto:petsc-users@mcs.anl.gov" class="">petsc-users@mcs.anl.gov</a>><br class="">
<b class="">主题:</b> Re: [petsc-users] question<br class="">
<br class="">
<div class=""><br class="">
</div>
  DMStag may also be useful for your needs (and far simpler to use than DMPLEX) depending on where your Lagrange multipliers live. Note that regardless you should not need to be copying entire large submatrices around into bigger matrices; you can build the
 entire system in-place in one big matrix. MatNest is also a possibility depending on exactly what you are doing. 
<div class=""><br class="">
</div>
<div class="">  If you explain what your Lagrange multipliers are (the constraints) we may be able to make more specific suggestions.<br class="">
<div class=""><br class="">
</div>
<div class="">Barry </div>
<div class=""><br class="">
<div class=""><br class="">
</div>
<div class=""><br class="">
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On Apr 7, 2022, at 8:26 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:
</div>
<br class="x_Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div dir="ltr" class="">On Thu, Apr 7, 2022 at 8:16 AM 高亚贺 via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" class="">petsc-users@mcs.anl.gov</a>> wrote:<br class="">
</div>
<div class="x_gmail_quote">
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid #CCCCCC; padding-left:1ex">
<div class=""><br class="x_webkit-block-placeholder">
</div>
<p class="x_MsoNormal">Dear Mr./Ms., </p>
<p class="x_MsoNormal"><br class="">
</p>
<p class="x_MsoNormal" style="text-indent:24pt">I have used ‘DMCreateMatrix’ to create a matrix
<b class="">K</b>, and also the ‘DMCreateGlobalVector’ to create two vectors <b class="">
U</b> (to be solved) and <b class="">F </b>(right-hand side), i.e. <b class="">KU</b>=<b class="">F</b>. Now, I want to add some complex constraints to this system through lagrangian multiplier method, and the constraint matrix is
<b class="">Q</b>. The <b class="">KU</b>=<b class="">F </b>transforms to </p>
<p class="x_MsoNormal" style="text-align:center; text-indent:24pt"><span id="x_cid:18003fc0abddc604b1a1" class=""><1649328463919.png></span>
</p>
<p class="x_MsoNormal" align="center" style="text-align:center"><b class=""></b></p>
<p class="x_MsoNormal">   How to create <b class="">K</b><b class=""><sub class="">λ</sub></b>, and how to effectively copy values<b class=""> K</b> and
<b class="">Q</b> to <b class="">K</b><b class=""><sub class="">λ</sub></b>? Does the newly created
<b class="">K</b><b class=""><sub class="">λ</sub></b> and <b class="">F</b><b class=""><sub class="">λ
</sub></b>still have an advantage of DMDA? Or do you have any other good suggestions for this kind of problem? 
</p>
</blockquote>
<div class=""><br class="">
</div>
<div class="">DMDA can only really handle collocated discretizations, meaning all fields sit on the vertices. If you can discretize your problem this way, then just give it two fields and assemble K_\lambda as normal. If not, then you might look at DMPlex which
 supports a wider range of discretizations. </div>
<div class=""><br class="">
</div>
<div class="">  Thanks, </div>
<div class=""><br class="">
</div>
<div class="">     Matt </div>
<div class="">  </div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid #CCCCCC; padding-left:1ex">
<p class="x_MsoNormal">Thank you very much! </p>
<p class="x_MsoNormal"><br class="">
</p>
<p class="x_MsoNormal">Best regards, </p>
<p class="x_MsoNormal">A PETSc user </p>
</blockquote>
</div>
<br clear="all" class="">
<div class=""><br class="">
</div>
-- <br class="">
<div dir="ltr" class="x_gmail_signature">
<div dir="ltr" class="">
<div class="">
<div dir="ltr" class="">
<div class="">
<div dir="ltr" class="">
<div class="">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">
-- Norbert Wiener </div>
<div class=""><br class="">
</div>
<div class=""><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank" class="">https://www.cse.buffalo.edu/~knepley/</a><br class="">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</blockquote>
<span id="x_cid:2E50888A-AB4C-4611-8630-74369756D71A"><About the problem of Lagrange multiplier.docx></span></div>
</blockquote>
</div>
<br class="">
</div>
</div>
</body>
</html>