Yet Another eXchange Tool  DO_NOT_EDIT_HERE
xt_redist_logical.f90
Go to the documentation of this file.
1 
13 
14 !
15 ! Keywords:
16 ! Maintainer: Jörg Behrens <behrens@dkrz.de>
17 ! Moritz Hanke <hanke@dkrz.de>
18 ! Thomas Jahns <jahns@dkrz.de>
19 ! URL: https://redmine.dkrz.de/doc/yaxt/html/index.html
20 !
21 ! Redistribution and use in source and binary forms, with or without
22 ! modification, are permitted provided that the following conditions are
23 ! met:
24 !
25 ! Redistributions of source code must retain the above copyright notice,
26 ! this list of conditions and the following disclaimer.
27 !
28 ! Redistributions in binary form must reproduce the above copyright
29 ! notice, this list of conditions and the following disclaimer in the
30 ! documentation and/or other materials provided with the distribution.
31 !
32 ! Neither the name of the DKRZ GmbH nor the names of its contributors
33 ! may be used to endorse or promote products derived from this software
34 ! without specific prior written permission.
35 !
36 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
37 ! IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
38 ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
39 ! PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
40 ! OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
41 ! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
42 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
43 ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
44 ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
45 ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
46 ! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 #ifdef HAVE_FC_LOGICAL_INTEROP
50  USE iso_c_binding, ONLY: c_ptr, c_loc
51 #else
52  USE iso_c_binding, ONLY: c_ptr
53 #endif
54  IMPLICIT NONE
55  PRIVATE
56  INTERFACE xt_redist_s_exchange
57  MODULE PROCEDURE xt_redist_s_exchange_l_1d
58  MODULE PROCEDURE xt_redist_s_exchange_l_2d
59  MODULE PROCEDURE xt_redist_s_exchange_l_3d
60  MODULE PROCEDURE xt_redist_s_exchange_l_4d
61  MODULE PROCEDURE xt_redist_s_exchange_l_5d
62  MODULE PROCEDURE xt_redist_s_exchange_l_6d
63  MODULE PROCEDURE xt_redist_s_exchange_l_7d
64  END INTERFACE xt_redist_s_exchange
65  PUBLIC :: xt_redist_s_exchange
66 CONTAINS
67 
68  ! see @ref xt_redist_s_exchange
69  SUBROUTINE xt_redist_s_exchange_l_1d_as(redist, src_size, src_data, &
70  dst_size, dst_data)
71  TYPE(xt_redist), INTENT(in) :: redist
72  INTEGER, INTENT(in) :: src_size, dst_size
73  LOGICAL, TARGET, INTENT(in) :: src_data(src_size)
74  LOGICAL, TARGET, INTENT(inout) :: dst_data(dst_size)
75  TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
76 #ifdef HAVE_FC_LOGICAL_INTEROP
77  src_data_cptr = c_loc(src_data)
78  dst_data_cptr = c_loc(dst_data)
79 #else
80  CALL xt_slice_c_loc(src_data, src_data_cptr)
81  CALL xt_slice_c_loc(dst_data, dst_data_cptr)
82 #endif
83  CALL xt_redist_s_exchange1(redist, src_data_cptr, dst_data_cptr)
84  END SUBROUTINE xt_redist_s_exchange_l_1d_as
85 
86  ! see @ref xt_redist_s_exchange
87  SUBROUTINE xt_redist_s_exchange_l_1d(redist, src_data, dst_data)
88  TYPE(xt_redist), INTENT(in) :: redist
89  LOGICAL, TARGET, INTENT(in) :: src_data(:)
90  LOGICAL, TARGET, INTENT(inout) :: dst_data(:)
91 
92  LOGICAL, POINTER :: src_p(:), dst_p(:)
93  LOGICAL, TARGET :: dummy(1)
94  INTEGER :: src_size, dst_size
95  src_size = SIZE(src_data)
96  dst_size = SIZE(dst_data)
97  IF (src_size > 0) THEN
98  src_p => src_data
99  ELSE
100  src_p => dummy
101  src_size = 1
102  END IF
103  IF (dst_size > 0) THEN
104  dst_p => dst_data
105  ELSE
106  dst_p => dummy
107  dst_size = 1
108  END IF
109  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
110  END SUBROUTINE xt_redist_s_exchange_l_1d
111 
112  ! see @ref xt_redist_s_exchange
113  SUBROUTINE xt_redist_s_exchange_l_2d(redist, src_data, dst_data)
114  TYPE(xt_redist), INTENT(in) :: redist
115  LOGICAL, TARGET, INTENT(in) :: src_data(:,:)
116  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:)
117 
118  LOGICAL, POINTER :: src_p(:,:), dst_p(:,:)
119  LOGICAL, TARGET :: dummy(1,1)
120  INTEGER :: src_size, dst_size
121  src_size = SIZE(src_data)
122  dst_size = SIZE(dst_data)
123  IF (src_size > 0) THEN
124  src_p => src_data
125  ELSE
126  src_p => dummy
127  src_size = 1
128  END IF
129  IF (dst_size > 0) THEN
130  dst_p => dst_data
131  ELSE
132  dst_p => dummy
133  dst_size = 1
134  END IF
135  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
136  END SUBROUTINE xt_redist_s_exchange_l_2d
137 
138  ! see @ref xt_redist_s_exchange
139  SUBROUTINE xt_redist_s_exchange_l_3d(redist, src_data, dst_data)
140  TYPE(xt_redist), INTENT(in) :: redist
141  LOGICAL, TARGET, INTENT(in) :: src_data(:,:,:)
142  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:,:)
143 
144  LOGICAL, POINTER :: src_p(:,:,:), dst_p(:,:,:)
145  LOGICAL, TARGET :: dummy(1,1,1)
146  INTEGER :: src_size, dst_size
147  src_size = SIZE(src_data)
148  dst_size = SIZE(dst_data)
149  IF (src_size > 0) THEN
150  src_p => src_data
151  ELSE
152  src_p => dummy
153  src_size = 1
154  END IF
155  IF (dst_size > 0) THEN
156  dst_p => dst_data
157  ELSE
158  dst_p => dummy
159  dst_size = 1
160  END IF
161  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
162  END SUBROUTINE xt_redist_s_exchange_l_3d
163 
164  ! see @ref xt_redist_s_exchange
165  SUBROUTINE xt_redist_s_exchange_l_4d(redist, src_data, dst_data)
166  TYPE(xt_redist), INTENT(in) :: redist
167  LOGICAL, TARGET, INTENT(in) :: src_data(:,:,:,:)
168  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:,:,:)
169 
170  LOGICAL, POINTER :: src_p(:,:,:,:), dst_p(:,:,:,:)
171  LOGICAL, TARGET :: dummy(1,1,1,1)
172  INTEGER :: src_size, dst_size
173  src_size = SIZE(src_data)
174  dst_size = SIZE(dst_data)
175  IF (src_size > 0) THEN
176  src_p => src_data
177  ELSE
178  src_p => dummy
179  src_size = 1
180  END IF
181  IF (dst_size > 0) THEN
182  dst_p => dst_data
183  ELSE
184  dst_p => dummy
185  dst_size = 1
186  END IF
187  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
188  END SUBROUTINE xt_redist_s_exchange_l_4d
189 
190  ! see @ref xt_redist_s_exchange
191  SUBROUTINE xt_redist_s_exchange_l_5d(redist, src_data, dst_data)
192  TYPE(xt_redist), INTENT(in) :: redist
193  LOGICAL, TARGET, INTENT(in) :: src_data(:,:,:,:,:)
194  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:,:,:,:)
195 
196  LOGICAL, POINTER :: src_p(:,:,:,:,:), dst_p(:,:,:,:,:)
197  LOGICAL, TARGET :: dummy(1,1,1,1,1)
198  INTEGER :: src_size, dst_size
199  src_size = SIZE(src_data)
200  dst_size = SIZE(dst_data)
201  IF (src_size > 0) THEN
202  src_p => src_data
203  ELSE
204  src_p => dummy
205  src_size = 1
206  END IF
207  IF (dst_size > 0) THEN
208  dst_p => dst_data
209  ELSE
210  dst_p => dummy
211  dst_size = 1
212  END IF
213  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
214  END SUBROUTINE xt_redist_s_exchange_l_5d
215 
216  ! see @ref xt_redist_s_exchange
217  SUBROUTINE xt_redist_s_exchange_l_6d(redist, src_data, dst_data)
218  TYPE(xt_redist), INTENT(in) :: redist
219  LOGICAL, TARGET, INTENT(in) :: src_data(:,:,:,:,:,:)
220  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:,:,:,:,:)
221 
222  LOGICAL, POINTER :: src_p(:,:,:,:,:,:), dst_p(:,:,:,:,:,:)
223  LOGICAL, TARGET :: dummy(1,1,1,1,1,1)
224  INTEGER :: src_size, dst_size
225  src_size = SIZE(src_data)
226  dst_size = SIZE(dst_data)
227  IF (src_size > 0) THEN
228  src_p => src_data
229  ELSE
230  src_p => dummy
231  src_size = 1
232  END IF
233  IF (dst_size > 0) THEN
234  dst_p => dst_data
235  ELSE
236  dst_p => dummy
237  dst_size = 1
238  END IF
239  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
240  END SUBROUTINE xt_redist_s_exchange_l_6d
241 
242  ! see @ref xt_redist_s_exchange
243  SUBROUTINE xt_redist_s_exchange_l_7d(redist, src_data, dst_data)
244  TYPE(xt_redist), INTENT(in) :: redist
245  LOGICAL, TARGET, INTENT(in) :: src_data(:,:,:,:,:,:,:)
246  LOGICAL, TARGET, INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
247 
248  LOGICAL, POINTER :: src_p(:,:,:,:,:,:,:), dst_p(:,:,:,:,:,:,:)
249  LOGICAL, TARGET :: dummy(1,1,1,1,1,1,1)
250  INTEGER :: src_size, dst_size
251  src_size = SIZE(src_data)
252  dst_size = SIZE(dst_data)
253  IF (src_size > 0) THEN
254  src_p => src_data
255  ELSE
256  src_p => dummy
257  src_size = 1
258  END IF
259  IF (dst_size > 0) THEN
260  dst_p => dst_data
261  ELSE
262  dst_p => dummy
263  dst_size = 1
264  END IF
265  CALL xt_redist_s_exchange_l_1d_as(redist, src_size, src_p, dst_size, dst_p)
266  END SUBROUTINE xt_redist_s_exchange_l_7d
267 END MODULE xt_redist_logical
268 !
269 ! Local Variables:
270 ! f90-continuation-indent: 5
271 ! coding: utf-8
272 ! mode: f90
273 ! indent-tabs-mode: nil
274 ! show-trailing-whitespace: t
275 ! require-trailing-newline: t
276 ! End:
277 !
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
Definition: xt_redist.c:71
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)
Definition: xt_redist.c:77