Télécharger virec1.eso

Retour à la liste

Numérotation des lignes :

virec1
  1. C VIREC1 SOURCE PB245956 20/12/21 21:15:20 10747
  2. C RESOUR SOURCE CB215821 19/07/30 21:17:58 10273
  3. SUBROUTINE VIREC1(LVIBC,ideme0,ideme1,IPRIGI,IPMASS,IPAMOR,
  4. & ICMODR,ICMODI,WR,WI,NELIM)
  5.  
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8.  
  9. * RECONSTRUCTION D'UN MODE (REEL OU COMPLEXE)
  10. * APRES OPERATIONS SUR MATRICES CONDENSEES
  11. * code en grande partie extrait de resour.eso
  12.  
  13. -INC SMRIGID
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC SMCHPOI
  18. -INC SMELEME
  19.  
  20. SEGMENT IDEME0(1,2)
  21. SEGMENT IDEME1(1,2)
  22.  
  23. SEGMENT ICMODE(NVIBR)
  24. SEGMENT ICMOD1(NVIBR)
  25. SEGMENT ICHRHS(NVIBR)
  26.  
  27. LOGICAL LVIBC
  28.  
  29. NMXELM=2
  30. IPT8=0
  31. ISOUCI=0
  32. IVERIF=0
  33. NOEN=1
  34.  
  35. NVIBR=1
  36. ICORR=0
  37.  
  38.  
  39. SEGACT IDEME0,IDEME1
  40.  
  41. SEGINI ICMODE,ICMOD1,ICHRHS
  42. SEGACT ICMODE*MOD,ICMOD1*MOD,ICHRHS*MOD
  43.  
  44. ICMODE(1)=ICMODR
  45. IF (LVIBC) THEN
  46. NVIBR=2
  47. SEGADJ ICMODE,ICMOD1,ICHRHS
  48. ICMODE(2)=ICMODI
  49. ENDIF
  50.  
  51. C-------------------------------------------------------
  52. *C LA SOLUTION EST CALCULEE --> ON LA MET EN FORME
  53.  
  54.  
  55. MRIGID=IPRIGI
  56. IELIM=NELIM
  57.  
  58. DO IFOIS=1,NMXELM
  59.  
  60. SEGACT MRIGID
  61. MRIGID=JRSUP
  62. IF(MRIGID.EQ.0) GOTO 999
  63.  
  64. segact mrigid
  65. ri6 = jrdepp
  66. ri2 = jrgard
  67. ri1 = jrelim
  68.  
  69. DO IR=1,NVIBR
  70.  
  71. MCHPOI=ICMODE(IR)
  72. C-----------------------
  73. * reintroduction des inconnues supprimees
  74. call mucpri(mchpoi,ri6,ichp3)
  75. call adchpo(mchpoi,ichp3,ichp2,1D0,1D0)
  76. mchpo1=ideme1(1,IELIM)
  77. call adchpo(ichp2,mchpo1,iret,1D0,1D0)
  78. call dtchpo(ichp3)
  79. call dtchpo(ichp2)
  80. mchpo1=iret
  81. segact mchpo1*mod
  82. mchpo1.jattri(1)=1
  83. SEGDES MCHPO1
  84. ICMODE(IR)=MCHPO1
  85. C ------------- deplacements complets: sur k uniquement
  86. call mucpri(mchpo1,ri2,ichp5)
  87. mchpo2=ichp5
  88. mchpo4=ichp5
  89. segact mchpo4*mod
  90. mchpo4.jattri(1)=1
  91. SEGDES MCHPO4
  92. ICMOD1(IR)=MCHPO4
  93.  
  94. ENDDO
  95. C ------------- deplacements complets
  96. * outre K*phi, le reste est mis dans le second membre
  97. * au final on aura dans le rhs ICHRHS + izero
  98.  
  99. C* Cas reel: on a M*(w**2)*phi dans le second membre
  100. IF (.NOT. LVIBC) THEN
  101.  
  102. IMR=ICMODE(1)
  103. CALL MUCHPO(IMR,WR**2,ICMR,1)
  104. CALL MUCPRI(ICMR,IPMASS,ICMMR)
  105. CALL DTCHPO(ICMR)
  106. ICHRHS(1)=ICMMR
  107.  
  108. * Cas complexe : attention a l algebre !!!
  109. * Partie reelle : C*[wI*phiR-wR*phiI] - M*[(wR**2-wI**2)*phiR+2*wR*wI*phiI]
  110. * Partie imaginaire : C*[wI*phiI-wR*phiR] + M*[(wR**2-wI**2)*phiI+2*wR*wI*phiR]
  111.  
  112. ELSE
  113.  
  114. IMR=ICMODE(1)
  115. IMI=ICMODE(2)
  116.  
  117. CALL ADCHPO(IMR,IMI,ICMR,WR**2-WI**2, 2*WR*WI)
  118. CALL ADCHPO(IMR,IMI,ICMI, 2*WR*WI,WR**2-WI**2)
  119.  
  120. CALL ADCHPO(IMR,IMI,ICAR, WI,-WR)
  121. CALL ADCHPO(IMR,IMI,ICAI,-WR, WI)
  122.  
  123. CALL MUCPRI(ICMR,IPMASS,ICMMR)
  124. CALL MUCPRI(ICMI,IPMASS,ICMMI)
  125. CALL MUCPRI(ICAR,IPAMOR,ICAAR)
  126. CALL MUCPRI(ICAI,IPAMOR,ICAAI)
  127.  
  128. CALL DTCHPO(ICMR)
  129. CALL DTCHPO(ICMI)
  130. CALL DTCHPO(ICAR)
  131. CALL DTCHPO(ICAI)
  132.  
  133. CALL ADCHPO(ICMMR,ICAAR,ICRHSR,-1D0, 1D0)
  134. CALL ADCHPO(ICMMI,ICAAI,ICRHSI, 1D0, 1D0)
  135.  
  136. CALL DTCHPO(ICMMR)
  137. CALL DTCHPO(ICMMI)
  138. CALL DTCHPO(ICAAR)
  139. CALL DTCHPO(ICAAI)
  140.  
  141. ICHRHS(1)=ICRHSR
  142. ICHRHS(2)=ICRHSI
  143.  
  144. ENDIF
  145.  
  146. IZERO=IDEME0(1,IELIM)
  147.  
  148. DO IR=1,NVIBR
  149.  
  150. C ------- WRite(6,*) ' --------- KU - F '
  151. ichp5=ICMOD1(IR)
  152. ichp6=ICHRHS(IR)
  153. call adchpo(IZERO,ichp6,IRHS,1D0,1D0)
  154. call adchpo(ichp5,IRHS,iret,1D0,-1D0)
  155. CALL DTCHPO(ichp5)
  156. CALL DTCHPO(ichp6)
  157. CALL DTCHPO(IRHS)
  158.  
  159. call remplx(ri1,iret,ichp7)
  160. ** verif on a bien l'equilibre
  161. * if (IELIM.eq.1.and.iverif.eq.1) then
  162. * call mucpri(ichp7,ri1,ichp3)
  163. * call adchpo(iret,ichp3,ichp4,1D0,1D0)
  164. * call dtchpo(iret)
  165. * iptt=0
  166. * if(noen.eq.1) iptt=ipt8
  167. * call vechpo(ichp5,ichp6,ichp4,ipt8,isouci)
  168. * call dtchpo(ichp3)
  169. * call dtchpo(ichp4)
  170. * endif
  171. * call dtchpo(ichp5)
  172. * call dtchpo(ichp6)
  173. if (ierr.ne.0) return
  174. ichp8=ICMODE(IR)
  175. call fuchpo(ichp7,ichp8,iret)
  176. CALL DTCHPO(ichp8)
  177. mchpoi=iret
  178. * supression des multiplicateurs dedoubles
  179. lagdua=imlag
  180. if (lagdua.gt.0) then
  181. * WRite(6,*) ' appel a dbbcf lagdua ',lagdua
  182. call dbbcf(mchpoi,lagdua)
  183. ipt1=lagdua
  184. endif
  185. * WRite (6,*) ' mchpoi en fi de resour'
  186. * segact mchpoi
  187. * call ecchpo(mchpoi,0)
  188. * les champs de points qui sortent sont de nature diffuse
  189. SEGACT MCHPOI
  190. NAT = MAX(1,JATTRI(/1))
  191. NSOUPO=IPCHP(/1)
  192. SEGADJ MCHPOI
  193. JATTRI(1)=1
  194. IRET = MCHPOI
  195. * idemem(i)=iret
  196.  
  197. ICMODE(IR)=IRET
  198.  
  199. END DO
  200.  
  201. IELIM=IELIM-1
  202.  
  203. ENDDO
  204.  
  205. 999 CONTINUE
  206.  
  207. ICMODR=ICMODE(1)
  208. IF (NVIBR.EQ.2) THEN
  209. ICMODI=ICMODE(2)
  210. ENDIF
  211.  
  212. END
  213.  
  214.  
  215.  
  216.  

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