/* MA1JAK.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"

/* Subroutine */ int mma1jak_(ndimen, nbroot, iordre, ndgjac, somtab, diftab, 
	cgauss, crvjac, iercod)
integer *ndimen, *nbroot, *iordre, *ndgjac;
doublereal *somtab, *diftab, *cgauss, *crvjac;
integer *iercod;
{
    /* System generated locals */
    integer somtab_dim1, somtab_offset, diftab_dim1, diftab_offset, 
	    crvjac_dim1, crvjac_offset, cgauss_dim1;

    /* Local variables */
    extern /* Subroutine */ int mmmapcoe_();
    static integer ibb;
    extern integer mnfndeb_();
    extern /* Subroutine */ int maermsg_(), mgenmsg_(), mgsomsg_(), mmapptt_()
	    ;




/* < */
/* **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 : */
/*     ---------- */
/*      Calcule la courbe d' approximation d' une fonction non */
/*      polynomiale dans la base de Jacobi. */

/*     MOTS CLES : */
/*     ----------- */
/*     FONCTION,DISCRETISATION,APPROXIMATION,CONTRAINTE,COURBE,JACOBI */

/*     ARGUMENTS D'ENTREE : */
/*     ------------------ */
/*     NDIMEN: Dimension totale de l' espace (somme des dimensions */
/*             des sous-espaces) */
/*     NBROOT: Nbre de points de discretisation de l'iso, extremites non 
*/
/*             comprises. */
/*     IORDRE: Ordre de contrainte aux extremites de la frontiere */
/*              -1 = pas de contraintes, */
/*               0 = contraintes de passage aux bornes (i.e. C0), */
/*               1 = C0 + contraintes de derivees 1eres (i.e. C1), */
/*               2 = C1 + contraintes de derivees 2ndes (i.e. C2). */
/*     NDGJAC: Degre du developpement en serie a utiliser pour le calcul 
*/
/*             dans la base de Jacobi. */

/*     ARGUMENTS DE SORTIE : */
/*     ------------------- */
/*     CRVJAC : Courbe d' approximation de FONCNP avec (eventuellement) */
/*              prise en compte des contraintes aux extremites. */
/*              Cette courbe est de degre NDGJAC. */
/*     IERCOD : Code d' erreur : */
/*               0 = Tout est ok. */
/*              33 = Pb dans la recuperation des donnees du block data */
/*                   des coeff. d' integration par la methode de GAUSS. */
/*                   par le programme MMAPPTT. */

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

/*     REFERENCES APPELEES   : */
/*     ----------------------- */

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

/* $    HISTORIQUE DES MODIFICATIONS   : */
/*     -------------------------------- */
/*     07-08-1991 : RBD ; Creation. */
/* > */
/* ********************************************************************** 
*/

/*   Le nom de la routine */

    /* Parameter adjustments */
    diftab_dim1 = *nbroot / 2 + 1;
    diftab_offset = diftab_dim1;
    diftab -= diftab_offset;
    somtab_dim1 = *nbroot / 2 + 1;
    somtab_offset = somtab_dim1;
    somtab -= somtab_offset;
    crvjac_dim1 = *ndgjac + 1;
    crvjac_offset = crvjac_dim1;
    crvjac -= crvjac_offset;
    cgauss_dim1 = *nbroot / 2 + 1;

    /* Function Body */
    ibb = mnfndeb_();
    if (ibb >= 2) {
	mgenmsg_("MMA1JAK", 7L);
    }
    *iercod = 0;

/* ----------------- Recup des coeff. d'integration par Gauss ----------- 
*/

    mmapptt_(ndgjac, nbroot, iordre, cgauss, iercod);
    if (*iercod > 0) {
	*iercod = 33;
	goto L9999;
    }

/* --------------- Calcul de la courbe dans la base de Jacobi ----------- 
*/

    mmmapcoe_(ndimen, ndgjac, iordre, nbroot, &somtab[somtab_offset], &diftab[
	    diftab_offset], cgauss, &crvjac[crvjac_offset]);

/* ------------------------------ The End ------------------------------- 
*/

L9999:
    if (*iercod != 0) {
	maermsg_("MMA1JAK", iercod, 7L);
    }
    if (ibb >= 2) {
	mgsomsg_("MMA1JAK", 7L);
    }
    return 0;
} /* mma1jak_ */

