Download kprjss.eso

Back to the list

   1 : C KPRJSS    SOURCE    MAGN      10/05/18    21:16:00     6675           
   2 :       SUBROUTINE KPRJSS(MELEME,MELEM2,
   3 :      &IPM1,IPM2,IPM3,IAXI,IKAS,INEFMD,KPRE,IZTGG1,IPAD,IK1,IKOMP)
   4 : 
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Z)
   7 : C*****************************************************************************
   8 : C
   9 : C     Ce SP calcule les matrices elementaires de divergence alias C
  10 : C
  11 : C  IKAS=1 KMCT calcul de Ct  (Div U)
  12 : C  IKAS=2 KMAC calcul de C uniquement  (Grad p)
  13 : C  IKAS=3 KCCT calcul de C assemblage pour C et Ct
  14 : C
  15 : C*****************************************************************************
  16 :       CHARACTER*8 NOM0
  17 : 
  18 : -INC CCOPTIO
  19 : -INC CCGEOME
  20 : -INC SMCOORD
  21 : -INC SIZFFB
  22 :       POINTEUR IZF1.IZFFM,IZH2.IZHR
  23 : -INC SMMATRIK
  24 : -INC SMELEME
  25 :       POINTEUR MELEM2.MELEME
  26 : -INC SMLENTI
  27 : -INC SMCHPOI
  28 :       POINTEUR IZTGG1.MPOVAL
  29 : -INC CCREEL
  30 :       DIMENSION KIPM(3),XYZ1(24),UA(3),UB(3)
  31 : 
  32 : 
  33 : C OPERATEUR PRESSION
  34 : C
  35 :       MLENTI=IPAD
  36 :       DEUPI=1.D0
  37 :       IF(IAXI.NE.0)DEUPI=2.D0*XPI
  38 :       IF(IKAS.EQ.3)DEUPI=-DEUPI
  39 : 
  40 :       IF(IDIM.EQ.2)IPM3=IPM1
  41 :       KIPM(1)=IPM1
  42 :       KIPM(2)=IPM2
  43 :       KIPM(3)=IPM3
  44 :       SEGACT MELEME,IPM1*MOD,IPM2*MOD,IPM3*MOD
  45 : 
  46 :       NP=NUM(/1)
  47 :       NEL=NUM(/2)
  48 : 
  49 : C     write(6,*)' INEFMD=',inefmd,'KPRE=',kpre
  50 :       IF(KPRE.NE.2)THEN
  51 :        IF(INEFMD.EQ.3)THEN
  52 :        IF(KPRE.EQ.3)NOM0=NOMS(ITYPEL)//'PRP0'
  53 :        IF(KPRE.EQ.4)NOM0=NOMS(ITYPEL)//'PRP1'
  54 :        IF(KPRE.EQ.5)NOM0=NOMS(ITYPEL)//'PFP1'
  55 :        ELSEIF(INEFMD.EQ.2)THEN
  56 :        IF(KPRE.EQ.3)NOM0=NOMS(ITYPEL)//'MCP0'
  57 :        IF(KPRE.EQ.4)NOM0=NOMS(ITYPEL)//'MCP1'
  58 :        IF(KPRE.EQ.5)NOM0=NOMS(ITYPEL)//'MCF1'
  59 :        ELSEIF(INEFMD.EQ.1)THEN
  60 :        IF(KPRE.EQ.5)NOM0=NOMS(ITYPEL)//'P1P1'
  61 :        ELSEIF(INEFMD.EQ.4)THEN
  62 :        NOM0=NOMS(ITYPEL)//'    '
  63 :        ENDIF
  64 : C      write(6,*)' NOM0=',nom0,' ikas=',ikas,' nel=',nel
  64 :        CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  65 : 
  66 :       SEGACT IZFFM*MOD
  67 :       IZHR=KZHR(1)
  68 :       IZH2=KZHR(2)
  69 : 
  70 :       SEGACT IZHR*MOD,IZH2*MOD
  71 : 
  72 :       NES=GR(/1)
  73 :       NPG=GR(/3)
  74 :       IZF1=KTP(1)
  75 :       SEGACT IZF1*MOD
  76 :       MP1=IZF1.FN(/1)
  77 :       MP=MELEM2.NUM(/1)
  78 : 
  79 :       DO 30 KE=1,NEL
  80 : 
  81 : C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IKOMP = 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  82 :       IF(IKOMP.EQ.1)THEN
  83 :       DO 12 I=1,NP
  84 :       J=NUM(I,KE)
  85 :       DO 12 N=1,IDIM
  86 :       XYZ(N,I)=XCOOR((J-1)*(IDIM+1)    +N)
  87 :  12   CONTINUE
  88 : 
  88 :       CALL CALJBR
  89 :      &(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
  90 : C     write(6,*)' Retour caljbr ',mp1,np,npg
  91 : 
  92 :       DO 324 K=1,IDIM
  93 :       IPM4=KIPM(K)
  94 :       KG=(IK1-4)*(K-1)+1
  95 : 
  96 :       DO 323 M=1,MP1
  97 : 
  98 :       DO 323 I=1,NP
  99 :       U=0.D0
 100 :       DO 333 L=1,NPG
 101 : 
 101 :       CALL INITD(UA,3,0.D0)
 101 :       CALL INITD(UB,3,0.D0)
 102 : 
 103 :       DO 633 J=1,NP
 104 :       J1=LECT(NUM(J,KE))
 105 :       UA(KG)=UA(KG)+FN(J,L)*IZTGG1.VPOCHA(J1,KG)
 106 :       UB(K)=UB(K)+HR(K,J,L)*IZTGG1.VPOCHA(J1,KG)
 107 :  633  CONTINUE
 108 : 
 109 :       U=U+IZF1.FN(M,L)*
 110 :      &(HR(K,I,L)*UA(KG) + FN(I,L)*UB(K ))*PGSQ(L)*DEUPI*RPG(L)
 111 :       IF(IAXI.NE.0.AND.K.EQ.1)THEN
 112 :       U=U+IZF1.FN(M,L)*FN(I,L)*UA(KG)*PGSQ(L)*DEUPI
 113 :       ENDIF
 114 : 
 115 :  333  CONTINUE
 116 : 
 117 : 
 118 :       if(ikas.ne.2)then
 119 :       IPM4.AM(KE,I,M)=IPM4.AM(KE,I,M)+U
 120 :       else
 121 :       IPM4.AM(KE,M,I)=IPM4.AM(KE,M,I)+U
 122 :       endif
 123 : 
 124 :  323  CONTINUE
 125 :  324  CONTINUE
 126 : C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IKOMP = 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 127 :       ELSE
 128 :       DO 13 I=1,NP
 129 :       J=NUM(I,KE)
 130 :       DO 13 N=1,IDIM
 131 :       IZH2.XYZ(N,I)=XCOOR((J-1)*(IDIM+1)    +N)
 132 :  13   CONTINUE
 133 : 
 133 :       CALL CALJBR(IZF1.FN,IZF1.GR,PG,
 134 :      & IZH2.XYZ,IZH2.HR,IZH2.PGSQ,IZH2.RPG,NES,IDIM,MP1,NPG,IAXI,AIRE,
 135 :      & IZH2.AJ,SGN)
 136 : 
 136 : C?    CALL CALJBR
 137 : C?   &(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
 138 : C     write(6,*)' Retour caljbr ',mp1,np,npg
 139 : 
 140 :       DO 524 K=1,IDIM
 141 :       IPM4=KIPM(K)
 142 :       KG=(IK1-4)*(K-1)+1
 143 : 
 144 :       DO 523 M=1,MP1
 145 : 
 146 :       DO 523 I=1,NP
 147 :       U=0.D0
 148 :       DO 533 L=1,NPG
 149 : 
 149 :       CALL INITD(UA,3,0.D0)
 149 :       CALL INITD(UB,3,0.D0)
 150 : 
 151 :       DO 733 J=1,NP
 152 :       J1=LECT(NUM(J,KE))
 153 :       UA(KG)=UA(KG)+FN(J,L)*IZTGG1.VPOCHA(J1,KG)
 154 :       UB(K)=UB(K)+IZH2.HR(K,J,L)*IZTGG1.VPOCHA(J1,KG)
 155 :  733  CONTINUE
 156 : 
 157 :       U=U+IZF1.FN(M,L)*
 158 :      &(IZH2.HR(K,I,L)*UA(KG) + FN(I,L)*UB(K ))
 159 :      & *IZH2.PGSQ(L)*DEUPI*IZH2.RPG(L)
 160 : 
 161 :  533  CONTINUE
 162 : 
 163 : 
 164 :       if(ikas.ne.2)then
 165 :       IPM4.AM(KE,I,M)=IPM4.AM(KE,I,M)+U
 166 :       else
 167 :       IPM4.AM(KE,M,I)=IPM4.AM(KE,M,I)+U
 168 :       endif
 169 : 
 170 :  523  CONTINUE
 171 :  524  CONTINUE
 172 : 
 173 :       ENDIF
 174 : C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 175 :  30   CONTINUE
 176 : 
 177 :       SEGSUP IZHR,IZFFM,IZH2
 178 : 
 179 : C CAS MACRO CENTRE
 180 : 
 181 :       ELSEIF(KPRE.EQ.2)THEN
 182 :         NOM0=NOMS(ITYPEL)//'    '
 182 :         CALL KALPBG(NOM0,'FONFORM ',IZFFM)
 183 : 
 184 :         SEGACT IZFFM*MOD
 185 :         IZHR=KZHR(1)
 186 :         IZH2=KZHR(2)
 187 :         SEGACT IZHR*MOD,IZH2*MOD
 188 :         NES=GR(/1)
 189 :         NPG=GR(/3)
 190 :         IZF1=KTP(1)
 191 :         SEGACT IZF1*MOD
 192 :         NPG=IZF1.FN(/2)
 193 :         MP1=IZF1.FN(/1)
 194 :         NP=GR(/2)
 195 : 
 196 :         DO 40 KE=1,NEL
 197 : 
 198 :         IX=0
 199 :         DO 42 I=1,NP
 200 :         J=NUM(I,KE)
 201 :         DO 42 N=1,IDIM
 202 :         IX=IX+1
 203 :         XYZ1(IX)=XCOOR((J-1)*(IDIM+1)    +N)
 204 :  42     CONTINUE
 205 : 
 205 :       CALL CALJBR(FN,GR,PG,XYZ1,HR,PGSQ,RPG,NES,
 206 :      & IDIM,NP,NPG,IAXI,AIRE,AJ,SGN)
 207 : 
 208 :       DO 424 K=1,IDIM
 209 :       IPM4=KIPM(K)
 210 :       KG=(IK1-4)*(K-1)+1
 211 : 
 212 :       DO 423 M=1,MP1
 213 :       DO 423 I=1,NP
 214 :       U=0.D0
 215 :       DO 433 L=1,NPG
 216 : 
 216 :       CALL INITD(UA,3,0.D0)
 216 :       CALL INITD(UB,3,0.D0)
 217 :       DO 833 J=1,NP
 218 :       J1=LECT(NUM(J,KE))
 219 :       UA(KG)=UA(KG)+FN(J,L)*IZTGG1.VPOCHA(J1,KG)
 220 :       UB(K)=UB(K)+HR(K,J,L)*IZTGG1.VPOCHA(J1,KG)
 221 :  833  CONTINUE
 222 : 
 223 :       U=U+IZF1.FN(M,L)*
 224 :      &(HR(K,I,L)*UA(KG) + FN(I,L)*UB(K ))*PGSQ(L)*DEUPI*RPG(L)
 225 :       IF(IAXI.NE.0.AND.K.EQ.1)THEN
 226 :       U=U+IZF1.FN(M,L)*FN(I,L)*UA(KG)*PGSQ(L)*DEUPI
 227 :       ENDIF
 228 : 
 229 :  433  CONTINUE
 230 : 
 231 :       if(ikas.ne.2)then
 232 :       IPM4.AM(KE,I,1)=IPM4.AM(KE,I,1)+U
 233 :       else
 234 :       IPM4.AM(KE,1,I)=IPM4.AM(KE,1,I)+U
 235 :       endif
 236 : 
 237 :  423  CONTINUE
 238 :  424  CONTINUE
 239 : 
 240 :  40   CONTINUE
 241 : 
 242 :       SEGSUP IZHR,IZFFM,IZH2
 243 : 
 244 :       ENDIF
 245 : 
 246 :       RETURN
 247 :  1002 FORMAT(10(1X,1PE11.4))
 248 :  1040 FORMAT(1X,'CALCUL MATRICE AM ',I4/10(1X,1PE11.4))
 249 :       END
 250 :  
 251 :  
 252 :  
 253 :  
 254 :  
 255 :  
 256 :  
 257 :  
 258 :  
 259 :  
 260 :  
 261 : 
 262 :  
 263 :  
 264 :  
 265 :  
 266 :  
 267 :  
 268 :  

© Cast3M 2003 - All rights reserved.
Disclaimer