Télécharger ccgadv.eso

Retour à la liste

Numérotation des lignes :

ccgadv
  1. C CCGADV SOURCE GOUNAND 21/06/02 21:15:08 11022
  2. SUBROUTINE CCGADV(LCOF,NOMLOI,
  3. $ FC,
  4. $ IMPR,IRET)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. IMPLICIT INTEGER (I-N)
  7. C***********************************************************************
  8. C NOM : CCGADV
  9. C DESCRIPTION : Calcul de la loi de comportement aux points de Gauss :
  10. C
  11. C
  12. C LANGAGE : ESOPE
  13. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  14. C mél : gounand@semt2.smts.cea.fr
  15. C***********************************************************************
  16. C APPELES :
  17. C APPELE PAR :
  18. C***********************************************************************
  19. C ENTREES :
  20. C ENTREES/SORTIES :
  21. C SORTIES : -
  22. C TRAVAIL :
  23. C***********************************************************************
  24. C VERSION : v1, 04/08/04, version initiale
  25. C HISTORIQUE : v1, 04/08/04, création
  26. C HISTORIQUE :
  27. C HISTORIQUE :
  28. C***********************************************************************
  29. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  30. C en cas de modification de ce sous-programme afin de faciliter
  31. C la maintenance !
  32. C***********************************************************************
  33. -INC PPARAM
  34. -INC CCOPTIO
  35. -INC TNLIN
  36. * -INC SMCHAEL
  37. INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM,N1
  38. POINTEUR FC.MCHEVA
  39. POINTEUR LCOF.LCHEVA
  40. POINTEUR JMAJAC.MCHEVA
  41. POINTEUR JMIJAC.MCHEVA
  42. POINTEUR JDTJAC.MCHEVA
  43. CHARACTER*8 NOMLOI
  44. INTEGER ICOF
  45. *
  46. -INC TMXMAT
  47. POINTEUR JAC.MXMAT
  48. POINTEUR JM1.MXMAT
  49. POINTEUR M1.MXMAT
  50. POINTEUR M2.MXMAT
  51. POINTEUR M3.MXMAT
  52. *
  53. INTEGER IMPR,IRET
  54. *
  55. * Executable statements
  56. *
  57. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans ccgadv'
  58. C IF (.NOT.(IDIM.EQ.1)) THEN
  59. C WRITE(IOIMP,*) 'IDIM=',IDIM,' ?'
  60. C GOTO 9999
  61. C ENDIF
  62. NLFC=FC.WELCHE(/6)
  63. NPFC=FC.WELCHE(/5)
  64. ICOF=0
  65. *
  66. ICOF=ICOF+1
  67. JMAJAC=LCOF.LISCHE(ICOF)
  68. NLJA=JMAJAC.WELCHE(/6)
  69. NPJA=JMAJAC.WELCHE(/5)
  70. ICOF=ICOF+1
  71. JMIJAC=LCOF.LISCHE(ICOF)
  72. NLJI=JMIJAC.WELCHE(/6)
  73. NPJI=JMIJAC.WELCHE(/5)
  74. ICOF=ICOF+1
  75. JDTJAC=LCOF.LISCHE(ICOF)
  76. NLJD=JDTJAC.WELCHE(/6)
  77. NPJD=JDTJAC.WELCHE(/5)
  78. *g LDIM1=JMAJAC.WELCHE(/3)
  79. *g LDIM2=JMAJAC.WELCHE(/4)
  80. *g IF (LDIM1.NE.IDIM.OR.LDIM2.NE.IDIM) THEN
  81. *g WRITE(IOIMP,*) 'Erreur grave 1'
  82. *g GOTO 9999
  83. *g ENDIF
  84. *g SEGINI,JAC
  85. *g LDIM1=JMIJAC.WELCHE(/3)
  86. *g LDIM2=JMIJAC.WELCHE(/4)
  87. *g IF (LDIM1.NE.IDIM.OR.LDIM2.NE.IDIM) THEN
  88. *g WRITE(IOIMP,*) 'Erreur grave 2'
  89. *g GOTO 9999
  90. *g ENDIF
  91. *g SEGINI,JM1
  92. *
  93. * Objet temporaire
  94. *
  95. *g LDIM1=IDIM
  96. *g LDIM2=IDIM
  97. *g SEGINI,M1
  98. *g SEGINI,M2=M1
  99. *g SEGINI,M3=M1
  100. DO ILFC=1,NLFC
  101. IF (NLJA.EQ.1) THEN
  102. ILJA=1
  103. ELSE
  104. ILJA=ILFC
  105. ENDIF
  106. IF (NLJI.EQ.1) THEN
  107. ILJI=1
  108. ELSE
  109. ILJI=ILFC
  110. ENDIF
  111. IF (NLJD.EQ.1) THEN
  112. ILJD=1
  113. ELSE
  114. ILJD=ILFC
  115. ENDIF
  116. DO IPFC=1,NPFC
  117. IF (NPJA.EQ.1) THEN
  118. IPJA=1
  119. ELSE
  120. IPJA=IPFC
  121. ENDIF
  122. IF (NPJI.EQ.1) THEN
  123. IPJI=1
  124. ELSE
  125. IPJI=IPFC
  126. ENDIF
  127. IF (NPJD.EQ.1) THEN
  128. IPJD=1
  129. ELSE
  130. IPJD=IPFC
  131. ENDIF
  132. C CALL MAMA(JMAJAC.WELCHE(1,1,1,1,IPJA,ILJA),IDIM,IDIM
  133. C $ 'COPIE ',
  134. C $ JAC.XMAT,IDIM,IDIM,
  135. C $ IMPR,IRET)
  136. C IF (IRET.NE.0) GOTO 9999
  137. *g CALL MAMA(JMIJAC.WELCHE(1,1,1,1,IPJI,ILJI),IDIM,IDIM,
  138. *g $ 'COPIE ',
  139. *g $ JM1.XMAT,IDIM,IDIM,
  140. *g $ IMPR,IRET)
  141. *g IF (IRET.NE.0) GOTO 9999
  142. DET =JDTJAC.WELCHE(1,1,1,1,IPJD,ILJD)
  143. SDET =SIGN(1.D0,DET)
  144. IF (NOMLOI.EQ.'VOLORI ') THEN
  145. CONTRI=DET
  146. C ELSEIF (NOMLOI.EQ.'ADAF ') THEN
  147. C CALL ERREUR(5)
  148. CC WRITE(IOIMP,*) 'J-1=',JM1.XMAT(1,1)
  149. CC WRITE(IOIMP,*) 'DET=',DET
  150. CC WRITE(IOIMP,*) 'SDET=',SDET
  151. C CALL MARE(JM1.XMAT,IDIM,IDIM,
  152. C $ 'TRJJT ',
  153. C $ TIJIJT,
  154. C $ IMPR,IRET)
  155. C IF (IRET.NE.0) GOTO 9999
  156. C CONTRI=0.5D0*TIJIJT*DET*SDET
  157. C ELSEIF (NOMLOI(1:4).EQ.'ADAR') THEN
  158. C CALL ERREUR(5)
  159. C CALL CH2INT(NOMLOI(5:5),IDIM1,IMPR,IRET)
  160. C IF (IRET.NE.0) GOTO 9999
  161. C CALL CH2INT(NOMLOI(6:6),IDIM2,IMPR,IRET)
  162. C IF (IRET.NE.0) GOTO 9999
  163. C CALL MAMA(JM1.XMAT,IDIM,IDIM,
  164. C $ 'JJT ',
  165. C $ M1.XMAT,IDIM,IDIM,
  166. C $ IMPR,IRET)
  167. C IF (IRET.NE.0) GOTO 9999
  168. C CALL MARE(JM1.XMAT,IDIM,IDIM,
  169. C $ 'TRJJT ',
  170. C $ TIJIJT,
  171. C $ IMPR,IRET)
  172. C TR1=0.D0
  173. C DO IIDIM=1,IDIM
  174. C TR1=TR1+
  175. C $ (JM1.XMAT(IIDIM,IDIM1)*M1.XMAT(IDIM2,IIDIM))
  176. C ENDDO
  177. C TR2=JM1.XMAT(IDIM2,IDIM1)
  178. C CONTRI=((0.5D0*TIJIJT*TR2)-TR1)*DET*SDET
  179. C ELSEIF (NOMLOI(1:4).EQ.'ADAK') THEN
  180. C CALL ERREUR(5)
  181. C CALL CH2INT(NOMLOI(5:5),IDIM1,IMPR,IRET)
  182. C IF (IRET.NE.0) GOTO 9999
  183. C CALL CH2INT(NOMLOI(6:6),IDIM2,IMPR,IRET)
  184. C IF (IRET.NE.0) GOTO 9999
  185. C CALL CH2INT(NOMLOI(7:7),IDIM3,IMPR,IRET)
  186. C IF (IRET.NE.0) GOTO 9999
  187. C CALL CH2INT(NOMLOI(8:8),IDIM4,IMPR,IRET)
  188. C IF (IRET.NE.0) GOTO 9999
  189. C CALL MAMA(JM1.XMAT,IDIM,IDIM,
  190. C $ 'TRANSPOS',
  191. C $ M1.XMAT,IDIM,IDIM,
  192. C $ IMPR,IRET)
  193. C IF (IRET.NE.0) GOTO 9999
  194. C WRITE(IOIMP,*) 'transpos'
  195. C SEGPRT,JM1
  196. C SEGPRT,M1
  197. C CALL MAMA(M1.XMAT,IDIM,IDIM,
  198. C $ 'JJT ',
  199. C $ M2.XMAT,IDIM,IDIM,
  200. C $ IMPR,IRET)
  201. C IF (IRET.NE.0) GOTO 9999
  202. C WRITE(IOIMP,*) 'JJT'
  203. C SEGPRT,M1
  204. C SEGPRT,M2
  205. C CALL MARE(JM1.XMAT,IDIM,IDIM,
  206. C $ 'TRJJT ',
  207. C $ TIJIJT,
  208. C $ IMPR,IRET)
  209. C IF (IRET.NE.0) GOTO 9999
  210. C WRITE(IOIMP,*) 'trace JJT'
  211. C SEGPRT,JM1
  212. C WRITE(IOIMP,*) 'TRJJT=',TIJIJT
  213. C XX=-0.5D0*TIJIJT
  214. C CALL REMA(XX,IDIM,IDIM,
  215. C $ 'DIAGONAL',
  216. C $ M1.XMAT,
  217. C $ IMPR,IRET)
  218. C IF (IRET.NE.0) GOTO 9999
  219. C WRITE(IOIMP,*) 'diagonal'
  220. C WRITE(IOIMP,*) 'XX=',XX
  221. C SEGPRT,M1
  222. C CALL MAMAMA(M1.XMAT,IDIM,IDIM,M2.XMAT,IDIM,IDIM,
  223. C $ 'PLUS ',
  224. C $ M3.XMAT,IDIM,IDIM,
  225. C $ IMPR,IRET)
  226. C IF (IRET.NE.0) GOTO 9999
  227. C STOP 16
  228. C TR1=0.D0
  229. C SEGPRT,M1
  230. C SEGPRT,M2
  231. C SEGPRT,M3
  232. C DO IIDIM=1,IDIM
  233. C TR1=TR1+(M3.XMAT(IDIM1,IIDIM)*JM1.XMAT(IDIM4,IIDIM)
  234. C $ *JM1.XMAT(IDIM2,IDIM3))
  235. C ENDDO
  236. C WRITE(IOIMP,*) 'TR1=',TR1
  237. C WRITE(IOIMP,*) 'DET=',DET
  238. C WRITE(IOIMP,*) 'SDET=',SDET
  239. C CONTRI=TR1*DET*SDET
  240. ELSE
  241. WRITE(IOIMP,*) 'Erreur grave'
  242. GOTO 9999
  243. ENDIF
  244. FC.WELCHE(1,1,1,1,IPFC,ILFC)=
  245. $ FC.WELCHE(1,1,1,1,IPFC,ILFC)+
  246. $ CONTRI
  247. ENDDO
  248. ENDDO
  249. *g SEGSUP,M3
  250. *g SEGSUP,M2
  251. *g SEGSUP,M1
  252. *g SEGSUP,JM1
  253. *g SEGSUP,JAC
  254. *
  255. * Normal termination
  256. *
  257. IRET=0
  258. RETURN
  259. *
  260. * Format handling
  261. *
  262. *
  263. * Error handling
  264. *
  265. 9999 CONTINUE
  266. IRET=1
  267. WRITE(IOIMP,*) 'An error was detected in subroutine ccgadv'
  268. RETURN
  269. *
  270. * End of subroutine CCGADV
  271. *
  272. END
  273.  
  274.  
  275.  
  276.  
  277.  

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