49 use,
INTRINSIC :: iso_c_binding, only: c_char, c_null_char, c_int, &
50 c_long, c_short, c_long_long
51 USE xt_mpi, ONLY: xt_int_fc_mpidt
55 INTEGER,
PUBLIC,
PARAMETER ::
pi2 = 4
56 INTEGER,
PUBLIC,
PARAMETER ::
pi4 = 9
57 INTEGER,
PUBLIC,
PARAMETER ::
pi8 = 14
58 INTEGER,
PUBLIC,
PARAMETER ::
i2 = selected_int_kind(
pi2)
59 INTEGER,
PUBLIC,
PARAMETER ::
i4 = selected_int_kind(
pi4)
60 INTEGER,
PUBLIC,
PARAMETER ::
i8 = selected_int_kind(
pi8)
64 PUBLIC ::
OPERATOR(==),
OPERATOR(/=)
68 INTEGER(xt_int_kind),
PARAMETER :: dummy = 0_xt_int_kind
72 = ceiling(1.0 +
REAL(DIGITS(dummy)) * log10(
REAL(radix(dummy))))
73 CHARACTER(9),
PARAMETER :: xt_stripe_tag =
'xt_stripe' 79 INTEGER(xt_int_kind) :: start
80 INTEGER(xt_int_kind) :: stride
81 INTEGER(c_int) :: nstrides
85 INTEGER(xt_int_kind) :: start, size
92 INTEGER(c_int) :: start, size
98 bind(c, name=
'xt_get_default_comm_f')
101 INTEGER(xt_mpi_fint_kind) :: comm
104 SUBROUTINE xt_initialize(default_comm) bind(C, name='xt_initialize_f')
107 INTEGER(xt_mpi_fint_kind),
INTENT(in) :: default_comm
110 SUBROUTINE xt_finalize() bind(C, name='xt_finalize')
116 MODULE PROCEDURE xt_abort4
117 MODULE PROCEDURE xt_abort3
118 END INTERFACE xt_abort
121 SUBROUTINE xt_abort_c(comm, msg, source, line) bind(c, name='xt_abort_f')
124 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in):: comm
125 CHARACTER(kind=c_char),
DIMENSION(*),
INTENT(in) :: msg
126 CHARACTER(kind=c_char),
DIMENSION(*),
INTENT(in) :: source
127 INTEGER(xt_mpi_fint_kind),
VALUE,
INTENT(in) :: line
128 END SUBROUTINE xt_abort_c
132 MODULE PROCEDURE xt_stripe2char
135 INTERFACE OPERATOR(==)
136 MODULE PROCEDURE xt_pos_ext_eq
137 END INTERFACE OPERATOR(==)
139 INTERFACE OPERATOR(/=)
140 MODULE PROCEDURE xt_pos_ext_ne
141 END INTERFACE OPERATOR(/=)
147 SUBROUTINE xt_abort4(comm, msg, source, line)
148 INTEGER,
INTENT(in) :: comm
149 CHARACTER(len=*),
INTENT(in) :: msg
150 CHARACTER(len=*),
INTENT(in) :: source
151 INTEGER,
INTENT(in) :: line
152 CALL xt_abort_c(comm, trim(msg)//c_null_char, &
153 trim(source)//c_null_char, int(line, c_int))
154 END SUBROUTINE xt_abort4
156 SUBROUTINE xt_abort3(msg, source, line)
157 CHARACTER(len=*),
INTENT(in) :: msg
158 CHARACTER(len=*),
INTENT(in) :: source
159 INTEGER,
INTENT(in) :: line
161 trim(source)//c_null_char, int(line, c_int))
162 END SUBROUTINE xt_abort3
164 ELEMENTAL FUNCTION xt_stripe2char(stripe)
RESULT(str)
165 CHARACTER(len=xt_stripe2s_len) :: str
167 WRITE (str,
'(2a,3(i0,a))') xt_stripe_tag,
'(', stripe%start,
', ', &
168 stripe%stride,
', ', stripe%nstrides,
')' 169 END FUNCTION xt_stripe2char
172 LOGICAL :: is_initialized
174 FUNCTION xt_initialized_c() bind(c, name='xt_initialized') &
175 result(is_initialized)
177 INTEGER(c_int) :: is_initialized
178 END FUNCTION xt_initialized_c
180 is_initialized = xt_initialized_c() /= 0
184 LOGICAL :: is_finalized
186 FUNCTION xt_finalized_c() bind(c, name='xt_finalized') &
189 INTEGER(c_int) :: is_finalized
190 END FUNCTION xt_finalized_c
192 is_finalized = xt_finalized_c() /= 0
195 ELEMENTAL FUNCTION xt_pos_ext_eq(a, b)
RESULT(p)
198 p = a%start == b%start .AND. (a%size == b%size &
199 .OR. (abs(a%size) == 1 .AND. abs(a%size) == abs(b%size)))
200 END FUNCTION xt_pos_ext_eq
202 ELEMENTAL FUNCTION xt_pos_ext_ne(a, b)
RESULT(p)
205 p = a%start /= b%start .OR. (a%size /= b%size &
206 .AND. .NOT. (abs(a%size) == 1 .AND. abs(a%size) == abs(b%size)))
207 END FUNCTION xt_pos_ext_ne
integer, parameter, public i8
integer, parameter, public i4
integer, parameter, public pi8
integer, parameter, public pi4
void xt_initialize(MPI_Comm default_comm)
describes range of positions starting with start up to start + size - 1 i.e. [start,start+size) if size is positive and down to start + size + 1 i.e. (start+size,start] if size is negative
integer, parameter, public xt_mpi_fint_kind
integer, parameter, public i2
integer, parameter, public xt_stripe2s_len
maximal length of string xt_stripe(a, b, c)
external, public xt_slice_c_loc
integer, parameter, public xt_int_kind
integer, parameter, public pi2
integer, parameter, public xt_int_mpidt
integer, parameter, public xt_int_dec_len
number of decimal places needed to print any variable of type INTEGER(xt_int_kind) ...