Télécharger ksprus.eso

Retour à la liste

Numérotation des lignes :

ksprus
  1. C KSPRUS SOURCE CB215821 20/11/25 13:33:12 10792
  2. SUBROUTINE KSPRUS
  3. &(MELEME,IPM1,IPM2,IPM3,IAXI,IKAS,INEFMD,KPRE,IZTGG1,IK1,K0,
  4. & ANUKK,IDCEN,IKOMP,NPTU,IPADU,IZTU1,TETAN,NP,NEL,CMD)
  5.  
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8. C*****************************************************************************
  9. C
  10. C Ce SP calcule les matrices elementaires de divergence alias C
  11. C
  12. C IKAS=1 KMCT calcul de Ct (Div U)
  13. C IKAS=2 KMAC calcul de C uniquement (Grad p)
  14. C IKAS=3 KCCT calcul de C assemblage pour C et Ct
  15. C
  16. C*****************************************************************************
  17. CHARACTER*8 NOM0
  18.  
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC CCGEOME
  23. -INC SMCOORD
  24. -INC SIZFFB
  25. POINTEUR IZF1.IZFFM
  26. -INC SMLENTI
  27. POINTEUR IPADU.MLENTI
  28. -INC SMELEME
  29. -INC SMCHPOI
  30. POINTEUR IZTGG1.MPOVAL,IZTU1.MPOVAL,TETAN.MPOVAL
  31. -INC CCREEL
  32. PARAMETER (LRV=64)
  33. SEGMENT PETROV
  34. REAL*8 WT(LRV,NP,NPG,IDIM),WS(LRV,NP,NPG,IDIM),HK(LRV,IDIM,NP,NPG)
  35. REAL*8 UIL(LRV,IDIM,NPG),DUIL(LRV,IDIM,NPG)
  36. REAL*8 PGSK(LRV,NPG),RPGK(LRV,NPG),AIRE(LRV),ANUK(LRV),COEFK(LRV)
  37. REAL*8 AJK(LRV,IDIM,IDIM,NPG)
  38. ENDSEGMENT
  39. DIMENSION KIPM(3),XYZ1(24)
  40. C
  41. C OPERATEUR PRESSION
  42. C
  43. DEUPI=1.D0
  44. IF(IAXI.NE.0)DEUPI=2.D0*XPI
  45. IF(IKAS.EQ.3)DEUPI=-DEUPI
  46.  
  47. NBEL = NEL
  48. C write(6,*)' DEUPI=',deupi
  49. IF(IDIM.EQ.2)IPM3=IPM1
  50. KIPM(1)=IPM1
  51. KIPM(2)=IPM2
  52. KIPM(3)=IPM3
  53. SEGACT MELEME
  54. SEGACT IPM1*MOD,IPM2*MOD,IPM3*MOD
  55. SEGACT IPADU,IZTU1,TETAN,IZTGG1
  56.  
  57. IF(KPRE.NE.2)THEN
  58. C
  59. C ON TRAITE LE CAS DIV U -> T sommet
  60. C
  61. IF(INEFMD.EQ.3)THEN
  62. IF(KPRE.EQ.3)NOM0=NOMS(ITYPEL)//'PRP0'
  63. IF(KPRE.EQ.4)NOM0=NOMS(ITYPEL)//'PRP1'
  64. IF(KPRE.EQ.5)NOM0=NOMS(ITYPEL)//'PFP1'
  65. ELSEIF(INEFMD.EQ.2)THEN
  66. IF(KPRE.EQ.3)NOM0=NOMS(ITYPEL)//'MCP0'
  67. IF(KPRE.EQ.4)NOM0=NOMS(ITYPEL)//'MCP1'
  68. IF(KPRE.EQ.5)NOM0=NOMS(ITYPEL)//'MCF1'
  69. ELSEIF(INEFMD.EQ.4)THEN
  70. NOM0=NOMS(ITYPEL)//' '
  71. ENDIF
  72. c write(*,*)' Kpruss : NOM0=',nom0,' ikas=',ikas,' nel=',nel
  73. c write(*,*)' IK1',IK1,' COEF',IZTGG1.VPOCHA(1,1),'ANUK',ANUKK
  74. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  75.  
  76. SEGACT IZFFM*MOD
  77. IZHR=KZHR(1)
  78. SEGACT IZHR*MOD
  79. NES=GR(/1)
  80. NPG=GR(/3)
  81. IZF1=KTP(1)
  82. SEGACT IZF1*MOD
  83. * ON modifie pour avoir les bonnes fonctions de forme. GBM 18/10/99
  84. MP1=FN(/1)
  85. *
  86. * On fait des packets
  87. *
  88. NNN=MOD(NBEL,LRV)
  89. IF(NNN.EQ.0) THEN
  90. NPACK=NBEL/LRV
  91. ELSE
  92. NPACK=1+(NBEL-NNN)/LRV
  93. ENDIF
  94. KPACKD=1
  95. KPACKF=NPACK
  96. *
  97. * boucle sur les packets, on active la structure petrov
  98. *
  99. SEGINI PETROV
  100. DO 7001 KPACK=KPACKD,KPACKF
  101. C
  102. C ======= A L'INTERIEUR DE CHAQUE PAQUET DE LRV ELEMENTS =======
  103. C
  104. C 1. Calcul des limites du paquet courant.
  105. KDEB=1+(KPACK-1)*LRV
  106. KFIN=MIN(NBEL,KDEB+LRV-1)
  107. C
  108. DO 7002 K=KDEB,KFIN
  109. KP=K-KDEB+1
  110. NK = K + K0
  111. NKR=(1-IK1)*(NK-1)+1
  112. COEFK(KP)=IZTGG1.VPOCHA(NKR,1) + 1.D-30
  113. * WRITE(*,*) IZTGG1.VPOCHA(NKR,1), COEFK(KP)
  114. ANUK(KP)=ANUKK/COEFK(KP)
  115. 7002 CONTINUE
  116. C
  117. C Une seule composante de projection car div se projete
  118. C sur un scalaire.
  119. C
  120. c write (*,*) 'IPADU', IPADU.LECT(/1)
  121.  
  122. C CB215821 : DT n'est pas utilise mais doit etre initialise sinon NAN
  123. DT=0.D0
  124.  
  125. CALL SUPGEF(FN,GR,PG,XYZ,HR,PGSQ,RPG,AJ,
  126. & NES,NP,NPG,IAXI,XCOOR,
  127. & MELEME.NUM,KDEB,KFIN,LRV,IDCEN,CMD,IKOMP,
  128. & TETAN.VPOCHA,IPADU.LECT,IZTU1.VPOCHA,IPADU.LECT,NPTU,ANUK,
  129. & WT(1,1,1,1),WS(1,1,1,1),HK,PGSK,RPGK,AJK,AIRE,UIL,DUIL,
  130. & DTM1,DT,DTT1,DTT2,DIAEL,NUEL)
  131.  
  132. DO 30 KE=KDEB,KFIN
  133. NK=KE-KDEB+1
  134.  
  135. * DO 12 I=1,NP
  136. * J=NUM(I,KE)
  137. * DO 12 N=1,IDIM
  138. * XYZ(N,I)=XCOOR((J-1)*(IDIM+1) +N)
  139. * 12 CONTINUE
  140.  
  141. * CALL CALJBR
  142. * &(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
  143. C write(6,*)' Retour caljbr ',mp1,np,npg
  144.  
  145.  
  146.  
  147. DO 324 K=1,IDIM
  148. IPM4=KIPM(K)
  149. DO M=1,MP1
  150. DO I=1,NP
  151. U=0.D0
  152. DO 333 L=1,NPG
  153. * ON modifie la formule GBM 18/10/99
  154. U=U+WT(NK,M,L,1)*HK(NK,K,I,L)*PGSK(NK,L)*DEUPI*RPGK(NK,L)
  155. * U=U+FN(M,L)*HR(K,I,L)*PGSQ(L)*DEUPI*RPG(L)
  156. 333 CONTINUE
  157.  
  158. IF(IAXI.NE.0.AND.K.EQ.1)THEN
  159. DO 334 L=1,NPG
  160. * modifié par GBM 18/10/99
  161. U=U+WT(NK,M,L,1)*FN(I,L)*PGSK(NK,L)*DEUPI
  162. * U=U+FN(M,L)*FN(I,L)*PGSQ(L)*DEUPI
  163. 334 CONTINUE
  164. ENDIF
  165. C
  166. C K1=1+(1-IK1)*(NK-1)
  167. C attention valable que pour coef au centre
  168. U=U*COEFK(NK)
  169. * WRITE(*,*) NK,M,I,COEFK(NK)
  170. C
  171. if(ikas.ne.2)then
  172. IPM4.AM(KE,I,M)=IPM4.AM(KE,I,M)+U
  173. else
  174. IPM4.AM(KE,M,I)=IPM4.AM(KE,M,I)+U
  175. endif
  176.  
  177. * write(*,*) KE,PGSQ
  178. ENDDO
  179. ENDDO
  180. 324 CONTINUE
  181. 30 CONTINUE
  182. 7001 CONTINUE
  183.  
  184. SEGSUP IZHR,IZFFM,PETROV
  185.  
  186.  
  187. C CAS MACRO CENTRE
  188.  
  189. ELSEIF(KPRE.EQ.2)THEN
  190. * initialisation de npg au pif par TC
  191. NPG=1
  192. SEGINI PETROV
  193. NOM0=NOMS(ITYPEL)//' '
  194. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  195.  
  196. SEGACT IZFFM*MOD
  197. IZHR=KZHR(1)
  198. SEGACT IZHR*MOD
  199. NES=GR(/1)
  200. NPG=GR(/3)
  201. IZF1=KTP(1)
  202. SEGACT IZF1*MOD
  203. MPG=IZF1.FN(/2)
  204. NP=GR(/2)
  205.  
  206. DO 40 KE=1,NEL
  207.  
  208. NK=K0+KE
  209.  
  210. IX=0
  211. DO I=1,NP
  212. J=MELEME.NUM(I,KE)
  213. DO N=1,IDIM
  214. IX=IX+1
  215. XYZ1(IX)=XCOOR((J-1)*(IDIM+1) +N)
  216. ENDDO
  217. ENDDO
  218.  
  219. CALL CALJBR(FN,GR,PG,XYZ1,HR,PGSQ,RPG,NES,
  220. & IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
  221.  
  222. DO 424 K=1,IDIM
  223. IPM4=KIPM(K)
  224.  
  225. DO 423 I=1,NP
  226. U=0.D0
  227. DO 433 L=1,NPG
  228. U=U+HR(K,I,L)*PGSQ(L)*DEUPI*RPG(L)
  229. 433 CONTINUE
  230.  
  231. IF(IAXI.NE.0.AND.K.EQ.1)THEN
  232. DO 434 L=1,NPG
  233. U=U+FN(I,L)*PGSQ(L)*DEUPI
  234. 434 CONTINUE
  235. ENDIF
  236.  
  237. K1=1+(1-IK1)*(NK-1)
  238. U=U*IZTGG1.VPOCHA(K1,1)
  239.  
  240. if(ikas.ne.2)then
  241. IPM4.AM(KE,I,1)=IPM4.AM(KE,I,1)+U
  242. else
  243. IPM4.AM(KE,1,I)=IPM4.AM(KE,1,I)+U
  244. endif
  245.  
  246. 423 CONTINUE
  247. 424 CONTINUE
  248.  
  249. 40 CONTINUE
  250.  
  251. SEGSUP IZHR,IZFFM,PETROV
  252.  
  253. ENDIF
  254.  
  255. RETURN
  256. 1002 FORMAT(10(1X,1PE11.4))
  257. 1040 FORMAT(1X,'CALCUL MATRICE AM ',I4/10(1X,1PE11.4))
  258. END
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  

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