[petsc-dev] plexexodusii.c incompatible with complex - not covered?
Vaclav Hapla
vaclav.hapla at erdw.ethz.ch
Thu Apr 12 11:26:16 CDT 2018
At master, configured with
--download-exodusii --download-hdf5 --download-netcdf --download-pnetcdf --with-scalar-type=complex
I get bunch of compiler warnings
warning: passing argument 2 of ‘VecGetArrayRead’ from incompatible pointer type
warning: passing argument 2 of ‘VecRestoreArrayRead’ from incompatible pointer type
in
src/dm/impls/plex/plexexodusii.c.
Is this configuration not covered by nightly tests?
I want to fix it anyway. Do you agree with the following scheme?
Vec v;
const PetscScalar *arr;
PetscReal *arr_real;
#if defined(PETSC_USE_COMPLEX)
PetscInt i;
#endif
...
ierr = VecGetArrayRead(v, &arr);CHKERRQ(ierr);
#if defined(PETSC_USE_COMPLEX)
ierr = PetscMalloc1(size, &arr_real);CHKERRQ(ierr);
for (i = 0; i < size; ++i) {
arr_real[i] = PetscRealPart(arr[i]);
#if defined(PETSC_USE_DEBUG)
if (PetscImaginaryPart(arr[i])) {
SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Vector contains complex numbers but only real vectors are currently supported.");
}
#endif
}
#else
arr_real = (PetscReal*)arr;
#endif
...
ierr = VecRestoreArrayRead(v, &arr);CHKERRQ(ierr);
#if defined(PETSC_USE_COMPLEX)
ierr = PetscFree(arr_real);CHKERRQ(ierr);
#endif
Thanks,
Vaclav
More information about the petsc-dev
mailing list