On Thu, Nov 14, 2024 at 9:39 AM Peder Jørgensgaard Olesen via petsc-users < petsc-users@mcs.anl.gov> wrote:
> Given a vector containing roots of unity, v[i] = exp(i*k*x[i]) I wanted to > compute the vector u[i]=exp(i*n*k*x[i]), for some real number n. From the > face of it this should be easily achieved with VecPow, as u[i] = v[i]^n. > > That didn't work as expected, though I got around it using VecGetArray() > and a loop with PetscPowComplex(). The source designated in the docs > (src/vec/vec/utils/projection.c) reveals that VecPow() maps v[i] to > PETSC_INFINITY when the PetscRealPart(v[i]) < 0, unless the power is any of > 0, ±0.5, ±1 or ±2. Even in the simple case of a purely real vector (with > negative entries) raised to any other integer power, the results would not > be what one might reasonably expect from the description of VecPow(). > > While I do have a solution suiting my need, I'm left wondering what might > be the rationale for VecPow working the way it does. > This is indeed wrong. It was coded only for real numbers. We will fix it. Thanks for reporting this, Matt > Best, > Peder > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!bNQOcaOJC5gkTat8nR3TNhd8LdtJY9sMS6rBMYVNwUdmQE2UkCPoXt7GmCWMleJs9EAJr_rfIaO2WqqNrQe-$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!bNQOcaOJC5gkTat8nR3TNhd8LdtJY9sMS6rBMYVNwUdmQE2UkCPoXt7GmCWMleJs9EAJr_rfIaO2WqfN0fHA$ >