Télécharger chaspg.eso

Retour à la liste

Numérotation des lignes :

chaspg
  1. C CHASPG SOURCE OF166741 24/10/03 21:15:06 12022
  2. SUBROUTINE CHASPG(IPMODL,IPOI1,IPOI2,IRET,IPLAC)
  3. C---------------------------------------------------------------------
  4. C
  5. C ENTREES:
  6. C
  7. C IPMODL Pointeur sur un MMODEL de type NAVIER_STOKES
  8. C IPOI1 Pointeur sur un MCHAML
  9. C IPLAC Indique le type de support demandé :
  10. C 1 scalaire aux NOEUDS
  11. C 2 scalaire au CENTRE DE GRAVITE
  12. C 3 scalaire aux points d'integration de la RAIDEUR
  13. C 4 scalaire aux points d'integration de la MASSE
  14. C 5 scalaire aux points de CONTRAINTES
  15. C 6 (utilisé dans le cas de la thermique)
  16. C 7 SPG : FACE
  17. C 8 SPG : CENTREP1
  18. C 9 SPG : MSOMMET
  19. C TYPPROJ Mot designant le type transformation autre-->sommet
  20. C INTERP pour interpolation
  21. C PROJEC pour projection
  22. C
  23. C SORTIE:
  24. C
  25. C IPOI2 Pointeur sur un MCHAML
  26. C IRET =0 Si tout est ok
  27. C Sinon contient le numero d'erreur
  28. C
  29. C A.BLEYER le 22/01/2004
  30. C
  31. C---------------------------------------------------------------------
  32. IMPLICIT REAL*8(A-H,O-Z)
  33.  
  34. -INC PPARAM
  35. -INC CCOPTIO
  36. -INC SMMODEL
  37. -INC SMCHAML
  38. -INC SMELEME
  39. -INC SMINTE
  40. -INC SMCOORD
  41.  
  42. PARAMETER (NSPG = 9)
  43. CHARACTER*8 LSPG(NSPG)
  44. C
  45. SEGMENT SWORK
  46. REAL*8 VAL1(NBN1),VAL2(NBN2),VALN(NBN2)
  47. REAL*8 SHP1(6,NBN1),SHP2(6,NBN2),XE(3,NBNN)
  48. ENDSEGMENT
  49. C
  50. C NBPGA1,NBPGAU DESIGNENT LES TAILLES MAX DES CHAMPS CH1 ET CH2
  51. C N1PTE1,N1PTEL DESIGNENT LES TAILLES EFFECTIVES DE CES CHAMPS
  52. C
  53. SEGMENT INFO
  54. INTEGER INFELL(JG)
  55. ENDSEGMENT
  56.  
  57. POINTEUR INFO1.INFO
  58. C
  59. IRET=0
  60.  
  61. LSPG(1)='NOEUD'
  62. LSPG(2)='GRAVITE'
  63. LSPG(3)='RIGIDITE'
  64. LSPG(4)='MASSE'
  65. LSPG(5)='STRESSES'
  66. LSPG(6)='THERMIQU'
  67. LSPG(7)='FACE'
  68. LSPG(8)='P1CENTRE'
  69. LSPG(9)='MSOMMET'
  70. C
  71. C ACTIVATION DU MODELE
  72. C
  73. MMODEL=IPMODL
  74. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  75. NSOUS1=KMODEL(/1)
  76. C
  77. C ACTIVATION DES MCHELM
  78. C
  79. MCHEL1 =IPOI1
  80. NSOUS=MCHEL1.ICHAML(/1)
  81. IF(NSOUS.GT.NSOUS1)THEN
  82. IRET=553
  83. RETURN
  84. ENDIF
  85. N1=NSOUS
  86. L1=MCHEL1.TITCHE(/1)
  87. N3=MCHEL1.INFCHE(/2)
  88. IF (N3.NE.6) then
  89. write(ioimp,*) 'CHASPG : infche(/2) = N3 != 6'
  90. call erreur(5)
  91. endif
  92. NINF=N3
  93. SEGINI MCHELM
  94. TITCHE=MCHEL1.TITCHE
  95. IFOCHE=IFOUR
  96. IPOI2=MCHELM
  97. C
  98. C ON BOUCLE SUR LES SOUS-ZONES DU MCHAML
  99. C
  100. C NTEL=0
  101. C KK1=0
  102. SEGACT,MCOORD
  103. DO 100 ISOUS=1,NSOUS
  104. C
  105. CONCHE(ISOUS)=MCHEL1.CONCHE(ISOUS)
  106. DO 191 IP=1,NINF
  107. INFCHE(ISOUS,IP)=MCHEL1.INFCHE(ISOUS,IP)
  108. 191 CONTINUE
  109. MINTE1=MCHEL1.INFCHE(ISOUS,4)
  110. IPLAC1=MCHEL1.INFCHE(ISOUS,6)
  111.  
  112. IMODEL=KMODEL(ISOUS)
  113. MELE=NEFMOD
  114.  
  115. IF (IPLAC1.EQ.IPLAC) THEN
  116. IPOI2=IPOI1
  117. RETURN
  118.  
  119. ELSEIF (IPLAC1.EQ.1.AND.IPLAC1.NE.IPLAC) THEN
  120. IF (IPLAC.EQ.2) THEN
  121. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  122. ELSEIF(IPLAC.EQ.8) THEN
  123. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  124. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  125. ELSE
  126. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  127. ENDIF
  128. CALL LEKTAB(IDOMA,'ELTP1NC',IPT2)
  129. C KK1=1
  130. ELSEIF(IPLAC.EQ.9) THEN
  131. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  132. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  133. ELSE
  134. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  135. ENDIF
  136. ENDIF
  137.  
  138. ELSEIF (IPLAC1.NE.1.AND.IPLAC.EQ.1) THEN
  139. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  140. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  141. ELSE
  142. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  143. ENDIF
  144.  
  145. ELSEIF (IPLAC1.NE.1.AND.IPLAC.NE.1) THEN
  146. write(ioimp,*) 'IPLAC1,IPLAC=',IPLAC1,IPLAC
  147. WRITE(6,*)'Le SPG origine',LSPG(IPLAC1),'n''est pas compatible'
  148. WRITE(6,*)'avec ',LSPG(IPLAC)
  149. WRITE(6,*)'Seul le SPG SOMMET cible est authorisé !!!'
  150. MOTERR(1:8)='CHASPG '
  151. IRET=1127
  152. RETURN
  153. ENDIF
  154.  
  155. CALL ACTOBJ('MAILLAGE',IPT1,1)
  156. IF(IERR .NE. 0)RETURN
  157.  
  158. IF(NSOUS.NE.1) THEN
  159. MELEME=IPT1.LISOUS(ISOUS)
  160. ELSE
  161. MELEME=IPT1
  162. ENDIF
  163.  
  164. IMACHE(ISOUS)=MELEME
  165. C
  166. C MISE EN CONCORDANCE DES POINTEURS DE MAILLAGE
  167. C
  168. info=0
  169. if(infmod(/1).lt.2+iplac) then
  170. CALL ELQUOI(MELE,0,IPLAC,IPTR2,IMODEL)
  171. IF ( IERR .NE. 0) GOTO 665
  172. INFO=IPTR2
  173. MELGEO=INFELL(14)
  174. MINTE=INFELL(11)
  175. ELSE
  176. MINTE=infmod(2+iplac)
  177. MELGEO=INFELE(14)
  178. ENDIF
  179.  
  180. INFCHE(ISOUS,4)=MINTE
  181. IF(IPLAC.EQ.1)INFCHE(ISOUS,4)=0
  182. INFCHE(ISOUS,6)=IPLAC
  183. C
  184. C ON RECUPERE LE NOMBRE D ELEMENTS
  185. C
  186. NBNN =NUM(/1)
  187. NEL =NUM(/2)
  188. C WRITE(6,*)'NBNN=',NBNN,'NEL=',NEL
  189. C
  190. C ON RECUPERE LE NOMBRE DE POINTS SUPPORT
  191. C NBPGA1 POUR L'ANCIEN CHAMP ET NBPGAU POUR LE NOUVEAU
  192. C
  193. INFO1=0
  194. IF(MINTE1.EQ.0)THEN
  195. if(infmod(/1).lt.2+iplac1) then
  196. CALL ELQUOI(MELE,0,IPLAC1,IPTR2,IMODEL)
  197. INFO1=IPTR2
  198. MINTE1=INFO1.INFELL(11)
  199. ELSE
  200. minte1=infmod(2+iplac1)
  201. endif
  202. ENDIF
  203. NBN1=MINTE1.SHPTOT(/2)
  204.  
  205. NBN2=SHPTOT(/2)
  206. IF(IPLAC.EQ.2) NBN2=1
  207.  
  208. C WRITE(6,*)'NBN1=',NBN1,'NBN2=',NBN2
  209. SEGINI SWORK
  210. C
  211. C CREATION DU MCHAML
  212. C
  213. MCHAM1=MCHEL1.ICHAML(ISOUS)
  214. N2=MCHAM1.NOMCHE(/2)
  215. SEGINI MCHAML
  216. ICHAML(ISOUS)=MCHAML
  217. C
  218. C BOUCLE SUR LES COMPOSANTES
  219. C
  220. DO 180 ICOMP=1,N2
  221. C
  222. NOMCHE(ICOMP)=MCHAM1.NOMCHE(ICOMP)
  223. TYPCHE(ICOMP)=MCHAM1.TYPCHE(ICOMP)
  224. C
  225. MELVA1=MCHAM1.IELVAL(ICOMP)
  226. C
  227. C RECHERCHE DES TAILLES DU NOUVEAU CHAMELEM - dans le cas scalaire
  228. C
  229. N1PTE1=MELVA1.VELCHE(/1)
  230. N1EL1 =MELVA1.VELCHE(/2)
  231.  
  232. N1PTEL=NBN2
  233. N1EL =NEL
  234. C
  235. N2PTEL=0
  236. N2EL=0
  237.  
  238. SEGINI MELVAL
  239. IELVAL(ICOMP)=MELVAL
  240. C
  241. C TRAITEMENT IMMEDIAT SI CHAMP ORIGINEL CONSTANT
  242. C
  243. IF(N1PTE1.EQ.1) THEN
  244. DO 4120 IEL=1,N1EL
  245. XFLO=MELVA1.VELCHE(1,IEL)
  246. DO 41201 INO=1,NBN2
  247. VELCHE(INO,IEL)=XFLO
  248. 41201 CONTINUE
  249. 4120 CONTINUE
  250. C
  251. ELSE
  252. DO 3120 IEL=1,NEL
  253. DO 3121 IGAU=1,NBN1
  254. VAL1(IGAU)=MELVA1.VELCHE(IGAU,IEL)
  255. 3121 CONTINUE
  256. C
  257. C LE CHAMELEM 1 EST AUX NOEUDS ET ON VEUT CHANGER DE SPG
  258. C
  259. IF(IPLAC1.EQ.1) THEN
  260. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE)
  261. CALL QUEDIM(MELGEO,KERRE)
  262. CALL K1K2(MELE,MINTE,MINTE1,NBN2,NBN1,NBNN,
  263. > SWORK,1,KERRE)
  264. IF(KERRE.NE.0) THEN
  265. IRET=KERRE
  266. SEGSUP SWORK,MCHAML,MELVAL
  267. GO TO 665
  268. ENDIF
  269. C
  270. DO 3122 IGAU=1,NBN2
  271. VELCHE(IGAU,IEL)=VAL2(IGAU)
  272. 3122 CONTINUE
  273. C
  274. C PASSAGE D'UN SPG QUELCONQUE VERS UN CHAMELEM AUX NOEUDS
  275. C
  276. ELSEIF(IPLAC1.NE.1.AND.IPLAC.EQ.1) THEN
  277. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE)
  278. CALL QUEDIM(MELGEO,KERRE)
  279. CALL K1K2(MELE,MINTE,MINTE1,NBN2,NBN1,NBNN,
  280. > SWORK,2,KERRE)
  281. IF(KERRE.NE.0) THEN
  282. IRET=KERRE
  283. SEGSUP SWORK,MCHAML,MELVAL
  284. GO TO 665
  285. ENDIF
  286. C
  287. DO 3123 IGAU=1,NBN2
  288. VELCHE(IGAU,IEL)=VAL2(IGAU)
  289. 3123 CONTINUE
  290. ENDIF
  291. 3120 CONTINUE
  292. C NTEL=NTEL+NEL
  293. ENDIF
  294. 180 CONTINUE
  295. SEGSUP SWORK
  296. C
  297. IF (INFO .NE.0) SEGSUP INFO
  298. IF (INFO1.NE.0) SEGSUP INFO1
  299.  
  300. 100 CONTINUE
  301. SEGDES,MCOORD
  302.  
  303. 665 CONTINUE
  304. C CONTINUE
  305. RETURN
  306. END
  307.  
  308.  
  309.  
  310.  

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