FreeCAD Logo FreeCAD 1.0
  • Anglais Afrikaans Arabe Biélorusse Catalan Tchèque Allemand Grec Espagnol Espagnol Basque Finnois Philippin Français Galicien Croate Hongrois Indonésien Italien Japonais Kabyle Coréen Lituanien Néerlandais Norvégien classique Polonais Portugais Portugais Roumain Russe Slovaque Slovène Serbe Suédois Turc Ukrainien Valencien Vietnamien Chinois Chinois
  • Fonctions
  • Télécharger
  • Blog
  • Documentation
    Index de la documentation Premiers pas Documentation pour les utilisateurs Manuel de FreeCAD Documentation des ateliers Documentation sur le codage en Python Documentation pour les développeurs Tutoriels Foire aux questions Politique de confidentialité À propos de FreeCAD
  • Contribuer
    Comment aider Sponsor Signaler un bogue Faire une demande de modification (PR) Emplois et financements Guide pour les contributions Manuel pour les développeurs Traductions
  • Communauté
    Code de conduite Forum The FPA GitHub GitLab Codeberg Mastodon Matrix IRC IRC via Webchat Gitter Discord Reddit Twitter Facebook LinkedIn Calendrier
  • ♥ Donate

Donate

$
Informations SEPA
Veuillez configurer votre virement bancaire SEPA pour:
Beneficiary: The FreeCAD project association
IBAN: BE04 0019 2896 4531
BIC/SWIFT: GEBABEBBXXX
Agence bancaire: BNP Paribas Fortis
Adresse: Rue de la Station 64, 1360 Perwez, Belgium

While Stripe doesn't support monthly donations, you can still become a sponsor! Simply make a one-time donation equivalent to 12 months of support, and you'll gain access to the corresponding sponsoring tier. It's an easy and flexible way to contribute.

If you are not sure or not able to commit to a regular donation, but still want to help the project, you can do a one-time donation, of any amount.

Choose freely the amount you wish to donate one time only.

You can support FreeCAD by sponsoring it as an individual or organization through various platforms. Sponsorship provides a steady income for developers, allowing the FPA to plan ahead and enabling greater investment in FreeCAD. To encourage sponsorship, we offer different tiers, and unless you choose to remain anonymous, your name or company logo will be featured on our website accordingly.

from 1 USD / 1 EUR per month. You will not have your name displayed here, but you will have helped the project a lot anyway. Together, normal sponsors maintain the project on its feet as much as the bigger sponsors.

from 25 USD / 25 EUR per month. Your name or company name is displayed on this page.

from 100 USD / 100 EUR per month. Your name or company name is displayed on this page, with a link to your website, and a one-line description text.

from 200 USD / 200 EUR per month. Your name or company name and logo displayed on this page, with a link to your website and a custom description text. Companies that have helped FreeCAD early on also appear under Gold sponsors.

Instead of donating each month, you might find it more comfortable to make a one-time donation that, when divided by twelve, would give you right to enter a sponsoring tier. Don't hesitate to do so!

Choose freely the amount you wish to donate each month.

Please inform your forum name or twitter handle as a notein your transfer, or reach to us, so we can give you proper credits!

Tutoriel
Thème
Ajouter des équations FEM
Niveau
Avancé
Temps d'exécution estimé
1 jour
Auteurs
JohnWang
Version de FreeCAD
0.19
Fichiers exemples
None
Voir aussi
None

Introduction

Dans ce tutoriel, nous allons ajouter l'équation de flux à FreeCAD et implémenter le support pour le solveur Elmer. Assurez-vous d'avoir lu et compris Module d'extension FEM avant de lire ce tutoriel.

La tâche peut être divisée en quatre parties:

  • La première étape consiste à informer l'atelier de travail FEM d'un nouveau type d'équation. Cette étape ne doit être effectuée que si l'équation n'existe pas encore dans FreeCAD (par opposition à une équation qui est déjà dans FreeCAD mais qui n'est pas prise en charge par le solveur cible).
  • La deuxième étape consiste à ajouter un objet document représentant l’équation spécifique d’Elmer.
  • La troisième étape consiste à ajouter la prise en compte de la nouvelle équation dans le solveur d'Elmer.
  • Après cela, l'exportation d'analyse sous Elmer doit être étendue pour prendre en charge le nouveau type d'équation.

Ajout d'un nouveau type d'équation

Dans cette étape, nous allons modifier le fichier suivant:

  • src/Mod/Fem/femsolver/equationbase.py

Le type d'équation est partagé entre tous les objets équation des différents solveurs. Chaque type a un spécificateur de chaîne (par exemple, "Heat") et une commande dédiée qui ajoute l'équation au solveur sélectionné. Cela permet une interface graphique plus simple où nous n'avons qu'un seul bouton pour l'équation de chaleur qui est utilisé pour tous les solveurs supportés.

Tout d'abord, ajoutez la nouvelle équation au module equationbase.py. Chaque équation nécessite deux classes. Un proxy de document et un proxy de vue. Ces deux classes seront utilisées plus tard comme classes de base pour les classes d'équation spécifiques à Elmer. Il suffit de les copier-coller depuis un type d'équation existant et d'ajuster le chemin de l'icône dans getIcon(self) du proxy d'affichage.

class FlowProxy(BaseProxy):
    pass

class FlowViewProxy(BaseViewProxy):
    def getIcon(self):
        return ":/icons/FEM_EquationFlow.svg"

L'objet équation d'Elmer

Dans cette étape, nous allons modifier le fichier suivant:

  • src/Mod/Fem/femsolver/elmer/equations/flow.py

et ajoutez le nouveau fichier suivant:

  • src/Mod/Fem/ObjectsFem.py
  • src/Mod/Fem/CMakeLists.txt

