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/D2PDIV.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/D2PDIV.f')
| -rw-r--r-- | Donjon/src/D2PDIV.f | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/Donjon/src/D2PDIV.f b/Donjon/src/D2PDIV.f new file mode 100644 index 0000000..6ee5701 --- /dev/null +++ b/Donjon/src/D2PDIV.f @@ -0,0 +1,290 @@ +*DECK D2PDIV + SUBROUTINE D2PDIV( IPDAT, IPSAP , IPRINT, NGP, NBU, NVAR, + > GRID, NPAR , NREA, NISO, NMAC, NMIL, + > NANI, NADRX , STAIDX, STATE, STAVAR, NSF, + > LABS, SCAT, LADF ) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Recover the DIVERS directory of an elementary calculation and store +* additional XS recovered directly from IPSAP +* WARNING: the GET_DIVERS_INFO subroutine cannot recover DIVERS +* information in the case where cross sections are interpolated by +* the SCR: module +* +*Author(s): +* J. Taforeau +* +*Parameters: input +* IPDAT address of the INFO data block +* IPSAP address of the saphyb object +* IPRINT control the printing on screen +* NGP number of energy groups +* NBU number of burnup point in IPSAP +* NVAR number of state parameters in INFO data block +* GRID type of gridding for branches (0 = default, 1 = Saphyb +* branching etc ) +* NPAR number of state parameters in saphyb (including FLUE and +* TIME) +* NREA number of reactions in IPSAP +* NISO number of isotopoes in IPSAP +* NMAC number of macros in IPSAP +* NMIL number of mixtrures in IPSAP +* NANI number of anisotropy +* STAIDX index of state variables +* STATE state variables of current branch calculation +* STAVAR state variables in INFO data block +* NSF nummber of surface in IPSAP +* LABS information for absorption reconstruction +* SCAT information for scattering XS reconstruction +* LADF flag for ADF reconstrcution +* +*Parameters: +* NADRX +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPDAT,IPSAP + INTEGER NPAR,NMIL,GRID,NVAR,NBU,NSF,NREA,NISO,NADRX + INTEGER NGP,IPRINT,NMAC,NANI,STAIDX (NVAR) + REAL STATE(NVAR) + CHARACTER(LEN=12) STAVAR(NVAR) + LOGICAL LABS(3),SCAT,LADF +*---- +* LOCAL VARIABLES +*---- + TYPE(C_PTR) IPTH,KPTH + ! LOOP INDEX + INTEGER i, It, Ib,PK + ! LOOP INDEX OF : PARAMETERS (ISV=1..NPAR), STATES (INP=1..NVAR) + INTEGER ISV,INP + ! DIMENSION OF ARBVAL + INTEGER DIMARB + ! NUMBER OF ELEMENTARY CALCULATIONS + INTEGER NCALS + ! TYPE OF DATA RECOVERED FROM GANLIB SUBROUTINES + INTEGER ITYLCM + ! NUMBER OF VALUES IN IDVAL ET VALDIV + INTEGER NVDIV + ! ORDER NUMBERS OF FLUE PARAMETERS IN SAPHYB + INTEGER :: FLUE_ID = 0 + ! ORDER NUMBERS OF TIME PARAMETERS IN SAPHYB + INTEGER :: TIME_ID = 0 + ! CF : APOLLO2 : NOTICE INFORMATIQUE DE LA VERSION 2.8-1 + INTEGER MUPLET(NPAR) + ! VECTOR OF : RANK ORDER OF STATE PARAMETERS, NUMBER OF VALUES + ! FOR EACH STATE PARAMETERS + INTEGER RANK_ORDER(NPAR), NVALUE(NPAR) + REAL B2 + CHARACTER*3 :: ADF_T = 'DRA' + ! NAME OF DIRECTORIES IN SAPHYB : ELEMENTARY CALCULATION, + ! CONTROL ROD + CHARACTER(LEN=12) CALDIR,BARRDIR + ! NAME OF STATE VARIABLES IN SAPHYB + CHARACTER(LEN=12) PKNAM(6) + ! STATE VARIABLES IN SAPHYB + CHARACTER(LEN=12) PKEY(NPAR) + LOGICAL LFLAG(6) + + ! CF : APOLLO2 : NOTICE INFORMATIQUE DE LA VERSION 2.8-1 + ! VALUES OF : VALDIV = (KEFF, KINF,B2), CONTROL ROD KEFF, KINF,B + INTEGER, ALLOCATABLE, DIMENSION(:) :: DEBARB,ARBVAL + REAL, ALLOCATABLE, DIMENSION(:) :: VALDIV,BARR_VAL + CHARACTER(LEN=4), ALLOCATABLE, DIMENSION(:) :: IDVAL + + ! RECOVER INFOMATION FROM INFO DATA BLOCK AND SAPHYB OBJECT + + ! MOVING INTO INFO DATA BLOCK + CALL LCMSIX (IPSAP,' ',0) + + CALL LCMSIX (IPSAP,'paramdescrip',1) + CALL LCMGTC(IPSAP,'PARKEY',4,NPAR,PKEY) + CALL LCMGET (IPSAP,'NVALUE',NVALUE) + + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'SAPHYB_INFO',1) + IF (LADF) CALL LCMGTC(IPDAT,'ADF_TYPE',3,ADF_T) + PKEY (1:NPAR) (5:12) = " " + DO PK=1, 6 + IPTH=LCMGID(IPDAT,'PKEY_INFO') + KPTH=LCMDIL(IPTH,PK) + CALL LCMGET(KPTH,'LFLAG',LFLAG(PK)) + IF (PK == 1 .OR. PK==6)THEN + CALL LCMGTC(KPTH,'NAME',12,PKNAM(PK)) + ELSE + IF(LFLAG(PK)) CALL LCMGTC(KPTH,'NAME',12,PKNAM(PK)) + ENDIF + ENDDO + ! LOOP TO STORE THE INDEX OF FLUE AND + ! LINK THE FLUE AND TIME VARIABLES INDEX TO BURN VARIABLE INDEX + DO It=1, NPAR + IF(PKEY(It)=="TIME") TIME_ID=It + IF(PKEY(It)=="FLUE") FLUE_ID=It + ENDDO + ! LOOP OVER NUMBER OF STATE PARAMETERS IN SAPHYB + DO ISV=1, NPAR + ! LOOP OVER NUMBER OF STATE PARAMETERS IN INFO DATA BLOCK + DO INP=1, NVAR + ! IF NAME OF STATE VARIABLE IN INFO AND SAPHYB ARE EQUAL + IF(PKEY(ISV)==STAVAR(INP)) THEN + ! SPECIAL CASE FOR BARR parameters + IF(PKEY(ISV)==PKNAM(1)) THEN + !SPECIAL CASE FOR CONTROL ROD + ALLOCATE (BARR_VAL(NVALUE(ISV))) + WRITE(BARRDIR,'("pval", I8)') ISV + ! NAME OF DIRECTORY IN SAPHYB CONTAINING CONTROL ROD VALUES + IF(LFLAG(1)) THEN + ! RECOVER CONTROL ROD VALUES + CALL LCMSIX (IPSAP,' ',0) + CALL LCMSIX (IPSAP,'paramvaleurs',1) + CALL LCMGET(IPSAP,BARRDIR,BARR_VAL) + + ! LOOP OVER POSSIBLE VALUES OF CONTROL ROD IN SAPHYB + DO Ib=1, NVALUE(ISV) + IF(STATE(INP)==BARR_VAL(Ib)) THEN + ! STORE THE ORDER NUMBERS OF CURRENT CONTROL VALUES + ! CORRESPONDING TO THE BRANCH CALCULATED + RANK_ORDER(ISV)=Ib + ENDIF + ENDDO + ENDIF + DEALLOCATE (BARR_VAL) + + ! SPECIAL CASE WITH DEFAULT VALUES FOR STATE VARIABLES + ! (OTHER THAN BARR) + ELSE IF(GRID==0) THEN + ! TREATEMENT OF THE MID VALUE OF THE GRID + IF(STAIDX(INP)==2) THEN + ! ONLY DMOD,TCOM AND CBOR ARE AFFECTED BY THE DEFAULT + ! GRIDDING + IF((PKEY(ISV)==PKNAM(2))) THEN + RANK_ORDER(ISV)=NINT (NVALUE(ISV)/2.0) + ELSE IF((PKEY(ISV)==PKNAM(4)))THEN + RANK_ORDER(ISV)=NINT (NVALUE(ISV)/2.0) + ELSE IF((PKEY(ISV)==PKNAM(3)))THEN + RANK_ORDER(ISV)=NINT (NVALUE(ISV)/2.0) + ELSE + RANK_ORDER(ISV)=STAIDX(INP) + ENDIF + ! TREATEMENT OF THE LAST VALUE OF THE GRID + ELSE IF(STAIDX(INP)==3) THEN + ! ONLY DMOD,TCOM AND CBOR ARE AFFECTED BY THE DEFAULT + ! GRIDDING + IF((PKEY(ISV)==PKNAM(2))) THEN + RANK_ORDER(ISV)=NVALUE(ISV) + ELSE IF((PKEY(ISV)==PKNAM(4)))THEN + RANK_ORDER(ISV)=NVALUE(ISV) + ELSE IF((PKEY(ISV)==PKNAM(3)))THEN + RANK_ORDER(ISV)=NVALUE(ISV) + ELSE + RANK_ORDER(ISV)=STAIDX(INP) + ENDIF + ! ONLY DMOD,TCOM AND CBOR ARE AFFECTED BY THE DEFAULT + ! GRIDDING + ELSE ! THE FIRST VALUE IS UNCHANGED BY SET_DEFAULT_VALUE + RANK_ORDER(ISV)=STAIDX(INP) + ENDIF + ! IF WE KEEP THE INITIAL STATE VARIABLE GRID OF SAPHYB + ELSE + RANK_ORDER(ISV)=STAIDX(INP) + ENDIF + !TREATMENT OF FLUE AND TIME VARIABLES + IF(PKEY(ISV)==PKNAM(6)) THEN + IF(FLUE_ID>0) RANK_ORDER(FLUE_ID)=RANK_ORDER(ISV) + IF(TIME_ID>0) RANK_ORDER(TIME_ID)=RANK_ORDER(ISV) + ENDIF + ENDIF + ENDDO + ENDDO + + ! RECOVER INFORMATION FROM SAPHYB + CALL LCMSIX (IPSAP,' ',0) + CALL LCMSIX (IPSAP,'paramarbre',1) + CALL LCMLEN (IPSAP,'ARBVAL',DIMARB,ITYLCM) + ALLOCATE (ARBVAL(DIMARB),DEBARB(DIMARB+1)) + CALL LCMGET (IPSAP,'NCALS',NCALS) + CALL LCMGET (IPSAP,'ARBVAL',ARBVAL) + CALL LCMGET (IPSAP,'DEBARB',DEBARB) + ! PROCEDURE TO RECOVER THE NUMBER OF THE ELEMENTARY CALCULATION + ! CORREPSONDING TO THE CURRENT BRANCH + ! CF APOLLO2 : NOTICE INFORMATIQUE DE LA VERSION 2.8-1 + II=1 + DO 30 IPAR=1,NPAR + MUPLET(IPAR) =RANK_ORDER(IPAR) + DO 10 I=DEBARB(II),DEBARB(II+1)-1 + IF(MUPLET(IPAR).LE.ARBVAL(I))THEN + IF(MUPLET(IPAR).EQ.ARBVAL(I))THEN + II=I + GO TO 30 + ELSE + GO TO 20 + ENDIF + ENDIF +10 CONTINUE +20 ICAL=0 + WRITE(6,*) " MUPLET : ", MUPLET + CALL XABORT ("@D2PDIV: ELEMENTARY CALCULATION UNKNOWN") + RETURN +30 CONTINUE + ! END OF APPOLO2 PROCEDURE + + ICAL=DEBARB(II+1) ! number of the elementary calculation + + ! MOVING IN THE ELEMENTARY CALCULATION AND RECONVER THE B2, KEFF + ! AND KINF DATA + WRITE(CALDIR,'("calc", I8)') ICAL + CALL LCMSIX (IPSAP,' ',0) + CALL LCMSIX (IPSAP,CALDIR,1) + CALL LCMSIX(IPSAP,'divers',1) + CALL LCMGET(IPSAP,'NVDIV',NVDIV) + + ALLOCATE(IDVAL(NVDIV),VALDIV(NVDIV)) + CALL LCMGTC(IPSAP,'IDVAL',4,NVDIV,IDVAL) + CALL LCMGET(IPSAP,'VALDIV',VALDIV) + + + ! STORE RESULTS (IF CORRESPONDING DATA IS AVAILABLE) INTO INFO + ! data block at : + ! INFO/BRANCH_INFO/KEFF + ! INFO/BRANCH_INFO/B2 + ! INFO/BRANCH_INFO/KINF + + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'BRANCH_INFO',1) + IF(STAIDX(NVAR)==1) THEN + IPTH=LCMLID(IPDAT,'DIVERS',NBU) + ELSE + IPTH=LCMGID(IPDAT,'DIVERS') + ENDIF + KPTH=LCMDIL(IPTH,STAIDX(NVAR)) + + IF(IPRINT>1) THEN + WRITE(6,*) + WRITE(6,*) "**** DIVERS INFORMATION ****" + ENDIF + DO Idiv=1, NVDIV + IF(IDVAL(Idiv)=="KEFF") THEN + CALL LCMPUT(KPTH,'KEFF',1,2,VALDIV(Idiv)) + IF(IPRINT>1) WRITE(6,*)"KEFF :",VALDIV(Idiv) + ENDIF + IF(IDVAL(Idiv)=="KINF") THEN + CALL LCMPUT(KPTH,'KINF',1,2,VALDIV(Idiv)) + IF(IPRINT>1) WRITE(6,*)"KINF :",VALDIV(Idiv) + ENDIF + IF(IDVAL(Idiv)=="B2") THEN + CALL LCMPUT(KPTH,'B2',1,2,VALDIV(Idiv)) + B2=VALDIV(Idiv) + IF(IPRINT>1) WRITE(6,*)"B2 :",VALDIV(Idiv) + ENDIF + ENDDO + ! TEMPORARY SUBROUTINE WAITING FOR FURTHER DEVELOMENTS TO RECOVER + ! ADDITIONAL INFORMATION + CALL D2PXSA(IPDAT,IPSAP,ICAL,IPRINT,NGP,NREA,NISO,NMAC,NMIL, + 1 NANI,NVAR,NADRX,STAIDX,B2,ADF_T,NSF,LABS,SCAT,LADF) + DEALLOCATE (ARBVAL,DEBARB,VALDIV,IDVAL) ! FREE MEMORY + END |
