<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 7, 2013 at 11:31 AM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":4w1">  I disagree (there will be NO mention of PETSC_MISSING_LAPACK_FOO anywhere in PETSc source code) In this case we "fixing" broken LAPACK packages. We should not dirty the PETSc source tree AT all because of broken LAPACK. The PETSc source tree should be clean because it assumes a complete lapack.<br>

<br>
  Jed writes<br>
<div class="im">>  petscblaslapack.h needs to know not to redefine those function names. I'd much rather have<br>
<br>
</div>   this is wrong. petscblaslapack.h WILL NOT CHANGE at all. Matt will generate exactly the missing lapack routines with their appropriate names. So for a double precision build with _ on BLAS/LAPACK routines Matt will generate<br>

<br>
    void dgeev_(whatever the args are)<br>
         set info to appropriate error code.<br></div></blockquote><div><br></div><div style>Okay, this is a *.c file, so different from the current system. Will this file be put in $PETSC_ARCH/ or in the normal source tree?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":4w1">
  (Note that BuildSystem already knows all about the mangling so generating this with and without underscore, CAPS etc is easy) Matt will NOT generate LAPACKgeev() or something like that.<br>
<br>
  In fact Matt can also generate the appropriate zdot_() when needed so ugly crap like<br>
/* handle complex dot() with special code */<br></div></blockquote><div><br></div><div style>How are you going to avoid a namespace collision here? The problem isn't that the function doesn't exist, it's that we can't determine its binary interface.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":4w1">
#if defined(PETSC_USE_COMPLEX)<br>
PETSC_STATIC_INLINE PetscScalar BLASdot_(const PetscBLASInt *n,const PetscScalar *x,const PetscBLASInt *sx,const PetscScalar *y,const PetscBLASInt *sy)<br>
{<br>
  PetscScalar sum=0.0;<br>
  PetscInt    i,j,k;<br>
  if (*sx==1 && *sy==1) {<br>
    for (i=0; i < *n; i++) sum += PetscConj(x[i])*y[i];<br>
  } else {<br>
    for (i=0,j=0,k=0; i < *n; i++,j+=*sx,k+=*sy) sum += PetscConj(x[j])*y[k];<br>
  }<br>
  return sum;<br>
}<br>
PETSC_STATIC_INLINE PetscScalar BLASdotu_(const PetscBLASInt *n,const PetscScalar *x,const PetscBLASInt *sx,const PetscScalar *y,const PetscBLASInt *sy)<br>
{<br>
  PetscScalar sum=0.0;<br>
  PetscInt    i,j,k;<br>
  if (*sx==1 && *sy==1) {<br>
    for (i=0; i < *n; i++) sum += x[i]*y[i];<br>
  } else {<br>
    for (i=0,j=0,k=0; i < *n; i++,j+=*sx,k+=*sy) sum += x[j]*y[k];<br>
  }<br>
  return sum;<br>
}<br>
#else<br>
PETSC_EXTERN_C PetscScalar BLASdot_(const PetscBLASInt*,const PetscScalar*,const PetscBLASInt*,const PetscScalar*,const PetscBLASInt*);<br>
PETSC_EXTERN_C PetscScalar BLASdotu_(const PetscBLASInt*,const PetscScalar*,const PetscBLASInt*,const PetscScalar*,const PetscBLASInt*);<br>
#endif<br>
<br>
can be removed from the petscblaslapack.h</div></blockquote></div><br><br></div></div>