summaryrefslogtreecommitdiff
path: root/Trivac/src/KINSOL.f
diff options
context:
space:
mode:
Diffstat (limited to 'Trivac/src/KINSOL.f')
-rwxr-xr-xTrivac/src/KINSOL.f162
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