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 /Donjon/src/D2PBRA.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/D2PBRA.f')
| -rw-r--r-- | Donjon/src/D2PBRA.f | 1693 |
1 files changed, 1693 insertions, 0 deletions
diff --git a/Donjon/src/D2PBRA.f b/Donjon/src/D2PBRA.f new file mode 100644 index 0000000..301d191 --- /dev/null +++ b/Donjon/src/D2PBRA.f @@ -0,0 +1,1693 @@ +*DECK D2PBRA + SUBROUTINE D2PBRA( IPDAT,IPINP,IPHEL,STAVEC,DEB,SIGNAT,IPRINT ) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Recover information from the INFO data block for a complete branch +* and write it in the IPHEL file . The format of this file is described +* in the DRAG2PARCS: manual. This routine write sequentially the IPHEL +* file, branch after branch +* +*Author(s): +* J. Taforeau +* +*Parameters: input +* IPDAT address of info data block +* IPINP file unit of the input file GENPMAXS.inp +* IPHEL file unit of the HELIOS.dra file +* STAVEC various parameters associated with the IPDAT structure +* DEB flag for D2PGEN +* SIGNAT signature of the object containing cross sections +* IPRINT control the printing on screen +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPDAT + INTEGER IPINP,IPHEL,STAVEC(40),DEB,IPRINT + + CHARACTER*16 SIGNAT +*---- +* LOCAL VARIABLES +*---- + INTEGER GRID,ITBRAN,NVAR,i,j,k + INTEGER NSF,NGP,NXS,NBU,FLPRIN,LMER + INTEGER STAIDX(STAVEC(2)),PKIDX(STAVEC(2)) + INTEGER IUPS,FA_K,NADF,NCDF,NPIN,NCOLA,NROWA,XESM + REAL XS(STAVEC(1),STAVEC(3),STAVEC(4)) ! TABLE FOR XS + REAL ADF(STAVEC(13),STAVEC(1),STAVEC(4)) + REAL FLXL(STAVEC(1),STAVEC(4)) + REAL FLXR(STAVEC(1),STAVEC(4)) + REAL CURL(STAVEC(1),STAVEC(4)) + REAL CURR(STAVEC(1),STAVEC(4)) + REAL CDF(STAVEC(15),STAVEC(1),STAVEC(4)) + REAL GFF(STAVEC(8),STAVEC(9),STAVEC(1),STAVEC(4)) + REAL SCAT(STAVEC(1)*STAVEC(1),STAVEC(4)) + REAL BURN(STAVEC(4)),XSC(3),DATSRC(5) + REAL DIV(3,STAVEC(4)) + REAL ND(2,STAVEC(4)) + CHARACTER(len=4) BRANCH,JOB(4) + CHARACTER*12 FILNAM + CHARACTER COM + CHARACTER*16 JOBTIT + CHARACTER JOBOPT(16) + CHARACTER*3 ADF_T + CHARACTER*1 DER + REAL FC1(5) + REAL FC2(8) + REAL FC3(7) + REAL FC4(3) + REAL VERS,SFAC,BFAC + LOGICAL :: LTH = .FALSE. + LOGICAL :: LADF = .FALSE. + LOGICAL :: LXES = .FALSE. + LOGICAL :: LCDF = .FALSE. + LOGICAL :: LGFF = .FALSE. + LOGICAL :: LDET = .FALSE. + + + ! INITIALIZATION OF VARIABLES + NGP=STAVEC(1) + NVAR=STAVEC(2) + NXS=STAVEC(3) + NBU=STAVEC(4) + GRID=STAVEC(5) + NCOLA=STAVEC(8) + NROWA=STAVEC(9) + NPART=STAVEC(10) + NSF=STAVEC(11) + NCF=STAVEC(12) + NADF=STAVEC(13) + NCDF=STAVEC(15) + NGFF=STAVEC(16) + NPIN=STAVEC(17) + LMER=STAVEC(21) + + + IF(IPRINT > 0) THEN + WRITE(6,*) + WRITE(6,*) "**** WRITING CURRENT BRANCH IN HELIOS FILE ****" + + ENDIF + ! RECOVER INFORMATION FROM INFO DATA BLOCK + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'HELIOS_HEAD',1) + CALL LCMGET(IPDAT,'FILE_CONT_1',FC1) + CALL LCMGET(IPDAT,'FILE_CONT_2',FC2) + CALL LCMGET(IPDAT,'FILE_CONT_3',FC3) + CALL LCMGET(IPDAT,'FILE_CONT_4',FC4) + CALL LCMGET(IPDAT,'XS_CONT',XSC) + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'GENPMAXS_INP',1) + CALL LCMGET(IPDAT,'DAT_SRC',DATSRC) + CALL LCMGTC(IPDAT,'JOB_OPT',4,4,JOB) + CALL LCMGET(IPDAT,'VERSION',VERS) + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'BRANCH_INFO',1) + CALL LCMGET(IPDAT,'PRINT',FLPRIN) + CALL LCMGET(IPDAT,'STATE_INDEX',STAIDX) + CALL LCMGET(IPDAT,'BRANCH_IT',ITBRAN) + CALL LCMGTC(IPDAT,'BRANCH',4,BRANCH) + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'SAPHYB_INFO',1) + CALL LCMGET(IPDAT,'PKIDX',PKIDX) + CALL LCMGET(IPDAT,'BURN',BURN) + + i=1 + DO j=1,4 + DO k=1,4 + JOBOPT(i)= JOB(j)(k:k) + i=i+1 + ENDDO + ENDDO + + IF(JOBOPT(1)=='T') THEN + LADF = .TRUE. + CALL LCMGTC(IPDAT,'ADF_TYPE',3,ADF_T) + ENDIF + IF(JOBOPT(2)=='T') LXES = .TRUE. + IF(JOBOPT(8)=='T') LDET = .TRUE. + IF((JOBOPT(5)=='T').OR.(JOBOPT(7)=='T').OR. + > (JOBOPT(9)=='T').OR.(JOBOPT(13)=='T').OR.(JOBOPT(12)=='T'))THEN + LTH =.TRUE. + ENDIF + IF(JOBOPT(10)=='T') LCDF = .TRUE. + IF(JOBOPT(11)=='T') LGFF = .TRUE. + + ! WRITE THE CURRENT BRANCH IN THE HELIOS.DRA FILE + IF(FLPRIN==1) THEN + ! RECOVER CROSS SECTIONS FROM THE TEMPORARY FILE + CALL READXS (IPDAT, XS, SCAT, ND, DIV, NGP, + > NXS, ADF, CDF, GFF, NBU, NADF, + > DATSRC, GRID, NCDF, NCOLA, NROWA, LADF, + > LCDF, LGFF, LXES, LDET, SIGNAT, LMER, + > IPRINT, ADF_T, FLXL, FLXR, CURL, CURR) + ! WRITE IN HELIOS.DRA THE SET OF BURNUP POINTS + CALL SETBU (IPHEL,BRANCH,ITBRAN,XSC,BURN,NBU, IPRINT) + + ! WRITE IN HELIOS.DRA THE SET OF CROSS SECTIONS + CALL SETXS ( IPHEL, BRANCH, ITBRAN, XS, NGP, NXS, + > NBU, BURN, DATSRC, LXES, LDET,IPRINT) + + ! WRITE IN HELIOS.DRA THE ELEMENT OF THE SCATTERING MATRIX + CALL SETSCT(IPHEL,BRANCH,ITBRAN,SCAT,NGP,NBU,BURN, IPRINT) + + IF(LADF.AND.(LMER.EQ.0)) THEN + CALL SETADF( IPHEL, BRANCH, ITBRAN, ADF, NADF, NGP, + > NBU, BURN, IPRINT, ADF_T, FLXR, FLXL, + > CURL, CURR) + ENDIF + + IF(DATSRC(3)==1.0) THEN + IF(LXES) THEN + ! WRITE IN HELIOS.DRA THE NUMBRE DENSITIES FOR XENON AND + ! SAMARIUM + CALL SETND (IPHEL,BRANCH,ITBRAN, ND,NBU,BURN, IPRINT) + ENDIF + IF((GRID<2).AND.(SIGNAT.EQ.'L_SAPHYB'))THEN + ! WRITE IN HELIOS.DRA THE DIVERS INFORMATION + CALL SETDIV(IPHEL,BRANCH,ITBRAN,DIV,NBU,BURN,IPRINT) + ENDIF + IF(LTH) THEN + ! WRITE IN HELIOS.DRA THE T:H INVARIANT DATA BLOCK + CALL SETTH ( IPHEL, BRANCH, ITBRAN, BURN, NBU, JOBOPT, + > NGP, IPDAT, IPRINT ) + ENDIF + + IF(LCDF) THEN + CALL SETCDF( IPHEL, BRANCH, ITBRAN, CDF, NCDF, NGP, + > NBU, BURN, IPRINT ) + ENDIF + IF(LGFF) THEN + IF ((NCOLA .NE. NPIN) .OR. (NROWA .NE.NPIN)) THEN + WRITE (6,*) "@D2PBRA: NUMBER OF PIN IN MCO (NPIN= ",NPIN, + > ") INCOHERENT WITH ncols AND nrows (",NCOLA,') IN D2P: INPUT' + CALL XABORT ('') + ENDIF + CALL SETGFF( IPHEL, BRANCH, ITBRAN, GFF, NCOLA, NROWA, + > NPART, NGP, NBU, BURN, NGFF, IPRINT, + > VERS) + ENDIF + ENDIF + ! SIGNATURE OF THE END OF A BRANCH (MANDATORY FOR GENPMAXS + ! CODE) + WRITE(IPHEL,*) + WRITE(IPHEL,30)'*********************************************' + WRITE(IPHEL,30)'* Normal End, No warning messages issued *' + WRITE(IPHEL,30)'* *' + WRITE(IPHEL,30)'* Total CPU time used = *' + WRITE(IPHEL,30)'*********************************************' + 30 FORMAT(25X,A) + ENDIF + + ! UPDATE OF THE INFO DATA BLOCK + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'GENPMAXS_INP',1) + CALL LCMPUT(IPDAT,'FLAG',1,1,1) + + IF(IPRINT > 0) THEN + WRITE(6,*) "******** UPDATING the GENPMAXS.INP FILE *********" + ENDIF + ! UPDATE OF THE GENPMAXS.INP FILE (MANY ARGUMENTS IN THIS CALL + ! ARE NOT USED IN D2PGEN) + CALL D2PGEN( IPINP, IPDAT, STAVEC, JOBTIT, FILNAM, DER, + > VERS, COM, JOBOPT, IUPS, FA_K, SFAC, + > BFAC, DEB, XESM, FC1 , FC2, FC3, + > FC4, XSC, IPRINT ) + IF(IPRINT > 0) THEN + WRITE(6,*)"********* SELECTING A NEW BRANCH CALCULATION *****" + ENDIF + + CALL D2PSEL ( IPDAT, IPINP, STAVEC,BRANCH, ITBRAN, STAIDX, + > NVAR, JOBOPT, DEB, FC1 , FC2, FC3, + > FC4, XSC, IPRINT ) + + + WRITE(6,*) "********* BRANCH SELECTED *****" + + END + + SUBROUTINE SETBU(IPHEL,BRANCH,ITBRAN,XSC,BURN,NBU,IPRINT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the inforamtion about burnup points and +* XSC card (sides in assembly (NSIDES), +* corners in assembly (NCORNERS), VFCM). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* XSC content of the XS_CONT card +* BURN set of burnup points +* NBU number of bunup points +* IPRINT control the printing on screen +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER NBU,ITBRAN,IPHEL,IPRINT + REAL XSC(3),BURN (NBU) + CHARACTER BRANCH*4 +*---- +* LOCAL VARIABLES +*---- + ! number of sides and corners in assembly + INTEGER NSIDE, NCORNER + + + + NSIDE = NINT(XSC(1)) + NCORNER = NINT(XSC(2)) + + ! XS_CONT CARD (Cf DRAG2PARCS Manual for details on HELIOS format) + IF (IPRINT>5) WRITE(6,*) 'SETBU: WRITE BURNUP INFO' + ! HEADER OF XS_CONT card + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : KINF' + WRITE(IPHEL,*) 'List Title(s) 1) ===========================' + WRITE(IPHEL,*) ' 2) %STAT_xxxx' + WRITE(IPHEL,*) ' 3) ===========================' + WRITE(IPHEL,*) ' 4)%XS_CONT' + WRITE(IPHEL,*) ' 5)Meaning : NBN,NSIDE,NCORNER,' + 1 //'VFCM' + + + ! RIEGO block of HELIOS.dra file + CALL SET_RIEGO(IPHEL) + + + ! Set the content of XS_CONT in HELIOS.dra + WRITE(IPHEL,'(25X,4A14)') ' NBN', + 1 ' NSIDE',' NCORNER',' VFCM' + WRITE(IPHEL,200) 'Label E','.-.-E-.-.','.-.-E-.-.','.-.-E-.-.', + 1 '1-.-E-.-.' + WRITE(IPHEL,'(I4,1X,A,I4,A,A,I4,A,I5,3I12,ES12.5E2)') + 1 1,BRANCH(1:2),ITBRAN,' ',BRANCH(1:2),ITBRAN,':', + 2 0,NBU,NSIDE,NCORNER, + 3 XSC(3) + + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + ! BURNUP INFORMATION + + + ! HEADER OF Burnup card + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : KINF' + WRITE(IPHEL,*) 'List Title(s) 1) ===========================' + WRITE(IPHEL,*) ' 2) %XS_STAT' + WRITE(IPHEL,*) ' 3) ===========================' + WRITE(IPHEL,*) ' 4)Meaning : Bunrup' + + + ! RIEGO block of HELIOS.dra file + CALL SET_RIEGO(IPHEL) + + + WRITE(IPHEL,'(30X,A6)') 'BURNUP' + WRITE(IPHEL,210) 'Label E','.-.-E-.-.' + ! LOOP over burnup points + DO IT=1, NBU + + WRITE(IPHEL,220) IT,BRANCH(1:2),ITBRAN,' ', + 1 BRANCH(1:2),ITBRAN,':',NINT(BURN(IT)),BURN(IT)/1000.0 + + ENDDO + + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + + ! format of HELIOS.dra file + 200 FORMAT(6X,A,12X,A,3X,A,3X,A,3X,A) + 210 FORMAT(6X,A,12X,A) + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5,6X,F6.3) + END + + SUBROUTINE READXS (IPDAT, XS, SCAT, ND, DIV, NGP, + > NXS, ADF, CDF, GFF, NBU, NADF, + > DATSRC, GRID, NCDF, NCOLA, NROWA, LADF, + > LCDF, LGFF, LXES, LDET, SIGNAT, LMER, + > IPRINT, ADF_T, FLXL, FLXR, CURL, CURR) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Recover cross section from the INFO data block. +* +*parameters: input +* IPDAT address of info data block +* XS table of cross sections +* SCAT scattering matrix +* ND number densities for xenon and samarium +* DIV divers info directory +* NGP number of energy groups +* NXS number of cross sections +* NBU number of burnup points +* ADF assembly dicontinuity factor +* NADF number of surfaces in assembly +* NCDF number of corners in assembly +* NCOLA number of pin in assembly along x-axis +* NROWA number of pin in assembly along y-axis +* GRID type of gridding for branching calculation +* LADF flag for assembly discontinuity factors +* LCDF flag for corner discontinuity factors +* LGFF flag for group form factors +* LXES flag for microscopic cross sections +* DAT SRC array containing the DATA source (reflector of fuel) +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPDAT + INTEGER NGP,NBU,NXS,NADF,GRID,NCDF,LMER + REAL DATSRC(5) + REAL XS(NGP,NXS,NBU) + REAL SCAT(NGP*NGP,NBU) + REAL ND(2,NBU) + REAL DIV(3,NBU) + REAL ADF(NADF,NGP,NBU) + REAL FLXL(NGP,NBU) + REAL FLXR(NGP,NBU) + REAL CURL(NGP,NBU) + REAL CURR(NGP,NBU) + REAL CDF(NCDF,NGP,NBU) + REAL GFF(NCOLA,NROWA,NGP,NBU) + REAL ADFMOY(NGP,NBU) + LOGICAL LADF,LXES,LCDF,LGFF,LDET + CHARACTER*16 SIGNAT +*---- +* LOCAL VARIABLES +*---- + TYPE(C_PTR) IPTH,KPTH + INTEGER BU + CHARACTER*3 ADF_T + + IF(IPRINT>5) WRITE(6,*) 'READXS: RECOVER INFO DATA BLOCK' + + ! LOOP over burnup points + DO BU=1, NBU + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'BRANCH_INFO',1) + IPTH=LCMGID(IPDAT,'CROSS_SECT') + KPTH=LCMDIL(IPTH,BU) + CALL LCMSIX(KPTH,'MACROLIB_XS',1) + CALL LCMGET(KPTH,'XTR',XS(1:NGP,1,BU)) + CALL LCMGET(KPTH,'ABSORPTION',XS(1:NGP,2,BU)) + CALL LCMGET(KPTH,'X_NU_FI',XS(1:NGP,3,BU)) + CALL LCMGET(KPTH,'KAPPA_FI',XS(1:NGP,4,BU)) + IF(LXES)CALL LCMGET(KPTH,'SFI',XS(1:NGP,7,BU)) + IF(LADF) THEN + IF (ADF_T.EQ.'DRA')THEN + CALL LCMGET(KPTH,'ADF',ADF(:,:,BU)) + ELSE IF(ADF_T.EQ.'GEN')THEN + CALL LCMGET(KPTH,'FLXL',FLXL(:,BU)) + CALL LCMGET(KPTH,'FLXR',FLXR(:,BU)) + CALL LCMGET(KPTH,'CURR',CURR(:,BU)) + CALL LCMGET(KPTH,'CURL',CURL(:,BU)) + ENDIF + ENDIF + IF(LCDF)CALL LCMGET(KPTH,'CDF',CDF(:,:,BU)) + IF(LGFF)CALL LCMGET(KPTH,'GFF',GFF(:,:,:,BU)) + + + CALL LCMGET(KPTH,'SCAT',SCAT(1:NGP*NGP,BU)) + IF(DATSRC(3)==1) THEN + + IF((LXES).OR.(LDET)) THEN + CALL LCMSIX(KPTH,' ',2) + CALL LCMSIX(KPTH,'MICROLIB_XS',1) + + IF(LDET) CALL LCMGET(KPTH,'DET',XS(1:NGP,8,BU)) + IF (LXES) THEN + CALL LCMGET(KPTH,'XENG',XS(1:NGP,5,BU)) + CALL LCMGET(KPTH,'SMNG',XS(1:NGP,6,BU)) + CALL LCMGET(KPTH,'XEND',ND(1,BU)) + CALL LCMGET(KPTH,'SMND',ND(2,BU)) + ENDIF + ENDIF + IF((GRID<2).and. (SIGNAT.EQ.'L_SAPHYB')) THEN + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'BRANCH_INFO',1) + IPTH=LCMGID(IPDAT,'DIVERS') + KPTH=LCMDIL(IPTH,BU) + CALL LCMGET(KPTH,'KEFF',DIV(1,BU)) + CALL LCMGET(KPTH,'KINF',DIV(2,BU)) + CALL LCMGET(KPTH,'B2',DIV(3,BU)) + ENDIF + ENDIF + ENDDO + IF (LMER.EQ.1) THEN + DO I=1,NGP + DO BU=1,NBU + ADFMOY(I,BU)=SUM(ADF(1:NADF,I,BU))/NADF + ENDDO + ENDDO + + DO I=1,NGP + DO BU=1,NBU + SCAT(I,BU)=SCAT(I,BU)/ADFMOY(NGP-1+1,BU) + SCAT(I+NGP,BU)=SCAT(I+NGP,BU)/ADFMOY(NGP-I+1,BU) + XS(I,1,BU)=XS(I,1,BU)*ADFMOY(I,BU) + XS(I,2:NXS,BU)=XS(I,2:NXS,BU)/ADFMOY(I,BU) + ENDDO + ENDDO + ENDIF + CALL LCMSIX(IPDAT,' ',0) + END + + SUBROUTINE SETXS( IPHEL, BRANCH, ITBRAN, XS, NGP, NXS, + > NBU, BURN, DATSRC, LXES, LDET, IPRINT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* XS table of cross sections +* NGP number of energy groups +* NXS number of cross sections +* NBU number of burnup points +* BURN set of burnup points +* IPRINT control the printing on screen +* DATSRC array containing the DATA source (reflector of fuel) +* LXES flag for presence of micoscopic cross sections +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,NXS,NGP,ITBRAN +! REAL XS(NGP,NXS,NBU),BURN (NBU),DATSRC(3) + REAL XS(NGP,NXS,NBU),BURN (NBU),DATSRC(5) + CHARACTER(len=4) BRANCH,XS_name + LOGICAL LXES,LDET +*---- +* LOCAL VARIABLES +*---- + INTEGER XST ! INDEX OF CROSS SECTIONS + REAL FA_KIND + LOGICAL :: LXS = .TRUE. + + IF(IPRINT>5) WRITE(6,*) 'SETXS: WRITE INFO FOR A BANCH' + + FA_KIND=DATSRC(3) + + ! LOOP OVER CROSS SECTIONS TYPE + DO XST=1, NXS + LXS = .TRUE. + SELECT CASE (XST) + CASE (1) + XS_name = 'STR' ! TRANSPORT XS + CASE (2) + XS_name = 'SAB' ! ABSORPTION XS + CASE (3) + XS_name = 'SNF' ! NU SIGMA FISSION XS + CASE (4) + XS_name = 'SKF' ! KAPPA FISSION XS + CASE (5) + IF(.NOT. LXES) LXS=.FALSE. + XS_name = 'XENG' ! XE MICROSCOPIC ABSORPTION XS + CASE (6) + IF(.NOT. LXES) LXS=.FALSE. + XS_name = 'SMNG' ! SM MICROSCOPIC ABSORPTION XS + CASE (7) + IF(.NOT. LXES) LXS=.FALSE. + XS_name = 'SFI' ! FISSION XS + CASE (8) + IF(.NOT. LDET) LXS=.FALSE. + XS_name = 'DET' ! DETECTOR XS + END SELECT + IF(LXS) THEN + ! LABEL FOR XS TYPE + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,110) XS_name + WRITE(IPHEL,120) XS_name + + 110 FORMAT(29H List Title(s) 1) %XS_PRIN %,A) + 120 FORMAT(34H Meaning : (.-.-E-G-.) G-th Group ,A, + 1 15H cross sections) + + CALL SET_RIEGO(IPHEL) + + ! LOOP OVER ENERGY GROUPS + ! CREATION OF LABEL FOR CROSS SECTIONS + DO IT=1, NGP + IF(IT==1) THEN + WRITE(IPHEL,'(27X,A4,A2)',advance='no') XS_name,'Xs' + ELSE IF(IT==NGP .OR. IT==8 ) THEN + WRITE(IPHEL,'(5X,A4,A2)')XS_name,'Xs' + ELSE + WRITE(IPHEL,'(5X,A4,A2)',advance='no')XS_name,'Xs' + ENDIF + ENDDO + DO IT=1, NGP + IF(IT==1) THEN + WRITE(IPHEL,'(6X,A,12X,A,I1,A)',advance='no') + 1 'Label E','.-.-E-',IT,'-.' + ELSE IF(IT==NGP .OR. IT==8 ) THEN + WRITE(IPHEL,'(3X,A,I1,A)') + 1 '.-.-E-',IT,'-.' + ELSE + WRITE(IPHEL,'(3X,A,I1,A)',advance='no') + 1 '.-.-E-',IT,'-.' + ENDIF + ENDDO + + ! STORE XS DATA IN HELIOS.DRA FILE + ! LOOP OVER BURNUP POINTS + DO NB=1, NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + DO NG=1, NGP + IF(NG == 1) THEN + WRITE(IPHEL,'(ES12.5E2)',advance='no') XS(NG,XST,NB) + ELSE IF(NG.NE.NGP) THEN + WRITE(IPHEL,'(ES12.5E2)',advance='no') XS(NG,XST,NB) + ELSE + WRITE(IPHEL,'(ES12.5E2)') XS(NG,XST,NB) + ENDIF + ENDDO ! NG + ENDDO ! NB + + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + ENDIF + ENDDO ! XST + END + + SUBROUTINE SETADF( IPHEL, BRANCH, ITBRAN, ADF, NADF, NGP, + > NBU, BURN, IPRINT,ADF_T, FLXR, FLXL, + > CURL, CURR ) +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* ADF Assembly discontinuity factor +* NADF number of Assembly discontinuity factor +* NGP number of energy groups +* NBU number of burnup points +* BURN set of burnup points +* IPRINT control the printing on screen +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,NGP,NADF,ITBRAN,NIT,IPRINT + REAL ADF(NADF,NGP,NBU),BURN (NBU) + REAL FLXR(NGP,NBU),FLXL(NGP,NBU) + REAL CURR(NGP,NBU),CURL(NGP,NBU), BNO(NGP,NBU) + CHARACTER*3 ADF_T + CHARACTER BRANCH*4 +*---- +* LOCAL ARGUMENTS +*---- + INTEGER IT,ITA + REAL ADF_TMP(NADF,NGP,NBU) + CHARACTER*4 BOUND + CHARACTER*12 LABEL,XSPRIN + + IF(IPRINT>5) WRITE(6,*) 'SETADF: RECOVER ADF INFO' + IF (ADF_T.EQ.'DRA') THEN + NIT=0 + IF((NADF.NE.1) .AND. (NADF.NE.4)) THEN + WRITE(6,*) "NUMBER OF ADF : ",NADF + CALL XABORT (" NUMBER OF ADF MUST BE 4 (SEL/GET/DRA) OR 1 " + > //"(DRA)") + ELSE IF(NADF == 4) THEN + ! CASE FOR SEL OR GET ADF + ! REARRANGEMENT OF ADF ORDER TO MATCH HELIOS iN CASE OD SEL OR + ! GET ADF + ! SAPHYB SURF => SIDE + ! 1 N + ! 2 E + ! 3 S + ! 4 W + ! HELIOS SURF => SIDE + ! 1 W + ! 2 S + ! 3 E + ! 4 N + + ADF_TMP(:,:,:)=ADF(:,:,:) + ADF(1,:,:)=ADF_TMP(4,:,:) + ADF(2,:,:)=ADF_TMP(3,:,:) + ADF(3,:,:)=ADF_TMP(2,:,:) + ADF(4,:,:)=ADF_TMP(1,:,:) + ENDIF + NIT = NGP*NADF + ! LABEL FOR XS TYPE : ADF + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN %SDF 2' + WRITE(IPHEL,*)'2) Meaning : (F-.-E-G-.) F-Face, G-Group' + IF(NADF==4) THEN + WRITE(IPHEL,*)'3) F=1/2/3/4 denotes W/S/E/N Side' + ELSE + WRITE(IPHEL,*)'3) F=1 denotes average ADF' + ENDIF + + CALL SET_RIEGO(IPHEL) + + ! LOOP OVER ENERGY GROUPS + ! CREATION OF LABEL FOR CROSS SECTIONS + ngrp=1 + nsurf=0 + DO ITA=1,NIT,7 ! ITA + NITTMP=MIN(NIT-ITA+1,7) + ngrpb=ngrp + nsurfb=nsurf + DO IT=1,NITTMP + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(30X,A6)',advance='no') 'SideDF' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(30X,A6)') 'SideDF' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(6X,A6)')'SideDF' + ELSE + WRITE(IPHEL,'(6X,A6)',advance='no')'SideDF' + ENDIF + ENDDO + + DO IT=1,NITTMP + nsurf=nsurf+1 + IF(nsurf.GT.NADF) THEN + nsurf=1 + ngrp=ngrp+1 + ENDIF + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,14X,I1,A,I1,A)',advance='no') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,14X,I1,A,I1,A)') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(3X,I1,A,I1,A)') nsurf,'-.-E-',ngrp,'-.' + ELSE + WRITE(IPHEL,'(3X,I1,A,I1,A)',advance='no') + > nsurf,'-.-E-',ngrp,'-.' + ENDIF + ENDDO + + ! STORE XS DATA IN HELIOS.DRA FILE + ! LOOP OVER BURNUP POINTS + + DO NB=1,NBU + ngrp=ngrpb + nsurf=nsurfb + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + DO IT=1,NITTMP + nsurf=nsurf+1 + IF(nsurf.GT.NADF) THEN + nsurf=1 + ngrp=ngrp+1 + ENDIF +! in xs_helios_read.f90 +! l1015 READ(XS_set_unit,hfnF5) rvector(1:RIEGO%how_many_data) +! in xs_heliosM.f90 +! l104 hfnF5='( X,8F13.5) ' + IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(5X,F7.5)') ADF(nsurf,ngrp,NB) + ELSE + WRITE(IPHEL,'(5X,F7.5)',advance='no') ADF(nsurf,ngrp,NB) + ENDIF + ENDDO + ENDDO + + WRITE(IPHEL,*) + ENDDO + + + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + ELSE IF (ADF_T.EQ.'GEN') THEN + DO I=1,4 + SELECT CASE (I) + CASE(1) + XSPRIN='%PHW 1' + BOUND='West' + LABEL='FluxWest' + BNO=FLXL + CASE(2) + XSPRIN='%PHE 1' + BOUND='East' + LABEL='FluxEast' + BNO=FLXR + CASE(3) + XSPRIN='%JNW 1' + BOUND='West' + LABEL='JnetWest' + BNO=CURL + CASE(4) + XSPRIN='%JNE 1' + BOUND='East' + LABEL='JnetEast' + BNO=CURR + END SELECT + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN ',XSPRIN + WRITE(IPHEL,'(16X,3A)')'2) Meaning : (E-.-E-G-.) ', + > BOUND,'-Face, G-Group' + + CALL SET_RIEGO(IPHEL) + WRITE(IPHEL,'(31X,A8,4X,A8)') LABEL,LABEL + WRITE(IPHEL,'(18X,A)') 'Label E 1-.-E-1-. 1-.-E-2-.' + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2,1X,ES11.4E2)') BNO(:,NB) + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + ENDDO + ENDDO + ENDIF + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END + + SUBROUTINE SETCDF( IPHEL, BRANCH, ITBRAN, CDF, NCDF, NGP, + > NBU, BURN, IPRINT ) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* CDF Corner discontinuity factor +* NCDF number of corner discontinuity factor +* NGP number of energy groups +* NBU number of burnup points +* BURN set of burnup points +* IPRINT control the printing on screen +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,NGP,NCDF,ITBRAN,NIT,IPRINT + REAL CDF(NCDF,NGP,NBU),BURN (NBU) + CHARACTER BRANCH*4 +*---- +* LOCAL ARGUMENTS +*---- + INTEGER IT,ITA + + IF(IPRINT>5) WRITE(6,*) 'SETCDF: RECOVER CDF INFO' + NIT = NGP*NCDF + + ! LABEL FOR XS TYPE : CDF + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN %CDF' + WRITE(IPHEL,*)'2) Meaning : (F-.-E-G-.) F-Face, G-Group' + IF(NCDF==1) THEN + WRITE(IPHEL,*)'3) F=1 denotes average CDF' + ELSE + WRITE(IPHEL,*)'3) F= custom' + ENDIF + + CALL SET_RIEGO(IPHEL) + + ! LOOP OVER ENERGY GROUPS + ! CREATION OF LABEL FOR CROSS SECTIONS + ngrp=1 + nsurf=0 + DO ITA=1,NIT,7 ! ITA + NITTMP=MIN(NIT-ITA+1,7) + ngrpb=ngrp + nsurfb=nsurf + DO IT=1,NITTMP + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(30X,A6)',advance='no') 'CornDF' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(30X,A6)') 'CornDF' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(6X,A6)')'CornDF' + ELSE + WRITE(IPHEL,'(6X,A6)',advance='no')'CornDF' + ENDIF + ENDDO + + DO IT=1,NITTMP + nsurf=nsurf+1 + IF(nsurf.GT.NCDF) THEN + nsurf=1 + ngrp=ngrp+1 + ENDIF + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,15X,I1,A,I1,A)',advance='no') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,15X,I1,A,I1,A)') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(2X,I1,A,I1,A)') nsurf,'-.-E-',ngrp,'-.' + ELSE + WRITE(IPHEL,'(2X,I1,A,I1,A)',advance='no') + > nsurf,'-.-E-',ngrp,'-.' + ENDIF + ENDDO + + ! STORE XS DATA IN HELIOS.DRA FILE + ! LOOP OVER BURNUP POINTS + + + DO NB=1,NBU + ngrp=ngrpb + nsurf=nsurfb + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + DO IT=1,NITTMP + nsurf=nsurf+1 + IF(nsurf.GT.NCDF) THEN + nsurf=1 + ngrp=ngrp+1 + ENDIF +! in xs_helios_read.f90 l1015 READ(XS_set_unit,hfnF5) rvector(1:RIEGO +! in xs_heliosM.f90 l104 hfnF5='( X,8F13.5) ' + IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(5X,F7.5)') CDF(nsurf,ngrp,NB) + ELSE + WRITE(IPHEL,'(5X,F7.5)',advance='no') CDF(nsurf,ngrp,NB) + ENDIF + ENDDO + ENDDO + + WRITE(IPHEL,*) + ENDDO + + + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + END + + SUBROUTINE SETGFF( IPHEL, BRANCH, ITBRAN, GFF, NCOLA, NROWA, + > NPART, NGP, NBU, BURN, NGFF , IPRINT, + > VERS) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* GFF Group form factor +* NCOLA number of pin in assembly along x-axis +* NROWA number of pin in assembly along y-axis +* NPART symmetry level of assembly +* 0 1 2 3 +* whole half quarter eight +* PARCS Version 32.17 and GenPMAXS 6.1 +* 123XXXX 1...... 123X... 1...... +* XXXXXXX 23..... XXXX... 23..... +* XXXXXXX XXX.... XXXX... XXX.... +* XXXXXXX XXXX... XXXn... XXXn... +* XXXXXXX XXXXX.. ....... ....... +* XXXXXXX XXXXXX. ....... ....... +* XXXXXXn XXXXXXn ....... ....... +* Note: Helios format is different from the documentation +* provided in GenPMAXS. +* Version 32.18 and GenPMAXS 6.2 +* 123XXXX 1...... ....... ....... +* XXXXXXX 23..... ....... ....... +* XXXXXXX XXX.... ....... ....... +* XXXXXXX XXXX... ...123X ...1... +* XXXXXXX XXXXX.. ...XXXX ...23.. +* XXXXXXX XXXXXX. ...XXXX ...XXX. +* XXXXXXn XXXXXXn ...XXXn ...XXXn +* Note: Helios format is the same as in the documentation +* provided in GenPMAXS. +* NGP number of energy groups +* NBU number of burnup points +* BURN set of burnup points +* IPRINT control the printing on screen +* VERS version of PARCS to be used +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,NGP,ITBRAN,NIT,IPRINT,NGFF + REAL GFF(NCOLA,NROWA,NGP,NBU),BURN (NBU),VERS + CHARACTER BRANCH*4 +*---- +* LOCAL ARGUMENTS +*---- + INTEGER IT,ITA,ipxn,ipyn + + IF(IPRINT>5) WRITE(6,*) 'SETGFF: RECOVER GFF INFO' + NIT = NGP*NCOLA*NROWA + NPIN2 = NCOLA*NROWA + NCOLA2= 1 + ipxn=1 + ipyn=1 + IF((NPART.GE.1).AND.(NCOLA.NE.NROWA))THEN + CALL XABORT('@D2PBRA: NPART > 0 and NCOLA.NE.NROWA') + ENDIF + IF(NPART.EQ.1)THEN + NIT=NGP*NCOLA*(NCOLA+1)/2 + NPIN2 = NCOLA*(NCOLA+1)/2 + ELSEIF(NPART.EQ.2)THEN + NCOLA2=CEILING(REAL(NCOLA)/2) + NIT=NGP*NCOLA2*NCOLA2 + NPIN2 = NCOLA2*NCOLA2 + ELSEIF(NPART.EQ.3)THEN + NCOLA2=CEILING(REAL(NCOLA)/2) + NIT=NGP*NCOLA2*(NCOLA2+1)/2 + NPIN2 = NCOLA2*(NCOLA2+1)/2 + ENDIF + IF((VERS.GE.3.2018).AND.(NPART.GE.2))THEN + ipxn=CEILING(REAL(NCOLA)/2) + ipyn=CEILING(REAL(NCOLA)/2) + NCOLA2=NCOLA + ENDIF + IF (NGFF.NE.NPIN2) THEN + WRITE (6,*) '@D2PBRA: INCOHERENT NUMBER OF GFF IN MCO (', + > NGFF,') AND COMPUTED PART OF ASSEMBLY (PART =', + > NPART,').' + CALL XABORT ('') + ENDIF + ! LABEL FOR XS TYPE: GFF + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_GFF %GFF 1 ' + WRITE(IPHEL,*)'2) Meaning : (F-.-E-G-.) F-Face, G-Group' + WRITE(IPHEL,*)'3) F=1 to NPIN*NPIN average GFF' + + CALL SET_RIEGO(IPHEL) + + ! LOOP OVER ENERGY GROUPS + ! CREATION OF LABEL FOR CROSS SECTIONS + ngrp=1 + nsurf=0 + ipx=ipxn-1 + ipy=ipyn + DO ITA=1,NIT,7 ! ITA + NITTMP=MIN(NIT-ITA+1,7) + ngrpb=ngrp + nsurfb=nsurf + ipxb=ipx + ipyb=ipy + DO IT=1,NITTMP + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(33X,A6)',advance='no') 'GNorRR' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(33X,A6)') 'GNorRR' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(8X,A6)')'GNorRR' + ELSE + WRITE(IPHEL,'(8X,A6)',advance='no')'GNorRR' + ENDIF + ENDDO + DO IT=1,NITTMP + nsurf=nsurf+1 + IF(nsurf.GT.NPIN2) THEN + nsurf=1 + ngrp=ngrp+1 + ENDIF + IF((IT==1).AND.(IT.LT.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,12X,I3,A,I1,A)',advance='no') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSEIF((IT==1).AND.(IT.EQ.NITTMP)) THEN + WRITE(IPHEL,'(6X,A,12X,I3,A,I1,A)') + > 'Label E',nsurf,'-.-E-',ngrp,'-.' + ELSE IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(1X,I3,A,I1,A)') nsurf,'-.-E-',ngrp,'-.' + ELSE + WRITE(IPHEL,'(1X,I3,A,I1,A)',advance='no') + > nsurf,'-.-E-',ngrp,'-.' + ENDIF + ENDDO + ! STORE XS DATA IN HELIOS.DRA FILE + ! LOOP OVER BURNUP POINTS + + + DO NB=1,NBU + ngrp=ngrpb + nsurf=nsurfb + ipx=ipxb + ipy=ipyb + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + DO IT=1,NITTMP + ipx=ipx+1 + IF(((NPART.EQ.0).AND.(ipx.GT.NCOLA)).OR. + > ((NPART.EQ.2).AND.(ipx.GT.NCOLA2)).OR. + > (((NPART.EQ.1).OR.(NPART.EQ.3)).AND.(ipx.GT.ipy)))THEN + ipx=ipxn + ipy=ipy+1 + ENDIF + nsurf=nsurf+1 + IF(nsurf.GT.NPIN2) THEN + nsurf=1 + ngrp=ngrp+1 + ipy=ipxn + ipx=ipyn + ENDIF +! in xs_helios_read.f90 l1015 READ(XS_set_unit,hfnE4) rvector(1:RIEGO +! in xs_heliosM.f90 l104 hfnF5='( X,8F13.5) ' +! l114 hfnE4=hfnE5 +! l115 hfnE4(11:11)='4' + IF(IT.EQ.NITTMP) THEN + WRITE(IPHEL,'(5X,F7.4)') GFF(ipx,ipy,ngrp,NB) + ELSE + WRITE(IPHEL,'(5X,F7.4)',advance='no') GFF(ipx,ipy,ngrp,NB) + ENDIF + ENDDO + ENDDO + + WRITE(IPHEL,*) + ENDDO + + + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + + END + + SUBROUTINE SETSCT(IPHEL,BRANCH,ITBRAN,SCAT,NGP,NBU,BURN,IPRINT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the scattering cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* SCAT table of elements of scattering matrix +* NGP number of energy groups +* NBU number of burnup points +* BURN set of burnup points +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,NGP,ITBRAN,IPRINT + REAL SCAT(NGP*NGP,NBU),BURN (NBU) + + CHARACTER BRANCH*2 + +*---- +* LOCAL ARGUMENTS +*---- + INTEGER IT,G,I + REAL SCATTMP(8,NBU) + CHARACTER*45 LABEL + CHARACTER*45 LABELE + CHARACTER*210 :: TOTLABELE = '' + CHARACTER*210 :: TOTLABEL = '' + + IF(IPRINT>5) WRITE(6,*) 'SETSCT: WRITE SCATTERING INFO' + + ! LABEL FOR SCATTERING XS + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,110) '%SCT' + WRITE(IPHEL,*)'Meaning : (.-.-E-G-O) From O to G-th Group scat' + + CALL SET_RIEGO(IPHEL) + IT=1 + ITT=1 + I=0 + ! CREATION OF HEADER FOR SCATTERING BLOCK IN HELIOS.DRA FILE + + DO G=1,NGP + DO J=1, NGP + IF (IT==1) THEN + TOTLABELE = '' + TOTLABEL = '' + WRITE(LABELE,'(6X,A7,14X)') 'Label E' + TOTLABELE=TOTLABELE(1:len( trim(TOTLABELE) )) + 1 // LABELE + ENDIF + IF (IT==1) THEN + WRITE(LABEL,'(25X,A)')'ScattMatrix' + WRITE(LABELE,'(12X,A,I1,A,I1)') + 1 '1-.-E-',G,'-',J + ELSE + WRITE(LABEL,'(1X,A)')'ScattMatrix' + WRITE(LABELE,'(3X,A,I1,A,I1)') + 1 '1-.-E-',G,'-',J + ENDIF + SCATTMP(IT,:)=SCAT(ITT,:) + TOTLABEL=TOTLABEL(1:len( trim(TOTLABEL) )) + > //LABEL + TOTLABELE=TOTLABELE(1:len( trim(TOTLABELE) )) + > //LABELE + + IF ((IT==8).OR.(ITT==NGP*NGP)) THEN + WRITE(IPHEL,'(A)') TOTLABEL + WRITE(IPHEL,'(A)') TOTLABELE + DO NB=1, NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(8(ES12.5E2))')SCATTMP(1:IT,NB) + ENDDO + WRITE (IPHEL,*) + TOTLABELE = '' + TOTLABEL = '' + IT=1 + ELSE + IT=IT+1 + ENDIF + + ITT=ITT+1 + ENDDO + ENDDO + + ! DO JT=1, NGP + ! IF(IT==1 .and. JT==1) THEN + ! WRITE(IPHEL,'(28X,A)',advance='no') 'ScattMatrix' + ! ELSE IF((IT==(NGP).and.JT==(NGP)) .OR. JT==7 ) THEN + ! WRITE(IPHEL,'(3X,A)')'ScattMatrix' + ! ELSE + ! WRITE(IPHEL,'(3X,A)',advance='no')'ScattMatrix' + ! ENDIF + ! ENDDO + ! DO IT=1, NGP + ! DO JT=1, NGP + ! IF(IT==1 .and. JT==1) THEN + ! WRITE(IPHEL,'(6X,A,14X,A,I1,A,I1)',advance='no') + ! 1 'Label E','1-.-E-',JT,'-',IT + ! ELSE IF((IT==(NGP).and.JT==(NGP)) .OR. JT==8 ) THEN + ! WRITE(IPHEL,'(5X,A,I1,A,I1)') + ! 1 '1-.-E-',JT,'-',IT + ! ELSE + ! WRITE(IPHEL,'(5X,A,I1,A,I1)',advance='no') + ! 1 '1-.-E-',JT,'-',IT + ! ENDIF + ! ENDDO + ! ENDDO + ! + ! DO NB=1, NBU + ! WRITE(IPHEL,220,advance='no') NB,'t',BRANCH(1:2), + ! 1 ITBRAN,'(s',BRANCH(1:2),ITBRAN,'):',NINT(BURN(NB)) + ! DO IG=1, NGP*NGP + ! IF(IG == 1) THEN + ! WRITE(IPHEL,'(3X,ES11.5E2)',advance='no') SCAT(IG,NB) + ! ELSE IF(IG.EQ.NGP*NGP) THEN + ! WRITE(IPHEL,'(3X,ES11.5E2)') SCAT(IG,NB) + ! ELSE IF(IG.EQ.8 ) THEN + ! WRITE(IPHEL,'(3X,ES11.5E2)') SCAT(IG,NB) + ! ELSE + ! WRITE(IPHEL,'(3X,ES11.5E2)',advance='no') SCAT(IG,NB) + ! ENDIF + ! ENDDO + ! ENDDO + + 110 FORMAT(28H List Title(s) 1) %XS_SCT ,A) + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + END + + SUBROUTINE SETND(IPHEL,BRANCH,ITBRAN,ND,NBU,BURN,IPRINT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the scattering cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* NGP number of energy groups +* NBU number of burnup points +* ND number densities for Xenon and samarium : KEFF , KINF, B2 +* BURN set of burnup points +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,ITBRAN,IPRINT + REAL ND(2,NBU),BURN (NBU) + CHARACTER BRANCH*2 +*---- +* LOCAL ARGUMENTS +*---- + INTEGER NB + + IF(IPRINT>5) WRITE(6,*) 'SETND: WRITE HEADER FOR XENON DENSITY' + + ! CREATION OF HEADER FOR XENON DENSITY + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_XESM %XEND' + WRITE(IPHEL,*)'Meaning : Xe-135 Number Density [/cm.barn]' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(31X,A)') 'nXe' + WRITE(IPHEL,'(6X,A,12X,A)') 'Label E','1-1-E-.-.' + + ! LOOP OVER BUNRNUP + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2)') ND(1,NB) + ENDDO + + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + ! CREATION OF HEADER FOR SAMARIUM DENSITY + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_XESM %SMND' + WRITE(IPHEL,*)'Meaning : SM-149 Number Density [/cm.barn]' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(27X,A)') 'nSm' + WRITE(IPHEL,'(6X,A,12X,A)') 'Label E','1-1-E-.-.' + + ! LOOP OVER BUNRNUP + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2)') ND(2,NB) + ENDDO + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END + + SUBROUTINE SETDIV(IPHEL,BRANCH,ITBRAN,DIV,NBU,BURN,IPRINT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the scattering cross sections for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*parameters: input +* IPHEL file unit of the HELIOS.dra file +* BRANCH nature of the current branch ( CR, DC, CB, TC, TM etc ) +* ITBRAN index of the current branch +* NGP number of energy groups +* NBU number of burnup points +* DIV conttnent of DIV table : KEFF , KINF, B2 +* BURN set of burnup points +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPHEL,NBU,ITBRAN,IPRINT + REAL DIV(3,NBU),BURN (NBU) + CHARACTER BRANCH*2 +*---- +* LOCAL ARGUMENTS +*---- + INTEGER NB + REAL M2 + + IF(IPRINT>5) WRITE(6,*) 'SETDIV: WRITE HEADER FOR DIVERS INFO' + + ! CREATION OF HEADER FOR DIVERS INFO (B2, KEFF, KINF) + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : KINF' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN %KINF' + WRITE(IPHEL,*)' Meaning : K-eff, K-inf, M^2, B^2 [cm^-2] ' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(27X,A,10X,A,6X,A,6X,A)') 'K-EFF','KINF', + 1 'MigrArea','CritArea' + WRITE(IPHEL,'(6X,A,12X,A,5X,A,5X,A,5X,A)') + 1 'Label E','.-.-E-.-.','.-.-E-.-.','.-.-E-.-.','.-.-E-.-.' + ! LOOP OVER BURNUP POINTS + DO NB=1,NBU + M2=(DIV(2,NB)-1)/(DIV(3,NB)) + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(5X,F7.5,5X,F7.5,ES12.5E2,ES12.5E2)') + 1 DIV(1,NB),DIV(2,NB),M2,DIV(3,NB) + ENDDO + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END + + SUBROUTINE SETTH( IPHEL, BRANCH, ITBRAN, BURN, NBU, JOBOPT, + > NGP, IPDAT, IPRINT ) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Write in the HELIOS.dra file the invaraint TH DATA for a banch +* (including all burnup points). +* This routine write sequentially the HELIOS.dra file, branch after +* branch. +* +*----------------------------------------------------------------------- +* + USE GANLIB + TYPE(C_PTR) IPDAT,IPTH,KPTH + INTEGER :: DIM_LAMBDA = 6 + INTEGER NGP,ILONG + INTEGER ITYLCM,NBU,ITBRAN + CHARACTER (len=4) BRANCH,DLAY + CHARACTER JOBOPT(16) + INTEGER :: BU = 1 + REAL BURN(NBU) + REAL YLDXe(NBU),YLDPm(NBU),YLDI(NBU) + REAL OVERV(NGP,NBU),CHI(NGP,NBU),LAMBDA(6,NBU),BETA(6,NBU) + LOGICAL :: LAMB = .FALSE. + LOGICAL :: LCHI = .FALSE. + LOGICAL :: LYLD = .FALSE. + LOGICAL :: LINV = .FALSE. + LOGICAL :: LBET = .FALSE. + + IF(IPRINT>5) WRITE(6,*) 'SETTH: WRITE TH DATA' + + ! RECOVER FLAG INFORMATION + IF(JOBOPT(5)=='T') LCHI = .TRUE. + IF(JOBOPT(7)=='T') LINV = .TRUE. + IF(JOBOPT(9)=='T') LYLD = .TRUE. + IF(JOBOPT(13)=='T') LAMB = .TRUE. + IF(JOBOPT(12)=='T') LBET = .TRUE. + + IF(NGP>2)THEN + CALL XABORT('@D2P: NGP > 2 NOT IMPLEMENTED FOR T/H BLOCK') + ENDIF + + CALL LCMSIX(IPDAT,' ',0) + IPTH=LCMGID(IPDAT,'TH_DATA') + + DO BU=1,NBU + KPTH=LCMDIL(IPTH,BU) + + IF(LCHI) THEN + IF(BU ==1) THEN + CALL LCMLEN(KPTH,'CHI',ILONG,ITYLCM) + IF (ILONG .NE. NGP) THEN + CALL XABORT (' MORE THAN 2 (NGP) VALUES FOR CHI RECORD') + ENDIF + ENDIF + CALL LCMGET(KPTH,'CHI',CHI(1:NGP,BU)) + + ENDIF + + IF(LINV) THEN + CALL LCMGET(KPTH,'OVERV',OVERV(1:NGP,BU)) + + ENDIF + + IF(LYLD) THEN + CALL LCMGET(KPTH,'YLDPm',YLDPm(BU)) + CALL LCMGET(KPTH,'YLDXe',YLDXe(BU)) + CALL LCMGET(KPTH,'YLDI',YLDI(BU)) + + ENDIF + + IF(LAMB)THEN + IF(BU == 1) THEN + CALL LCMLEN(KPTH,'LAMBDA',ILONG,ITYLCM) + IF (ILONG .NE. DIM_LAMBDA) THEN + CALL XABORT('MORE THAN 6 (NDLAY) VALUES FOR LAMBDA RECORD') + ENDIF + ENDIF + CALL LCMGET(KPTH,'LAMBDA',LAMBDA(1:DIM_LAMBDA,BU)) + ENDIF + + IF(LBET)THEN + IF(BU == 1) THEN + CALL LCMLEN(KPTH,'BETA',ILONG,ITYLCM) + IF (ILONG .NE. DIM_LAMBDA) THEN + CALL XABORT('MORE THAN 6 (NDLAY) VALUES FOR BETA RECORD') + ENDIF + ENDIF + CALL LCMGET(KPTH,'BETA',BETA(1:DIM_LAMBDA,BU)) + ENDIF + ENDDO + + IF(LCHI) CALL SET_CHI(IPHEL,BRANCH,ITBRAN,BURN,CHI,NGP,NBU) + IF(LINV) CALL SET_OVERV(IPHEL,BRANCH,ITBRAN,BURN,OVERV,NGP,NBU) + IF(LYLD) CALL SET_YIELD(IPHEL,BRANCH,ITBRAN,BURN,YLDPm,YLDXe, + > YLDI,NBU) + IF(LAMB) THEN + DLAY='LAMB' + CALL SET_DLAY(IPHEL,BRANCH,ITBRAN,BURN,LAMBDA,DIM_LAMBDA,DLAY, + > NBU) + ENDIF + IF(LBET) THEN + DLAY='BETA' + CALL SET_DLAY(IPHEL,BRANCH,ITBRAN,BURN,BETA,DIM_LAMBDA,DLAY,NBU) + ENDIF + END + + SUBROUTINE SET_CHI(IPHEL,BRANCH,ITBRAN,BURN,CHI,DIM_CHI,NBU) + INTEGER DIM_CHI,NBU,ITBRAN,NB + REAL CHI(DIM_CHI,NBU),BURN(NBU) + CHARACTER (len=4) BRANCH + + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN %CHI' + WRITE(IPHEL,*) 'Meaning :(.-.-E-G-.) G-th Group Fission Spect' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(31X,A3,11X,A3)') 'chi','chi' + WRITE(IPHEL,'(6X,A,12X,A,5X,A)') 'Label E','1-.-E-1-.','1-.-E-2-.' + ! LOOP OVER burnup points + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2,ES12.5E2)') + 1 CHI(1:DIM_CHI,NB) + ENDDO + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END + + SUBROUTINE SET_OVERV(IPHEL,BRANCH,ITBRAN,BURN,OVERV,NG,NBU) + INTEGER NG,NBU,ITBRAN,NB + REAL OVERV(NG,NBU),BURN(NBU) + CHARACTER (len=4) BRANCH + + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_PRIN %VEL' + WRITE(IPHEL,*) 'Meaning :' + WRITE(IPHEL,*) '(.-.-E-G-.) G-th Group Neutron Velocity [m/s]' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(31X,A3,11X,A3)') 'vel','vel' + WRITE(IPHEL,'(6X,A,12X,A,5X,A)') 'Label E','.-.-E-1-.','.-.-E-2-.' + ! LOOP OVER burnup points + DO NB=1,NBU + + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2,ES12.5E2)') + 1 (1/(OVERV(1:NG,NB))) + ENDDO + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END + + SUBROUTINE SET_YIELD(IPHEL,BRANCH,ITBRAN,BURN,YLDPm,YLDXe,YLDI, + 1 NBU) + INTEGER NBU,ITBRAN,NB,I,iXe,iPm,iI + REAL YLDPm(NBU), YLDXe(NBU),YLDI(NBU),BURN(NBU) + REAL YLD(NBU) + CHARACTER (len=4) BRANCH + CHARACTER (len=5) YIELD + CHARACTER (len=6) MEANING + CHARACTER (len=10 ) LABEL + + DO I=1, 3 + SELECT CASE (I) + CASE(1) + YIELD='YLDXE' + MEANING='Xe-135' + LABEL='YieldXe135' + DO iXe=1,NBU + YLD(iXe)=YLDXe(iXe) + ENDDO + CASE(2) + YIELD='YLDID' + MEANING=' I-135' + LABEL=' YieldI135' + DO iI=1,NBU + YLD(iI)=YLDI(iI) + ENDDO + CASE(3) + YIELD='YLDPM' + MEANING='Pr-149' + LABEL='YieldPm149' + DO iPm=1,NBU + YLD(iPm)=YLDPm(iPm) + ENDDO + END SELECT + + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + WRITE(IPHEL,*) 'List Title(s) 1) %XS_XESM %',YIELD + WRITE(IPHEL,*) 'Meaning : Effective ,',MEANING,' Yield' + + CALL SET_RIEGO(IPHEL) + + WRITE(IPHEL,'(29X,A10)') LABEL + WRITE(IPHEL,'(6X,A,12X,A)') 'Label E','1-.-E-1-.' + ! LOOP OVER burnup points + DO NB=1,NBU + + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2)') YLD(NB) + ENDDO + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + ENDDO + END + + SUBROUTINE SET_DLAY(IPHEL,BRANCH,ITBRAN,BURN,VECT,DIM_LAMBDA, + 1 DLAY,NBU) + INTEGER DIM_LAMBDA,NBU,ITBRAN,NB + REAL VECT(DIM_LAMBDA,NBU),BURN(NBU) + CHARACTER (len=4) BRANCH,DLAY + CHARACTER (len=6) LABEL + + IF(DLAY.EQ.'LAMB') THEN + LABEL="lambda" + ELSE + LABEL="beta " + ENDIF + IF(DIM_LAMBDA.GT.8) THEN + WRITE (6,*) "@D2PBRA: NB OF DELAY NEUTRON GROUPS:",DIM_LAMBDA + CALL XABORT("MAX EIGHT DELAY NEUTRON GROUPS ARE ALLOWED") + ENDIF + WRITE(IPHEL,'()') + WRITE(IPHEL,*) 'List name : PMAX_FILE_DATA' + WRITE(IPHEL,*) 'Labels Array : PrintVector' + IF(LABEL=="lambda")THEN + WRITE(IPHEL,*) 'List Title(s) 1) %XS_BETA %DCAYB 1' + WRITE(IPHEL,*) 'Meaning : Decay Cst of the Delayed Neutron /s' + ELSE + WRITE(IPHEL,*) 'List Title(s) 1) %XS_BETA %BETA 1 ' + WRITE(IPHEL,*) 'Meaning : Delayed Neutron Fraction' + ENDIF + WRITE(IPHEL,*) ' (.-.-E-G-.) From 0 To 6-th Group' + + CALL SET_RIEGO(IPHEL) + IF(DIM_LAMBDA.EQ.6) THEN + WRITE(IPHEL,'(31X,A6,6X,A6,6X,A6,6X,A6,6X,A6,6X,A6)') + > LABEL,LABEL,LABEL,LABEL,LABEL,LABEL + WRITE(IPHEL,200) + > 'Label E','.-.-E-1-.','.-.-E-2-.','.-.-E-3-.','.-.-E-4-.', + > '.-.-E-5-.','.-.-E-6-.' + ! LOOP OVER burnup points + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2,5(ES12.5E2))') + > VECT(1:DIM_LAMBDA,NB) + ENDDO + ELSE IF(DIM_LAMBDA.EQ.8) THEN + WRITE(IPHEL,'(26X,A6,6X,A6,6X,A6,6X,A6,6X,A6,6X,A6,6X,A6)') + > LABEL,LABEL,LABEL,LABEL,LABEL,LABEL,LABEL + WRITE(IPHEL,210) + > 'Label E','.-.-E-1-.','.-.-E-2-.','.-.-E-3-.','.-.-E-4-.', + > '.-.-E-5-.','.-.-E-6-.','.-.-E-7-.' + ! LOOP OVER burnup points + DO NB=1,NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2,6(ES12.5E2))') VECT(1:7,NB) + ENDDO + + WRITE(IPHEL,*) + + WRITE(IPHEL,'(26X,A6)') 'lambda' + WRITE(IPHEL,'(6X,A,12X,A)') 'Label E',LABEL + DO NB=1, NBU + WRITE(IPHEL,220,advance='no') NB,BRANCH(1:2), + 1 ITBRAN,' ',BRANCH(1:2),ITBRAN,':',NINT(BURN(NB)) + WRITE(IPHEL,'(ES12.5E2)') VECT(DIM_LAMBDA,NB) + ENDDO + ENDIF + WRITE(IPHEL,*) '<<< DRAGON >>> Version: 5.0.0 <<< DRAGON >>>' + 200 FORMAT(6X,A,12X,A,3X,A,3X,A,3X,A,3X,A,3X,A) + 210 FORMAT(6X,A,12X,A,3X,A,3X,A,3X,A,3X,A,3X,A,3X,A) + 220 FORMAT(I4,1X,A,I4,A,A,I4,A,I5) + END |
