diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Trivac/src/FLDBIV.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Trivac/src/FLDBIV.f')
| -rwxr-xr-x | Trivac/src/FLDBIV.f | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Trivac/src/FLDBIV.f b/Trivac/src/FLDBIV.f new file mode 100755 index 0000000..c2d5205 --- /dev/null +++ b/Trivac/src/FLDBIV.f @@ -0,0 +1,111 @@ +*DECK FLDBIV + SUBROUTINE FLDBIV(IPTRK,NEL,NUN,EVECT,MAT,VOL,IDL) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Calculation of the averaged flux in BIVAC. +* +*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 +* IPTRK L_TRACK pointer to the BIVAC tracking information. +* NEL total number of finite elements. +* NUN total number of unknown per energy group. +* EVECT variational coefficients of the flux. The information is +* contained in position EVECT(1) to EVECT(LL4) where LL4 is +* the order of the system matrices. +* MAT mixture index assigned to each element. +* VOL volume of each element. +* IDL position of the average flux component associated with each +* volume. +* +*Parameters: output +* EVECT averaged fluxes. The information is contained in positions +* EVECT(IDL(I)). +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPTRK + INTEGER NEL,NUN,MAT(NEL),IDL(NEL) + REAL EVECT(NUN),VOL(NEL) +*---- +* LOCAL VARIABLES +*---- + PARAMETER (NSTATE=40) + LOGICAL CYLIND + INTEGER ITP(NSTATE) + INTEGER, DIMENSION(:), ALLOCATABLE :: KN + REAL, DIMENSION(:), ALLOCATABLE :: XX,DD,T,TS,QFR + REAL, DIMENSION(:,:), ALLOCATABLE :: RH,RT +*---- +* RECOVER BIVAC SPECIFIC TRACKING INFORMATION +*---- + CALL LCMGET(IPTRK,'STATE-VECTOR',ITP) + ITYPE=ITP(6) + CYLIND=(ITYPE.EQ.3).OR.(ITYPE.EQ.6) + IELEM=ITP(8) + ICOL=ITP(9) + ISPLH=ITP(10) + LL4=ITP(11) + LX=ITP(12) + LY=ITP(13) + CALL LCMLEN(IPTRK,'KN',MAXKN,ITYLCM) + ALLOCATE(KN(MAXKN)) + CALL LCMGET(IPTRK,'KN',KN) +* + IF((IELEM.LT.0).AND.(ITYPE.NE.8)) THEN +* LAGRANGIAN FINITE ELEMENTS. + ALLOCATE(XX(LX*LY),DD(LX*LY)) + CALL LCMGET(IPTRK,'XX',XX) + CALL LCMGET(IPTRK,'DD',DD) + CALL LCMSIX(IPTRK,'BIVCOL',1) + CALL LCMLEN(IPTRK,'T',LC,ITYLCM) + ALLOCATE(T(LC),TS(LC)) + CALL LCMGET(IPTRK,'T',T) + CALL LCMGET(IPTRK,'TS',TS) + CALL LCMSIX(IPTRK,' ',2) + CALL FLDBN2(NEL,LL4,-IELEM,CYLIND,EVECT,XX,DD,MAT,VOL,IDL,KN, + 1 LC,T,TS) + DEALLOCATE(TS,T,DD,XX) + ELSE IF((IELEM.LT.0).AND.(ITYPE.EQ.8)) THEN +* MESH CORNER FINITE DIFFERENCES IN HEXAGONAL GEOMETRY. + CALL LCMSIX(IPTRK,'BIVCOL',1) + ALLOCATE(RH(6,6),RT(3,3)) + CALL LCMGET(IPTRK,'RH',RH) + CALL LCMGET(IPTRK,'RT',RT) + CALL LCMSIX(IPTRK,' ',2) + IF(ISPLH.EQ.1) THEN + NELEM=MAXKN/7 + ELSE + NELEM=MAXKN/4 + ENDIF + ALLOCATE(QFR(MAXKN)) + CALL LCMGET(IPTRK,'QFR',QFR) + CALL FLDBH2(ISPLH,NEL,NUN,NELEM,EVECT,VOL,IDL,KN,QFR,RH,RT) + DEALLOCATE(QFR,RT,RH) + ELSE IF((IELEM.GT.0).AND.(ITYPE.EQ.8).AND.(ICOL.EQ.4).AND. + 1 (ISPLH.GT.1)) THEN +* MESH CENTERED FINITE DIFFERENCES IN HEXAGONAL GEOMETRY. + ALLOCATE(QFR(MAXKN)) + CALL LCMGET(IPTRK,'QFR',QFR) + CALL FLDBH1(NEL,NUN,LL4,EVECT,VOL,IDL,KN,QFR) + DEALLOCATE(QFR) + ENDIF +*---- +* RELEASE BIVAC SPECIFIC TRACKING INFORMATION +*---- + DEALLOCATE(KN) + RETURN + END |
