Skip to content

Niveaux de detail des audits

Les audits blancs du solveur exposent trois niveaux explicites. Le niveau choisi ne modifie ni l'assemblage, ni la resolution, ni les resultats numeriques : il controle uniquement la representation de l'audit et de son export Markdown.

API Python

from qf_solver import inspect_model, save_audit_markdown

audit = inspect_model(model, detail="diagnostic")
save_audit_markdown(audit, "audit.md", detail="diagnostic")
Niveau Usage Contenu
summary rapport analyseur par defaut synthese, compteurs PASS/WARNING/FAIL, maillage/DDL/materiaux, matrices globales, equilibre, tous les WARNING/FAIL ; les PASS elementaires sont omis
diagnostic analyse recommandee summary plus agregats min/max/moyenne, statistiques par type d'element, matrices, contraintes, resultats/stresses, residus et worst-N
values debug/forensic representation exhaustive historique, incluant DDL locaux, entrees d'assemblage, matrices et controles individuels

Les objets internes restent reproductibles et les controles WARNING/FAIL ne sont jamais supprimes par un export compact. En cas de modele invalide, le detail demande est conserve dans l'audit partiel.

Export Markdown et protection de taille

save_audit_markdown() accepte :

save_audit_markdown(
    result_or_audit,
    "audit.md",
    detail="values",
    max_pass_rows=500,
    values_warning_rows=100_000,
)

max_pass_rows s'applique uniquement aux lignes PASS de l'export Markdown. Les WARNING et FAIL restent toujours presents. L'objet SolverAudit en memoire et son export JSON ne sont pas tronques.

Le mode values estime le volume de sortie avant rendu. Au-dessus de values_warning_rows (100 000 par defaut), l'export ajoute un avertissement explicite ; il n'y a pas de troncature silencieuse. La croissance est de l'ordre de O(N_elements x controles) et peut donc produire des centaines de milliers ou millions de lignes sur un grand maillage.

Le meme seuil est disponible sur inspect_model(..., detail="values", values_warning_rows=...). Dans ce cas l'estimation et l'avertissement sont conserves dans audit.diagnostic et audit.notes; ils ne changent pas les valeurs internes.

CLI equivalent :

qf-solver inspect --input model.json --detail diagnostic --markdown audit.md
qf-solver inspect --input model.json --detail values \
  --max-pass-rows 500 --values-warning-rows 100000

Exemple grand modele

Pour le cas de reference d'environ 60 000 TET4 et 36 663 DDL, l'ancien values a produit un result_audit.md de plus de 2 millions de lignes et environ 273 Mo. Le nouveau chemin recommande diagnostic : il conserve les compteurs globaux, les deux warnings d'equilibre observes, les agregats de qualite/matrices/resultats et les worst-N, sans materialiser le dump PASS par element. Le mode values reste disponible pour reproduire le forensic et emet désormais une alerte de taille avant l'ecriture.

Le gain exact de taille/temps depend de la distribution des post-resultats et doit etre mesure sur le fichier de reference ; aucune valeur synthetique n'est presentee comme une mesure de solveur.

Mesure de non-regression de l'export sur une forme synthetique de meme ordre (60 000 elements, 240 000 controles, 60 000 post-resultats, sans resolution) :

Export Lignes Taille Temps de rendu
values 360 061 23,4 MB 0,911 s
diagnostic 84 1 550 octets 0,002 s
summary 54 1 029 octets < 0,001 s

Cette mesure valide la propriete de croissance de l'export, pas la performance de l'assemblage FEM. Le chiffre historique de 273 Mo / plus de 2 millions de lignes reste la reference avant modification pour le cas reel fourni.

Seuils d'equilibre

Les seuils existants restent inchanges :

relative_error <= 1e-10 : PASS
1e-10 < relative_error <= 1e-8 : WARNING
relative_error > 1e-8 : FAIL

Les erreurs de force et de moment sont deja normalisees par une echelle relative max(norm(externe), norm(reaction), 1). Cette normalisation retire la dependance directe a l'unite et a l'amplitude du chargement ; elle ne supprime toutefois pas l'effet de l'accumulation flottante et de l'ordre de sommation sur les grands systemes. Ainsi, des valeurs de l'ordre de 1.7e-10 et 1.2e-10 restent correctement classees WARNING dans le cas 60k TET4, sans etre transformees en PASS par le seul fait que le modele est grand.

Une evolution vers un seuil dimensionnel ou dependante de N ne doit pas etre appliquee sans campagne numerique comparative. Elle devrait comparer des calculs de reference a plusieurs tailles, ordres d'assemblage et niveaux de conditionnement, puis conserver un plancher absolu et une borne relative fail-closed. Cette livraison ne modifie donc pas les criteres de qualification.