summaryrefslogtreecommitdiff
path: root/Dragon/src/BIVS02.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/BIVS02.f')
-rw-r--r--Dragon/src/BIVS02.f106
1 files changed, 106 insertions, 0 deletions
diff --git a/Dragon/src/BIVS02.f b/Dragon/src/BIVS02.f
new file mode 100644
index 0000000..6f7abd1
--- /dev/null
+++ b/Dragon/src/BIVS02.f
@@ -0,0 +1,106 @@
+*DECK BIVS02
+ SUBROUTINE BIVS02(CYLIND,IELEM,ICOL,NREG,NUN,LL4,IIMAX,MAT,KN,BFR,
+ 1 VOL,MU,SOURCE,SYS,FUNKNO)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* One-speed flux calculation in mixed-dual finite element approximation
+* (Cartesian geometry).
+*
+*Copyright:
+* Copyright (C) 2002 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
+* CYLIND cylinderization flag (=.TRUE. for cylindrical geometry).
+* IELEM degree of the Lagrangian finite elements: =1 (linear);
+* =2 (parabolic); =3 (cubic); =4 (quartic).
+* ICOL type of quadrature: =1 (analytical integration);
+* =2 (Gauss-Lobatto); =3 (Gauss-Legendre).
+* NREG number of elements in BIVAC.
+* NUN dimension of array FUNKNO.
+* LL4 number of unknowns per group in BIVAC.
+* IIMAX allocated dimension of array SYS.
+* MAT mixture index per region.
+* KN element-ordered unknown list.
+* BFR element-ordered surface fractions.
+* VOL volume of regions.
+* MU indices used with compressed diagonal storage mode matrix SYS.
+* SOURCE fission and diffusion sources.
+* SYS factorized system matrix.
+*
+*Parameters: output
+* FUNKNO neutron fluxes (surface-averaged flux are in position
+* FUNKNO(NUN)).
+*
+*-----------------------------------------------------------------------
+*
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER IELEM,ICOL,NREG,NUN,LL4,IIMAX,MAT(NREG),KN(5*NREG),
+ 1 MU(LL4)
+ REAL BFR(4*NREG),VOL(NREG),SOURCE(LL4),SYS(IIMAX),FUNKNO(NUN)
+ LOGICAL CYLIND
+*
+ IF((CYLIND).AND.((IELEM.GT.1).OR.(ICOL.NE.2)))
+ 1 CALL XABORT('BIVS02: TYPE OF DISCRETIZATION NOT IMPLEMENTED.')
+*----
+* RESOLUTION.
+*----
+ DO 90 I=1,LL4
+ FUNKNO(I)=SOURCE(I)
+ 90 CONTINUE
+ CALL ALLDLS (LL4,MU,SYS,FUNKNO)
+*----
+* CALCULATION OF THE SURFACE-AVERAGED FLUX.
+*----
+ FUNKNO(NUN)=0.0
+ NUM1=0
+ NUM2=0
+ DO 160 K=1,NREG
+ IF(MAT(K).EQ.0) GO TO 160
+ IF(VOL(K).EQ.0.0) GO TO 150
+ IF(BFR(NUM2+1).GT.0.0) THEN
+ SG=1.0
+ DO 110 I0=1,IELEM
+ IND1=KN(NUM1+1)+I0-1
+ FUNKNO(NUN)=FUNKNO(NUN)+SG*SQRT(REAL(2*I0-1))*FUNKNO(IND1)*
+ 1 BFR(NUM2+1)
+ SG=-SG
+ 110 CONTINUE
+ ENDIF
+ IF(BFR(NUM2+2).GT.0.0) THEN
+ DO 120 I0=1,IELEM
+ IND1=KN(NUM1+1)+I0-1
+ FUNKNO(NUN)=FUNKNO(NUN)+SQRT(REAL(2*I0-1))*FUNKNO(IND1)*
+ 1 BFR(NUM2+2)
+ 120 CONTINUE
+ ENDIF
+ IF(BFR(NUM2+3).GT.0.0) THEN
+ SG=1.0
+ DO 130 I0=1,IELEM
+ IND1=KN(NUM1+1)+(I0-1)*IELEM
+ FUNKNO(NUN)=FUNKNO(NUN)+SG*SQRT(REAL(2*I0-1))*FUNKNO(IND1)*
+ 1 BFR(NUM2+3)
+ SG=-SG
+ 130 CONTINUE
+ ENDIF
+ IF(BFR(NUM2+4).GT.0.0) THEN
+ DO 140 I0=1,IELEM
+ IND1=KN(NUM1+1)+(I0-1)*IELEM
+ FUNKNO(NUN)=FUNKNO(NUN)+SQRT(REAL(2*I0-1))*FUNKNO(IND1)*
+ 1 BFR(NUM2+4)
+ 140 CONTINUE
+ ENDIF
+ 150 NUM1=NUM1+5
+ NUM2=NUM2+4
+ 160 CONTINUE
+ RETURN
+ END