Sorry it is missing in the fortran includes. You can use a short unsigned integer (16 bit) to represent it. I don’t know how that it is indicated in Fortran but a Fortran programmer would know.
Request-assigned: Satish, please add ISColoringValue to Fortran include; note that its value is configure assigned on the C side. Barry On May 16, 2014, at 2:59 AM, Jonas Mairhofer <[email protected]> wrote: > > > I tried to use ISColoringValue, but when I include > > IScoloringValue colors > > > into my code, I get an error message from the compiler(gfortran): > > > ISColoringValue colors > 1 > error: unclassifiable statement at (1) > > I'm including these header files, am I missing one? > > > #include <finclude/petscsys.h> > #include <finclude/petscvec.h> > #include <finclude/petscdmda.h> > #include <finclude/petscis.h> > #include <finclude/petscmat.h> > #include <finclude/petscksp.h> > #include <finclude/petscpc.h> > #include <finclude/petscsnes.h> > #include <finclude/petscvec.h90> > #include <finclude/petscdmda.h90> > > > > Thank you for your fast responses! > > > > Am 15.05.2014 19:16, schrieb Peter Brune: >> You should be using an array of type ISColoringValue. ISColoringValue is by >> default a short, not an int, so you're getting nonsense entries. We should >> either maintain or remove ex5s if it does something like this. >> >> - Peter >> >> >> On Thu, May 15, 2014 at 11:56 AM, Jonas Mairhofer >> <[email protected]> wrote: >> >> If 'colors' can be a dynamically allocated array then I dont know where >> the mistake is in this code: >> >> >> >> >> >> ISColoring iscoloring >> Integer, allocatable :: colors(:) >> PetscInt maxc >> >> ... >> >> >> !calculate max. number of colors >> maxc = 2*irc+1 !irc is the number of ghost nodes needed to >> calculate the function I want to solve >> >> allocate(colors(user%xm)) !where user%xm is the number of locally >> owned nodes of a global array >> >> !Set colors >> DO i=1,user%xm >> colors(i) = mod(i,maxc) >> END DO >> >> call >> ISColoringCreate(PETSC_COMM_WORLD,maxc,user%xm,colors,iscoloring,ierr) >> >> ... >> >> deallocate(colors) >> call ISColoringDestroy(iscoloring,ierr) >> >> >> >> >> On execution I get the following error message (running the DO Loop from >> 0 to user%xm-1 does not change anything): >> >> >> [0]PETSC ERROR: --------------------- Error Message >> ------------------------------------ >> [0]PETSC ERROR: Arguments are incompatible! >> [0]PETSC ERROR: Number of colors passed in 291 is less then the actual >> number of colors in array 61665! >> [0]PETSC ERROR: >> ------------------------------------------------------------------------ >> [0]PETSC ERROR: Petsc Release Version 3.4.4, Mar, 13, 2014 >> [0]PETSC ERROR: See docs/changes/index.html for recent updates. >> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting. >> [0]PETSC ERROR: See docs/index.html for manual pages. >> [0]PETSC ERROR: >> ------------------------------------------------------------------------ >> [0]PETSC ERROR: ./DFT on a arch-linux2-c-debug named >> aries.itt.uni-stuttgart.de by mhofer Thu May 15 18:01:41 2014 >> [0]PETSC ERROR: Libraries linked from >> /usr/ITT/mhofer/Documents/Diss/NumericalMethods/Libraries/Petsc/petsc-3.4.4/arch-linux2-c-debug/lib >> [0]PETSC ERROR: Configure run at Wed Mar 19 11:00:35 2014 >> [0]PETSC ERROR: Configure options --with-cc=gcc --with-fc=gfortran >> --download-f-blas-lapack --download-mpich >> [0]PETSC ERROR: >> ------------------------------------------------------------------------ >> [0]PETSC ERROR: ISColoringCreate() line 276 in >> /usr/ITT/mhofer/Documents/Diss/NumericalMethods/Libraries/Petsc/petsc-3.4.4/src/vec/is/is/utils/iscoloring.c >> >> >> >> >> >> But when I print out colors, it only has entries from 0 to 218, so no >> entry is larger then 291 as stated in the error message. >> >> >> >> >> >> >> >> >> >> >> Am 15.05.2014 16:45, schrieb Jed Brown: >> >> Jonas Mairhofer <[email protected]> writes: >> >> Hi, I'm trying to set the coloring of a matrix using ISColoringCreate. >> Therefore I need an array 'colors' which in C can be creates as (from >> example ex5s.c) >> >> int *colors >> PetscMalloc(...,&colors) >> There is no PetscMalloc in Fortran, due to language "deficiencies". >> >> colors(i) = .... >> >> ISColoringCreate(...) >> >> How do I have to define the array colors in Fortran? >> >> I tried: >> >> Integer, allocatable :: colors(:) and allocate() instead of >> PetscMalloc >> >> and >> >> Integer, pointer :: colors >> >> but neither worked. >> The ISColoringCreate Fortran binding copies from the array you pass into >> one allocated using PetscMalloc. You should pass a normal Fortran array >> (statically or dynamically allocated). >> >> >
