Télécharger kres6b.eso

Retour à la liste

Numérotation des lignes :

kres6b
  1. C KRES6B SOURCE GOUNAND 25/04/30 21:15:16 12258
  2. SUBROUTINE KRES6B(IPOIRI,IDEMEM,IDEME0,IDEME1,NELIMV,
  3. $ MRIGIC,ICOND,NPASS)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. IMPLICIT INTEGER (I-N)
  6. C***********************************************************************
  7. C NOM : KRES6B
  8. C DESCRIPTION : Effectue la condensation des relations
  9. C Repris de resou.eso
  10. C
  11. C
  12. C LANGAGE : ESOPE
  13. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  14. C mél : gounand@semt2.smts.cea.fr
  15. C***********************************************************************
  16. C VERSION : v1, 09/04/2025, version initiale
  17. C HISTORIQUE : v1, 09/04/2025, création
  18. C HISTORIQUE :
  19. C HISTORIQUE :
  20. C***********************************************************************
  21.  
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC SMRIGID
  25. -INC SMCHPOI
  26. -INC SMELEME
  27. *
  28. PARAMETER (NELMAX=30)
  29. SEGMENT IDEMEM(0)
  30. segment ideme0(idemem(/1),NELMAX)
  31. segment ideme1(idemem(/1),NELMAX)
  32. logical bdblx
  33. *
  34. NOUNIL=1
  35. NOEN=1
  36. NELIM=NELIMV
  37. IGRADJ=1
  38. MRIGIC=IPOIRI
  39. C write(ioimp,*) 'NELIM=',NELIM
  40. C
  41. C Recopie
  42. C
  43. C Verifier qu'il n'y a pas de blocage en double
  44. *** call verlag(ipoiri)
  45. if (ierr.ne.0) return
  46. * y a t il des matrices de relations non unilaterales
  47. mrigid=ipoiri
  48. C call prrigi(ipoiri,1)
  49. segact mrigid
  50. ifochs=iforig
  51. idepe=0
  52. * write(ioimp,*) 'dans resou mrigid iforig ',mrigid,iforig
  53. C
  54. nbr = irigel(/2)
  55. if (jrcond.ne.0) nelim=nelmax
  56. do 1000 irig = 1,nbr
  57. meleme=irigel(1,irig)
  58. segact meleme
  59. if ((irigel(6,irig).eq.0.or.nounil.eq.1).and.itypel.eq.22)
  60. > idepe=idepe+num(/2)
  61. if (irigel(6,irig).ne.0) iunil=1
  62. *! if (irigel(6,irig).eq.2) nelim=nelmax
  63. if (irigel(7,irig).ne.0) then
  64. insym=1
  65. ichski=0
  66. endif
  67. 1000 continue
  68. * write(ioimp,*) 'idepe=',idepe
  69. * write(ioimp,*) 'iimpi=',iimpi
  70. C
  71. C Elimination recursive des conditions aux limites
  72. * on la fait en gradient conjugue ou en appel de unilater
  73. *! if (igradj.eq.1.or.(iunil.eq.1.and.nounil.eq.0)) nelim=nelmax
  74. nfois=nelim-1
  75. bdblx=.false.
  76. imult=1
  77. icond=idepe
  78. icondi=(icond*10)/9+1
  79. if=0
  80. do ifois=1,nfois
  81. if(imult.ne.0.and.icond.ne.0.and.(icond*10)/9.lt.icondi.and.
  82. > (icondi-icond.gt.0.or.igradj.eq.1)) then
  83. icondi=icond
  84. if=if+1
  85. if(ierr.ne.0) return
  86. call resouc(mrigid,mrigic,idemem,ideme0,ideme1,
  87. > nounil,bdblx,icond,imult,if,imtvid,nelim)
  88. if (iimpi.ne.0) write(ioimp,*) ' passe ',if,' condition '
  89. $ ,icond
  90. if(ierr.ne.0) return
  91. mrigid=mrigic
  92. * call ecrobj('RIGIDITE',mrigid)
  93. * ismbrc=idemem(1)
  94. * call ecrobj('CHPOINT',ismbrc)
  95. * call prlist
  96. endif
  97. enddo
  98. C
  99. C S'il reste des conditions : dedoubler les mult de Lagrange restants
  100. C -> nouvel appel pour creer lagdua et adapter les seconds membres
  101. if (iunil.eq.0.or.nounil.eq.1) then
  102. if (icond.ne.0) then
  103. if=if+1
  104. bdblx=.true.
  105. if(ierr.ne.0) return
  106. call resouc(mrigid,mrigic,idemem,ideme0,ideme1,
  107. > nounil,bdblx,icond,imult,if,imtvid,nelim)
  108. if (iimpi.ne.0) write(ioimp,*) ' passe ','finale'
  109. $ ,' condition ',icond
  110. if(ierr.ne.0) return
  111. mrigid=mrigic
  112. * call ecrobj('RIGIDITE',mrigid)
  113. * ismbrc=idemem(1)
  114. * call ecrobj('CHPOINT',ismbrc)
  115. * call prlist
  116. endif
  117. endif
  118. if (iimpi.ne.0) then
  119. segact mrigid
  120. write (ioimp,*) 'nombre de passes, imlag',if,mrigid.imlag
  121. endif
  122. if (idepe.ne.0) noid=1
  123. C
  124. C Fin recopie
  125. C
  126. NPASS=if
  127. RETURN
  128. *
  129. * End of subroutine KRES6B
  130. *
  131. END
  132.  
  133.  

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