Télécharger resou1.eso

Retour à la liste

Numérotation des lignes :

resou1
  1. C RESOU1 SOURCE MB234859 26/06/25 21:15:21 12580
  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. IF (INSYM.EQ.1) THEN
  81. CALL LDMT1(KRIGI,PREC,IGRADJ)
  82. ELSE
  83. CALL TRIANG(KRIGI,PREC,ISTAB,IGRADJ)
  84. ENDIF
  85. IF (IERR.NE.0) GOTO 5000
  86. C
  87. MRIGID=KRIGI
  88. SEGACT MRIGID
  89. ICHOLX=ICHOLE
  90. SEGDES MRIGID
  91. C
  92. C **** SUBROUTINE CHV2 : TRANSFORME LE CHPOIN ISECO EN VECTEUR
  93. C
  94. 1 CONTINUE
  95. IDEMEM=IDAMEM
  96. SEGACT IDEMEM*MOD
  97. NNTOT=IDEMEM(/1)
  98. MMATRI=ICHOLX
  99. SEGACT MMATRI
  100. MILIGN=IILIGN
  101. SEGACT,MILIGN
  102. INK=IPNO(/1)
  103. SEGDES MILIGN,MMATRI
  104. CALL INTPDO(LENB)
  105. NNPA= MAX(1,((OOOVAL(1,1)-NGMAXY)/(2*LENB))/INK+1)
  106. C
  107. C ON TRAVAILLE AVEC AUTANT DE VECTEUR SIMULTANEE QU'IL EN RENTRE DANS
  108. C LA MOITIE DE LA MEMOIRE CENTRALE
  109. C
  110. NN=NNPA
  111. DO 201 KGEN = 1,NNTOT,NNPA
  112. IF (KGEN+NNPA-1.GT.NNTOT) NN= NNTOT-KGEN+1
  113. KGEN1=KGEN-1
  114. DO 2 K=1,NN
  115. ISECO=IDEMEM(K+KGEN1)
  116. CALL CHV2(ICHOLX,ISECO,MVECTX,NOID)
  117. IF (IERR.NE.0) GO TO 5000
  118. IDEMEM(K+KGEN1)=MVECTX
  119. 2 CONTINUE
  120. IF (NN.NE.1) THEN
  121. INC = INK * NN
  122. SEGINI MVECTD
  123. DO 3 LL=1,NN
  124. LD=INK*(LL-1)
  125. MVECT1=IDEMEM(LL+KGEN1)
  126. SEGACT MVECT1
  127. DO L=1,INK
  128. VECTBB(L+LD)=MVECT1.VECTBB(L)
  129. ENDDO
  130. SEGSUP MVECT1
  131. 3 CONTINUE
  132. MVECTX=MVECTD
  133. SEGDES MVECTD
  134. ENDIF
  135. C
  136. C **** SUBROUTINE MONDES/GRACO6 :
  137. C
  138. IF (IIMPI.EQ.1) THEN
  139. WRITE(IOIMP,499)
  140. 499 FORMAT(' TEMPS SUIVANT AVANT APPEL MONDES/GRACO6')
  141. CALL GIBTEM(XKT)
  142. INTERR(1)=INT(XKT)
  143. CALL ERREUR(-259)
  144. ENDIF
  145. C
  146. IF (IGRADJ.EQ.0) THEN
  147. CALL MONDES(ICHOLX,MVECTX,NOEN,ISOUCI,LAGDUA)
  148. MVECTY=MVECTX
  149. ELSE
  150. CALL GRACO6(ICHOLX,MVECTX,NOEN,MSOL,lenb)
  151. MVECTY=MSOL
  152. ENDIF
  153. IF (IERR.NE.0) GOTO 5000
  154. C
  155. IF (IIMPI.EQ.1) THEN
  156. WRITE(IOIMP,498)
  157. 498 FORMAT(' TEMPS SUIVANT APRES APPEL MONDES/GRACO6')
  158. CALL GIBTEM(XKT)
  159. INTERR(1)=INT(XKT)
  160. CALL ERREUR(-259)
  161. ENDIF
  162. C
  163. C **** SUBROUTINE VCH1 : REMET LE VECTEUR SOUS FORME D UN CHPOINT
  164. C **** LE CHPOINT EST DE TYPE PREMIER MEMBRE
  165. C
  166. MVECTA=MVECTY
  167. DO 5 K=1,NN
  168. IF (NN.EQ.1) GO TO 10
  169. IF (K.EQ.1) THEN
  170. INC=INK
  171. MVECT1=MVECTY
  172. SEGACT MVECT1
  173. SEGINI MVECTD
  174. ENDIF
  175. SEGACT MVECTD*MOD
  176. LD=(K-1)*INK
  177. DO 6 L=1,INK
  178. VECTBB(L)=MVECT1.VECTBB(L+LD)
  179. 6 CONTINUE
  180. MVECTA=MVECTD
  181. SEGDES MVECTD
  182. IF (K.EQ.NN) SEGSUP MVECT1
  183. 10 CONTINUE
  184. CALL VCH1(ICHOLX,MVECTA,ISOLU,KRIGI)
  185. IF (IERR.NE.0) RETURN
  186. C
  187. IDEMEM(K+KGEN1)=ISOLU
  188. 5 CONTINUE
  189. MVECTD=MVECTA
  190. SEGSUP MVECTD
  191. 201 CONTINUE
  192. IDAMEM = IDEMEM
  193. **** SEGDES IDEMEM
  194. C
  195. 5000 CONTINUE
  196. RETURN
  197. END
  198.  
  199.  
  200.  

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