/* MHERM1.f -- translated by f2c (version 19960827).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

#include "Data_f2c.h"

/* Common Block Declarations */

extern struct {
    doublereal tdebut, tfinal, verifi, cmherm[576]	/* was [6][3][2][4][4]
	     */;
} mmcmher_;

#define mmcmher_1 mmcmher_

/* Subroutine */ int mmherm1_(debfin, ordrmx, iordre, hermit, iercod)
doublereal *debfin;
integer *ordrmx, *iordre;
doublereal *hermit;
integer *iercod;
{
    /* System generated locals */
    integer hermit_dim1, hermit_dim2, hermit_offset;

    /* Local variables */
    static integer nbval;
    static doublereal d1;
    extern /* Subroutine */ int mmherm0_();
    static integer cot;
    extern /* Subroutine */ int maermsg_(), msrfill_();





/* < */
/* **NOTICE */
/*  THIS SOFTWARE IS THE PROPERTY OF CISIGRAPH. */
/*  THIS CODE MUST NOT BE DISTRIBUTED OR COPIED WITHOUT THE PRIOR */
/*  WRITTEN PERMISSION OF CISIGRAPH AND IS ONLY TO BE USED ON THE */
/*  SITE WHERE IT IS INSTALLED BY CISIGRAPH */
/* **NOTICE */

/* ***********************************************************************
 */

/*     FONCTION : */
/*     ---------- */
/*      lecture des coeffs. des polynomes d'interpol. d'HERMITE */

/*     MOTS CLES : */
/*     ----------- */
/*      MATH_ACCES :: HERMITE */

/*     ARGUMENTS D'ENTREE : */
/*     -------------------- */
/*       DEBFIN : PARAMETRES OU SONT DONNEES LES CONTRAINTES */
/*                 DEBFIN(1) : PREMIER PARAMETRE */
/*                 DEBFIN(2) : DEUXIEME PARAMETRE */

/*           Doivent etre egaux aux argeuments correspondant lors */
/*           du dernier appel a MMHERM0 pour l'init. des coeffs. */

/*       ORDRMX : sert a indiquer le dimensionnent de HERMIT: */
/*              on n'a pas le choix : ORDRMX doit etre egal a la valeur */
/*              du PARAMETER IORDMX de l'INCLUDE MMCMHER, soit 2 pour */
/*              l'instant. */

/*       IORDRE (2) : Ordres de contraintes en chaque parametre DEBFIN(I) 
*/
/*              corrspondant. doivent etre compris entre -1 (pas de */
/*              contrainte) et ORDRMX. */


/*     ARGUMENTS DE SORTIE : */
/*     --------------------- */

/*       HERMIT : HERMIT(1:IORDRE(1)+IORDRE(2)+2, j, cote) sont les */
/*       coefficients dans la base canonique du polynome d'Hermite */
/*       correspondant aux ordres IORDRE aux paramtres DEBFIN pour */
/*       la contrainte d'ordre j en DEBFIN(cote). j est compris entre */
/*       0 et IORDRE(cote). */


/*       IERCOD : Code d'erreur : */
/*          -1: O.K mais on a du reinitialise les coefficients */
/*                 (info pour optimisation) */
/*          0 : O.K. */
/*          1 : Erreur dans MMHERM0 */
/*          2 : arguments invalides */

/*     COMMONS UTILISES : */
/*     ------------------ */

/*     REFERENCES APPELEES   : */
/*     ---------------------- */
/*     Type  Name */

/*     DESCRIPTION/REMARQUES/LIMITATIONS : */
/*     ----------------------------------- */

/*        Ce programme lit les  coefficients des polynomes */
/*     d'Hermite qui ont ete au prealable initialise par MMHERM0 */

/* PMN : L'initialisation n'est plus a la charge de l'appelant. */

/*     HISTORIQUE */
/*     --------------------------------------------------------- */
/*     14-01-94: PMN; On appelle MMHERM0 si pas initialise. */
/*     12-11-91: ALR; ECRITURE VERSION ORIGINALE. */
/* > */
/* ***********************************************************************
 */




/*     INCLUDE MMCMHER */
/* < */
/* **NOTICE */
/*  THIS SOFTWARE IS THE PROPERTY OF CISIGRAPH. */
/*  THIS CODE MUST NOT BE DISTRIBUTED OR COPIED WITHOUT THE PRIOR */
/*  WRITTEN PERMISSION OF CISIGRAPH AND IS ONLY TO BE USED ON THE */
/*  SITE WHERE IT IS INSTALLED BY CISIGRAPH */
/* **NOTICE */

/* ********************************************************************** 
*/

/*     FONCTION : */
/*     ---------- */
/*      Sert a STOCKER les coefficients des polynomes de */
/*      l'interpolation d'Hermite */

/*     MOTS CLES : */
/*     ----------- */
/*      HERMITE */

/*     DEMSCRIPTION/REMARQUES/LIMITATIONS : */
/*     ----------------------------------- */

/*     les coefficients des polynomes d'hermitesont calcules par */
/*     la routine MMHERM0 et lus par la routine MMHERM1 */

/* $    HISTORIQUE DES MODIFICATIONS : */
/*     ------------------------------ */
/*     23-11-91: ALR; MODIF DIMENSIONNEMENT */
/*     12-11-91: ALR; CREATION */
/* > */
/* ********************************************************************** 
*/





/*     NBCOEF est la taille de CMHERM (voir plus bas) */



/* ***********************************************************************
 */





/* ***********************************************************************
 */
/*     Initialisations */
/* ***********************************************************************
 */

    /* Parameter adjustments */
    --debfin;
    hermit_dim1 = (*ordrmx << 1) + 2;
    hermit_dim2 = *ordrmx + 1;
    hermit_offset = hermit_dim1 * hermit_dim2 + 1;
    hermit -= hermit_offset;
    --iordre;

    /* Function Body */
    *iercod = 0;


/* ***********************************************************************
 */
/*     Verification des donnees */
/* ***********************************************************************
 */


    if (*ordrmx != 2) {
	goto L9102;
    }

    for (cot = 1; cot <= 2; ++cot) {
	if (iordre[cot] < -1) {
	    goto L9102;
	}
	if (iordre[cot] > *ordrmx) {
	    goto L9102;
	}
/* L100: */
    }


/*     EST-CE BIEN INITIALISE ? */

    d1 = abs(debfin[1]) + abs(debfin[2]);
    d1 *= 16111959;

/*     SINON ON INITIALISE */

    if (debfin[1] != mmcmher_1.tdebut || debfin[2] != mmcmher_1.tfinal || d1 
	    != mmcmher_1.verifi) {
	*iercod = -1;
	mmherm0_(&debfin[1], iercod);
	if (*iercod > 0) {
	    goto L9101;
	}
    }


/* ***********************************************************************
 */
/*        LECTURE */
/* ***********************************************************************
 */

    nbval = 36;

    msrfill_(&nbval, &mmcmher_1.cmherm[((((iordre[1] + (iordre[2] << 2)) << 1) 
	    + 1) * 3 + 1) * 6 + 156], &hermit[hermit_offset]);

/* ***********************************************************************
 */

    goto L9999;

/* ***********************************************************************
 */

L9101:
    *iercod = 1;
    goto L9999;

L9102:
    *iercod = 2;
    goto L9999;

/* ***********************************************************************
 */

L9999:

    maermsg_("MMHERM1", iercod, 7L);

/* ***********************************************************************
 */
 return 0 ;
} /* mmherm1_ */

