<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Hi Stefano,
<div class=""><br class="">
</div>
<div class="">I can’t really speak to why the entirety of TAO is disabled in complex builds. Todd can probably offer historical insight to the reason(s). </div>
<div class=""><br class="">
</div>
<div class="">However, we do have some methods in TAO that are not tested or guaranteed to be correct for complex-valued objective functions. The limited-memory quasi-Newton codes, for instance, currently only construct the approximate Hessian for the real
 part of the function and do not generate step directions in the complex part. I also don’t know whether any of the CG methods or line searches require any modifications to be correct in complex builds either.</div>
<div class=""><br class="">
</div>
<div class="">In your itemized list, I agree that at minimum we should be supporting #3 even if TAO itself does not work correctly for complex-valued functions.</div>
<div class=""><br class="">
</div>
<div class="">In the meantime, TAO can test real gradients or Hessians internally with `-tao_test_gradient` or `-tao_test_hessian`. Or you can also call `TaoTestHessian()` too. It’s a finite-difference test though, and not a complex-step test.</div>
<div class="">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
<br class="">
</div>
</div>
</div>
<div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
——<br class="">
<b class="">Alp Dener</b></div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
Argonne National Laboratory</div>
<div style="text-align: start; text-indent: 0px;"><a href="https://www.anl.gov/profile/alp-dener" class="">https://www.anl.gov/profile/alp-dener</a></div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
<br class="">
</div>
</div>
</div>
</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Dec 12, 2018, at 8:23 AM, Stefano Zampini via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" class="">petsc-dev@mcs.anl.gov</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div dir="ltr" class="">
<div dir="ltr" class="">If I compile PETSc with complex support, all of the TAO methods are not registered.
<div class="">Fare enough? not really, I can imagine at least three valid reasons to use those</div>
<div class=""><br class="">
</div>
<div class="">1) I want to check that my code works for complex builds, even if I have pure real function evaluations. I may need complex support in other parts or the code (not when using TAO), or I just want to be a diligent PETSc developer</div>
<div class="">2) I want to test REAL gradients or Hessians using built-in capability, instead of writing my own</div>
<div class="">3) I want to use the complex differentiation trick to compute REAL gradients</div>
<div class=""><br class="">
</div>
<div class="">Last time I checked, at least option 2) was available; However, from commit 5921d7004dad83427f45468906667b100d2e2b6e, no Tao methods are registered when PETSC_USE_COMPLEX is defined, and code like the one below fail at runtime:</div>
<div class=""><br class="">
</div>
<div class="">TaoCreate()</div>
<div class="">TaoSetFromOption()</div>
<div class="">TaoSetObjectiveRoutine()</div>
<div class="">TaoTestGradient()</div>
<div class="">
<div class="">
<div class="">
<div class=""><br class="">
</div>
<div class="">[0]PETSC ERROR: Unknown type. Check for miss-spelling or missing package:
<a href="http://www.mcs.anl.gov/petsc/documentation/installation.html#external" class="">
http://www.mcs.anl.gov/petsc/documentation/installation.html#external</a></div>
<div class="">[0]PETSC ERROR: Unable to find requested Tao type lmvm</div>
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
-- <br class="">
<div dir="ltr" class="gmail_signature">Stefano</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>