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/MOVCHK.f | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 Donjon/src/MOVCHK.f (limited to 'Donjon/src/MOVCHK.f') 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 -- cgit v1.2.3