diff options
Diffstat (limited to 'Dragon/src/CFC.f')
| -rw-r--r-- | Dragon/src/CFC.f | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/Dragon/src/CFC.f b/Dragon/src/CFC.f new file mode 100644 index 0000000..20c17cf --- /dev/null +++ b/Dragon/src/CFC.f @@ -0,0 +1,329 @@ +*DECK CFC + SUBROUTINE CFC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Module to compute the feedback coefficients (CFC) for both the cell +* and the reflector. A CANDU-6 database is generated using the feedback +* model parametrization of the cross-sections. Recover and interpolate +* Macrolib information from one or many Compo objects. +* +*Copyright: +* Copyright (C) 1996 Ecole Polytechnique de Montreal +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. +* +*Author(s): M. T. Sissaoui +* +*Parameters: input/output +* NENTRY number of LCM objects or files used by the operator. +* HENTRY name of each LCM object or file: +* HENTRY(1) : Create or modification type(REACTOR_XSDB). +* HENTRY(2) : Read-only type(L_COMPO) for reference(nominal). +* HENTRY(3) : Read-only type(L_COMPO) for fuel-up temp. +* HENTRY(4) : Read-only type(L_COMPO) for fuel-down temp. +* HENTRY(5) : Read-only type(L_COMPO) for cool-up temp. +* HENTRY(6) : Read-only type(L_COMPO) for cool-down temp. +* HENTRY(7) : Read-only type(L_COMPO) for mod-up temp +* HENTRY(8) : Read-only type(L_COMPO) for mod-down temp. +* HENTRY(9) : Read-only type(L_COMPO) for cool-up den. +* HENTRY(10) : Read-only type(L_COMPO) for cool-down den. +* HENTRY(11) : Read-only type(L_COMPO) for mod-up den. +* HENTRY(12) : Read-only type(L_COMPO) for mod-down den. +* HENTRY(13) : Read-only type(L_COMPO) for boron. +* HENTRY(14) : Read-only type(L_COMPO) for purity. +* HENTRY(15) : Read-only type(L_COMPO) for XE135. +* HENTRY(16) : Read-only type(L_COMPO) for SM149. +* HENTRY(17) : Read-only type(L_COMPO) for NP239. +* HENTRY(18) : Read-only type(L_COMPO) for (t-fuel,den). +* HENTRY(19) : Read-only type(L_COMPO) for (t-cool,den). +* HENTRY(20) : Read-only type(L_COMPO) for power-up. +* HENTRY(21) : Read-only type(L_COMPO) for power-in. +* HENTRY(22) : Read-only type(L_COMPO) for power-d. +* HENTRY(23) : Read-only type(L_COMPO) for reflec. ref. +* HENTRY(24) : Read-only type(L_COMPO) for reflec. mod-up temp. +* HENTRY(25) : Read-only type(L_COMPO) for reflec. mod-dw temp. +* HENTRY(26) : Read-only type(L_COMPO) for reflec. mod-up den. +* HENTRY(27) : Read-only type(L_COMPO) for reflec. mod-dw den. +* HENTRY(28) : Read-only type(L_COMPO) for reflec. boron. +* HENTRY(29) : Read-only type(L_COMPO) for reflec. purity. +* IENTRY type of each LCM object or file: +* =1 LCM memory object; =2 XSM file; =3 sequential binary file; +* =4 sequential ascii file. +* JENTRY access of each LCM object or file: +* =0 the LCM object or file is created; +* =1 the LCM object or file is open for modifications; +* =2 the LCM object or file is open in read-only mode. +* KENTRY LCM object address or file unit number. +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER NENTRY,IENTRY(NENTRY),JENTRY(NENTRY) + TYPE(C_PTR) KENTRY(NENTRY) + CHARACTER HENTRY(NENTRY)*12 +*---- +* LOCAL PARAMETERS +*---- + TYPE(C_PTR) IPLIST + INTEGER IOUT,NSTATE + CHARACTER NAMSBR*6 + PARAMETER (IOUT=6,NSTATE=40,NAMSBR='CFC ') + CHARACTER TEXT12*12,HSMG*131,TINFO*72, + > HSIGN*12,DBNAME*9,CTITRE*72 + INTEGER ISTATE(NSTATE) + INTEGER IPRINT + INTEGER NBPARA + PARAMETER (NBPARA=18) + REAL DBPARA(NBPARA) +*----- +* PARAMETER VALIDATION. +*----- + IF(NENTRY.LE.28) CALL XABORT('CFC: 29 PARAMETER EXPECTED.') + IF((IENTRY(1).NE.1).AND.(IENTRY(1).NE.2)) CALL XABORT('CFC:' + 1 //' MACROLIB LINKED LIST OR XSM FILE EXPECTED AT LHS.') + IF((JENTRY(1).NE.0).AND.(JENTRY(1).NE.1)) CALL XABORT('CFC: ' + 1 //' MACROLIB IN CREATE OR MODIFICATION MODE EXPECTED.') +*----- +* INDIVIDUAL LOCAL PARAMETER. +*----- + IF((IENTRY(2).NE.1).AND.(IENTRY(2).NE.2)) CALL XABORT('CFC:' + 1 //' COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(2).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(3).NE.1).AND.(IENTRY(3).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(3).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(4).NE.1).AND.(IENTRY(4).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(4).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(5).NE.1).AND.(IENTRY(5).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(5).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(6).NE.1).AND.(IENTRY(6).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(6).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(7).NE.1).AND.(IENTRY(7).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(7).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(8).NE.1).AND.(IENTRY(8).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(8).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(9).NE.1).AND.(IENTRY(9).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(9).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(10).NE.1).AND.(IENTRY(10).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(10).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(11).NE.1).AND.(IENTRY(11).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(11).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(12).NE.1).AND.(IENTRY(12).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(12).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(13).NE.1).AND.(IENTRY(13).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(13).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(14).NE.1).AND.(IENTRY(14).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(14).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') +*----- +* STURATING ISOTOPES +*----- + IF((IENTRY(15).NE.1).AND.(IENTRY(15).NE.2)) CALL XABORT('CFC:' + 1 //' COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(15).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //'MODE EXPECTED AT RHS.') + IF((IENTRY(16).NE.1).AND.(IENTRY(16).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(16).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') +*----- +* MIXED PARAMETERS +*----- + IF((IENTRY(17).NE.1).AND.(IENTRY(17).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(17).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(18).NE.1).AND.(IENTRY(18).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(18).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(19).NE.1).AND.(IENTRY(19).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(19).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') +*----- +* HISTORY PARAMETERS (FISSILE ISOTOPES) +*----- + IF((IENTRY(20).NE.1).AND.(IENTRY(20).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(20).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(21).NE.1).AND.(IENTRY(21).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(21).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(22).NE.1).AND.(IENTRY(22).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(22).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') +*----- +* MODERATOR PROPERTIES +*----- + IF((IENTRY(23).NE.1).AND.(IENTRY(23).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(23).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(24).NE.1).AND.(IENTRY(24).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(24).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(25).NE.1).AND.(IENTRY(25).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(25).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(26).NE.1).AND.(IENTRY(26).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(26).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(27).NE.1).AND.(IENTRY(27).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(27).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(28).NE.1).AND.(IENTRY(28).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(28).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') + IF((IENTRY(29).NE.1).AND.(IENTRY(29).NE.2)) CALL XABORT('CFC: ' + 1 //'COMPO LINKED LIST OR XSM FILE EXPECTED AT RHS.') + IF(JENTRY(29).NE.2) CALL XABORT('CFC: COMPO IN READ-ONLY ' + 1 //' MODE EXPECTED AT RHS.') +*----- +* END OF L_COMPO FILES REQUIRED +*----- + ITYPE=JENTRY(1) + IPLIST=KENTRY(1) + IPRINT=1 +*----- +* CHECK THE SIGNTURE OF THE LCM OBJECT +*----- + DO 200 I=2,29 + CALL LCMGTC(KENTRY(I),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_COMPO') THEN + TEXT12=HENTRY(I) + CALL XABORT('CFC: SIGNATURE OF '//TEXT12//' IS '//HSIGN// + 1 '. L_COMPO EXPECTED.') + ENDIF + 200 CONTINUE +*---- +* READ THE INPUT FILE +*---- + CALL CFCGET(TINFO,DBNAME,IPRINT,NBPARA,DBPARA) +*----- +* CREATED OR MODIFIED LCM OBJECT TYPE(L_COMPO) +*----- + IF(JENTRY(1).EQ.0) THEN + HSIGN='REACTOR_XSDB' + CALL LCMPTC(KENTRY(1),'SIGNATURE',12,HSIGN) +*----- +* STORE THE INFORMATION TITLE +*----- + CALL LCMPTC(KENTRY(1),'INFORMATION',72,TINFO) + ELSE + CALL LCMGTC(KENTRY(1),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'REACTOR_XSDB') THEN + TEXT12=HENTRY(1) + CALL XABORT('CFC: SIGNATURE OF '//TEXT12//' IS '//HSIGN// + 1 '. REACTOR_XSDB EXPECTED.') + ENDIF +*----- +* RECOVER THE INFORMATION TITLE +*----- + CALL LCMGTC(KENTRY(1),'INFORMATION',72,CTITRE) + IF(TINFO.NE.CTITRE) THEN + CALL XABORT('CFC: '//CTITRE//' INFOR TITLE EXPECTED.') + ENDIF + ENDIF +*----- +* RECOVER SOME INFORMATIONS FROM THE FIRST COMPO (NOMINAL). +*----- + TEXT12='SIGNATURE' + CALL LCMNXT(KENTRY(2),TEXT12) + IF(TEXT12.EQ.'SIGNATURE') CALL XABORT('CFC: INVALID INPUT COMPO.') + CALL LCMSIX(KENTRY(2),TEXT12,1) +*----- +* RECOVER THE CPO TITLE. +*----- + CALL LCMLEN(KENTRY(2),'TITLE',LENGT,ITYLCM) + IF(LENGT.GT.0) THEN + CALL LCMGTC(KENTRY(2),'TITLE',72,CTITRE) + ELSE + CTITRE='*** NO TITLE PROVIDED ***' + ENDIF + CALL LCMSIX(KENTRY(2),' ',2) +*----- +* READ PARAMETERS +*----- + ISTATE(:NSTATE)=0 + CALL LCMGET(KENTRY(2),'STATE-VECTOR',ISTATE) + IF(ISTATE(1).GT.1) THEN + WRITE(HSMG,'(28HNUMBER OF MIXUTRE SAVED IS =,I5, + 1 28H ONLY ONE REGION IS REQUIRED)') ISTATE(1) + CALL XABORT(HSMG) + ENDIF + NGRP=ISTATE(2) + NISO=ISTATE(3) + NL=ISTATE(4) + NBURN=ISTATE(5) + NXS=21+NL +*----- +* CHECK OTHERS CPO INFORMATIONS. +*----- + DO 100 I=3,29 + TEXT12='SIGNATURE' + CALL LCMNXT(KENTRY(I),TEXT12) + IF(TEXT12.EQ.'SIGNATURE') CALL XABORT('CFC: INVALID ' + 1 //'INPUT COMPO.') + ISTATE(:NSTATE)=0 + CALL LCMGET(KENTRY(I),'STATE-VECTOR',ISTATE) +* +* ENERGY GROUP AND ORDER OF SCATTERING ANISOTROPY. +* + IF(ISTATE(2).NE.NGRP) THEN + WRITE(HSMG,'(7HNGRP = ,I5,13H IN REF NGRP=,I5)') + 1 ISTATE(2),NGRP + CALL XABORT('CFC: INCONSISTENT NB OF GROUPS ' + 1 //TEXT12//' IS '//HSMG//' ') + ELSE IF(ISTATE(4).LT.NL) THEN + WRITE(HSMG,'(5HNL = ,I5,11H IN REF NL=,I5)') + 1 ISTATE(4),NL + CALL XABORT('CFC: INCONSISTENT NB OF LEGENDRE ORDERS.' + 1 //TEXT12//'IS '//HSMG//' ') + ENDIF + 100 CONTINUE +*----- +* CALL CFC DRIVER. +*----- + CALL CFCDRV(IPRINT,NENTRY,KENTRY,HENTRY,NBURN,NGRP,NISO,NL, + 1 CTITRE,DBNAME,NXS,NBPARA,DBPARA) + RETURN + END |
