48 USE iso_c_binding
, ONLY: c_int, c_ptr
56 MODULE PROCEDURE xt_idxsection_new_a
57 MODULE PROCEDURE xt_idxsection_new_i2
58 MODULE PROCEDURE xt_idxsection_new_i4
59 MODULE PROCEDURE xt_idxsection_new_i8
63 FUNCTION xt_idxsection_new_c(start, num_dimensions, global_size, &
64 local_size, local_start) bind(c, name='xt_idxsection_new') &
67 INTEGER(xt_int_kind),
VALUE,
INTENT(in) :: start
68 INTEGER(c_int),
VALUE,
INTENT(in) :: num_dimensions
69 INTEGER(xt_int_kind),
INTENT(in) :: global_size(num_dimensions), &
70 local_start(num_dimensions)
71 INTEGER(c_int),
INTENT(in) :: local_size(num_dimensions)
72 TYPE(c_ptr) :: idxsection
73 END FUNCTION xt_idxsection_new_c
78 FUNCTION xt_idxsection_new_a(start, global_size, local_size, local_start) &
80 INTEGER(xt_int_kind),
INTENT(in) :: start, local_start(:), global_size(:)
81 INTEGER,
INTENT(in) :: local_size(:)
83 INTEGER :: num_dimensions
84 INTEGER(c_int) :: num_dimensions_c
85 num_dimensions =
SIZE(global_size)
86 IF (
SIZE(local_size) /= num_dimensions &
87 .OR.
SIZE(local_start) /= num_dimensions) &
88 CALL xt_abort(
"non-matching array sizes", &
91 num_dimensions_c = int(num_dimensions, c_int)
93 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
94 & int(local_size, c_int), local_start))
95 END FUNCTION xt_idxsection_new_a
97 FUNCTION xt_idxsection_new_i2(start, num_dimensions, global_size, &
98 local_size, local_start)
RESULT(idxsection)
99 INTEGER(i2),
INTENT(in) :: num_dimensions
100 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
101 local_start(num_dimensions)
102 INTEGER,
INTENT(in) :: local_size(num_dimensions)
104 INTEGER(c_int) :: num_dimensions_c
106 num_dimensions_c = int(num_dimensions, c_int)
108 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
109 & int(local_size, c_int), local_start))
110 END FUNCTION xt_idxsection_new_i2
112 FUNCTION xt_idxsection_new_i4(start, num_dimensions, global_size, &
113 local_size, local_start)
RESULT(idxsection)
114 INTEGER(i4),
INTENT(in) :: num_dimensions
115 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
116 local_start(num_dimensions)
117 INTEGER,
INTENT(in) :: local_size(num_dimensions)
119 INTEGER(c_int),
PARAMETER :: dummy = 1
120 INTEGER(c_int) :: num_dimensions_c
122 IF (num_dimensions > huge(dummy)) &
123 CALL xt_abort(
"num_dimensions too large", &
126 num_dimensions_c = int(num_dimensions, c_int)
128 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
129 & int(local_size, c_int), local_start))
130 END FUNCTION xt_idxsection_new_i4
132 FUNCTION xt_idxsection_new_i8(start, num_dimensions, global_size, &
133 local_size, local_start)
RESULT(idxsection)
134 INTEGER(i8),
INTENT(in) :: num_dimensions
135 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
136 local_start(num_dimensions)
137 INTEGER,
INTENT(in) :: local_size(num_dimensions)
139 INTEGER(c_int),
PARAMETER :: dummy = 1
140 INTEGER(c_int) :: num_dimensions_c
142 IF (num_dimensions > huge(dummy)) &
143 CALL xt_abort(
"num_dimensions too large", &
146 num_dimensions_c = int(num_dimensions, c_int)
148 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
149 & int(local_size, c_int), local_start))
150 END FUNCTION xt_idxsection_new_i8
163 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(:), local_start(:)
164 INTEGER,
INTENT(in) :: local_size(:)
167 INTEGER :: idim, ndim
170 ndim =
SIZE(global_size)
171 IF (
SIZE(local_size) /= ndim .OR.
SIZE(local_start) /= ndim) &
172 CALL xt_abort(
"non-matching array sizes", &
179 err_state = err_state .OR. (local_start(idim) < 1) .OR. &
180 (local_start(idim) + local_size(idim) - 1 > global_size(idim))
182 IF (err_state)
CALL xt_abort(
"local indices out of global index space", &
189 global_size(ndim:1:-1), &
190 local_size(ndim:1:-1), &
191 local_start(ndim:1:-1) - 1_xt_int_kind )
type(xt_idxlist) function, public xt_idxfsection_new(start, global_size, local_size, local_start)
Fortran style version of xt_idxsection_new. Compared to xt_idxsection_new, here the elements of the v...
integer, parameter, public i8
integer, parameter, public i4
type(xt_idxlist) function, public xt_idxlist_c2f(idxlist)
integer, parameter, public i2
Xt_idxlist xt_idxsection_new(Xt_int start, int num_dimensions, const Xt_int global_size[num_dimensions], const int local_size[num_dimensions], const Xt_int local_start[num_dimensions])
integer, parameter, public xt_int_kind