Add FEM Equation Tutorial/fr

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 les fichiers suivants: Le type d'équation est partagé par tous les objets d'équation des différents solveurs. Chaque type a un spécificateur de chaîne (par exemple &quot;Heat&quot;) et une commande dédiée qui ajoute l'équation au solveur sélectionné. Cela permet une interface graphique plus simple dans laquelle nous n’avons qu’un bouton pour l’équation de la chaleur utilisée par tous les solveurs supportés.
 * src/Mod/Fem/femsolver/equationbase.py
 * src/Mod/Fem/femcommands/commands.py
 * src/Mod/Fem/Gui/Workbench.cpp
 * src/Mod/Fem/Gui/Resources/Fem.qrc

Ajoutez d’abord la nouvelle équation au module. Chaque équation nécessite deux classes. Un proxy document et un proxy vue. Copiez-les simplement à partir d'un type d'équation existant et ajustez le chemin de l'icône à l'intérieur de getIcon(self) du proxy vue. class FlowProxy(BaseProxy): pass

class FlowViewProxy(BaseViewProxy): def getIcon(self): return &quot;:/icons/FEM_EquationFlow.svg&quot;

Ces deux classes seront ensuite utilisées comme classes de base pour les classes d'équations spécifiques d'Elmer. En plus de ces classes de base, nous devons créer une nouvelle classe de commandes qui ajoute une équation de flux à l'objet solveur sélectionné. De plus, la nouvelle image .svg doit être enregistrée pour le bouton GUI avec dans  (dans ). Le fichier .svg associé doit être placé dans.

Ensuite, la commande/l'équation doit être ajoutée au module. Copiez simplement une commande existante et ajustez l'icône, le texte du menu et l'info-bulle dans __init __ (auto). N'oubliez pas d'enregistrer la commande au bas du fichier de module en utilisant la méthode addCommand(...). Veuillez consulter la discussion sur le forum à https://forum.freecadweb.org/viewtopic.php?f=18&t=46693&start=10#p402004 si des icônes sont impliquées. class _EquationFlow(CommandManager): "The FEM_EquationFlow command definition"

def __init__(self): super(_EquationFlow, self).__init__ self.menuetext = "Flow equation" self.tooltip = "Creates a FEM equation for flow" self.is_active = "with_solver_elmer" self.do_activated = "add_obj_on_gui_selobj_noset_edit" ... FreeCADGui.addCommand(   "FEM_EquationFlow",    _EquationFlow )

Notre commande nouvellement créée doit toujours être accessible via l'interface graphique de l'atelier de travail FEM. Pour l'ajouter à la barre d'outils, recherchez le bout de code suivant dans et ajoutez la nouvelle commande au reste des commandes d'équation. Gui::ToolBarItem* solve = new Gui::ToolBarItem(root); solve->setCommand("Solve"); *solve << "FEM_SolverCalculixCxxtools" << "FEM_SolverCalculiX" << "FEM_SolverElmer" << "Separator" << "FEM_EquationElasticity" << "FEM_EquationElectrostatic" +         << "FEM_EquationFlow" << "FEM_EquationFluxsolver" << "FEM_EquationElectricforce" << "FEM_EquationHeat" << "Separator" << "FEM_SolverControl" << "FEM_SolverRun"; Nous allons également ajouter la commande d’équation de flux au menu de résolution de l'atelier FEM. Pour ce faire, insérez notre équation dans l'extrait de code suivant dans. Gui::MenuItem* solve = new Gui::MenuItem; root->insertItem(item, solve); solve->setCommand("&Solve"); *solve << "FEM_SolverCalculixCxxtools" << "FEM_SolverCalculiX" << "FEM_SolverElmer" << "FEM_SolverZ88" << "Separator" << "FEM_EquationElasticity" << "FEM_EquationElectrostatic" +         << "FEM_EquationFlow" << "FEM_EquationFluxsolver" << "FEM_EquationElectricforce" << "FEM_EquationHeat" << "Separator" << "FEM_SolverControl" << "FEM_SolverRun";

L'objet équation d'Elmer
Dans cette étape, nous allons modifier le fichier suivant: et ajoutez le nouveau fichier suivant: Commençons par le module qui implémente l'objet document. Il peut être copié à partir d'une équation existante. L'équation de l'écoulement dans Elmer est une équation potentiellement non linéaire. Cela signifie que nous allons focaliser notre travail sur.
 * src/Mod/Fem/CMakeLists.txt
 * src/Mod/Fem/femsolver/elmer/equations/flow.py
 * Si la nouvelle équation ne prend en charge que les mots-clés des systèmes linéaires, copiez le module.
 * S'il prend également en charge les mots-clés non linéaires, copiez.

Après avoir copié dans, ajustez def create(doc, name=&quot;Flow&quot;): return femutils.createObject(       doc, name, Proxy, ViewProxy)
 * l’argument name de la fonction create module,
 * l’attribut Type de la classe Proxy
 * les classes de base des classes et
 * ainsi que les propriétés ajoutées via la fonction à ceux requis par l'équation.

class Proxy(nonlinear.Proxy, equationbase.FlowProxy):

Type = &quot;Fem::EquationElmerFlow&quot;

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

class ViewProxy(nonlinear.ViewProxy, equationbase.FlowViewProxy): pass

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 et surtout, enregistrez le nouveau fichier de module dans les deux fichiers  comme décrit dans Module d'extension FEM. Les listes appropriées peuvent être facilement trouvées en recherchant les fichiers de modules d’équations existants d’Elmer.

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

Extension de l'objet du solveur
Dans cette étape, nous allons modifier le fichier suivant: À 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.
 * src/Mod/Fem/femsolver/elmer/solver.py

Enregistrez le module dans lequel nous venons d'implémenter notre nouvel objet équation avec le spécificateur d'équation de l'étape 1 (&quot;Flow&quot;) dans la liste  dans. from .equations import electrostatic +from .equations import flow

...

_EQUATIONS = { &quot;Heat&quot;: heat, &quot;Elasticity&quot;: elasticity, +   &quot;Flow&quot;: flow, }

Extension de l'analyse à l'export
Dans cette étape, nous allons modifier le fichier suivant: C'est la partie la plus exigeante de la mise en œuvre d'une nouvelle équation. Ce fichier contient la classe qui exporte l'analyse au format sif d'Elmer.
 * src/Mod/Fem/femsolver/elmer/writer.py

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:
 * _handleFlow
 * _getFlowSolver
 * _handleFlowConstants
 * _handleFlowMaterial
 * _handleFlowInitialVelocity
 * _handleFlowBndConditions
 * _handleFlowEquation