FR 2946166 A1 20101203 FR 0902605 A 20090529 INRIA 102.FRD Simulateur de circuit électrique amélioré L'invention concerne la simulation des circuits électriques. De nombreux outils ont été développés afin de modéliser les circuits électroniques. Ces outils permettent aux concepteurs de valider leurs dessins avant la production réelle. Parmi ces outils, on distingue les outils de simulation analogique, les outils de simulation numérique, et les outils hybrides. Les outils de simulation numérique sont principalement adaptés à la simulation des composants numériques. Ils fournissent une vue du fonctionnement assez � haut niveau �, et leurs simulations ne permettent de tenir compte des interférences qui peuvent avoir lieu à � bas niveau �, entre les composants analogiques qui réalisent les fonctions numériques. Les outils de simulation analogique sont adaptés à la simulation de circuits à partir de modèles du comportement physique de chacun des composants du circuit. Parmi ces outils, SPICE est le plus utilisé et représente un standard qui est largement répandu. Cependant, les solutions fournies par SPICE, et plus généralement les outils de simulation analogique, dépendent de la convergence de la méthode de Newton-Raphson appliquée à une représentation du circuit concerné. Et la méthode de Newton-Raphson supporte très mal les composants dont les caractéristiques sont non régulières et non linéaires. Il en résulte que, pour des composants aussi simples et basiques qu'une diode, il est nécessaire de recourir à des artefacts de modélisation de ces composants, qui viennent bien évidemment détériorer la qualité de la simulation. Cela est particulièrement mal adapté pour la simulation de circuits de type mixte numérique-analogique, qui comprennent par nature des éléments non réguliers et non linéaires. Les outils hybrides fonctionnent pour leur part en caractérisant un circuit ou une portion de circuit, et en utilisant une simulation analogique ou numérique en fonction de cette caractérisation. Ces outils sont chronophages et peu adaptés à la simulation de circuits électriques dès que ceux-ci commencent à être complexes. D'une manière générale, ces outils ont tendance à combiner les désavantages des outils de simulation numériques et analogiques, sans combiner réellement leurs avantages. L'invention vient améliorer la situation. À cet effet, l'invention propose un simulateur de circuit électrique comprenant : - une bibliothèque, comprenant des composants de circuit, chacun avec des caractéristiques permettant de simuler son comportement, dont certains au moins sont associés à une équation dynamique, et/ou une équation d'entrée/sortie avec une expression de délimitation de domaine définissant les paramètres d'état possibles pour le composant concerné, - un constructeur, agencé pour calculer un modèle d'un circuit, à partir d'une représentation de ce circuit par ses composants et leurs interconnexions, sous la forme d'un triplet de jeux d'équations qui portent respectivement sur les équations dynamiques, les équations d'entrée/sortie et les délimitations de domaine des composants de ce circuit, - un solveur, agencé pour calculer un état postérieur d'un circuit, à partir de son modèle et d'un état antérieur, et - un moteur de simulation, agencé pour appeler le constructeur avec la représentation d'un circuit, et pour exécuter le solveur avec le modèle résultant à partir d'un état initial du circuit, et pour répéter cette exécution à partir du dernier état postérieur calculé jusqu'à remplir une condition portant sur le nombre d'exécutions ou sur le dernier état postérieur calculé. Comme on le verra par la suite, ce simulateur présente de nombreux avantages, dont une mise en équation automatique, et une simulation améliorée des circuits commutés. D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lecture de la description qui suit, tirée d'exemples donnés à titre illustratif et non limitatif, tirés des dessins sur lesquels : - la figure 1 représente une vue schématique d'un simulateur de circuit électrique selon l'invention, - la figure 2 représente un diagramme de fonctionnement général du simulateur de la figure 1, - la figure 3 représente un diagramme de fonctionnement général du constructeur de la figure 1, - la figure 4 représente un exemple de mise en oeuvre d'une partie de la deuxième opération de la figure 3, - la figure 5 représente un exemple de mise en oeuvre d'une autre partie de la deuxième opération de la figure 3, - la figure 6 représente un exemple de mise en oeuvre d'une troisième opération de la figure 3, - la figure 7 représente un exemple de mise en oeuvre d'une opération de la figure 2, - la figure 8 représente une partie d'une opération de la figure 7, - les figures 9 à 13 représentent des mises en oeuvre en exemple de fonctions de la figure 8, - la figure 14 représente un exemple de mise en oeuvre d'une opération de la figure 2, - la figure 15 représente un exemple de mise en oeuvre d'une opération de la figure 2, - la figure 16 une autre mise en oeuvre en exemple d'une fonction de la figure 8, et - la figure 17 représente un circuit dont la simulation par l'outil de l'invention est décrite en exemple. Les dessins et la description ci-après contiennent, pour l'essentiel, des éléments de 30 caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. La présente description est de nature à faire intervenir des éléments susceptibles de protection par le droit d'auteur et/ou le copyright. Le titulaire des droits n'a pas d'objection à la reproduction à l'identique par quiconque du présent document de brevet ou de sa description, telle qu'elle apparaît dans les dossiers officiels. Pour le reste, il réserve intégralement ses droits. En outre, la description détaillée est augmentée de l'Annexe A, qui donne la formulation de certaines formules mathématiques mises en oeuvre dans le cadre de l'invention. Cette Annexe est mise à part dans un but de clarification, et pour faciliter les renvois. Elle est partie intégrante de la description, et pourra donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. La figure 1 représente une vue schématique d'un simulateur de circuit électrique 2 selon l'invention. Le simulateur 2 comprend un constructeur 4, une bibliothèque 6, et un moteur de simulation 8. Le moteur de simulation 8 comprend un réducteur 10 et un mécanisme d'exploration 12. 20 Le constructeur 4 reçoit des données de circuit à simuler 14. Les données 14 comprennent une désignation des composants qui composent le circuit, ainsi que leurs interconnexions dans ce circuit. Les données 14 comprennent également des paramètres de simulation, ainsi qu'un état initial du circuit. Comme on le verra plus bas, cet état initial peut être complet ou partiel. 25 Sur la base des données 14, le constructeur 4 appelle la bibliothèque 6 et récupère les équations et autres caractéristiques pour chacun des composants des données 14. Ensuite, le constructeur 4 calcule une représentation ou modèle 16 du circuit à partir des données tirées de la bibliothèque 6 et des interconnexions des données 14. Le modèle 16 30 est ensuite transmis au moteur de simulation 8, qui va réaliser la simulation à proprement parler du circuit.15 Comme on le verra plus bas, le modèle 16 est une représentation du circuit par un ensemble de vecteurs dans lesquels sont stockés des identifiants de composants, et non leurs valeurs associées. En effet, ces composants peuvent avoir des comportements complexes, que seul le moteur de simulation 8 sera apte à traiter de manière adéquate. Dans un premier temps, le réducteur 10 réalise une discrétisation temporelle du modèle 16, de manière à obtenir un jeu d'équations dont les inconnues sont les paramètres d'état du circuit. 10 Ce jeu d'équations sera ensuite désigné par le terme représentation discrétisée temporellement. Le but de cette discrétisation est de réduire le jeu d'équations dynamiques à un jeu d'équations algébriques mettant en oeuvre les paramètres de simulation à des moments choisis en fonction des paramètres de simulation. 15 Ensuite, le mécanisme 12 part de l'état initial du circuit, et opère par pas de temps pour déterminer les états suivants de ce circuit. Pour cela, à chaque pas de temps, le mécanisme 12 fait varier les paramètres d'état du circuit jusqu'à obtenir une solution qui satisfait à toutes les équations de la représentation discrétisée. 20 Une fois cette solution obtenue, le jeu de paramètres d'état correspondant constitue l'état du circuit courant, et un nouvel état de circuit est calculé de la même manière. Chacun des états de circuit ainsi calculés est renvoyé dans un fichier de résultats 18 pour affichage et/ou post-traitement. 25 Le moteur de simulation 8 s'arrête lorsqu'une condition qui porte sur le temps de simulation, ou sur l'état du circuit est remplie. La figure 2 représente un diagramme de fonctionnement général du simulateur de la figure 1. 30 Dans une opération 20, le simulateur reçoit les données nécessaires à la simulation. Dans l'exemple décrit ici, ces données sont la description du circuit à simuler Cir., ainsi que des données d'initialisation Init_Par. Dans l'exemple décrit ici, les données Init_Par comprennent des données d'état de départ du circuit Cir. Comme on le verra par la suite, ces données peuvent être incomplètes, et nécessiter une première boucle de simulation pour obtenir un état de départ complet. En outre, ces données peuvent également comprendre des données de paramétrage pour la simulation, comme des conditions d'arrêt, un pas de temps de simulation, des tolérances de convergence, des identifiants de grandeurs à observer, et d'autres données de ce type. Dans une opération 22, le constructeur 4 utilise les données Cir. pour construire le modèle 16 qui va servir à la simulation. Le fonctionnement de cette opération sera détaillé avec les figures 4 et 5. Une fois le modèle 16 calculé, l'état initial de simulation du circuit est établi dans une 20 opération 24. Comme on l'a vu plus haut, il est rare que l'on connaisse l'état de chacun des éléments composant un circuit au moment où commence la simulation. Il est en effet plus probable que l'on connaisse un certain nombre d'entrées critiques, mais pas tous les 25 états. Cette opération, détaillée avec la figure 15, est optionnelle et pourra être omise, par exemple si l'état fourni dans les données Init_Par est suffisamment complet. 30 Ensuite, un compteur de temps t est initialisé dans une opération 26. Cela marque le début de la boucle de simulation réalisée par le moteur de simulation 8. Dans cette boucle, l'état suivant du circuit est calculé à partir de l'état courant dans une opération 28, sur la base du modèle tiré des données 16. Une fois l'état suivant calculé, une condition d'arrêt de simulation est testée dans une opération 30. Cette condition d'arrêt peut par exemple porter sur le nombre total d'exécutions de la boucle de simulation, sur une condition de stabilité de l'état du circuit ou sur d'autres conditions. Si la condition de fin de simulation est remplie, alors la simulation se termine avec une 10 opération 32, et sinon le prochain pas de temps est simulé avec une opération d'incrémentation de t 34 et le retour à l'opération 28. La figure 3 représente un schéma générique de mise en oeuvre de la création du modèle 16 par le contrôleur 4. Comme on peut le voir, cette mise en oeuvre comprend trois opérations principales. Dans une première opération 40, les données du circuit Cir. sont parcourues pour déterminer automatiquement les composants dont les paramètres vont servir 20 d'inconnues, ainsi que pour initialiser certains éléments nécessaires au calcul du modèle du circuit. Dans une deuxième opération 45, le modèle 16 est calculé. Dans le mode de réalisation décrit, le modèle 16 est un ensemble d'identifiants et d'espaces mémoires associés qui 25 sont utilisés par le moteur de simulation 8 pour déterminer un état du circuit à chaque pas de temps. Le modèle 16 est donc une sorte de coquille que le mécanisme 8 remplit et utilise à chaque itération. Cette coquille est un ensemble d'espaces mémoire qui sont remplis 30 sélectivement comme cela est décrit dans la suite. 15 Enfin, dans une troisième opération 50, les espaces mémoires nécessaires au modèle 16 pour permettre l'exécution de la simulation sont réservés. À ce stade, il convient de reprendre le cadre théorique dans lequel s'inscrit l'invention. Les dispositifs connus de l'art antérieur se basent sur ce qui est appelé � analyse nodale modifiée � (ou MNA, pour � Modified Nodal Analysis � en anglais). Cette analyse des circuits permet d'établir un jeu d'équations selon la formule (10) de 10 l'Annexe A. Les formules (12) à (16) explicitent les composantes de la formule (10). D'une manière générale, ces équations reviennent à décomposer le circuit en ses branches de nature inductives, capacitives, commandées en tension, commandées en courant, et à ordonner les équations tirées des lois de tension et d'intensité de Kirchhoff, 15 ainsi que des lois propres à chacun des composants. Ces équations sont tirées en partie d'une matrice principale A qui reprend toutes les lois de Kirchhoff en courant selon la formule (18). La matrice A est alors vue selon la formule (20). Cependant, ces équations ne sont valables que pour des composants réguliers. Les travaux de la Demanderesse ont permis de modifier ces équations, pour permettre d'intégrer ces éléments. Pour cela, tout élément non régulier est décrit par un jeu d'équations selon la formule (24) de l'Annexe A. On notera que cet élément non régulier peut être linéaire ou pas. 30 La Demanderesse a ensuite introduit ces équations dans ceux tirés de la formule (10), et a réussi à établir la formule (26), qui correspond à l'analyse nodale modifiée en tenant compte des éléments non réguliers et non linéaires. 20 25 Les formules (26) et (28) explicitent la formulation des matrices N et F. Dans ces formules, la notation Àk indique la portion de la matrice A dont les colonnes correspondent à l'indice k (qui peut être L, C, R, V ou NS), et dont les lignes ont des indices contenus dans le vecteur N1 (défini avec la figure 5). La notation Âk indique cette même portion, mais dont les lignes ont des indices contenus dans le vecteur N2 (défini avec la figure 5). Le dispositif de l'invention permet de réaliser cette mise en équation de manière automatique, et de simuler ensuite le circuit sur la base de cette mise en équation. La figure 4 représente un exemple de mise en oeuvre d'une partie de l'opération 45. Les opérations représentées sur cette figure visent à préparer un vecteur Ins et un vecteur Lns qui vont recevoir des paramètres qui permettent de prendre en compte les 15 composants non réguliers et/ou non linéaires. Cette première partie est une boucle qui commence dans une opération 400 par le dépilement d'un composant de la représentation du circuit Cir., et dans une opération 402 par la vérification dans la bibliothèque 6 pour déterminer si ce composant 20 est non régulier et/ou non linéaire. Si le composant est bien non régulier, alors dans une opération 404, le vecteur Ins(k) reçoit l'index de position de cet élément dans le vecteur z, et dans une opération 406, le vecteur Lns(k) reçoit l'index de position de cet élément dans le vecteur lambda. Lorsque le composant est régulier, ou une fois les opérations 404 et 406 exécutées, la boucle reprend en 400. Lorsque tous les composants ont été dépilés, cette première partie se termine dans une 30 opération 408. 25 La figure 5 représente un exemple de mise en oeuvre d'une deuxième partie de l'opération 45. Comme on l'a vu plus haut, cette opération vise à établir les vecteurs x et z qui sont les inconnues de la simulation, et à préparer certains autres vecteurs pour la suite. Dans une opération 500, le constructeur reçoit les données Cir. Ensuite, dans une opération 502, un arbre de recouvrement ST est calculé pour les branches capacitives du circuit. Cet arbre, ainsi que son complémentaire N_ST dans l'ensemble des branches capacitives, est calculé au moyen d'une fonction ST(), qui prend les données Cir. comme argument et qui les parcourt en appelant la bibliothèque 6 pour déterminer les arbres ST et N_ST. 15 De manière surprenante, la Demanderesse a découvert que la génération de la matrice N à partir d'un algorithme faisant appel à l'arbre de recouvrement permet d'obtenir une matrice inversible sur laquelle se base la simulation selon l'invention. 20 Il existe de nombreux algorithmes pour l'obtention des arbres de recouvrement, et l'homme du métier saura choisir une mise en oeuvre appropriée. Ensuite, dans une opération 504, le vecteur x est initialisé avec la liste des intensités des branches inductives Ii, et avec la liste des tensions des branches capacitives Uc du 25 circuit Cir . Cela est réalisé au moyen d'une fonction Push(), qui sert à empiler les données. On notera d'ailleurs que dans le mode de réalisation décrit, les vecteurs x et z, les arbres ST et N_ST, sont traités comme des piles, et manipulés avec des fonctions de type Push() et 30 Pop(). Cela est en effet particulièrement pratique. Cependant, ces éléments pourraient être mis en oeuvre différemment, et traités avec des fonctions différentes.10 Une fois les arbres ST et N_ST et le vecteur x initialisé, le vecteur z est initialisé dans une opération 506. Dans cette opération, le vecteur z est initialisé avec les intensités des sources de tension V, avec les intensités des branches commandées en tension non inductives Iv, et les intensités des composants non réguliers pouvant être non linéaires Ins. Enfin, dans une opération 508, une fonction Volt() stocke l'ensemble des branches du circuit Cir. qui ne sont pas dynamiques et commandées en tension dans le vecteur B. L'utilité de ce vecteur apparaîtra avec la figure 6. Deux boucles sont alors initialisées successivement pour préparer l'opération 50. Dans la première boucle, l'arbre ST est dépilé successivement à partir d'une opération 510. À partir de l'indice k résultant, un noeud 1 de la branche k est choisi dans une opération 512. Ensuite, dans une opération 514, l'indice de noeud 1 est empilé dans un vecteur N 1. Dans une opération 516 suivante, l'indice de branche k est empilé dans un vecteur C 1. Enfin, dans une opération 518, le couple (1 ; k) est empilé dans un vecteur M. Le vecteur M sera utilisé avec la figure 6. La loi de Kirchhoff en courant au noeud 1 sera écrite afin de caractériser la dynamique de la branche k. Une fois ces indices stockés, la boucle reprend en 510, jusqu'à ce que l'arbre ST soit vidé. La deuxième boucle commence alors en 520 avec le dépilage de l'arbre N_ST. Dans cette boucle, l'intensité de l'élément de l'indice k dépilé à l'opération 520 est stocké dans le vecteur z dans une opération 522.30 Ensuite, l'indice k est empilé dans une opération 524 dans un vecteur C2 qui représente les branches pour lesquelles la formulation de la relation dynamique courant-intensité d'un condensateur va être stockée dans la matrice N. La boucle est alors réitérée en 520. Lorsque cette deuxième boucle se termine, une fonction Rest() stocke (ou empile) tous les noeuds des données Cir. qui n'ont été pas été stockés dans N1 dans une opération 526. Enfin les listes C 1 et C2 sont réunies dans une liste C qui reçoit donc tous les éléments capacitifs dans une opération 528. La liste C correspond à la liste de composants qui a servi à établir les arbres de recouvrement ST et N_ST. Enfin, l'opération 45 se termine en 530. L'opération 50 est ensuite réalisée à partir des vecteurs x et z obtenus à l'opération 45. En effet, comme on l'a vu plus haut, tous les vecteurs utiles à la simulation ont des dimensions directement reliées à celles de x et z. Ainsi, les espaces mémoires correspondant à ces objets sont réservés dans cette opération comme suit : * matrice N : dim(x)^2, * matrice F : (dim(x) + dim(z) û dim(Ins)) * (dim(x) +dim(z)), * matrice H : dim(Ins) * (dim(x)+dim(z)+dim(Lns)), * matrice G : dim(Lns) * (dim(x)+dim(z)+dim(Lns)+1), * vecteur KCL(i) : sizeForKCL * vecteur KVL(k) : sizeForKVL * vecteur BCE(k) : sizeForBCE En pratique, la matrice F va recevoir les données liées aux fonctions f l et f2 de la formule (26) de l'Annexe A. Les données de la fonction f1 seront stockées dans les lignes d'indice inférieur à dim(x), et les données de la fonction f2 seront stockées dans les lignes suivantes. Les matrices G et H vont recevoir les données associées aux fonctions g et h de la formule (26) de l'Annexe A. La figure 6 représente un exemple de mise en oeuvre de l'opération 50. Comme on l'a vu plus haut, cette opération vise à établir remplir les vecteurs et matrices initialisés à l'opération 45, pour permettre d'obtenir le modèle du circuit Cir. Pour préparer le remplissage de la matrice N, plusieurs boucles successives vont être exécutées pour permettre de remplir les lignes en fonction des éléments identifiés. Ainsi, les éléments inductifs, capacitifs de la liste Cl, capacitifs de la liste C2, les 10 éléments restants de la liste N2, les éléments commandés en tension et enfin les éléments capacitifs vont être successivement traités. Tout commence avec une opération 600, dans laquelle un indice i est mis à 0 (zéro). L'indice i est l'indice de ligne, qui va être incrémenté au fil des boucles pour chaque 15 ligne. Dans une opération 602, une fonction Ind() qui prend les données Cir. comme argument est exécutée et retourne une liste L qui comprend les éléments inductifs du circuit. 20 Ensuite, la première boucle est exécutée, qui vient écrire les indices de ces éléments dans un vecteur BCE à l'indice qui leur correspond. Cette boucle est basée, comme précédemment sur le dépilage progressif de la liste L (opération 604), suivi de l'écriture dans le vecteur BCE des données correspondantes (opération 606). Le vecteur BCE représente les indices des lignes de la matrice N dans lesquelles on va écrire l'équation 25 constitutive de branche du composant concerné. Dans le cas des éléments inductifs, la matrice N va recevoir les éléments qui définissent l'inductance de chaque élément concerné, et la matrice F va recevoir des valeurs associées à chaque élément. Cela sera explicité avec la figure 10. 30 Ensuite, dans une opération 608, l'indice i est incrémenté, et la liste L est dépilée à nouveau en 604. Lorsque la liste L est vide, l'opération 50 passe à la boucle suivante, qui est le traitement des composants de la liste C 1. Ici encore, on commence dans une opération 610 par dépiler le vecteur M. Ensuite, dans une opération 612, l'indice i est empilé dans le vecteur KCL à l'indice qui correspond au noeud 1 du couple (k ; 1) qui a été dépilé du vecteur M. Le vecteur KCL représente la ligne de N dans laquelle on va écrire la loi de Kirchhoff en courant. Dans le cas des éléments capacitifs, la matrice N va recevoir la capacité de chaque élément, et la matrice F va recevoir des valeurs associées à chaque élément. Cela sera explicité avec la figure 11. Ensuite, dans une opération 614, l'indice i est incrémenté et la boucle reprend en 610. 15 Lorsque la liste M est vide, l'opération 50 passe à la boucle suivante, qui est le traitement des composants de la liste C2. Comme on l'a vu précédemment, les éléments de la liste C2 sont les éléments capacitifs qui ne sont pas décrits par une loi de Kirchhoff en courant, mais par leur loi de 20 comportement. Cette boucle comprend donc une opération de dépilage 616, suivie d'une opération 618 d'écriture l'indice i dans le vecteur BCE à l'indice du composant k, et d'une opération 620 d'incrémentation de l'indice i. Lorsque la liste C2 est vide, l'opération 50 passe à la boucle suivante, qui est le traitement des composants des données Cir. qui sont stockés dans la liste N2. Là encore, la boucle commence par un dépilage dans une opération 622, suivi d'une 30 opération 624 d'écriture l'indice i dans le vecteur KCL à l'indice du noeud k, et d'une opération 626 d'incrémentation de l'indice i. 25 Lorsque la liste N2 est vide, l'opération 50 passe à la boucle suivante, qui est le traitement des composants de la liste B. Là encore, la boucle commence par un dépilage dans une opération 628, suivi d'une 5 opération 630 d'écriture l'indice i dans le vecteur BCE à l'indice du composant k, et d'une opération 632 d'incrémentation de l'indice i. Lorsque la liste B est vide, l'opération 50 passe à la boucle suivante, qui est le traitement des composants de la liste C. Il s'agit ici de rentrer les indices des composants correspondant aux lois de tension de Kirchhoff pour les éléments capacitifs. La boucle commence donc par un dépilage dans une opération 634, suivi d'une opération 636 d'écriture l'indice i dans le vecteur KVL à l'indice du composant k, et d'une opération 638 d'incrémentation de l'indice i. Enfin, l'opération 50 se termine en 640. À la fin, on obtient donc un ensemble de vecteurs qui vont, comme on va le voir avec les figures 7 à 13, permettre de remplir les matrices N, F, G, et H. Ces matrices 20 correspondent à un jeu d'équations dynamiques, et un jeu de lois d'entrée/sortie pour les éléments non réguliers, et un jeu de loi d'inclusion, pour délimiter les valeurs des paramètres des éléments non réguliers. L'ensemble de ces éléments constitue le modèle 16 du circuit Cir. On notera qu'à ce 25 stade, ce modèle ne comprend que des indices de référence vers les éléments de la bibliothèque 6 et pas de scalaires, et que ces indices serviront à remplir les matrices par la suite. La figure 7 représente une vue schématique du fonctionnement du moteur de 30 simulation 8 lors d'une boucle de simulation. En fait, le moteur de simulation 8 établit la simulation du circuit Cir. en établissant par pas de temps successifs des états stables de ce circuit. 10 15 La boucle du moteur de simulation 8 pour un pas de temps t part dans une opération 70 du modèle Mod_Shl établit à l'opération 50, et du dernier état déterminé St[t-1] pour le circuit. Le cas particulier de la première boucle sera explicité avec la figure 15. Dans une opération 75, le réducteur 10 appelle une fonction Stamp_Discr() avec le modèle Mod_Shl 16 et le dernier état simulé St[t-1] du circuit. L'opération 75 est celle dans laquelle les matrices N, F, G, et H sont remplies avec des 10 valeurs scalaires. Ainsi, à partir du modèle Mod_Shl, la fonction Stamp_Discr() vient remplir la matrice en réalisant une discrétisation temporelle des équations différentielles qu'elle contient, de sorte que, par exemple, Uk' devient Uk[t]-Uk[t-1 ], les instants t-1 et t étant très 15 proches. Dans cette matrice, les valeurs à l'instant t-1 sont tirées de l'état St[t-1]. Cette opération est également légèrement compliquée par le fait que la matrice N est simultanément inversée, comme cela apparaît avec la figure 8. 20 En effet, comme on l'a vu plus haut, on est ici basé sur un système de type Nx' = f(x, z, t), et on a besoin d'inverser N pour récupérer les intensités dans les branches capacitives du vecteur Cl. Il est donc plus simple de réaliser l'inversion et la discrétisation en une seule et unique étape. 25 En fait, dans un premier temps, la matrice N est remplie, ainsi que les matrices F, G, et H en partie. Ensuite, la matrice N est inversée et les matrices F, G et H complétées. Ces opérations sont représentées avec la figure 8. Ensuite, les matrices ainsi obtenues sont discrétisées. La discrétisation qui est réalisée 30 ici est faite selon la méthode de Moreau, qui est décrite dans l'article � Numerical Methods for Nonsmooth Dynamical Systems � de Acary et Brogliato édité chez Springer Verlag.5 La figure 8 représente les opérations de remplissage des matrices avant discrétisation. Ce remplissage est réalisé en deux boucles. Dans une première boucle, la représentation du circuit Cir. est successivement dépilée dans une opération 800. Ensuite, pour chaque composant, une fonction Stamp() est appelée avec l'indice k du composant concerné. La fonction Stamp() est adaptée à chaque type de composant. Les figures 9 à 12 représentent des exemples pour respectivement une résistance, une inductance, une capacité et une diode. La figure 9 représente la fonction Stamp() dans le cas d'une résistance. Elle part donc d'une opération 900 avec la résistance R et l'indice k de ce composant. À l'indice k correspondent deux indices de noeud 11 et 12 qui sont les bornes de la résistance k. 15 Dans une opération 902, la valeur 1/R est ajoutée à l'élément d'indice de coordonnées (KCL(11) ;11) de la matrice F. Dans une opération 904, la valeur -1/R est ajoutée dans l'élément d'indice de coordonnées (KCL(11) ; 12) de la matrice F. Dans une opération 906, la valeur -1/R est ajoutée à l'élément d'indice de coordonnées (KCL(12) ;11) de la matrice F. Dans une opération 908, la valeur 1/R est ajoutée à l'élément d'indice de coordonnées 25 (KCL(12) ; 12) de la matrice F. Ensuite, la fonction se termine en 910. Ces opérations reflètent l'écriture de l'intensité qui traverse la résistance k vu des noeuds 11 et 12 respectivement. 30 La figure 10 représente la fonction Stamp() dans le cas d'une inductance. Elle part donc d'une opération 1000 avec l'inductance L, l'indice k de ce composant et l'indice xk de 20 l'intensité de cette inductance dans le vecteur x. À l'indice k correspondent deux indices de noeud 11 et 12 qui sont les bornes de l'inductance k. Dans une opération 1002, la valeur L est ajoutée à l'élément d'indice de coordonnées 5 (BCE(k) ; xk) de la matrice N. Cela revient à écrire la tension U = L*I' pour l'inductance k. Dans une opération 1004, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (BCE(k) ;11) de la matrice F. Dans une opération 1006, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (BCE(k) ; 12) de la matrice F. Dans une opération 1008, la valeur 1 est ajoutée à l'élément d'indice de coordonnées 15 (KCL(11) ; xk) de la matrice F. Dans une opération 1010, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (KCL(12) ; xk) de la matrice F. 20 Ensuite, la fonction se termine en 1012. Ces opérations reflètent l'écriture de l'intensité qui traverse l'inductance k vu des noeuds 11 et 12 respectivement. La figure 11 représente la fonction Stamp() dans le cas d'une capacité. Elle part donc d'une opération 1100 avec la capacité C, l'indice k de ce composant, l'indice xk de la 25 tension de cette capacité dans le vecteur x, et l'indice zk de l'intensité de cette capacité dans le vecteur zk (lorsque k appartient à C2). À l'indice k correspondent deux indices de noeud 11 et 12 qui sont les bornes de la capacité k. Cette fonction comprend trois premières opérations 1102, 1104 et 1106 pour écrire la 30 loi de tension de Kirchhoff, et trois tests en fonction de la présence de la capacité dans les vecteurs Ni, N2 et C2. 10 Dans l'opération 1102, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (KVL(k) ; xk) de la matrice F. Dans l'opération 1104, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (KVL(k) ; 11) de la matrice F. Dans l'opération 1106, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (KVL(k) ; 12) de la matrice F. Ensuite, dans le premier test, une opération 1108 permet de vérifier si le noeud 11 est dans la liste N1. Si c'est le cas, dans une opération 1110, on vérifie si k est dans la liste C2. Si c'est le cas, la valeur C est ajoutée à l'élément d'indice de coordonnées (KCL(11) ; xk) de la matrice N dans une opération 1112. Sinon, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (KVL(k) ; 12) de la matrice F dans une opération 1114. Ces opérations reviennent à écrire la loi d'intensité de Kirchhoff ou la loi de tension de la capacité en fonction de son appartenance à C 1 ou C2. Ensuite, ou lorsque le test de l'opération 1108 est négatif, un deuxième test est réalisé dans une opération 1116 pour vérifier si le noeud 12 est dans la liste N1. Les opérations 1118 à 1122 sont identiques aux opérations 1110 à 1114 mais avec le 25 noeud 12. Enfin le dernier test de l'opération 1124 prévoit d'écrire les équations de branches de la capacité avec les opérations 1126 et 1128 si la capacité appartient à la liste C2. 30 Enfin, la fonction se termine dans une opération 1130 (ou directement si la capacité n'appartenait pas à la liste C2).20 La figure 12 représente la fonction Stamp() dans le cas d'une diode. Elle part donc d'une opération 1200 avec l'indice k de ce composant, et l'indice zk de l'intensité de cette diode dans le vecteur Ins. À l'indice k correspondent deux indices de noeud 11 et 12 qui sont les bornes de la diode k. Par ailleurs, dans ce qui suit, la valeur x représente la taille du vecteur x, et la valeur z représente la taille du vecteur z. Dans une opération 1202, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (KCL(11) ; x+zk) de la matrice F. Dans une opération 1204, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (KCL(12) ; x+zk) de la matrice F. Dans une opération 1206, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Ins(k) ; x+zk) de la matrice H. On notera que Ins(k) a été établi avec la figure 4. Dans une opération 1208, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (KCL(11) ; x+z+Lns(k)) de la matrice H. On notera que Lns(k) a été établi avec la figure 4. 20 Dans une opération 1210, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Lns(k) ; x+11) de la matrice G. Dans une opération 1212, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (Lns(k) ; x+12) de la matrice F. On notera qu'ici, la fonction Stamp() est présentée comme une unique fonction. Cependant, dans le cadre d'une mise en oeuvre en langage objet, chaque composant du circuit peut être traité comme une instance d'une classe de composants. 30 La fonction Stamp() est alors un appel de la méthode de chaque instance particulière, la méthode Stamp() variant pour chaque classe de composant. 25 Une fois que le circuit a été entièrement dépilé, la matrice N est complète et peut être inversée. Tous les éléments de cette matrice qui n'ont pas été remplis sont initialisés à 0. L'inversion de la matrice N est réalisée dans une opération 804. Ainsi, une fois la matrice N inversée, on peut obtenir le système x' = N^-1*f(x, z, t). Ce système est ensuite exploité dans une deuxième boucle. Dans cette boucle, la liste des éléments capacitifs C est dépilée dans une opération 806, et dans une opération 808 une fonction Stamp_inv() est appelée avec k comme argument. Cette fonction est décrite avec la figure 13. Comme on peut le voir sur cette figure, dans une première opération 1300 d'un test pour vérifier si KCL(11) est supérieur à la dimension du vecteur x. Si c'est le cas, alors dans une opération 1302, une fonction Fill() est appelée avec comme argument KCL(11). La fonction Fill() a pour fonction de chercher l'expression de l'intensité manquante correspondant à KCL(11) au moyen de la matrice inversée Inv_N, et de stocker le résultat dans la matrice F dans la ligne KCL(11). Sinon un second test vérifie dans une opération 1304 si KCL(12) est supérieur à la dimension du vecteur x. Si c'est le cas, alors la fonction Fill() est appelée dans une opération 1306 avec KCL(12) comme argument, et le résultat est stocké dans la ligne KCL(12) de la matrice F. Enfin après l'opération 1302, 1306 ou 1304 si les deux tests sont négatifs, la fonction se termine en 1308. Ensuite, les matrices N, F, G et H sont discrétisées comme décrit plus haut, et la 30 fonction Stamp_Discr() retourne un modèle discrétisé Discr_Mod qui est utilisé dans une étape 80 par le mécanisme 12 pour déterminer le prochain état du circuit St[t] au moyen d'une fonction Nxt().25 La figure 14 représente une mise en oeuvre en exemple de la fonction Nxt(). La fonction Nxt() est un mécanisme de résolution du système décrit par le modèle Discr_Mod, et les équations d'entrée/sortie et d'inclusion (ou de délimitation de domaine). Dans l'exemple décrit ici, ce mécanisme comprend deux principes de recherche de solution à ce système : - un principe de recherche par linéarisation du système, et - l'utilisation de méthodes non linéaires directs (de type Newton généralisé). La recherche par linéarisation étant la plus rapide, c'est ce principe qui est d'abord mis en oeuvre. Pour cela, deux boucles sont imbriquées. La première boucle va linéaire le modèle discrétisé Discr_Mod, résoudre le système du 15 modèle discrétisé linéarisé, et répéter cette opération jusqu'à atteindre un état stable. La deuxième boucle vient changer le point de départ de la première boucle si la solution obtenue ne convient pas. 20 La première boucle part ainsi dans une opération 1400 de la réception du modèle discrétisé Disc_Mod, de l'initialisation d'un pas de temps/indice s à 1, et de la définition de l'état St[t-l] comme état temporaire du circuit St_tmp(s) où s vaut 0 (zéro). Dans une opération 1402, le modèle Discr_Mod() est linéarisé pour tenir compte de 25 l'état temporaire St tmp(t-1) au moyen d'une fonction Lin(). La fonction Lin() permet de simplifier les expressions de tous les éléments restés non linéaires dans le modèle Discr_Mod. Le résultat est stocké dans un modèle discrétisé linéarisé temporaire Discr_Mod_l(s). À 30 ce stade, on a donc un système d'équations linéaires et un ensemble de lois de délimitations de domaines, comme tout a été linéarisé. 10 Ensuite, dans une opération 1404, le mécanisme 12 appelle une fonction Solve() qui vient résoudre ce système d'équations, au moyen de méthodes de pivotage par exemple, ou de techniques de projection/découpage (projection splitting en anglais). Enfin, dans une opération 1406, l'état St_tmp(s) ainsi calculé est comparé à l'état temporaire dont il est issu St_tmp(s- 1), pour voir si le système est stabilisé. Si ça n'est pas le cas, alors l'indice s est incrémenté dans une opération 1408 et la première boucle reprend en 1402, avec cette fois l'état temporaire St_tmp(s) qui vient 10 d'être calculé comme point de départ. Si c'est le cas, alors un test dans une opération 1410 vérifie si l'état ainsi déterminé satisfait les équations d'entrée/sortie, le système Discr_Mod non linéarisé, et les délimitations de domaine pour les éléments non réguliers. Si c'est le cas, alors St_tmp(s) est défini comme le nouvel état simulé du circuit St[t], et renvoyé comme résultat dans une opération terminale 1412. Si ce n'est pas le cas, une fonction Shuf() est appelée dans une opération 1414 pour 20 relancer la première boucle avec un point de départ différent, à partir de l'état de référence St[t-1]. Si cela a déjà été réalisé plusieurs fois sans obtenir de solution satisfaisante pour St_tmp(s), alors la deuxième boucle est lancée avec une opération 1416. Sinon, la première boucle reprend en 1402 avec s réinitialisé à 1 (un), et le nouvel état St_tpm(0) déterminé par la fonction Shuf(). L'opération 1416 appelle une fonction Enum(). La fonction Enum() est moins 30 performante en termes de temps de calcul que la boucle de linéarisation, mais elle met en oeuvre des méthodes dites d'optimisation, qui vont explorer méthodique l'espace des 15 25 paramètres défini par les délimitations de domaine, et calculer progressivement un nouvel état St[t] qui correspond de manière optimale à la solution du système. De telles méthodes d'optimisation incluent, sans limitation, les méthodes de projection découpage, les méthodes dites � semi-smooth � de Newton, ou encore les méthodes à base de point intérieur. Une fois que la fonction Enum() a déterminé le nouvel état St[t], l'opération 80 se termine alors en 1412. La figure 15 représente le cas particulier du premier état du circuit. En effet, pour cet état, il n'existe pas d'état précédent. Cette opération part donc en 1500 d'un test qui vérifie si l'état St[0] tiré des données 15 Init_Par est complet. Si c'est le cas, alors pas de besoin de calcul, et l'opération se termine en 1502, la simulation pouvant partir de cet état. Sinon, dans une opération 1504, la matrice N est remplie de manière scalaire à la manière de l'opération 75, au moyen d'une fonction Stamp_0(). La fonction Stamp_0() 20 utilise le modèle 16 Mod_Shl et les données Init_Par, pour remplir le système avec les données de départ, et sans réaliser de discrétisation, mais en inversant la matrice N comme décrit plus haut. Ensuite, dans une opération 1506, la fonction Solve() décrite avec la figure 14 est 25 appelée sur le modèle Disc_Mod résultant pour calculer l'état St[0], et l'opération se termine en 1502. La figure 16 représente la fonction Stamp() qui est appliquée pour un transistor de type MOSFET. La Demanderesse a établi qu'un transistor comme le transistor 166 peut être modélisé selon le jeu d'équations de la formule (30) de l'Annexe A. 30 Elle part d'une opération 1600 avec l'indice zk de l'intensité de ce composant dans le vecteur z, et les indices gk, sk et dk qui sont respectivement les indices du noeud de la grille, de la source et du drain du transistor. Par ailleurs, dans ce qui suit, la valeur x représente la taille du vecteur x, et la valeur z représente la taille du vecteur z. Dans une opération 1602, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (KCL(dk) ; x+zk) de la matrice F. Dans une opération 1604, la valeur -1 est ajoutée à l'élément d'indice de coordonnées 10 (KCL(sk) ; x+zk) de la matrice F. Dans une opération 1606, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Ins(k), x+zk) de la matrice H. 15 Ensuite dans des opérations 1608 à 1632, des vecteurs Nbzh, Nblh, Nbzg et Nblg sont remplis avec des valeurs tirées de la formule (30). Ces vecteurs représentent des dérivées des vecteurs G et H qui sont utilisés par le solveur pour résoudre le système. Dans l'opération 1608, une valeur correspondant à la dérivée en z de la valeur Iris de la 20 formule (30) est ajoutée à l'élément d'indice de coordonnées (Ins(k) ; gk) de la matrice Nbzh. Dans l'opération 1610, la dérivée en z du premier membre de la valeur Iris de la formule (30) est retiré à l'élément d'indice de coordonnées (Ins(k) ; sk) de la matrice 25 Nbzh. Dans l'opération 1612, la dérivée en z du deuxième membre de la valeur Iris de la formule (30) est retirée à l'élément d'indice de coordonnées (Ins(k) ; sk) de la matrice Nbzh. Dans l'opération 1614, la valeur ùK/2*K(Vg-Vd-Vt)2 est ajoutée dans l'élément d'indice de coordonnées (Ins(k), Lns(k)+l) de la matrice Nblh. 30 Dans l'opération 1616, la valeur K/2*K(Vg-Vs-Vt)2 est ajoutée dans l'élément d'indice de coordonnées (Ins(k), Lns(k)+3) de la matrice Nblh. Dans l'opération 1618, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+1, gk) de la matrice Nbzg. Dans l'opération 1620, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+3, gk) de la matrice Nbzg. Dans l'opération 1622, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+1, dk) de la matrice Nbzg. Dans l'opération 1624, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+3, sk) de la matrice Nbzg. Dans l'opération 1626, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+1, Lns(k)) de la matrice Nblg. Dans l'opération 1628, la valeur -1 est ajoutée à l'élément d'indice de coordonnées 20 (Lns(k)+l, Lns(k)) de la matrice Nblg. Dans l'opération 1630, la valeur 1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+3, Lns(k)+2) de la matrice Nblg. 25 Dans l'opération 1632, la valeur -1 est ajoutée à l'élément d'indice de coordonnées (Lns(k)+2, Lns(k)+3) de la matrice Nblg. Enfin, la fonction se termine dans une opération 1634. 30 La figure 17 représente un exemple d'un circuit qui peut être modélisé grâce au dispositif de l'invention.15 Ce circuit comprend une source de tension 160, un pont de capacités 162, une résistance 164, un transistor de type MOSFET 166, une inductance 168 et une résistance 170. Le pont de capacités 162 est relié d'une part à la source de tension 160 à un noeud 172, et d'autre part à la première résistance 164 et à la grille du transistor 166 par un noeud 174. Le pont de capacités 162 comprend quatre capacités Cl, C2, C3, et C4, les capacités C 1 et C2 d'une part et C3 et C4 d'autre part étant disposées en série entre les noeuds 172 et 174. L'inductance 168 est reliée d'une part au drain du transistor 166 et d'autre part à la résistance 170. La source de tension 160, la résistance 162, la source du transistor 166 et la résistance 170 sont reliées à la terre. En appliquant les opérations décrites avec les figures 4 et 5, on obtient tout d'abord un 20 vecteur Ins selon la formule (32) de l'Annexe A avec Ins=1 et Lns=4, et des vecteurs x et z respectivement selon les formules (34) et (36). L'arbre de recouvrement est (2,1) (2,4) (1,3), et les vecteurs M, Cl, C2, N1 et N2 obtenus sont selon les formules (38) à (46). Ensuite, l'application des opérations de la figure 6 donne les vecteurs BCE selon la formule (48), KCL selon la formule (50), et KVL selon la formule (52). L'application des opérations des figures 7 et 8 donnent les matrices N selon la 30 formule (54) et F selon la formule (56). 25 Ces opérations appliquées au transistor (166) donnent les vecteurs selon les formules (58) à (64). Enfin, l'inversion de la matrice N permet de récupérer l'équation de l'intensité dans le 5 noeud 3, selon la formule (66), et l'application de l'opération 808 donne le remplissage selon l'équation (68). Les vecteurs F, N, Nbzh, Nblh, Nbzg et Nblg ainsi obtenus permettront de simuler le circuit, et serviront de données de modèle pour le réducteur 10 et le solveur 12. L'invention décrite dans la présente est donc extrêmement avantageuse pour la simulation de nombreux circuits électriques mêlant des éléments analogiques et numériques. Elle trouve une application toute particulière dans les circuits commutés. 15 Cela est obtenu notamment par l'introduction d'un nouveau cadre d'analyse des circuits et de leurs composants qui permet de tenir compte d'une manière fidèle des éléments non réguliers. À cet effet, on notera que les délimitations de domaines qui font appel à des éléments 20 mathématiques qui sont appelés règles d'inclusion. Ces éléments permettent, avec les équations d'entrée/sortie, de modéliser de manière très fidèle la plupart des composants connus à ce jour. 25 Pour plus d'informations sur les règles d'inclusion et leur fonctionnement, la Demanderesse recommande de consulter �Variational Analysis � de R.T. ROCKAFELLAR & J.B. WETS. Springer Verlag, 1998, ou "Finite-dimensional Variational Inequalities and Complementarity Problems" de F. FACCHINEI & J. S. PANG., volume I & II of Springer Series in Operations Research, Springer Verlag, 30 2003. 10 Bien que l'invention a prouvé être particulièrement efficace dans son application aux circuits commutés, elle est entièrement adaptée à la simulation d'autres types de circuit comme les circuits analogiques classiques. Dans ce cadre elle représente une amélioration importante par rapport aux simulateurs connus. L'invention ne se limite néanmoins pas à un cadre théorique. La mise en oeuvre de ce cadre a posé de nombreux problèmes qui ont déterminé la mise en oeuvre décrite plus haut. 10 Il est néanmoins compris que de nombreuses variantes de mise-en-oeuvre des éléments décrits dans la présente pourront être envisagées sans s'écarter de la portée des revendications qui suivent. En outre, l'invention concerne également un procédé de simulation de circuit électrique 15 comprenant : - recevoir des données de description d'un circuit électronique comprenant une représentation de ce circuit par ses composants et leurs interconnexions, ainsi que des données d'état initial de ce circuit, - obtenir des caractéristiques des composants de circuit, chacun avec des 20 caractéristiques permettant de simuler son comportement, dont certains au moins sont associés à une équation dynamique, et/ou une équation d'entrée/sortie avec une expression de délimitation de domaine définissant les paramètres d'état possibles pour le composant concerné, - calculer un modèle d'un circuit, à partir de ladite représentation du circuit et des 25 caractéristiques de ses composants, sous la forme d'un triplet de jeux d'équations qui portent respectivement sur les équations dynamiques, les équations d'entrée/sortie et les délimitations de domaine des composants de ce circuit, - calculer répétitivement un état postérieur d'un circuit, à partir de son modèle et d'un état antérieur du circuit, jusqu'à remplir une condition portant sur le nombre 30 d'exécutions ou sur le dernier état postérieur calculé.5 ANNEXE A M(X,t)X =F(X,t)+U(t) (10) X = [V,IL,Iv]T AcC(ATV,t)Ai 0 0 M(X,t) = 0 L(IL,t) 0 0 0 0 ùAcq,(AiV,t) ùARS(ARV,t) ùAIL ùAvly _ F(X,t) = Ar V ù p(IL,t) 4V AI=O (18) A = [AR Ac AJ AL Av] (20) ùAji(t) U(t) = 0 ùu(t) Y=g(INS,UNS) ),t) 0 = h(INS, UNS, Â,t) 0 E F(y,A,t) +T(y,X,t) (12) (14) (16) (22) (24) ANNEXE A(suite) i = Nù1(x,t) f(x,z,t) + U(t) = fi (x,z,t) + U(t) 0 = f2(x,Z,t) 0=h(x,z,À.,t) y = g(x, z, Â, t ) 0 E cD(y,Â,t)+T(y,À,,t) x= [IL,UcjT andz= [V,Iv,Ic2,INS]T L(IL,t) _ 0 0 N(x,t) = 0 ACIC1(ATV,t) AC2C2(ATV,t) (27) 0 0 C2(ATV,t) ùALIL ù ARS(AR V, t) ù Avly ù A N_slNS ù Aji (AT V, IL , Iv, AT V, I L , Iv, t ) f(x,z,t)= ( -ALV IC2 (28) IDS= (Xt(VGS - VT)2Â2(VGD-VT)2) y1 1 ù A,2 Y2 __ VT - VGD + J1 y3 1 - Â4 Y4 VT - VGS+(30) ri Yi 0 3 1 Y3 >0 y4 INS = (150) (32) (26) X = (h, Uc, , UC2, Uc3, Un) (34) ANNEXE A(suite) Z = (VI, V2, V3, V4, V5, V6,101,150,134) (36) M = {(CI,2),(C2,4),(C3,1)} (38) Cl = {Ci,C2,C3} (40) C2 = {C4} (42) Nl = {2,4,1} (44) N2 = {3,5,6} (46) BCE = [(kt, 0), (C4,4), (Vin, 8)] (48) KCL = [(2,1),(4,2),(1,3),(3,5),(5,6),(6,7)] (50) K VL = [(CI,9),(C2,10),(C3,ll),(C4,12)] (52) L CI ùC2 C2 (54) ùCI ùC3 C4 ANNEXE A(suite) IL Uc1 L'a Uc3 Uc4 VI V2 V3 V4 V5 V6 101 150 143 -1 1 R, -1 -1 1 -1 1 1 I 1 -1 -1 1 -1 1 -1 -1 1 -1 -1 1 (56) 1 1 1 K(Â4(V4+VT)+4(V5ùV4-VT)) I-.10,2(V5-V4-VT) ] I 1 1 (58) Nblh=1 I ùK(V5 ù V4 ù VT)2/2 K(ùV4 ù VT)2/2 1 (60) Nbzg = 1 (62) 1 Nblg = 1 (64) C3 UC3 =134 + R4 +Ioi 1 F[(6,V4)] = R1 F[(6,101)] = 1 (68) Nbzh = (66) Revendications1. Simulateur de circuit électrique comprenant : - une bibliothèque (6), comprenant des composants de circuit, chacun avec des caractéristiques permettant de simuler son comportement, dont certains au moins sont associés à une équation dynamique, et/ou une équation d'entrée/sortie avec une expression de délimitation de domaine définissant les paramètres d'état possibles pour le composant concerné, - un constructeur (4), agencé pour calculer un modèle (16) d'un circuit, à partir d'une représentation de ce circuit (14) par ses composants et leurs interconnexions, sous la forme d'un triplet de jeux d'équations qui portent respectivement sur les équations dynamiques, les équations d'entrée/sortie et les délimitations de domaine des composants de ce circuit, - un solveur (12), agencé pour calculer un état postérieur d'un circuit, à partir de son modèle et d'un état antérieur, et un moteur de simulation (8), agencé pour appeler le constructeur (4) avec la représentation d'un circuit, et pour exécuter le solveur (12) avec le modèle résultant à partir d'un état initial du circuit, et pour répéter cette exécution à partir du dernier état postérieur calculé jusqu'à remplir une condition portant sur le nombre d'exécutions ou sur le dernier état postérieur calculé. 2. Simulateur selon la revendication 1, dans lequel le moteur de simulation (8) comprend un réducteur (10), agencé pour calculer une forme discrétisée temporellement du jeu d'équations dynamiques d'un modèle donné, ainsi qu'un mécanisme qui explore le jeu de délimitations de domaines, jusqu'à définir un état qui satisfait le jeu d'équations d'entrée/sortie et le jeu d'équations discrétisées. 3. Simulateur selon la revendication 2, dans lequel le réducteur opère selon la méthode de Moreau pour calculer ladite forme discrétisée temporellement. 4. Simulateur selon la revendication 2 ou 3, dans lequel le réducteur réalise une linéarisation de ladite forme discrétisée temporellement. . Simulateur selon l'une des revendications 2 à 4, dans lequel le mécanisme utilise des méthodes de pivotage, ou des techniques de projection/découpage.