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 :

Conversion d'un fichier .dmp de Unix a Windows [Débutant]


Sujet :

MATLAB

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut Conversion d'un fichier .dmp de Unix a Windows
    Bonjour,

    J'ai un programme pour créer un maillage qui sera lu par un autre programme en utilisant fopen et fprintf:

    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
    clear all, close all, clc,
    Lx = 0.6; Nx = 60; hx = Lx / (Nx);%hx=hy
    Ly = 0.3; Ny = 30; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-09;              
    Kxy = 0;         
    Kyy = 1.0e-010; 
    mu  = 0.1804;
     
    Number_nodes = (Nx+1) * (Ny+1);
    Number_elem  = (Nx  ) * (Ny  );
    fid          = fopen('wrong.dmp','w');
    fprintf(fid,'Number of nodes : %5.0f \n',Number_nodes); 
     
    for j = 1:Ny+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          NODE(node_id,:) = [node_id x y z];
          fprintf(fid,'%6.0f  %12.6f  %12.6f  %12.6f \n',NODE(node_id,:));   
       end 
    end
     
    fprintf(fid,'Number of elements : %5.0f \n',Number_elem);
     
    for j = 1:Ny;
       for i = 1:Nx;
          elem_id   = (j-1)*(Nx )+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          ELEMENTS(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];
          fprintf(fid,'%6.0f %4.0f %6.0f %6.0f %6.0f %6.0f %32.6f %15.6f %15.4e %15.4e %15.4e \n',ELEMENTS(elem_id,:)); 
       end
    end
     
    fprintf(fid,'Resin Viscosity model NEWTON \n');
    fprintf(fid,'Viscosity : %15.6f \n',mu);
    fprintf(fid,'# Done **************************  \n');
    fclose(fid);
    L'autre programme me donne le message suivant: The file is Unix! use editor to change into windows-format

    Qu'est-ce que ne va pas? Et comment puis-je changer le format de unix vers Windows?

  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 317
    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 317
    Par défaut
    Ce sont les caractères de fin de ligne qui posent problème. Voir ici : Fin de ligne

    Essaie dans un premier temps en remplaçant les \n par des \r\n dans les appels à fprintf

    J'avais écris un outil pour détecter le type de fin de ligne utilisé par un fichier texte : ostxtfile
    Tu peux combiner ce code avec une autre de mes contributions strrepInFile pour faire la modification

    Par exemple pour convertir les fins de lignes d'un fichier d'Unix vers Windows :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strrepInFile('wrong.dmp', 10, [13 10]);

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Bonjour,

    Merci pour votre reponse,

    En fait j'ai beaucoup essayé de remplacer les \n par des \r\n avant mais le programme ne marchait pas aussi, il m'a donné un messgae que le format est inconnu, j'ai aussi essayé avec Notepad++ avec l'option tools>EOL conversion>Windows mais aucun resultant.

  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 317
    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 317
    Par défaut
    Peux-tu nous envoyer le fichier wrong.dmp (en le mettant dans une archive zip ou rar) ?

    Ajoute également l'argument t à fopen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fopen('wrong.dmp','wt');

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Avec le t, il m'a donne le message: Error! corrupted file, could not load the mesh.
    Veuillez trouverez ci-joint le fichier wrong.dmp
    Fichiers attachés Fichiers attachés

  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 317
    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 317
    Par défaut
    Le fichier est mal formaté car les fin de lignes sont CR CR LF au lieu de CR LF (donc <Unix Windows> au lieu de <Windows>)
    Tu as ajouté les caractères Windows à celui Unix au lieu de le remplacer

    Montre nous le code que tu utilises.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    OK, voici le 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
    %%%%%%%%%% Matlab code for Example 8.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%% FEM MESH GENERATOR FOR A RECTANGLULAR DOMAIN
    %%%%%%%%%% Aspect ratio=Lx/Ly=4 %%%%%%%%%%%%%%%%%%%%
    clear all, close all; clc,
    Lx = 0.450; Nx = 45; hx = Lx / (Nx);%hx=hy=0.015
    Ly = 0.150; Ny = 15; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-09;              
    Kxy = 0;         
    Kyy = 1.0e-010; 
    mu  = 0.1804;
     
    Number_nodes = (Nx+1) * (Ny+1);
    Number_elem  = (Nx  ) * (Ny  );
    fid          = fopen('wrong.dmp','wt');
    fprintf(fid,'Number of nodes : %5.0f \r\n',Number_nodes);
     
    for j = 1:Ny+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          NODE(node_id,:) = [node_id x y z];
          fprintf(fid,'%6.0f  %12.6f  %12.6f  %12.6f \r\n',NODE(node_id,:));   
       end 
    end
     
    fprintf(fid,'Number of elements : %5.0f \r\n',Number_elem);
     
    for j = 1:Ny;
       for i = 1:Nx;
          elem_id   = (j-1)*(Nx )+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          ELEMENTS(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];
          fprintf(fid,'%6.0f %4.0f %6.0f %6.0f %6.0f %6.0f %32.6f %15.6f %15.4e %15.4e %15.4e \r\n',ELEMENTS(elem_id,:)); 
       end
    end
     
    fprintf(fid,'Resin Viscosity model NEWTON \r\n');
    fprintf(fid,'Viscosity : %15.6f \n',mu);
    fprintf(fid,'# Done ************************** \r\n');
    fclose(fid);

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Oui mais dans ce cas, tu as créé le fichier sous Windows. Donc \r\n donne CR CR LF

    Tu ajoutes les \r uniquement si le code est exécuté sous Unix.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Avec le \r uniquement il est devenu un format mac, le code est exécuté sous windows.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    On va reprendre depuis le début… Mettons MATLAB de coté pour le moment.

    Dans un fichier texte, la fin d'une ligne est marquée par une combinaison de caractères qui dépend du système d'exploitation.
    Ces caractères sont CR pour Carriage Return (soit retour chariot en français) et LF pour Line Feed (soit saut de ligne en français)
    Ces deux caractères ont respectivement pour valeur numérique 13 et 10 (table ASCII) et \r et \n pour représentation dans les codes informatiques.

    Voici les combinaisons pour chaque système d'exploitation :

    • Windows : CR LF, [13 10], \r\n
    • Unix/Linux/Mac OS X : LF, 10, \n
    • Mac (jusqu'à la version 9) : CR, 13, \r


    Revenons maintenant à MATLAB.

    Sous Unix/Linux/Mac OS X, pour écrire une ligne de texte avec un passage à la ligne, il faut ajouter le caractère LF (10) à la fin de la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('test.txt', 'w');
    fprintf('\n')
    fclose(fid);
    Ce fichier n'est donc (normalement) pas lisible avec Windows.
    Pour le rendre compatible, il faut insérer le caractère CR (13) et écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('test.txt', 'w');
    fprintf('\r\n')
    fclose(fid);
    Le fichier créé est maintenant lisible sous Windows.

    Sous Windows maintenant, pour écrire une ligne de texte avec un passage à la ligne, il faut ajouter les caractères CR (13) et LF (10) à la fin de la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('test.txt', 'w');
    fprintf('\r\n')
    fclose(fid);
    Mais attention, sous Windows, le comportement du code précédent change si on ajoute l'argument t à fopen. Comme écrit dans la documentation :
    To open files in text mode, attach the letter 't' to the permission argument, such as 'rt' or 'wt+'.

    On Windows® systems, in text mode:

    Write operations insert a carriage return before any newline character in the output.
    Donc si on écrit sous Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('test.txt', 'wt');
    fprintf('\r\n')
    fclose(fid);
    MATLAB ajoute automatiquement un \r supplémentaire :

    Pour résumer, si tu veux que ton code créé un fichier lisible sous Windows, tu dois écrire :
    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
    %%%%%%%%%% Matlab code for Example 8.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%% FEM MESH GENERATOR FOR A RECTANGLULAR DOMAIN
    %%%%%%%%%% Aspect ratio=Lx/Ly=4 %%%%%%%%%%%%%%%%%%%%
    clear all, close all; clc,
    Lx = 0.450; Nx = 45; hx = Lx / (Nx);%hx=hy=0.015
    Ly = 0.150; Ny = 15; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-09;              
    Kxy = 0;         
    Kyy = 1.0e-010; 
    mu  = 0.1804;
     
    Number_nodes = (Nx+1) * (Ny+1);
    Number_elem  = (Nx  ) * (Ny  );
    fid          = fopen('wrong.dmp','w');
    fprintf(fid,'Number of nodes : %5.0f \r\n',Number_nodes);
     
    for j = 1:Ny+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          NODE(node_id,:) = [node_id x y z];
          fprintf(fid,'%6.0f  %12.6f  %12.6f  %12.6f \r\n',NODE(node_id,:));   
       end 
    end
     
    fprintf(fid,'Number of elements : %5.0f \r\n',Number_elem);
     
    for j = 1:Ny;
       for i = 1:Nx;
          elem_id   = (j-1)*(Nx )+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          ELEMENTS(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];
          fprintf(fid,'%6.0f %4.0f %6.0f %6.0f %6.0f %6.0f %32.6f %15.6f %15.4e %15.4e %15.4e \r\n',ELEMENTS(elem_id,:)); 
       end
    end
     
    fprintf(fid,'Resin Viscosity model NEWTON \r\n');
    fprintf(fid,'Viscosity : %15.6f \r\n',mu);
    fprintf(fid,'# Done ************************** \r\n');
    fclose(fid);

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Ok merci pour l'explication, maintenant je comprends très bien le problème, mais ça ne marche pas aussi avec le dernier code: w et \r\n, corrupted file!

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Peux-tu attacher à nouveau le fichier que tu viens de créer ?

    Le problème se situe peut être ailleurs.
    Quel est le logiciel qui doit lire ce fichier ?
    Es-tu sur du format d'écriture des données ?

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Le logiciel s'appelle LIMS, Il lis le fichier dmp et ouvre le maillage sur son "user interface"
    voici le ste internet du logiciel: http://sites.udel.edu/lims/3-2/downl...e-1/#comment-4

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Le code suivant génère un fichier lisible par LIMS :

    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
    %%%%%%%%%% Matlab code for Example 8.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%% FEM MESH GENERATOR FOR A RECTANGLULAR DOMAIN
    %%%%%%%%%% Aspect ratio=Lx/Ly=4 %%%%%%%%%%%%%%%%%%%%
    clear all, close all; clc,
    Lx = 0.450; Nx = 45; hx = Lx / (Nx);%hx=hy=0.015
    Ly = 0.150; Ny = 15; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-09;              
    Kxy = 0e-9;         
    Kyy = 1.0e-010; 
    mu  = 0.1804;
     
    Number_nodes = (Nx+1) * (Ny+1);
    Number_elem  = (Nx  ) * (Ny  );
    fid          = fopen('wrong.dmp','w');
     
    fprintf(fid,'#Unit System Information:\r\n');
    fprintf(fid,'#!SI\r\n');
    fprintf(fid,'#Check for orphans: OK\r\n');
    fprintf(fid,'#Check for duplicates: OK\r\n');
    fprintf(fid,'#User Origin x:0 y:0 z:0 unit:\r\n');
    fprintf(fid,'\r\n');
     
    fprintf(fid,'Number of nodes : %5.0f\r\n',Number_nodes);
    fprintf(fid,' Index       x              y              z\r\n');
    fprintf(fid,'===================================================\r\n');
    for j = 1:Ny+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          NODE(node_id,:) = [node_id x y z]; 
          fprintf(fid,' %5d %14.6f %14.6f %14.6f\r\n',NODE(node_id,:));
       end 
    end
     
    fprintf(fid,'Number of elements : %5.0f\r\n',Number_elem);
    fprintf(fid,'  Index  NNOD  N1    N2    N3   (N4)  (N5)  (N6)  (N7)  (N8)    h              Vf             Kxx             Kxy             Kyy           Kzz           Kzx            Kyz\r\n');
    fprintf(fid,'==============================================================================================================================================================================\r\n');
    for j = 1:Ny;
       for i = 1:Nx;
          elem_id   = (j-1)*(Nx )+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          ELEMENTS(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];
          fprintf(fid,' %5d %4d %5d %5d %5d %5d                      %14.6f %15.6f %13.4e %13.4e %13.4e\r\n',ELEMENTS(elem_id,:)); 
       end
    end
     
    fprintf(fid,'Resin Viscosity model NEWTON\r\n');
    fprintf(fid,'Viscosity : %15.6f\r\n',mu);
    fclose(fid);
    Inspire toi des exemples dans le dossier lhome/examples/2D et du format donné dans la documentation : http://sites.udel.edu/lims/lims-file-formats/

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Oui le fichier est lisible maintenant, merci beausoup pour votre temps.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Les variables NODE et ELEMENTS sont inutiles dans ton 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
    %%%%%%%%%% Matlab code for Example 8.18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%% FEM MESH GENERATOR FOR A RECTANGLULAR DOMAIN
    %%%%%%%%%% Aspect ratio=Lx/Ly=4 %%%%%%%%%%%%%%%%%%%%
    clear all, close all; clc,
    Lx = 0.450; Nx = 45; hx = Lx / (Nx);%hx=hy=0.015
    Ly = 0.150; Ny = 15; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-09;              
    Kxy = 0e-9;         
    Kyy = 1.0e-010; 
    mu  = 0.1804;
     
    Number_nodes = (Nx+1) * (Ny+1);
    Number_elem  = (Nx  ) * (Ny  );
    fid          = fopen('wrong.dmp','w');
     
    fprintf(fid,'#Unit System Information:\r\n');
    fprintf(fid,'#!SI\r\n');
    fprintf(fid,'#Check for orphans: OK\r\n');
    fprintf(fid,'#Check for duplicates: OK\r\n');
    fprintf(fid,'#User Origin x:0 y:0 z:0 unit:\r\n');
    fprintf(fid,'\r\n');
     
    fprintf(fid,'Number of nodes : %5.0f\r\n',Number_nodes);
    fprintf(fid,' Index       x              y              z\r\n');
    fprintf(fid,'===================================================\r\n');
    for j = 1:Ny+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          fprintf(fid,' %5d %14.6f %14.6f %14.6f\r\n',node_id,x,y,z);
       end 
    end
     
    fprintf(fid,'Number of elements : %5.0f\r\n',Number_elem);
    fprintf(fid,'  Index  NNOD  N1    N2    N3   (N4)  (N5)  (N6)  (N7)  (N8)    h              Vf             Kxx             Kxy             Kyy           Kzz           Kzx            Kyz\r\n');
    fprintf(fid,'==============================================================================================================================================================================\r\n');
    for j = 1:Ny;
       for i = 1:Nx;
          elem_id   = (j-1)*(Nx )+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          fprintf(fid,' %5d %4d %5d %5d %5d %5d                      %14.6f %15.6f %13.4e %13.4e %13.4e\r\n',elem_id,4,k1,k2,k3,k4,H,Vf,Kxx,Kxy,Kyy); 
       end
    end
     
    fprintf(fid,'Resin Viscosity model NEWTON\r\n');
    fprintf(fid,'Viscosity : %15.6f\r\n',mu);
    fclose(fid);

  17. #17
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Je les utlise apres pour trouver cetraines numeros de nodes (Node_no1, Node_no2 et Node_no3) par leurs Coordonnées comme suivant:

    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
    % Finding sensors locations and assigning them to specific nodes numbers in the mesh
    N1=NODE(:,1); 
    x_N =NODE(:,2); y_N=NODE(:,3); z_N=NODE(:,1);
    x1_d=Lx/4     ; y1_d=Ly-2*hy    ; z1_d=0       ; % Sensor 1 node coordinates
    x2_d=Lx/2-hx     ; y2_d=Ly/2-hy    ; z2_d=0       ; % Sensor 2 node coordinates
    x3_d=Lx-2*hx  ; y3_d=Ly/4       ; z3_d=0       ; % Sensor 3 node coordinates
     
    for i =1:length(N1)
        if (x1_d == x_N(i))
            if (y1_d == y_N(i))
                if (z1_d == z_N(i))
                    Node_no1= N1(i);
                end
            end
        end
    end
     
    for i =1:length(N1)
        if (x2_d == x_N(i))
            if (y2_d == y_N(i))
                if (z2_d == z_N(i))
                    Node_no2= N1(i);
                end
            end
        end
    end
     
    for i =1:length(N1)
        if (x3_d == x_N(i))
            if (y3_d == y_N(i))
                if (z3_d == z_N(i))
                    Node_no3= N1(i);
                end
            end
        end
    end
    et pour tracer la maillage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % Plotting mesh and sensors locations
    figure
    plot(NODE(ELEMENTS(:,3:6),2),NODE(ELEMENTS(:,3:6),3),'.')
    hold on
    plot(x1_d,y1_d,'ro',x2_d,y2_d,'ro',x3_d,y3_d,'ro','linewidth',5)
    grid on 
    set(gca,'xtick',[0:hx:Lx])
    set(gca,'ytick',[0:hy:Ly])
    hold off
    Est-ce qu'il y a une autre façon de le faire sans ou avec NODE et ELEMENTS ? car le numéro de nœud n'a pas été trouvé pour Node_no2
    J'ai un autre code pour un maillage de forme L, aucun numero de nœud été trouvé.

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Il y a tout d'abord une erreur ici :

    Ensuite, il ne faut jamais comparer deux nombres flottants avec l'opérateur ==. Lire la FAQ : Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?

    Par exemple, la condition suivante :

    devient :

    Avec une valeur de p qui permet de valider la condition.

    Tu peux améliorer ton code en supprimant deux des conditions dans la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i = 1:length(N1)
        if abs(x1_d-x_N(i))<p
            if abs(y1_d-y_N(i))<p
                if abs(z1_d-z_N(i))<p
                    Node_no1= N1(i);
                end
            end
        end
    end
    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i = 1:length(N1)
        if abs(x1_d-x_N(i))<p && abs(y1_d-y_N(i))<p && abs(z1_d-z_N(i))<p
            Node_no1= N1(i);
        end
    end
    Et tu n'a pas besoin de trois boucle for, tu peux en utiliser une seule

    Voici une première amélioration :

    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
    % Finding sensors locations and assigning them to specific nodes numbers in the mesh
    N1=NODE(:,1);
    x_N=NODE(:,2); y_N=NODE(:,3); z_N=NODE(:,4);
    x1_d=Lx/4     ; y1_d=Ly-2*hy    ; z1_d=0       ; % Sensor 1 node coordinates
    x2_d=Lx/2-hx  ; y2_d=Ly/2-hy    ; z2_d=0       ; % Sensor 2 node coordinates
    x3_d=Lx-2*hx  ; y3_d=Ly/4       ; z3_d=0       ; % Sensor 3 node coordinates
     
    p=0.005;
     
    for i=1:length(N1)
        if abs(x1_d-x_N(i))<p && abs(y1_d-y_N(i))<p && abs(z1_d-z_N(i))<p
            Node_no1=N1(i);
        end
        if abs(x2_d-x_N(i))<p && abs(y2_d-y_N(i))<p && abs(z2_d-z_N(i))<p
            Node_no2=N1(i);
        end
        if abs(x3_d-x_N(i))<p && abs(y3_d-y_N(i))<p && abs(z3_d-z_N(i))<p
            Node_no3=N1(i);
        end
    end
    À ce niveau, on peut supprimer certains appels à abs en utilisant all :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i = 1:length(N1)
        if all(abs([x1_d y1_d z1_d]-[x_N(i) y_N(i) z_N(i)])<p)
            Node_no1= N1(i);
        end
        if all(abs([x1_d y1_d z1_d]-[x_N(i) y_N(i) z_N(i)])<p)
            Node_no2= N1(i);
        end
        if all(abs([x1_d y1_d z1_d]-[x_N(i) y_N(i) z_N(i)])<p)
            Node_no3= N1(i);
        end
    end
    On peut enfin améliorer la lisibilité du code en se passant des variables intermédiaires :

    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
    % Finding sensors locations and assigning them to specific nodes numbers in the mesh
     
    sensor1 = [Lx/4    Ly-2*hy 0]       ; % Sensor 1 node coordinates
    sensor2 = [Lx/2-hx Ly/2-hy 0]       ; % Sensor 2 node coordinates
    sensor3 = [Lx-2*hx Ly/4    0]       ; % Sensor 3 node coordinates
     
    p = 0.005;
     
    for i = 1:size(NODE,1)
        if all(abs(sensor1-NODE(i,2:4))<p)
            Node_no1 = NODE(i,1);
        end
        if all(abs(sensor2-NODE(i,2:4))<p)
            Node_no2 = NODE(i,1);
        end
        if all(abs(sensor3-NODE(i,2:4))<p)
            Node_no3 = NODE(i,1);
        end
    end
    Citation Envoyé par NihadS Voir le message
    car le numéro de nœud n'a pas été trouvé pour Node_no2
    Car il n'y a aucun noeud qui correspond à la position du capteur n°2
    Citation Envoyé par NihadS Voir le message
    J'ai un autre code pour un maillage de forme L, aucun numero de nœud été trouvé.
    Montre nous ce code.

    Pour finir, je te conseille d'utiliser les objets Patch pour afficher des maillages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    figure
    patch('vertices', NODE(:,2:4), 'faces', ELEMENTS(:,3:6), 'facecolor', 'r')
    axis equal
    Tu pourras plus facilement afficher les résultats (si besoin)

  19. #19
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 30
    Par défaut
    Voici le code "Création de mailles en L", je l'ai modifié selon vos recommandations
    Il n'est pas encore lisible par LIMS, je pense que le problème est le nombre de noeuds, il n'est pas complet dans le fichier dmp.

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    %%%%%%%%%% Matlab code for RTM study case using LIMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%% FEM MESH GENERATOR FOR An L-shaped DOMAIN
    clear all; close , clc,
    Lx = 400; Nx = 40; hx = Lx / (Nx);
    Ly = 400; Ny = 40; hy = Ly / (Ny);
     
    H   = 0.005000;
    Vf  = 0.500000;         
    Kxx = 1.0e-010;              
    Kxy = 0;         
    Kyy = 1.0e-010;
    mu  = 0.10;
     
    Number_nodes = ((Nx+1) * ((Ny/2)+1))+((Nx/2)+1) * ((Ny/2));
    Number_elem  = (Nx * (Ny/2))+((Nx/2) * (Ny/2));
    fid          = fopen('Crazymesh.dmp','w');
     
    fprintf(fid,'Number of nodes : %5.0f\r\n',Number_nodes); 
    fprintf(fid,'#Unit System Information:\r\n');
    fprintf(fid,'#!SI\r\n');
    fprintf(fid,'#Check for orphans: OK\r\n');
    fprintf(fid,'#Check for duplicates: OK\r\n');
    fprintf(fid,'#User Origin x:0 y:0 z:0 unit:\r\n');
    fprintf(fid,'\r\n');
     
    fprintf(fid,'Number of nodes : %5.0f\r\n',Number_nodes);
    fprintf(fid,' Index       x              y              z\r\n');
    fprintf(fid,'===================================================\r\n');
    for j = 1:Ny/2+1;
       for i = 1:Nx+1;
          node_id   = (j-1)*(Nx+1)+i;
          x         = (i-1)*hx;
          y         = (j-1)*hy;
          z         = 0;
          NODE(node_id,:) = [node_id x y z];
          fprintf(fid,' %5d %14.6f %14.6f %14.6f\r\n',NODE(node_id,:));   
       end 
    end
    I=i
    J=j
    NODE((I*J+1):(I*J+1)+Nx/2,:)=NODE(I*J-Nx:I*J-Nx/2,:);
    l=(I*J+1)+Nx/2;
    for j = (Ny/2)+2:Ny+1;
       for i = 1:Nx/2+1;
                  l=l+1;
                  node_id   = (j-(Ny/2)-2)*(Nx/2+1)+i+I*J;
                  x         = (i-1)*hx;
                  y         = (j-1)*hy;
                  z         = 0;
                  NODE(l,:) = [node_id x y z];
                  fprintf(fid,' %5d %14.6f %14.6f %14.6f\r\n',NODE(node_id,:)); 
       end
    end
     
     
    fprintf(fid,'Number of elements : %5.0f\r\n',Number_elem);
    fprintf(fid,'  Index  NNOD  N1    N2    N3   (N4)  (N5)  (N6)  (N7)  (N8)    h              Vf             Kxx             Kxy             Kyy           Kzz           Kzx            Kyz\r\n');
    fprintf(fid,'==============================================================================================================================================================================\r\n');
     
    for j = 1:Ny/2;
       for i = 1:Nx ;
          elem_id   = (j-1)*(Nx)+i;
          k1        = (j-1)*(Nx+1)+i;
          k2        = k1+1;
          k3        = k1+(Nx+1)+1;
          k4        = k3-1;
          ELEMENTS1(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];  
          ELEMENTS(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];
          fprintf(fid,' %5d %4d %5d %5d %5d %5d                      %14.6f %15.6f %13.4e %13.4e %13.4e\r\n',ELEMENTS(elem_id,:));
       end
    end
    II=i
    JJ=j
     for j = (Ny/2+1):Ny;
       for i = 1:(Nx/2);
                  elem_id   = (j-(Ny/2)-1)*(Nx/2)+i+II*JJ;
                  k1        = (j-(Ny/2)-1)*(Nx/2+1)+i+I*J;
                  k2        = k1+1;
                  k3        = k2+(Nx/2)+1;
                  k4        = k3-1;
            ELEMENTS1(elem_id,:) = [elem_id 4 k1 k2 k3 k4 H Vf Kxx Kxy Kyy];      
            ELEMENTS(elem_id,:) = [elem_id 4 NODE(k1,1) NODE(k2,1) NODE(k3,1) NODE(k4,1) H Vf Kxx Kxy Kyy];
          fprintf(fid,' %5d %4d %5d %5d %5d %5d                      %14.6f %15.6f %13.4e %13.4e %13.4e\r\n',ELEMENTS(elem_id,:)); 
       end
     end
     
    fprintf(fid,'Resin Viscosity model NEWTON\r\n');
    fprintf(fid,'Viscosity : %15.6f\r\n',mu);
    fclose(fid);
    plot(NODE(ELEMENTS1(:,3:6),2),NODE(ELEMENTS1(:,3:6),3),'*')

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Supprime la ligne n°18 de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fid,'Number of nodes : %5.0f\r\n',Number_nodes);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Manipuler des fichiers de type Unix sous Windows
    Par hermes1983 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2009, 08h43
  2. Conversion d'un fichier texte unix -> dos
    Par lejert dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/11/2005, 15h59
  3. Conversion d'un fichier dos vers windows ?
    Par elitost dans le forum Windows
    Réponses: 4
    Dernier message: 10/02/2005, 17h42
  4. [langage] fichier DOS et unix, retour chariot Mac unix
    Par Kinethe dans le forum Langage
    Réponses: 5
    Dernier message: 25/10/2004, 14h05

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