| 1 |
* |
| 2 |
* $Id$ |
| 3 |
* |
| 4 |
* $Log$ |
| 5 |
* |
| 6 |
#if defined(GPAMELA_GARFIELD) |
| 7 |
*CMZ : 3.00/00 11/05/2001 17.32.49 by Unknown |
| 8 |
*-- Author : Marialuigia Ambriola 30/04/2001 |
| 9 |
SUBROUTINE GPGARIN |
| 10 |
*----------------------------------------------------------------------- |
| 11 |
* MAIN - This program reads headers from the input file and calls |
| 12 |
* the appropriate routines to carry out the requested action. |
| 13 |
* VARIABLE : GSTRING : serves for identifying the header. |
| 14 |
* (Last changed on 13/ 2/00.) |
| 15 |
*----------------------------------------------------------------------- |
| 16 |
IMPLICIT NONE |
| 17 |
C # GPAMELA Related commons |
| 18 |
#include "gcunit.inc" |
| 19 |
#include "gpunit.inc" |
| 20 |
C # END. GPAMELA Related commons |
| 21 |
#include "dimensions.inc" |
| 22 |
C ML: |
| 23 |
C # +SEQ,CELLDATA. |
| 24 |
C # +SEQ,GASDATA. |
| 25 |
#include "celldata.inc" |
| 26 |
#include "gasdata.inc" |
| 27 |
C END ML. |
| 28 |
C # +SEQ,BFIELD. |
| 29 |
#include "printplot.inc" |
| 30 |
#include "input.inc" |
| 31 |
LOGICAL STDSTR |
| 32 |
INTEGER NC,IFAIL,GNWORD,INPCMP |
| 33 |
CHARACTER*(MXCHAR) GSTRING |
| 34 |
EXTERNAL STDSTR,INPCMP |
| 35 |
WRITE(CHMAIL,10000) |
| 36 |
CALL GMAIL(1,0) |
| 37 |
*** Initialise variables, graphics, input and algebra. |
| 38 |
CALL INIT |
| 39 |
*** Set the LUN number garfield has to read from and open it |
| 40 |
LUN=LUGAR |
| 41 |
CALL DSNOPN(CHGAR,LEN(CHGAR),LUN,'READ-FILE',IFAIL) |
| 42 |
IF (IFAIL.NE.0) THEN |
| 43 |
WRITE(CHMAIL,10100) IFAIL, CHGAR, LUN |
| 44 |
CALL GMAIL(1,0) |
| 45 |
GOTO 20 |
| 46 |
ENDIF |
| 47 |
*** Start an input loop that stops at the EOF or at the STOP command. |
| 48 |
IFAIL=0 |
| 49 |
*** Otherwise the line should start with an & symbol. |
| 50 |
10 CONTINUE |
| 51 |
CALL INPNUM(GNWORD) |
| 52 |
* Skip blank lines. |
| 53 |
IF(GNWORD.EQ.0)THEN |
| 54 |
CALL INPWRD(GNWORD) |
| 55 |
GOTO 10 |
| 56 |
ENDIF |
| 57 |
* Stay in main if requested. |
| 58 |
IF(INPCMP(1,'&MAIN')+INPCMP(2,'MAIN').NE.0)THEN |
| 59 |
CALL INPWRD(GNWORD) |
| 60 |
GOTO 10 |
| 61 |
ENDIF |
| 62 |
* Make sure it starts with an ampersand. |
| 63 |
CALL INPSTR(1,1,GSTRING,NC) |
| 64 |
IF(GSTRING(1:1).NE.'&')THEN |
| 65 |
WRITE(CHMAIL,10200) |
| 66 |
CALL GMAIL(1,0) |
| 67 |
CALL INPWRD(GNWORD) |
| 68 |
GOTO 10 |
| 69 |
ELSEIF(NC.EQ.1.AND.GNWORD.EQ.1)THEN |
| 70 |
WRITE(CHMAIL,10300) |
| 71 |
CALL GMAIL(1,0) |
| 72 |
CALL INPWRD(GNWORD) |
| 73 |
GOTO 10 |
| 74 |
ENDIF |
| 75 |
IF((GNWORD.GT.2.AND.NC.EQ.1).OR.(GNWORD.GT.1.AND.NC.GT.1)) THEN |
| 76 |
WRITE(CHMAIL,10400) |
| 77 |
CALL GMAIL(1,0) |
| 78 |
ENDIF |
| 79 |
*** Stop if STOP is the keyword. |
| 80 |
C # Just exit in the GPAMELA case |
| 81 |
IF(INPCMP(1,'&ST#OP')+INPCMP(2,'ST#OP')+ INPCMP(1,'&Q#UIT')+ |
| 82 |
+INPCMP(2,'Q#UIT')+ INPCMP(1,'&EX#IT')+INPCMP(2,'EX#IT').NE.0) |
| 83 |
+THEN |
| 84 |
GOTO 20 |
| 85 |
*** Call CELDEF if CELL is a keyword, |
| 86 |
ELSEIF(INPCMP(1,'&C#ELL')+INPCMP(2,'C#ELL').NE.0) THEN |
| 87 |
* Call cell reading routine. |
| 88 |
CALL CELDEF(IFAIL) |
| 89 |
IF(IFAIL.EQ.1) PRINT *,' !!!!!! MAIN WARNING : The cell'// |
| 90 |
+ ' section failed ; various sections can not be entered.' |
| 91 |
*** Call MAGINP if MAGNETIC is a keyword. |
| 92 |
ELSEIF(INPCMP(1,'&M#AGNETIC-#FIELD')+ INPCMP(2,'M#AGNETIC-#'// |
| 93 |
+ 'FIELD').NE.0) THEN |
| 94 |
PRINT *,' !!!!!! MAIN WARNING : The &CELL and &MAGNETIC'// |
| 95 |
+ ' sections are absent in this compilation.' |
| 96 |
CALL SKIP |
| 97 |
*** Read gas data if GAS is the first keyword, |
| 98 |
ELSEIF(INPCMP(1,'&G#AS')+INPCMP(2,'G#AS').NE.0)THEN |
| 99 |
* Call the gas data reading routine. |
| 100 |
CALL GASDEF(IFAIL) |
| 101 |
IF(IFAIL.NE.0.AND.JFAIL.EQ.1)THEN |
| 102 |
PRINT *,' !!!!!! MAIN WARNING : Gas section failed'// |
| 103 |
+ ' ; CO2 will be used for the time being.' |
| 104 |
CALL XXXGAS(IFAIL) |
| 105 |
IF(IFAIL.NE.0)PRINT *,' ###### MAIN ERROR : CO2'// |
| 106 |
+ ' data are not correct ; no gas data.' |
| 107 |
ELSEIF(IFAIL.NE.0)THEN |
| 108 |
PRINT *,' !!!!!! MAIN WARNING : The gas section'// |
| 109 |
+ ' failed ; various sections can not be entered.' |
| 110 |
ENDIF |
| 111 |
*** Call FLDINP if FIELD is a keyword. |
| 112 |
ELSEIF(INPCMP(1,'&F#IELD')+INPCMP(2,'F#IELD').NE.0)THEN |
| 113 |
PRINT *,' !!!!!! MAIN WARNING : The &FIELD section is '// |
| 114 |
+ 'absent in this compilation.' |
| 115 |
CALL SKIP |
| 116 |
*** Call OPTINP if OPTIMISE is a keyword. |
| 117 |
ELSEIF(INPCMP(1,'&O#PTIMISE')+INPCMP(2,'O#PTIMISE').NE.0)THEN |
| 118 |
PRINT *,' !!!!!! MAIN WARNING : The &OPTIMISE section '// |
| 119 |
+ 'is absent in this compilation.' |
| 120 |
CALL SKIP |
| 121 |
C ML: |
| 122 |
C ML *** Warn if the drift section has not been compiled. |
| 123 |
C ML |
| 124 |
C ML ELSEIF(INPCMP(1,'&D#RIFT')+INPCMP(2,'D#RIFT').NE.0)THEN |
| 125 |
C ML PRINT *,' !!!!!! MAIN WARNING : The &DRIFT section is '// |
| 126 |
C ML + 'absent in this compilation.' |
| 127 |
C ML C # CALL SKIP |
| 128 |
C ML CALL INPWRD(GNWORD) |
| 129 |
C ML GOTO 10 |
| 130 |
*** Call DRFINP if DRIFT is the keyword. |
| 131 |
ELSEIF(INPCMP(1,'&D#RIFT')+INPCMP(2,'D#RIFT').NE.0)THEN |
| 132 |
IF((.NOT.GASSET).AND.JFAIL.EQ.1)THEN |
| 133 |
PRINT *,' !!!!!! MAIN WARNING : No gas data found'// |
| 134 |
+ ' so far ; CO2 will be used for the time being.' |
| 135 |
CALL XXXGAS(IFAIL) |
| 136 |
IF(IFAIL.NE.0)THEN |
| 137 |
PRINT *,' ###### MAIN ERROR : The CO2 data'// |
| 138 |
+ ' are not correct ; no gas data.' |
| 139 |
CALL SKIP |
| 140 |
GOTO 10 |
| 141 |
ENDIF |
| 142 |
ELSEIF(.NOT.GASSET)THEN |
| 143 |
PRINT *,' !!!!!! MAIN WARNING : No valid gas data'// |
| 144 |
+ ' found so far ; drift section not executed.' |
| 145 |
CALL SKIP |
| 146 |
GOTO 10 |
| 147 |
ENDIF |
| 148 |
IF(CELSET)THEN |
| 149 |
CALL DRFINP |
| 150 |
ELSE |
| 151 |
PRINT *,' !!!!!! MAIN WARNING : No valid cell data'// |
| 152 |
+ ' found so far ; drift section not executed.' |
| 153 |
CALL SKIP |
| 154 |
ENDIF |
| 155 |
C END ML. |
| 156 |
*** Warn if the signal section has not been compiled. |
| 157 |
ELSEIF(INPCMP(1,'&SI#GNAL')+INPCMP(2,'SI#GNAL').NE.0)THEN |
| 158 |
PRINT *,' !!!!!! MAIN WARNING : The &SIGNAL section is '// |
| 159 |
+ 'absent in this compilation.' |
| 160 |
CALL SKIP |
| 161 |
*** Header is recognised. |
| 162 |
ELSE |
| 163 |
PRINT *,' !!!!!! MAIN WARNING : ',GSTRING(1:NC),' is'// |
| 164 |
+ ' not a valid header.' |
| 165 |
CALL SKIP |
| 166 |
ENDIF |
| 167 |
*** Read a new header. |
| 168 |
GOTO 10 |
| 169 |
10000 FORMAT(' GPGARIN: Welcome, this is Garfield - version 7.04,', |
| 170 |
+ ' updated until 6/1/2001.') |
| 171 |
10100 FORMAT(' GPGARIN: ERROR ID:',I8,' OPENING FILE:',A,', ON LUN', |
| 172 |
+ ': ',I8) |
| 173 |
10200 FORMAT(' GPGARIN: WARNING : Please enter a section', |
| 174 |
+ ' header, a control statement or a global command.') |
| 175 |
10300 FORMAT(' GPGARIN: WARNING : A section name should', |
| 176 |
+ ' be appended to the &; try again.') |
| 177 |
10400 FORMAT(' GPGARIN: WARNING : Keywords on the header', |
| 178 |
+ ' line are ignored in this version of the program.') |
| 179 |
10500 FORMAT(' GPGARIN: Exiting garfield INIT') |
| 180 |
20 CONTINUE |
| 181 |
WRITE(CHMAIL,10500) |
| 182 |
CALL GMAIL(1,0) |
| 183 |
RETURN |
| 184 |
END |
| 185 |
#endif |