@@ -138,19 +138,6 @@ def test_parallel_routine_dispatch_derived_var(here, frontend):
138
138
transformation .apply (source ['dispatch_routine' ])
139
139
140
140
141
- ## test_dcls=["REAL(KIND=JPRB), POINTER :: Z_YDVARS_U_T0(:, :, :)",
142
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_DM(:, :, :)",
143
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_GEOMETRY_GELAM_T0(:, :)",
144
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_T0(:, :, :)",
145
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_DL(:, :, :)",
146
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_V_T0(:, :, :)",
147
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_GEOMETRY_GEMU_T0(:, :)",
148
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_Q_T0(:, :, :)",
149
- ##"REAL(KIND=JPRB), POINTER :: Z_YDCPG_PHY0_XYB_RDELP(:, :, :)",
150
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_DM(:, :, :)",
151
- ##"REAL(KIND=JPRB), POINTER :: Z_YDCPG_DYN0_CTY_EVEL(:, :, :)",
152
- ##"REAL(KIND=JPRB), POINTER :: Z_YDMF_PHYS_SURF_GSD_VF_PZ0F(:, :)",
153
- ##"REAL(KIND=JPRB), POINTER :: Z_YDVARS_CVGQ_DL(:, :, :)"]
154
141
test_map = {
155
142
"YDVARS%GEOMETRY%GEMU%T0" : ["YDVARS%GEOMETRY%GEMU%FT0" , "Z_YDVARS_GEOMETRY_GEMU_T0" ],
156
143
"YDVARS%GEOMETRY%GELAM%T0" : ["YDVARS%GEOMETRY%GELAM%FT0" , "Z_YDVARS_GEOMETRY_GELAM_T0" ],
@@ -173,3 +160,207 @@ def test_parallel_routine_dispatch_derived_var(here, frontend):
173
160
174
161
assert test_map [var_name ][0 ] == field_ptr .name
175
162
assert test_map [var_name ][1 ] == ptr .name
163
+
164
+ @pytest .mark .parametrize ('frontend' , available_frontends (skip = [OMNI ]))
165
+ def test_parallel_routine_dispatch_get_data (here , frontend ):
166
+
167
+ source = Sourcefile .from_file (here / 'sources/projParallelRoutineDispatch/dispatch_routine.F90' , frontend = frontend )
168
+ routine = source ['dispatch_routine' ]
169
+
170
+ transformation = ParallelRoutineDispatchTransformation ()
171
+ transformation .apply (source ['dispatch_routine' ])
172
+
173
+ get_data = transformation .get_data
174
+
175
+ test_get_data = {}
176
+ # test_get_data["OpenMP"] = """
177
+ #IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
178
+ #ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
179
+ #ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
180
+ #ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
181
+ #ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
182
+ #ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
183
+ #Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDONLY(YDCPG_DYN0%CTY%F_EVEL)
184
+ #Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDONLY(YDCPG_PHY0%XYB%F_RDELP)
185
+ #Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FDL)
186
+ #Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FDM)
187
+ #Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDONLY(YDVARS%CVGQ%FT0)
188
+ #Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDONLY(YDVARS%GEOMETRY%GELAM%FT0)
189
+ #Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDONLY(YDVARS%GEOMETRY%GEMU%FT0)
190
+ #Z_YDVARS_Q_DL => GET_HOST_DATA_RDONLY(YDVARS%Q%FDL)
191
+ #Z_YDVARS_Q_DM => GET_HOST_DATA_RDONLY(YDVARS%Q%FDM)
192
+ #Z_YDVARS_Q_T0 => GET_HOST_DATA_RDONLY(YDVARS%Q%FT0)
193
+ #Z_YDVARS_U_T0 => GET_HOST_DATA_RDONLY(YDVARS%U%FT0)
194
+ #Z_YDVARS_V_T0 => GET_HOST_DATA_RDONLY(YDVARS%V%FT0)
195
+ #Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDONLY(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
196
+ #IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
197
+ #"""
198
+ test_get_data ["OpenMP" ] = """
199
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
200
+ ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
201
+ ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
202
+ ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
203
+ ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
204
+ ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
205
+ Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
206
+ Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
207
+ Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDL)
208
+ Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDM)
209
+ Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FT0)
210
+ Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
211
+ Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
212
+ Z_YDVARS_Q_DL => GET_HOST_DATA_RDWR(YDVARS%Q%FDL)
213
+ Z_YDVARS_Q_DM => GET_HOST_DATA_RDWR(YDVARS%Q%FDM)
214
+ Z_YDVARS_Q_T0 => GET_HOST_DATA_RDWR(YDVARS%Q%FT0)
215
+ Z_YDVARS_U_T0 => GET_HOST_DATA_RDWR(YDVARS%U%FT0)
216
+ Z_YDVARS_V_T0 => GET_HOST_DATA_RDWR(YDVARS%V%FT0)
217
+ Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
218
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
219
+ """
220
+ test_get_data ["OpenMPSingleColumn" ] = test_get_data ["OpenMP" ]
221
+
222
+ # test_get_data["OpenACCSingleColumn"] = """
223
+ #IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
224
+ #ZRDG_CVGQ => GET_DEVICE_DATA_RDWR(YL_ZRDG_CVGQ)
225
+ #ZRDG_MU0 => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0)
226
+ #ZRDG_MU0LU => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0LU)
227
+ #ZRDG_MU0M => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0M)
228
+ #ZRDG_MU0N => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0N)
229
+ #Z_YDCPG_DYN0_CTY_EVEL => GET_DEVICE_DATA_RDONLY(YDCPG_DYN0%CTY%F_EVEL)
230
+ #Z_YDCPG_PHY0_XYB_RDELP => GET_DEVICE_DATA_RDONLY(YDCPG_PHY0%XYB%F_RDELP)
231
+ #Z_YDVARS_CVGQ_DL => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FDL)
232
+ #Z_YDVARS_CVGQ_DM => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FDM)
233
+ #Z_YDVARS_CVGQ_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%CVGQ%FT0)
234
+ #Z_YDVARS_GEOMETRY_GELAM_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%GEOMETRY%GELAM%FT0)
235
+ #Z_YDVARS_GEOMETRY_GEMU_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%GEOMETRY%GEMU%FT0)
236
+ #Z_YDVARS_Q_DL => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FDL)
237
+ #Z_YDVARS_Q_DM => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FDM)
238
+ #Z_YDVARS_Q_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%Q%FT0)
239
+ #Z_YDVARS_U_T0 => GET_DEVICE_DATA_RDONLY(YDVARS%U%FT0)
240
+ #Z_YDVARS_V_T0 => GET_DEVICE_DATA_RDONLY (YDVARS%V%FT0)
241
+ #Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_DEVICE_DATA_RDONLY(YDMF_PHYS_SURF%GSD_VF%F_Z0F) |276 REAL(KIND=JPRB) :: ZPFL_FPLSH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
242
+ #IF(LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
243
+ #"""
244
+
245
+ test_get_data ["OpenACCSingleColumn" ] = """
246
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 0, ZHOOK_HANDLE_FIELD_API)
247
+ ZRDG_CVGQ => GET_DEVICE_DATA_RDWR(YL_ZRDG_CVGQ)
248
+ ZRDG_MU0 => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0)
249
+ ZRDG_MU0LU => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0LU)
250
+ ZRDG_MU0M => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0M)
251
+ ZRDG_MU0N => GET_DEVICE_DATA_RDWR(YL_ZRDG_MU0N)
252
+ Z_YDCPG_DYN0_CTY_EVEL => GET_DEVICE_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
253
+ Z_YDCPG_PHY0_XYB_RDELP => GET_DEVICE_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
254
+ Z_YDVARS_CVGQ_DL => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FDL)
255
+ Z_YDVARS_CVGQ_DM => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FDM)
256
+ Z_YDVARS_CVGQ_T0 => GET_DEVICE_DATA_RDWR(YDVARS%CVGQ%FT0)
257
+ Z_YDVARS_GEOMETRY_GELAM_T0 => GET_DEVICE_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
258
+ Z_YDVARS_GEOMETRY_GEMU_T0 => GET_DEVICE_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
259
+ Z_YDVARS_Q_DL => GET_DEVICE_DATA_RDWR(YDVARS%Q%FDL)
260
+ Z_YDVARS_Q_DM => GET_DEVICE_DATA_RDWR(YDVARS%Q%FDM)
261
+ Z_YDVARS_Q_T0 => GET_DEVICE_DATA_RDWR(YDVARS%Q%FT0)
262
+ Z_YDVARS_U_T0 => GET_DEVICE_DATA_RDWR(YDVARS%U%FT0)
263
+ Z_YDVARS_V_T0 => GET_DEVICE_DATA_RDWR(YDVARS%V%FT0)
264
+ Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_DEVICE_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F) |276 REAL(KIND=JPRB) :: ZPFL_FPLSH (YDCPG_OPTS%KLON, 0:YDCPG_OPTS%KFLEVG)
265
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:GET_DATA', 1, ZHOOK_HANDLE_FIELD_API)
266
+ """
267
+
268
+ for target in get_data :
269
+ for node in get_data [target ]:
270
+ assert fgen (node ) in test_get_data [target ]
271
+
272
+ ###@pytest.mark.parametrize('frontend', available_frontends(skip=[OMNI]))
273
+ ###def test_parallel_routine_dispatch_synchost(here, frontend):
274
+ ###
275
+ ### source = Sourcefile.from_file(here/'sources/projParallelRoutineDispatch/dispatch_routine.F90', frontend=frontend)
276
+ ### routine = source['dispatch_routine']
277
+ ###
278
+ ### transformation = ParallelRoutineDispatchTransformation()
279
+ ### transformation.apply(source['dispatch_routine'])
280
+ ###
281
+ ### get_data = transformation.get_data
282
+ ###
283
+ ### test_get_data = """
284
+ ###IF (LHOOK) CALL DR_HOOK ('DISPATCH_ROUTINE:CPPHINP:GET_DATA',0,ZHOOK_HANDLE_FIELD_API)
285
+ ###Z_YDMF_PHYS_SURF_GSD_VV_PZ0H => GET_HOST_DATA_RDWR (YDMF_PHYS_SURF%GSD_VV%F_Z0H)
286
+ ###IF (LHOOK) CALL DR_HOOK ('DISPATCH_ROUTINE:CPPHINP:GET_DATA',1,ZHOOK_HANDLE_FIELD_API)
287
+ ###"""
288
+ ###
289
+ ### for node in get_data:
290
+ ### assert fgen(node) in test_get_data
291
+ ###
292
+
293
+ @pytest .mark .parametrize ('frontend' , available_frontends (skip = [OMNI ]))
294
+ def test_parallel_routine_dispatch_synchost (here , frontend ):
295
+
296
+ source = Sourcefile .from_file (here / 'sources/projParallelRoutineDispatch/dispatch_routine.F90' , frontend = frontend )
297
+ routine = source ['dispatch_routine' ]
298
+
299
+ transformation = ParallelRoutineDispatchTransformation ()
300
+ transformation .apply (source ['dispatch_routine' ])
301
+
302
+ synchost = transformation .synchost [0 ]
303
+
304
+ test_synchost = """IF (LSYNCHOST('DISPATCH_ROUTINE:CPPHINP')) THEN
305
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:SYNCHOST', 0, ZHOOK_HANDLE_FIELD_API)
306
+ ZRDG_CVGQ => GET_HOST_DATA_RDWR(YL_ZRDG_CVGQ)
307
+ ZRDG_MU0 => GET_HOST_DATA_RDWR(YL_ZRDG_MU0)
308
+ ZRDG_MU0LU => GET_HOST_DATA_RDWR(YL_ZRDG_MU0LU)
309
+ ZRDG_MU0M => GET_HOST_DATA_RDWR(YL_ZRDG_MU0M)
310
+ ZRDG_MU0N => GET_HOST_DATA_RDWR(YL_ZRDG_MU0N)
311
+ Z_YDCPG_DYN0_CTY_EVEL => GET_HOST_DATA_RDWR(YDCPG_DYN0%CTY%F_EVEL)
312
+ Z_YDCPG_PHY0_XYB_RDELP => GET_HOST_DATA_RDWR(YDCPG_PHY0%XYB%F_RDELP)
313
+ Z_YDVARS_CVGQ_DL => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDL)
314
+ Z_YDVARS_CVGQ_DM => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FDM)
315
+ Z_YDVARS_CVGQ_T0 => GET_HOST_DATA_RDWR(YDVARS%CVGQ%FT0)
316
+ Z_YDVARS_GEOMETRY_GELAM_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GELAM%FT0)
317
+ Z_YDVARS_GEOMETRY_GEMU_T0 => GET_HOST_DATA_RDWR(YDVARS%GEOMETRY%GEMU%FT0)
318
+ Z_YDVARS_Q_DL => GET_HOST_DATA_RDWR(YDVARS%Q%FDL)
319
+ Z_YDVARS_Q_DM => GET_HOST_DATA_RDWR(YDVARS%Q%FDM)
320
+ Z_YDVARS_Q_T0 => GET_HOST_DATA_RDWR(YDVARS%Q%FT0)
321
+ Z_YDVARS_U_T0 => GET_HOST_DATA_RDWR(YDVARS%U%FT0)
322
+ Z_YDVARS_V_T0 => GET_HOST_DATA_RDWR(YDVARS%V%FT0)
323
+ Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => GET_HOST_DATA_RDWR(YDMF_PHYS_SURF%GSD_VF%F_Z0F)
324
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:SYNCHOST', 1, ZHOOK_HANDLE_FIELD_API)
325
+ ENDIF
326
+ """
327
+ assert fgen (synchost .condition ) in test_synchost
328
+ for node in synchost .body :
329
+ assert fgen (node ) in test_synchost
330
+
331
+ @pytest .mark .parametrize ('frontend' , available_frontends (skip = [OMNI ]))
332
+ def test_parallel_routine_dispatch_nullify (here , frontend ):
333
+
334
+ source = Sourcefile .from_file (here / 'sources/projParallelRoutineDispatch/dispatch_routine.F90' , frontend = frontend )
335
+ routine = source ['dispatch_routine' ]
336
+
337
+ transformation = ParallelRoutineDispatchTransformation ()
338
+ transformation .apply (source ['dispatch_routine' ])
339
+
340
+ nullify = transformation .nullify
341
+
342
+ test_nullify = """
343
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:NULLIFY', 0, ZHOOK_HANDLE_FIELD_API)
344
+ ZRDG_CVGQ => NULL()
345
+ ZRDG_MU0 => NULL()
346
+ ZRDG_MU0LU => NULL()
347
+ ZRDG_MU0M => NULL()
348
+ ZRDG_MU0N => NULL()
349
+ Z_YDCPG_DYN0_CTY_EVEL => NULL()
350
+ Z_YDCPG_PHY0_XYB_RDELP => NULL()
351
+ Z_YDVARS_CVGQ_DL => NULL()
352
+ Z_YDVARS_CVGQ_DM => NULL()
353
+ Z_YDVARS_CVGQ_T0 => NULL()
354
+ Z_YDVARS_GEOMETRY_GELAM_T0 => NULL()
355
+ Z_YDVARS_GEOMETRY_GEMU_T0 => NULL()
356
+ Z_YDVARS_Q_DL => NULL()
357
+ Z_YDVARS_Q_DM => NULL()
358
+ Z_YDVARS_Q_T0 => NULL()
359
+ Z_YDVARS_U_T0 => NULL()
360
+ Z_YDVARS_V_T0 => NULL()
361
+ Z_YDMF_PHYS_SURF_GSD_VF_PZ0F => NULL()
362
+ IF (LHOOK) CALL DR_HOOK('DISPATCH_ROUTINE:CPPHINP:NULLIFY', 1, ZHOOK_HANDLE_FIELD_API)
363
+ """
364
+
365
+ for node in nullify :
366
+ assert fgen (node ) in test_nullify
0 commit comments