/* refer.f -- translated by f2c (version 19950314).
   You must link the resulting object file with the libraries:
	-lF77 -lI77 -lm   (in that order)
*/

#include "f2c.h"

/* Common Block Declarations */

struct {
    char argz[512];
} argz_;

#define argz_1 argz_

struct {
    char allref[34240]	/* was [107][4] */;
} refs_;

#define refs_1 refs_

struct {
    integer numat, nat[86], nfirst[86], nmidle[86], nlast[86], norbs, nelecs, 
	    nalpha, nbeta, nclose, nopen, ndumy;
    doublereal fract;
} molkst_;

#define molkst_1 molkst_

struct {
    char keywrd[80];
} keywrd_;

#define keywrd_1 keywrd_

/* Table of constant values */

static integer c__1 = 1;

/* Subroutine */ int refer_(void)
{
    /* Initialized data */

    static logical mix = FALSE_;

    /* Format strings */
    static char fmt_40[] = "(/////10x,a,4(/10x,a))";

    /* System generated locals */
    integer i__1;

    /* Builtin functions */
    integer i_indx(char *, char *, ftnlen, ftnlen);
    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
    integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void);
    /* Subroutine */ int s_stop(char *, ftnlen);

    /* Local variables */
    static integer mode, i, j;
    static logical allok, mixok, elemns[107];

    /* Fortran I/O blocks */
    static cilist io___8 = { 0, 6, 0, "(A,I3)", 0 };
    static cilist io___9 = { 0, 6, 0, "(A)", 0 };
    static cilist io___10 = { 0, 6, 0, fmt_40, 0 };
    static cilist io___11 = { 0, 6, 0, fmt_40, 0 };


/* COMDECK SIZES */
/************************************************************************
****/
/*  THIS FILE CONTAINS ALL THE ARRAY SIZES FOR USE IN MOPAC.              
**/
/*                                                                        
**/
/*    THERE ARE ONLY  PARAMETERS THAT THE PROGRAMMER NEED SET:            
**/
/*    MAXHEV = MAXIMUM NUMBER OF HEAVY ATOMS (HEAVY: NON-HYDROGEN ATOMS)  
**/
/*    MAXLIT = MAXIMUM NUMBER OF HYDROGEN ATOMS.                          
**/
/*    MAXTIM = DEFAULT TIME FOR A JOB. (SECONDS)                          
**/
/*    MAXDMP = DEFAULT TIME FOR AUTOMATIC RESTART FILE GENERATION (SECS)  
**/
/*                                                                        
**/
/*                                                                        
**/
/************************************************************************
****/
/*                                                                        
**/
/*  THE FOLLOWING CODE DOES NOT NEED TO BE ALTERED BY THE PROGRAMMER      
**/
/*                                                                        
**/
/************************************************************************
****/
/*                                                                        
**/
/*   ALL OTHER PARAMETERS ARE DERIVED FUNCTIONS OF THESE TWO PARAMETERS   
**/
/*                                                                        
**/
/*     NAME                   DEFINITION                                  
**/
/*    NUMATM         MAXIMUM NUMBER OF ATOMS ALLOWED.                     
**/
/*    MAXORB         MAXIMUM NUMBER OF ORBITALS ALLOWED.                  
**/
/*    MAXPAR         MAXIMUM NUMBER OF PARAMETERS FOR OPTIMISATION.       
**/
/*    N2ELEC         MAXIMUM NUMBER OF TWO ELECTRON INTEGRALS ALLOWED.    
**/
/*    MPACK          AREA OF LOWER HALF TRIANGLE OF DENSITY MATRIX.       
**/
/*    MORB2          SQUARE OF THE MAXIMUM NUMBER OF ORBITALS ALLOWED.    
**/
/*    MAXHES         AREA OF HESSIAN MATRIX                               
**/
/************************************************************************
****/
/************************************************************************
****/
/*  FOR SHORT VERSION USE LINE WITH NMECI=1, FOR LONG VERSION USE LINE    
**/
/*  WITH NMECI=10                                                         
**/
/************************************************************************
****/
/*     PARAMETER (NMECI=1,   NPULAY=1) */
/************************************************************************
****/
/* DECK MOPAC */
/* next line added for Unix implementation for command line arguments */

    mixok = i_indx(keywrd_1.keywrd, "PARASOK", 80L, 7L) != 0;
    for (i = 1; i <= 102; ++i) {
/* L10: */
	elemns[i - 1] = FALSE_;
    }
    if (i_indx(keywrd_1.keywrd, "PM3", 80L, 3L) != 0) {
	mode = 4;
    } else if (i_indx(keywrd_1.keywrd, "AM1", 80L, 3L) != 0) {
	mode = 3;
    } else if (i_indx(keywrd_1.keywrd, "MINDO", 80L, 5L) != 0) {
	mode = 2;
    } else {
	mode = 1;
    }
    s_copy(refs_1.allref + (mode * 107 - 9) * 80, " DUMMY ATOMS ARE USED; TH"
	    "ESE DO NOT AFFECT THE CALCULATION", 80L, 58L);
    s_copy(refs_1.allref + (mode * 107 - 8) * 80, " ", 80L, 1L);
    i__1 = molkst_1.numat;
    for (i = 1; i <= i__1; ++i) {
	j = molkst_1.nat[i - 1];
/* L20: */
	elemns[j - 1] = TRUE_;
    }
    allok = TRUE_;
    for (i = 1; i <= 102; ++i) {
	if (elemns[i - 1]) {
	    if (i < 99 && ! mix && mode == 3) {
		mix = i_indx(refs_1.allref + (i + 213) * 80, "MNDO", 80L, 4L) 
			!= 0;
	    }
	    if (*(unsigned char *)&refs_1.allref[(i + mode * 107 - 108) * 80] 
		    != ' ') {
		s_wsfe(&io___8);
		do_fio(&c__1, " DATA ARE NOT AVAILABLE FOR ELEMENT NO.", 39L);
		do_fio(&c__1, (char *)&i, (ftnlen)sizeof(integer));
		e_wsfe();
		allok = FALSE_;
	    } else {
		s_wsfe(&io___9);
		do_fio(&c__1, refs_1.allref + (i + mode * 107 - 108) * 80, 
			80L);
		e_wsfe();
	    }
	}
/* L30: */
    }
    if (mix && ! mixok) {
	s_wsfe(&io___10);
	do_fio(&c__1, "SOME ELEMENTS HAVE BEEN SPECIFIED FOR WHICH ONLY MNDO",
		 53L);
	do_fio(&c__1, "PARAMETERS ARE AVAILABLE.  SUCH MIXTURES OF METHODS A"
		"RE", 55L);
	do_fio(&c__1, "VERY RISKY AND HAVE NOT BEEN FULLY TESTED.  IF YOU FE"
		"EL", 55L);
	do_fio(&c__1, "THE RISK IS WORTH WHILE - CHECK THE MANUAL FIRST - TH"
		"EN", 55L);
	do_fio(&c__1, "SPECIFY \"PARASOK\" IN THE KEYWORDS", 33L);
	e_wsfe();
	s_stop("", 0L);
    }
    if (allok) {
	return 0;
    }
    s_wsfe(&io___11);
    do_fio(&c__1, "SOME ELEMENTS HAVE BEEN SPECIFIED FOR WHICH", 43L);
    do_fio(&c__1, "NO PARAMETERS ARE AVAILABLE.  CALCULATION STOPPED.", 50L);
    e_wsfe();
    s_stop("", 0L);
    return 0;
} /* refer_ */

