<div dir="ltr"><div><div><div><div><div><div>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.<br>
</div>The reason is that depending on how you configured PETSc, these types can be mapped to different different types. <br><br>For example, PetscScalar could be mapped to <br></div>PetscScalar ==> PetscReal == double (default)<br>
PetscScalar ==> PetscReal ==> float (--with-precision=single)<br></div>PetscScalar ==> double precision complex number (--with-sclar-type=complex)<br></div>whilst<br></div>PetscInt ==> 32 bit int (default)<br>
</div>PetscInt ==> 64 bit int (--with-64bit-indices)<br><div><div><br><br></div><div>Cheers,<br></div><div>  Dave<br></div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 23 November 2013 07:40, Justin Dong <span dir="ltr"><<a href="mailto:jsd1@rice.edu" target="_blank">jsd1@rice.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">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.<div>



<br></div><div><br></div><div>#define A(i,j) A[ j + 5*i ]</div><div>#define b(i,j) b[ j + 5*i ]</div><div><br></div><div>void myFunction(double* A, int* b)</div><div>{</div><div><br></div><div>    int i, j;</div><div><br>



</div><div>    for (i=0; i<5, ++i)</div><div>    {</div><div>        for (j=0; j<5; ++j)</div><div>        {</div><div>            A(i,j) = sin(i+j);</div><div>            b(i,j)  = i+j;</div><div>        }</div><div>



    }</div><div><br></div><div>}</div><div><br></div><div>int main(int argc, char **argv)</div><div>{</div><div><br></div><div>    PetscErrorCode ierr;</div><div><br></div><div>    ierr = PetscInitialize(&argc,&argv,(char*)0,help); CHKERRQ(ierr);</div>

<div>    PetscScalar* A;</div><div>    PetscInt* b;</div><div><br></div><div>

    int n = 5;</div><div><br></div><div>    PetscMalloc(sizeof(PetscScalar)*n*n, &A);</div><div>    PetscMalloc(sizeof(PetscInt)*n*n, &b);</div><div><br></div><div>    myFunction(A, b);</div><div><br></div><div>    PetscFree(A);</div>



<div>    PetscFree(b);</div><div><br></div><div>    ierr = PetscFinalize();</div><div><br></div><div>    return 0;</div><div>}</div><div><br></div><div>Thanks, </div><span class="HOEnZb"><font color="#888888"><div>Justin</div>
</font></span></div>
</blockquote></div><br></div>