IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[pdetool] équation aux dérivées partielles non linéaire


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut [pdetool] équation aux dérivées partielles non linéaire
    Bonjour,
    Je doit dévelloper une simulation d'une combustion en milieu poreux pour ma quatrième année d'école d'ingé. Elle est de type élliptique non linéaire :

    a*gradT=div(b*gradT+c)+d

    Les coefficient a,b,c et d peuvent être exprimer par des fonctions mathlab, mais sont fonction de T,r et z (système cylindrique)... D'où la linéarité.

    J'ai évidemment pensé à PDEtool, mais j'ai aucune idée de la manière de communiquer avec cet outil, et de la façon dont est construit le modèle des éléments finis (surtout le maillage libre). A vrai dire j'ai déja travaillé avec les diff et volumes finis, mais seulement en maillage uniforme et simple. J'ai pensé à une structure :

    -les caractéristiques et les CL sont transmis à PDEtool, et considérés constantes
    -PDEtool calcule le champ de température et le renvoi dans la structure global
    -La structure calcul les propriété suivant le champ de température
    -On boucle jusqu'à la convergence

    PDE tool possède il le moyen de "communiquer" avec un autre programme mathlab comme une fonction, ou doit-je éditer mon propre code en m'inspirant des 5000 lignes de PDEtool?

    Merci beaucoup

    PS : j'ai trouvé ça, http://math.unice.fr/~dreyfuss/projet2007.pdf , mais c'est vraiment obscur pour moi

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    je ne connais pas bien la toolbox de résolution d'équations aux dérivées partielles, mais toutes les fonctions utilisées par PDEtool sont accessibles en ligne de commande, donc pour te familiariser avec cet outil et ses disponibilités, le mieux, c'est d'étudier la documentation de la toolbox de résolution d'équations aux dérivées à travers les exemples disponibles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PDE tool possède il le moyen de "communiquer" avec un autre programme mathlab comme une fonction, ou doit-je éditer mon propre code en m'inspirant des 5000 lignes de PDEtool?
    De quelle autres fonctions parles-tu? As-tu déjà commencé à coder quelque chose? D'après la doc, tu devrais pouvoir importer ton model dans PDEtool, non?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Re
    Quand je parlais de fonction, je me disais qu'on pouvais utiliser PDEtool comme tel... Mais ce n'est pas vraisemblablement le cas. Voilà ce que j'ai codé (pour me familiariser) d'après la doc':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    G=[1 1 1 1;0 1 1 0;1 1 0 0;0 0 1 1;0 1 1 0;1 1 1 1;0 0 0 0]
    B=[1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;2 2 2 2;48 48 48 48;48 48 48 48;49 49 49 49;50-48 52-48 52-48 50-48]
    [P,E,T]=initmesh(G)
    lambda=1
    temp=assempde(B,P,E,T,lambda,0,0)
    pdesurf(P,T,temp)
    la matrice G définie la géométrie (ici un carré unité). La matrice B sont les condition aux limites. Initmesh fait ton maillage. Et assempde calcule le champ de température. pdesurf c'est un plot spécial éléments finis.

    Voila mon problème actuel, c'est la syntaxe ASCII... Les deux dernière lignes de B doivent contenir [1 1 1 1;20 40 20 40] en ASCII... je ne sais pas comment faire... (voir page 12 de la doc')

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par autocadNUL Voir le message
    Voila mon problème actuel, c'est la syntaxe ASCII... Les deux dernière lignes de B doivent contenir [1 1 1 1;20 40 20 40] en ASCII... je ne sais pas comment faire... (voir page 12 de la doc')
    Tu pourrais nous expliquer un peu plus en détail ce point précis ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Les 4 dernière lignes de la matrice B doivent contenir les coefficients des condition aux limites de mon domaine. Et la dernière ligne c'est la température (condition de dirichlet) donc 20°C sur la première face, 40°C sur la seconde, ect.
    Mais on doit donner le code ASCII,soit 50 48 dans la première case, puis 52 48 dans la seconde, ect. Mais le soucis c'est que si je fait :

    50 48 52 48 50 48 52 48

    On a une ligne de 8 argument, alors qu'elle doit en contenir 4. Je ne sait pas trop comment coder là... (faut dire que je suis débutant en matlab, dsl)
    Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Voilà le code, ça marche, mais temps que je ne sais pas coder correctement la matrice B, je ne vais pas pouvoir aller très loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    clear all
    eps=1e-6;
    det=1;
    G=[2 2 2 2;0 1 1 0;1 1 0 0;0 0 1 1;0 1 1 0;1 1 1 1;0 0 0 0];
    B=[1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;1 1 1 1;48 48 48 48;48 48 48 48;49 49 49 49;48 49 49 48];
    [P,E,T]=initmesh(G);
    [n m]=size(P);
    temp=ones(m,1);
    while det>eps
        det=0;
        tampon=temp;
        lambda=calc_lambda(P,T,temp);
        temp=assempde(B,P,E,T,lambda,0,0);
        det=sum(abs(tampon-temp));
    end
    pdesurf(P,T,temp)
    la fonction calc_lambda (grippdata interpole temp au centre des mailles):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function f=calc_lambda(P,T,temp)
    s=grav(P,T);
    x=s(1,:);
    y=s(2,:);
    temp2=griddata(P(1,:),P(2,:),temp,x,y);
    f=x.*y.*temp2;
    et la fonction grav qui calcule les coordonnées du centre de la maille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function g=grav(P,T)
    g=[(P(1,T(1,:))+P(1,T(2,:))+P(1,T(3,:)))/3;
    (P(2,T(1,:))+P(2,T(2,:))+P(2,T(3,:)))/3];
    voilà pour le moment

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par autocadNUL Voir le message
    Mais on doit donner le code ASCII
    Tout ceci me parait bizarre... peux-tu nous donner un lien vers la documentation en ligne qui stipule ceci ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    lien :
    http://math.unice.fr/~dreyfuss/projet2007.pdf
    page 12

    Je sais s'est bizarre,mais ça marche. En effet dans le programme que j'ai tapé plus haut, quand on trace (fin de l'éxécution), on voit bien que les température des bord du domaine correspondent à la dernière ligne de la matrice B (0 ou 1°C)...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Me revoilà (dsl d'insister)

    J'ai trouvé la fonction suivante qui pourrais peut être m'aider, mais l'aide est un peu obscure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     EQUIVALENT Equivalent of an enum label or numeric input.
        O = EQUIVALENT(EE,I) returns the enum label equivalent of the input
        I if I is numeric, and returns the numeric equivalent of the input I if
        I is an enum label.
     
        Example:
        In CCS:
           enum state {FAILED=-1, SUCCESS, PENDING};
           enum state myState = SUCCESS;
        In MATLAB:
           cc = ccsdsp;
           x = createobj(cc,'myState');
           enum_numeric = equivalent(x,'SUCCESS')
             enum_numeric =
             0
           enum_label = equivalent(x,1)
             enum_label =
             PENDING
    Comment l'utilise ont?
    Ce que j'aimerais, c'est pouvoir rentrer mon string, et elle me sort le le ASCII equivalent...
    Merci

Discussions similaires

  1. [Débutant] Résolution d'une équation aux dérivées partielles
    Par Elevedelyon dans le forum MATLAB
    Réponses: 0
    Dernier message: 09/10/2014, 16h20
  2. Réponses: 0
    Dernier message: 19/01/2013, 15h20
  3. Equation aux dérivées partielles
    Par willy_07 dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/10/2009, 17h53
  4. Réponses: 6
    Dernier message: 18/02/2008, 16h14
  5. Equation aux dérivées partielles.
    Par Mad__Max dans le forum MATLAB
    Réponses: 6
    Dernier message: 22/03/2007, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo