Télécharger blopha.eso

Retour à la liste

Numérotation des lignes :

blopha
  1. C BLOPHA SOURCE CB215821 26/05/29 21:15:05 12560
  2. SUBROUTINE BLOPHA
  3.  
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6.  
  7. * +------------------------------------------------------------------------+
  8. * | création des matrices de bloquage pour le modele CHANGEMENT_PHASE |
  9. * | RIGIDITE sont de type 2 avec des 'FLX' a mettre en face |
  10. * +------------------------------------------------------------------------+
  11.  
  12.  
  13. -INC PPARAM
  14. -INC CCOPTIO
  15. -INC SMELEME
  16. -INC SMMODEL
  17. -INC SMRIGID
  18. -INC SMCOORD
  19. -INC SMCHPOI
  20. -INC SMCHAML
  21.  
  22. * +------------------------------------------------------------------------+
  23. call LIROBJ('MMODEL ',mmodel,1,iretou)
  24. call ACTOBJ('MMODEL ',mmodel,1)
  25. if(ierr.ne.0) return
  26. nbsou =kmodel(/1)
  27. nrigel=0
  28. do 100 i=1,nbsou
  29. imodel=kmodel(i)
  30.  
  31. nfor=imodel.formod(/2)
  32. call place(imodel.formod,nfor,iplac,'CHANGEMENT_PHASE')
  33. if (iplac .eq. 0) goto 100
  34.  
  35. C RAPPEL : RESO suppose un seul 'LX' par rigidite et il doit etre en premier
  36. IF (imodel.matmod(1)(1:10) .EQ. 'PARFAIT ')THEN
  37. C 1 seule RIGIDITE suffit
  38. nrigel = nrigel + 1
  39. ELSEIF(imodel.matmod(1)(1:10) .EQ. 'SOLUBILITE')THEN
  40. C 2 RIGIDITES pour les besoins de RESO
  41. nrigel = nrigel + 2
  42. ELSE
  43. CALL ERREUR(5)
  44. ENDIF
  45. 100 continue
  46.  
  47. segini,mrigid
  48. mtymat='BLO_PHAS'
  49. iforig = ifour
  50.  
  51. * Boucle sur les sous zones du model pour creer les matrices de blocages
  52. nrigel = 0
  53. do 1 i=1,nbsou
  54. imodel=kmodel(i)
  55.  
  56. nfor=imodel.formod(/2)
  57. call place(imodel.formod,nfor,iplac,'CHANGEMENT_PHASE')
  58. if (iplac .eq. 0) goto 1
  59.  
  60. IF (imodel.matmod(1)(1:10) .EQ. 'PARFAIT ')THEN
  61. ICAS = 1
  62. IF(tymode(2) .NE. 'MAILLAGE')THEN
  63. CALL ERREUR(5)
  64. ENDIF
  65. ipt2 = ivamod(2)
  66.  
  67. ELSEIF(imodel.matmod(1)(1:10) .EQ. 'SOLUBILITE')THEN
  68. ICAS = 2
  69. DO ii=1,imodel.tymode(/2) - 1
  70. IF(imodel.tymode(ii+1) .NE. 'MAILLAGE')THEN
  71. CALL ERREUR(5)
  72. ENDIF
  73. ENDDO
  74. ipt2 = ivamod(2)
  75. ipt3 = ivamod(3)
  76.  
  77. ELSE
  78. CALL ERREUR(5)
  79. ENDIF
  80.  
  81. C Remplissage des objets rigidite
  82. IF (ICAS .EQ. 1)THEN
  83. nrigel = nrigel + 1
  84. nelrig = ipt2.num(/2)
  85. nligrp = 2
  86. nligrd = 2
  87. rigrel = 0
  88. segini,descr,xmatri
  89.  
  90. coerig(nrigel) = 1.D0
  91. irigel(1,nrigel)= ipt2
  92. irigel(3,nrigel)= descr
  93. irigel(4,nrigel)= xmatri
  94. irigel(5,nrigel)= nifour
  95. irigel(6,nrigel)= 2
  96. isym = 0
  97. irigel(7,nrigel)= isym
  98. xmatri.SYMRE = isym
  99.  
  100. NOMID=lnomid(1)
  101. lisinc(1)='LX'
  102. lisinc(2)= nomid.lesobl(1)
  103.  
  104. NOMID=lnomid(2)
  105. lisdua(1)='FLX'
  106. lisdua(2)= nomid.lesobl(1)
  107.  
  108. noelep(1)=1
  109. noelep(2)=2
  110. noeled(1)=1
  111. noeled(2)=2
  112.  
  113. do iou=1,nelrig
  114. re(1,1,iou)= 0.D0
  115. re(2,1,iou)= 1.D0
  116.  
  117. re(1,2,iou)= 1.D0
  118. re(2,2,iou)= 0.D0
  119. enddo
  120. segdes,descr,xmatri
  121.  
  122. ELSEIF(ICAS .EQ. 2)THEN
  123. C RIGIDITE n° 1
  124. C -------------
  125. nrigel = nrigel + 1
  126. nelrig = ipt2.num(/2)
  127. nligrp = 3
  128. nligrd = 3
  129. rigrel = 0
  130. segini,descr,xmatri
  131. coerig(nrigel) = 1.D0
  132. irigel(1,nrigel)= ipt2
  133. irigel(3,nrigel)= descr
  134. irigel(4,nrigel)= xmatri
  135. irigel(5,nrigel)= nifour
  136. irigel(6,nrigel)= 1
  137. isym = 2
  138. irigel(7,nrigel)= isym
  139. xmatri.SYMRE = isym
  140.  
  141. NOMID = lnomid(1)
  142. lisinc(1)='LX'
  143. lisinc(2)= nomid.lesobl(1)
  144. lisinc(3)= nomid.lesobl(2)
  145.  
  146. NOMID = lnomid(2)
  147. lisdua(1)='FLX'
  148. lisdua(2)= nomid.lesobl(1)
  149. lisdua(3)= nomid.lesobl(2)
  150.  
  151. DO iel=1,nligrp
  152. noelep(iel)=iel
  153. noeled(iel)=iel
  154. ENDDO
  155.  
  156. do iou=1,nelrig
  157. re(1,1,iou)= 0.D0
  158. re(2,1,iou)= 1.D0
  159. re(3,1,iou)=-1.D0
  160.  
  161. re(1,2,iou)= 1.D0
  162. re(2,2,iou)= 0.D0
  163. re(3,2,iou)= 0.D0
  164.  
  165. re(1,3,iou)= 0.D0
  166. re(2,3,iou)= 0.D0
  167. re(3,3,iou)= 0.D0
  168. enddo
  169. segdes,descr,xmatri
  170.  
  171. C RIGIDITE n° 2
  172. C -------------
  173. nrigel = nrigel + 1
  174. nelrig2 = ipt3.num(/2)
  175. IF(nelrig2 .NE. nelrig)THEN
  176. CALL ERREUR(5)
  177. ENDIF
  178. nelrig = nelrig2
  179. nligrp = 3
  180. nligrd = 3
  181. rigrel = 0
  182. segini,descr,xmatri
  183.  
  184. coerig(nrigel) = 1.D0
  185. irigel(1,nrigel)= ipt3
  186. irigel(3,nrigel)= descr
  187. irigel(4,nrigel)= xmatri
  188. irigel(5,nrigel)= nifour
  189. irigel(6,nrigel)=-1
  190. isym = 2
  191. irigel(7,nrigel)= isym
  192. xmatri.SYMRE = isym
  193.  
  194. NOMID = lnomid(1)
  195. lisinc(1)='LX'
  196. lisinc(2)= nomid.lesobl(1)
  197. lisinc(3)= nomid.lesobl(2)
  198.  
  199. NOMID = lnomid(2)
  200. lisdua(1)='FLX'
  201. lisdua(2)= nomid.lesobl(1)
  202. lisdua(3)= nomid.lesobl(2)
  203.  
  204. DO iel=1,nligrp
  205. noelep(iel)=iel
  206. noeled(iel)=iel
  207. ENDDO
  208.  
  209. do iou=1,nelrig
  210. re(1,1,iou)= 0.D0
  211. re(2,1,iou)=-1.D0
  212. re(3,1,iou)= 1.D0
  213.  
  214. re(1,2,iou)= 0.D0
  215. re(2,2,iou)= 0.D0
  216. re(3,2,iou)= 0.D0
  217.  
  218. re(1,3,iou)= 1.D0
  219. re(2,3,iou)= 0.D0
  220. re(3,3,iou)= 0.D0
  221. enddo
  222. segdes,descr,xmatri
  223.  
  224. ELSE
  225. CALL ERREUR(5)
  226. ENDIF
  227. 1 continue
  228. segdes,mrigid
  229.  
  230. call ECROBJ('RIGIDITE',mrigid)
  231.  
  232. end
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  

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