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 :

Assemblage de matrice de rigidité en élément finis [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut Assemblage de matrice de rigidité en élément finis
    Bonjour à tous,

    me voilà débutant en matlab avec un prof qui nous explique rien ... et mon travail me semble un chouia complexe, je viens donc quémander un peu d'aide !

    Mon but est de construire en élément finis avec des triangle une modélisation d'une poutre en flexion (il me semble ^^) mais bref le probleme est bien avant !

    Je cherche a construire ma matrice de rigidité (KL) a partir de mes matrices de rigidité élémentaires.
    J'ai toutes celles-ci (que j'appellerais Ke). En tout ma matrice KL aura 2222 lignes et colonnes. Je dois placer les Ke (6 x 6) dans la diagonales pour construire KL, le reste est a zéro.

    voici mon code :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    clear;
     
    % **********************************************
    % Lecture des données
    % **********************************************
     
    node=dlmread('Node_ABAQUS_10_100_.inp');
    S.node = node(:,2:3);
    clear node;
     
    element = dlmread('Element_ABAQUS_10_100_maillageC.inp');
    S.element = element (:,2:4);
    clear element;
     
    'Propriétés matériaux'
    mat.ep = 0.1;
    mat.E = 50*10^9;
    mat.nu = 0.2
     
    U_imp = dlmread('U_imp.csv');
    F_imp = dlmread('F_imp.csv');
     
     
    % **********************************************
    % Affichage de la struture
    % **********************************************
     
    patch('Faces', S.element,'Vertices', S.node, 'Facecolor','b'); % définit le triangle
     
     
    % **********************************************
    % Calcul de KL
    % **********************************************
     
    'Calcul de KL'
    S.nb_node = size(S.node,1)
     
    KL = zeros(2*S.nb_node, 2*S.nb_node);
     
    for e=1 : size (S.element,1);
     
        num_e = S.element(e,:);
        node_e = S.node (num_e,:);
     
        Ns = [-1,-1;1,0;0,1];
     
        J = node_e' * Ns;  % node_e transposé !
     
        Jinv = inv(J);
     
        Nx = Ns * Jinv;
     
        Be = [Nx(1,1),0,Nx(2,1),0,Nx(3,1),0;
              0,Nx(1,2),0,Nx(2,2),0,Nx(3,2);
              Nx(1,2),Nx(1,1),Nx(2,2),Nx(2,1),Nx(3,2),Nx(3,1)];
     
        Ccp = (mat.E/(1-mat.nu^2))*[1,mat.nu,0;mat.nu,1,0;0,0,(1-mat.nu/2)]; % C en CP
     
        w = 1/2;
     
        Ke1 = Be' * Ccp * Be * det(J) * w;
     
        KL = ........... ??????????  % c'est ici que se trouve mon problème ...
     
    end;
     
    'end'

    J’espère avoir été clair, si vous avez des questions n’hésitez pas, merci pour toute aide !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  2. #2
    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 : 52 882
    Points
    52 882
    Par défaut
    Il faut lire les numéros des nœuds dans le fichier Node_ABAQUS_10_100_.inp car ce sont ces numéros qui feront la correspondance avec les indices dans la matrice de rigidité globale

    Peux-tu nous fournir les deux fichiers .inp (mis dans une archive zip ou rar) ?
    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)

  3. #3
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut solution
    Bonjour,

    je pense que ma question n'avait pas été vraiment comprise ^^ je reviens poster la solution si jamais qq'un est passionné pour les éléments finis !
    à la suite de ce que j'avais déjà fait il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        a = S.element(e,1);
        b = S.element(e,2);
        c = S.element(e,3);
     
        rep = [a*2-1,a*2,b*2-1,b*2,c*2-1,c*2];
     
       KL(rep,rep) = (KL(rep,rep) + Ke);
    on créé un vecteur changeant à chaque boucle for pour changer de ligne et colonne dans KL à chaque fois et ainsi mettre les Ke dans la KL.
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  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 : 52 882
    Points
    52 882
    Par défaut
    Euh... tu fais exactement ce que j'ai expliqué. Tu lis les numéros des nœuds dans la table de connectivité et tu utilises ces numéros comme indice dans la matrice de rigidité globale. Comme tu as deux degrés de liberté par nœud, pour un nœud i, tu as deux indices 2*i-1 et 2*i

    Par contre, dans la pratique, si le nombre de degrés de liberté du modèle devient grand, il est préférable d'utiliser une matrice creuse (voir la fonction sparse) pour le stockage de la matrice de rigidité globale. Ceci permet de diminuer la quantité de mémoire nécessaire.
    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 du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut du même genre ...
    Hello,

    de ce fait j'ai une question qui viens peu après, un peu du même genre. C'est peut etre un truc simple mais je n'y connais rien du tout en matlab et nous demande un truc de fou ! bref

    J'aurais souhaité savoir comment je peux mettre des zéros entre les nombres d'un vecteur.

    Exemple mon vecteur fait V1 = [1;2;5;6;9;10] je voudrais qu'il soit V2 = [1;2;0;0;5;6;0;0;9;10].
    Sauriez vous le moyen ?

    Merci beaucoup
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  6. #6
    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 : 52 882
    Points
    52 882
    Par défaut
    De la même manière que quand tu faisais KL(rep,rep) dans le code précédent, non ?
    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)

  7. #7
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    et bien il me semble que ça serait de cette construction oui mais j'ai essayé un truc qui ressemble un peu ça marchait pas ... faut dire que je suis bien nul donc ça aide pas !
    Pourrais tu me faire une ligne de code stp ?
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Matrice : voir si des éléments ont des contacts
    Par raffi88 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/05/2011, 16h01
  2. Réponses: 2
    Dernier message: 25/02/2010, 18h04
  3. cours calcul des poutres en éléments finis
    Par nadim22 dans le forum Mathématiques
    Réponses: 0
    Dernier message: 29/12/2009, 16h12
  4. [Débutant] Problème création matrice de rigidité
    Par sylvain1001 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/12/2008, 16h42
  5. [Doc] Solveur éléments finis
    Par plegat dans le forum Mathématiques
    Réponses: 2
    Dernier message: 02/02/2006, 19h51

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