Yet Another eXchange Tool  DO_NOT_EDIT_HERE
xt_redist_real_sp.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  USE iso_c_binding, ONLY: c_ptr, c_loc
50  IMPLICIT NONE
51  PRIVATE
52  INTEGER, PARAMETER :: ps = 6
53  INTEGER, PARAMETER :: rs = 37
54  INTEGER, PARAMETER :: sp = selected_real_kind(ps,rs)
55  PUBLIC :: sp
56  INTERFACE xt_redist_s_exchange
57  MODULE PROCEDURE xt_redist_s_exchange_sp_1d
58  MODULE PROCEDURE xt_redist_s_exchange_sp_2d
59  MODULE PROCEDURE xt_redist_s_exchange_sp_3d
60  MODULE PROCEDURE xt_redist_s_exchange_sp_4d
61  MODULE PROCEDURE xt_redist_s_exchange_sp_5d
62  MODULE PROCEDURE xt_redist_s_exchange_sp_6d
63  MODULE PROCEDURE xt_redist_s_exchange_sp_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_sp_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  REAL(sp), TARGET, INTENT(in) :: src_data(src_size)
74  REAL(sp), TARGET, INTENT(inout) :: dst_data(dst_size)
75  TYPE(c_ptr) :: src_data_cptr, dst_data_cptr
76  src_data_cptr = c_loc(src_data)
77  dst_data_cptr = c_loc(dst_data)
78  CALL xt_redist_s_exchange1(redist, src_data_cptr, dst_data_cptr)
79  END SUBROUTINE xt_redist_s_exchange_sp_1d_as
80 
81  ! see @ref xt_redist_s_exchange
82  SUBROUTINE xt_redist_s_exchange_sp_1d(redist, src_data, dst_data)
83  TYPE(xt_redist), INTENT(in) :: redist
84  REAL(sp), TARGET, INTENT(in) :: src_data(:)
85  REAL(sp), TARGET, INTENT(inout) :: dst_data(:)
86 
87  REAL(sp), POINTER :: src_p(:), dst_p(:)
88  REAL(sp), TARGET :: dummy(1)
89  INTEGER :: src_size, dst_size
90  src_size = SIZE(src_data)
91  dst_size = SIZE(dst_data)
92  IF (src_size > 0) THEN
93  src_p => src_data
94  ELSE
95  src_p => dummy
96  src_size = 1
97  END IF
98  IF (dst_size > 0) THEN
99  dst_p => dst_data
100  ELSE
101  dst_p => dummy
102  dst_size = 1
103  END IF
104  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
105  END SUBROUTINE xt_redist_s_exchange_sp_1d
106 
107  ! see @ref xt_redist_s_exchange
108  SUBROUTINE xt_redist_s_exchange_sp_2d(redist, src_data, dst_data)
109  TYPE(xt_redist), INTENT(in) :: redist
110  REAL(sp), TARGET, INTENT(in) :: src_data(:,:)
111  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:)
112 
113  REAL(sp), POINTER :: src_p(:,:), dst_p(:,:)
114  REAL(sp), TARGET :: dummy(1,1)
115  INTEGER :: src_size, dst_size
116  src_size = SIZE(src_data)
117  dst_size = SIZE(dst_data)
118  IF (src_size > 0) THEN
119  src_p => src_data
120  ELSE
121  src_p => dummy
122  src_size = 1
123  END IF
124  IF (dst_size > 0) THEN
125  dst_p => dst_data
126  ELSE
127  dst_p => dummy
128  dst_size = 1
129  END IF
130  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
131  END SUBROUTINE xt_redist_s_exchange_sp_2d
132 
133  ! see @ref xt_redist_s_exchange
134  SUBROUTINE xt_redist_s_exchange_sp_3d(redist, src_data, dst_data)
135  TYPE(xt_redist), INTENT(in) :: redist
136  REAL(sp), TARGET, INTENT(in) :: src_data(:,:,:)
137  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:,:)
138 
139  REAL(sp), POINTER :: src_p(:,:,:), dst_p(:,:,:)
140  REAL(sp), TARGET :: dummy(1,1,1)
141  INTEGER :: src_size, dst_size
142  src_size = SIZE(src_data)
143  dst_size = SIZE(dst_data)
144  IF (src_size > 0) THEN
145  src_p => src_data
146  ELSE
147  src_p => dummy
148  src_size = 1
149  END IF
150  IF (dst_size > 0) THEN
151  dst_p => dst_data
152  ELSE
153  dst_p => dummy
154  dst_size = 1
155  END IF
156  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
157  END SUBROUTINE xt_redist_s_exchange_sp_3d
158 
159  ! see @ref xt_redist_s_exchange
160  SUBROUTINE xt_redist_s_exchange_sp_4d(redist, src_data, dst_data)
161  TYPE(xt_redist), INTENT(in) :: redist
162  REAL(sp), TARGET, INTENT(in) :: src_data(:,:,:,:)
163  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:,:,:)
164 
165  REAL(sp), POINTER :: src_p(:,:,:,:), dst_p(:,:,:,:)
166  REAL(sp), TARGET :: dummy(1,1,1,1)
167  INTEGER :: src_size, dst_size
168  src_size = SIZE(src_data)
169  dst_size = SIZE(dst_data)
170  IF (src_size > 0) THEN
171  src_p => src_data
172  ELSE
173  src_p => dummy
174  src_size = 1
175  END IF
176  IF (dst_size > 0) THEN
177  dst_p => dst_data
178  ELSE
179  dst_p => dummy
180  dst_size = 1
181  END IF
182  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
183  END SUBROUTINE xt_redist_s_exchange_sp_4d
184 
185  ! see @ref xt_redist_s_exchange
186  SUBROUTINE xt_redist_s_exchange_sp_5d(redist, src_data, dst_data)
187  TYPE(xt_redist), INTENT(in) :: redist
188  REAL(sp), TARGET, INTENT(in) :: src_data(:,:,:,:,:)
189  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:,:,:,:)
190 
191  REAL(sp), POINTER :: src_p(:,:,:,:,:), dst_p(:,:,:,:,:)
192  REAL(sp), TARGET :: dummy(1,1,1,1,1)
193  INTEGER :: src_size, dst_size
194  src_size = SIZE(src_data)
195  dst_size = SIZE(dst_data)
196  IF (src_size > 0) THEN
197  src_p => src_data
198  ELSE
199  src_p => dummy
200  src_size = 1
201  END IF
202  IF (dst_size > 0) THEN
203  dst_p => dst_data
204  ELSE
205  dst_p => dummy
206  dst_size = 1
207  END IF
208  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
209  END SUBROUTINE xt_redist_s_exchange_sp_5d
210 
211  ! see @ref xt_redist_s_exchange
212  SUBROUTINE xt_redist_s_exchange_sp_6d(redist, src_data, dst_data)
213  TYPE(xt_redist), INTENT(in) :: redist
214  REAL(sp), TARGET, INTENT(in) :: src_data(:,:,:,:,:,:)
215  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:,:,:,:,:)
216 
217  REAL(sp), POINTER :: src_p(:,:,:,:,:,:), dst_p(:,:,:,:,:,:)
218  REAL(sp), TARGET :: dummy(1,1,1,1,1,1)
219  INTEGER :: src_size, dst_size
220  src_size = SIZE(src_data)
221  dst_size = SIZE(dst_data)
222  IF (src_size > 0) THEN
223  src_p => src_data
224  ELSE
225  src_p => dummy
226  src_size = 1
227  END IF
228  IF (dst_size > 0) THEN
229  dst_p => dst_data
230  ELSE
231  dst_p => dummy
232  dst_size = 1
233  END IF
234  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
235  END SUBROUTINE xt_redist_s_exchange_sp_6d
236 
237  ! see @ref xt_redist_s_exchange
238  SUBROUTINE xt_redist_s_exchange_sp_7d(redist, src_data, dst_data)
239  TYPE(xt_redist), INTENT(in) :: redist
240  REAL(sp), TARGET, INTENT(in) :: src_data(:,:,:,:,:,:,:)
241  REAL(sp), TARGET, INTENT(inout) :: dst_data(:,:,:,:,:,:,:)
242 
243  REAL(sp), POINTER :: src_p(:,:,:,:,:,:,:), dst_p(:,:,:,:,:,:,:)
244  REAL(sp), TARGET :: dummy(1,1,1,1,1,1,1)
245  INTEGER :: src_size, dst_size
246  src_size = SIZE(src_data)
247  dst_size = SIZE(dst_data)
248  IF (src_size > 0) THEN
249  src_p => src_data
250  ELSE
251  src_p => dummy
252  src_size = 1
253  END IF
254  IF (dst_size > 0) THEN
255  dst_p => dst_data
256  ELSE
257  dst_p => dummy
258  dst_size = 1
259  END IF
260  CALL xt_redist_s_exchange_sp_1d_as(redist, src_size, src_p, dst_size, dst_p)
261  END SUBROUTINE xt_redist_s_exchange_sp_7d
262 END MODULE xt_redist_real_sp
263 !
264 ! Local Variables:
265 ! f90-continuation-indent: 5
266 ! coding: utf-8
267 ! mode: f90
268 ! indent-tabs-mode: nil
269 ! show-trailing-whitespace: t
270 ! require-trailing-newline: t
271 ! End:
272 !
void xt_redist_s_exchange(Xt_redist redist, int num_arrays, const void **src_data, void **dst_data)
Definition: xt_redist.c:71
integer, parameter, public sp
void xt_redist_s_exchange1(Xt_redist redist, const void *src_data, void *dst_data)
Definition: xt_redist.c:77