Forum Jump

Select Group :
Select Forum :
Sorted By :
Sort Order :
From The :
 
Thread Tools  Search this thread 
sabrnl
November 7, 2009 4:36 PM PST
error #8032: Generic procedure reference has two or more specific procedure with the same type/rank/keyword signature
Hi,

I am trying to compile my code on a linux platform, migrating from an IRIX box that served me faithfully for the last 7-8 years.

When compling the code below, (I show only the relevant part), using the following compiler options:

mpif90 -std -fpconstant -g -traceback -debug -O0 -fpe0 -check_bounds gs_module.f90

I get these warnings and then errors:

gs_module.f90(14): warning #6738: The type/rank/keyword signature for this specific procedure matches another specific procedure that shares the same generic-name.   [SCATTER_MODULE^MAX_SCATTER_VECTOR_DOUBLE]                               
use scatter_module, only: SUM_SCATTER, MIN_SCATTER, MAX_SCATTER, OR_SCATTER  
------^                                                                        
gs_module.f90(258): error #8032: Generic procedure reference has two or more specific procedure with the same type/rank/keyword signature.   [GATHER]          
call gather (Dest, Src, Mesh, TYPE = EE, TRACE = EE_TRACE, &               
---------^                                                                     
gs_module.f90(293): error #8032: Generic procedure reference has two or more specific procedure with the same type/rank/keyword signature.   [GATHER]          
call gather (Dest, Src, Mesh, TYPE = EE, TRACE = EE_TRACE, &               
---------^                                                                     

I would welcome any solution to this compiling error (I care less about the warnings).

Thanks,

Adrian

MODULE GS_MODULE
!=======================================================================
! Purpose(s):
!
!   Define the interfaces and global variables
!   for the gather/scatter support
!
!=======================================================================
use gather_module,  only: GATHER
use gs_info_module, only: EN_TRACE, EE_TRACE, EN, EE
use kind_module,    only: log_kind
use parameter_module
use scatter_module, only: SUM_SCATTER, MIN_SCATTER, MAX_SCATTER, OR_SCATTER
implicit none
! Private Module
private
! Public procedures
Public :: EE_Gather, EN_Gather, EN_MIN_Gather, EN_MAX_Gather, EN_OR_Gather, &
EN_SUM_Scatter, EN_MIN_Scatter, EN_MAX_Scatter, EN_OR_Scatter,    &
EE_GS_INIT, EN_GS_INIT
! Arrays and variables used only inside this module
logical(KIND = log_kind), save, private, pointer, dimension(:,:) :: El_Nbr_MASK
logical(KIND = log_kind), save, private :: EE_MASK_Initialized = .false.
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Interface blocks
INTERFACE EE_GATHER
!=======================================================================
! Purpose -
!   Gather integer cell-centered data from cell face neighbors
!   into a integer cell-centered vector of length nfc
!  
!    Input:
!          Mesh - Mesh connectivity structure
!          Src  - Cell-centered quantity
!   Output:
!          Dest - Cell-centered vector of length nfc containing
!                 the value of Src for all face neighbor cells
!         
!=======================================================================
MODULE PROCEDURE EE_GATHER_INT
MODULE PROCEDURE EE_GATHER_SINGLE
MODULE PROCEDURE EE_GATHER_DOUBLE
END INTERFACE
!========== EE_GATHER_INT========================================
! This is included by gs_module for the top level gather routines.
! This is the parallel version
SUBROUTINE EE_GATHER_INT (Dest, Src, BOUNDARY)
!=======================================================================
! PURPOSE -
!
!=======================================================================
use gs_info_module, only: EE_TRACE, EE
use kind_module
use mesh_module,    only: Mesh
use pgslib_module,  only: PGSLib_GS_Trace_Setup_P
implicit none
! Incoming Arguments
integer (int_kind) , intent(IN   ),                               &
dimension (ncells)                              :: Src
integer (int_kind) , intent(  OUT),                               &
dimension (nfc,ncells)                              :: Dest
integer (int_kind) , dimension (:),                             &        
POINTER,                                     &
OPTIONAL                                     :: BOUNDARY
! Local Variables
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Initialize relevant quantities
Dest = 0_int_kind
IF (.NOT. EE_MASK_Initialized) then
EE_MASK_Initialized = .true.
call gs_init_ee_mask()
END IF
IF (.NOT. PGSLib_GS_Trace_Setup_P(EE_Trace)) Call EE_GS_Init()
call gather (Dest, Src, Mesh, TYPE = EE, TRACE = EE_TRACE, &
MASK = El_Nbr_Mask, BOUNDARY = BOUNDARY)
return
END SUBROUTINE EE_GATHER_INT
!========== EE_GATHER_SINGLE========================================
! This is included by gs_module for the top level gather routines.
! This is the parallel version
SUBROUTINE EE_GATHER_SINGLE (Dest, Src, BOUNDARY)
!=======================================================================
! PURPOSE -
!
!=======================================================================
use gs_info_module, only: EE_TRACE, EE
use kind_module
use mesh_module,    only: Mesh
use pgslib_module,  only: PGSLib_GS_Trace_Setup_P
implicit none
! Incoming Arguments
real (single_kind) , intent(IN   ),                               &
dimension (ncells)                              :: Src
real (single_kind) , intent(  OUT),                               &
dimension (nfc,ncells)                              :: Dest
real (single_kind) , dimension (:),                             &        
POINTER,                                     &
OPTIONAL                                     :: BOUNDARY
! Local Variables
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Initialize relevant quantities
Dest = 0.0_single_kind
IF (.NOT. EE_MASK_Initialized) then
EE_MASK_Initialized = .true.
call gs_init_ee_mask()
END IF
IF (.NOT. PGSLib_GS_Trace_Setup_P(EE_Trace)) Call EE_GS_Init()
call gather (Dest, Src, Mesh, TYPE = EE, TRACE = EE_TRACE, &
MASK = El_Nbr_Mask, BOUNDARY = BOUNDARY)
return
END SUBROUTINE EE_GATHER_SINGLE
!========== EE_GATHER_DOUBLE========================================
! This is included by gs_module for the top level gather routines.
! This is the parallel version
SUBROUTINE EE_GATHER_DOUBLE (Dest, Src, BOUNDARY)
!=======================================================================
! PURPOSE -
!
!=======================================================================
use gs_info_module, only: EE_TRACE, EE
use kind_module
use mesh_module,    only: Mesh
use pgslib_module,  only: PGSLib_GS_Trace_Setup_P
implicit none
! Incoming Arguments
real (double_kind) , intent(IN   ),                               &
dimension (ncells)                              :: Src
real (double_kind) , intent(  OUT),                               &
dimension (nfc,ncells)                              :: Dest
real (double_kind) , dimension (:),                             &        
POINTER,                                     &
OPTIONAL                                     :: BOUNDARY
! Local Variables
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Initialize relevant quantities
Dest = 0.0_double_kind
IF (.NOT. EE_MASK_Initialized) then
EE_MASK_Initialized = .true.
call gs_init_ee_mask()
END IF
IF (.NOT. PGSLib_GS_Trace_Setup_P(EE_Trace)) Call EE_GS_Init()
call gather (Dest, Src, Mesh, TYPE = EE, TRACE = EE_TRACE, &
MASK = El_Nbr_Mask, BOUNDARY = BOUNDARY)
return
END SUBROUTINE EE_GATHER_DOUBLE

END MODULE GS_MODULE

=================

the other module where gather is defined

MODULE GATHER_MODULE
!=======================================================================
! PURPOSE -
!   Routines for gather.  These are used by both
!   Element<->Element and Element<->Node.
!
!=======================================================================
use gs_info_module
use pgslib_module,     ONLY: PGSLib_GS_Struct, PGSLib_Gather_Buffer

implicit none
save
public :: Gather
! Interface blocks
INTERFACE Gather
!=======================================================================
! PURPOSE -
!   Gather either cell-centered data or vertex centered data
!   into a cell-centered vector of length ShortDim
!  
!    Input:
!          Mesh - Mesh connectivity structure
!          Src  - Cell or vertex -centered quantity
!   Output:
!          Dest - Cell-centered vector of length ShortDim containing
!                 the value of Src for all neighbors
!         
!=======================================================================
MODULE PROCEDURE Gather_INT
MODULE PROCEDURE Gather_SINGLE
MODULE PROCEDURE Gather_DOUBLE
END INTERFACE
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
CONTAINS
!=======================================================================
! PURPOSE -
!   Gather either cell-centered data or vertex centered integer data
!   into an integer cell-centered vector of length ShortDim
!=======================================================================
SUBROUTINE GATHER_INT (Dest, Src, Mesh, TYPE, TRACE, BOUNDARY, MASK)
!=======================================================================
! PURPOSE -
!   Gather either cell-centered data or vertex centered integer data
!   into a integer (int_kind) cell-centered vector of length ShortDim
!=======================================================================
use error_module, only: PUNT
use kind_module
use mesh_module,  only: MESH_CONNECTIVITY, CllNgbr, Vrtx
implicit none
! Arguments
integer (int_kind)             , dimension(:,:),                        &
intent(OUT)                            :: Dest
integer (int_kind)             , dimension(:),                          &
intent(IN)                             :: Src
type(MESH_CONNECTIVITY),  dimension(SIZE(Dest,2)),               &
intent(IN)                             :: Mesh
integer (int_kind)             , dimension(:),                          &        
POINTER,                               &
OPTIONAL                               :: BOUNDARY
logical(KIND = log_kind), dimension(SIZE(Dest,1), SIZE(Dest,2)), &
intent(IN ),                           &
OPTIONAL                               :: MASK
type (COMM_TYPE),         intent(IN   )                          :: TYPE
type (PGSLib_GS_Struct), intent(IN) :: Trace
! Local scalars & arrays
integer(KIND = int_kind) :: f, c
logical(KIND = log_kind) :: PRESENT_MASK, TEMP_BOUNDARY, NEW_BOUNDARY
integer (int_kind),        POINTER,         dimension(:) :: Supplement_Data
integer (int_kind),        dimension(Trace%N_Duplicate)  :: Duplicate_Data
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Initialize relevant quantities
PRESENT_MASK = PRESENT(MASK)
! If BOUNDARY is not passed in, then we have to use a local
! boundaray.  If BOUNDARY is passed in, then if it is NULL
TEMP_BOUNDARY = .NOT. PRESENT(BOUNDARY)
! If the BOUNDARY is associated, use it, otherwise get new boundary data.
IF (TEMP_BOUNDARY) THEN
NEW_BOUNDARY   = .TRUE.
ELSE
NEW_BOUNDARY   = .NOT. ASSOCIATED(BOUNDARY)
ENDIF
IF (NEW_BOUNDARY) THEN
ALLOCATE(Supplement_Data(Trace%N_Supplement))
IF (.NOT. TEMP_BOUNDARY) BOUNDARY => Supplement_Data
! Gather into comm buffer
Duplicate_Data = Src(Trace%Duplicate_Indices)
ELSE
! If we were passed in a boundary, and it was allocated already,
! then us it
IF (.NOT. TEMP_BOUNDARY) Supplement_Data => BOUNDARY
END IF

IF (TEMP_BOUNDARY) DEALLOCATE(Supplement_Data)
return
END SUBROUTINE GATHER_INT

!=======================================================================
! PURPOSE -
!   Gather either cell-centered data or vertex centered single data
!   into a single cell-centered vector of length ShortDim
!=======================================================================
! This is included for the gather routines.
! This is the parallel version
SUBROUTINE GATHER_SINGLE (Dest, Src, Mesh, TYPE, TRACE, BOUNDARY, MASK)
!=======================================================================
! PURPOSE -
!   Gather either cell-centered data or vertex centered integer data
!   into a real (single_kind) cell-centered vector of length ShortDim
!=======================================================================
use error_module, only: PUNT
use kind_module
use mesh_module,  only: MESH_CONNECTIVITY, CllNgbr, Vrtx
implicit none
! Arguments
real (single_kind)             , dimension(:,:),                        &
intent(OUT)                            :: Dest
real (single_kind)             , dimension(:),                          &
intent(IN)                             :: Src
type(MESH_CONNECTIVITY),  dimension(SIZE(Dest,2)),               &
intent(IN)                             :: Mesh
real (single_kind)             , dimension(:),                          &        
POINTER,                               &
OPTIONAL                               :: BOUNDARY
logical(KIND = log_kind), dimension(SIZE(Dest,1), SIZE(Dest,2)), &
intent(IN ),                           &
OPTIONAL                               :: MASK
type (COMM_TYPE),         intent(IN   )                          :: TYPE
type (PGSLib_GS_Struct), intent(IN) :: Trace
! Local scalars & arrays
integer(KIND = int_kind) :: f, c
logical(KIND = log_kind) :: PRESENT_MASK, TEMP_BOUNDARY, NEW_BOUNDARY
real (single_kind),        POINTER,         dimension(:) :: Supplement_Data
real (single_kind),        dimension(Trace%N_Duplicate)  :: Duplicate_Data
! <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
! Initialize relevant quantities
PRESENT_MASK = PRESENT(MASK)
! If BOUNDARY is not passed in, then we have to use a local
! boundaray.  If BOUNDARY is passed in, then if it is NULL
TEMP_BOUNDARY = .NOT. PRESENT(BOUNDARY)
! If the BOUNDARY is associated, use it, otherwise get new boundary data.
IF (TEMP_BOUNDARY) THEN
NEW_BOUNDARY   = .TRUE.
ELSE
NEW_BOUNDARY   = .NOT. ASSOCIATED(BOUNDARY)
ENDIF
IF (NEW_BOUNDARY) THEN
ALLOCATE(Supplement_Data(Trace%N_Supplement))
IF (.NOT. TEMP_BOUNDARY) BOUNDARY => Supplement_Data
! Gather into comm buffer
Duplicate_Data = Src(Trace%Duplicate_Indices)
ELSE
! If we were passed in a boundary, and it was allocated already,
! then us it
IF (.NOT. TEMP_BOUNDARY) Supplement_Data => BOUNDARY
END IF

IF (TEMP_BOUNDARY) DEALLOCATE(Supplement_Data)
return
END SUBROUTINE GATHER_SINGLE

END MODULE GATHER_MODULE

eliosh
Total Points:
415
Status Points:
365
Green Belt
November 9, 2009 10:51 AM PST
Rate
 
#1
Cannot find Gather_DOUBLE anywhere




Intel Software Network Forums Statistics

8487 users have contributed to 31625 threads and 100705 posts to date.
In the past 24 hours, we have 36 new thread(s) 120 new posts(s), and 186 new user(s).

In the past 3 days, the most popular thread for everyone has been gemm(A,A,A) like possible? The most posts were made to gemm(A,A,A) like possible? The post with the most views is Dear Steve, excuse me for a d

Please welcome our newest member chat1983