Commençons par le module qui implémente l'objet document. Il peut être copié à partir d'une équation existante.

  • Si la nouvelle équation ne prend en charge que les mots-clés des systèmes linéaires, copiez le module femsolver/elmer/equations/elasticity.py.
  • S'il prend également en charge les mots-clés non linéaires, copiez femsolver/elmer/equations/heat.py.

L'équation de l'écoulement dans Elmer est une équation potentiellement non linéaire. Cela signifie que nous allons focaliser notre travail sur heat.py.

Mots-clés

  • Si la nouvelle équation ne supporte que les mots-clés pour les systèmes "linéaires", copiez le module femsolver/elmer/equations/elasticity.py.
  • Si la nouvelle équation supporte les mots-clés pour les systèmes linéaires et non linéaires, copiez le module femsolver/elmer/equations/heat.py.

L'équation du flux dans Elmer est une équation potentiellement non linéaire. Cela signifie que nous allons baser notre travail sur heat.py.

Modification des fichiers

Après avoir copié heat.py dans flow.py, ajustez

  • l’argument name de la fonction create module,
  • l’attribut Type de la classe Proxy
  • les classes de base des classes Proxy et ViewProxy
  • ainsi que les propriétés ajoutées via la fonction obj.addProperty(..) à ceux requis par l'équation.
def create(doc, name="'''Flow'''"):
    return femutils.createObject(
        doc, name, Proxy, ViewProxy)

class Proxy(nonlinear.Proxy, equationbase.'''Flow'''Proxy):

    Type = "Fem::EquationElmer'''Flow'''"

    def __init__(self, obj):
        super(Proxy, self).__init__(obj)
        obj.Priority = 10

class ViewProxy(nonlinear.ViewProxy, equationbase.'''Flow'''ViewProxy):
    pass

Ensuite, vous devez changer les propriétés ajoutées via la fonction obj.addProperty(..) pour celles nécessaires à l'équation.

Au moment de la rédaction de ce tutoriel, l'équation de flux Elmer n'a aucunes propriétés particulières. Voir l'équation d'élasticité d'Elmer pour un exemple avec des propriétés.

Enfin, il faut enregistrer une définition de makeEquationStatcurrent dans ObjectsFem.py en dupliquant une entrée disponible.

FreeCAD utilise make pour compiler le programme. Nous devons donc enregistrer le nouveau fichier de module (flow.py) dans src/Mod/Fem/CMakeLists.txt de la manière décrite dans FEM Module d'extension. Les listes appropriées peuvent être facilement trouvées en recherchant les fichiers de modules d'équation existants d'Elmer.

Extension de l'objet du solveur

Dans cette étape, nous allons modifier le fichier suivant:

  • src/Mod/Fem/femsolver/elmer/solver.py

À l'heure actuelle, nous avons informé FreeCAD qu'il existe un nouveau type d'équation et nous avons même ajouté une commande qui ajoute cette équation à l'objet solveur sélectionné. Nous avons également implémenté un objet d'équation concret pour Elmer. Que reste-t-il à faire maintenant pour faire le lien entre Elmer et l'équation de débit. Cela doit être fait directement dans l'objet solveur Elmer.

Enregistrez le module dans lequel nous venons d'implémenter notre nouvel objet équation (flow.py) avec le spécificateur d'équation de l'étape 1 ("Flow") dans la liste _EQUATIONS dans elmer/solver.py.

from .equations import electrostatic
+from .equations import flow

...

_EQUATIONS = {
    "Heat": heat,
    "Elasticity": elasticity,
+    "Flow": flow,
}

Extension de l'analyse à l'export

Dans cette étape, nous allons modifier le fichier suivant:

  • src/Mod/Fem/femsolver/elmer/writer.py

C'est la partie la plus exigeante de la mise en œuvre d'une nouvelle équation. Ce fichier contient la classe Writer qui exporte l'analyse au format sif d'Elmer.

Pour chaque équation prise en charge, il existe une série de méthodes gérant l'exportation de l'équation respective. Copiez-les simplement à partir d'une équation existante et ajustez-les à vos besoins. Notre équation de flux utilise les méthodes suivantes:

  • _getFlowSolver
  • _handleFlow

Vous devez enregistrer la méthode _handleFlow dans la classe Writer :

class Writer(object):
...
    def write(self):
...
        self._handleFlow()

...

_handleFlow peut contrôler une série d'autres méthodes détaillées. Notre équation de flux utilise les méthodes détaillées suivantes :

  • _handleFlowConstants
  • _handleFlowMaterial
  • _handleFlowInitialVelocity
  • _handleFlowBndConditions
  • _handleFlowEquation

Nous avons maintenant terminé la partie fonction de la nouvelle équation. Ensuite, nous allons connecter la nouvelle équation à travers l'interface graphique.

Outil de l'interface graphique pour créer une équation

Nous venons de créer une nouvelle classe d'équation. Pour y accéder depuis l'interface graphique FEM, nous devons créer un bouton et le lier à la nouvelle classe d'équation. Voici un tutoriel : Tutoriel Ajouter un bouton à la barre d'outils FEM.

Cette page est extraite de https://wiki.freecad.org/Add_FEM_Equation_Tutorial

Contactez-nous !
Forum GitHub Mastodon Matrix IRC Gitter.im Discord Reddit Twitter Facebook LinkedIn

© L'équipe FreeCAD. Crédits des images de la page d'accueil (de haut en bas) : ppemawm, r-frank, epileftric, regis, rider_mortagnais, bejant.

Ce projet est soutenu par : , KiCad Services Corp. et autres parrains

GitHubAméliorer cette page sur GitHub