<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 17 Apr 2019 at 18:42, Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
    Moving to PETSc dev for more input<br>
<br>
    Lisandro,<br>
<br>
       I understand the rational for not wanting it on by default for random user code but the fact is that is is NEEDED to compile the PETSc source (and examples) and so seems wrong that those configurations can only be built if the user provides this obscure flag PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND they won't know about.<br>
<br></blockquote><div><br></div><div>I agree. My work to fix the issue is incomplete indeed, but the leftover is rather small. This would probably involve modifying things in BuildSystem, and I have a tendency to not mess with things I do not understand well.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
      We could have it on by default and have a flag PETSC_SKIP_CXX_COMPLEX_FLOAT_WORKAROUND that users put in before they include any PETSc includes but I suspect you won't like this? <br></blockquote><div> </div><div>It does not really matter to me, as long I'm not the one to be blamed by taking that decision :-) . This change will not affect any of my own codes, so I do not have any personal agenda here.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
      Somehow have the gnu make system pass in the flag PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND when compiling PETSc source and examples but not other code? How to organize that?<br></blockquote><div><br></div><div>This is something we should definitely do. PETSc source code is our codebase, we are always in control of fixing things around.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
       Define PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND at the top of every PETSc source file that needs it (and examples that need it)? Ugly, but doable? <br>
<br></blockquote><div><br></div><div>No, please!</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
       "Fix" the PETSc source code so the issues it handles don't come up? Or reduce them and stick the PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND just in the troublesome files?<br></blockquote><div><br></div><div>No way, I already looked into that. </div><div><br></div><div>* Too much work to fix a broken the standard std::complex<float> template. </div><div>* Too many ugly (PetscReal) casts here and there in the codebase</div><div>* And it is not only the problem of fixing the current code, this issue will continue to popup.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
      Any other way to have it on when needed but off otherwise?<br>
<br></blockquote><div><br></div><div> My final recommendation would be:</div><div><br></div><div>1) Put the relevant workaround code in a separate header users can #include in their own code, let say #include <petsccomplexfloat.h>, we can even put it under the private/ include folder.</div><div>2)  Keep the PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND in "petscmat.h", and make it #include <petsccomplexfloat.h>.</div><div>3) Modify our top level gmakefile to pass -DPETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND, but only if we are building with lang=C++, scalar=complex, precision=single. For example, we can make configure write a `PETSC_BUILD_CPPFLAGS=-DPETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND`, but we use it ONLY in the toplevel gmakefile, NOT in `$(PETSC_DIR)/lib/petsc/conf/variables`. Also gmakefile.tests?<br></div><div><br></div><div><div>This way users can use the workaround in two ways, either by #include <petsccomplexfloat.h> or by defining PETSC_USE_CXX_COMPLEX_FLOAT_WORKAROUND themselves (either on source before including petsc.h or via makefiles variables). And we fix the issue when building PETSc in a rather transparent and non-obtrusive way.<br></div><div><br></div><div>Now, Barry, seat in the Iron Throne and rule! And if someone complain, use dragon fire... like in the good old days.</div><div><br></div><div>Regards,</div><br class="gmail-Apple-interchange-newline"></div></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Lisandro Dalcin<br>============<br>Research Scientist<br>Extreme Computing Research Center (ECRC)<br>King Abdullah University of Science and Technology (KAUST)<br><a href="http://ecrc.kaust.edu.sa/" target="_blank">http://ecrc.kaust.edu.sa/</a><br></div></div></div></div></div></div>