Télécharger mamanu.eso

Retour à la liste

Numérotation des lignes :

mamanu
  1. C MAMANU SOURCE PV090527 25/01/07 14:42:48 12115
  2.  
  3. *--------------------------------------------------------------------*
  4. * *
  5. * CREATION D'UN MCHAML PAR MANU VALEUR EN UN PT D'INTEGRATION *
  6. * (OPTION 'CHAM' PP 24/11/92) *
  7. * *
  8. *--------------------------------------------------------------------*
  9.  
  10. SUBROUTINE MAMANU
  11.  
  12. IMPLICIT INTEGER(I-N)
  13. IMPLICIT REAL*8(A-H,O-Z)
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC SMCOORD
  18.  
  19. -INC SMELEME
  20. -INC SMMODEL
  21. -INC SMCHAML
  22. -INC SMINTE
  23.  
  24. SEGMENT INFO
  25. INTEGER INFELL(JG)
  26. ENDSEGMENT
  27.  
  28. PARAMETER(NBOPT=2,NBSUP=5)
  29. CHARACTER*(4) MOOPT, LISOPT(NBOPT)
  30. CHARACTER*(8) TYPOBJ, LISSUP(NBSUP)
  31. CHARACTER*(LOCOMP) MOCOMP
  32. CHARACTER*(LOCHAI) MOCHOY, CHATYPE
  33.  
  34. DATA LISOPT / 'TYPE','POSI' /
  35. DATA LISSUP / 'NOEUD ','GRAVITE ',
  36. & 'RIGIDITE','MASSE ','STRESSES' /
  37.  
  38. IENT1 = 0
  39. IENT2 = 0
  40. IENT3 = 0
  41. MOCOMP = ' '
  42. MCHELM = 0
  43.  
  44. * 1. LECTURE IMPERATIVE DU MODELE :
  45. TYPOBJ = 'MMODEL '
  46. CALL LIROBJ(TYPOBJ,MMODEL,1,IRETOU)
  47. IF (IERR.NE.0) RETURN
  48. * Activation du modele
  49. CALL ACTOBJ(TYPOBJ,MMODEL,1)
  50.  
  51. * 2. LECTURE DES OPTIONS :
  52. * 2.1. OPTIONS PAR DEFAUT
  53. LTYPE = 1
  54. CHATYPE = ' '
  55. IPOSI = 1
  56.  
  57. * 2.2. LECTURE SOIT D'UN MOT CLE, SOIT DU NOM DE COMPOSANTE
  58. 2 CONTINUE
  59. LGCHOY = 0
  60. CALL LIRCHA(MOCHOY,1,LGCHOY)
  61. IF (IERR.NE.0) RETURN
  62.  
  63. * 0 TRAITEMENT DES MOTS CLE
  64. MOOPT = ' '
  65. MOOPT(1:4) = MOCHOY(1:4)
  66. CALL PLACE(LISOPT,NBOPT,IPLACE,MOOPT)
  67.  
  68. * 1 MOT-CLE : (SOUS-)TYPE
  69. IF (IPLACE.EQ.1) THEN
  70. CALL LIRCHA(CHATYPE,1,LTYPE)
  71. IF (IERR.NE.0) RETURN
  72.  
  73. * 2 MOT-CLE : PLACE
  74. ELSE IF (IPLACE.EQ.2) THEN
  75. CALL LIRMOT(LISSUP,NBSUP,IPOSI,1)
  76. IF (IERR.NE.0) RETURN
  77.  
  78. * 3 Autres : MOCHOY EST LA COMPOSANTE
  79. ELSE
  80. LGCHOY = MIN(LGCHOY,LOCOMP)
  81. MOCOMP(1:LGCHOY) = MOCHOY(1:LGCHOY)
  82. GOTO 10
  83.  
  84. ENDIF
  85. GOTO 2
  86.  
  87. * 3. LECTURE DES ENTIERS DEFINISSANT LE POINT D'INTEGRATION
  88. 10 CONTINUE
  89. CALL LIRENT(IENT1,1,IRETOU)
  90. IF (IERR.NE.0) RETURN
  91. CALL LIRENT(IENT2,1,IRETOU)
  92. IF (IERR.NE.0) RETURN
  93. CALL LIRENT(IENT3,0,IRETOU)
  94. IF (IERR.NE.0) RETURN
  95. IF (IRETOU.EQ.0) IENT3=1
  96.  
  97. * 4. LECTURE DE LA VALEUR A AFFECTER AU POINT D'INTEGRATION
  98. CALL LIRREE(XFLOT,1,IRETOU)
  99. IF (IERR.NE.0) RETURN
  100.  
  101. *D CALL LIRREE(XFLOT,0,IRETOU)
  102. *D IRETF = IRETOU
  103. *D IF (IRETF.EQ.0) THEN
  104. *D TYOPBJ = ' '
  105. *D CALL QUETYP(TYPOBJ,1,IRETOU)
  106. *D IF (IERR.NE.0) RETURN
  107. *D CALL LIROBJ(TYPOBJ,IPOBJ,1,IRETOU)
  108. *D IF (IERR.NE.0) RETURN
  109. *D ENDIF
  110.  
  111. * ON VERIFIE IENT1,IENT2 ET IENT3
  112. NZONE = mmodel.KMODEL(/1)
  113. IF (IENT3.LT.1 .OR. IENT3.GT.NZONE) THEN
  114. INTERR(1)=IENT3
  115. INTERR(2)=NZONE
  116. CALL ERREUR(1146)
  117. RETURN
  118. ENDIF
  119.  
  120. IMODEL = mmodel.KMODEL(IENT3)
  121. NFOR = imodel.FORMOD(/2)
  122. MELEME = imodel.IMAMOD
  123. NBELEM = meleme.NUM(/2)
  124. IF (IENT1.LT.1 .OR. IENT1.GT.NBELEM) THEN
  125. INTERR(1)=IENT1
  126. INTERR(2)=NBELEM
  127. INTERR(3)=IENT3
  128. CALL ERREUR(1147)
  129. RETURN
  130. ENDIF
  131.  
  132. C Recuperation d'informations sur le support :
  133. ISUPMO = IPOSI
  134. MINTE = 0
  135. MELE = imodel.NEFMOD
  136.  
  137. C Traitement des cas particuliers :
  138. CALL PLACE(FORMOD,NFOR,icont,'CONTACT ')
  139. CALL PLACE(FORMOD,NFOR,ichph,'CHANGEMENT_PHASE')
  140. CALL PLACE(FORMOD,NFOR,ither,'THERMIQUE ')
  141. CALL PLACE(FORMOD,NFOR,idiff,'DIFFUSION ')
  142. CALL PLACE(FORMOD,NFOR,imeta,'METALLURGIE ')
  143. iray = 0
  144. IF (ither.NE.0) THEN
  145. nmat = imodel.matmod(/2)
  146. CALL PLACE(imodel.matmod,nmat,iray,'RAYONNEMENT ')
  147. ENDIF
  148. C Pour le contact, on met aux noeuds d'office :
  149. IF (icont.NE.0 .OR. ichph.NE.0) THEN
  150. IF (IPOSI.NE.1) THEN
  151. write(ioimp,*) FORMOD(1),'POSI ==> NOEUD'
  152. CALL ERREUR(21)
  153. RETURN
  154. ENDIF
  155. ISUPMO = 1
  156. C Pour le rayonnement :
  157. ELSE IF (iray.NE.0) THEN
  158. IF (IPOSI.EQ.2) THEN
  159. write(ioimp,*) 'RAYONNEMENT POSI ==> RIGIDITE'
  160. CALL ERREUR(21)
  161. RETURN
  162. ENDIF
  163. MELE = NUMGEO(MELE)
  164. C Pour la thermique (hors rayonnement), diffusion, metallurgie
  165. ELSE IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN
  166. IF (IPOSI.EQ.1) THEN
  167. ISUPMO = 1
  168. ELSE IF (IPOSI.EQ.2) THEN
  169. ISUPMO = 2
  170. ELSE
  171. ISUPMO = 6
  172. ENDIF
  173. ENDIF
  174.  
  175. C Nombre de points d'integration selon la formulation
  176. IF (ISUPMO.EQ.1) THEN
  177. NBPGAU = meleme.NUM(/1)
  178. ELSE
  179. c thermique (y compris rayonnement), diffusion, metallurgie
  180. IF (ither.NE.0 .OR. idiff.NE.0 .OR. imeta.NE.0) THEN
  181. IF (ISUPMO.EQ.2) THEN
  182. CALL TSHAPE(MELE,'GRAVITE',MINTE)
  183. ELSE
  184. CALL TSHAPE(MELE,'GAUSS ',MINTE)
  185. ENDIF
  186. NBPGAU = MINTE.POIGAU(/1)
  187. ELSE
  188. IF (imodel.INFMOD(/1).LT.ISUPMO+2) THEN
  189. CALL ELQUOI(MELE,0,ISUPMO,info,IMODEL)
  190. MINTE = info.INFELL(11)
  191. IF (ISUPMO.EQ.2) THEN
  192. NBPGAU = 1
  193. ELSE IF (ISUPMO.EQ.3) THEN
  194. NBPGAU = INFELL(6)
  195. ELSE IF (ISUPMO.EQ.4) THEN
  196. NBPGAU = INFELL(3)
  197. ELSE IF (ISUPMO.EQ.5) THEN
  198. NBPGAU = INFELL(4)
  199. ENDIF
  200. segsup,info
  201. ELSE
  202. MINTE = imodel.INFMOD(ISUPMO+2)
  203. IF (ISUPMO.EQ.2) THEN
  204. NBPGAU = 1
  205. ELSE IF (ISUPMO.EQ.3) THEN
  206. NBPGAU = INFELE(6)
  207. ELSE IF (ISUPMO.EQ.4) THEN
  208. NBPGAU = INFELE(3)
  209. ELSE IF (ISUPMO.EQ.5) THEN
  210. NBPGAU = INFELE(4)
  211. ENDIF
  212. ENDIF
  213. ENDIF
  214. ENDIF
  215.  
  216. IF (IENT2.LT.1 .OR. IENT2.GT.NBPGAU) THEN
  217. INTERR(1) = IENT2
  218. INTERR(2) = NBPGAU
  219. INTERR(3) = IENT3
  220. CALL ERREUR(1148)
  221. RETURN
  222. ENDIF
  223.  
  224. * CONSTRUCTION DU MCHAML
  225. L1=LTYPE
  226. N1=1
  227. N3=6
  228. SEGINI,MCHELM
  229. TITCHE(1:L1) = CHATYPE(1:LTYPE)
  230. CONCHE(1) = CONMOD
  231. IMACHE(1) = MELEME
  232. IFOCHE = IFOUR
  233. INFCHE(1,1) = 0
  234. INFCHE(1,2) = 0
  235. INFCHE(1,3) = NIFOUR
  236. INFCHE(1,4) = MINTE
  237. INFCHE(1,5) = 0
  238. INFCHE(1,6) = ISUPMO
  239.  
  240. N2 = 1
  241. SEGINI,MCHAML
  242. ICHAML(1) = MCHAML
  243. NOMCHE(1) = MOCOMP
  244. *D IF (IRETF.NE.0) THEN
  245. TYPCHE(1)='REAL*8 '
  246. N1PTEL = NBPGAU
  247. N1EL = NBELEM
  248. N2PTEL = 0
  249. N2EL = 0
  250. SEGINI,MELVAL
  251. VELCHE(IENT2,IENT1)=XFLOT
  252. *D ELSE
  253. *D TYPCHE(1) = 'POINTEUR'//TYPOBJ
  254. *D N1PTEL=0
  255. *D N1EL=0
  256. *D N2PTEL=NBPGAU
  257. *D N2EL=NBELEM
  258. *D SEGINI,MELVAL
  259. *D IELCHE(IENT2,IENT1)=IPOBJ
  260. *D ENDIF
  261. IELVAL(1)=MELVAL
  262.  
  263. * ECRITURE DU RESULTAT
  264. TYPOBJ = 'MCHAML '
  265. CALL ACTOBJ(TYPOBJ,MCHELM,1)
  266. CALL ECROBJ(TYPOBJ,MCHELM)
  267.  
  268. c RETURN
  269. END
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  

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