Télécharger chvns.eso

Retour à la liste

Numérotation des lignes :

chvns
  1. C CHVNS SOURCE CB215821 20/11/25 13:19:43 10792
  2. SUBROUTINE CHVNS(MMATRX,ISECO,MVECTX,NOID)
  3. C
  4. C **** SUBROUTINE QUI A PARTIR D UN OBJET DE TYPE MATRICE ET D UN
  5. C **** CHPOINT FABRIQUE UN VECTEUR SECOND MEMBRE
  6. C **** LE CHPOIN EST DE TYPE SECOND MEMBRE
  7. C
  8. IMPLICIT INTEGER(I-N)
  9. -INC SMMATRI
  10. -INC SMCHPOI
  11. -INC SMELEME
  12.  
  13. -INC PPARAM
  14. -INC CCOPTIO
  15. -INC SMVECTD
  16. -INC SMCOORD
  17. SEGMENT,ICPR(nbpts)
  18. SEGMENT,ICOR(NC1)
  19. C
  20. IF(IIMPI.EQ.3) WRITE(IOIMP,1000) MMATRX,ISECO
  21. 1000 FORMAT(' SUBROUTINE CHV2 : POINTEUR DE LA MATRICE=',I5,
  22. 1 ' POINTEUR DE L''OBJET CHPOINT=',I5)
  23. C
  24. C **** ACTIVATION DES SEGMENTS
  25. C
  26. C ... ceux dépendant de MMATRI ...
  27.  
  28. MMATRI=MMATRX
  29. SEGACT,MMATRI
  30.  
  31. MILIGN=IILIGN
  32. SEGACT,MILIGN
  33. INC=IPNO(/1)
  34. SEGDES,MILIGN
  35. C ... La taille de MVECTD est INC ...
  36. SEGINI,MVECTD
  37.  
  38. MIDUA=IIDUA
  39. SEGACT,MIDUA
  40. IDU=IDUA(/2)
  41.  
  42. MHARK=IHARDU
  43. SEGACT,MHARK
  44.  
  45. MINCPO=IDUAPO
  46. SEGACT,MINCPO
  47.  
  48. MELEME=IGEOMA
  49. SEGACT,MELEME
  50. N2=NUM(/2)
  51.  
  52. C ... ceux dépendant de MCHPOI ...
  53.  
  54. MCHPOI=ISECO
  55. SEGACT MCHPOI
  56. NSOUPO=IPCHP(/1)
  57. C
  58. C **** DANS ICPR ON COMPTE LES POINTS DE MELEME
  59. C
  60. SEGINI ICPR
  61. DO 25 I=1,N2
  62. ICPR(NUM(1,I))=I
  63. 25 CONTINUE
  64. C
  65. C
  66. C **** FABRICATION D'UN VECTEUR SECOND MEMBRE DANS MVECTD
  67. C **** ON VERIFIE QUE TOUTES LES COMPOSANTES DU VECTEUR EXISTENT DANS
  68. C **** LA MATRICE SI NOID=0 .
  69. C
  70. DO 1 I=1,NSOUPO
  71. MSOUPO=IPCHP(I)
  72. SEGACT,MSOUPO
  73. IPT1=IGEOC
  74. SEGACT,IPT1
  75. NC=NOCOMP(/2)
  76. C ... NC1 = taille de ICOR ...
  77. NC1=NC
  78. SEGINI,ICOR
  79. DO KKIL = 1,NC1
  80. ICOR(KKIL)=0
  81. ENDDO
  82.  
  83. DO 11 KI=1,NC
  84. DO 10 J=1,IDU
  85. IF(NOCOMP(KI).NE.IDUA(J)) GO TO 10
  86. IF(NOHARM(KI).NE.IHAR(J)) GO TO 10
  87. C ... dans ICOR on met la correspondance entre les composantes du champ
  88. C et les variables duales de la matrice, s'il y a un zero, alors !!! ...
  89. ICOR(KI)=J
  90. GO TO 11
  91. 10 CONTINUE
  92. 11 CONTINUE
  93.  
  94. MPOVAL=IPOVAL
  95. SEGACT,MPOVAL
  96. C ... N = nombre de valeurs de chaque composante (=> noeuds) ...
  97. N=VPOCHA(/1)
  98. DO 20 J=1,N
  99. C ... K = n° d'ordre du noeud examiné dans la rigidité, 0 => !!! ...
  100. K=ICPR(IPT1.NUM(1,J))
  101. IF(K.NE.0) GO TO 4
  102. IF(NOID.EQ.1) GO TO 20
  103. C
  104. C **** LE NUMERO DU NOEUD DU VECTEUR N'EXISTAIT PAS DANS LA MATRICE
  105. C
  106. ITYP=53
  107. INTERR(1) = IPT1.NUM(1,J)
  108. CALL ERREUR (ITYP)
  109. RETURN
  110.  
  111. 4 CONTINUE
  112. ccc 40 CONTINUE
  113. DO 2 LI=1,NC
  114. C ... KKIL = n° local dans la matrice de la composante LI ...
  115. KKIL=ICOR(LI)
  116. IF (KKIL.EQ.0) GOTO 55
  117.  
  118. C ... KI = n° global du DDL dual ...
  119. KI=INCPO(KKIL,K)
  120. IF(KI.NE.0) GO TO 6
  121.  
  122. 55 CONTINUE
  123. IF(NOID.EQ.1) GO TO 2
  124. C
  125. C **** LE TYPE D'INCONNUE N'EXISTAIT PAS DANS LA MATRICE
  126. C
  127. ITYP =54
  128. MOTERR = NOCOMP(LI)
  129. INTERR(1) = NOHARM (LI)
  130. INTERR(2) = IPT1.NUM(1,J)
  131. CALL ERREUR(ITYP)
  132. RETURN
  133.  
  134. 6 CONTINUE
  135. VECTBB(KI)=VPOCHA(J,LI)
  136. 2 CONTINUE
  137. 20 CONTINUE
  138. SEGSUP,ICOR
  139.  
  140. 1 CONTINUE
  141.  
  142. SEGSUP ICPR
  143. SEGDES MMATRI
  144. SEGDES,MIDUA
  145. SEGDES,MHARK
  146. SEGDES,MINCPO
  147. MVECTX=MVECTD
  148. C
  149. IF(IIMPI.EQ.3) WRITE(IOIMP,1002)MVECTD
  150. 1002 FORMAT(' SUBROUTINE CHV2 : POINTEUR DU VECTEUR =',I5)
  151. SEGDES MVECTD
  152. RETURN
  153. END
  154.  
  155.  
  156.  

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