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 /Donjon/src/LZC.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/LZC.f')
| -rw-r--r-- | Donjon/src/LZC.f | 133 |
1 files changed, 133 insertions, 0 deletions
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
|
