Télécharger matoutil.procedur

Retour à la liste

Numérotation des lignes :

  1. * MATOUTIL PROCEDUR GOUNAND 26/07/06 21:15:06 12592
  2. ************************************************************************
  3. * NOM : MATOUTIL
  4. * DESCRIPTION : Procédures utilitaires utilisées par la procédure
  5. * MAILTOPO
  6. *
  7. *
  8. * LANGAGE : GIBIANE-CAST3M
  9. * AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA)
  10. * mail : stephane.gounand@cea.fr
  11. **********************************************************************
  12. * VERSION : v1, 08/04/2021, version initiale
  13. * HISTORIQUE : v1, 08/04/2021, creation
  14. * HISTORIQUE :
  15. * HISTORIQUE :
  16. ************************************************************************
  17. *
  18. 'DEBPROC' MATOUTIL ;
  19. 'ARGUMENT' motcle*'MOT' ;
  20. *
  21. lmotcle = 'MOTS' 'GASTIDX' 'GENTABIN' 'VERTABIN' 'MESUINTE' 'AFFQUAL'
  22. 'BORD' 'FERMEPZ' 'OUVREPZ' 'MOYECHAM' 'AFFCAND' 'MAILINTE' 'VERITOPO' ;
  23. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  24. 'ERREUR' 1052 'AVEC' motcle
  25. 'GASTIDX GENTABIN VERTABIN MESUINTE AFFQUAL BORD FERMEPZ OUVREPZ MOYECHAM AFFCAND MAILINTE VERITOPO' ;
  26. 'FINSI' ;
  27. *
  28. 'SI' ('EGA' motcle 'GASTIDX') ;
  29. ************************************************************************
  30. * NOM : GASTIDX
  31. * DESCRIPTION : Get and set table index
  32. *
  33. *
  34. *
  35. * LANGAGE : GIBIANE-CAST3M
  36. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  37. * mél : stephane.gounand@cea.fr
  38. **********************************************************************
  39. * VERSION : v1, 08/12/2017, version initiale
  40. * HISTORIQUE : v1, 08/12/2017, création
  41. * HISTORIQUE :
  42. * HISTORIQUE :
  43. ************************************************************************
  44. *
  45. *'DEBPROC' GASTIDX ;
  46. 'ARGU' tab*'TABLE' ;
  47. 'ARGUMENT' idx*'MOT' ;
  48. 'ARGU' valdef ;
  49. *
  50. valdefd = 'EXIS' valdef ;
  51. idxd = 'EXIS' tab idx ;
  52. setd = valdefd 'ET' ('NON' idxd) ;
  53. *
  54. *debug = 'VALE' debu ;
  55. *
  56. 'SI' setd ;
  57. tab . idx = valdef ;
  58. 'FINS' ;
  59. val = tab . idx ;
  60. *
  61. 'SI' faux ;
  62. tval = 'TYPE' val ;
  63. 'SI' (('EGA' tval 'ENTIER') 'OU' ('EGA' tval 'FLOTTANT') 'OU' ('EGA'
  64. tval 'MOT') 'OU' ('EGA' tval 'LOGIQUE')) ;
  65. mval = val ;
  66. 'SINO' ;
  67. mval = 'CHAI' '*' tval ;
  68. 'FINS' ;
  69. ch = 'CHAI' 'tab . ' idx*20 '='/21 mval*40 ;
  70. 'SI' setd ;
  71. ch = 'CHAI' ch '(defaut)'*60 ;
  72. 'FINS' ;
  73. 'MESS' ch ;
  74. 'FINS' ;
  75. *
  76. 'RESPRO' val ;
  77. *
  78. * End of procedure file GASTIDX
  79. *
  80. 'FINSI' ;
  81. 'SI' ('EGA' motcle 'GENTABIN') ;
  82. *$$$$ GENTABIN
  83. ************************************************************************
  84. * NOM : GENTABIN
  85. * DESCRIPTION : Construit une table dont les indices sont les mots
  86. * donnés en entrée.
  87. * Cette table sert ensuite dans VERTABIN pour vérifier
  88. * que tous les indices d'une autre table ne sont pas
  89. * différents de ceux de la première
  90. *
  91. * C'est un peu l'équivalent de MOTS et EXIS tab LISTMOTS
  92. * pour des mots de taille quelconque.
  93. *
  94. * LANGAGE : GIBIANE-CAST3M
  95. * AUTEUR : Stephane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  96. * mail : stephane.gounand@cea.fr
  97. **********************************************************************
  98. * VERSION : v1, 14/04/2020, version initiale
  99. * HISTORIQUE : v1, 14/04/2020, creation
  100. * HISTORIQUE :
  101. * HISTORIQUE :
  102. ************************************************************************
  103. *
  104. *'DEBPROC' GENTABIN ;
  105. 'ARGUMENT' tabin/'TABLE' ;
  106. 'SI' ('NON' ('EXIS' tabin)) ;
  107. tabin = 'TABL' ;
  108. 'FINS' ;
  109. 'REPE' bcl ;
  110. 'ARGU' titi/'MOT' ;
  111. 'SI' ('EXIS' titi) ;
  112. *dbg 'MESS' 'gentabin titi' ' ' titi ;
  113. tabin . titi = vrai ;
  114. 'SINO' ;
  115. 'QUIT' bcl ;
  116. 'FINS' ;
  117. 'FIN' bcl ;
  118. 'RESPRO' tabin ;
  119. *
  120. * End of procedure file GENTABIN
  121. *
  122. *'FINPROC' ;
  123. 'FINS' ;
  124. *
  125. 'SI' ('EGA' motcle 'VERTABIN') ;
  126. ************************************************************************
  127. * NOM : VERTABIN
  128. * DESCRIPTION : GENTABIN a construit une table dont les indices sont les
  129. * mots donnés en entrée.
  130. * Cette table sert ensuite dans VERTABIN pour vérifier
  131. * que tous les indices d'une autre table ne sont pas
  132. * différents de ceux de la première
  133. *
  134. * C'est un peu l'équivalent de MOTS et EXIS tab LISTMOTS
  135. * pour des mots de taille quelconque.
  136. *
  137. * LANGAGE : GIBIANE-CAST3M
  138. * AUTEUR : Stephane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  139. * mail : stephane.gounand@cea.fr
  140. **********************************************************************
  141. * VERSION : v1, 14/04/2020, version initiale
  142. * HISTORIQUE : v1, 14/04/2020, creation
  143. * HISTORIQUE :
  144. * HISTORIQUE :
  145. ************************************************************************
  146. *
  147. *'DEBPROC' VERTABIN ;
  148. 'ARGU' tverif*'TABLE' ;
  149. 'ARGU' tabin*'TABLE' ;
  150. tlicit = 'INDE' tverif ;
  151. *dbg 'LIST' tlicit ;
  152. dtl = 'DIME' tlicit ;
  153. 'REPE' itl dtl ;
  154. idx = 'CHAI' tlicit . &itl ;
  155. *dbg 'MESS' 'vertabin idx' ' ' idx ;
  156. 'SI' ('NON' ('EXIS' tabin idx)) ;
  157. * 791 2
  158. *Indice %m1:8 : N'est pas un indice de table reconnu
  159. 'ERRE' 791 'AVEC' idx ;
  160. 'FINS' ;
  161. 'FIN' itl ;
  162. *
  163. * End of procedure file VERTABIN
  164. *
  165. *'FINPROC' ;
  166. 'FINS' ;
  167. *
  168. 'SI' ('EGA' motcle 'MESUINTE') ;
  169. ************************************************************************
  170. * NOM : MESUINTE
  171. * DESCRIPTION :
  172. *
  173. *
  174. * Procédure MESUINTE qui devient MESU SURF (si dim 2) ou MESU VOLU (si dim 3)
  175. *
  176. *
  177. *
  178. * LANGAGE : GIBIANE-CAST3M
  179. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  180. * mél : stephane.gounand@cea.fr
  181. **********************************************************************
  182. * VERSION : v1, 25/08/2016, version initiale
  183. * HISTORIQUE : v1, 25/08/2016, création
  184. * HISTORIQUE :
  185. * HISTORIQUE :
  186. ************************************************************************
  187. *
  188. 'ARGUMENT' mai*'MAILLAGE' ;
  189. vdim = 'VALEUR' 'DIME' ;
  190. 'SI' ('EGA' vdim 2) ;
  191. vol = 'MESURE' mai 'SURF' ;
  192. 'SINON' ;
  193. vol = 'MESURE' mai 'VOLU' ;
  194. 'FINSI' ;
  195. 'RESPRO' vol ;
  196. *
  197. * End of procedure file MESUINTE
  198. *
  199. 'FINS' ;
  200. *
  201. 'SI' ('EGA' motcle 'AFFQUAL') ;
  202. ************************************************************************
  203. * NOM : AFFQUAL
  204. * DESCRIPTION : Affiche les qualités d'un maillage
  205. *
  206. *
  207. *
  208. * LANGAGE : GIBIANE-CAST3M
  209. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  210. * mél : stephane.gounand@cea.fr
  211. **********************************************************************
  212. * VERSION : v1, 25/08/2016, version initiale
  213. * HISTORIQUE : v1, 25/08/2016, création
  214. * HISTORIQUE :
  215. * HISTORIQUE :
  216. ************************************************************************
  217. *
  218. 'ARGUMENT' curtopo*'MAILLAGE' ;
  219. 'ARGU' volucib*'FLOTTANT' ;
  220. *plus nécessaire 'ARGU' denstol*'FLOTTANT' ;
  221. 'ARGU' lcritq*'LISTREEL' ;
  222. *
  223. *lmet=faux ;
  224.  
  225. laff=vrai ;
  226. lres=faux ;
  227. momet = 'GEOM' ;
  228. vprec = '*' ('VALE' 'PREC') 10.d0 ;
  229.  
  230. lmotcle = 'MOTS' 'VMET' 'NAFF' 'REST' 'ARIT' 'GEOM' ;
  231. 'REPETER' imotcle ;
  232. 'ARGUMENT' motcle/'MOT' ;
  233. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  234. * 'MESS' ('CHAI' 'affqual.proc : mot-cle lu :' motcle) ;
  235. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  236. cherr = 'CHAINE' 'Keyword' ' ' motcle ' unknown.' ; 'ERREUR' cherr ;
  237. 'FINSI' ;
  238. 'SI' ('EGA' motcle 'VMET') ;
  239. 'ARGU' metva ;
  240. * 'MESS' ('CHAI' 'affqual.proc : metva=') ;
  241. * 'LIST' ('TYPE' metva);
  242. 'FINS' ;
  243. 'SI' ('EGA' motcle 'NAFF') ; laff=faux ; 'FINSI' ;
  244. 'SI' ('EGA' motcle 'REST') ; lres=vrai ; 'FINSI' ;
  245. 'SI' ('EGA' motcle 'ARIT') ; momet = motcle ; 'FINSI' ;
  246. 'SI' ('EGA' motcle 'GEOM') ; momet = motcle ; 'FINSI' ;
  247. 'FIN' imotcle ;
  248. *'MESS' ('CHAI' 'laff=' laff) ;
  249. *'MESS' ('CHAI' 'lmet=' lmet) ;
  250. *'MESS' ('CHAI' 'lres=' lres) ;
  251. lmetva = 'EXIS' metva ;
  252. 'SI' lmetva ;
  253. qtopo = 'INDI' 'TOP2' curtopo metva momet lcritq ;
  254. 'SINO' ;
  255. qtopo = 'INDI' 'TOP2' curtopo lcritq ;
  256. 'FINS' ;
  257. *listreel nel = 'DIME' qtopo ;
  258. nel = 'NBEL' curtopo ;
  259. nno = 'NBNO' curtopo ;
  260. dvol = '-' ('MESURE' curtopo) volucib ;
  261. cqalo = qtopo ;
  262. cqalog = 'CHAN' cqalo ('MODE' ('EXTR' cqalo 'MAIL') 'THERMIQUE') 'GRAVITE' ;
  263. cqalol = 'EXTR' qtopo 'VALE' 'TOP2' ;
  264. cqalol = 'ORDO' cqalol ; dcqalol = 'DIME' cqalol ;
  265. miq = 'EXTR' cqalol 1 ; maq = 'EXTR' cqalol dcqalol ;
  266. meq = 'EXTR' cqalol ('/' ('+' 1 dcqalol) 2) ;
  267. * miq = 'MINIMUM' qtopo ; maq = 'MAXIMUM' qtopo ;
  268. **listreel moq = '/' ('SOMME' qtopo) nel ;
  269. * moq = MATOUTIL 'MOYECHAM' qtopo ;
  270. *! Test des deux façons de calculer !
  271. 'SI' faux ;
  272. 'SI' lmetva ;
  273. qtopo2 = 'INDI' 'TOP2' curtopo metva momet 'LISTREEL' lcritq ;
  274. 'SINO' ;
  275. qtopo2 = 'INDI' 'TOP2' curtopo 'LISTREEL' lcritq ;
  276. 'FINS' ;
  277. cqalo2 = 'ORDO' qtopo2 ; dcqalo2 = 'DIME' cqalo2 ;
  278. meq2 = 'EXTR' cqalo2 ('/' ('+' 1 dcqalo2) 2) ;
  279. * moq2 = ('SOMM' qtopo2) '/' ('DIME' qtopo2) ;
  280. * VALE prec un peu trop serré pour semt2
  281. 'SI' ('NEG' meq meq2 vprec) ;
  282. 'MESS' 'meq,meq2,dmeq' meq meq2 ('-' meq meq2) ;
  283. 'FINS' ;
  284. 'FINS' ;
  285. * moqtopo = 'MODE' curtopo 'THERMIQUE' ;
  286. * moq = '/' ('INTG' qtopo moqtopo) ('MESU' curtopo) ;
  287. *listreel lvnul = POSI 0.D0 'DANS' qtopo volutol 'TOUS' ;
  288. *listreel nnul = 'DIME' lvnul ;
  289. *non ! Les qtopo sont des rapports de longueurs au carré
  290. * Les qtopo sont des rapports de longueurs
  291. * nnul = 'MASQ' ('EXCO' 'TOP2' qtopo) 'EGINFE' 'SOMME' vprec ;
  292. nnul = 'MASQ' cqalog 'EGINFE' 'SOMME' vprec ;
  293. 'SI' lres ;
  294. 'RESP' dvol nel nnul nno miq maq meq ;
  295. 'FINS' ;
  296. 'SI' laff ;
  297. *'SI' ('EGA' nnul 0) ;
  298. jcritq = 'ENTI' ('EXTR' lcritq 1) 'PROC' ;
  299. titq = 'CHAINE' 'FORMAT' '(E10.3)'
  300. ' Dvol=' dvol ' Nel=' nel ' Nel0=' nnul ' Nno=' nno
  301. ' Qmin=' miq ' Qmax=' maq ' Qmed=' meq ' crit=' jcritq ;
  302. 'SI' lmetva ;
  303. pcritq = 'EXTR' lcritq 2 ;
  304. qcritq = 'EXTR' lcritq 3 ;
  305. titq = 'CHAINE' 'FORMAT' '(F4.1)' titq ' p=' pcritq ' q=' qcritq ;
  306. 'FINS' ;
  307. *'SINON' ;
  308. * titq = 'CHAINE' ' Dvol=' dvol ' N=' nel
  309. * ' N0=' nnul ' max=' maq ' moy=' moq ;
  310. *'FINSI' ;
  311. * titv = 'CHAINE' 'Nb. Elements plats=' nnul ;
  312. 'MESSAGE' titq ;
  313. * 'MESSAGE' titv ;
  314. 'FINS' ;
  315. *
  316. * End of procedure file AFFQUAL
  317. *
  318. 'FINS' ;
  319. *
  320. 'SI' ('EGA' motcle 'BORD') ;
  321. ************************************************************************
  322. * NOM : BORD
  323. * DESCRIPTION :
  324. *
  325. *
  326. * Procédure BORD qui devient CONTOUR (si dim 2) ou ENVELOPPE (si dim 3)
  327. *
  328. *
  329. *
  330. * LANGAGE : GIBIANE-CAST3M
  331. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  332. * mél : stephane.gounand@cea.fr
  333. **********************************************************************
  334. * VERSION : v1, 25/08/2016, version initiale
  335. * HISTORIQUE : v1, 25/08/2016, création
  336. * HISTORIQUE :
  337. * HISTORIQUE :
  338. ************************************************************************
  339. *
  340. 'ARGUMENT' mail*'MAILLAGE' ;
  341. *vdim = 'VALEUR' 'DIME' ;
  342. mdim = DEADUTIL 'DIMM' mail ;
  343. mailb = faux ;
  344. 'SI' ('EGA' mdim 2) ;
  345. mailb = 'CONTOUR' mail 'NOID' ;
  346. 'FINSI' ;
  347. 'SI' ('EGA' mdim 3) ;
  348. mailb = 'ENVELOPPE' mail 'NOID' ;
  349. * mailb = 'ENVELOPPE' mail ;
  350. 'FINSI' ;
  351. 'SI' ('EGA' ('TYPE' mail) 'LOGIQUE') ;
  352. 'ERREUR' ('CHAINE' 'mdim=' mdim) ;
  353. 'FINSI' ;
  354. 'RESPRO' mailb ;
  355. *
  356. * End of procedure file BORD
  357. *
  358. 'FINS' ;
  359. *
  360. 'SI' ('EGA' motcle 'FERMEPZ') ;
  361. ************************************************************************
  362. * NOM : FERMEPZ
  363. * DESCRIPTION :
  364. *
  365. * Ferme une topologie en étoilant son contour avec un point donné
  366. *
  367. *
  368. *
  369. *
  370. * LANGAGE : GIBIANE-CAST3M
  371. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  372. * mél : stephane.gounand@cea.fr
  373. **********************************************************************
  374. * VERSION : v1, 25/08/2016, version initiale
  375. * HISTORIQUE : v1, 25/08/2016, création
  376. * HISTORIQUE : v2 11/06/2018, ajout 2eme maillage servant à la partie
  377. * du contour qui ne doit pas être changée
  378. * HISTORIQUE : v3 on decoupe le bord en morceaux plats...
  379. ************************************************************************
  380. *
  381. *'DEBPROC' FERMEPZ ;
  382. 'ARGUMENT' topo*'MAILLAGE' ;
  383. 'ARGU' mailnoch*'MAILLAGE' ;
  384. 'ARGU' ialgo*'ENTIER' ;
  385. 'ARGU' denstol*'FLOTTANT' ;
  386. 'ARGU' impr*'ENTIER' ;
  387. *'ARGUMENT' pferm*'POINT' ;
  388. * Le inverse semble hyper important !!!!
  389. btopo = MATOUTIL 'BORD' topo ;
  390. 'SI' ('EXIS' mailnoch) ;
  391. btopo2 = 'DIFF' btopo mailnoch ;
  392. btopo = btopo2 ;
  393. 'FINS' ;
  394. * Partitionnement
  395. *old Si ialgo=0, il faut verifier l'absence d'elements degeneres au bord
  396. * Si ialgo=0, il faut supprimer les elements degeneres du bord
  397. * sinon part ne peut fonctionner
  398. lpart= vrai ;
  399. 'SI' ('EGA' ialgo 0) ;
  400. * ttopo = 'ELEM' topo 'APPUYE' 'ELEM' btopo ;
  401. * jttopo = DEADJACO ttopo ;
  402. imetopo = DEADMETR btopo ;
  403. spetopo = 'TENS' 'PRIN' imetopo ;
  404. * On prend l'avant-derniere valeur propre (la derniere est nulle car element surfacique)
  405. avdim = '-' ('VALE' 'DIME') 1 ;
  406. navvp = 'CHAI' 'SI' avdim avdim ;
  407. avvp = 'EXCO' navvp spetopo ;
  408. lavvp = '**' ('ABS' avvp) 0.5 ;
  409. milavvp = 'MINI' lavvp ; malavvp = 'MAXI' lavvp ;
  410. * vtol2 = '**' vtol 0.7 ;
  411. * 'MESS' 'FERMEPZ : milavvp=' milavvp ' malavvp=' malavvp ' denstol=' denstol ;
  412. etopo0 = 'ELEM' lavvp 'EGINFE' denstol ;
  413. nel0 = 'NBEL' etopo0 ;
  414. 'SI' ('>' nel0 0) ;
  415. 'MESS' '!! FERMEPZ : on enleve' ' ' nel0 ' elements du bord qui sont singuliers.' ;
  416. 'MESS' '!! : milavvp=' milavvp ' malavvp=' malavvp ' denstol=' denstol ;
  417. btopo3 = 'DIFF' btopo etopo0 ;
  418. btopo = btopo3 ;
  419. * lpart = faux ;
  420. * btopo0 = MATOUTIL 'BORD' ttopo0 ;
  421. * ibt = 'INTE' btopo0 btopo ;
  422. * nibt = 'NBEL' ibt ;
  423. * 'SI' ('>' nibt 0) ;
  424. * 'MESS' '!! :' ' ' nibt ' elements du bord ne seront pas etoiles.' ;
  425. * btopo3 = 'DIFF' btopo ibt ;
  426. * btopo = btopo3 ;
  427. * 'FINS' ;
  428. 'FINS' ;
  429. *old2 jctopo = 'INDI' 'ISOD' ctopo ;
  430. *old2 mijct = 'MINI' jctopo ; majct = 'MAXI' jctopo ;
  431. *old2 ctopo2 = 'ELEM' jctopo 'SUPERIEUR' vtol 'STRI' ;
  432. *old2 nelv = '-' ('NBEL' ctopo) ('NBEL' ctopo2) ;
  433. *old2 'MESS' 'FERMEPZ : mijct=' mijct ' majct=' majct ' vtol=' vtol ;
  434. *old2 'SI' ('>' nelv 0) ;
  435. *old2 'MESS' '!! FERMEPZ : on enleve' ' ' nelv ' elements du bord.' ;
  436. *old2 'FINS' ;
  437. *old2 ctopo = ctopo2 ;
  438. *old ttopo = 'ELEM' topo 'APPUYE' 'ELEM' btopo ;
  439. *old ctop = 'INDI' 'TOP2' ttopo ;
  440. *old mictop = 'MINI' ctop ;
  441. *old 'SI' ('<' mictop vtol) ;
  442. *old 'SI' ('>EG' impr 2) ;
  443. *old 'MESS' 'minivol=' mictop ' => elements degeneres touchant le bord : pas* de noeud virtuel pour cette passe' ;
  444. *old 'FINS' ;
  445. *old lpart = faux ;
  446. *old 'FINS' ;
  447. 'FINS' ;
  448. ctopo = 'INVERSE' btopo ;
  449. * Important que pfermi et tout les noeuds de la face soient coplanaires.
  450. 'SI' lpart ;
  451. tbor = 'PART' 'SEPA' ctopo 'ANGL' 0.01 'TELQ' ;
  452. lbor = 'ENUM' 'TABL' tbor ;
  453. * lbor = 'ENUM' ctopo ;
  454. topof = 'ENUM' topo ;
  455. mpferm = 'ENUM' ;
  456. * topof = topo 'ET' (ETOILE pferm ctopo) ;
  457. * topof = topo 'ET' ('COUT' pferm ctopo) ;
  458. dlbor = 'DIME' lbor ;
  459. 'REPE' iilbor dlbor ;
  460. ilbor = &iilbor ;
  461. ibor = 'EXTR' lbor ilbor ;
  462. pfermi = 'BARY' ibor ;
  463. topof = 'ET' topof ('COUT' pfermi ibor) ;
  464. mpferm = 'ET' mpferm pfermi ;
  465. 'FIN' iilbor ;
  466. * Teste si la topologie résultante est sans bord
  467. *TESTIDMA (BORD topof) ('VIDE' 'MAILLAGE') ;
  468. *'RESPRO' topof ;
  469. 'RESP' ('ETG' topof) ('ETG' mpferm) ;
  470. 'SINO' ;
  471. 'RESP' topo ('VIDE' 'MAILLAGE'/'POI1') ;
  472. 'FINS' ;
  473. * Pas de noeud virtuel
  474. *
  475. * End of procedure file FERMEPZ
  476. *
  477. *'FINPROC' ;
  478. 'FINS' ;
  479. *
  480. *
  481. 'SI' ('EGA' motcle 'OUVREPZ') ;
  482. ************************************************************************
  483. * NOM : OUVREPZ
  484. * DESCRIPTION :
  485. *
  486. *
  487. * Ouvre une topologie en enlevant les éléments touchant un point donné
  488. *
  489. *
  490. *
  491. * LANGAGE : GIBIANE-CAST3M
  492. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  493. * mél : stephane.gounand@cea.fr
  494. **********************************************************************
  495. * VERSION : v1, 25/08/2016, version initiale
  496. * HISTORIQUE : v1, 25/08/2016, création
  497. * HISTORIQUE :
  498. * HISTORIQUE :
  499. ************************************************************************
  500. *
  501. *'DEBPROC' OUVREPZ ;
  502. 'ARGUMENT' xltopo/'LISTOBJE' ;
  503. lxltopo = 'EXIS' xltopo ;
  504. 'SI' ('NON' lxltopo) ;
  505. 'ARGU' topo*'MAILLAGE' ;
  506. xltopo = 'ENUM' topo ;
  507. 'FINS' ;
  508. *'ARGUMENT' pferm*'POINT' ;
  509. 'ARGUMENT' mpferm*'MAILLAGE' ;
  510. dltopo = 'DIME' xltopo ;
  511. xltopoo = 'ENUM' ;
  512. 'REPE' iltopo dltopo ;
  513. topo = 'EXTR' xltopo &iltopo ;
  514. touchp = 'ELEM' topo 'APPUYE' 'LARGEMENT' mpferm 'NOVERIF' ;
  515. topoo = 'DIFF' topo touchp ;
  516. xltopoo = xltopoo 'ET' topoo ;
  517. 'FIN' iltopo ;
  518. *
  519. 'SI' lxltopo ;
  520. 'RESPRO' xltopoo ;
  521. 'SINO' ;
  522. 'RESPRO' topoo ;
  523. 'FINS' ;
  524. *
  525. * End of procedure file OUVREPZ
  526. *
  527. *'FINPROC' ;
  528. 'FINS' ;
  529. *
  530. 'SI' ('EGA' motcle 'MOYECHAM') ;
  531. ************************************************************************
  532. * NOM : MOYECHAM
  533. * DESCRIPTION : Fait la moyenne d'un champ par élément (supposé scalaire
  534. * et constant par élément) au sens : somme des valeurs
  535. * sur les éléments divisée par le nombre d'éléments.
  536. *
  537. *
  538. *
  539. * LANGAGE : GIBIANE-CAST3M
  540. * AUTEUR : Stephane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  541. * mail : stephane.gounand@cea.fr
  542. **********************************************************************
  543. * VERSION : v1, 02/05/2020, version initiale
  544. * HISTORIQUE : v1, 02/05/2020, creation
  545. * HISTORIQUE :
  546. * HISTORIQUE :
  547. ************************************************************************
  548. *
  549. *'DEBPROC' MOYECHAM ;
  550. 'ARGUMENT' cha*'MCHAML' ;
  551. *
  552. lco = 'EXTR' cha 'COMP' ;
  553. dco = 'DIME' lco ;
  554. * 320 2
  555. * Il faut specifier un champ par element avec une seule composante
  556. 'SI' ('NEG' dco 1) ;
  557. 'ERRE' 320 ;
  558. 'FINS' ;
  559. * Change le nom de composante en scal plutôt que qualtopo
  560. * car sinon chan chpo supp plante.
  561. *cha = 'EXCO' ('EXTR' lco 1) cha 'SCAL ' ;
  562. cha = 'CHAN' 'COMP' 'SCAL ' cha ;
  563. mai = 'EXTR' cha 'MAIL' ;
  564. nel = 'NBEL' mai ;
  565. *moc = 'MODE' mai 'THERMIQUE' ;
  566. moc = 'MODE' mai 'MECANIQUE' ;
  567. *'MESS' 'moyecham : gravit' ;
  568. cha2 = 'CHAN' 'CHAM' cha moc 'GRAVITE' 'SCALAIRE' ;
  569. * Pb ici
  570. *cha1 = 'MANU' 'CHML' moc 'SCAL' 1. 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  571. *chavol = 'INTG' moc cha1 'ELEM' ;
  572. *'LIST' 'RESU' chavol ;
  573. *'ERRE' stop ;
  574. *ms = 'MOTS' 'SCAL' ;
  575. *'LIST' 'RESU' cha ;
  576. *'LIST' 'RESU' cha2 ;
  577. *'LIST' 'RESU' cha1 ;
  578. *'LIST' 'RESU' chavol ;
  579. * chavol est nul sur les éléments de volume nul
  580. *cha2v = '/' cha2 chavol ms ms ms ;
  581. *som = 'INTG' moc cha2v ;
  582. * Plante sur une erreur 5.
  583. *'MESS' 'moyecham : chpo' ;
  584. chp2 = 'CHAN' 'CHPO' moc cha2 'SUPP' ;
  585. som = 'MAXI' ('RESU' chp2) ;
  586. moy = '/' som nel ;
  587. 'RESPRO' moy ;
  588. *
  589. * End of procedure file MOYECHAM
  590. *
  591. *'FINPROC' ;
  592. 'FINS' ;
  593. *
  594. 'SI' ('EGA' motcle 'AFFCAND') ;
  595. ************************************************************************
  596. * NOM : AFFCAND
  597. * DESCRIPTION :
  598. *
  599. * Procédure pour afficher une table de candidat + la valeur dun critère
  600. * en coloriant le candidat
  601. *
  602. *
  603. *
  604. *
  605. * LANGAGE : GIBIANE-CAST3M
  606. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  607. * mél : stephane.gounand@cea.fr
  608. **********************************************************************
  609. * VERSION : v1, 25/08/2016, version initiale
  610. * HISTORIQUE : v1, 25/08/2016, création
  611. * HISTORIQUE :
  612. * HISTORIQUE :
  613. ************************************************************************
  614. *
  615. *'DEBPROC' AFFCAND ;
  616. 'ARGUMENT' tcand/'TABLE' ;
  617. 'SI' ('NON' ('EXISTE' tcand)) ; tcand = 'TABLE' ; 'FINSI' ;
  618. 'REPETER' boumail ;
  619. 'ARGUMENT' mail/'MAILLAGE' ;
  620. 'SI' ('EXISTE' mail) ;
  621. itab = '+' ('DIME' tcand) 1 ;
  622. tcand . itab = mail ;
  623. 'SINON' ;
  624. 'QUITTER' boumail ;
  625. 'FINSI' ;
  626. 'FIN' boumail ;
  627. *
  628. ltypost = 'MOTS' 'MAIL' 'VOLU' 'QUAL' ;
  629. 'ARGU' typost*'MOT' ;
  630. itypost = 'POSI' typost 'DANS' ltypost ;
  631. 'SI' ('EGA' itypost 0) ;
  632. *Mot-clé incorrect "%M1:4". Voici la liste des valeurs admises :
  633. 'ERRE' 1052 'AVEC' typost 'MAIL VOLU QUAL' ;
  634. 'FINS' ;
  635. *
  636. tit = 'GOONI FECIT' ;
  637. momet = 'GEOM' ;
  638. *
  639. lmotcle = 'MOTS' 'VMET' 'TITR' 'ARIT' 'GEOM' ;
  640. 'REPETER' imotcle ;
  641. 'ARGUMENT' motcle/'MOT' ;
  642. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  643. * 'MESS' ('CHAI' 'affcand.proc : mot-cle lu :' motcle) ;
  644. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  645. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  646. 'FINSI' ;
  647. 'SI' ('EGA' motcle 'VMET') ;
  648. 'ARGU' metva ;
  649. * 'MESS' ('CHAI' 'affcand.proc : metva=') ;
  650. * 'LIST' ('TYPE' metva);
  651. 'FINS' ;
  652. 'SI' ('EGA' motcle 'TITR') ;
  653. 'ARGU' tit*'MOT' ;
  654. 'FINS' ;
  655. 'SI' ('EGA' motcle 'ARIT') ; momet = motcle ; 'FINS' ;
  656. 'SI' ('EGA' motcle 'GEOM') ; momet = motcle ; 'FINS' ;
  657. 'FIN' imotcle ;
  658. *
  659. ncand = 'DIME' tcand ;
  660. 'SI' ('NON' ('>' ncand 0)) ;
  661. 'ERREUR' 'Table vide' ;
  662. 'FINSI' ;
  663. dx = 0. ;
  664. mtot = 'VIDE' 'MAILLAGE' ;
  665. chvol = 'VIDE' 'CHPOINT'/'DIFFUS' ;
  666. mqual = 'VIDE' 'MMODEL' ;
  667. cqual = 'VIDE' 'MCHAML' ;
  668. vdim = 'VALEUR' 'DIME' ;
  669. 'REPETER' icand ncand ;
  670. tcandi = tcand . &icand ;
  671. mdec = tcandi ;
  672. mtot = 'ET' mtot mdec ;
  673. xm = 'COORDONNEE' 1 tcandi ;
  674. ddx = '*' ('-' ('MAXIMUM' xm) ('MINIMUM' xm)) 1.1 ;
  675. dx = '+' dx ddx ;
  676. 'SI' ('EGA' itypost 2) ;
  677. cdec = 'MANUEL' 'CHPO' mdec 1 'SCAL' ('MESURE' mdec)
  678. 'NATURE' 'DIFFUS' ;
  679. chvol = 'ET' chvol cdec ;
  680. 'FINSI' ;
  681. 'SI' ('EGA' itypost 3) ;
  682. modec = 'MODE' mdec 'THERMIQUE' ;
  683. mqual = 'ET' mqual modec ;
  684. 'SI' ('EXIS' metva) ;
  685. cdec = 'INDI' 'TOP2' mdec metva momet ;
  686. 'SINO' ;
  687. cdec = 'INDI' 'TOP2' mdec ;
  688. 'FINS' ;
  689. cqual = 'ET' cqual cdec ;
  690. 'FINSI' ;
  691. 'FIN' icand ;
  692. *mtra = mtot 'ET' cnt ;
  693. mtra = mtot ;
  694. echq = 'PROG' 0. 'PAS' ('/' 1. 20.) 1. ;
  695. *echv = 'PROG' volucib 'PAS' ('/' ('-' voluini volucib) 20.) voluini ;
  696. *'SI' lnclk ;
  697. * 'SI' ('EGA' itypost 1) ;
  698. * 'TRACER' mtra 'TITR' tit 'NCLK' ;
  699. * 'FINSI' ;
  700. * 'SI' ('EGA' itypost 2) ;
  701. * 'TRACER' chvol mtot mtra 'TITR' tit 'NCLK' ;
  702. * 'FINSI' ;
  703. * 'SI' ('EGA' itypost 3) ;
  704. * 'TRACER' cqual mqual mtra echq 'TITR' tit 'NCLK' ;
  705. * 'FINSI' ;
  706. *'SINON' ;
  707. 'SI' ('EGA' itypost 1) ;
  708. 'TRACER' mtra 'TITR' tit ;
  709. 'FINSI' ;
  710. 'SI' ('EGA' itypost 2) ;
  711. * 'LISTE' echv ; 'LISTE' mtot ;'LISTE' mtra ; 'LISTE' chvol ;
  712. 'TRACER' chvol mtot mtra 'TITR' tit ;
  713. 'FINSI' ;
  714. 'SI' ('EGA' itypost 3) ;
  715. 'TRACER' cqual mqual mtra echq 'TITR' tit ;
  716. 'FINSI' ;
  717. *'FINSI' ;
  718. *
  719. * End of procedure file AFFCAND
  720. *
  721. *'FINPROC' ;
  722. 'FINS' ;
  723. *
  724. 'SI' ('EGA' motcle 'MAILINTE') ;
  725. ************************************************************************
  726. * NOM : MAILINTE
  727. * DESCRIPTION :
  728. *
  729. *
  730. * Procédure MAILINTE qui devient SURF (si dim 2) ou VOLU (si dim 3)
  731. *
  732. *
  733. *
  734. * LANGAGE : GIBIANE-CAST3M
  735. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  736. * mél : stephane.gounand@cea.fr
  737. **********************************************************************
  738. * VERSION : v1, 25/09/2017, version initiale
  739. * HISTORIQUE : v1, 25/09/2017, création
  740. * HISTORIQUE :
  741. * HISTORIQUE :
  742. ************************************************************************
  743. *
  744. *'DEBPROC' MAILINTE ;
  745. 'ARGUMENT' mail*'MAILLAGE' ;
  746. vdim = 'VALEUR' 'DIME' ;
  747. mailb = faux ;
  748. 'SI' ('EGA' vdim 2) ;
  749. mailb = 'SURF' mail ;
  750. 'FINSI' ;
  751. 'SI' ('EGA' vdim 3) ;
  752. mailb = 'VOLU' mail 'VERB' ;
  753. 'FINSI' ;
  754. 'SI' ('EGA' ('TYPE' mail) 'LOGIQUE') ;
  755. 'ERREUR' ('CHAINE' 'vdim=' vdim) ;
  756. 'FINSI' ;
  757. 'RESPRO' mailb ;
  758. *
  759. * End of procedure file MAILINTE
  760. *
  761. *'FINPROC' ;
  762. 'FINS' ;
  763. 'SI' ('EGA' motcle 'VERITOPO') ;
  764. ************************************************************************
  765. * NOM : VERITOPO
  766. * DESCRIPTION :
  767. *
  768. *
  769. * Procédure VERITOPO qui verifie une topologie (i.e. un maillage massif)
  770. *
  771. *
  772. *
  773. * LANGAGE : GIBIANE-CAST3M
  774. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  775. * mél : stephane.gounand@cea.fr
  776. **********************************************************************
  777. * VERSION : v1, 03/11/2025, version initiale
  778. * HISTORIQUE : v1, 03/11/2025, création
  779. * HISTORIQUE :
  780. * HISTORIQUE :
  781. ************************************************************************
  782. *
  783. *'DEBPROC' VERITOPO ;
  784. 'ARGUMENT' xxxtopo*'MAILLAGE' ;
  785. 'ARGU' xxxvolucib/'FLOTTANT' ;
  786. lvolucib = 'EXIS' xxxvolucib ;
  787. 'SI' lvolucib ;
  788. 'ARGU' volutol*'FLOTTANT' ;
  789. 'FINS' ;
  790. 'ARGU' xxxdesc*'MOT' ;
  791. 'SI' ('NON' ('EXIS' xxxdesc)) ; xxxdesc = 'CHAI' 'VERITOPO :' ; 'FINS' ;
  792. 'ARGU' xxxmbnc/'MAILLAGE' ;
  793. lok = vrai ;
  794. vdim = 'VALEUR' 'DIME' ;
  795. *
  796. * Verification pas d'elements en double
  797. *
  798. xxxtopou = 'UNIQ' xxxtopo ;
  799. dnode = '-' ('NBEL' xxxtopo) ('NBEL' xxxtopou) ;
  800. 'SI' ('NEG' dnode 0) ;
  801. 'MESSAGE' xxxdesc ' ' dnode ' elements en double' ;
  802. lok = lok 'ET' faux ;
  803. 'FINS' ;
  804. *
  805. * Verification que le bord est ferme
  806. *
  807. lbord = vrai ;
  808. 'SI' ('EGA' vdim 2) ;
  809. bxxxtopo = 'CONT' 'EXTE' xxxtopo ;
  810. citopo = 'CONT' 'INTE' xxxtopo 'NOID' ;
  811. 'SI' ('NEG' ('NBEL' citopo) 0) ;
  812. 'MESS' xxxdesc ' Aretes partagees par plus de deux elements' ;
  813. lbord = lbord 'ET' faux ;
  814. 'FINS' ;
  815. pbor = 'POIN' bxxxtopo 'EXTR' ;
  816. 'SI' ('NEG' ('NBEL' pbor) 0) ;
  817. 'MESS' xxxdesc ' Bord non ferme' ;
  818. lbord = lbord 'ET' faux ;
  819. 'FINS' ;
  820. 'FINS' ;
  821. 'SI' ('EGA' vdim 3) ;
  822. bxxxtopo = 'ENVE' xxxtopo ;
  823. cnext = 'CONT' 'EXTE' bxxxtopo 'NOID' ;
  824. 'SI' ('NEG' ('NBEL' cnext) 0) ;
  825. 'MESS' xxxdesc ' Bord non ferme' ;
  826. lbord = lbord 'ET' faux ;
  827. 'FINS' ;
  828. cnint = 'CONT' 'INTE' bxxxtopo 'NOID' ;
  829. 'SI' ('NEG' ('NBEL' cnint) 0) ;
  830. 'MESS' xxxdesc ' Bord non simple' ;
  831. * lbord = lbord 'ET' faux ;
  832. 'FINS' ;
  833. 'FINS' ;
  834. lok = lok 'ET' lbord ;
  835. *
  836. * Volume toujours correct ?
  837. *
  838. 'SI' lvolucib ;
  839. volv = 'MESU' xxxtopo ;
  840. dvolv = '-' xxxvolucib volv ;
  841. 'SI' ('NEG' dvolv 0 volutol) ;
  842. 'MESSAGE' xxxdesc ' Volume (mesu) modifie vol=' volv ' / volucib=' xxxvolucib ;
  843. 'MESSAGE' xxxdesc ' dvol=' dvolv ;
  844. lok = lok 'ET' faux ;
  845. 'FINS' ;
  846. 'SI' lbord ;
  847. vols = MATOUTIL 'MESUINTE' bxxxtopo ;
  848. dvols = '-' xxxvolucib vols ;
  849. 'SI' ('NEG' dvols 0 volutol) ;
  850. 'MESSAGE' xxxdesc ' Volume (mesuinte) modifie vol=' vols ' / volucib=' xxxvolucib ;
  851. 'MESSAGE' xxxdesc ' dvol=' dvols ;
  852. lok = lok 'ET' faux ;
  853. 'FINS' ;
  854. 'FINS' ;
  855. 'FINS' ;
  856. *
  857. * mbnc toujours inclus dans le bord ?
  858. *
  859. 'SI' ('EXIS' xxxmbnc) ;
  860. mi = 'INTE' xxxmbnc bxxxtopo 'NOVERIF' ;
  861. 'SI' ('NEG' ('NBEL' ('DIFF' mi xxxmbnc)) 0) ;
  862. 'MESSAGE' xxxdesc ' bord_no_chan non inclus dans le bord' ;
  863. 'TRAC' (mi 'ET' ('COUL' bxxxtopo 'ROUG')) ;
  864. lok = lok 'ET' faux ;
  865. 'FINS' ;
  866. 'FINS' ;
  867. 'RESPRO' lok ;
  868. *
  869. * End of procedure file VERITOPO
  870. *
  871. *'FINPROC' ;
  872. 'FINS' ;
  873. *
  874. * End of procedure file MATOUTIL
  875. *
  876. 'FINPROC' ;
  877.  
  878.  

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