<div dir="ltr"><div>Hello,</div><div><br></div><div>I am trying to call a function in a C library from fortran. The fortran code should pass a Mat object to the C code. I defined the interface within the fortran code like this: </div><div><br></div><div><div><div>#include <petsc/finclude/petscmat.h></div><div><br></div></div><div>interface</div><div>    subroutine MY_FUNC(A_Mat) bind ( C, name = "MY_FUNC" )</div><div><span style="white-space:pre">        </span>use petscmat</div><div>      Mat, intent(in) :: A_Mat</div><div>    end subroutine MY_FUNC<br></div><div>  end interface</div></div><div><br></div><div>When I try to compile the code it produces this error:</div><div><br></div><div>Variable ‘a_mat’ at (1) is a dummy argument to the BIND(C) procedure ‘MY_FUNC’ but is not C interoperable because derived type ‘tmat’ is not C interoperable<br></div><div><br></div><div>My interpretation of the error is that there is some mismatch between the Mat data type defined in fortran and the Mat data type defined in C, so that I cannot pass one to the other. Is this true? Is there a compatible way to pass the Mat? Are the C and fortran implementations actually properly aligned and interchangeable so that all that is needed is something to tell the compiler to try anyway? I tried changing the data type of A_Mat to Integer Pointer (void *), but ran into a syntax error when attempting that. </div><div><br></div><div>regards,</div><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr">Anthony Ruth</div><div dir="ltr">NASA Space Technology Research Fellow<div><div><div>Condensed Matter Theory</div><div>University of Notre Dame</div></div></div></div></div></div></div></div>
</div>