summaryrefslogtreecommitdiff
path: root/Trivac/src/KINT04.f
diff options
context:
space:
mode:
Diffstat (limited to 'Trivac/src/KINT04.f')
-rwxr-xr-xTrivac/src/KINT04.f75
1 files changed, 75 insertions, 0 deletions
diff --git a/Trivac/src/KINT04.f b/Trivac/src/KINT04.f
new file mode 100755
index 0000000..d293912
--- /dev/null
+++ b/Trivac/src/KINT04.f
@@ -0,0 +1,75 @@
+*DECK KINT04
+ SUBROUTINE KINT04(IELEM,NBMIX,LL4F,NBLOS,MAT,SIDE,ZZ,FRZ,SGD,KN,
+ > IPERT,F2,F3)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Multiplication of a matrix by a vector in Thomas-Raviart-Schneider
+* mixed-dual finite element approximation (hexagonal geometry). Special
+* version for Trivac.
+*
+*Copyright:
+* Copyright (C) 2010 Ecole Polytechnique de Montreal
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version
+*
+*Author(s): A. Hebert
+*
+*Parameters: input
+* IELEM degree of the Lagrangian finite elements.
+* NBMIX maximum number of material mixtures.
+* LL4F total number of flux unknowns per group.
+* NBLOS number of lozenges per direction, taking into account
+* mesh-splitting.
+* MAT mixture index assigned to each element.
+* SIDE side of an hexagon.
+* ZZ Z-directed mesh spacings.
+* FRZ volume fractions for the axial SYME boundary condition.
+* SGD cross section per material mixture.
+* KN ADI permutation indices for the volumes.
+* IPERT mixture permutation index.
+* F2 vector to multiply.
+*
+*Parameters: output
+* F3 result of the multiplication.
+*
+*-----------------------------------------------------------------------
+*
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER IELEM,NBMIX,LL4F,NBLOS,MAT(3,NBLOS),KN(NBLOS,3),
+ 1 IPERT(NBLOS)
+ REAL SIDE,ZZ(3,NBLOS),FRZ(NBLOS),SGD(NBMIX),F2(LL4F),F3(LL4F)
+*----
+* LOCAL VARIABLES
+*----
+ DOUBLE PRECISION TTTT,VOL0,SIG
+*
+ TTTT=0.5D0*SQRT(3.D00)*SIDE*SIDE
+ NUM=0
+ DO 20 KEL=1,NBLOS
+ IF(IPERT(KEL).EQ.0) GO TO 20
+ NUM=NUM+1
+ IBM=MAT(1,IPERT(KEL))
+ IF(IBM.EQ.0) GO TO 20
+ VOL0=TTTT*ZZ(1,IPERT(KEL))*FRZ(KEL)
+ SIG=SGD(IBM)
+ DO 12 K3=0,IELEM-1
+ DO 11 K2=0,IELEM-1
+ DO 10 K1=0,IELEM-1
+ JND1=(NUM-1)*IELEM**3+K3*IELEM**2+K2*IELEM+K1+1
+ JND2=(KN(NUM,1)-1)*IELEM**3+K3*IELEM**2+K2*IELEM+K1+1
+ JND3=(KN(NUM,2)-1)*IELEM**3+K3*IELEM**2+K2*IELEM+K1+1
+ F3(JND1)=F3(JND1)+REAL(VOL0*SIG)*F2(JND1)
+ F3(JND2)=F3(JND2)+REAL(VOL0*SIG)*F2(JND2)
+ F3(JND3)=F3(JND3)+REAL(VOL0*SIG)*F2(JND3)
+ 10 CONTINUE
+ 11 CONTINUE
+ 12 CONTINUE
+ 20 CONTINUE
+ RETURN
+ END