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 /Dragon/src/EDIRAT.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/EDIRAT.f')
| -rw-r--r-- | Dragon/src/EDIRAT.f | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/Dragon/src/EDIRAT.f b/Dragon/src/EDIRAT.f new file mode 100644 index 0000000..b96cd22 --- /dev/null +++ b/Dragon/src/EDIRAT.f @@ -0,0 +1,136 @@ +*DECK EDIRAT + SUBROUTINE EDIRAT(IOPERA,NREGIO,NBMIX,MATCOD,FLXINT,AFLUX,RATES, + > SIGMAX,IMERGE,NMERGE) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Evaluate reaction rates from cross sections. +* +*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): G. Marleau +* +*Parameters: input +* IOPERA type of action taken: +* = 2 add cross section (no flux); +* = 1 add reaction rates; +* = 0 evaluate integrated flux; +* =-1 subtract reaction rates. +* NREGIO number of regions. +* NBMIX number of mixtures. +* MATCOD material per region. +* FLXINT integrated fluxes. +* AFLUX adjoint fluxes. +* SIGMAX cross section array. +* IMERGE region merging matrix. +* NMERGE number of merged regions. +* +*Parameters: input/output +* RATES initial and final reaction rates. +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IOPERA,NREGIO,NBMIX,MATCOD(NREGIO),IMERGE(NREGIO), + > NMERGE + REAL FLXINT(NREGIO),AFLUX(NREGIO),RATES(NMERGE), + > SIGMAX(0:NBMIX) + DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: DBRAT +*---- +* SCRATCH STORAGE ALLOCATION +* DBRAT double-precision reaction rates. +*---- + ALLOCATE(DBRAT(0:NMERGE)) +*---- +* INITIALIZE DOUBLE PRECISION REACTION RATES +*---- + DO 90 IREG=0,NMERGE + DBRAT(IREG)=0.0D0 + 90 CONTINUE + IF(IOPERA.EQ.0) THEN +*---- +* INTEGRATED FLUXES +*---- + DO 100 IREG=1,NREGIO + IRATME=IMERGE(IREG) + DBRAT(IRATME)=DBRAT(IRATME)+DBLE(FLXINT(IREG)) + 100 CONTINUE + ELSE IF(IOPERA.EQ.1) THEN +*---- +* SUM REACTION RATES +*---- + DO 110 IREG=1,NREGIO + IRATME=IMERGE(IREG) + MATNUM=MATCOD(IREG) + DBRAT(IRATME)=DBRAT(IRATME)+DBLE(FLXINT(IREG)) + > *DBLE(SIGMAX(MATNUM)) + 110 CONTINUE + ELSE IF(IOPERA.EQ.-1) THEN +*---- +* SUBSTRACT REACTION RATES +*---- + DO 120 IREG=1,NREGIO + IRATME=IMERGE(IREG) + MATNUM=MATCOD(IREG) + DBRAT(IRATME)=DBRAT(IRATME)-DBLE(FLXINT(IREG)) + > *DBLE(SIGMAX(MATNUM)) + 120 CONTINUE + ELSE IF(IOPERA.EQ.2) THEN +*---- +* ADD CROSS SECTIONS +*---- + DO 130 IREG=1,NREGIO + IRATME=IMERGE(IREG) + MATNUM=MATCOD(IREG) + DBRAT(IRATME)=DBRAT(IRATME)+DBLE(SIGMAX(MATNUM)) + 130 CONTINUE + ELSE IF(IOPERA.EQ.10) THEN +*---- +* INTEGRATED ADJOINT FLUXES +*---- + DO 140 IREG=1,NREGIO + IRATME=IMERGE(IREG) + DBRAT(IRATME)=DBRAT(IRATME)+DBLE(FLXINT(IREG)) + > *DBLE(AFLUX(IREG)) + 140 CONTINUE + ELSE IF(IOPERA.EQ.11) THEN +*---- +* SUM ADJOINT-WEIGHTED REACTION RATES +*---- + DO 150 IREG=1,NREGIO + IRATME=IMERGE(IREG) + MATNUM=MATCOD(IREG) + DBRAT(IRATME)=DBRAT(IRATME)+DBLE(FLXINT(IREG)) + > *DBLE(AFLUX(IREG))*DBLE(SIGMAX(MATNUM)) + 150 CONTINUE + ELSE IF(IOPERA.EQ.-11) THEN +*---- +* SUBSTRACT ADJOINT-WEIGHTED REACTION RATES +*---- + DO 160 IREG=1,NREGIO + IRATME=IMERGE(IREG) + MATNUM=MATCOD(IREG) + DBRAT(IRATME)=DBRAT(IRATME)-DBLE(FLXINT(IREG)) + > *DBLE(AFLUX(IREG))*DBLE(SIGMAX(MATNUM)) + 160 CONTINUE + ENDIF +*---- +* STORE DOUBLE PRECISION REACTION RATES IN SINGLE PRECISION VECTOR +*---- + DO 170 IREG=1,NMERGE + RATES(IREG)=RATES(IREG)+REAL(DBRAT(IREG)) + 170 CONTINUE +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + DEALLOCATE(DBRAT) + RETURN + END |
