summaryrefslogtreecommitdiff
path: root/Donjon/src/MOVCHK.f
blob: cc7d27414db03690e7f961b66f238b0c65b8bdd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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