Skip to content

Global QBX FMM currently fails with multiple groups

Traceback (most recent call last):
  File "helmholtz-dirichlet.py", line 156, in <module>                            
    main()                     
  File "helmholtz-dirichlet.py", line 64, in main                                          
    fmm_order=fmm_order
  File "/home/andreask/src/pytools/pytools/__init__.py", line 488, in wrapper                                
    result = function(obj, *args, **kwargs)                                                                          
  File "/home/andreask/src/pytential/pytential/qbx/__init__.py", line 259, in with_refinement                                                                               
    InterpolatoryQuadratureSimplexGroupFactory(target_order))                                                                                                               
  File "/home/andreask/src/pytential/pytential/qbx/refinement.py", line 724, in __call__                                            
    tree = self.tree_builder(queue, lpot_source)
  File "/home/andreask/src/pytential/pytential/qbx/utils.py", line 214, in __call__                                                                      
    centers = get_interleaved_centers(queue, lpot_source)
  File "/home/andreask/src/pytential/pytential/qbx/utils.py", line 102, in get_interleaved_centers
    int_centers = lpot_source.centers(-1)              
  File "/home/andreask/src/pytools/pytools/__init__.py", line 488, in wrapper
    result = function(obj, *args, **kwargs)                                                                                                       
  File "/home/andreask/src/pytential/pytential/qbx/__init__.py", line 385, in centers
    panel_sizes = self.panel_sizes().with_queue(queue)              
  File "/home/andreask/src/pytools/pytools/__init__.py", line 488, in wrapper
    result = function(obj, *args, **kwargs)                
  File "/home/andreask/src/pytential/pytential/qbx/__init__.py", line 367, in panel_sizes
    discr, group_nr)(panel_sizes))                                                                 
  File "/home/andreask/src/loopy/loopy/kernel/__init__.py", line 1327, in __call__
    return kex(*args, **kwargs)                       
  File "/home/andreask/src/loopy/loopy/target/pyopencl_execution.py", line 745, in __call__
    out_host, **kwargs)                                            
  File "<generated function invoke_compute_size_loopy_kernel>", line 121, in invoke_compute_size_loopy_kernel
ValueError: Argument 'ds' does not allow arrays with offsets. Try passing default_offset=loopy.auto to make_kernel().

Could be as simple as doing what the message suggests. But as that path is currently untested, I'm not going near it. I'll write a group merger instead. This is low priority for now. To reproduce, make a multi-group mesh, e.g. with meshmode.mesh.processing.merge_disjoint_meshes.

cc @mattwala