Python: интеграл поверхности по сетке

#python #integration #numeric #trimesh

Вопрос:

Вопрос

Как я могу вычислить интеграл поверхности от указанной функции внешней поверхности сетки в python?

Код

Я попытался создать минимально работоспособный пример. В этом примере я пытаюсь вычислить площадь поверхности блока, которую я определяю с помощью trimesh.

введите описание изображения здесь

Я вычисляю площадь поверхности только потому, что ее можно легко проверить с помощью пакета trimesh ( mesh.area ), но в будущем у меня будут гораздо более сложные функции, поэтому я не могу использовать встроенный trimesh.integrate .

Вот почему я обратился к quadpy для поверхностной интеграции.

Вот код:

 import numpy as np
import quadpy
import trimesh


# CREATE THE BOX
# object (box)
box = trimesh.creation.box(extents=[0.3, 0.3, 0.3])

# show
box.show(viewer='gl')


# SURFACE INTEGRATION 

# 1 GET TRIANGLES of trimesh mesh object
triangles = box.triangles
# 2 SHAPE the triangles array into the shape accepted by quadpy
# trimesh -> (num_traingles, corners, xyz coordinates)
# quadpy ->  (corners, num_triangles, xyz_coords)
triangles_re = np.reshape(triangles,(
                       np.shape(triangles)[1],
                       np.shape(triangles)[0],
                       np.shape(triangles)[2])
                 )
# 3 DEFINE INTEGRATION FUNCTION 
def f(x):
    # -> get area of surface Integral[1, Area] = Area
    return np.ones(np.shape(x))

sol, error_estimate = quadpy.t2.integrate_adaptive(f, triangles_re,  1.0e-10)
 

Issue

I am getting the following error:

 assert all(areas > minimum_triangle_area)
 

AssertionError