summaryrefslogtreecommitdiff
path: root/Donjon/src/AFMLOC.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/AFMLOC.f')
-rw-r--r--Donjon/src/AFMLOC.f120
1 files changed, 120 insertions, 0 deletions
diff --git a/Donjon/src/AFMLOC.f b/Donjon/src/AFMLOC.f
new file mode 100644
index 0000000..746eb0d
--- /dev/null
+++ b/Donjon/src/AFMLOC.f
@@ -0,0 +1,120 @@
+*DECK AFMLOC
+ SUBROUTINE AFMLOC(NBURN,NTP,XBMAX,XBMIN,XBURN,MAX,MIN,COF,ILIN)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Burnup localisation and interpolation
+*
+*Copyright:
+* Copyright (C) 1996 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):
+* M.T. Sissaoui
+*
+*Parameters: input
+* NBURN total number of burnup steps.
+* XBURN burnup steps dimemsion (NBURN).
+* XBMAX higher burnup value.
+* XBMIN lower burnup value.
+*
+*Parameters: output
+* MAX maximum burnup number
+* MIN minimum burnup number
+* COF interpolation coefficient (Lagrange)
+*
+*Parameters:
+* NTP
+* MAX
+* MIN
+* ILIN
+*
+*---------------------------------------------------------------*
+*
+ DIMENSION XBURN(NBURN),ELMT(3)
+ DOUBLE PRECISION COF(3),XCOF(1)
+ NTP=2
+ COF(1)=0.0D0
+ COF(2)=0.0D0
+ COF(3)=0.0D0
+ IF(XBMAX.EQ.XBMIN) NTP=1
+ IF(XBMAX.GT.XBURN(NBURN)) THEN
+ WRITE(6,100) XBMAX,XBURN(NBURN)
+ CALL XABORT('AFMLOC: THE HIGHER BURNUP VALUE IS BEYOND'
+ 1 //' THE MAXIMUM BURNUP IN THE DATABASE')
+ ELSE IF(NBURN.EQ.1.AND.NTP.EQ.2) THEN
+ CALL XABORT('AFMLOC: TIME AVERAGE CALCULATION REQUIRE'
+ 1 //' AT LEAST TWO IRRADIATIONS STEPS')
+ ELSE IF(NBURN.EQ.1.AND.NTP.EQ.1) THEN
+ COF(1)=1.0D0
+ MIN=1
+ MAX=1
+ ELSE IF(NBURN.EQ.2) THEN
+ MIN=1
+ MAX=2
+ IF(NTP.EQ.1) THEN
+ XIRAD=XBMIN
+ IF(ILIN.EQ.1) THEN
+ NTOX=-1
+ ELSE
+ NTOX=2
+ ENDIF
+ NELE=2
+ ELMT(1)=XBURN(1)
+ ELMT(2)=XBURN(2)
+ CALL LIBLEX(NELE,XIRAD,ELMT,NTOX,XCOF(1))
+ ENDIF
+ ELSE IF(NBURN.GE.3) THEN
+ DO 85 IV=1,NTP
+ IF(IV.EQ.1) THEN
+ XIRAD=XBMIN
+ ELSE
+ XIRAD=XBMAX
+ ENDIF
+*
+ DO 80 I=2,NBURN
+ IF(XIRAD.GE.XBURN(I-1).AND.XIRAD.LE.XBURN(I)) THEN
+ IF(NTP.EQ.2) THEN
+ IF(IV.EQ.1) THEN
+ MIN=I-1
+ ELSE
+ IF(I+1.LE.NBURN) THEN
+ MAX=I+1
+ ELSE
+ MAX=I
+ ENDIF
+ ENDIF
+ ELSE
+ IF(I+1.LE.NBURN) THEN
+ MIN=I-1
+ MAX=I+1
+ ELSE
+ MIN=I-2
+ MAX=I
+ ENDIF
+ ENDIF
+ ENDIF
+ 80 CONTINUE
+ 85 CONTINUE
+ IF(NTP.EQ.1) THEN
+ IF(ILIN.EQ.1) THEN
+ NTOX=-1
+ ELSE
+ NTOX=3
+ ENDIF
+ NELE=3
+ ELMT(1)=XBURN(MAX-2)
+ ELMT(2)=XBURN(MAX-1)
+ ELMT(3)=XBURN(MAX)
+ CALL LIBLEX(NELE,XIRAD,ELMT,NTOX,COF(1))
+ ENDIF
+ ENDIF
+ RETURN
+*
+ 100 FORMAT(/30H AFMLOC: MAXIMUM BURNUP VALUE=,1P,E12.4/
+ 1 9X,25HMAXIMUM TABULATED BURNUP=,E12.4)
+ END