Télécharger kcham1.eso

Retour à la liste

Numérotation des lignes :

kcham1
  1. C KCHAM1 SOURCE PV090527 25/01/07 14:42:46 12115
  2. SUBROUTINE KCHAM1(IPMODL,IPCHPO,IPCHEL)
  3. C____________________________________________________________________*
  4. C *
  5. C transformation de chpoint en mchaml *
  6. C *
  7. C entr{es: *
  8. C ________ *
  9. C *
  10. C ipmodl pointeur sur un mmodel *
  11. C ipchpo pointeur sur le chpoint *
  12. C *
  13. C sorties: *
  14. C ________ *
  15. C *
  16. C ipchel pointeur sur le mchaml resultat *
  17. C____________________________________________________________________*
  18. C *
  19. IMPLICIT REAL*8 (A-H,O-Z)
  20. C
  21.  
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC CCGEOME
  25. -INC SMCOORD
  26. -INC SMCHAML
  27. -INC SMCHPOI
  28. -INC SMMODEL
  29. -INC SMELEME
  30. -INC SMLENTI
  31. C
  32. C
  33. SEGMENT INFO
  34. INTEGER INFELL(JG)
  35. ENDSEGMENT
  36. C
  37. C PARAMETER (NSPG = 9)
  38. PARAMETER (NSPG = 5)
  39. CHARACTER*8 LSPG(NSPG)
  40. CHARACTER*(NCONCH) CONM
  41. CHARACTER*8 SOUTYP,TYPSPG
  42. C
  43. C l'ordre des SPG correspond à l'ordre du KPOIND
  44. C LSPG(1)='NOEUD' -> SOMMET
  45. C LSPG(2)='GRAVITE' -> CENTRE
  46. C LSPG(3)='RIGIDITE'
  47. C LSPG(4)='MASSE'
  48. C LSPG(5)='STRESSES'
  49. C LSPG(6)='THERMIQU'
  50. C LSPG(7)='FACE' -> FACE
  51. C LSPG(8)='P1CENTRE' -> CENTREP1
  52. C LSPG(9)='MSOMMET' -> MSOMMET
  53. LSPG(1)='SOMMET'
  54. LSPG(2)='CENTRE'
  55. LSPG(3)='FACE'
  56. LSPG(4)='CENTREP1'
  57. LSPG(5)='MSOMMET'
  58. C
  59. C le traitement d'harmoniques de fourier n'est pas implemente
  60. C
  61. C IPMINT=0
  62. IPCHEL=0
  63. C NPINT = 0
  64. C IRRT=0
  65. CONM=' '
  66. TYPSPG=' '
  67. C
  68. C activation de l'objet modele
  69. C
  70. MMODEL = IPMODL
  71. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  72. IF(IERR.NE.0)GOTO 9999
  73. SEGACT,MMODEL
  74. C IDOMA correspond au pointeur de la table domaine
  75. C
  76. C activation du chpoint
  77. C
  78. MCHPOI=IPCHPO
  79. SEGACT,MCHPOI
  80. NSOUPO=IPCHP(/1)
  81. C
  82. C Determination du type de support geometrique
  83. C
  84. DO 20 I=1,NSOUPO
  85. MSOUPO=IPCHP(I)
  86. SEGACT MSOUPO
  87. MLMCHP=IGEOC
  88. SEGDES MSOUPO
  89. CALL KRIPAD(MLMCHP,MLENTI)
  90. C
  91. C TYPSPG = SOMMET, FACE, CENTRE, CENTREP0, CENTREP1 ou MSOMMET
  92. C
  93. DO 10 L=1,NSPG
  94. TYPSPG=LSPG(L)
  95. CALL LEKTAB(IDOMA,TYPSPG,MLMSPG)
  96. CALL KRIPAD(MLMSPG,MLENT1)
  97. IF(IERR.NE.0)GOTO 9999
  98. CALL VERPAD(MLENTI,MLMSPG,IRET1)
  99. CALL VERPAD(MLENT1,MLMCHP,IRET2)
  100. IF(IRET1.EQ.0.AND.IRET2.EQ.0) GOTO 21
  101. 10 CONTINUE
  102. 20 CONTINUE
  103.  
  104. WRITE(6,*)'SPG du champoint non trouve : '
  105. WRITE(6,*)'CHPO peut-etre incompatible avec le modele?'
  106. GOTO 666
  107.  
  108. 21 CONTINUE
  109.  
  110. IPT3=MLMSPG
  111. INFSPG=L
  112. IF(L.GE.3) INFSPG=4+L
  113. IF(INFSPG.EQ.2) SEGACT,IPT3
  114. C
  115. C recherche eventuelle des sous-domaine du maillage
  116. C associe a l'objet modele Navier-Stokes
  117. C
  118. IMACR1=0
  119. DO 11 I=1,MAX(1,KMODEL(/1))
  120. IMODEL=KMODEL(I)
  121. SEGACT,IMODEL
  122. NELE=NEFMOD
  123. IF(NELE.GE.216.AND.NELE.LE.222) IMACR1=IMACR1+1
  124. 11 CONTINUE
  125.  
  126.  
  127.  
  128. CALL LEKTAB(IDOMA,'MAILLAGE',MPERE)
  129. IF(INEFMD.EQ.2.AND.INFSPG.NE.2) THEN
  130. CALL LEKTAB(IDOMA,'MACRO1',MPERE)
  131. ENDIF
  132. IF(IMACR1.EQ.KMODEL(/1)) CALL LEKTAB(IDOMA,'MAILLAGE',MPERE)
  133. C LINE ou LINB avec CENTREP1
  134. IF(INEFMD.EQ.1.OR.INEFMD.EQ.4) THEN
  135. IF(INFSPG.EQ.8) THEN
  136. C Option %m1:8 incompatible avec les données
  137. MOTERR( 1: 8) = TYPSPG
  138. CALL ERREUR(803)
  139. GOTO 666
  140. ENDIF
  141. ENDIF
  142. C Face
  143. IF(INFSPG.EQ.7) THEN
  144. C Option %m1:8 incompatible avec les données
  145. MOTERR( 1: 8) = TYPSPG
  146. CALL ERREUR(803)
  147. GOTO 666
  148. ENDIF
  149. IF(INFSPG.EQ.8) THEN
  150. CALL LEKTAB(IDOMA,'ELTP1NC',IPT4)
  151. SEGACT,IPT4
  152. ENDIF
  153.  
  154. MELEME=MPERE
  155. SEGACT MELEME
  156. N1=MAX(1,LISOUS(/1))
  157.  
  158. C
  159. C initialisation du segment descripteur du champ par element
  160. C
  161. N3=6
  162. L1=LEN(MTYPOI)
  163. SOUTYP=MTYPOI
  164. SEGINI,MCHELM
  165. TITCHE=SOUTYP
  166. IFOCHE=IFOUR
  167. C
  168. C remplissage des MCHAML
  169. C
  170. ILM1=0
  171. DO 30 I=1,N1
  172. IF(N1.NE.1) THEN
  173. IPT1=LISOUS(I)
  174. SEGACT IPT1
  175. ELSE
  176. IPT1=MELEME
  177. ENDIF
  178. IMACHE(I)=IPT1
  179. CONCHE(I)=CONM
  180. INFCHE(I,6)=INFSPG
  181.  
  182. IMODEL=KMODEL(I)
  183. SEGACT,IMODEL
  184. NELE=NEFMOD
  185. N2PTEL=0
  186. N2EL=0
  187. C TYPE SPG DU CHPO : SOMMET
  188. IF(INFSPG.EQ.1) THEN
  189. IMINT=0
  190. N1PTEL=IPT1.NUM(/1)
  191. N1EL=IPT1.NUM(/2)
  192. C TYPE SPG DU CHPO : CENTRE
  193. ELSEIF(INFSPG.EQ.2) THEN
  194. if(infmod(/1).lt.4) then
  195. CALL ELQUOI(NELE,0,INFSPG,IPTR,IMODEL)
  196. INFO=IPTR
  197. IMINT=INFELL(11)
  198. segsup info
  199. else
  200. IMINT=infmod(INFSPG+2)
  201. endif
  202. N1PTEL=1
  203. N1EL=IPT1.NUM(/2)
  204. C IF(INFO.GT.0) SEGSUP INFO
  205. C TYPE SPG DU CHPO : CENTREP1
  206. ELSEIF(INFSPG.EQ.8) THEN
  207. CALL ELQUOI(NELE,0,INFSPG,IPTR,IMODEL)
  208. INFO=IPTR
  209. IMINT=INFELL(11)
  210. N1PTEL=INFELL(8)
  211. N1EL=IPT1.NUM(/2)
  212. SEGSUP INFO
  213. C TYPE SPG DU CHPO : MSOMMET
  214. ELSEIF(INFSPG.EQ.9) THEN
  215. CALL ELQUOI(NELE,0,INFSPG,IPTR,IMODEL)
  216. INFO=IPTR
  217. IMINT=INFELL(11)
  218. N1PTEL=INFELL(8)
  219. N1EL=IPT1.NUM(/2)
  220. SEGSUP INFO
  221. ENDIF
  222.  
  223. INFCHE(I,4)=IMINT
  224.  
  225. DO 40 J=1,NSOUPO
  226. MSOUPO=IPCHP(J)
  227. SEGACT MSOUPO
  228. N2=NOCOMP(/2)
  229. IPT2=IGEOC
  230. SEGACT,IPT2
  231. CALL KRIPAD(IPT2,MLENT2)
  232. SEGACT,MLENT2
  233. MPOVAL=IPOVAL
  234. SEGACT,MPOVAL
  235. SEGINI,MCHAML
  236. ICHAML(I)=MCHAML
  237.  
  238. DO 50 K=1,N2
  239. NOMCHE(K)=NOCOMP(K)
  240. TYPCHE(K)='REAL*8'
  241. SEGINI,MELVAL
  242. IELVAL(K)=MELVAL
  243. DO 70 K70=1,N1EL
  244. DO 80 K80=1,N1PTEL
  245. IF(INFSPG.EQ.1) THEN
  246. II2=IPT1.NUM(K80,K70)
  247. ELSEIF(INFSPG.EQ.2) THEN
  248. II2=IPT3.NUM(K80,(ILM1+K70))
  249. ELSEIF(INFSPG.EQ.8) THEN
  250. II2=IPT4.NUM(K80,(ILM1+K70))
  251. ELSEIF(INFSPG.EQ.9) THEN
  252. IF(INEFMD.EQ.1) II1=K80
  253. IF(INEFMD.EQ.2) II1=(2*K80)-1
  254. IF(INEFMD.EQ.3) II1=(2*K80)-1
  255. IF(INEFMD.EQ.4) II1=K80
  256. II2=IPT1.NUM(II1,K70)
  257. ENDIF
  258. VELCHE(K80,K70)=VPOCHA(MLENT2.LECT(II2),K)
  259. 80 CONTINUE
  260. 70 CONTINUE
  261. SEGDES,MELVAL
  262. 50 CONTINUE
  263. SEGDES,IPT2
  264. SEGDES,MLENT2
  265. SEGDES,MSOUPO
  266. SEGDES,MPOVAL
  267. SEGDES,MCHAML
  268. 40 CONTINUE
  269. ILM1=ILM1+IPT1.NUM(/2)
  270. IF(N1.NE.1) SEGDES,IPT1
  271. SEGDES,IMODEL
  272. 30 CONTINUE
  273.  
  274. IPCHEL=MCHELM
  275. SEGDES,MCHELM
  276.  
  277. SEGDES,MELEME
  278. 666 CONTINUE
  279. IF(INFSPG.EQ.2) SEGDES,IPT3
  280. IF(INFSPG.EQ.8) SEGDES,IPT4
  281. SEGDES,MCHPOI
  282. SEGDES,MMODEL
  283.  
  284. C
  285. 9999 CONTINUE
  286. RETURN
  287. END
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  

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