diff --git a/pytential/qbx/refinement.py b/pytential/qbx/refinement.py index 829e706c481227bbc49b3e524094555cb1f541b8..5e1afca22e24766ec76510e78072f30b09d9f70f 100644 --- a/pytential/qbx/refinement.py +++ b/pytential/qbx/refinement.py @@ -144,8 +144,8 @@ EXPANSION_DISK_UNDISTURBED_BY_SOURCES_CHECKER = AreaQueryElementwiseTemplate( if (is_close) { - panel_refine_flags[center_panel] = 1; - *found_panel_to_refine = 1; + atomic_or(&panel_refine_flags[center_panel], 1); + atomic_or(found_panel_to_refine, 1); break; } } @@ -203,8 +203,8 @@ SUFFICIENT_SOURCE_QUADRATURE_RESOLUTION_CHECKER = AreaQueryElementwiseTemplate( if (is_close) { - panel_refine_flags[my_panel] = 1; - *found_panel_to_refine = 1; + atomic_or(&panel_refine_flags[my_panel], 1); + atomic_or(found_panel_to_refine, 1); break; } } @@ -252,10 +252,14 @@ class RefinerCodeContainer(TreeCodeContainerMixin): <> over_threshold = element_property[ielement] > threshold if over_threshold refine_flags[ielement] = 1 - refine_flags_updated = 1 {id=write_refine_flags_updated} + refine_flags_updated = 1 {id=write_refine_flags_updated, atomic} end end """, + [ + lp.GlobalArg("refine_flags_updated", shape=(), for_atomic=True), + "..." + ], options="return_dict", silenced_warnings="write_race(write_refine_flags_updated)", name="refine_kernel_length_scale_to_quad_resolution_ratio", diff --git a/pytential/qbx/target_assoc.py b/pytential/qbx/target_assoc.py index d8f32f54fd9e72e8d3fdadd6612a2087ef839ecf..27658c8a7043d27e2a9f520da9ca1cec4c2214fe 100644 --- a/pytential/qbx/target_assoc.py +++ b/pytential/qbx/target_assoc.py @@ -208,7 +208,7 @@ QBX_TARGET_MARKER = AreaQueryElementwiseTemplate( <= tunnel_radius_by_source[source]) { target_status[i] = MARKED_QBX_CENTER_PENDING; - *found_target_close_to_panel = 1; + atomic_or(found_target_close_to_panel, 1); } } """, @@ -401,8 +401,8 @@ QBX_FAILED_TARGET_ASSOCIATION_REFINER = AreaQueryElementwiseTemplate( { particle_id_t panel = bsearch( panel_to_source_starts, npanels + 1, source); - refine_flags[panel] = 1; - *found_panel_to_refine = 1; + atomic_or(&refine_flags[panel], 1); + atomic_or(found_panel_to_refine, 1); } } """,