Télécharger resou1.eso

Retour à la liste

Numérotation des lignes :

resou1
  1. C RESOU1 SOURCE MB234859 26/08/26 21:15:17 12626
  2. SUBROUTINE RESOU1(KRIGI,IDAMEM,
  3. & NOID,NOEN,PREC,ISTAB,ISOUCI,INSYM,IGRADJ)
  4. C----------------------------------------------------------------------
  5. C Assemblage et inversion de la matrice de rigidite
  6. C
  7. C Methode de resolution utilisee
  8. C IGRADJ = 0 : resolution directe
  9. C IGRADJ = 1 : resolution iterative
  10. C Pour la resolution directe
  11. C INSYM = 0 si toutes les matrices sont symetriques
  12. C INSYM = 1 si au moins une matrice est non symetrique
  13. C Si la solution trouvee n'est pas suffisamment precise
  14. C ISOUCI = 0 affichera une erreur
  15. C ISOUCI = 1 affichera un souci
  16. C Si l'operateur de resolution n'est pas positif alors
  17. C ISTAB = 0 ne fera rien de plus
  18. C ISTAB = 1 augmentera le terme diagonal
  19. C Si le systeme est singulier alors
  20. C NOEN = 0 retourne un CHPOINT contenant les DDLs des modes
  21. C d'ensemble actifs et le nombre de modes actifs
  22. C NOEN = 1 ne renvoie pas d'informations supplementaires
  23. C
  24. C En sortie, l'element ICHOLE de la rigidite de pointeur KRIGI contient
  25. C le pointeur de la matrice factorisee. Les vecteurs solutions ont leur
  26. C pointeur stockes dans le tableau IDAMEM.
  27. C----------------------------------------------------------------------
  28. IMPLICIT INTEGER(I-N)
  29. IMPLICIT REAL*8 (A-H,O-Z)
  30. INTEGER OOOVAL
  31. SEGMENT IDEMEM(0)
  32. -INC SMRIGID
  33. -INC SMVECTD
  34. -INC PPARAM
  35. -INC CCOPTIO
  36. -INC SMMATRI
  37. C
  38. MRIGID=KRIGI
  39. SEGACT MRIGID
  40. LAGDUA=IMLAG
  41. ICHOLX=ICHOLE
  42. SEGDES MRIGID
  43. C
  44. IF (ICHOLX.NE.0) THEN
  45. MMATRI=ICHOLX
  46. SEGACT,MMATRI
  47. C
  48. C Resolution iterative et matrice deja factorisee
  49. IF (IGRADJ.EQ.1) GOTO 1
  50. C
  51. C Resolution directe et matrice deja factorisee
  52. IF (MFACT.EQ.0) GOTO 1
  53. C
  54. C C'est XZPREC qui est utilise, ce test semble inutile
  55. C IF (PRCHLV.lt.PREC*1.001.and.PRCHLV.gt.PREC*0.999) GOTO 1
  56. C
  57. MILIGN=IILIGN
  58. SEGACT,MILIGN
  59. CALL OOOFRC(1)
  60. DO 20 I=1,ILIGN(/1)
  61. LIGN=ILIGN(I)
  62. SEGSUP,LIGN
  63. 20 CONTINUE
  64. IF (IILIGS.NE.0) THEN
  65. MILIG1=IILIGS
  66. DO I=1,ILIGN(/1)
  67. LIGN=MILIG1.ILIGN(I)
  68. SEGSUP LIGN
  69. ENDDO
  70. ENDIF
  71. MDIAG=IDIAG
  72. SEGSUP MDIAG
  73. MDNOR=IDNORM
  74. SEGSUP MDNOR
  75. SEGSUP MMATRI
  76. CALL OOOFRC(0)
  77. ICHOLX=0
  78. ENDIF
  79. C
  80. CALL TRIANG(KRIGI,PREC,ISTAB,IGRADJ,INSYM)
  81. IF (IERR.NE.0) GOTO 5000
  82. C
  83. MRIGID=KRIGI
  84. SEGACT MRIGID
  85. ICHOLX=ICHOLE
  86. SEGDES MRIGID
  87. C
  88. C **** SUBROUTINE CHV2 : TRANSFORME LE CHPOIN ISECO EN VECTEUR
  89. C
  90. 1 CONTINUE
  91. IDEMEM=IDAMEM
  92. SEGACT IDEMEM*MOD
  93. NNTOT=IDEMEM(/1)
  94. MMATRI=ICHOLX
  95. SEGACT MMATRI
  96. MILIGN=IILIGN
  97. SEGACT,MILIGN
  98. INK=IPNO(/1)
  99. SEGDES MILIGN,MMATRI
  100. CALL INTPDO(LENB)
  101. NNPA= MAX(1,((OOOVAL(1,1)-NGMAXY)/(2*LENB))/INK+1)
  102. C
  103. C ON TRAVAILLE AVEC AUTANT DE VECTEUR SIMULTANEE QU'IL EN RENTRE DANS
  104. C LA MOITIE DE LA MEMOIRE CENTRALE
  105. C
  106. NN=NNPA
  107. DO 201 KGEN = 1,NNTOT,NNPA
  108. IF (KGEN+NNPA-1.GT.NNTOT) NN= NNTOT-KGEN+1
  109. KGEN1=KGEN-1
  110. DO 2 K=1,NN
  111. ISECO=IDEMEM(K+KGEN1)
  112. CALL CHV2(ICHOLX,ISECO,MVECTX,NOID)
  113. IF (IERR.NE.0) GO TO 5000
  114. IDEMEM(K+KGEN1)=MVECTX
  115. 2 CONTINUE
  116. IF (NN.NE.1) THEN
  117. INC = INK * NN
  118. SEGINI MVECTD
  119. DO 3 LL=1,NN
  120. LD=INK*(LL-1)
  121. MVECT1=IDEMEM(LL+KGEN1)
  122. SEGACT MVECT1
  123. DO L=1,INK
  124. VECTBB(L+LD)=MVECT1.VECTBB(L)
  125. ENDDO
  126. SEGSUP MVECT1
  127. 3 CONTINUE
  128. MVECTX=MVECTD
  129. SEGDES MVECTD
  130. ENDIF
  131. C
  132. C **** SUBROUTINE MONDES/GRACO6 :
  133. C
  134. IF (IIMPI.EQ.1) THEN
  135. WRITE(IOIMP,499)
  136. 499 FORMAT(' TEMPS SUIVANT AVANT APPEL MONDES/GRACO6')
  137. CALL GIBTEM(XKT)
  138. INTERR(1)=INT(XKT)
  139. CALL ERREUR(-259)
  140. ENDIF
  141. C
  142. IF (IGRADJ.EQ.0) THEN
  143. CALL MONDES(ICHOLX,MVECTX,NOEN,ISOUCI,LAGDUA)
  144. MVECTY=MVECTX
  145. ELSE
  146. CALL GRACO6(ICHOLX,MVECTX,NOEN,MSOL,lenb)
  147. MVECTY=MSOL
  148. ENDIF
  149. IF (IERR.NE.0) GOTO 5000
  150. C
  151. IF (IIMPI.EQ.1) THEN
  152. WRITE(IOIMP,498)
  153. 498 FORMAT(' TEMPS SUIVANT APRES APPEL MONDES/GRACO6')
  154. CALL GIBTEM(XKT)
  155. INTERR(1)=INT(XKT)
  156. CALL ERREUR(-259)
  157. ENDIF
  158. C
  159. C **** SUBROUTINE VCH1 : REMET LE VECTEUR SOUS FORME D UN CHPOINT
  160. C **** LE CHPOINT EST DE TYPE PREMIER MEMBRE
  161. C
  162. MVECTA=MVECTY
  163. DO 5 K=1,NN
  164. IF (NN.EQ.1) GO TO 10
  165. IF (K.EQ.1) THEN
  166. INC=INK
  167. MVECT1=MVECTY
  168. SEGACT MVECT1
  169. SEGINI MVECTD
  170. ENDIF
  171. SEGACT MVECTD*MOD
  172. LD=(K-1)*INK
  173. DO 6 L=1,INK
  174. VECTBB(L)=MVECT1.VECTBB(L+LD)
  175. 6 CONTINUE
  176. MVECTA=MVECTD
  177. SEGDES MVECTD
  178. IF (K.EQ.NN) SEGSUP MVECT1
  179. 10 CONTINUE
  180. CALL VCH1(ICHOLX,MVECTA,ISOLU,KRIGI)
  181. IF (IERR.NE.0) RETURN
  182. C
  183. IDEMEM(K+KGEN1)=ISOLU
  184. 5 CONTINUE
  185. MVECTD=MVECTA
  186. SEGSUP MVECTD
  187. 201 CONTINUE
  188. IDAMEM = IDEMEM
  189. **** SEGDES IDEMEM
  190. C
  191. 5000 CONTINUE
  192. RETURN
  193. END
  194.  
  195.  

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