Il est lisible maintenant mais la LIMS n'est pas capable de résoudre la simulation
Pièce jointe 305363
Version imprimable
Il est lisible maintenant mais la LIMS n'est pas capable de résoudre la simulation
Pièce jointe 305363
Les données sont bien lues par le logiciel.
Pour le premier élément :
Ces valeurs correspondent bien à celles récupérées depuis le logiciel1 4 1 2 43 42 0.005000 0.500000 1.0000e-10 0.0000e+00 1.0000e-10
Tu as soit un problème avec LIMS, soit avec les valeurs numériques que tu as rentrées dans ton code.
Mais tu ne trouveras sans doute pas d'aide sur ce logiciel ici
Le nombre total de nœuds est 1281 mais dans le fichier dmp, ils sont limités à 1260, peut-être que c'est le problème?
Effectivement, il y a un soucis dans ton code.
Pour simplifier ton code, tu devrais le séparer en deux tâches distinctes :
- création des nœuds et des éléments
- écriture du fichier dmp
Tu écris donc un script pour la création des données dans un fichier m :
Et une fonction dans un fichier mesh2dmp.m pour l'écriture comme ceci :Code:
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 %%%%%%%%%% 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 ); 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]; end end 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]; end end mesh2dmp(NODE, ELEMENTS, mu, 'square.dmp')
Il te reste donc à écrire différents scripts pour la création des maillages qui appelleront la même fonction mesh2dmp pour l'écriture.Code:
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 function mesh2dmp(nodes, elements, mu, filename) Number_nodes = size(nodes,1); Number_elem = size(elements,1); fid = fopen(filename,'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 nodess : %5.0f\r\n',Number_nodes); fprintf(fid,' Index x y z\r\n'); fprintf(fid,'===================================================\r\n'); for i = 1:Number_nodes fprintf(fid,' %5d %14.6f %14.6f %14.6f\r\n',nodes(i,:)); 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 i = 1:Number_elem fprintf(fid,' %5d %4d %5d %5d %5d %5d %14.6f %15.6f %13.4e %13.4e %13.4e\r\n',elements(i,:)); end fprintf(fid,'Resin Viscosity model NEWTON\r\n'); fprintf(fid,'Viscosity : %15.6f\r\n',mu); fclose(fid);
Maintenant, tu peux te concentrer sur le script qui pose problème :
Code:
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 %%%%%%%%%% 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)); 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]; 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]; end end 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]; 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]; end end mesh2dmp(NODE, ELEMENTS, mu, 'Crazymesh.dmp')
Bonjour,
Avec la fonction le fichier dmp est lisible par LIMS, le problème est avec le maillage, car (NODE) est 44*4, et node_id & Nodes_number sont 40, la valeur exact est 40, donc dans le fichier "Nodes number" est noté 44 tandis qu'il y a 40 nodes seulement
Code:
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 %%%%%%%%%% Matlab code for RTM study case using LIMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% FEM MESH GENERATOR FOR An L-shaped DOMAIN clear all; close , clc, Lx = 0.6; Nx = 6; hx = Lx / (Nx); Ly = 0.6; Ny = 6; 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)); 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]; 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]; end end 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]; 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]; end end plot(NODE(ELEMENTS1(:,3:6),2),NODE(ELEMENTS1(:,3:6),3),'*') mesh2dmp(NODE, ELEMENTS, mu, 'lshape.dmp')
C'est à toi de faire le travail. Tu as sans aucun doute un problème au niveau des limites des boucles for, ou au niveau des indices de NODE.
Il faut que tu analyses le code avec un maillage plus grossier (4x4 éléments par exemple).
- Dessine le maillage 4x4 sur une feuille de papier avec les numéros des nœuds et des éléments
- Écris toi-même à la main les tableaux NODE et ELEMENT correspondant
- Exécute le code et compare les valeurs à chaque itération de i et de j
Tu trouveras où se trouve l'erreur.