Télécharger test_para.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : test_para.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTI' 'ECHO' 0 ;
  5. 'OPTI' 'TRAC' 'PSC';
  6. ************************************************************************
  7. * NOM : test_para
  8. * DESCRIPTION : Test de "PARA N1 P1 P2 P3" avec N1 > 0
  9. * Verification & Validation (analytique)
  10. *
  11. *
  12. * LANGAGE : GIBIANE-CAST3M
  13. * AUTEUR : kk2000
  14. * mél : kk2000@cea.fr
  15. **********************************************************************
  16. * VERSION : v1, 31/01/2020, version initiale
  17. * HISTORIQUE : v1, 31/01/2020, création
  18. * HISTORIQUE :
  19. * HISTORIQUE :
  20. ************************************************************************
  21. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  22. * en cas de modification de ce sous-programme afin de faciliter
  23. * la maintenance !
  24. ************************************************************************
  25.  
  26. DEBP parametres_para P1*'POINT' P2*'POINT' P3*'POINT' c*'ENTIER';
  27. _dis = 0.5 * ( (COOR c P3) - (COOR c P1) );
  28. _v = -0.25 * ( ((COOR c P1) - (COOR c P2)) + ((COOR c P3) - (COOR c P2)) );
  29. _in = (COOR c P1) + _dis;
  30. FINP _dis _v _in;
  31.  
  32. DEBP r_valeur LRACP_x*'LISTREEL' LRACP_y*'LISTREEL' LRACP_z/'LISTREEL';
  33. valeur_correcte = 0;
  34. prec_racp = (VALE 'PREC') * 1.E4;
  35.  
  36. REPE i (DIME LRACP_x);
  37. racp_x = EXTR LRACP_x &i;
  38. REPE j (DIME LRACP_y);
  39. racp_y = EXTR LRACP_y &j;
  40. SI (EXIS LRACP_z);
  41. REPE k (DIME LRACP_z);
  42. racp_z = EXTR LRACP_z &k;
  43. SI( ((ABS (racp_x - racp_y)) '<EG' prec_racp) ET
  44. ((ABS (racp_y - racp_z)) '<EG' prec_racp) ET
  45. ((ABS (racp_x - racp_z)) '<EG' prec_racp) );
  46. valeur_correcte = racp_x;
  47. QUIT i;
  48. FINSI;
  49. FIN k;
  50. SINON;
  51. SI((ABS (racp_x - racp_y)) '<EG' prec_racp);
  52. valeur_correcte = racp_x;
  53. QUIT i;
  54. FINSI;
  55. FINSI;
  56. FIN j;
  57. FIN i;
  58.  
  59. SI (valeur_correcte 'EGA' 0);
  60. ERRE 21;
  61. FINSI;
  62. FINP valeur_correcte;
  63.  
  64.  
  65. DEBP verification_dl P1*'POINT' P2*'POINT' P3*'POINT' Nb_elem*'ENTIER' arc1*'MAILLAGE' test*'MOT ';
  66.  
  67. * Recuperation des parametres de la parabole.
  68. * ces parametres sont utilise dans la source de l'operateur : ligne.eso
  69. XDIS XV XIN = parametres_para P1 P2 P3 1;
  70. YDIS YV YIN = parametres_para P1 P2 P3 2;
  71. para_a = (4. * XV * XV) + (4. * YV * YV);
  72. para_b = (-4. * XV * XDIS) + (-4. * YV * YDIS);
  73. para_c = (XDIS * XDIS) + (YDIS * YDIS);
  74. SI ((VALE 'DIME') EGA 3);
  75. ZDIS ZV ZIN = parametres_para P1 P2 P3 3;
  76. para_a = para_a + (4. * ZV * ZV);
  77. para_b = para_b + (-4. * ZV * ZDIS);
  78. para_c = para_c + (ZDIS * ZDIS);
  79. FINSI;
  80.  
  81. * On opere le changement de variable pour l'integration.
  82. * Plus d'information sur le changement de variable est disponible dans la source ligne.eso
  83. Beta = -1. * ((para_b ** 2) - (4. * para_a * para_c)) / (4. * para_a);
  84. Alpha = para_b / (2. * para_a);
  85. dpdx_2 = Beta / ((ABS para_a) ** 0.5);
  86.  
  87. * On integre entre x0=x(PARA=-1) et x1=x(PARA=1)
  88. x0 = ((ABS (para_a / Beta)) ** 0.5) * (-1. + Alpha);
  89. x1 = ((ABS (para_a / Beta)) ** 0.5) * (1. + Alpha);
  90. dl_x0 = (0.5 * x0 * (((x0 * x0) + 1.) ** 0.5)) + (0.5 * (ASIH x0));
  91. dl_x1 = (0.5 * x1 * (((x1 * x1) + 1.) ** 0.5)) + (0.5 * (ASIH x1));
  92. longueur_para = dpdx_2 * (dl_x1 - dl_x0);
  93.  
  94. * On boucle sur chaque point de la parabole.
  95. * On calcule la longueur curviligne de chaque element.
  96. * On sort en erreur si celle-ci n'est pas constante.
  97. er_tol = 1.E4 * longueur_para * (VALE PREC) ;
  98. dl_ok = longueur_para / Nb_elem;
  99. P0 = -1.;
  100. REPE i Nb_elem;
  101.  
  102. Point_noeud = arc1 'POIN' (&i + 1);
  103.  
  104. x = COOR 1 Point_noeud;
  105. y = COOR 2 Point_noeud;
  106.  
  107. LRACP_x = RACP (XIN + XV - x) XDIS (-1. * XV);
  108. LRACP_y = RACP (YIN + YV - y) YDIS (-1. * YV);
  109.  
  110. SI ((VALE 'DIME') EGA 3);
  111. z = COOR 3 Point_noeud;
  112. LRACP_z = RACP (ZIN + ZV - z) ZDIS (-1. * ZV);
  113. P1 = r_valeur LRACP_x LRACP_y LRACP_z;
  114. SINON;
  115. P1 = r_valeur LRACP_x LRACP_y;
  116. FINSI;
  117.  
  118. x0 = ((ABS (para_a / Beta)) ** 0.5) * (P0 + Alpha);
  119. x1 = ((ABS (para_a / Beta)) ** 0.5) * (P1 + Alpha);
  120. dl_x0 = (0.5 * x0 * (((x0 * x0) + 1.) ** 0.5)) + (0.5 * (ASIH x0));
  121. dl_x1 = (0.5 * x1 * (((x1 * x1) + 1.) ** 0.5)) + (0.5 * (ASIH x1));
  122.  
  123. dl = dpdx_2 * (dl_x1 - dl_x0);
  124. SI((ABS (dl - dl_ok)) '>' er_tol);
  125. MESS 'ERREUR dans :' test;
  126. ERRE 'Densite des elements non constante';
  127. FINSI;
  128.  
  129. P0 = P1;
  130.  
  131. FIN i;
  132.  
  133. FINP;
  134.  
  135. OPTI DIME 2 ELEM SEG2 ;
  136. P1 = 2. 0. ;
  137. P2 = -20. 1. ;
  138. P3 = 0. 3. ;
  139. Nb_elem = 10;
  140. arc1 = PARA Nb_elem P1 P2 P3 ;
  141. verification_dl P1 P2 P3 Nb_elem arc1 'test 1 - DIME 2 ELEM SEG2';
  142. TRAC arc1;
  143.  
  144. OPTI DIME 2 ELEM SEG2 ;
  145. P1 = 5. 0. ;
  146. P2 = 0. 2. ;
  147. P3 = 0. 7. ;
  148. Nb_elem = 20;
  149. arc1 = PARA Nb_elem P1 P2 P3 ;
  150. verification_dl P1 P2 P3 Nb_elem arc1 'test 2 - DIME 2 ELEM SEG2';
  151. TRAC arc1;
  152.  
  153. OPTI DIME 2 ELEM SEG3 ;
  154. P1 = 2. 0. ;
  155. P2 = 2. 3. ;
  156. P3 = 0. 3. ;
  157. Nb_elem = 5;
  158. arc1 = PARA Nb_elem P1 P2 P3 ;
  159. verification_dl P1 P2 P3 (Nb_elem * 2) (CHAN 'SEG2' arc1) 'test 3 - DIME 2 ELEM SEG3';
  160. TRAC arc1;
  161.  
  162. OPTI DIME 3 ELEM SEG2 ;
  163. P1 = 2. 0. 0. ;
  164. P2 = 0. 4. -8. ;
  165. P3 = 0. 0. 3. ;
  166. Nb_elem = 10;
  167. arc1 = PARA Nb_elem P1 P2 P3 ;
  168. verification_dl P1 P2 P3 Nb_elem arc1 'test 4 - DIME 3 ELEM SEG2';
  169. TRAC arc1;
  170.  
  171. OPTI DIME 3 ELEM SEG3 ;
  172. P1 = -2. 0. 0. ;
  173. P2 = 0. 4. 8. ;
  174. P3 = 0. 0. 3. ;
  175. Nb_elem = 3;
  176. arc1 = PARA Nb_elem P1 P2 P3 ;
  177. verification_dl P1 P2 P3 (Nb_elem * 2) (CHAN 'SEG2' arc1) 'test 5 - DIME 3 ELEM SEG3';
  178. TRAC arc1;
  179.  
  180. fin;
  181.  
  182.  
  183.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales