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 /Trivac/src/KINSOL.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Trivac/src/KINSOL.f')
| -rwxr-xr-x | Trivac/src/KINSOL.f | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/Trivac/src/KINSOL.f b/Trivac/src/KINSOL.f new file mode 100755 index 0000000..50b8b53 --- /dev/null +++ b/Trivac/src/KINSOL.f @@ -0,0 +1,162 @@ +*DECK KINSOL + SUBROUTINE KINSOL(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY) +* +*----------------------------------------------------------------------- +* +*Purpose: +* solve the space-time neutron kinetics equations. +* +*Copyright: +* Copyright (C) 2008 Ecole Polytechnique de Montreal. +* +*Author(s): D. Sekki +* +*Parameters: input/output +* NENTRY number of LCM objects or files used by the operator. +* HENTRY name of each LCM object or file: +* HENTRY(1): modification type(L_KINET); +* HENTRY(2): read-only type(L_MACROLIB); +* HENTRY(3): read-only type(L_TRACK); +* HENTRY(4): read-only type(L_SYSTEM) made with HENTRY(2); +* HENTRY(5): optional read-only type(L_MACROLIB); +* HENTRY(6): optional read-only type(L_SYSTEM) made with +* HENTRY(5). +* 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. +* +*Comments: +* The KINSOL: calling specifications are: +* KINET := KINSOL: KINET MACRO TRACK SYST [ MACRO\_0 SYST\_0 ] :: +* (kinsol\_data) ; +* where +* KINET : name of the \emph{lcm} object (type L\_KINET) in modification mode. +* MACRO : name of the \emph{lcm} object (type L\_MACROLIB) containing the +* \emph{macrolib} information corresponding to the current time step of a +* transient. +* TRACK : name of the \emph{lcm} object (type L\_TRACK) containing the +* \emph{tracking} information. +* SYST : name of the \emph{lcm} object (type L\_SYSTEM) corresponding to +* \emph{macrolib} MACRO and \emph{tracking} TRACK. +* MACRO\_0 : name of the \emph{lcm} object (type L\_MACROLIB) containing the +* \emph{macrolib} information corresponding to the beginning of step +* conditions in case a ramp variation of the cross sections in set. +* Beginning of step conditions should not be confused with beginning of +* transient or initial conditions.} By default, a step variation is set +* where cross sections are assumed constant and given by MACRO. +* SYST\_0 : name of the \emph{lcm} object (type L\_SYSTEM) corresponding to +* \emph{macrolib} MACRO\_0 and \emph{tracking} TRACK. +* kinsol\_data : structure containing the data to module KINSOL: +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER NENTRY,IENTRY(NENTRY),JENTRY(NENTRY) + CHARACTER HENTRY(NENTRY)*12 + TYPE(C_PTR) KENTRY(NENTRY) +*---- +* LOCAL VARIABLES +*---- + CHARACTER TEXT12*12,HSIGN*12,CMODUL*12,HSMG*131 +*---- +* PARAMETER VALIDATION +*---- + IF((NENTRY.NE.4).AND.(NENTRY.NE.6))CALL XABORT('@KINSOL:' + 1 //' INVALID NUMBER OF MODULE PARAMETERS.') + DO 10 IEN=1,NENTRY + IF((IENTRY(IEN).NE.1).AND.(IENTRY(IEN).NE.2)) + 1 CALL XABORT('@KINSOL: LCM OBJECTS EXPECTED.') + 10 CONTINUE +* L_KINET + CALL LCMGTC(KENTRY(1),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_KINET')THEN + TEXT12=HENTRY(1) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_KINET EXPECTED.') + ENDIF + IF(JENTRY(1).NE.1)CALL XABORT('@KINSOL: L_KINET IN MODI' + 1 //'FICATION MODE EXPECTED.') + CALL LCMGTC(KENTRY(1),'TRACK-TYPE',12,CMODUL) +* L_MACROLIB(1) + CALL LCMGTC(KENTRY(2),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_MACROLIB')THEN + TEXT12=HENTRY(2) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_MACROLIB EXPECTED(1).') + ENDIF + IF(JENTRY(2).NE.2)CALL XABORT('@KINSOL: L_MACROLIB IN R' + 1 //'EAD-ONLY MODE EXPECTED AT RHS(1).') +* L_TRACK + CALL LCMGTC(KENTRY(3),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_TRACK')THEN + TEXT12=HENTRY(3) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_TRACK EXPECTED.') + ENDIF + IF(JENTRY(3).NE.2)CALL XABORT('@KINSOL: L_TRACK IN READ' + 1 //'-ONLY MODE EXPECTED AT RHS.') + CALL LCMGTC(KENTRY(3),'TRACK-TYPE',12,HSIGN) + IF(HSIGN.NE.CMODUL)CALL XABORT('@KINSOL: INVALID TRACKI' + 1 //'NG TYPE IN L_TRACK.') +* L_SYSTEM(1) + CALL LCMGTC(KENTRY(4),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_SYSTEM')THEN + TEXT12=HENTRY(4) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_SYSTEM EXPECTED.') + ENDIF + IF(JENTRY(4).NE.2)CALL XABORT('@KINSOL: L_SYSTEM IN READ' + 1 //'-ONLY MODE EXPECTED AT RHS.') + CALL LCMGTC(KENTRY(4),'LINK.MACRO',12,TEXT12) + IF(HENTRY(2).NE.TEXT12) THEN + WRITE(HSMG,'(40H@KINSOL: INVALID MACROLIB OBJECT NAME ='', + 1 A12,18H'', EXPECTED NAME='',A12,2H''.)') HENTRY(2),TEXT12 + CALL XABORT(HSMG) + ENDIF + CALL LCMGTC(KENTRY(4),'LINK.TRACK',12,TEXT12) + IF(HENTRY(3).NE.TEXT12) THEN + WRITE(HSMG,'(40H@KINSOL: INVALID TRACKING OBJECT NAME ='',A12, + 1 18H'', EXPECTED NAME='',A12,2H''.)') HENTRY(3),TEXT12 + CALL XABORT(HSMG) + ENDIF + CALL LCMPTC(KENTRY(1),'LINK.TRACK',12,TEXT12) +* L_MACROLIB(2) + IF(NENTRY.EQ.6)THEN + CALL LCMGTC(KENTRY(5),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_MACROLIB')THEN + TEXT12=HENTRY(5) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_MACROLIB EXPECTED(2).') + ENDIF + IF(JENTRY(5).NE.2)CALL XABORT('@KINSOL: L_MACROLIB IN' + 1 //' READ-ONLY MODE EXPECTED AT RHS(2).') +* L_SYSTEM(2) + CALL LCMGTC(KENTRY(6),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_SYSTEM')THEN + TEXT12=HENTRY(6) + CALL XABORT('@KINSOL: SIGNATURE OF '//TEXT12//' IS ' + 1 //HSIGN//'. L_SYSTEM EXPECTED.') + ENDIF + IF(JENTRY(6).NE.2)CALL XABORT('@KINSOL: L_SYSTEM IN READ' + 1 //'-ONLY MODE EXPECTED AT RHS.') + CALL LCMGTC(KENTRY(6),'LINK.TRACK',12,TEXT12) + IF(HENTRY(3).NE.TEXT12) THEN + WRITE(HSMG,'(40H@KINSOL: INVALID TRACKING OBJECT NAME ='', + 1 A12,18H'', EXPECTED NAME='',A12,2H''.)') HENTRY(3),TEXT12 + CALL XABORT(HSMG) + ENDIF + ENDIF +*---- +* READ THE INPUT DATA +*---- + CALL KINRD2(NENTRY,KENTRY,CMODUL) + RETURN + END |
