Télécharger cfnd.eso

Retour à la liste

Numérotation des lignes :

cfnd
  1. C CFND SOURCE CB215821 25/04/23 21:15:03 12247
  2. subroutine cfnd
  3.  
  4. implicit real*8(a-h,o-z)
  5. implicit integer (i-n)
  6. * rendre un chpoint compatible avec des relations de conformités
  7.  
  8.  
  9. -INC PPARAM
  10. -INC CCOPTIO
  11. -INC CCGEOME
  12. -INC CCHAMP
  13.  
  14. -INC SMMODEL
  15. -INC SMELEME
  16. -INC SMCHPOI
  17. -INC SMRIGID
  18. -INC SMCOORD
  19.  
  20. logical ltelq
  21. * Petit tableau des "couleurs" des relations de conformite
  22. DIMENSION LCOLOR(6)
  23. DATA LCOLOR / 1, 3, 6, 10, 16, 24 /
  24.  
  25. call LIROBJ('MMODEL ',mmodel,1,iretou)
  26. call ACTOBJ('MMODEL ',mmodel,1)
  27. if(ierr.ne.0) return
  28. call LIROBJ('CHPOINT ',mchpoi,1,iretou)
  29. call ACTOBJ('CHPOINT ',mchpoi,1)
  30. if(ierr.ne.0) return
  31.  
  32. nmsous = kmodel(/1)
  33. ncofo = 0
  34. do ia = 1, nmsous
  35. imodel=kmodel(ia)
  36. if (nefmod.eq.22) ncofo = ncofo+1
  37. if (nefmod.eq.259) ncofo = ncofo+1
  38. enddo
  39. if (ncofo.eq.0) then
  40. segini,mchpo1=mchpoi
  41. irat = mchpo1
  42. goto 100
  43. endif
  44. *
  45. * il existe des relations de conformités
  46. *
  47. * verif le chpoint n'a qu'une seule zone
  48. if (ipchp(/1).ne.1) then
  49. call erreur (21)
  50. return
  51. endif
  52. *
  53. * on fabrique les matrices de liaisons et un maillage contenant
  54. * les noeuds dépendants
  55. nrigel = ncofo
  56. segini,RI6
  57. RI6.ICHOLE=0
  58. RI6.IMGEO1=0
  59. RI6.IMGEO2=0
  60. c* RI6.IFORIG=0
  61. c* RI6.IFORIG=IFOUR
  62. RI6.IFORIG=mchpoi.ifopoi
  63. RI6.ISUPEQ=0
  64.  
  65. nbnn = 1
  66. nbsous = 0
  67. nbref = 0
  68. ltelq=.false.
  69.  
  70. ncofo = 0
  71. do ia = 1, nmsous
  72. imodel=kmodel(ia)
  73. if ((nefmod.ne.22).AND.(nefmod.NE.259)) goto 90
  74. ncofo = ncofo+1
  75.  
  76. ipt2=imamod
  77. nbnoe2 = ipt2.num(/1)
  78. nbele2 = ipt2.num(/2)
  79.  
  80. nbelem = nbele2
  81. segini,meleme
  82. do ib = 1, nbelem
  83. num(1,ib) = ipt2.num(2,ib)
  84. enddo
  85. IDEBUT = LCOLOR(ipt2.icolor(1)) - 3
  86.  
  87. if (ncofo.eq.1) then
  88. ipt1=meleme
  89. else
  90. call fuse (ipt1,meleme,ipt3,ltelq)
  91. ipt1=ipt3
  92. endif
  93.  
  94. C====================
  95. C *** SEGMENT XMATRI
  96. C====================
  97. NLIGRD = nbnoe2
  98. NLIGRP = nbnoe2
  99. nelrig = nbele2
  100. SEGINI XMATR6
  101. do 34 i = 1,nelrig
  102. DO 36 ICAZ = 3, nbnoe2
  103. XMATR6.RE(1,ICAZ,i) = XCOEFF(IDEBUT+ICAZ)
  104. XMATR6.RE(ICAZ,1,i) = XMATR6.RE(1,ICAZ,i)
  105. 36 CONTINUE
  106. XMATR6.RE(1,2,i)=-1.D0
  107. XMATR6.RE(2,1,i)=-1.D0
  108. 34 continue
  109. SEGDES,XMATR6
  110. C====================
  111. C *** SEGMENT DESCR
  112. C====================
  113. nomid=lnomid(1)
  114. NEXIST = 0
  115. DO 33 I=1, LNOMDD
  116. IF (NOMDD(I).EQ.nomid.lesobl(1)) NEXIST = I
  117. 33 CONTINUE
  118. IF (NEXIST.EQ.0) THEN
  119. CALL ERREUR(837)
  120. RETURN
  121. ENDIF
  122. c* NLIGRD=nbnoe2
  123. c* NLIGRP=NLIGRD
  124. SEGINI,DES1
  125. DES1.LISINC(1)='LX '
  126. DES1.LISDUA(1)='FLX '
  127. DES1.NOELEP(1)=1
  128. DES1.NOELED(1)=1
  129. DO 35 I=2,NLIGRD
  130. DES1.LISINC(I)=NOMDD(NEXIST)
  131. DES1.LISDUA(I)=NOMDU(NEXIST)
  132. DES1.NOELEP(i)=i
  133. DES1.NOELED(i)=i
  134. 35 CONTINUE
  135. SEGDES,DES1
  136. C====================
  137. C *** SEGMENT MRIGID
  138. C====================
  139. RI6.COERIG(ncofo)=1.D0
  140. RI6.IRIGEL(1,ncofo)=IPT2
  141. * RI6.IRIGEL(2,ncofo)=0
  142. RI6.IRIGEL(3,ncofo)=DES1
  143. RI6.IRIGEL(4,ncofo)=xMATR6
  144. * RI6.IRIGEL(5,ncofo)=0
  145. * RI6.IRIGEL(6,ncofo)=0
  146. * RI6.IRIGEL(7,ncofo)=0
  147. * RI6.IRIGEL(8,ncofo)=0
  148.  
  149. 90 continue
  150.  
  151. enddo
  152.  
  153. call depen3(ri6,ri1)
  154. * call prrigi(ri1,0)
  155. * write(ioimp,*) ' chpoint initial'
  156. * call ecchpo (mchpoi,0)
  157. call mucpri (mchpoi,ri1,mchpo2)
  158. * write(ioimp,*) ' chpoint apres mucpri'
  159. * call ecchpo (mchpo2,0)
  160. call reduir(mchpoi,ipt1,mchpo3)
  161. * write(ioimp,*) ' valeurs initiales à reajuster'
  162. * call ecchpo(mchpo3,0)
  163. call adchpo(mchpoi,mchpo3,mchpo4,1.d0,-1.d0)
  164. if (mchpo4.eq.0) return
  165. call adchpo(mchpo4,mchpo2,irat, 1.d0,1.d0)
  166. if (irat.eq.0) return
  167. * write(ioimp,*) ' sortie de cfnd'
  168. * call ecchpo(irat,0)
  169. segsup,ipt1
  170. segsup,ri6,ri1
  171.  
  172. 100 continue
  173.  
  174. call ACTOBJ('CHPOINT ',irat,1)
  175. call ECROBJ('CHPOINT ',irat)
  176.  
  177. end
  178.  
  179.  
  180.  
  181.  
  182.  

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