From 7dfcc480ba1e19bd3232349fc733caef94034292 Mon Sep 17 00:00:00 2001 From: stainer_t Date: Mon, 8 Sep 2025 13:48:49 +0200 Subject: Initial commit from Polytechnique Montreal --- Donjon/src/CVRDRV.f | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 Donjon/src/CVRDRV.f (limited to 'Donjon/src/CVRDRV.f') diff --git a/Donjon/src/CVRDRV.f b/Donjon/src/CVRDRV.f new file mode 100644 index 0000000..08cbe5c --- /dev/null +++ b/Donjon/src/CVRDRV.f @@ -0,0 +1,174 @@ +*DECK CVRDRV + SUBROUTINE CVRDRV(IPMAP,NCH,NB,NFUEL,NPARM,NX,NY,NZ,NVOID,IVOID, + 1 IMPX) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Read the input data required for the voiding simulations. +* +*Copyright: +* Copyright (C) 2007 Ecole Polytechnique de Montreal. +* +*Author(s): +* D. Sekki +* +*Parameters: input +* IPMAP pointer to the perturbed fuel-map. +* NCH number of reactor channels. +* NB number of fuel bundles per channel. +* NFUEL number of fuel types. +* NPARM total number of recorded parameters. +* NX number of elements along x-axis in fuel map. +* NY number of elements along y-axis in fuel map. +* NZ number of elements along z-axis in fuel map. +* IMPX printing index (=0 for no print). +* +*Parameters: output +* IVOID index associated with the core-voiding pattern. +* NVOID total number of voided channels. +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPMAP + INTEGER NCH,NB,NFUEL,NPARM,NX,NY,NZ,NVOID,IVOID,IMPX +*---- +* LOCAL VARIABLES +*---- + PARAMETER(IOUT=6) + CHARACTER TEXT*12,PNAME*12,CHANX*4,CHANY*4 + INTEGER INAME(3) + DOUBLE PRECISION DFLOT + REAL PVALUE(NCH,NB) + LOGICAL LCOOL + TYPE(C_PTR) JPMAP,KPMAP + INTEGER, ALLOCATABLE, DIMENSION(:) :: NXX,NYY +*---- +* FUEL-TYPE INDICES +*---- + JPMAP=LCMGID(IPMAP,'FUEL') + DO IFUEL=1,NFUEL + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHARACTER DATA EXPECTED(1).') + IF(TEXT.NE.'MIX-FUEL')CALL XABORT('@CVRDRV: KEYWORD MIX-FUEL' + 1 //' EXPECTED.') +* UNPERTURBED-CELL FUEL MIXTURE NUMBER + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.1)CALL XABORT('@CVRDRV: INTEGER DATA EXPECTED(1).') + KPMAP=LCMGIL(JPMAP,IFUEL) + CALL LCMGET(KPMAP,'MIX',IMIX) + IF(IMIX.NE.NITMA)THEN + WRITE(IOUT,*)'@CVRDRV: RECORDED FUEL MIXTURE NUMBER ',IMIX + WRITE(IOUT,*)'@CVRDRV: READ FROM INPUT THE MIXTURE ',NITMA + CALL XABORT('@CVRDRV: WRONG INPUT ORDER OF FUEL MIXTURES.') + ENDIF + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHARACTER DATA EXPECTED(2).') + IF(TEXT.NE.'MIX-VOID')CALL XABORT('@CVRDRV: KEYWORD MIX-VOI' + 1 //'D EXPECTED.') +* PERTURBED-CELL FUEL MIXTURE NUMBER + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.1)CALL XABORT('@CVRDRV: INTEGER DATA EXPECTED(2).') + IF(NITMA.LE.0)CALL XABORT('@CVRDRV: MIX-VOID NUMBER MUST BE' + 1 //' POSITIVE AND GREATER THAN ZERO.') + CALL LCMPUT(KPMAP,'MIX-VOID',1,1,NITMA) + ENDDO +*---- +* COOLANT DENSITIES +*---- + LCOOL=.FALSE. + PVALUE(:NCH,:NB)=0.0 + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHARACTER DATA EXPECTED(3).') + IF(TEXT.NE.'DENS-COOL')GOTO 20 + IF(NPARM.EQ.0)CALL XABORT('@CVRDRV: NO DEFINED PARAMETERS IN T' + 1 //'HE FUEL-MAP NPARM=0') + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHARACTER DATA FOR PARAMETE' + 1 //'R PNAME EXPECTED.') + JPMAP=LCMGID(IPMAP,'PARAM') + DO IPAR=1,NPARM + KPMAP=LCMGIL(JPMAP,IPAR) + CALL LCMGET(KPMAP,'P-NAME',INAME) + WRITE(PNAME,'(3A4)') (INAME(I),I=1,3) + IF(PNAME.EQ.TEXT)THEN + CALL LCMGET(KPMAP,'P-VALUE',PVALUE) + GOTO 10 + ENDIF + ENDDO + CALL XABORT('@CVRDRV: UNABLE TO FIND PARAMETER WITH PNAME '//TEXT) +* + 10 CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(TEXT.NE.'SET')CALL XABORT('@CVRDRV: KEYWORD SET EXPECTED.') + CALL REDGET(ITYP,NITMA,VCOOL,TEXT,DFLOT) + IF(ITYP.NE.2)CALL XABORT('@CVRDRV: REAL DATA FOR THE COOLANT DEN' + 1 //'SITY EXPECTED.') + IF(VCOOL.LT.0.)CALL XABORT('@CVRDRV: INVALID VALUE FOR THE COOLA' + 1 //'NT DENSITY <0.') + LCOOL=.TRUE. +*---- +* CORE-VOIDING PATTERN +*---- + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + 20 IF(TEXT.NE.'VOID-PATTERN')CALL XABORT('@CVRDRV: KEYWORD VOID-' + 1 //'PATTERN EXPECTED.') + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHARACTER DATA EXPECTED(4).') + IF(TEXT.EQ.'FULL')THEN + IVOID=1 + NVOID=NCH + ELSEIF(TEXT.EQ.'HALF')THEN + IVOID=2 + NVOID=NCH/2 + ELSEIF(TEXT.EQ.'QUARTER')THEN + IVOID=3 + NVOID=NCH/4 + ELSEIF(TEXT.EQ.'CHECKER')THEN + IVOID=4 + NVOID=NCH + ELSEIF(TEXT.EQ.'CHECKER-1/2')THEN + IVOID=5 + NVOID=NCH/2 + ELSEIF(TEXT.EQ.'CHECKER-1/4')THEN + IVOID=6 + NVOID=NCH/4 + ELSEIF(TEXT.EQ.'CHAN-VOID')THEN +*---- +* USER-DEFINED PATTERN +*---- + IVOID=7 +* TOTAL NUMBER OF VOIDED CHANNELS + CALL REDGET(ITYP,NVOID,FLOT,TEXT,DFLOT) + IF(ITYP.NE.1)CALL XABORT('@CVRDRV: INTEGER TOTAL NUMBER OF V' + 1 //'OIDED CHANNELS EXPECTED.') + IF((NVOID.LT.1).OR.(NVOID.GT.NCH))CALL XABORT('@CVRDRV: TH' + 1 //'E NUMBER OF VOIDED CHANNELS MUST BE > 0 AND < NCH') + ALLOCATE(NXX(NVOID),NYY(NVOID)) + DO I=1,NVOID +* VOIDED-CHANNEL YNAME + CALL REDGET(ITYP,NITMA,FLOT,CHANY,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHANNEL YNAME EXPECTED.') + READ(CHANY,'(A4)') NYY(I) +* VOIDED-CHANNEL XNAME + CALL REDGET(ITYP,NITMA,FLOT,CHANX,DFLOT) + IF(ITYP.NE.3)CALL XABORT('@CVRDRV: CHANNEL XNAME EXPECTED.') + READ(CHANX,'(A4)') NXX(I) + ENDDO + CALL CVRUSR(IPMAP,NCH,NB,NFUEL,NX,NY,NZ,NVOID,NXX,NYY,NPARM, + 1 PNAME,PVALUE,VCOOL,LCOOL,IMPX) + DEALLOCATE(NXX,NYY) + ELSE + CALL XABORT('@CVRDRV: WRONG KEYWORD '//TEXT) + ENDIF +* + CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT) + IF(TEXT.NE.';')CALL XABORT('@CVRDRV: FINAL ; EXPECTED.') +* SPECIFIED CORE-VOIDING PATTERN + IF(IVOID.LT.7) CALL CVRCOR(IPMAP,NCH,NB,NFUEL,NX,NY,NZ,IVOID, + 1 NVOID,NPARM,PNAME,PVALUE,VCOOL,LCOOL,IMPX) + RETURN + END -- cgit v1.2.3