module hpcmw_eps_fvm_util
!C
!C-- PARAMETERS
include 'mpif.h'
integer,parameter:: HPCMW_NAME_LEN = 63
integer,parameter:: HPCMW_HEADER_LEN = 127
integer,parameter:: HPCMW_MSG_LEN = 255
integer,parameter:: HPCMW_FILENAME_LEN = 1023
integer:: kreal
integer:: kint
parameter (kreal= 8)
parameter (kint = 4)
integer, parameter :: hpcmw_sum = 46801
integer, parameter :: hpcmw_prod = 46802
integer, parameter :: hpcmw_max = 46803
integer, parameter :: hpcmw_min = 46804
integer, parameter :: hpcmw_integer = 53951
integer, parameter :: hpcmw_single_precision = 53952
integer, parameter :: hpcmw_double_precision = 53953
integer, parameter :: hpcmw_character = 53954
!C
!C-- FILES
character(HPCMW_FILENAME_LEN) :: hpcmw_eps_fvm_files (:)
!C
!C-- MESH
integer :: NODE_tot, intNODE_tot
integer :: NODE_GLOBAL(:)
real (kind=kreal) :: NODE_VOL(:), NODE_COND(:), NODE_XYZ(:)
integer :: CONN_tot
integer :: CONN_NODE(:)
real (kind=kreal) :: CONN_COEF(:)
integer :: FIX_NODE_tot
integer :: FIX_NODE_ID(:)
real (kind=kreal) :: FIX_NODE_COEF(:), FIX_NODE_VAL(:)
integer :: SURF_NODE_tot
integer :: SURF_NODE_ID(:)
real (kind=kreal) :: SURF_NODE_FLUX(:)
integer :: BODY_NODE_tot
integer :: BODY_NODE_ID(:)
real (kind=kreal) :: BODY_NODE_FLUX(:)
!C
!C-- COMMUNICATION
integer zero
integer PETOT, PEsmpTOT, my_rank, errno
integer n_neighbor_pe
integer :: neighbor_pe(:)
integer :: import_index(:), import_item(:)
integer :: export_index(:), export_item(:)
contains
!C
!C***
!C*** HPCMW_EPS_FVM_INIT
!C***
!C
!C INIT. HPCMW-FEM process's
!C
subroutine HPCMW_EPS_FVM_INIT
integer :: ierr
call MPI_INIT (ierr)
call MPI_COMM_SIZE (MPI_COMM_WORLD, PETOT , ierr)
call MPI_COMM_RANK (MPI_COMM_WORLD, my_rank , ierr)
if (my_rank.eq.0) then
zero= 1
else
zero= 0
endif
end subroutine hpcmw_eps_fvm_init
!C
!C***
!C*** HPCMW_EPS_FVM_FINALIZE
!C***
!C
subroutine HPCMW_EPS_FVM_FINALIZE
integer :: ierr
call MPI_FINALIZE (ierr)
if (my_rank.eq.0) stop ' * normal termination'
end subroutine hpcmw_eps_fvm_finalize
!C
!C***
!C*** HPCMW_EPS_FVM_ABORT
!C***
!C
subroutine HPCMW_EPS_FVM_ABORT
integer :: ierr, ier2
call MPI_BARRIER (MPI_COMM_WORLD, ierr)
call MPI_ABORT (MPI_COMM_WORLD, ierr, ier2)
end subroutine hpcmw_eps_fvm_abort
!C
!C***
!C*** HPCMW_EPS_FVM_DEFINE_FILE_NAME
!C***
!C
subroutine HPCMW_EPS_FVM_DEFINE_FILE_NAME (member, HEADERo)
character (len=HPCMW_HEADER_LEN) :: HEADERo, FILENAME
character (len=HPCMW_NAME_LEN) :: member
character (len=HPCMW_NAME_LEN) :: HEADER
character (len= 1) :: SUBindex1
character (len= 2) :: SUBindex2
character (len= 3) :: SUBindex3
character (len= 4) :: SUBindex4
character (len= 5) :: SUBindex5
character (len= 6) :: SUBindex6
integer:: LENGTH, ID
HEADER= adjustL (HEADERo)
LENGTH= len_trim(HEADER)
if (my_rank.le.9) then
ID= 1
write(SUBindex1 ,'(i1.1)') my_rank
else if (my_rank.le.99) then
ID= 2
write(SUBindex2 ,'(i2.2)') my_rank
else if (my_rank.le.999) then
ID= 3
write(SUBindex3 ,'(i3.3)') my_rank
else if (my_rank.le.9999) then
ID= 4
write(SUBindex5 ,'(i4.4)') my_rank
else if (my_rank.le.99999) then
ID= 5
write(SUBindex6 ,'(i5.5)') my_rank
else if (my_rank.le.999999) then
ID= 6
write(SUBindex4 ,'(i6.6)') my_rank
endif
if (ID.eq.1) filename= HEADER(1:LENGTH)//'.'//SUBindex1
if (ID.eq.2) filename= HEADER(1:LENGTH)//'.'//SUBindex2
if (ID.eq.3) filename= HEADER(1:LENGTH)//'.'//SUBindex3
if (ID.eq.4) filename= HEADER(1:LENGTH)//'.'//SUBindex4
if (ID.eq.5) filename= HEADER(1:LENGTH)//'.'//SUBindex5
if (ID.eq.6) filename= HEADER(1:LENGTH)//'.'//SUBindex6
if (member.eq. 'gridfile') hpcmw_eps_fvm_files(1)= filename
if (member.eq. 'result' ) hpcmw_eps_fvm_files(2)= filename
if (member.eq. 'commfile') hpcmw_eps_fvm_files(4)= filename
end subroutine hpcmw_eps_fvm_define_file_name
end module hpcmw_eps_fvm_util