Télécharger cfnd.eso

Retour à la liste

Numérotation des lignes :

cfnd
  1. C CFND SOURCE PV090527 26/04/30 21:15:14 12529
  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. rigrel=0
  101. SEGINI XMATR6
  102. do 34 i = 1,nelrig
  103. DO 36 ICAZ = 3, nbnoe2
  104. XMATR6.RE(1,ICAZ,i) = XCOEFF(IDEBUT+ICAZ)
  105. XMATR6.RE(ICAZ,1,i) = XMATR6.RE(1,ICAZ,i)
  106. 36 CONTINUE
  107. XMATR6.RE(1,2,i)=-1.D0
  108. XMATR6.RE(2,1,i)=-1.D0
  109. 34 continue
  110. SEGDES,XMATR6
  111. C====================
  112. C *** SEGMENT DESCR
  113. C====================
  114. nomid=lnomid(1)
  115. NEXIST = 0
  116. DO 33 I=1, LNOMDD
  117. IF (NOMDD(I).EQ.nomid.lesobl(1)) NEXIST = I
  118. 33 CONTINUE
  119. IF (NEXIST.EQ.0) THEN
  120. CALL ERREUR(837)
  121. RETURN
  122. ENDIF
  123. c* NLIGRD=nbnoe2
  124. c* NLIGRP=NLIGRD
  125. SEGINI,DES1
  126. DES1.LISINC(1)='LX '
  127. DES1.LISDUA(1)='FLX '
  128. DES1.NOELEP(1)=1
  129. DES1.NOELED(1)=1
  130. DO 35 I=2,NLIGRD
  131. DES1.LISINC(I)=NOMDD(NEXIST)
  132. DES1.LISDUA(I)=NOMDU(NEXIST)
  133. DES1.NOELEP(i)=i
  134. DES1.NOELED(i)=i
  135. 35 CONTINUE
  136. SEGDES,DES1
  137. C====================
  138. C *** SEGMENT MRIGID
  139. C====================
  140. RI6.COERIG(ncofo)=1.D0
  141. RI6.IRIGEL(1,ncofo)=IPT2
  142. * RI6.IRIGEL(2,ncofo)=0
  143. RI6.IRIGEL(3,ncofo)=DES1
  144. RI6.IRIGEL(4,ncofo)=xMATR6
  145. * RI6.IRIGEL(5,ncofo)=0
  146. * RI6.IRIGEL(6,ncofo)=0
  147. * RI6.IRIGEL(7,ncofo)=0
  148. * RI6.IRIGEL(8,ncofo)=0
  149.  
  150. 90 continue
  151.  
  152. enddo
  153.  
  154. call depen3(ri6,ri1)
  155. * call prrigi(ri1,0)
  156. * write(ioimp,*) ' chpoint initial'
  157. * call ecchpo (mchpoi,0)
  158. call mucpri (mchpoi,ri1,mchpo2)
  159. * write(ioimp,*) ' chpoint apres mucpri'
  160. * call ecchpo (mchpo2,0)
  161. call reduir(mchpoi,ipt1,mchpo3)
  162. * write(ioimp,*) ' valeurs initiales à reajuster'
  163. * call ecchpo(mchpo3,0)
  164. call adchpo(mchpoi,mchpo3,mchpo4,1.d0,-1.d0)
  165. if (mchpo4.eq.0) return
  166. call adchpo(mchpo4,mchpo2,irat, 1.d0,1.d0)
  167. if (irat.eq.0) return
  168. * write(ioimp,*) ' sortie de cfnd'
  169. * call ecchpo(irat,0)
  170. segsup,ipt1
  171. segsup,ri6,ri1
  172.  
  173. 100 continue
  174.  
  175. call ACTOBJ('CHPOINT ',irat,1)
  176. call ECROBJ('CHPOINT ',irat)
  177.  
  178. end
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  

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