Télécharger matran.eso

Retour à la liste

Numérotation des lignes :

matran
  1. C MATRAN SOURCE GOUNAND 25/11/12 21:15:40 12399
  2. SUBROUTINE MATRAN(MTABD,MCHPOI)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C------------------------------------------------------------------
  6. C PROJET : CASTEM 2000
  7. C
  8. C NOM : MATRAN
  9. C
  10. C DESCRIPTION : Cette subroutine cree un chpoint 'FACE' sur MTABD
  11. C contenant la matrice de passage du repaire global
  12. C dans le repaire de chaque face (voir CALJQB)
  13. C
  14. C LANGAGE : FORTRAN 77 + ESOPE 2000
  15. C
  16. C AUTEUR : R. MOREL, DRN/DMT/SEMT/TTMF
  17. C
  18. C-----------------------------------------------------------------
  19. C
  20. C APPELES (E/S) : LEKTAB
  21. C
  22. C APPELES (Calcul): CALJBR
  23. C
  24. C-----------------------------------------------------------------
  25. C
  26. C ENTREES :
  27. C MTABD : Table de sous-type domaine
  28. C
  29. C SORTIES :
  30. C MCHPOI : Pointeur du CHPOIN contenant les
  31. C Matrices decrite ci-dessus.
  32. C
  33. C-----------------------------------------------------------------
  34. C
  35. C HISTORIQUE (Anomalies et modifications eventuelles)
  36. C
  37. C HISTORIQUE : 23.10.98, Creation
  38. C
  39. C-----------------------------------------------------------------
  40. C
  41.  
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC CCGEOME
  45. -INC SMTABLE
  46. POINTEUR MTABD.MTABLE
  47. -INC SMELEME
  48. POINTEUR MELEMC.MELEME,MELEMD.MELEME
  49. POINTEUR MELEMF.MELEME
  50. -INC SMCOORD
  51. -INC SMCHPOI
  52. -INC SMLENTI
  53. -INC SIZFFB
  54. PARAMETER (NBO=5)
  55. REAL*8 CFT,NORMX,NORMY,NORMZ,A2J(2,2,1),T,TX,TY,TZ,AIRE
  56. REAL*8 X1,X2,X3,Y1,Y2,Y3,Z1,Z2,Z3,SCAL,SGN,A3J(3,3,1)
  57. INTEGER NP,NPG,NES
  58. CHARACTER*8 TYPE,TYPC,NOM0,LIST1(NBO),LIST2(NBO)
  59. C Les elements complets ne sont pas tous implementes
  60. C On se ramene aux elements facep sans le centre de la face
  61. DATA LIST1/'SEG3 ','TRI4 ','TRI7 ','QUA5 ',
  62. & 'QUA9 '/
  63. DATA LIST2/'SEG2 ','TRI3 ','TRI6 ','QUA4 ',
  64. & 'QUA8 '/
  65. C
  66. CALL LEKTAB(MTABD,'FACEL',MELEMD)
  67. SEGACT MELEMD
  68. IPT2=MELEMD
  69. CALL LEKTAB(MTABD,'FACE',MELEMF)
  70. CALL KRIPAD(MELEMF,MLENTI)
  71. SEGACT MELEMF
  72. NC=IDIM*IDIM
  73. TYPE='FACE'
  74. CALL CRCHPT(TYPE,MELEMF,NC,1,MCHPOI)
  75. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  76. CALL LEKTAB(MTABD,'FACEP',MELEME)
  77. SEGACT MELEME
  78. C
  79. SEGACT MCHPOI*MOD
  80. MSOUPO=MCHPOI.IPCHP(1)
  81. SEGACT MSOUPO*MOD
  82. NBSOUS=LISOUS(/1)
  83. IF(NBSOUS.EQ.0)NBSOUS=1
  84. IF (IDIM.EQ.2) THEN
  85. C
  86. NOCOMP(1)='UX '
  87. NOCOMP(2)='UY '
  88. NOCOMP(3)='RX '
  89. NOCOMP(4)='RY '
  90. DO 1 L=1,NBSOUS
  91. IPT1=MELEME
  92. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  93. SEGACT IPT1
  94. NP=IPT1.NUM(/1)-1
  95. NEL=IPT1.NUM(/2)
  96. C Toutes les faces sont des SEG3 donc NP=2
  97. IF(NP.NE.2)RETURN
  98. C
  99. C
  100. C On considere la face sans son centre comme un elt fini SEG2
  101. C
  102. TYPE = NOMS(IPT1.ITYPEL)//' '
  103. CALL OPTLI(IP,LIST1,TYPE,NBO)
  104. IF (IP .EQ. 0) CALL ERREUR(5)
  105. TYPE = LIST2(IP)
  106. CALL KALPBG(TYPE,'FONFORM0',IZFFM)
  107. SEGACT IZFFM*MOD
  108. IZHR=KZHR(1)
  109. SEGACT IZHR*MOD
  110. NES=1
  111. NPG=1
  112. C Boucle sur toutes les faces pour le paquet L
  113. DO 10 K=1,NEL
  114. NF=LECT(IPT1.NUM(NP+1,K))
  115. C REMPLISSAGE DE XYZ
  116. C ------------------
  117. C
  118. DO 12 I=1,NP
  119. J=IPT1.NUM(I,K)
  120. DO 121 N=1,IDIM
  121. XYZ(N,I)=XCOOR((J-1)*(IDIM+1)+N)
  122. 121 CONTINUE
  123. 12 CONTINUE
  124. C
  125. C CALJBR calcul le jacobien du passage de l'elt de ref.
  126. C a l'elt. reel
  127. C A2J=Jacobien AIRE=detA2J
  128. CALL CALJBR(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,
  129. &NPG,IAXI,AIRE,A2J,SGEN)
  130. C
  131. NORMX=A2J(1,2,1)
  132. NORMY=A2J(2,2,1)
  133. C On verifie que n est dans le meme sens que vec(13) de FACEL
  134. C Calcul de vec(13)
  135. C FACEL est repere par IPT2
  136. J1=IPT2.NUM(1,NF)
  137. J2=IPT2.NUM(2,NF)
  138. JJ2=LECT(J2)
  139. J3=IPT2.NUM(3,NF)
  140. C
  141. IF (J1.eq.J3) THEN
  142. X1=XCOOR((J1-1)*(IDIM+1)+1)
  143. Y1=XCOOR((J1-1)*(IDIM+1)+2)
  144. X2=XCOOR((J2-1)*(IDIM+1)+1)
  145. Y2=XCOOR((J2-1)*(IDIM+1)+2)
  146. SCAL=(X2-X1)*NORMX+(Y2-Y1)*NORMY
  147. SGN=SIGN(1.D0,SCAL)
  148. C
  149. ELSE
  150. X1=XCOOR((J1-1)*(IDIM+1)+1)
  151. Y1=XCOOR((J1-1)*(IDIM+1)+2)
  152. X3=XCOOR((J3-1)*(IDIM+1)+1)
  153. Y3=XCOOR((J3-1)*(IDIM+1)+2)
  154. SCAL=(X3-X1)*NORMX+(Y3-Y1)*NORMY
  155. SGN=SIGN(1.D0,SCAL)
  156. ENDIF
  157. MPOVAL.VPOCHA(JJ2,1)=A2J(1,1,1)
  158. MPOVAL.VPOCHA(JJ2,2)=A2J(2,1,1)
  159. MPOVAL.VPOCHA(JJ2,3)=SGN*NORMX
  160. MPOVAL.VPOCHA(JJ2,4)=SGN*NORMY
  161. C
  162. C
  163. 10 CONTINUE
  164. C
  165. SEGDES IPT1
  166. 1 CONTINUE
  167. C
  168. C
  169. ELSE
  170. C
  171. NOCOMP(1)='UX '
  172. NOCOMP(2)='UY '
  173. NOCOMP(3)='UZ '
  174. NOCOMP(4)='RX '
  175. NOCOMP(5)='RY '
  176. NOCOMP(6)='RZ '
  177. NOCOMP(7)='MX '
  178. NOCOMP(8)='MY '
  179. NOCOMP(9)='MZ '
  180. DO 21 L=1,NBSOUS
  181. IPT1=MELEME
  182. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  183. SEGACT IPT1
  184. NP=IPT1.NUM(/1)-1
  185. NEL=IPT1.NUM(/2)
  186. C Les elts complets ne sont pas implementes, on utilise
  187. C l'elt. face sans le centre
  188. C
  189. TYPE = NOMS(IPT1.ITYPEL)//' '
  190. CALL OPTLI(IP,LIST1,TYPE,NBO)
  191. IF (IP .EQ. 0) CALL ERREUR(5)
  192. TYPE = LIST2(IP)
  193. C Calcul des fonctions de forme sur l'elt. de reference
  194. C
  195. CALL KALPBG(TYPE,'FONFORM0',IZFFM)
  196. SEGACT IZFFM*MOD
  197. IZHR=KZHR(1)
  198. SEGACT IZHR*MOD
  199. NES=2
  200. NPG=1
  201. C Boucle sur les faces du paquet L
  202. DO 210 K=1,NEL
  203. NF=LECT(IPT1.NUM(NP+1,K))
  204. C
  205. C REMPLISSAGE DE XYZ
  206. C ------------------
  207. C
  208. C write(6,*)'num',(ipt1.num(ii,k),ii=1,np+1),' NF=',nf
  209. DO 212 I=1,NP
  210. J=IPT1.NUM(I,K)
  211. DO 2121 N=1,IDIM
  212. XYZ(N,I)=XCOOR((J-1)*(IDIM+1)+N)
  213. 2121 CONTINUE
  214. 212 CONTINUE
  215. C
  216. C
  217. C calcul du jacobien idem dim 2
  218. C
  219. CALL CALJBR(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,
  220. & NPG,IAXI,AIRE,A3J,SGEN)
  221. NORMX=A3J(1,3,1)
  222. NORMY=A3J(2,3,1)
  223. NORMZ=A3J(3,3,1)
  224. C
  225. C On verifie que n est dans le meme sens que vec(13) de FACEL
  226. C Calcul de vec(13)
  227. C FACEL est repere par IPT2
  228. J1=IPT2.NUM(1,NF)
  229. J2=IPT2.NUM(2,NF)
  230. JJ2=LECT(J2)
  231. J3=IPT2.NUM(3,NF)
  232. C
  233. IF (J1.eq.J3) THEN
  234. X1=XCOOR((J1-1)*(IDIM+1)+1)
  235. Y1=XCOOR((J1-1)*(IDIM+1)+2)
  236. Z1=XCOOR((J1-1)*(IDIM+1)+3)
  237. X2=XCOOR((J2-1)*(IDIM+1)+1)
  238. Y2=XCOOR((J2-1)*(IDIM+1)+2)
  239. Z2=XCOOR((J2-1)*(IDIM+1)+3)
  240. C
  241. SCAL=(X2-X1)*NORMX+(Y2-Y1)*NORMY+(Z2-Z1)*NORMZ
  242. SGN=SIGN(1.D0,SCAL)
  243. C
  244. ELSE
  245. X1=XCOOR((J1-1)*(IDIM+1)+1)
  246. Y1=XCOOR((J1-1)*(IDIM+1)+2)
  247. Z1=XCOOR((J1-1)*(IDIM+1)+3)
  248. X3=XCOOR((J3-1)*(IDIM+1)+1)
  249. Y3=XCOOR((J3-1)*(IDIM+1)+2)
  250. Z3=XCOOR((J3-1)*(IDIM+1)+3)
  251. SCAL=(X3-X1)*NORMX+(Y3-Y1)*NORMY+(Z3-Z1)*NORMZ
  252. SGN=SIGN(1.D0,SCAL)
  253. ENDIF
  254. C
  255. TX=A3J(1,1,1)
  256. TY=A3J(2,1,1)
  257. TZ=A3J(3,1,1)
  258. T=SQRT(TX*TX+TY*TY+TZ*TZ)
  259. TX=TX / T
  260. TY=TY / T
  261. TZ=TZ / T
  262. MPOVAL.VPOCHA(JJ2,1)=TX
  263. MPOVAL.VPOCHA(JJ2,2)=TY
  264. MPOVAL.VPOCHA(JJ2,3)=TZ
  265. MPOVAL.VPOCHA(JJ2,4)=NORMY*TZ-NORMZ*TY
  266. MPOVAL.VPOCHA(JJ2,5)=NORMZ*TX-NORMX*TZ
  267. MPOVAL.VPOCHA(JJ2,6)=NORMX*TY-NORMY*TX
  268. MPOVAL.VPOCHA(JJ2,7)=SGN*NORMX
  269. MPOVAL.VPOCHA(JJ2,8)=SGN*NORMY
  270. MPOVAL.VPOCHA(JJ2,9)=SGN*NORMZ
  271. C
  272. 210 CONTINUE
  273. C
  274. SEGDES IPT1
  275. 21 CONTINUE
  276. ENDIF
  277. CALL ECMO(MTABD,'MATROT','CHPOINT ',MCHPOI)
  278. SEGSUP MLENTI
  279. SEGDES MELEMD
  280. SEGDES MELEME
  281. SEGDES MELEMF
  282. SEGDES MCHPOI
  283. SEGDES MSOUPO
  284. SEGDES MPOVAL
  285. RETURN
  286. END
  287.  
  288.  

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