Télécharger deadktan.procedur

Retour à la liste

Numérotation des lignes :

  1. * DEADKTAN PROCEDUR GOUNAND 18/10/24 21:15:02 9970
  2. ************************************************************************
  3. * NOM : DEADKTAN
  4. * DESCRIPTION : La matrice tangente (Huang)
  5. *
  6. *
  7. *
  8. * LANGAGE : GIBIANE-CAST3M
  9. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  10. * mél : gounand@semt2.smts.cea.fr
  11. **********************************************************************
  12. * VERSION : v1, 30/04/2007, version initiale
  13. * HISTORIQUE : v1, 30/04/2007, création
  14. * HISTORIQUE : 2018/01/22 : chgt nom composante hors diago G21 au lieu
  15. * de G12
  16. * HISTORIQUE : 2018/10/10 : NLINP au lieu de NLIN
  17. * HISTORIQUE :
  18. * HISTORIQUE :
  19. ************************************************************************
  20. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  21. * en cas de modification de ce sous-programme afin de faciliter
  22. * la maintenance !
  23. ************************************************************************
  24. *
  25. *
  26. 'DEBPROC' DEADKTAN ;
  27. 'ARGUMENT' _mt*'MAILLAGE' ;
  28. 'ARGUMENT' gdisc*'MOT' ;
  29. 'ARGUMENT' methgau*'MOT' ;
  30. 'ARGUMENT' theta*'FLOTTANT' ;
  31. 'ARGUMENT' gamma*'FLOTTANT' ;
  32. 'ARGUMENT' dppri*'LISTMOTS' ;
  33. 'ARGUMENT' dpdua*'LISTMOTS' ;
  34. *
  35. dpdis = gdisc ;
  36. *
  37. idim = 'VALEUR' 'DIME' ;
  38. vdim = DEADUTIL 'DIMM' _mt ;
  39. *
  40. 'ARGUMENT' met/'CHPOINT' ;
  41. lmet = 'EXISTE' met ;
  42. 'SI' lmet ;
  43. 'ARGUMENT' metdisc*'MOT' ;
  44. * metdisc = gdisc ;
  45. 'SINON' ;
  46. metdisc = 'CSTE' ;
  47. 'FINSI' ;
  48. *
  49. debloi = 'CHAINE' 'AHU' ;
  50. ncmet = '/' ('*' idim ('+' idim 1)) 2 ;
  51. lisdat = 'LECT' 1 'PAS' 1 'NPAS' ('+' ncmet 1) ;
  52. loi = 'CHAINE' debloi 'J' ;
  53. *
  54. 'ARGUMENT' jaco/'ENTIER' ;
  55. 'SI' ('NON' ('EXISTE' jaco)) ;
  56. jaco = 1 ;
  57. 'FINSI' ;
  58. 'SI' ('OU' ('EGA' jaco 2) ('EGA' jaco 3)) ;
  59. 'ARGUMENT' idir/'ENTIER' ;
  60. 'SI' ('EXISTE' idir) ;
  61. ldir = 'LECT' idir ;
  62. 'SINON' ;
  63. 'ARGUMENT' ldir/'LISTENTI' ;
  64. 'SI' ('NON' ('EXISTE' ldir)) ;
  65. ldir = 'LECT' 1 'PAS' 1 idim ;
  66. 'FINSI' ;
  67. 'FINSI' ;
  68. 'FINSI' ;
  69. *
  70. * Calcul du jacobien complet (jaco = 1)
  71. *
  72. 'SI' ('EGA' jaco 1) ;
  73. numop = '*' ('**' vdim 2) ('**' idim 2) ;
  74. numder = vdim ;
  75. numvar = idim ;
  76. numdat = 0 ;
  77. numcof = 0 ;
  78. *
  79. A = ININLIN numop numvar numdat numcof numder ;
  80. numdat = '+' ncmet 2 ;
  81. numcof = numop ;
  82. B = ININLIN numop numvar numdat numcof numder ;
  83. 'REPETER' ivar numvar ;
  84. A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
  85. A . 'VAR' . &ivar . 'DISC' = dpdis ;
  86. B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
  87. B . 'VAR' . &ivar . 'DISC' = dpdis ;
  88. 'FIN' ivar ;
  89. iop = 0 ;
  90. 'REPETER' i idim ;
  91. 'REPETER' j vdim ;
  92. 'REPETER' k idim ;
  93. 'REPETER' l vdim ;
  94. iop = iop '+' 1 ;
  95. A . iop . &i . &j = 'LECT' ;
  96. nomloi = 'CHAINE' loi &i &j &k &l ;
  97. * 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
  98. B . 'COF' . iop . 'COMPOR' = nomloi ;
  99. B . 'COF' . iop . 'LDAT' = lisdat ;
  100. B . iop . &k . &l = 'LECT' iop ;
  101. 'FIN' l ;
  102. 'FIN' k ;
  103. 'FIN' j ;
  104. 'FIN' i ;
  105. 'FINSI' ;
  106. 'SI' ('EGA' jaco 2) ;
  107. nldir = 'DIME' ldir ;
  108. numop = '*' nldir ('**' vdim 2) ;
  109. numder = vdim ;
  110. numvar = idim ;
  111. numdat = 0 ;
  112. numcof = 0 ;
  113. *
  114. A = ININLIN numop numvar numdat numcof numder ;
  115. numdat = '+' ncmet 2 ;
  116. numcof = numop ;
  117. B = ININLIN numop numvar numdat numcof numder ;
  118. 'REPETER' ivar numvar ;
  119. A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
  120. A . 'VAR' . &ivar . 'DISC' = dpdis ;
  121. B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
  122. B . 'VAR' . &ivar . 'DISC' = dpdis ;
  123. 'FIN' ivar ;
  124. iop = 0 ;
  125. 'REPETER' i nldir ;
  126. idir = 'EXTRAIRE' ldir &i ;
  127. 'REPETER' j vdim ;
  128. 'REPETER' l vdim ;
  129. iop = iop '+' 1 ;
  130. A . iop . idir . &j = 'LECT' ;
  131. nomloi = 'CHAINE' loi idir &j idir &l ;
  132. * 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
  133. B . 'COF' . iop . 'COMPOR' = nomloi ;
  134. B . 'COF' . iop . 'LDAT' = lisdat ;
  135. B . iop . idir . &l = 'LECT' iop ;
  136. 'FIN' l ;
  137. 'FIN' j ;
  138. 'FIN' i ;
  139. 'FINSI' ;
  140. 'SI' ('EGA' jaco 3) ;
  141. nldir = 'DIME' ldir ;
  142. * numop = '**' vdim 2 ;
  143. numop = '*' nldir vdim ;
  144. numder = vdim ;
  145. numvar = idim ;
  146. numdat = 0 ;
  147. numcof = 0 ;
  148. *
  149. A = ININLIN numop numvar numdat numcof numder ;
  150. numdat = '+' ncmet 2 ;
  151. numcof = numop ;
  152. B = ININLIN numop numvar numdat numcof numder ;
  153. 'REPETER' ivar numvar ;
  154. A . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dppri &ivar) ;
  155. A . 'VAR' . &ivar . 'DISC' = dpdis ;
  156. B . 'VAR' . &ivar . 'NOMDDL' = 'MOTS' ('EXTRAIRE' dpdua &ivar) ;
  157. B . 'VAR' . &ivar . 'DISC' = dpdis ;
  158. 'FIN' ivar ;
  159. iop = 0 ;
  160. 'REPETER' i nldir ;
  161. idir = 'EXTRAIRE' ldir &i ;
  162. 'REPETER' j vdim ;
  163. iop = iop '+' 1 ;
  164. A . iop . idir . &j = 'LECT' ;
  165. nomloi = 'CHAINE' loi idir &j idir &j ;
  166. * 'MESSAGE' ('CHAINE' 'Nomloi=' nomloi) ;
  167. B . 'COF' . iop . 'COMPOR' = nomloi ;
  168. B . 'COF' . iop . 'LDAT' = lisdat ;
  169. B . iop . idir . &j = 'LECT' iop ;
  170. 'FIN' j ;
  171. 'FIN' i ;
  172. 'FINSI' ;
  173. *
  174. * Partie commune
  175. *
  176. idat = 0 ;
  177. 'REPETER' idi idim ;
  178. nomdat = 'CHAINE' 'G' &idi &idi ;
  179. * 'MESSAGE' ('CHAINE' 'nomdat=' nomdat) ;
  180. idat = '+' idat 1 ;
  181. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomdat ;
  182. B . 'DAT' . idat . 'DISC' = metdisc ;
  183. 'SI' lmet ;
  184. B . 'DAT' . idat . 'VALEUR' = 'EXCO' nomdat met nomdat ;
  185. 'SINON' ;
  186. B . 'DAT' . idat . 'VALEUR' = 1.D0 ;
  187. 'FINSI' ;
  188. 'FIN' idi ;
  189. 'REPETER' idi idim ;
  190. nj = '-' idim &idi ;
  191. * 'MESSAGE' ('CHAINE' 'nj=' nj) ;
  192. 'SI' ('>EG' nj 1) ;
  193. 'REPETER' jdi nj ;
  194. * Mise en cohérence avec Castem
  195. * nomdat = 'CHAINE' 'G' &idi ('+' &idi &jdi) ;
  196. nomdat = 'CHAINE' 'G' ('+' &idi &jdi) &idi ;
  197. * 'MESSAGE' ('CHAINE' 'nomdat=' nomdat) ;
  198. idat = '+' idat 1 ;
  199. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomdat ;
  200. B . 'DAT' . idat . 'DISC' = metdisc ;
  201. 'SI' lmet ;
  202. B . 'DAT' . idat . 'VALEUR' = 'EXCO' nomdat met nomdat ;
  203. 'SINON' ;
  204. B . 'DAT' . idat . 'VALEUR' = 0.D0 ;
  205. 'FINSI' ;
  206. 'FIN' jdi ;
  207. 'FINSI' ;
  208. 'FIN' idi ;
  209. idat = '+' idat 1 ;
  210. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'DUMM' ;
  211. B . 'DAT' . idat . 'DISC' = 'CSTE' ;
  212. B . 'DAT' . idat . 'VALEUR' = theta ;
  213. idat = '+' idat 1 ;
  214. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'DUMM' ;
  215. B . 'DAT' . idat . 'DISC' = 'CSTE' ;
  216. B . 'DAT' . idat . 'VALEUR' = gamma ;
  217. *
  218. jac = NLINP gdisc _mt A B 'EREF' methgau ;
  219. *
  220. 'RESPRO' jac ;
  221. *
  222. * End of procedure file DEADKTAN
  223. *
  224. 'FINPROC' ;
  225.  
  226.  
  227.  
  228.  
  229.  

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