diff options
Diffstat (limited to 'Donjon/src/T16GET.f')
| -rw-r--r-- | Donjon/src/T16GET.f | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Donjon/src/T16GET.f b/Donjon/src/T16GET.f new file mode 100644 index 0000000..387b93f --- /dev/null +++ b/Donjon/src/T16GET.f @@ -0,0 +1,235 @@ +*DECK T16GET + SUBROUTINE T16GET(MAXMIX,MNLOCP,MNCPLP,MNPERT,NALOCP,IDLCPL, + > NCMIXS,MNBURN,NAMMIX,MIXRCI,PARRCI,MIXPER, + > PARPER,MIXREG) +* +*---- +* +*Purpose: +* Read from input T16CPO processing options. +* +*Author(s): +* G. Marleau +* +*Parameters: input +* MAXMIX maximum number of mixtures. +* MNLOCP maximum number of local parameters. +* MNCPLP maximum number of coupled parameters. +* MNPERT maximum number of perturbations per local parameter. +* NALOCP local parameter names allowed. +* IDLCPL local ID for perturbation parameters. +* +*Parameters: input/output +* NCMIXS number of current mixtures. +* MNBURN current and final number of burnup steps +* NAMMIX names of mixtures. +* MIXRCI reference information for mixtures where: +* =0 no information for mixture; +* >0 information not updated; +* <0 information to be updated. +* PARRCI reference local parameters for mixtures. +* MIXPER perturbation information for mixtures. +* =0 no information for mixture; +* >0 information not updated; +* <0 information to be updated. +* PARPER perturbation parameters for mixtures. +* +*Parameters: output +* MIXREG mixture update identifier where: +* =0 do not update; +* =-1 update using CELLAV information; +* > 0 update using specified region number. +* +*Comments: +* Input data is of the form: +* [[ MIXNAM [ { CELLAV | REGION noreg } ] +* [ RC [ nburn ] frstrec ] +* [[ NAMPER valref npert +* (valper(i),frstrec(i),i=1,npert)]] +* ]] +* [ MTMD [ valreft valrefd ] npert +* (valpert(i), valperd(i), frstrec(i),i=1,npert)]] +* ] +* +*---- +* + IMPLICIT NONE + INTEGER MAXMIX,MNLOCP,MNCPLP,MNPERT,NCMIXS,MNBURN + CHARACTER NALOCP(MNLOCP+MNCPLP)*4 + INTEGER IDLCPL(2,MNLOCP+MNCPLP),NAMMIX(2,MAXMIX), + > MIXRCI(2+MNLOCP+MNCPLP,MAXMIX), + > MIXPER(MNPERT,MNLOCP+MNCPLP,MAXMIX), + > MIXREG(MAXMIX) + REAL PARRCI(MNLOCP,MAXMIX), + > PARPER(MNPERT,2,MNLOCP+MNCPLP,MAXMIX) +*---- +* READ VARIABLES +*---- + CHARACTER TEXT12*12 + INTEGER ITYPE,NITMA + REAL FLOTT + DOUBLE PRECISION DFLOTT +*---- +* LOCAL VARIABLES +*---- + INTEGER IOUT,NTC + CHARACTER NAMSBR*6 + PARAMETER (IOUT=6,NTC=3,NAMSBR='T16GET') + INTEGER KCHAR(NTC),INEXTM,ILOCP,ILOCL,NLPAR, + > ILPAR,NBRCI,IPAR,IMIX,IRLOC +*---- +* READ INPUT DATA. +*---- + INEXTM=0 + 100 CONTINUE + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + 101 CONTINUE + IF(ITYPE .NE. 3) CALL XABORT(NAMSBR// + > ': KEYWORD EXPECTED') + IF(TEXT12 .EQ. ';') THEN +*---- +* END OF INPUT REACHED +* EXIT READ +*---- + GO TO 105 + ELSE IF(TEXT12 .EQ. 'CELLAV') THEN +*---- +* CELLAV KEYWORD FOUND +*---- + IF(INEXTM .EQ. 0) CALL XABORT(NAMSBR// + > ': MIXTURE NAME MUST BE DEFINED BEFORE CELLAV') + MIXREG(INEXTM)=-1 + ELSE IF(TEXT12 .EQ. 'REGION') THEN +*---- +* REGION KEYWORD FOUND +*---- + IF(INEXTM .EQ. 0) CALL XABORT(NAMSBR// + > ': MIXTURE NAME MUST BE DEFINED BEFORE REGION') + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .NE. 1) CALL XABORT(NAMSBR// + > ': REGION NUMBER MUST FOLLOW REGION KEYWORD') + IF(NITMA .LT. 1) CALL XABORT(NAMSBR// + > ': REGION NUMBER MUST BE > 0') + MIXREG(INEXTM)=NITMA + ELSE IF(TEXT12 .EQ. 'RC') THEN +*---- +* REFERENCE CASE INFORMATION +*---- + IF(INEXTM .EQ. 0) CALL XABORT(NAMSBR// + > ': MIXTURE NAME MUST BE DEFINED RC') + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .NE. 1) CALL XABORT(NAMSBR// + > ': DATA TYPE FOLLOWING RC MUST BE INTEGER') + IF(NITMA .LT. 1) CALL XABORT(NAMSBR// + > ': FIRST INTEGER VALUE FOLLOWING RC MUST BE > 0') + MIXRCI(1,INEXTM)=NITMA + IF(MIXRCI(2,INEXTM) .EQ. 0) THEN + MIXRCI(2,INEXTM)=-1 + ENDIF + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .NE. 1) GO TO 101 + IF(NITMA .LT. 1) CALL XABORT(NAMSBR// + > ': SECOND INTEGER VALUE FOLLOWING RC MUST BE > 0') + MNBURN=MAX(MNBURN,MIXRCI(1,INEXTM)) + MIXRCI(2,INEXTM)=-MIXRCI(1,INEXTM) + MIXRCI(1,INEXTM)=NITMA + ELSE +*---- +* EITHER PERTURBATION OR NEW MIXTURE +* 1) IF PERTURBATION +* TREAT INPUT AND RETURN TO READ NEXT KEYWORD +* OTHERWISE TEXT12 IS NEW MIXTURE NAME +*---- + IRLOC=2 + DO ILOCP=1,MNLOCP+MNCPLP + NLPAR=1 + IF(ILOCP .GT. MNLOCP) NLPAR=2 + IF(TEXT12 .EQ. NALOCP(ILOCP)) THEN + IF(INEXTM .EQ. 0) CALL XABORT(NAMSBR// + > ': MIXTURE NAME REQUIRED FOR PERTURBATIONS') +*---- +* SAVE REFERENCE PARAMETER AND TEST FOR COHERENCE +*---- + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .EQ. 2) THEN + DO ILPAR=1,NLPAR + IF(ITYPE .NE. 2) CALL XABORT(NAMSBR// + > ': REFERENCES EXPECTED FOR PERTURBATIONS') + ILOCL=IDLCPL(ILPAR,ILOCP) + IF(MIXRCI(IRLOC+ILOCL,INEXTM) .EQ. 0) THEN + PARRCI(ILOCL,INEXTM)=FLOTT + ELSE IF(PARRCI(ILOCL,INEXTM) .NE. FLOTT) THEN + CALL XABORT(NAMSBR// + > ': REFERENCE PARAMETER NOT COHERENT FOR '// + > NALOCP(ILOCP)// + > ' PERTURBATION INITIALIZATION') + ENDIF + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + ENDDO + ELSE IF( MIXRCI(IRLOC+ILOCP,INEXTM) .EQ. 0) THEN + CALL XABORT(NAMSBR// + > ': REFERENCE CASE NOT INITIALIZED FOR '// + > NALOCP(ILOCP)//' PERTURBATION') + ENDIF +*---- +* READ NUMBER OF PERTURBATIONS +*---- + IF(ITYPE .NE. 1) CALL XABORT(NAMSBR// + > ': INVALID RECORD FOLLOWING PERTURBATION') + IF(NITMA .LT. 0) CALL XABORT(NAMSBR// + > ': NUMBER OF PERTURBATION MUST BE >= 0') + NBRCI=NITMA + MIXRCI(IRLOC+ILOCP,INEXTM)=-NITMA +*---- +* READ PERTURBATIONS PARAMETERS +*---- + DO IPAR=1,NBRCI + DO ILPAR=1,NLPAR + ILOCL=IDLCPL(ILPAR,ILOCP) + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .NE. 2) CALL XABORT(NAMSBR// + > ': INVALID RECORD FOR REFERENCE PARAMETER') + PARPER(IPAR,ILPAR,ILOCP,INEXTM)=FLOTT + ENDDO + CALL REDGET(ITYPE,NITMA,FLOTT,TEXT12,DFLOTT) + IF(ITYPE .NE. 1) CALL XABORT(NAMSBR// + > ': INVALID RECORD FOLLOWING PERTURBATION') + IF(NITMA .LT. 0) CALL XABORT(NAMSBR// + > ': NUMBER OF PERTURBATION MUST BE >= 0') + MIXPER(IPAR,ILOCP,INEXTM)=NITMA + ENDDO + GO TO 100 + ENDIF + ENDDO +*---- +* 3) TEXT12 IS A NEW MIXTURE NAME +* TREAT INPUT AND RETURN TO READ NEXT KEYWORD +*---- + READ(TEXT12,'(A4,A2)') KCHAR(1),KCHAR(2) + DO IMIX=1,NCMIXS + IF(KCHAR(1) .EQ. NAMMIX(1,IMIX) .AND. + > KCHAR(2) .EQ. NAMMIX(2,IMIX) ) THEN + INEXTM=IMIX + GO TO 145 + ENDIF + ENDDO + NCMIXS=NCMIXS+1 + NAMMIX(1,NCMIXS)=KCHAR(1) + NAMMIX(2,NCMIXS)=KCHAR(2) + IF(NCMIXS .GT. MAXMIX) CALL XABORT(NAMSBR// + > ': TOO MANY MIXTURES READ') + INEXTM=NCMIXS + 145 CONTINUE +*---- +* ASSUME CELLAV BY DEFAULT +*---- + MIXREG(INEXTM)=-1 + ENDIF + GO TO 100 + 105 CONTINUE +*---- +* ALL THE REQUIRED INFORMATION READ +* RETURN +*---- + RETURN + END |
