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/LZC.f | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 Donjon/src/LZC.f (limited to 'Donjon/src/LZC.f') diff --git a/Donjon/src/LZC.f b/Donjon/src/LZC.f new file mode 100644 index 0000000..2fc9204 --- /dev/null +++ b/Donjon/src/LZC.f @@ -0,0 +1,133 @@ +*DECK LZC + SUBROUTINE LZC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Read specification for the liquid zone controllers; add the new data +* to the existing device object. +* +*Copyright: +* Copyright (C) 2007 Ecole Polytechnique de Montreal. +* +*Author(s): +* D. Sekki +* +*Parameters: input +* NENTRY number of data structures transfered to this module. +* HENTRY name of the data structures. +* IENTRY data structure type where: +* IENTRY=1 for LCM memory object; +* IENTRY=2 for XSM file; +* IENTRY=3 for sequential binary file; +* IENTRY=4 for sequential ASCII file. +* JENTRY access permission for the data structure where: +* JENTRY=0 for a data structure in creation mode; +* JENTRY=1 for a data structure in modifications mode; +* JENTRY=2 for a data structure in read-only mode. +* KENTRY data structure pointer. +* +*Comments: +* The LZC: module specification is: +* DEVICE MATEX := LZC: [ DEVICE ] MATEX :: (desclzc) ; +* where +* DEVICE : name of the \emph{device} object. +* Note, if the rod-type devices are not present in the reactor core, then +* DEVICE object must appear only on the LHS (i.e. in create mode), it will +* contain the information only with respect to the liquid zone controllers. +* However, if the rod-type devices are present in the reactor core, then they +* must be specified first (i.e. before the liquid controllers) using the DEVINI: +* module. In the last case, the DEVICE object must also appear on the RHS +* (i.e. in modification mode), it will contain the additional and separate +* information with respect to the liquid zone controllers. +* MATEX : name of the \emph{matex} object +* that will be updated by the module. The lzc-devices material mixtures are +* appended to the previous material index and the lzc-devices indices are +* also modified, accordingly. +* (desclzc) : structure describing the input data to the LZC: module. +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER NENTRY,IENTRY(NENTRY),JENTRY(NENTRY) + TYPE(C_PTR) KENTRY(NENTRY) + CHARACTER HENTRY(NENTRY)*12 +*---- +* LOCAL VARIABLES +*---- + PARAMETER(NSTATE=40) + CHARACTER HSIGN*12,TEXT12*12 + INTEGER ISTATE(NSTATE) + REAL LIMIT(6) + LOGICAL LNEW + TYPE(C_PTR) IPDEV,IPMTX + REAL, ALLOCATABLE, DIMENSION(:) :: XXX,YYY,ZZZ +*---- +* PARAMETER VALIDATION +*---- + IF(NENTRY.NE.2)CALL XABORT('@LZC: TWO PARAMETERS EXPECTED') + TEXT12=HENTRY(1) + IF((IENTRY(1).NE.1).AND.(IENTRY(1).NE.2))CALL XABORT('@LZ' + 1 //'C: LCM OBJECT EXPECTED FOR L_DEVICE ('//TEXT12//').') + IF(JENTRY(1).EQ.1)THEN + CALL LCMGTC(KENTRY(1),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_DEVICE')CALL XABORT('@LZC: MISSING L_DEV' + 1 //'ICE OBJECT.') + LNEW=.FALSE. + ELSEIF(JENTRY(1).EQ.0)THEN + HSIGN='L_DEVICE' + CALL LCMPTC(KENTRY(1),'SIGNATURE',12,HSIGN) + LNEW=.TRUE. + ELSE + CALL XABORT('@LZC: ONLY CREATE OR MODIFICATION MODE EXPEC' + 1 //'TED FOR L_DEVICE OBJECT.') + ENDIF + IPDEV=KENTRY(1) + IF((IENTRY(2).NE.1).AND.(IENTRY(2).NE.2))CALL XABORT('@LZ' + 1 //'C: LCM OBJECT EXPECTED FOR L_MATEX.') + CALL LCMGTC(KENTRY(2),'SIGNATURE',12,HSIGN) + IF(HSIGN.NE.'L_MATEX')CALL XABORT('@LZC: MISSING L_MATEX.') + IF(JENTRY(2).NE.1)CALL XABORT('@LZC: MODIFICATION MODE EX' + 1 //'PECTED FOR L_MATEX.') + IPMTX=KENTRY(2) +*---- +* RECOVER INFORMATION +*---- + ISTATE(:NSTATE)=0 + CALL LCMGET(IPMTX,'STATE-VECTOR',ISTATE) + IGEO=ISTATE(6) + IF(IGEO.NE.7)CALL XABORT('@LZC: ONLY' + 1 //' 3D-CARTESIAN GEOMETRY ALLOWED.') + NMIX=ISTATE(2) + NTOT=ISTATE(5) + LX=ISTATE(8) + LY=ISTATE(9) + LZ=ISTATE(10) +* LIMITS ALONG X-AXIS + ALLOCATE(XXX(LX+1)) + XXX(:LX+1)=0.0 + CALL LCMGET(IPMTX,'MESHX',XXX) + LIMIT(1)=XXX(1) + LIMIT(2)=XXX(LX+1) + DEALLOCATE(XXX) +* LIMITS ALONG Y-AXIS + ALLOCATE(YYY(LY+1)) + YYY(:LY+1)=0.0 + CALL LCMGET(IPMTX,'MESHY',YYY) + LIMIT(3)=YYY(1) + LIMIT(4)=YYY(LY+1) + DEALLOCATE(YYY) +* LIMITS ALONG Z-AXIS + ALLOCATE(ZZZ(LZ+1)) + ZZZ(:LZ+1)=0.0 + CALL LCMGET(IPMTX,'MESHZ',ZZZ) + LIMIT(5)=ZZZ(1) + LIMIT(6)=ZZZ(LZ+1) + DEALLOCATE(ZZZ) +* READ LZC INPUT DATA + CALL LZCDRV(IPDEV,IPMTX,IGEO,NMIX,NTOT,LIMIT,LNEW) + RETURN + END -- cgit v1.2.3