2.4. Quadratures#
2.4.1. Rappel#
Certaines intégrales ne peuvent être calculées analytiquement et devront être approchées numériquement via des règles de quadrature. Prenons pour exemple d’une fonction
Les poids
Les fonctions
2.4.2. Méthodes et fonctions utiles#
Pour chaque type d’élément, Triangle
ou Segment
, nous avons besoin de méthodes permettant d’obtenir les quantités suivantes: :
Les poids des points de quadrature
Les coordonnées paramétriques des points de quadrature
Les coordonnées physiques des points de quadrature
Les valeurs des fonctions de forme de référence
sur des coordonnées paramétriques
Remarquez que les points 1, 2 ne dépendent que du type de l’élément considéré.
Exercise 2.5
Afin de bien compartimenter chaque fonctionnalité, nous proposons :
Ajouter aux classes
Triangle
etSegment
la méthodedef gaussPoint(self,order=2):
qui retourne, dans le format de votre choix, les poids, les coordonnées paramétriques et les coordonnées physiques des points de Gauss de l’élement considéré et pour une précisionorder
. Vous aurez sans doute besoin de méthodes intermédiaires pour calculer, par exemple les .Ajouter une fonction
def phiRef(element, i:int, param:[float]):
qui calcule sur un élémentSegment
ouTriangle
. L’argumentparam
est une liste des coordonnées paramétriques ( pour un triangle, pour un segment))
2.4.3. Intégrale#
Construisez maintenant une fonction de prototype suivant
def Integrale(msh:Mesh, dim:int, physical_tag:int, f, B:np.array, order=2):
Cette fonction calcul l’intégrale physical_tag
et de dimension dim
. Le résultat est alors ajouté dans B[I]
(voir (2.7)). L’argument f
sera une fonction décrite par l’utilisatrice/utilisateur, elle prendra 2 arguments, x
et y
et retournera un scalaire correspondant à