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
76 CHARACTER(len=*),
PARAMETER :: filename =
'xt_idxsection_f.f90'
79 FUNCTION xt_idxsection_new_a(start, global_size, local_size, local_start) &
81 INTEGER(xt_int_kind),
INTENT(in) :: start, local_start(:), global_size(:)
82 INTEGER,
INTENT(in) :: local_size(:)
83 TYPE(xt_idxlist) :: idxsection
84 INTEGER :: num_dimensions
85 INTEGER(c_int) :: num_dimensions_c
86 num_dimensions =
SIZE(global_size)
87 IF (
SIZE(local_size) /= num_dimensions &
88 .OR.
SIZE(local_start) /= num_dimensions) &
89 CALL xt_abort(
"non-matching array sizes", filename, __line__)
90 num_dimensions_c = int(num_dimensions, c_int)
92 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
93 & int(local_size, c_int), local_start))
94 END FUNCTION xt_idxsection_new_a
96 FUNCTION xt_idxsection_new_i2(start, num_dimensions, global_size, &
97 local_size, local_start)
RESULT(idxsection)
98 INTEGER(i2),
INTENT(in) :: num_dimensions
99 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
100 local_start(num_dimensions)
101 INTEGER,
INTENT(in) :: local_size(num_dimensions)
102 TYPE(xt_idxlist) :: idxsection
103 INTEGER(c_int) :: num_dimensions_c
105 num_dimensions_c = int(num_dimensions, c_int)
107 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
108 & int(local_size, c_int), local_start))
109 END FUNCTION xt_idxsection_new_i2
111 FUNCTION xt_idxsection_new_i4(start, num_dimensions, global_size, &
112 local_size, local_start)
RESULT(idxsection)
113 INTEGER(i4),
INTENT(in) :: num_dimensions
114 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
115 local_start(num_dimensions)
116 INTEGER,
INTENT(in) :: local_size(num_dimensions)
117 TYPE(xt_idxlist) :: idxsection
118 INTEGER(c_int),
PARAMETER :: dummy = 1
119 INTEGER(c_int) :: num_dimensions_c
121 IF (num_dimensions > huge(dummy)) &
122 CALL xt_abort(
"num_dimensions too large", filename, __line__)
123 num_dimensions_c = int(num_dimensions, c_int)
125 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
126 & int(local_size, c_int), local_start))
127 END FUNCTION xt_idxsection_new_i4
129 FUNCTION xt_idxsection_new_i8(start, num_dimensions, global_size, &
130 local_size, local_start)
RESULT(idxsection)
131 INTEGER(i8),
INTENT(in) :: num_dimensions
132 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(num_dimensions), &
133 local_start(num_dimensions)
134 INTEGER,
INTENT(in) :: local_size(num_dimensions)
135 TYPE(xt_idxlist) :: idxsection
136 INTEGER(c_int),
PARAMETER :: dummy = 1
137 INTEGER(c_int) :: num_dimensions_c
139 IF (num_dimensions > huge(dummy)) &
140 CALL xt_abort(
"num_dimensions too large", filename, __line__)
141 num_dimensions_c = int(num_dimensions, c_int)
143 xt_idxsection_new_c(start, num_dimensions_c, global_size, &
144 & int(local_size, c_int), local_start))
145 END FUNCTION xt_idxsection_new_i8
158 INTEGER(xt_int_kind),
INTENT(in) :: start, global_size(:), local_start(:)
159 INTEGER,
INTENT(in) :: local_size(:)
162 INTEGER :: idim, ndim
165 ndim =
SIZE(global_size)
166 IF (
SIZE(local_size) /= ndim .OR.
SIZE(local_start) /= ndim) &
167 CALL xt_abort(
"non-matching array sizes", filename, __line__)
172 err_state = err_state .OR. (local_start(idim) < 1) .OR. &
173 (local_start(idim) + local_size(idim) - 1 > global_size(idim))
175 IF (err_state)
CALL xt_abort(
"local indices out of global index space", &
181 global_size(ndim:1:-1), &
182 local_size(ndim:1:-1), &
183 local_start(ndim:1:-1) - 1_xt_int_kind )
integer, parameter, public i8
integer, parameter, public xt_int_kind
integer, parameter, public i4
integer, parameter, public i2
type(xt_idxlist) function, public xt_idxlist_c2f(idxlist)
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...
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])