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/T16WDS.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/T16WDS.f')
| -rw-r--r-- | Donjon/src/T16WDS.f | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/Donjon/src/T16WDS.f b/Donjon/src/T16WDS.f new file mode 100644 index 0000000..537e547 --- /dev/null +++ b/Donjon/src/T16WDS.f @@ -0,0 +1,157 @@ +*DECK T16WDS + SUBROUTINE T16WDS(IPCPO ,NGCCPO,NVXSR ,NMXSR ,IBURN ,EFJ , + > NAMDXS,ITYXS ,FLXINT,FLXDIS,OVERV ,RECXSV, + > IDRXSM,RECXSM,RECSCA) +* +*---- +* +*Purpose: +* Write properties to CPO data structure. +* +*Author(s): +* G. Marleau +* +*Parameters: input +* IPCPO pointer to CPO data structure. +* NGCCPO number of edit groups. +* NVXSR number of vector cross sections. +* NMXSR number of matrix cross sections. +* IBURN burnup step. +* EFJ energy of fission in joules. +* NAMDXS name of vector cross sections. +* ITYXS types of cross sections saved. +* FLXINT volume integrated fluxes. +* FLXDIS flux disadvantage factor. +* OVERV 1/V cross sections. +* RECXSV vector cross sections. +* IDRXSM compression vector for matrix cross sections. +* RECXSM matrix cross sections. +* RECSCA dummy matrix cross sections. +* +*---- +* + USE GANLIB + IMPLICIT NONE + TYPE(C_PTR) IPCPO + INTEGER NGCCPO,NVXSR,NMXSR,IBURN + CHARACTER NAMDXS(NVXSR+NMXSR)*12 + INTEGER IDRXSM(NGCCPO,2),ITYXS(NVXSR+NMXSR) + REAL EFJ,FLXINT(NGCCPO), + > FLXDIS(NGCCPO),OVERV(NGCCPO), + > RECXSV(NGCCPO,NVXSR+NMXSR), + > RECXSM(NGCCPO,NGCCPO,NMXSR), + > RECSCA(NGCCPO*NGCCPO) +*---- +* LOCAL VARIABLES +*---- + INTEGER IOUT,ILCMUP,ILCMDN + CHARACTER NAMSBR*6 + PARAMETER (IOUT=6,ILCMUP=1,ILCMDN=2,NAMSBR='T16WDS') + CHARACTER NAMBRN*12,NAMMAC*12,NAMLEG*2 + INTEGER IVXS,IMXS,IGTO,IGFROM,IGMIN,IGMAX,NXSCMP + REAL DENMAC +*---- +* SET UP BURUP DIRECTORY +*---- + WRITE(NAMBRN,'(A8,I4)') 'BURN ',IBURN + CALL LCMSIX(IPCPO ,NAMBRN,ILCMUP) +*---- +* SAVE ISOTOPES DENSITY, ENERGY, INTEGRATED FLUX, +* DISADVANTAGE FACTOR AND OVERV ON MAIN DIRECTORY +*---- + DENMAC=1.0 + CALL LCMPUT(IPCPO ,'ISOTOPESDENS', 1,2,DENMAC) + CALL LCMPUT(IPCPO ,'ISOTOPES-EFJ', 1,2,EFJ) + CALL LCMPUT(IPCPO ,'FLUX-INTG ',NGCCPO,2,FLXINT) + CALL LCMPUT(IPCPO ,'FLUXDISAFACT',NGCCPO,2,FLXDIS) + CALL LCMPUT(IPCPO ,'OVERV ',NGCCPO,2,OVERV) + NAMMAC='MACR ' + CALL LCMSIX(IPCPO ,NAMMAC,ILCMUP) +*---- +* FIND IF VECTOR XS NOT ALL 0.0 +* AND INITIALIZE ITYXS ACCORDINGLY +* SAVE XS +*---- + DO IVXS=1,NVXSR + ITYXS(IVXS)=0 + DO IGFROM=1,NGCCPO + IF(RECXSV(IGFROM,IVXS) .NE. 0.0) THEN + ITYXS(IVXS)=1 + CALL LCMPUT(IPCPO ,NAMDXS(IVXS), + > NGCCPO,2,RECXSV(1,IVXS)) + ENDIF + ENDDO + ENDDO +*---- +* FIND IF SCATTERING XS NOT ALL 0.0 +* AND INITIALIZE ITYXS ACCORDINGLY +*---- + DO IMXS=1,NMXSR + ITYXS(IMXS+NVXSR)=0 + DO IGTO=1,NGCCPO + DO IGFROM=1,NGCCPO + IF(RECXSM(IGTO,IGFROM,IMXS) .NE. 0.0) THEN + ITYXS(IMXS+NVXSR)=1 + CALL LCMPUT(IPCPO ,NAMDXS(IMXS+NVXSR), + > NGCCPO,2,RECXSV(1,IMXS+NVXSR)) + GO TO 105 + ENDIF + ENDDO + ENDDO + 105 CONTINUE + ENDDO +*---- +* SAVE ITYXS +*---- + CALL LCMPUT(IPCPO ,'XS-SAVED ',NVXSR+NMXSR,1,ITYXS) +*---- +* COMPRESS SCATTERING MATRIX +* RECXSM(IGTO,IGFROM,IMXS) REPRESENT SCATTERING CROSS SECTION +* FROM GROUP "IGFROM" TO GROUP "IGTO" +* IDRXSM(IGTO,1) IS MAXIMUM GROUP NUMBER +* WITH SCATTERING TO "IGTO" GROUP +* IDRXSM(IGTO,2) IS NUMBER OF GROUPS +* WITH SCATTERING TO "IGTO" GROUP +* RECSCA(IX) IS COMPRESSED SCATTERING MATRIX +* IX CAN BE LOCALIZED IN RECXSM(IGTO,IGFROM) USING +* IF(IGTO=1) THEN +* IPOSD=1 +* ELSE +* IPOSD=1+SUM( IDRXSM(IGF,2) , IGF=1,IGTO-1) +* ENDIF +* IF(IGFROM.GT.IDRXSM(IGTO,1)) THEN +* XSSCMP NOT STORED +* ELSE IF(IGFROM.LT.IDRXSM(IGTO,1)-IDRXSM(IGTO,2)+1) THEN +* XSSCMP NOT STORED +* ELSE +* IX=IPOSD+IDRXSM(IGTO,1)-IGFROM +* RECSCA(IX)=RECXSM(IGTO,IGFROM) +* ENDIF +*---- + DO IMXS=1,NMXSR + NXSCMP=0 + DO IGTO=1,NGCCPO + IGMIN=IGTO + IGMAX=IGTO + DO IGFROM=1,NGCCPO + IF(RECXSM(IGTO,IGFROM,IMXS) .NE. 0.0) THEN + IGMIN=MIN(IGMIN,IGFROM) + IGMAX=MAX(IGMAX,IGFROM) + ENDIF + ENDDO + IDRXSM(IGTO,1)=IGMAX + IDRXSM(IGTO,2)=IGMAX-IGMIN+1 + DO IGFROM=IGMAX,IGMIN,-1 + NXSCMP=NXSCMP+1 + RECSCA(NXSCMP)=RECXSM(IGTO,IGFROM,IMXS) + ENDDO + ENDDO + WRITE(NAMLEG,'(I2)') IMXS-1 + CALL LCMPUT(IPCPO,'NJJ '//NAMLEG//' ',NGCCPO,1,IDRXSM(1,1)) + CALL LCMPUT(IPCPO,'IJJ '//NAMLEG//' ',NGCCPO,1,IDRXSM(1,2)) + CALL LCMPUT(IPCPO,'SCAT'//NAMLEG//' ',NXSCMP,2,RECSCA) + ENDDO + CALL LCMSIX(IPCPO ,NAMMAC,ILCMDN) + CALL LCMSIX(IPCPO ,NAMBRN,ILCMDN) + RETURN + END |
