<div>Praveen,</div>
<div> </div>
<div>there are two ways to do this, the first one is to use all-at-once concept in which you consider your PDEs as equality constraint, e.g. see works by Ghattas & Biros (JCP) or works by Elmad Haber (IP), the other way is what you describe, i.e. solving PDEs externally</div>
<div> </div>
<div> </div>
<div>The former way is memory expensive and is not suitable for large problem, in particular IPOPT uses sparse direct solvers and memory leaves as a great problem.</div>
<div> </div>
<div> </div>
<div>for the second way, IPOPT has a flag that show if design vector was changed (needs new solution), just see documentation. However, it's more safe to do it in your code, you can always save a copy of design + solution and so computation if design is changed.</div>
<div> </div>
<div>My advice: IPOPT is very rubost, i extensively used it besides other boxes like: MMA, SCPIP, ALGENCAN, ... I think that IPOPT is not suitable for large scaler (n>10^5) problems in which we need approximate solution like *CFD* computation due to expense of CPU & memory.</div>
<div> </div>
<div>you can easily test that the line search used in IPOPT is very expensive for CFD application, because it does lot of function evaluation, and usually does not go a sensible proceed, maybe because objective function value provided by CFD computation is not exact and include several types of approximation.</div>
<div> </div>
<div> </div>
<div>cheers</div>
<div> </div>
<div>RT<br><br></div>
<div class="gmail_quote">On Fri, Jan 23, 2009 at 7:59 AM, Praveen C <span dir="ltr"><<a href="mailto:cpraveen@gmail.com">cpraveen@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hello<br>I want to use ipopt to optimize using a large Computational Fluid Dynamics code. The situation can be described as follows<br>
<br><br>x = design variable<br><br>Flow solution:<br>Q = CFD(x)<br><br>Objective and constraint:<br>F = F(x,Q)<br>G = G(x,Q)<br clear="all"><br>To obtain gradients of objective and constraint, I have to run two adjoint solvers (assuming only one obj and one constraint)<br>
<br>F_x = CFD_F(x,Q)<br>G_x = CFD_G(x,Q)<br><br>All the solvers CFD, CFD_F and CFD_G are expensive.<br><br>My question is:<br><br>How would I manage these things so that I do not do any duplicate computations ?<br><br>Q is too large and cannot be stored in memory.<br>
<br>Thanks<br>praveen<br><font color="#888888">-- <br><a href="http://pc.freeshell.org/" target="_blank">http://pc.freeshell.org</a><br></font><br>_______________________________________________<br>Ipopt mailing list<br><a href="mailto:Ipopt@list.coin-or.org">Ipopt@list.coin-or.org</a><br>
<a href="http://list.coin-or.org/mailman/listinfo/ipopt" target="_blank">http://list.coin-or.org/mailman/listinfo/ipopt</a><br><br></blockquote></div><br>