summaryrefslogtreecommitdiff
path: root/Donjon/src/MOVCHK.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/MOVCHK.f')
-rw-r--r--Donjon/src/MOVCHK.f137
1 files changed, 137 insertions, 0 deletions
diff --git a/Donjon/src/MOVCHK.f b/Donjon/src/MOVCHK.f
new file mode 100644
index 0000000..cc7d274
--- /dev/null
+++ b/Donjon/src/MOVCHK.f
@@ -0,0 +1,137 @@
+*DECK MOVCHK
+ SUBROUTINE MOVCHK(IMPX,IMODE,NPART,IAXIS,ITOP,DELH,LENG,RODPOS)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Compute and set the new rod position and insertion level for the
+* fading or moving rod.
+*
+*Copyright:
+* Copyright (C) 2007 Ecole Polytechnique de Montreal.
+*
+*Author(s):
+* D. Sekki and A. Hebert
+*
+*Parameters: input
+* IMPX printing index (=0 for no print).
+* IMODE type of displacement: =1 for FADE; =2 for MOVE (DONJON3-type
+* movement).
+* NPART number of parts in the control rod.
+* IAXIS axis of rod movement: =1 for X; =2 for Y; =3 for Z.
+* ITOP rod insertion: = +1 from the top; = -1 from the bottom.
+* DELH rod displacement along the IAXIS of movement if FADE; position
+* of moving end in core if MOVE.
+* LENG fully-inserted complete rod position.
+* RODPOS fully inserted rod position.
+*
+*Parameters: output
+* RODPOS new rod position.
+*
+*-----------------------------------------------------------------------
+*
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER IMPX,IMODE,NPART,IAXIS,ITOP
+ REAL DELH,RODPOS(6,NPART),LENG(2),LIMINF
+*
+ PARAMETER(IOUT=6)
+*----
+* X-AXIS MOVEMENT
+*----
+ IF(IMPX.GT.1) WRITE(IOUT,1000) DELH
+ SUP=DELH
+ DO 10 IPART=1,NPART
+ IF(IAXIS.EQ.1) THEN
+ IF((ITOP.EQ.1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(1,IPART)=MAX(RODPOS(1,IPART),LENG(2)-DELH)
+ RODPOS(1,IPART)=MIN(RODPOS(1,IPART),RODPOS(2,IPART))
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(2,IPART)=MIN(RODPOS(2,IPART),LENG(1)+DELH)
+ RODPOS(2,IPART)=MAX(RODPOS(1,IPART),RODPOS(2,IPART))
+ ELSE IF((ITOP.EQ.1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(2,IPART)-RODPOS(1,IPART)
+ RODPOS(1,IPART)=SUP
+ RODPOS(2,IPART)=SUP+DELTA
+ SUP=RODPOS(2,IPART)
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(2,IPART)-RODPOS(1,IPART)
+ RODPOS(2,IPART)=SUP
+ RODPOS(1,IPART)=SUP-DELTA
+ SUP=RODPOS(1,IPART)
+ ENDIF
+*----
+* Y-AXIS MOVEMENT
+*----
+ ELSE IF(IAXIS.EQ.2) THEN
+ IF((ITOP.EQ.1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(3,IPART)=MAX(RODPOS(3,IPART),LENG(2)-DELH)
+ RODPOS(3,IPART)=MIN(RODPOS(3,IPART),RODPOS(4,IPART))
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(4,IPART)=MIN(RODPOS(4,IPART),LENG(1)+DELH)
+ RODPOS(4,IPART)=MAX(RODPOS(3,IPART),RODPOS(4,IPART))
+ ELSE IF((ITOP.EQ.1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(4,IPART)-RODPOS(3,IPART)
+ RODPOS(3,IPART)=SUP
+ RODPOS(4,IPART)=SUP+DELTA
+ SUP=RODPOS(4,IPART)
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(4,IPART)-RODPOS(3,IPART)
+ RODPOS(4,IPART)=SUP
+ RODPOS(3,IPART)=SUP-DELTA
+ SUP=RODPOS(3,IPART)
+ ENDIF
+*----
+* Z-AXIS MOVEMENT
+*----
+ ELSE IF(IAXIS.EQ.3) THEN
+ IF((ITOP.EQ.1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(5,IPART)=MAX(RODPOS(5,IPART),LENG(2)-DELH)
+ RODPOS(5,IPART)=MIN(RODPOS(5,IPART),RODPOS(6,IPART))
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.1)) THEN
+ RODPOS(6,IPART)=MIN(RODPOS(6,IPART),LENG(1)+DELH)
+ RODPOS(6,IPART)=MAX(RODPOS(5,IPART),RODPOS(6,IPART))
+ ELSE IF((ITOP.EQ.1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(6,IPART)-RODPOS(5,IPART)
+ RODPOS(5,IPART)=SUP
+ RODPOS(6,IPART)=SUP+DELTA
+ SUP=RODPOS(6,IPART)
+ ELSE IF((ITOP.EQ.-1).AND.(IMODE.EQ.2)) THEN
+ DELTA=RODPOS(6,IPART)-RODPOS(5,IPART)
+ RODPOS(6,IPART)=SUP
+ RODPOS(5,IPART)=SUP-DELTA
+ SUP=RODPOS(5,IPART)
+ ENDIF
+ ENDIF
+*----
+* PRINT NEW POSITION
+*----
+ IF(IMPX.GT.1) THEN
+ WRITE(IOUT,1001) IPART,RODPOS(1,IPART),RODPOS(3,IPART),
+ 1 RODPOS(5,IPART),RODPOS(2,IPART),RODPOS(4,IPART),
+ 2 RODPOS(6,IPART)
+ ENDIF
+ 10 CONTINUE
+*----
+* CONSISTENCY CHECK
+*----
+ LIMINF=0
+ IF(IMODE.EQ.2) THEN
+ IF(ITOP.EQ.-1) THEN
+ LIMINF=DELH-(LENG(2)-LENG(1))
+ ELSE IF(ITOP.EQ.1) THEN
+ LIMINF=DELH+(LENG(2)-LENG(1))
+ ENDIF
+ IF(ABS(SUP-LIMINF).GT.1.E-3) CALL XABORT('@MOVCHK: WRONG LENG'
+ 1 //'TH OF ADJUSTER')
+ ENDIF
+ RETURN
+*
+ 1000 FORMAT(/5X,'MOVCHK: MOVE A ROD BY',F10.4)
+ 1001 FORMAT(
+ 1 /5X,'MOVCHK: PART =',I5/
+ 2 5X,'NEW ROD POSITION :'/
+ 3 5X,'X-',F10.4,5X,'Y-',F10.4,5X,'Z-',F10.4/
+ 4 5X,'X+',F10.4,5X,'Y+',F10.4,5X,'Z+',F10.4)
+ END