summaryrefslogtreecommitdiff
path: root/Donjon/src/DEVDGD.f
blob: 2f9d7f52de6549ed6b6e09f576676ef8dff86939 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
*DECK DEVDGD
      SUBROUTINE DEVDGD(IPDEV,NROD,DGRP,IMPX)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Create rod-device group directories on the device data structure.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s): 
* D. Sekki
*
*Parameters: input
* IPDEV  pointer to device information.
* NROD   total number of rod-devices.
* DGRP   total number of rod-device groups.
* IMPX   printing index (=0 for no print).
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPDEV
      INTEGER NROD,DGRP,IMPX
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6)
      CHARACTER TEXT*12
      INTEGER RODID(NROD)
      DOUBLE PRECISION DFLOT
      TYPE(C_PTR) JPDEV,KPDEV
*----
*  CREATE GROUPS
*----
      JPDEV=LCMLID(IPDEV,'ROD_GROUP',DGRP)
      IGRP=0
      IF(IMPX.GT.0)WRITE(IOUT,1001)
      CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
      IF(ITYP.NE.3)CALL XABORT('@DEVDGD: KEYWORD GROUP-ID EXPECTED.')
      IF(TEXT.NE.'GROUP-ID')CALL XABORT('@DEVDGD: KEYWORD GROUP-'
     1 //'ID EXPECTED.')
   10 IGRP=IGRP+1
      CALL REDGET(ITYP,JGRP,FLOT,TEXT,DFLOT)
      IF(ITYP.NE.1)CALL XABORT('@DEVDGD: INTEGER GROUP-ID NUMBER'
     1 //' EXPECTED.')
      IF(JGRP.NE.IGRP)THEN
        WRITE(IOUT,*)'@DEVDGD: READ GROUP-ID NUMBER #',JGRP
        WRITE(IOUT,*)'@DEVDGD: EXPECTED GROUP-ID NUMBER #',IGRP
        CALL XABORT('@DEVDGD: WRONG GROUP-ID NUMBER.')
      ENDIF
      IF(JGRP.GT.DGRP)THEN
        WRITE(IOUT,*)'@DEVDGD: GIVEN TOTAL NUMBER OF GROUPS ',DGRP
        WRITE(IOUT,*)'@DEVDGD: READ GROUP-ID NUMBER #',JGRP
        CALL XABORT('@DEVDGD: WRONG GROUP-ID NUMBER.')
      ENDIF
      CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
      IF(ITYP.NE.3)CALL XABORT('@DEVDGD: KEYWORD EXPECTED.')
*----
*  OPTION ALL
*----
      IF(TEXT.EQ.'ALL')THEN
        KPDEV=LCMDIL(JPDEV,IGRP)
        DO 30 ID=1,NROD
        RODID(ID)=ID
   30   CONTINUE
        CALL LCMPUT(KPDEV,'GROUP-ID',1,1,IGRP)
        CALL LCMPUT(KPDEV,'NUM-ROD',1,1,NROD)
        CALL LCMPUT(KPDEV,'ROD-ID',NROD,1,RODID)
*
        CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
        IF(ITYP.NE.3)CALL XABORT('@DEVDGD: WRONG INPUT DATA.')
        IF(TEXT.EQ.';')THEN
          IF(IGRP.EQ.DGRP)THEN
            NDG=NROD
            GOTO 100
          ENDIF
          WRITE(IOUT,*)'@DEVDGD: GIVEN TOTAL NUMBER OF GROUPS ',DGRP
          WRITE(IOUT,*)'@DEVDGD: CREATED ONLY NUMBER OF GROUPS ',IGRP
          CALL XABORT('@DEVDGD: WRONG NUMBER OF GROUPS.')
        ELSEIF(TEXT.EQ.'GROUP-ID')THEN
          IF(IMPX.GT.0)WRITE(IOUT,1000)IGRP,NROD
          GOTO 10
        ELSE
          CALL XABORT('@DEVDGD: WRONG KEYWORD '//TEXT)
        ENDIF
*----
*  OPTION ROD-ID
*----
      ELSEIF(TEXT.EQ.'ROD-ID')THEN
        NDG=0
        RODID(:NROD)=0
        KPDEV=LCMDIL(JPDEV,IGRP)
*
   50   CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
        IF(ITYP.EQ.3)THEN
          IF(TEXT.EQ.';')THEN
            IF(IGRP.EQ.DGRP)GOTO 100
            WRITE(IOUT,*)'@DEVDGD: GIVEN TOTAL NUMBER OF GROUPS ',DGRP
            WRITE(IOUT,*)'@DEVDGD: CREATED ONLY NUMBER OF GROUPS ',IGRP
            CALL XABORT('@DEVDGD: WRONG NUMBER OF GROUPS.')
          ELSEIF(TEXT.EQ.'GROUP-ID')THEN
            IF(IMPX.GT.0)WRITE(IOUT,1000)IGRP,NDG
            GOTO 10
          ELSE
            CALL XABORT('@DEVDGD: WRONG KEYWORD '//TEXT)
          ENDIF
*----
*  ROD-ID NUMBERS
*----
        ELSEIF(ITYP.EQ.1)THEN
          ID=NITMA
          IF((ID.GT.NROD).OR.(ID.LE.0))THEN
            WRITE(IOUT,*)'@DEVDGD: FOR THE GROUP #',IGRP
            WRITE(IOUT,*)'@DEVDGD: READ ROD-ID #',ID
            CALL XABORT('@DEVDGD: WRONG ROD-ID NUMBER.')
          ENDIF
          DO I=1,NROD
            IF(ID.EQ.RODID(I))THEN
              WRITE(IOUT,*)'@DEVDGD: FOR THE GROUP #',IGRP
              WRITE(IOUT,*)'@DEVDGD: REPEATED ROD-ID #',ID
              CALL XABORT('@DEVDGD: WRONG ROD-ID NUMBER.')
            ENDIF
          ENDDO
*
          NDG=NDG+1
          IF(NDG.GT.NROD)THEN
            WRITE(IOUT,*)'@DEVDGD: FOR THE GROUP #',IGRP
            WRITE(IOUT,*)'@DEVDGD: WRONG TOTAL NUMBER OF RODS ',NDG
            CALL XABORT('@DEVDGD: INVALID INPUT OF ROD-DEVICES.')
          ENDIF
          RODID(NDG)=ID
          CALL LCMPUT(KPDEV,'GROUP-ID',1,1,IGRP)
          CALL LCMPUT(KPDEV,'NUM-ROD',1,1,NDG)
          CALL LCMPUT(KPDEV,'ROD-ID',NDG,1,RODID)
        ELSE
          CALL XABORT('@DEVDGD: WRONG INPUT DATA.')
        ENDIF
        GOTO 50
      ELSE
        CALL XABORT('@DEVDGD: WRONG KEYWORD '//TEXT)
      ENDIF
  100 IF(IMPX.GT.0)WRITE(IOUT,1000)IGRP,NDG
      IF(IMPX.GT.0)WRITE(IOUT,1002)DGRP
      RETURN
*
 1000 FORMAT(/1X,' => CREATED A GROUP #',I2.2,
     1        4X,'INCLUDES TOTAL NUMBER OF RODS:',I3)
 1001 FORMAT(/1X,'**  CREATING GROUPS FOR ROD-DEVICES  **')
 1002 FORMAT(/1X,39('-')/1X,'TOTAL NUMBER OF GROUPS CREATED: ',I2)
      END