@@ -138,19 +138,6 @@ def test_parallel_routine_dispatch_derived_var(here, frontend):
138138 transformation .apply (source ['dispatch_routine' ])
139139
140140
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(:, :, :)"]
154141 test_map = {
155142 "YDVARS%GEOMETRY%GEMU%T0" : ["YDVARS%GEOMETRY%GEMU%FT0" , "Z_YDVARS_GEOMETRY_GEMU_T0" ],
156143 "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):
173160
174161 assert test_map [var_name ][0 ] == field_ptr .name
175162 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