I’ve written a fortan code (F90)  for domain decomposition.* I've specified
**the paths of include files and libraries, but the compiler/linker still *




*complained about undefined references.undefined reference to
`vectorset_'undefined reference to `dmdagetlocalinfo_'*I’m attaching
makefile and code. any help will be appreciated.

Attachment: makefile
Description: Binary data

       program main
       implicit none
#include <petsc/finclude/petscsys.h>
#include <petsc/finclude/petscvec.h>
#include <petsc/finclude/petscmat.h>
#include <petsc/finclude/petscpc.h>
#include <petsc/finclude/petscksp.h>
#include <petsc/finclude/petscdmda.h>
#include <petsc/finclude/petscdm.h>
#include <petsc/finclude/petscdmda.h90>
!#include <petsc/finclude/petscvec.h90>
#include <petsc/finclude/petscmat.h90>
	 
       PetscErrorCode ierr
       PetscScalar v
       Vec x, b
       Mat A
       DM da
       KSP ksp
       DMDALocalInfo info 
       MPI_Comm comm
       
       !integer :: stw,dof 
       PetscInt  i,j,II,JJ,m,n,its
       PetscInt  Istart,Iend,ione
       !PetscReal aione
       PetscBool   flg

	
       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
       comm = PETSC_COMM_WORLD
       m = 3
       n = 3
       ione = 1
       call PetscOptionsGetInt(PETSC_NULL_CHARACTER,'-m',m,flg,ierr)
       call PetscOptionsGetInt(PETSC_NULL_CHARACTER,'-n',n,flg,ierr)
       !stw=1
       !dof=1

	!!DMDA
       
       CALL DMDACreate2d(comm,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,m,n,PETSC_DECIDE,PETSC_DECIDE,1,1,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da,ierr)
       
	
       CALL DMDASetUniformCoordinates(da,0,1,0,1,0,0,ierr)
	
       !call DMDAGetLocalInfo(da,info,ierr)
       !double hx = 1/info.m
       !double hy = 1/info.n
	
	!!MATRIX
       call MatCreate(PETSC_COMM_WORLD,A,ierr)
       call MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,m*n,m*n,ierr)
       call MatSetFromOptions(A,ierr)
       call MatSetUp(A,ierr)
       call MatGetOwnershipRange(A,Istart,Iend,ierr)
       do 10, II=Istart,Iend-1
       v = -1.0
       i = II/n
       j = II - i*n
       if (i.gt.0) then
          JJ = II - n
          call MatSetValues(A,ione,II,ione,JJ,v,INSERT_VALUES,ierr)
       endif
       if (i.lt.m-1) then
          JJ = II + n
          call MatSetValues(A,ione,II,ione,JJ,v,INSERT_VALUES,ierr)
       endif
       if (j.gt.0) then
          JJ = II - 1
          call MatSetValues(A,ione,II,ione,JJ,v,INSERT_VALUES,ierr)
       endif
       if (j.lt.n-1) then
          JJ = II + 1
          call MatSetValues(A,ione,II,ione,JJ,v,INSERT_VALUES,ierr)
       endif
        v = 4.0
       call  MatSetValues(A,ione,II,ione,II,v,INSERT_VALUES,ierr)
 10   continue

       call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)
       call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)

	!!VECTOR

       call DMCreateGlobalVector(da,x,ierr)
       call DMCreateGlobalVector(da,b,ierr)
       call VectorSet(b,1,ierr)

	!!KSP

       call KSPCreate(comm,ksp,ierr)
       call KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN,ierr)
       call KSPSetFromOptions(ksp,ierr)
       call KSPSolve(ksp,b,x,ierr)
	!save("u.vtk",da,x,ierr)
       call KSPGetIterationNumber(ksp,its,ierr)
	!KSPPrint(comm,
	
	!!Destroy

       call KSPDestroy(ksp,ierr)
       call VecDestroy(x,ierr)
       call VecDestroy(b,ierr)
       call MatDestroy(A,ierr)
       call DMDestroy(da,ierr)
	
	


	
       call PetscFinalize(ierr)
       
       end program main

Reply via email to