diff options
| author | HEBERT Alain <alain.hebert@polymtl.ca> | 2025-11-18 05:30:27 -0500 |
|---|---|---|
| committer | HEBERT Alain <alain.hebert@polymtl.ca> | 2025-11-18 05:30:27 -0500 |
| commit | 72387a297ad533948a0da5bf91695a38923fb471 (patch) | |
| tree | b885eefd6aa07818e2b9f1f6f6c1276d89c2f796 | |
| parent | a870f2d0d950b0b1d4aedef6f0363b5f8bf01b16 (diff) | |
| parent | f68c42f56b508e41f2d75908e2b6aa4cc7ad675a (diff) | |
Merge branch '15-implement-new-option-fiss-in-module-out-of-trivac' into 'main'
#15: Implement new option FISS in module OUT: of Trivac
See merge request dragon/5.1!24
| -rwxr-xr-x | Trivac/src/OUT.f | 26 | ||||
| -rwxr-xr-x | Trivac/src/OUTDRV.f | 60 | ||||
| -rw-r--r-- | doc/IGE369/Section1.tex | 9 |
3 files changed, 76 insertions, 19 deletions
diff --git a/Trivac/src/OUT.f b/Trivac/src/OUT.f index 7c1f2bb..fe344d0 100755 --- a/Trivac/src/OUT.f +++ b/Trivac/src/OUT.f @@ -72,8 +72,8 @@ IF(NENTRY.LE.1) CALL XABORT('OUT: TWO PARAMETERS EXPECTED.') IF((IENTRY(1).NE.1).AND.(IENTRY(1).NE.2)) CALL XABORT('OUT: LCM ' 1 //'OBJECT EXPECTED AT LHS.') - IF(JENTRY(1).NE.0) CALL XABORT('OUT: ENTRY IN CREATE MODE EXPECT' - 1 //'ED.') + IF((JENTRY(1).NE.0).AND.(JENTRY(1).NE.1)) CALL XABORT('OUT: ENTR' + 1 //'Y IN CREATE OR MODIFICATION MODE EXPECTED.') IF((JENTRY(2).NE.2).OR.((IENTRY(2).NE.1).AND.(IENTRY(2).NE.2))) 1 CALL XABORT('OUT: LCM OBJECT IN READ-ONLY MODE EXPECTED AT RHS.') IPMAC2=KENTRY(1) @@ -84,9 +84,25 @@ CALL XABORT('OUT: SIGNATURE OF '//TEXT12//' IS '//HSIGN// 1 '. L_FLUX EXPECTED.') ENDIF - HSIGN='L_MACROLIB' - CALL LCMPTC(IPMAC2,'SIGNATURE',12,HSIGN) - CALL LCMPTC(IPMAC2,'LINK.FLUX',12,TEXT12) + IF(JENTRY(1).EQ.0) THEN + HSIGN='L_MACROLIB' + CALL LCMPTC(IPMAC2,'SIGNATURE',12,HSIGN) + CALL LCMPTC(IPMAC2,'LINK.FLUX',12,TEXT12) + ELSE + CALL LCMGTC(IPMAC2,'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_MACROLIB') THEN + TEXT12=HENTRY(1) + CALL XABORT('OUT: SIGNATURE OF '//TEXT12//' IS '//HSIGN// + 1 '. L_MACROLIB EXPECTED.') + ENDIF + IGP(:NSTATE)=0 + CALL LCMGET(IPMAC2,'STATE-VECTOR',IGP) + NGRP=IGP(1) + NBMIX=IGP(2) + NL=IGP(3) + NBFIS=IGP(4) + NALBP=IGP(8) + ENDIF *---- * RECOVER IPGEOM, IPMAC1 AND IPTRK POINTERS. *---- diff --git a/Trivac/src/OUTDRV.f b/Trivac/src/OUTDRV.f index f377715..2ca16e3 100755 --- a/Trivac/src/OUTDRV.f +++ b/Trivac/src/OUTDRV.f @@ -168,6 +168,42 @@ EVECT(I,IGR)=EVECT(I,IGR)*REAL(ZNORM) 70 CONTINUE 80 CONTINUE + ELSE IF(TEXT4.EQ.'FISS') THEN +* NORMALIZATION TO A GIVEN FISSION SECONDARY NEUTRON PRODUCTION. + CALL REDGET (INDIC,NITMA,POWER,TEXT4,DFLOTT) + IF(INDIC.NE.2) CALL XABORT('OUTDRV: REAL DATA EXPECTED.') +* NORMALIZATION FACTOR FOR THE DIRECT FLUX. + ZNORM=0.0D0 + JPMAC1=LCMGID(IPMAC1,'GROUP') + DO 100 IGR=1,NGRP + KPMAC1=LCMGIL(JPMAC1,IGR) + CALL LCMLEN(KPMAC1,'NUSIGF',LENGT,ITYLCM) + IF(LENGT.EQ.0) THEN + CALL LCMLIB(KPMAC1) + CALL XABORT('OUTDRV: NUSIGF RECORD MISSING IN MACROLIB.') + ENDIF + ALLOCATE(ZUFIS(NBMIX,NBFIS)) + SGD(:NBMIX)=0.0 + CALL LCMGET(KPMAC1,'NUSIGF',ZUFIS) + DO IBM=1,NBMIX + DO IFISS=1,NBFIS + SGD(IBM)=SGD(IBM)+ZUFIS(IBM,IFISS) + ENDDO + ENDDO + DEALLOCATE(ZUFIS) + DO 90 K=1,NEL + L=MAT(K) + IF((L.EQ.0).OR.(IDL(K).EQ.0)) GO TO 90 + ZNORM=ZNORM+EVECT(IDL(K),IGR)*VOL(K)*SGD(L) + 90 CONTINUE + 100 CONTINUE + ZNORM=POWER/ZNORM + WRITE(6,300) ' DIRECT',ZNORM + DO 120 IGR=1,NGRP + DO 110 I=1,NUN + EVECT(I,IGR)=EVECT(I,IGR)*REAL(ZNORM) + 110 CONTINUE + 120 CONTINUE ELSE IF(TEXT4.EQ.'SOUR') THEN * NORMALIZATION TO A GIVEN SOURCE INTENSITY. CALL REDGET (INDIC,NITMA,SNUMB,TEXT4,DFLOTT) @@ -175,7 +211,7 @@ * NORMALIZATION FACTOR FOR THE DIRECT FLUX. ZNORM=0.0D0 JPMAC1=LCMGID(IPMAC1,'GROUP') - DO 100 IGR=1,NGRP + DO 140 IGR=1,NGRP KPMAC1=LCMGIL(JPMAC1,IGR) CALL LCMLEN(KPMAC1,'FIXE',LENGT,ITYLCM) IF(LENGT.EQ.0) THEN @@ -183,18 +219,18 @@ CALL XABORT('OUTDRV: SOURCE RECORD MISSING IN MACROLIB.') ENDIF CALL LCMGET(KPMAC1,'FIXE',SGD) - DO 90 K=1,NEL + DO 130 K=1,NEL L=MAT(K) IF(L.GT.0) ZNORM=ZNORM+VOL(K)*SGD(L) - 90 CONTINUE - 100 CONTINUE + 130 CONTINUE + 140 CONTINUE ZNORM=SNUMB/ZNORM WRITE(6,305) ' DIRECT',ZNORM - DO 120 IGR=1,NGRP - DO 110 I=1,NUN + DO 160 IGR=1,NGRP + DO 150 I=1,NUN EVECT(I,IGR)=EVECT(I,IGR)*REAL(ZNORM) - 110 CONTINUE - 120 CONTINUE + 150 CONTINUE + 160 CONTINUE ELSE IF(TEXT4.EQ.'COND') THEN NGCOND=0 CALL REDGET (INDIC,NITMA,FLOTT,TEXT4,DFLOTT) @@ -210,12 +246,12 @@ IGCOND(NGCOND)=NGRP GO TO 40 ELSE IF(INDIC.EQ.1) THEN - 130 IF(NITMA.GT.NGRP) NITMA=NGRP + 170 IF(NITMA.GT.NGRP) NITMA=NGRP NGCOND=NGCOND+1 IGCOND(NGCOND)=NITMA CALL REDGET (INDIC,NITMA,FLOTT,TEXT4,DFLOTT) IF(INDIC.EQ.1) THEN - GO TO 130 + GO TO 170 ELSE IF(INDIC.EQ.3) THEN GO TO 40 ELSE @@ -246,7 +282,7 @@ CALL KDRCPU(TK2) TKR=TK2-TK1 WRITE(6,310) TKR - GO TO 140 + GO TO 180 ELSE CALL XABORT('OUTDRV: '//TEXT4//' IS AN INVALID KEY WORD.') ENDIF @@ -254,7 +290,7 @@ *---- * SCRATCH STORAGE DEALLOCATION *---- - 140 DEALLOCATE(FLUXC,SGD,EVECT,IGCOND,IHOM) + 180 DEALLOCATE(FLUXC,SGD,EVECT,IGCOND,IHOM) RETURN * 300 FORMAT(/9H OUTDRV: ,A7,28H FLUX NORMALIZATION FACTOR =,1P,E13.5) diff --git a/doc/IGE369/Section1.tex b/doc/IGE369/Section1.tex index e41143c..cc0c406 100644 --- a/doc/IGE369/Section1.tex +++ b/doc/IGE369/Section1.tex @@ -1585,7 +1585,7 @@ equal to the dominance ratio of the iterative matrix. The {\tt OUT:} module is used to compute the reaction rates and to store them in an extended {\sc macrolib} (type {\tt L\_MACROLIB}) corresponding to a solution (type {\tt L\_FLUX}) of the matrix system. The calling specifications are: \begin{DataStructure}{Structure \dstr{OUT:}} -\dusa{MACRO2} \moc{:=} \moc{OUT:} \dusa{FLUX} \dusa{TRACK} \dusa{MACRO} \dusa{GEOM} \moc{::} \dstr{out\_data} +\dusa{MACRO2} \moc{:=} \moc{OUT:} $[$ \dusa{MACRO2} $]$ \dusa{FLUX} \dusa{TRACK} \dusa{MACRO} \dusa{GEOM} \moc{::} \dstr{out\_data} \end{DataStructure} \noindent where @@ -1613,7 +1613,7 @@ The {\tt OUT:} module is used to compute the reaction rates and to store them in $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{MODE} \dusa{imode} $]$ \\ $[~\{$ \moc{DIRE} $|$ \moc{PROD} $\}~]$ \\ -$[~\{$ \moc{POWR} \dusa{power} $|$ \moc{SOUR} \dusa{snumb} $\}~]$ \\ +$[~\{$ \moc{POWR} \dusa{power} $|$ \moc{FISS} \dusa{number} $|$ \moc{SOUR} \dusa{snumb} $\}~]$ \\ $[$ \moc{COND} $[~\{$ \moc{NONE} $|$ (\dusa{icond}(i), i=1,ngcond) $\}~]~]$ \\ $[$ \moc{INTG} $\{$ \moc{NONE} $|$ \moc{IN} $|$ \moc{MIX} $|$ (\dusa{ihom}(i), i=1,nreg) $\}~]$ \\ ; @@ -1639,6 +1639,11 @@ $[$ \moc{INTG} $\{$ \moc{NONE} $|$ \moc{IN} $|$ \moc{MIX} $|$ (\dusa{ihom}(i), i \item[\dusa{power}] value of the power in MW used to normalize the flux. By default, the flux is not normalized. +\item[\moc{FISS}] keyword used to set \dusa{number}. + +\item[\dusa{number}] number of secondary neutrons produced by fission. This value may be set to 1.0 to obtain the +legacy power method normalization. By default, the flux is not normalized. + \item[\moc{SOUR}] keyword used to set \dusa{snumb}. \item[\dusa{snumb}] number of source particles used to normalize the flux. By default, the flux is not normalized. |
