<div dir="ltr"><div><div><div><div>Hi Satish,<br><br></div>Thanks for your answer. In the attached program, I have declared the following standard fortran arrays: real(dp),dimension(:,:),allocatable :: D1X,D2X,D1Y,D2Y<br></div>Let's say these are real matrix derivatives that I need to insert in my complex A matrix (it could also be some real baseflow from a similarity solver). I have filled D1Y with 999.d0 just to test (see line 169). Then I insert D1Y in the global (complex) matrix with call MatSetValues(A,ny,idxm2,ny,idxn2,D1Y,INSERT_VALUES,ierr). I expected that in the Matrix A, this would be automatically converted to 999.0 + 0.0i but when I view A, I see 999 + 999 i or even 999 + 1.0326e-321 i. Is there a way to insert D1Y as is and obtain the proper behavior? How would you do it?<br><br></div>Thanks<br><br></div>Anthony<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 19, 2015 at 11:08 AM, Satish Balay <span dir="ltr"><<a href="mailto:balay@mcs.anl.gov" target="_blank">balay@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, 19 Jun 2015, Anthony Haas wrote:<br>
<br>
> Hi,<br>
><br>
> I have a Fortran90 program that solves a complex linear generalized eigenvalue<br>
> problem (GEVP) using standard fortran 90 programming:<br>
><br>
> Subroutines, modules, allocatable arrays, real(8), int,...<br>
><br>
> This program uses Lapack to solve the GEVP. The program is mainly made off:<br>
><br>
> 1) set dimensions of problem and initialize arrays,...<br>
> 2) compute the baseflow (for instance boundary layer flow)<br>
> 3) build the (stability) complex generalized eigenvalue problem ==> build<br>
> (dense) matrices A and B<br>
> 4) solve the GEVP with Lapack<br>
><br>
> Now I want to use PETSc + SLEPc to use sparse matrices. Do I need to<br>
> rewrite/modify everything in terms of PETSc variables as follows:<br>
><br>
> - int -> PetscInt<br>
> - real(8) -> PetscScalar<br>
</span>perhaps you mean: PetscReal<br>
<span class=""><br>
> - complex*16 -> PetscScalar<br>
><br>
> or is it possible to reuse all that F90 code? For instance I have a similarity<br>
> solver that computes Blasius solution. If that similarity solver provides me<br>
> with u and v velocities in terms of standard fortran90 real(8) variables, how<br>
> should I do to use these variables to build my complex matrix? Should I<br>
> convert them to Petsc variables? How?<br>
><br>
<br>
</span>You can use the current datatypes used in your code - And always make<br>
sure the types match manually. [Fortran does not have typecheck anyway..]<br>
<span class=""><br>
> what should I do with my Fortran90 allocatable arrays?<br>
><br>
> real(dp),allocatable,dimension(:,:) :: u--><br>
> PetscScalar,allocatable,dimension(:,:) :: u ????<br>
<br>
</span>Either should work.<br>
<br>
You can add the following to your code:<br>
<br>
#if !defined(PETSC_USE_COMPLEX)<br>
#error "this code requires PETSc --with-scalar-type=complex build"<br>
#endif<br>
#if !defined(PETSC_USE_REAL_DOUBLE)<br>
#error "this code requires PETSc --with-precision=real build"<br>
#endif<br>
<span class="HOEnZb"><font color="#888888"><br>
Satish<br>
</font></span></blockquote></div><br></div>