summaryrefslogtreecommitdiff
path: root/Dragon/src/XDRLXS.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/XDRLXS.f')
-rw-r--r--Dragon/src/XDRLXS.f119
1 files changed, 119 insertions, 0 deletions
diff --git a/Dragon/src/XDRLXS.f b/Dragon/src/XDRLXS.f
new file mode 100644
index 0000000..d49a89f
--- /dev/null
+++ b/Dragon/src/XDRLXS.f
@@ -0,0 +1,119 @@
+*DECK XDRLXS
+ SUBROUTINE XDRLXS(IPLIB ,IGS ,IPRINT,NPROC ,NAMDXS,IORD ,
+ > NGROUP,XSREC )
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Get/save Legendre-independent cross section data from/on IPLIB.
+*
+*Copyright:
+* Copyright (C) 2002 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): G. Marleau
+*
+*Parameters: input
+* IPLIB pointer to the internal library.
+* IGS get or save flag:
+* >0 save;
+* <0 get.
+* IPRINT Print level (cross sections printed if IPRINT>99).
+* NPROC number of Legendre-independent terms to process.
+* NAMDXS names of cross sections to process.
+* IORD cross section order:
+* =1 constant;
+* =2 linear;
+* =3 quadratic.
+* NGROUP number of energy groups.
+*
+*Parameters: input/output
+* XSREC cross section records for IRPROC=1,NPROC.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIB
+ INTEGER IGS,IPRINT,NPROC,IORD,NGROUP
+ REAL XSREC(NGROUP,NPROC)
+ CHARACTER NAMDXS(NPROC)*6,NORD*6
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER IOUT
+ PARAMETER (IOUT=6)
+ INTEGER IODIV,IXSR,IG,JG,ILENG,ITYLCM
+*
+ IF(IORD.EQ.1) THEN
+ NORD=' '
+ IODIV=1
+ ELSE IF(IORD.EQ.2) THEN
+ NORD=' LIN'
+ IODIV=2
+ ELSE IF(IORD.EQ.3) THEN
+ NORD=' QUA'
+ IODIV=4
+ ENDIF
+ IF(NPROC.LE.0) THEN
+ CALL XABORT('XDRLXS: ZERO OR NEGATIVE VALUE OF NPROC')
+ ENDIF
+*
+ IF(IGS.GT.0) THEN
+*----
+* SAVE LOCAL DEFAULT XS IF REQUIRED
+*----
+*
+ DO 100 IXSR=1,NPROC
+*----
+* FIND IF XS NOT ALL 0.0
+*----
+ DO 110 IG=1,NGROUP
+ IF(XSREC(IG,IXSR).NE.0.0) GO TO 115
+ 110 CONTINUE
+ GO TO 100
+*----
+* SAVE IF XS NOT ALL 0.0
+*----
+ 115 CALL LCMPUT(IPLIB,NAMDXS(IXSR)//NORD,NGROUP,2,XSREC(1,IXSR))
+ 100 CONTINUE
+ ELSE
+*----
+* GET LOCAL DEFAULT XS IF REQUIRED
+*----
+ DO 200 IXSR=1,NPROC
+ XSREC(:NGROUP,IXSR)=0.0
+ CALL LCMLEN(IPLIB,NAMDXS(IXSR)//NORD,ILENG,ITYLCM)
+ IF(ILENG.GT.0) THEN
+ CALL LCMGET(IPLIB,NAMDXS(IXSR)//NORD,XSREC(1,IXSR))
+ ENDIF
+ 200 CONTINUE
+ ENDIF
+ IF(IPRINT .GE. 100) THEN
+*----
+* Print XS
+*----
+ DO IXSR=1,NPROC
+ DO IG=1,NGROUP
+ IF(XSREC(IG,IXSR).NE.0.0) THEN
+ WRITE(IOUT,6000) NAMDXS(IXSR)//NORD
+ WRITE(IOUT,6010) (XSREC(JG,IXSR),JG=1,NGROUP)
+ GO TO 210
+ ENDIF
+ ENDDO
+ 210 CONTINUE
+ ENDDO
+ ENDIF
+ RETURN
+*----
+* Formats
+*----
+ 6000 FORMAT(/' CROSS SECTION TYPE = ',A12)
+ 6010 FORMAT(1P,5E16.7)
+ END