Télécharger elfcha.eso

Retour à la liste

Numérotation des lignes :

elfcha
  1. C ELFCHA SOURCE CB215821 26/08/24 21:16:23 12622
  2. SUBROUTINE ELFCHA(MCHARG,KOMALI,KNREFE,KACHAR)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. C
  6. C =====================================================================
  7. C
  8. C CREATION DU SEGMENT MACHAR A PARTIR DE L'OBJET CHARGEMENT MCHARG
  9. C
  10. C SOUS PROGRAMME APPELE PAR ELFE
  11. C
  12. C KNREFE : SEGMENT QUI DECRIT LES ELEMENTS
  13. C KOMALI : SEGMENT DE POINTEURS SUR LES SEGMENTS MALIAI DEFINISSANT
  14. C LES LIAISONS
  15. C
  16. C GUILBAUD MAI 86
  17. C
  18. C =====================================================================
  19. C
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC CCHAMP
  24. -INC SMCHARG
  25. -INC SMCHPOI
  26. -INC SMELEME
  27. -INC SMLREEL
  28. C
  29. SEGMENT MALIAI
  30. REAL*8 ALIA1(NALI)
  31. REAL*8 ALIA2(NBLI)
  32. REAL*8 ALIA3(NL/2,NL/2)
  33. REAL*8 ALIA4(NL/2,NL/2)
  34. REAL*8 BLIAI(NL)
  35. REAL*8 XLIAI(NL)
  36. INTEGER NLBLI(2,NBSTLI)
  37. INTEGER NDCLIA(NL)
  38. INTEGER NVNLIA(NL/2)
  39. INTEGER IBCHA(NCHAL)
  40. POINTEUR KWLIAI.MWLIAI
  41. POINTEUR KLIMAS.MLIMAS
  42. ENDSEGMENT
  43. C
  44. C MATRICE DE LIAISON PUIS SON INVERSE EN 4 BLOCS:
  45. C ALIA1 : MATRICE BANDE I-A0
  46. C -1
  47. C ALIA2 : MATRICE BANDE -B0
  48. C ALIA3 : MATRICE DE LIAISON TERMES EN DEPLACEMENT
  49. C ALIA4 : MATRICE DE LIAISON TERMES EN CONTRAINTE
  50. C NLBLI : TABLEAU DE CORRESPONDANCE ENTRE LES BLOCS
  51. C BLIAI : VECTEUR SECOND MEMBRE -> VN ET CHARGEMENT EVENTUEL
  52. C XLIAI : VECTEUR PREMIER MEMBRE -> DNCN
  53. C NDCLIA(NJC)=IKID : LA NJC-IEME INCONNUE DE XLIAI EST LE IKID-IEME
  54. C DDL DE DNCN
  55. C DNCN(IKID) <- XLIAI(NJC)
  56. C NVNLIA(NJL)=IKIV : LA NJL-IEME INCONNUE DE BLIAI EST LE IKIV-IEME
  57. C DDL DE VN
  58. C BLIAI(NJL) <- VN(IKIV)
  59. C NCHAL : NOMBRE DE SOUS-CHARGEMENTS AGISSANT SUR LA LIAISON
  60. C IBCHA(I)=K : LA PARTIE CHARGEMENT DE BLIAI POUR LE I-IEME SOUS-
  61. C CHARGEMENT SE TROUVE A PARTIR DE LA K+1-IEME PLACE DANS BCHAR2
  62. C BLIAI(NL/2+NJL) <- BCHAR2(K+NJL)
  63. C
  64. SEGMENT MWLIAI
  65. REAL*8 ALIAI(NL/2,NL)
  66. ENDSEGMENT
  67. C
  68. SEGMENT ICPR(nbpts)
  69. C
  70. C IKID=ICPR(NUM(I,J))+K
  71. C LA COMPOSANTE NOMD(K) DU POINT NUM EST LE IKID-IEME DDL DE DNCN
  72. C
  73. SEGMENT MACHAR
  74. INTEGER LACHAL(NCHAR)
  75. POINTEUR LACHAT(NCHAR).ICHPO2
  76. POINTEUR LACHAF(NCHAR).ICHPO3
  77. REAL*8 BCHAR1(NV1)
  78. REAL*8 BCHAR2(NV1)
  79. ENDSEGMENT
  80. C
  81. C LACHAL(I) : NOMBRE DE TERMES RELATIFS AU CHARGEMENT I DANS BCHAR1
  82. C LACHAT(I) : POINTEUR SUR LA LISTE DES TEMPS DU CHARGEMENT I
  83. C LACHAF(I) : POINTEUR SUR LA LISTE DES F(T) DU CHARGEMENT I
  84. C BCHAR1 : VECTEUR FORME PAR L'EMPILEMENT DE LA PARTIE CHARGEMENT
  85. C DES SECOND-MEMBRES BLIAI, POUR TOUTES LES LIAISONS CONCERNEES
  86. C PAR UN SOUS-CHARGEMENT ET POUR TOUS LES SOUS-CHARGEMENTS
  87. C BCHAR2 : IDEM MODULE PAR LES FONCTIONS TEMPORELLES
  88. C
  89. SEGMENT MOMALI
  90. POINTEUR NOMALI(NBLIPE).MALIAI
  91. POINTEUR KCPR2.ICPR2
  92. ENDSEGMENT
  93. C
  94. SEGMENT MNREFE
  95. INTEGER NREFE(8,NSTR)
  96. INTEGER NTANBN
  97. INTEGER NIDNCN
  98. INTEGER NTVN
  99. POINTEUR NREPA.MPASS
  100. POINTEUR NRECA.MCARA
  101. POINTEUR NRENO.MNORM
  102. POINTEUR NRECPR.ICPR
  103. POINTEUR NREMEL.MELEME
  104. POINTEUR NREDEN.MDEN
  105. ENDSEGMENT
  106. C
  107. C NSTR : NOMBRE D'ELEMENTS
  108. C NREFE(1,I) : MELEME
  109. C NREFE(2,I) : MSOSTU
  110. C NREFE(3,I) : TYPE DE L'ELEMENT
  111. C NREFE(4,I) : NOMBRE DE POINTS DU MELEME
  112. C NREFE(5,I) : NOMBRE DE DDL PAR POINT
  113. C NREFE(6,I)=IVN :LE 1ER DDL DE L'ELEMENT EST LE IVN+1 IEME DE VN
  114. C NREFE(7,I)=IAN :LE 1ER TERME DE LA MATRICE A EST LE IAN IEME DE ANBN
  115. C NREFE(8,I)= 1 :LE IEME ELEMENT EST RIGIDE (OU PARTIELLEMENT) SINON 0
  116. C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B POUR TOUS LES ELEMENTS
  117. C NIDNCN : NOMBRE TOTAL D'INCONNUES DE DNCN
  118. C NTVN : LONGUEUR DU TABLEAU VN
  119. C
  120. SEGMENT ICPR2(NIDNCN)
  121. C
  122. C NJ=ICPR2(IKID) : LE IKID-IEME DDL DE DNCN EST LE NJ-IEME DANS
  123. C L'ENSEMBLE DES XLIAI MIS BOUT-A-BOUT
  124. C
  125. SEGMENT V0(2*NTVN)*D
  126. C
  127. SEGMENT ITCOM(NC)
  128. C
  129. SEGMENT IT(NBLIPE)
  130. C
  131. SEGMENT/ITLI/(ITLIA(NCHAR,NBLIPE))
  132. C
  133. CHARACTER*(LOCOMP) NOC
  134.  
  135.  
  136. WRITE(IOIMP,*) 'DEBUT DE ELFCHA'
  137. KACHAR=0
  138. MNREFE=KNREFE
  139. ICPR=NRECPR
  140. SEGINI V0
  141. C
  142. MOMALI=KOMALI
  143. ICPR2=KCPR2
  144. NBLIPE=NOMALI(/1)
  145. SEGINI IT
  146. C
  147. SEGACT MCHARG
  148. NCHAR=KCHARG(/1)
  149. SEGINI ITLI
  150. DO 1004 I=1,NBLIPE
  151. IT(I)=0
  152. DO 1 J=1,NCHAR
  153. ITLIA(J,I)=0
  154. 1 CONTINUE
  155. 1004 CONTINUE
  156. C
  157. NV1=NTVN
  158. SEGINI MACHAR
  159. C
  160. C BOUCLE SUR LES SOUS-CHARGEMENTS DE L'OBJET CHARGEMENT
  161. C
  162. NV1=0
  163. DO 140 I=1,NCHAR
  164. DO 10 II=1,NIDNCN
  165. V0(II)=0.D0
  166. 10 CONTINUE
  167. C
  168. C 1 - RECHERCHE DE LA POSITION DU DDL CHARGE DANS L'ENSEMBLE DES XLIAI
  169. C ET REMPLISSAGE DE V0
  170. C
  171. ICHARG=KCHARG(I)
  172. SEGACT ICHARG
  173. IF(CHATYP.NE.'CHPOINT '.OR.CHAMOB(I).NE.'STAT'
  174. & .OR.CHALIE(I).NE.'LIE ') THEN
  175. SEGDES ICHARG,MCHARG
  176. CALL ERREUR(696)
  177. RETURN
  178. ENDIF
  179. MCHPOI=ICHPO1
  180. SEGACT MCHPOI
  181. NSOUPO=IPCHP(/1)
  182. DO 70 ISOUPO=1,NSOUPO
  183. MSOUPO=IPCHP(ISOUPO)
  184. SEGACT MSOUPO
  185. MPOVAL=IPOVAL
  186. SEGACT MPOVAL
  187. NC=VPOCHA(/2)
  188. SEGINI ITCOM
  189. DO 40 INC=1,NC
  190. NOC=NOCOMP(INC)
  191. ITCOM(INC)=0
  192. DO 20 IDD=1,6
  193. IF(NOC.EQ.NOMDD(IDD)) THEN
  194. ITCOM(INC)=IDD
  195. GO TO 40
  196. ENDIF
  197. 20 CONTINUE
  198. DO 30 IDU=1,6
  199. IF(NOC.EQ.NOMDU(IDU)) THEN
  200. ITCOM(INC)=IDU+6
  201. GO TO 40
  202. ENDIF
  203. 30 CONTINUE
  204. 40 CONTINUE
  205. C
  206. MELEME=IGEOC
  207. SEGACT MELEME
  208. NBPO=NUM(/2)
  209. DO 60 IBPO=1,NBPO
  210. IKI=ICPR(NUM(1,IBPO))
  211. IF(IKI.EQ.-1) THEN
  212. C *** LE POINT NE FAIT PAS PARTIE DE LA STRUCTURE
  213. INTERR(1)=IKI
  214. CALL ERREUR(384)
  215. RETURN
  216. ENDIF
  217. DO 50 INC=1,NC
  218. IKC=ITCOM(INC)
  219. IF(IKC.EQ.0) THEN
  220. C *** LA COMPOSANTE N'EST PAS DEFINIE POUR LA STRUCTURE
  221. MOTERR=NOCOMP(INC)
  222. CALL ERREUR(385)
  223. RETURN
  224. ENDIF
  225. VP=VPOCHA(IBPO,INC)
  226. IV=ICPR2(IKI+IKC)
  227. C WRITE(IOIMP,*) IV
  228. IF(VP.NE.0.D0) V0(IV)=VP
  229. 50 CONTINUE
  230. 60 CONTINUE
  231. SEGSUP ITCOM
  232. 70 CONTINUE
  233. C WRITE(IOIMP,*)(V0(J),J=1,NIDNCN)
  234. C
  235. C 2 - CREATION DU TABLEAU V1 A PARTIR DE V0
  236. C
  237. NDEPLA=0
  238. NV2=0
  239. DO 130 INLIAI=1,NBLIPE
  240. MALIAI=NOMALI(INLIAI)
  241. MWLIAI=KWLIAI
  242. NL=NDCLIA(/1)
  243. C
  244. C Y A-T-IL UN CHARGEMENT SUR LA LIAISON ?
  245. C
  246. DO 80 NJCC=1,NL
  247. IF(V0(NDEPLA+NJCC).NE.0.D0) THEN
  248. C
  249. C CREATION DE LA PARTIE CHARGEMENT DU SECOND MEMBRE BLIAI
  250. C ET EMPILEMENT DANS BCHAR1
  251. C
  252. ITT=IT(INLIAI)+1
  253. IT(INLIAI)=ITT
  254. NLS2=NL/2
  255. ITLIA(ITT,INLIAI)=NV1
  256. NVA=NV1
  257. NV1=NV1+NLS2
  258. NV2=NV2+NLS2
  259. C WRITE(IOIMP,*)ITT,NV1,NV2,INLIAI,NDEPLA
  260. DO 110 NJC=1,NL
  261. VV=V0(NDEPLA+NJC)
  262. IF(VV.NE.0.D0) THEN
  263. DO 100 NJ=1,NLS2
  264. C WRITE(IOIMP,*) ALIAI(NJL,NJC)
  265. IF(ALIAI(NJ,NJC).NE.0.D0) THEN
  266. NJA=NVA+NJ
  267. BCHAR1(NJA)=BCHAR1(NJA)+VV
  268. C WRITE(IOIMP,*) BCHAR1(NJA)
  269. ENDIF
  270. 100 CONTINUE
  271. ENDIF
  272. 110 CONTINUE
  273. GOTO 120
  274. ENDIF
  275. 80 CONTINUE
  276. 120 NDEPLA=NDEPLA+NL
  277. 130 CONTINUE
  278. C
  279. LACHAL(I)=NV2
  280. MLREEL=ICHPO2
  281. SEGACT MLREEL
  282. LACHAT(I)=ICHPO2
  283. MLREEL=ICHPO3
  284. SEGACT MLREEL
  285. LACHAF(I)=ICHPO3
  286. SEGDES ICHARG
  287. 140 CONTINUE
  288. C
  289. SEGDES MCHARG
  290. SEGSUP V0
  291. SEGADJ MACHAR
  292. KACHAR=MACHAR
  293. C
  294. C CREATION DU TABLEAU IBCHA DES SEGMENTS MALIAI
  295. C
  296. DO 160 INLIAI=1,NBLIPE
  297. MALIAI=NOMALI(INLIAI)
  298. MWLIAI=KWLIAI
  299. SEGSUP MWLIAI
  300. NCHAL=IT(INLIAI)
  301. IF(NCHAL.NE.0) THEN
  302. NL=NDCLIA(/1)
  303. NALI=ALIA1(/1)
  304. NBLI=ALIA2(/1)
  305. NBSTLI=NLBLI(/2)
  306. SEGADJ MALIAI
  307. DO 150 ITT=1,NCHAL
  308. IBCHA(ITT)=ITLIA(ITT,INLIAI)
  309. 150 CONTINUE
  310. ENDIF
  311. 160 CONTINUE
  312. SEGSUP IT,ITLI
  313. C
  314. IF(IIMPI.EQ.1) THEN
  315. DO 210 INLIAI=1,NBLIPE
  316. MALIAI=NOMALI(INLIAI)
  317. NCHAL=IBCHA(/1)
  318. WRITE(IOIMP,1001) INLIAI,NCHAL
  319. 1001 FORMAT(/1X,' LA ',I5,' IEME LIAISON EST CHARGEE AVEC ',I5,
  320. *' CHARGEMENT(S) '/)
  321. IF(NCHAL.NE.0) THEN
  322. NLS2=NDCLIA(/1)/2
  323. DO 200 J=1,NCHAL
  324. IT1=IBCHA(J)+1
  325. IT2=0
  326. DO 170 N=1,NCHAR
  327. IT2=IT2+LACHAL(N)
  328. IF(IT1.LE.IT2) THEN
  329. WRITE(IOIMP,1002) N,LACHAT(N),LACHAF(N),LACHAL(N)
  330. 1002 FORMAT(//1X,' CHARGEMENT ',I5,' T, F(T) :',I6,1X,I6,1X,I6)
  331. GOTO 180
  332. ENDIF
  333. 170 CONTINUE
  334. 180 CONTINUE
  335. IT2=IT1+NLS2-1
  336. WRITE(IOIMP,1003)(BCHAR1(IT),IT=IT1,IT2)
  337. 1003 FORMAT(1X,10(1PE12.5,1X))
  338. 200 CONTINUE
  339. ENDIF
  340. 210 CONTINUE
  341. ENDIF
  342. C
  343. WRITE(IOIMP,*) 'FIN DE ELFCHA'
  344. RETURN
  345. END
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  

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