Aller au contenu

2 · Composition de fonctions

  • Tu as terminé le chapitre 1 (ou tu as importé le .workflow.yaml correspondant).
  • Le package eurocode-1-1-4 (version ≥ 0.3.2) est déployé.

À la fin de ce chapitre, tu sauras :

  • Ajouter un deuxième nœud fonction à un workflow existant.
  • Partager un Input ou un Constant entre plusieurs fonctions (DRY).
  • Utiliser un operator natif (multiply) pour combiner deux ports typés.
  • Profiter de l’inférence dimensionnelle : MecaPy déduit automatiquement le type de sortie à partir des dimensions SI des opérandes (Force×Length=Moment\text{Force} \times \text{Length} = \text{Moment}).
  • Déclarer plusieurs sorties sur un même workflow.

Notre panneau de signalisation est exposé au vent réglementaire calculé au ch01. La norme §7.4.3 donne la force horizontale résultante :

Fw  =  cscd    cf    qp(ze)    ArefF_w \;=\; c_s c_d \;\cdot\; c_f \;\cdot\; q_p(z_e) \;\cdot\; A_\text{ref}

où :

  • Aref=bhA_\text{ref} = b \cdot h est l’aire du panneau,
  • cf=1,80c_f = 1{,}80 est imposé par la norme pour un panneau isolé du sol (zg>h/4z_g > h/4),
  • ze=zg+h/2z_e = z_g + h/2 est la hauteur de référence (centre du panneau),
  • cscd=1,0c_s c_d = 1{,}0 par défaut (structures < 15 m, §6.2(1)(a)).

La fonction Fw_signboard du package eurocode-1-1-4 fait tout ça d’un coup et renvoie aussi le moment de torsion M=FweM = F_w \cdot e avec e=0,25be = 0{,}25 \cdot b (excentricité worst-case §7.4.3).

Pour le moment de flexion au pied du poteau, on multiplie la force horizontale par son bras de levier :

Mbase  =  Fw    zeM_\text{base} \;=\; F_w \;\cdot\; z_e

C’est là qu’intervient l’operator natif multiply — pas besoin de re-coder un handler Python pour une multiplication scalaire.

Pour notre panneau :

  • b=3,00 mb = 3{,}00\ \text{m} (largeur)
  • h=2,00 mh = 2{,}00\ \text{m} (hauteur)
  • zg=2,40 mz_g = 2{,}40\ \text{m} (bord inférieur au-dessus du sol)

ze=3,40 mz_e = 3{,}40\ \text{m} (cohérent avec le ch01), Aref=6,00 m2A_\text{ref} = 6{,}00\ \text{m}^2.

Résultats attendus :

