[petsc-users] Compatibility between PETSc typedefs and regular typedefs?

Dave May dave.mayhem23 at gmail.com
Sat Nov 23 03:36:10 CST 2013


If you want your code to be portable, you shouldn't definitely not assume
that PetscScalar is the same as double, nor should you assume that PetscInt
is the same as int.
The reason is that depending on how you configured PETSc, these types can
be mapped to different different types.

For example, PetscScalar could be mapped to
PetscScalar ==> PetscReal == double (default)
PetscScalar ==> PetscReal ==> float (--with-precision=single)
PetscScalar ==> double precision complex number (--with-sclar-type=complex)
whilst
PetscInt ==> 32 bit int (default)
PetscInt ==> 64 bit int (--with-64bit-indices)


Cheers,
  Dave



On 23 November 2013 07:40, Justin Dong <jsd1 at rice.edu> wrote:

> I’m still trying to get the hang of PETSc but am adapting pretty well. I
> was cleaning up some code I wrote today and realized that my function
> prototype expects a pointer to a double but I accidentally gave it a
> pointer to a PetscScalar instead. I didn't get any errors during compiling
> or execution so I was just wondering if the two types are compatible. The
> same goes for PetscInt and ints. Here's a minimal example below. Is this
> considered a major error? I'm correcting it anyway but just wanted to
> satisfy my curiosity.
>
>
> #define A(i,j) A[ j + 5*i ]
> #define b(i,j) b[ j + 5*i ]
>
> void myFunction(double* A, int* b)
> {
>
>     int i, j;
>
>     for (i=0; i<5, ++i)
>     {
>         for (j=0; j<5; ++j)
>         {
>             A(i,j) = sin(i+j);
>             b(i,j)  = i+j;
>         }
>     }
>
> }
>
> int main(int argc, char **argv)
> {
>
>     PetscErrorCode ierr;
>
>     ierr = PetscInitialize(&argc,&argv,(char*)0,help); CHKERRQ(ierr);
>     PetscScalar* A;
>     PetscInt* b;
>
>     int n = 5;
>
>     PetscMalloc(sizeof(PetscScalar)*n*n, &A);
>     PetscMalloc(sizeof(PetscInt)*n*n, &b);
>
>     myFunction(A, b);
>
>     PetscFree(A);
>     PetscFree(b);
>
>     ierr = PetscFinalize();
>
>     return 0;
> }
>
> Thanks,
> Justin
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20131123/c98b23ba/attachment.html>


More information about the petsc-users mailing list