Télécharger chaspg.eso

Retour à la liste

Numérotation des lignes :

chaspg
  1. C CHASPG SOURCE MB234859 25/09/08 21:15:11 12358
  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. IRET=0
  54.  
  55. LSPG(1)='NOEUD'
  56. LSPG(2)='GRAVITE'
  57. LSPG(3)='RIGIDITE'
  58. LSPG(4)='MASSE'
  59. LSPG(5)='STRESSES'
  60. LSPG(6)='THERMIQU'
  61. LSPG(7)='FACE'
  62. LSPG(8)='P1CENTRE'
  63. LSPG(9)='MSOMMET'
  64. C
  65. C ACTIVATION DU MODELE
  66. C
  67. MMODEL=IPMODL
  68. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  69. NSOUS1=KMODEL(/1)
  70. C
  71. C ACTIVATION DES MCHELM
  72. C
  73. MCHEL1 =IPOI1
  74. NSOUS=MCHEL1.ICHAML(/1)
  75. IF(NSOUS.GT.NSOUS1)THEN
  76. IRET=553
  77. RETURN
  78. ENDIF
  79. N1=NSOUS
  80. L1=MCHEL1.TITCHE(/1)
  81. N3=MCHEL1.INFCHE(/2)
  82. IF (N3.NE.6) then
  83. write(ioimp,*) 'CHASPG : infche(/2) = N3 != 6'
  84. call erreur(5)
  85. endif
  86. NINF=N3
  87. SEGINI MCHELM
  88. TITCHE=MCHEL1.TITCHE
  89. IFOCHE=IFOUR
  90. IPOI2=MCHELM
  91. C
  92. C ON BOUCLE SUR LES SOUS-ZONES DU MCHAML
  93. C
  94. C NTEL=0
  95. C KK1=0
  96. SEGACT,MCOORD
  97. DO 100 ISOUS=1,NSOUS
  98. C
  99. CONCHE(ISOUS)=MCHEL1.CONCHE(ISOUS)
  100. DO 191 IP=1,NINF
  101. INFCHE(ISOUS,IP)=MCHEL1.INFCHE(ISOUS,IP)
  102. 191 CONTINUE
  103. MINTE1=MCHEL1.INFCHE(ISOUS,4)
  104. IPLAC1=MCHEL1.INFCHE(ISOUS,6)
  105.  
  106. IMODEL=KMODEL(ISOUS)
  107. MELE=NEFMOD
  108.  
  109. IF (IPLAC1.EQ.IPLAC) THEN
  110. IPOI2=IPOI1
  111. RETURN
  112.  
  113. ELSEIF (IPLAC1.EQ.1.AND.IPLAC1.NE.IPLAC) THEN
  114. IF (IPLAC.EQ.2) THEN
  115. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  116. ELSEIF(IPLAC.EQ.8) THEN
  117. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  118. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  119. ELSE
  120. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  121. ENDIF
  122. CALL LEKTAB(IDOMA,'ELTP1NC',IPT2)
  123. C KK1=1
  124. ELSEIF(IPLAC.EQ.9) THEN
  125. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  126. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  127. ELSE
  128. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  129. ENDIF
  130. ENDIF
  131.  
  132. ELSEIF (IPLAC1.NE.1.AND.IPLAC.EQ.1) THEN
  133. IF (MELE.GE.223.AND.MELE.LE.236) THEN
  134. CALL LEKTAB(IDOMA,'MACRO1',IPT1)
  135. ELSE
  136. CALL LEKTAB(IDOMA,'MAILLAGE',IPT1)
  137. ENDIF
  138.  
  139. ELSEIF (IPLAC1.NE.1.AND.IPLAC.NE.1) THEN
  140. write(ioimp,*) 'IPLAC1,IPLAC=',IPLAC1,IPLAC
  141. WRITE(6,*)'Le SPG origine',LSPG(IPLAC1),'n''est pas compatible'
  142. WRITE(6,*)'avec ',LSPG(IPLAC)
  143. WRITE(6,*)'Seul le SPG SOMMET cible est authorisé !!!'
  144. MOTERR(1:8)='CHASPG '
  145. IRET=1127
  146. RETURN
  147. ENDIF
  148.  
  149. CALL ACTOBJ('MAILLAGE',IPT1,1)
  150. IF(IERR .NE. 0)RETURN
  151.  
  152. IF(NSOUS.NE.1) THEN
  153. MELEME=IPT1.LISOUS(ISOUS)
  154. ELSE
  155. MELEME=IPT1
  156. ENDIF
  157.  
  158. IMACHE(ISOUS)=MELEME
  159. C
  160. C MISE EN CONCORDANCE DES POINTEURS DE MAILLAGE
  161. C
  162. if(infmod(/1).lt.2+iplac) then
  163. CALL ELQUOI(IMODEL,IPLAC,IPTR2)
  164. IF ( IERR .NE. 0) GOTO 665
  165. MELGEO=INFELE(14)
  166. MINTE=IPTR2
  167. ELSE
  168. MINTE=infmod(2+iplac)
  169. MELGEO=INFELE(14)
  170. ENDIF
  171.  
  172. INFCHE(ISOUS,4)=MINTE
  173. IF(IPLAC.EQ.1)INFCHE(ISOUS,4)=0
  174. INFCHE(ISOUS,6)=IPLAC
  175. C
  176. C ON RECUPERE LE NOMBRE D ELEMENTS
  177. C
  178. NBNN =NUM(/1)
  179. NEL =NUM(/2)
  180. C WRITE(6,*)'NBNN=',NBNN,'NEL=',NEL
  181. C
  182. C ON RECUPERE LE NOMBRE DE POINTS SUPPORT
  183. C NBPGA1 POUR L'ANCIEN CHAMP ET NBPGAU POUR LE NOUVEAU
  184. C
  185. IF(MINTE1.EQ.0)THEN
  186. CALL ELQUOI(IMODEL,IPLAC1,IPTR2)
  187. MINTE1=IPTR2
  188. ENDIF
  189. NBN1=MINTE1.SHPTOT(/2)
  190.  
  191. NBN2=SHPTOT(/2)
  192. IF(IPLAC.EQ.2) NBN2=1
  193.  
  194. C WRITE(6,*)'NBN1=',NBN1,'NBN2=',NBN2
  195. SEGINI SWORK
  196. C
  197. C CREATION DU MCHAML
  198. C
  199. MCHAM1=MCHEL1.ICHAML(ISOUS)
  200. N2=MCHAM1.NOMCHE(/2)
  201. SEGINI MCHAML
  202. ICHAML(ISOUS)=MCHAML
  203. C
  204. C BOUCLE SUR LES COMPOSANTES
  205. C
  206. DO 180 ICOMP=1,N2
  207. C
  208. NOMCHE(ICOMP)=MCHAM1.NOMCHE(ICOMP)
  209. TYPCHE(ICOMP)=MCHAM1.TYPCHE(ICOMP)
  210. C
  211. MELVA1=MCHAM1.IELVAL(ICOMP)
  212. C
  213. C RECHERCHE DES TAILLES DU NOUVEAU CHAMELEM - dans le cas scalaire
  214. C
  215. N1PTE1=MELVA1.VELCHE(/1)
  216. N1EL1 =MELVA1.VELCHE(/2)
  217.  
  218. N1PTEL=NBN2
  219. N1EL =NEL
  220. C
  221. N2PTEL=0
  222. N2EL=0
  223.  
  224. SEGINI MELVAL
  225. IELVAL(ICOMP)=MELVAL
  226. C
  227. C TRAITEMENT IMMEDIAT SI CHAMP ORIGINEL CONSTANT
  228. C
  229. IF(N1PTE1.EQ.1) THEN
  230. DO 4120 IEL=1,N1EL
  231. XFLO=MELVA1.VELCHE(1,IEL)
  232. DO 41201 INO=1,NBN2
  233. VELCHE(INO,IEL)=XFLO
  234. 41201 CONTINUE
  235. 4120 CONTINUE
  236. C
  237. ELSE
  238. DO 3120 IEL=1,NEL
  239. DO 3121 IGAU=1,NBN1
  240. VAL1(IGAU)=MELVA1.VELCHE(IGAU,IEL)
  241. 3121 CONTINUE
  242. C
  243. C LE CHAMELEM 1 EST AUX NOEUDS ET ON VEUT CHANGER DE SPG
  244. C
  245. IF(IPLAC1.EQ.1) THEN
  246. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE)
  247. CALL QUEDIM(MELGEO,KERRE)
  248. CALL K1K2(MELE,MINTE,MINTE1,NBN2,NBN1,NBNN,
  249. > SWORK,1,KERRE)
  250. IF(KERRE.NE.0) THEN
  251. IRET=KERRE
  252. SEGSUP SWORK,MCHAML,MELVAL
  253. GO TO 665
  254. ENDIF
  255. C
  256. DO 3122 IGAU=1,NBN2
  257. VELCHE(IGAU,IEL)=VAL2(IGAU)
  258. 3122 CONTINUE
  259. C
  260. C PASSAGE D'UN SPG QUELCONQUE VERS UN CHAMELEM AUX NOEUDS
  261. C
  262. ELSEIF(IPLAC1.NE.1.AND.IPLAC.EQ.1) THEN
  263. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE)
  264. CALL QUEDIM(MELGEO,KERRE)
  265. CALL K1K2(MELE,MINTE,MINTE1,NBN2,NBN1,NBNN,
  266. > SWORK,2,KERRE)
  267. IF(KERRE.NE.0) THEN
  268. IRET=KERRE
  269. SEGSUP SWORK,MCHAML,MELVAL
  270. GO TO 665
  271. ENDIF
  272. C
  273. DO 3123 IGAU=1,NBN2
  274. VELCHE(IGAU,IEL)=VAL2(IGAU)
  275. 3123 CONTINUE
  276. ENDIF
  277. 3120 CONTINUE
  278. C NTEL=NTEL+NEL
  279. ENDIF
  280. 180 CONTINUE
  281. SEGSUP SWORK
  282. C
  283. 100 CONTINUE
  284. SEGDES,MCOORD
  285.  
  286. 665 CONTINUE
  287. C CONTINUE
  288. RETURN
  289. END
  290.  
  291.  
  292.  
  293.  
  294.  

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