GrandeurValeurUnité
qp(ze)q_p(z_e)≈ 722Pa
FwF_w≈ 7,80kN
MtorsionM_\text{torsion}≈ 5,85kN·m
MbaseM_\text{base}≈ 26,5kN·m
  1. Repartir du workflow ch01

    Ouvre le workflow du chapitre 1 (ou importe le .workflow.yaml de référence si tu pars de zéro). Tu devrais voir : le nœud qp, les 3 inputs qp.vb_0 / qp.z / qp.terrain, la constante rho, et le nœud output.

    Canvas avec le workflow ch01 ré-ouvert

  2. Ajouter le nœud fonction Fw_signboard

    Clic droit sur une zone libre du canvas → Add function node. Dans le picker :

    • Package : eurocode-1-1-4
    • Version : 0.3.2
    • Function : Fw_signboard

    Le nœud apparaît avec ses 11 ports d’entrée (7 que tu connais déjà depuis qp + 4 nouveaux : b, h, z_g, c_scd) et ses 9 ports de sortie (FwF_w, MM, ee, zez_e, ArefA_\text{ref}, cfc_f, cscdc_{scd}, qp(ze)q_p(z_e), vbv_b, qbq_b — la chaîne §4 est ré-évaluée en interne).

    Nœud Fw_signboard ajouté à droite de qp

  3. Partager les inputs déjà existants

    Le nœud Fw_signboard réclame vb_0, terrain, rho — qu’on a déjà côté qp. Plutôt que de créer 3 nouveaux Input/Constant, on branche les nœuds existants sur les ports correspondants du nouveau nœud.

    Tire un fil :

    • de qp.vb_0 (output value) vers Fw_signboard.vb_0
    • de qp.terrain (output value) vers Fw_signboard.terrain
    • de rho (output value) vers Fw_signboard.rho

    Un même Input/Constant peut alimenter plusieurs ports — c’est la garantie qu’on calcule qpq_p et FwF_w avec les mêmes valeurs physiques.

    3 edges partagés depuis qp inputs vers Fw_signboard

  4. Créer les 3 nouveaux inputs depuis les ports

    Pour b, h, z_g (qui n’ont pas d’équivalent côté qp), on utilise le geste port-drop du ch01 : clic sur le port d’entrée, drag jusqu’à une zone vide du canvas, relâche → popup → Add input.

    PortTypeLabel auto-rempli
    bLengthFw_signboard.b
    hLengthFw_signboard.h
    z_gLengthFw_signboard.z_g

    Le port c_scd reste non-connecté — il a une valeur par défaut de 1.0 dans le manifest (cf. ch01 pour le mécanisme).

    3 nouveaux inputs créés pour b/h/z_g

  5. Ajouter l’operator multiply

    Pour le moment au pied, on multiplie FwF_w par zez_e. Clic droit sur le canvas → Add operator → choisir multiply.

    L’operator a 2 ports d’entrée génériques (a, b) et un port de sortie (result). Connecte :

    • Fw_signboard.Fwmultiply.a
    • Fw_signboard.z_emultiply.b

    Operator multiply ajouté au canvas

    Operator multiply câblé Fw + z_e

  6. Déclarer les 3 outputs

    On veut publier 3 grandeurs au lieu d’une seule. Clic droit canvas → Add output, trois fois :

    OutputSource
    FwFw_signboard.Fw (Force)
    M_torsionFw_signboard.M (Moment)
    M_basemultiply.result (Moment)

    Tu peux conserver le nœud output d’origine pour qpq_p ou le supprimer — selon que tu veux exposer aussi la pression dynamique ou seulement les efforts mécaniques.

    Workflow complet — 3 outputs connectés

  7. Sauvegarder + exécuter

    Save, puis Run en renseignant tous les inputs :

    InputValeur
    qp.vb_026.0
    qp.z3.40
    qp.terrain"II"
    Fw_signboard.b3.00
    Fw_signboard.h2.00
    Fw_signboard.z_g2.40

    Sur la page du run, les 3 sorties :

    Fw7,80 kNMtorsion5,85 kNmMbase26,5 kNm\begin{aligned} F_w &\approx 7{,}80\ \text{kN} \\ M_\text{torsion} &\approx 5{,}85\ \text{kN}\cdot\text{m} \\ M_\text{base} &\approx 26{,}5\ \text{kN}\cdot\text{m} \end{aligned}

    Résultat du run avec les 3 outputs

  • Composition : deux fonctions normatives chaînées dans un même graphe, partageant leurs inputs communs (cohérence garantie).
  • Operator natif : une multiplication scalaire ne nécessite pas de package Python — multiply est évalué dans l’orchestrateur, zéro container.
  • Typage dimensionnel : Fw×zeMF_w \times z_e \to M inféré automatiquement, sans déclaration manuelle.
  • Multi-output : un workflow MecaPy peut publier autant de grandeurs que tu veux ; chaque output devient une clé dans la réponse du run.

📥 Télécharger ch02-force-vent.workflow.yaml

Import via Workflows → Import ; MecaPy résout Fw_signboard par le digest source du package eurocode-1-1-4@0.3.2.

3 · Combinaisons d’actions (à venir) : on introduit les combinaisons ELU/ELS de l’EC0 via l’operator scale (multiplication par les coefficients de pondération γG\gamma_G, γQ\gamma_Q, ψ0\psi_0, …) et on prépare le terrain pour les vérifications EC3.