Diff for /rpl/src/algebre_lineaire3.c between versions 1.12 and 1.60

version 1.12, 2010/08/06 15:32:56 version 1.60, 2017/06/28 09:20:29
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.18    RPL/2 (R) version 4.1.27
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2017 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
   RPL/2 is free software; you can redistribute it and/or modify it    RPL/2 is free software; you can redistribute it and/or modify it
   under the terms of the CeCILL V2 License as published by the french    under the terms of the CeCILL V2 License as published by the french
   CEA, CNRS and INRIA.    CEA, CNRS and INRIA.
     
   RPL/2 is distributed in the hope that it will be useful, but WITHOUT    RPL/2 is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License    FITNESS FOR A PARTICULAR PURPOSE.  See the CeCILL V2 License
   for more details.    for more details.
     
   You should have received a copy of the CeCILL License    You should have received a copy of the CeCILL License
   along with RPL/2. If not, write to info@cecill.info.    along with RPL/2. If not, write to info@cecill.info.
 ================================================================================  ================================================================================
 */  */
   
   
 #include "rpl-conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
 ================================================================================  ================================================================================
   Fonction réalisation la factorisation de Schur d'une matrice carrée    Fonction réalisation la factorisation de Schur d'une matrice carrée
 ================================================================================  ================================================================================
   Entrées : struct_matrice    Entrées : struct_matrice
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Sorties : décomposition de Schur de la matrice d'entrée et drapeau d'erreur.    Sorties : décomposition de Schur de la matrice d'entrée et drapeau d'erreur.
             La matrice en entrée est écrasée. La matrice de sortie est              La matrice en entrée est écrasée. La matrice de sortie est
             la forme de Schur.              la forme de Schur.
             La routine renvoie aussi une matrice de complexes correspondant              La routine renvoie aussi une matrice de complexes correspondant
             aux vecteurs de Schur. Cette matrice est allouée par              aux vecteurs de Schur. Cette matrice est allouée par
             la routine et vaut NULL sinon.              la routine et vaut NULL sinon.
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Effets de bord : néant    Effets de bord : néant
 ================================================================================  ================================================================================
 */  */
   
 void  void
 factorisation_schur(struct_processus *s_etat_processus,  factorisation_schur(struct_processus *s_etat_processus,
         struct_matrice *s_matrice, struct_matrice **s_schur)          struct_matrice *s_matrice, struct_matrice **s_schur)
 {  {
     complex16                   *w;      complex16                   *w;
   
     integer4                    info;      integer4                    info;
     integer4                    lwork;      integer4                    lwork;
     integer4                    nombre_colonnes_a;      integer4                    nombre_colonnes_a;
     integer4                    nombre_lignes_a;      integer4                    nombre_lignes_a;
     integer4                    sdim;      integer4                    sdim;
   
     real8                       *rwork;      real8                       *rwork;
     real8                       *wi;      real8                       *wi;
     real8                       *wr;      real8                       *wr;
   
     unsigned char               calcul_vecteurs_schur;      unsigned char               calcul_vecteurs_schur;
     unsigned char               tri_vecteurs_schur;      unsigned char               tri_vecteurs_schur;
   
     unsigned long               i;      integer8                    i;
     unsigned long               j;      integer8                    j;
     unsigned long               k;      integer8                    k;
     unsigned long               taille_matrice_f77;      integer8                    taille_matrice_f77;
   
     void                        *matrice_a_f77;      void                        *matrice_a_f77;
     void                        *matrice_vs_f77;      void                        *matrice_vs_f77;
     void                        *tampon;      void                        *tampon;
     void                        *work;      void                        *work;
   
     nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;      nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;
     nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;      nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;
     taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;      taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;
   
     calcul_vecteurs_schur = 'V';      calcul_vecteurs_schur = 'V';
     tri_vecteurs_schur = 'N';      tri_vecteurs_schur = 'N';
   
     switch((*s_matrice).type)      switch((*s_matrice).type)
     {      {
         case 'I' :          case 'I' :
         {          {
             /* Conversion de la matrice en matrice réelle */              /* Conversion de la matrice en matrice réelle */
   
             for(i = 0; i < (unsigned long) nombre_lignes_a; i++)              for(i = 0; i < nombre_lignes_a; i++)
             {              {
                 tampon = (*s_matrice).tableau[i];                  tampon = (*s_matrice).tableau[i];
   
                 if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)                  if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)
                         malloc(nombre_colonnes_a * sizeof(real8))) == NULL)                          malloc(((size_t) nombre_colonnes_a) * sizeof(real8)))
                 {                          == NULL)
                     (*s_etat_processus).erreur_systeme =                  {
                             d_es_allocation_memoire;                      (*s_etat_processus).erreur_systeme =
                     return;                              d_es_allocation_memoire;
                 }                      return;
                   }
                 for(j = 0; j < (unsigned long) nombre_colonnes_a; j++)  
                 {                  for(j = 0; j < nombre_colonnes_a; j++)
                     ((real8 **) (*s_matrice).tableau)[i][j] =                  {
                             ((integer8 *) tampon)[j];                      ((real8 **) (*s_matrice).tableau)[i][j] = (real8)
                 }                              ((integer8 *) tampon)[j];
                   }
                 free(tampon);  
             }                  free(tampon);
               }
             (*s_matrice).type = 'R';  
         }              (*s_matrice).type = 'R';
           }
         case 'R' :  
         {          case 'R' :
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *          {
                     sizeof(real8))) == NULL)              if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
             {                      sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             if ((matrice_vs_f77 = (void *) malloc(taille_matrice_f77 *  
                     sizeof(real8))) == NULL)              if ((matrice_vs_f77 = malloc(((size_t) taille_matrice_f77) *
             {                      sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)  
             {              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              {
                 {                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                     ((real8 *) matrice_a_f77)[k++] = ((real8 **)                  {
                             (*s_matrice).tableau)[j][i];                      ((real8 *) matrice_a_f77)[k++] = ((real8 **)
                 }                              (*s_matrice).tableau)[j][i];
             }                  }
               }
             if ((wr = (real8 *) malloc(nombre_lignes_a * sizeof(real8)))  
                     == NULL)              if ((wr = (real8 *) malloc(((size_t) nombre_lignes_a) *
             {                      sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             if ((wi = (real8 *) malloc(nombre_lignes_a * sizeof(real8)))  
                     == NULL)              if ((wi = (real8 *) malloc(((size_t) nombre_lignes_a) *
             {                      sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             lwork = -1;  
               lwork = -1;
             if ((work = (real8 *) malloc(sizeof(real8))) == NULL)  
             {              if ((work = (real8 *) malloc(sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             dgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,  
                     NULL, &nombre_lignes_a, matrice_a_f77,              dgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,
                     &nombre_colonnes_a, &sdim, wr, wi,                      NULL, &nombre_lignes_a, matrice_a_f77,
                     matrice_vs_f77, &nombre_colonnes_a,                      &nombre_colonnes_a, &sdim, wr, wi,
                     work, &lwork, NULL, &info, 1, 1);                      matrice_vs_f77, &nombre_colonnes_a,
                       work, &lwork, NULL, &info, 1, 1);
             lwork = ((real8 *) work)[0];  
             free(work);              lwork = (integer4) ((real8 *) work)[0];
               free(work);
             if ((work = (real8 *) malloc(lwork * sizeof(real8))) == NULL)  
             {              if ((work = (real8 *) malloc(((size_t) lwork) * sizeof(real8)))
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             dgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,              }
                     NULL, &nombre_lignes_a, matrice_a_f77,  
                     &nombre_colonnes_a, &sdim, wr, wi,              dgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,
                     matrice_vs_f77, &nombre_colonnes_a,                      NULL, &nombre_lignes_a, matrice_a_f77,
                     work, &lwork, NULL, &info, 1, 1);                      &nombre_colonnes_a, &sdim, wr, wi,
                       matrice_vs_f77, &nombre_colonnes_a,
             free(work);                      work, &lwork, NULL, &info, 1, 1);
             free(wr);  
             free(wi);              free(work);
               free(wr);
             if (info != 0)              free(wi);
             {  
                 if (info > 0)              if (info != 0)
                 {              {
                     (*s_etat_processus).exception = d_ep_decomposition_QR;                  if (info > 0)
                 }                  {
                 else                      (*s_etat_processus).exception = d_ep_decomposition_QR;
                 {                  }
                     (*s_etat_processus).erreur_execution =                  else
                             d_ex_routines_mathematiques;                  {
                 }                      (*s_etat_processus).erreur_execution =
                               d_ex_routines_mathematiques;
                 free(matrice_a_f77);                  }
                 free(matrice_vs_f77);  
                 return;                  free(matrice_a_f77);
             }                  free(matrice_vs_f77);
                   return;
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 {              {
                     ((real8 **) (*s_matrice).tableau)[j][i] =                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                             ((real8 *) matrice_a_f77)[k++];                  {
                 }                      ((real8 **) (*s_matrice).tableau)[j][i] =
             }                              ((real8 *) matrice_a_f77)[k++];
                   }
             (**s_schur).nombre_colonnes = (*s_matrice).nombre_colonnes;              }
             (**s_schur).nombre_lignes = (*s_matrice).nombre_lignes;  
             (**s_schur).type = 'R';              (**s_schur).nombre_colonnes = (*s_matrice).nombre_colonnes;
               (**s_schur).nombre_lignes = (*s_matrice).nombre_lignes;
             if (((**s_schur).tableau = malloc((**s_schur)              (**s_schur).type = 'R';
                     .nombre_lignes * sizeof(real8 *))) == NULL)  
             {              if (((**s_schur).tableau = malloc(((size_t) (**s_schur)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      .nombre_lignes) * sizeof(real8 *))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             for(i = 0; i < (**s_schur).nombre_lignes; i++)              }
             {  
                 if ((((real8 **) (**s_schur).tableau)[i] = (real8 *)              for(i = 0; i < (**s_schur).nombre_lignes; i++)
                         malloc((**s_schur).nombre_colonnes *              {
                         sizeof(real8))) == NULL)                  if ((((real8 **) (**s_schur).tableau)[i] = (real8 *)
                 {                          malloc(((size_t) (**s_schur).nombre_colonnes) *
                     (*s_etat_processus).erreur_systeme =                          sizeof(real8))) == NULL)
                             d_es_allocation_memoire;                  {
                     return;                      (*s_etat_processus).erreur_systeme =
                 }                              d_es_allocation_memoire;
             }                      return;
                   }
             for(k = 0, i = 0; i < (**s_schur).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (**s_schur).nombre_lignes; j++)              for(k = 0, i = 0; i < (**s_schur).nombre_colonnes; i++)
                 {              {
                     ((real8 **) (**s_schur).tableau)[j][i] = ((real8 *)                  for(j = 0; j < (**s_schur).nombre_lignes; j++)
                             matrice_vs_f77)[k++];                  {
                 }                      ((real8 **) (**s_schur).tableau)[j][i] = ((real8 *)
             }                              matrice_vs_f77)[k++];
                   }
             free(matrice_a_f77);              }
             free(matrice_vs_f77);  
               free(matrice_a_f77);
             break;              free(matrice_vs_f77);
         }  
               break;
         case 'C' :          }
         {  
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *          case 'C' :
                     sizeof(complex16))) == NULL)          {
             {              if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      sizeof(complex16))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             if ((matrice_vs_f77 = (void *) malloc(taille_matrice_f77 *              }
                     sizeof(complex16))) == NULL)  
             {              if ((matrice_vs_f77 = malloc(((size_t) taille_matrice_f77) *
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      sizeof(complex16))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 {              {
                     ((complex16 *) matrice_a_f77)[k].partie_reelle =                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                             ((complex16 **) (*s_matrice).tableau)[j][i]                  {
                             .partie_reelle;                      ((complex16 *) matrice_a_f77)[k].partie_reelle =
                     ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =                              ((complex16 **) (*s_matrice).tableau)[j][i]
                             ((complex16 **) (*s_matrice).tableau)[j][i]                              .partie_reelle;
                             .partie_imaginaire;                      ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =
                 }                              ((complex16 **) (*s_matrice).tableau)[j][i]
             }                              .partie_imaginaire;
                   }
             if ((w = (complex16 *) malloc(nombre_lignes_a * sizeof(complex16)))              }
                     == NULL)  
             {              if ((w = (complex16 *) malloc(((size_t) nombre_lignes_a) *
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      sizeof(complex16))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             lwork = -1;              }
   
             if ((work = (complex16 *) malloc(sizeof(complex16))) == NULL)              lwork = -1;
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              if ((work = (complex16 *) malloc(sizeof(complex16))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             if ((rwork = (real8 *) malloc(nombre_lignes_a * sizeof(real8)))              }
                     == NULL)  
             {              if ((rwork = (real8 *) malloc(((size_t) nombre_lignes_a) *
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      sizeof(real8))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             zgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,              }
                     NULL, &nombre_lignes_a, matrice_a_f77,  
                     &nombre_colonnes_a, &sdim, w,              zgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,
                     matrice_vs_f77, &nombre_colonnes_a,                      NULL, &nombre_lignes_a, matrice_a_f77,
                     work, &lwork, rwork, NULL, &info, 1, 1);                      &nombre_colonnes_a, &sdim, w,
                       matrice_vs_f77, &nombre_colonnes_a,
             lwork = ((complex16 *) work)[0].partie_reelle;                      work, &lwork, rwork, NULL, &info, 1, 1);
             free(work);  
               lwork = (integer4) ((complex16 *) work)[0].partie_reelle;
             if ((work = (complex16 *) malloc(lwork * sizeof(complex16)))              free(work);
                     == NULL)  
             {              if ((work = (complex16 *) malloc(((size_t) lwork) *
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      sizeof(complex16))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             zgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,              }
                     NULL, &nombre_lignes_a, matrice_a_f77,  
                     &nombre_colonnes_a, &sdim, w,              zgees_(&calcul_vecteurs_schur, &tri_vecteurs_schur,
                     matrice_vs_f77, &nombre_colonnes_a,                      NULL, &nombre_lignes_a, matrice_a_f77,
                     work, &lwork, rwork, NULL, &info, 1, 1);                      &nombre_colonnes_a, &sdim, w,
                       matrice_vs_f77, &nombre_colonnes_a,
             free(work);                      work, &lwork, rwork, NULL, &info, 1, 1);
             free(rwork);  
             free(w);              free(work);
               free(rwork);
             if (info != 0)              free(w);
             {  
                 if (info > 0)              if (info != 0)
                 {              {
                     (*s_etat_processus).exception = d_ep_decomposition_QR;                  if (info > 0)
                 }                  {
                 else                      (*s_etat_processus).exception = d_ep_decomposition_QR;
                 {                  }
                     (*s_etat_processus).erreur_execution =                  else
                             d_ex_routines_mathematiques;                  {
                 }                      (*s_etat_processus).erreur_execution =
                               d_ex_routines_mathematiques;
                 free(matrice_a_f77);                  }
                 free(matrice_vs_f77);  
                 return;                  free(matrice_a_f77);
             }                  free(matrice_vs_f77);
                   return;
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 {              {
                     ((complex16 **) (*s_matrice).tableau)[j][i]                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                             .partie_reelle = ((complex16 *) matrice_a_f77)[k]                  {
                             .partie_reelle;                      ((complex16 **) (*s_matrice).tableau)[j][i]
                     ((complex16 **) (*s_matrice).tableau)[j][i]                              .partie_reelle = ((complex16 *) matrice_a_f77)[k]
                             .partie_imaginaire = ((complex16 *) matrice_a_f77)                              .partie_reelle;
                             [k++].partie_imaginaire;                      ((complex16 **) (*s_matrice).tableau)[j][i]
                 }                              .partie_imaginaire = ((complex16 *) matrice_a_f77)
             }                              [k++].partie_imaginaire;
                   }
             (**s_schur).nombre_colonnes = (*s_matrice).nombre_colonnes;              }
             (**s_schur).nombre_lignes = (*s_matrice).nombre_lignes;  
             (**s_schur).type = 'C';              (**s_schur).nombre_colonnes = (*s_matrice).nombre_colonnes;
               (**s_schur).nombre_lignes = (*s_matrice).nombre_lignes;
             if (((**s_schur).tableau = malloc((**s_schur)              (**s_schur).type = 'C';
                     .nombre_lignes * sizeof(complex16 *))) == NULL)  
             {              if (((**s_schur).tableau = malloc(((size_t) (**s_schur)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      .nombre_lignes) * sizeof(complex16 *))) == NULL)
                 return;              {
             }                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                   return;
             for(i = 0; i < (**s_schur).nombre_lignes; i++)              }
             {  
                 if ((((complex16 **) (**s_schur).tableau)[i] = (complex16 *)              for(i = 0; i < (**s_schur).nombre_lignes; i++)
                         malloc((**s_schur).nombre_colonnes *              {
                         sizeof(complex16))) == NULL)                  if ((((complex16 **) (**s_schur).tableau)[i] = (complex16 *)
                 {                          malloc(((size_t) (**s_schur).nombre_colonnes) *
                     (*s_etat_processus).erreur_systeme =                          sizeof(complex16))) == NULL)
                             d_es_allocation_memoire;                  {
                     return;                      (*s_etat_processus).erreur_systeme =
                 }                              d_es_allocation_memoire;
             }                      return;
                   }
             for(k = 0, i = 0; i < (**s_schur).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (**s_schur).nombre_lignes; j++)              for(k = 0, i = 0; i < (**s_schur).nombre_colonnes; i++)
                 {              {
                     ((complex16 **) (**s_schur).tableau)[j][i].partie_reelle =                  for(j = 0; j < (**s_schur).nombre_lignes; j++)
                             ((complex16 *) matrice_vs_f77)[k].partie_reelle;                  {
                     ((complex16 **) (**s_schur).tableau)[j][i]                      ((complex16 **) (**s_schur).tableau)[j][i].partie_reelle =
                             .partie_imaginaire = ((complex16 *) matrice_vs_f77)                              ((complex16 *) matrice_vs_f77)[k].partie_reelle;
                             [k++].partie_imaginaire;                      ((complex16 **) (**s_schur).tableau)[j][i]
                 }                              .partie_imaginaire = ((complex16 *) matrice_vs_f77)
             }                              [k++].partie_imaginaire;
                   }
             free(matrice_a_f77);              }
             free(matrice_vs_f77);  
               free(matrice_a_f77);
             break;              free(matrice_vs_f77);
         }  
     }              break;
           }
     return;      }
 }  
       return;
   }
 /*  
 ================================================================================  
   Fonction réalisation la factorisation LQ d'une matrice quelconque  /*
 ================================================================================  ================================================================================
   Entrées : struct_matrice    Fonction réalisation la factorisation LQ d'une matrice quelconque
 --------------------------------------------------------------------------------  ================================================================================
   Sorties : décomposition de LQ de la matrice d'entrée. Le tableau tau    Entrées : struct_matrice
   est initialisé par la fonction  --------------------------------------------------------------------------------
 --------------------------------------------------------------------------------    Sorties : décomposition de LQ de la matrice d'entrée. Le tableau tau
   Effets de bord : néant    est initialisé par la fonction
 ================================================================================  --------------------------------------------------------------------------------
 */    Effets de bord : néant
   ================================================================================
 void  */
 factorisation_lq(struct_processus *s_etat_processus, struct_matrice *s_matrice,  
         void **tau)  void
 {  factorisation_lq(struct_processus *s_etat_processus, struct_matrice *s_matrice,
     integer4                    nombre_colonnes_a;          void **tau)
     integer4                    nombre_lignes_a;  {
     integer4                    erreur;      integer4                    nombre_colonnes_a;
       integer4                    nombre_lignes_a;
     unsigned long               i;      integer4                    erreur;
     unsigned long               j;  
     unsigned long               k;      integer8                    i;
     unsigned long               taille_matrice_f77;      integer8                    j;
       integer8                    k;
     void                        *matrice_a_f77;      integer8                    taille_matrice_f77;
     void                        *tampon;  
     void                        *work;      void                        *matrice_a_f77;
       void                        *tampon;
     nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;      void                        *work;
     nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;  
     taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;      nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;
       nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;
     switch((*s_matrice).type)      taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;
     {  
         case 'I' :      switch((*s_matrice).type)
         {      {
             /* Conversion de la matrice en matrice réelle */          case 'I' :
           {
             for(i = 0; i < (unsigned long) nombre_lignes_a; i++)              /* Conversion de la matrice en matrice réelle */
             {  
                 tampon = (*s_matrice).tableau[i];              for(i = 0; i < nombre_lignes_a; i++)
               {
                 if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)                  tampon = (*s_matrice).tableau[i];
                         malloc(nombre_colonnes_a * sizeof(real8))) == NULL)  
                 {                  if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)
                     (*s_etat_processus).erreur_systeme =                          malloc(((size_t) nombre_colonnes_a) * sizeof(real8)))
                             d_es_allocation_memoire;                          == NULL)
                     return;                  {
                 }                      (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                 for(j = 0; j < (unsigned long) nombre_colonnes_a; j++)                      return;
                 {                  }
                     ((real8 **) (*s_matrice).tableau)[i][j] =  
                             ((integer8 *) tampon)[j];                  for(j = 0; j < nombre_colonnes_a; j++)
                 }                  {
                       ((real8 **) (*s_matrice).tableau)[i][j] = (real8)
                 free(tampon);                              ((integer8 *) tampon)[j];
             }                  }
   
             (*s_matrice).type = 'R';                  free(tampon);
         }              }
   
         case 'R' :              (*s_matrice).type = 'R';
         {          }
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *  
                     sizeof(real8))) == NULL)          case 'R' :
             {          {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
                 return;                      sizeof(real8))) == NULL)
             }              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             if (((*tau) = malloc(((nombre_colonnes_a < nombre_lignes_a)                  return;
                     ? nombre_colonnes_a : nombre_lignes_a) * sizeof(real8)))              }
                     == NULL)  
             {              if (((*tau) = malloc(((size_t) ((nombre_colonnes_a <
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      nombre_lignes_a) ? nombre_colonnes_a : nombre_lignes_a)) *
                 return;                      sizeof(real8))) == NULL)
             }              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             if ((work = malloc(nombre_lignes_a * sizeof(real8))) == NULL)                  return;
             {              }
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;              if ((work = malloc(((size_t) nombre_lignes_a) * sizeof(real8)))
             }                      == NULL)
               {
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              }
                 {  
                     ((real8 *) matrice_a_f77)[k++] = ((real8 **)              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                             (*s_matrice).tableau)[j][i];              {
                 }                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             }                  {
                       ((real8 *) matrice_a_f77)[k++] = ((real8 **)
             dgelq2_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,                              (*s_matrice).tableau)[j][i];
                     &nombre_lignes_a, (*((real8 **) tau)), work, &erreur);                  }
               }
             if (erreur != 0)  
             {              dgelq2_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
                 // L'erreur ne peut être que négative.                      &nombre_lignes_a, (*((real8 **) tau)), work, &erreur);
   
                 (*s_etat_processus).erreur_execution =              if (erreur != 0)
                         d_ex_routines_mathematiques;              {
                 free(work);                  // L'erreur ne peut être que négative.
                 free(matrice_a_f77);  
                 return;                  (*s_etat_processus).erreur_execution =
             }                          d_ex_routines_mathematiques;
                   free(work);
             for(k = 0, i = 0; i < (unsigned long) nombre_colonnes_a; i++)                  free(matrice_a_f77);
             {                  return;
                 for(j = 0; j < (unsigned long) nombre_lignes_a; j++)              }
                 {  
                     ((real8 **) (*s_matrice).tableau)[j][i] = ((real8 *)              for(k = 0, i = 0; i < nombre_colonnes_a; i++)
                             matrice_a_f77)[k++];              {
                 }                  for(j = 0; j < nombre_lignes_a; j++)
             }                  {
                       ((real8 **) (*s_matrice).tableau)[j][i] = ((real8 *)
             free(work);                              matrice_a_f77)[k++];
             free(matrice_a_f77);                  }
               }
             break;  
         }              free(work);
               free(matrice_a_f77);
         case 'C' :  
         {              break;
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *          }
                     sizeof(complex16))) == NULL)  
             {          case 'C' :
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          {
                 return;              if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
             }                      sizeof(complex16))) == NULL)
               {
             if (((*tau) = malloc(((nombre_colonnes_a < nombre_lignes_a)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                     ? nombre_colonnes_a : nombre_lignes_a) *                  return;
                     sizeof(complex16))) == NULL)              }
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              if (((*tau) = malloc(((size_t) ((nombre_colonnes_a <
                 return;                      nombre_lignes_a) ? nombre_colonnes_a : nombre_lignes_a)) *
             }                      sizeof(complex16))) == NULL)
               {
             if ((work = malloc(nombre_lignes_a * sizeof(complex16))) == NULL)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              }
                 return;  
             }              if ((work = malloc(((size_t) nombre_lignes_a) * sizeof(complex16)))
                       == NULL)
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              {
             {                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)                  return;
                 {              }
                     ((complex16 *) matrice_a_f77)[k].partie_reelle =  
                             ((complex16 **) (*s_matrice).tableau)[j][i]              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                             .partie_reelle;              {
                     ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                             ((complex16 **) (*s_matrice).tableau)[j][i]                  {
                             .partie_imaginaire;                      ((complex16 *) matrice_a_f77)[k].partie_reelle =
                 }                              ((complex16 **) (*s_matrice).tableau)[j][i]
             }                              .partie_reelle;
                       ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =
             zgelq2_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,                              ((complex16 **) (*s_matrice).tableau)[j][i]
                     &nombre_lignes_a, (*((complex16 **) tau)), work, &erreur);                              .partie_imaginaire;
                   }
             if (erreur != 0)              }
             {  
                 // L'erreur ne peut être que négative.              zgelq2_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
                       &nombre_lignes_a, (*((complex16 **) tau)), work, &erreur);
                 (*s_etat_processus).erreur_execution =  
                         d_ex_routines_mathematiques;              if (erreur != 0)
                 free(work);              {
                 free(matrice_a_f77);                  // L'erreur ne peut être que négative.
                 return;  
             }                  (*s_etat_processus).erreur_execution =
                           d_ex_routines_mathematiques;
             for(k = 0, i = 0; i < (unsigned long) nombre_colonnes_a; i++)                  free(work);
             {                  free(matrice_a_f77);
                 for(j = 0; j < (unsigned long) nombre_lignes_a; j++)                  return;
                 {              }
                     ((complex16 **) (*s_matrice).tableau)[j][i].partie_reelle =  
                             ((complex16 *) matrice_a_f77)[k].partie_reelle;              for(k = 0, i = 0; i < nombre_colonnes_a; i++)
                     ((complex16 **) (*s_matrice).tableau)[j][i]              {
                             .partie_imaginaire = ((complex16 *) matrice_a_f77)                  for(j = 0; j < nombre_lignes_a; j++)
                             [k++].partie_imaginaire;                  {
                 }                      ((complex16 **) (*s_matrice).tableau)[j][i].partie_reelle =
             }                              ((complex16 *) matrice_a_f77)[k].partie_reelle;
                       ((complex16 **) (*s_matrice).tableau)[j][i]
             free(work);                              .partie_imaginaire = ((complex16 *) matrice_a_f77)
             free(matrice_a_f77);                              [k++].partie_imaginaire;
                   }
             break;              }
         }  
     }              free(work);
               free(matrice_a_f77);
     return;  
 }              break;
           }
       }
 /*  
 ================================================================================      return;
   Fonction réalisation la factorisation QR d'une matrice quelconque  }
 ================================================================================  
   Entrées : struct_matrice  
 --------------------------------------------------------------------------------  /*
   Sorties : décomposition de QR de la matrice d'entrée. Le tableau tau  ================================================================================
   est initialisé par la fonction    Fonction réalisation la factorisation QR d'une matrice quelconque
 --------------------------------------------------------------------------------  ================================================================================
   Effets de bord : néant    Entrées : struct_matrice
 ================================================================================  --------------------------------------------------------------------------------
 */    Sorties : décomposition de QR de la matrice d'entrée. Le tableau tau
     est initialisé par la fonction
 void  --------------------------------------------------------------------------------
 factorisation_qr(struct_processus *s_etat_processus, struct_matrice *s_matrice,    Effets de bord : néant
         void **tau)  ================================================================================
 {  */
     integer4                    lwork;  
     integer4                    nombre_colonnes_a;  void
     integer4                    nombre_lignes_a;  factorisation_qr(struct_processus *s_etat_processus, struct_matrice *s_matrice,
     integer4                    erreur;          void **tau)
     integer4                    *pivot;  {
       integer4                    lwork;
     real8                       *rwork;      integer4                    nombre_colonnes_a;
       integer4                    nombre_lignes_a;
     unsigned long               i;      integer4                    erreur;
     unsigned long               j;      integer4                    *pivot;
     unsigned long               k;  
     unsigned long               taille_matrice_f77;      real8                       *rwork;
   
     void                        *matrice_a_f77;      integer8                    i;
     void                        *registre;      integer8                    j;
     void                        *tampon;      integer8                    k;
     void                        *work;      integer8                    taille_matrice_f77;
   
     nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;      void                        *matrice_a_f77;
     nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;      void                        *registre;
     taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;      void                        *tampon;
       void                        *work;
     switch((*s_matrice).type)  
     {      nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;
         case 'I' :      nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;
         {      taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;
             /* Conversion de la matrice en matrice réelle */  
       switch((*s_matrice).type)
             for(i = 0; i < (unsigned long) nombre_lignes_a; i++)      {
             {          case 'I' :
                 tampon = (*s_matrice).tableau[i];          {
               /* Conversion de la matrice en matrice réelle */
                 if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)  
                         malloc(nombre_colonnes_a * sizeof(real8))) == NULL)              for(i = 0; i < nombre_lignes_a; i++)
                 {              {
                     (*s_etat_processus).erreur_systeme =                  tampon = (*s_matrice).tableau[i];
                             d_es_allocation_memoire;  
                     return;                  if ((((real8 **) (*s_matrice).tableau)[i] = (real8 *)
                 }                          malloc(((size_t) nombre_colonnes_a) * sizeof(real8)))
                           == NULL)
                 for(j = 0; j < (unsigned long) nombre_colonnes_a; j++)                  {
                 {                      (*s_etat_processus).erreur_systeme =
                     ((real8 **) (*s_matrice).tableau)[i][j] =                              d_es_allocation_memoire;
                             ((integer8 *) tampon)[j];                      return;
                 }                  }
   
                 free(tampon);                  for(j = 0; j < nombre_colonnes_a; j++)
             }                  {
                       ((real8 **) (*s_matrice).tableau)[i][j] = (real8)
             (*s_matrice).type = 'R';                              ((integer8 *) tampon)[j];
         }                  }
   
         case 'R' :                  free(tampon);
         {              }
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *  
                     sizeof(real8))) == NULL)              (*s_matrice).type = 'R';
             {          }
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;          case 'R' :
             }          {
               if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
             if (((*tau) = malloc(((nombre_colonnes_a < nombre_lignes_a)                      sizeof(real8))) == NULL)
                     ? nombre_colonnes_a : nombre_lignes_a) * sizeof(real8)))              {
                     == NULL)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              }
                 return;  
             }              if (((*tau) = malloc(((size_t) ((nombre_colonnes_a <
                       nombre_lignes_a) ? nombre_colonnes_a : nombre_lignes_a)) *
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)                      sizeof(real8))) == NULL)
             {              {
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 {                  return;
                     ((real8 *) matrice_a_f77)[k++] = ((real8 **)              }
                             (*s_matrice).tableau)[j][i];  
                 }              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
             }              {
                   for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             if ((pivot = malloc(nombre_colonnes_a * sizeof(integer4))) == NULL)                  {
             {                      ((real8 *) matrice_a_f77)[k++] = ((real8 **)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                              (*s_matrice).tableau)[j][i];
                 return;                  }
             }              }
   
             for(i = 0; i < (unsigned long) nombre_colonnes_a; pivot[i++] = 0);              if ((pivot = malloc(((size_t) nombre_colonnes_a) *
                       sizeof(integer4))) == NULL)
             lwork = -1;              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             if ((work = malloc(sizeof(real8))) == NULL)                  return;
             {              }
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;              for(i = 0; i < nombre_colonnes_a; pivot[i++] = 0);
             }  
               lwork = -1;
             // Calcul de la taille de l'espace  
               if ((work = malloc(sizeof(real8))) == NULL)
             dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,              {
                     &nombre_lignes_a, pivot, (*((real8 **) tau)),                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                     work, &lwork, &erreur);                  return;
               }
             lwork = ((real8 *) work)[0];  
               // Calcul de la taille de l'espace
             free(work);  
               dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
             if ((work = malloc(lwork * sizeof(real8))) == NULL)                      &nombre_lignes_a, pivot, (*((real8 **) tau)),
             {                      work, &lwork, &erreur);
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;              lwork = (integer4) ((real8 *) work)[0];
             }  
               free(work);
             // Calcul de la permutation  
               if ((work = malloc(((size_t) lwork) * sizeof(real8))) == NULL)
             if ((registre = (void *) malloc(taille_matrice_f77 *              {
                     sizeof(real8))) == NULL)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              }
                 return;  
             }              // Calcul de la permutation
   
             memcpy(registre, matrice_a_f77, taille_matrice_f77 * sizeof(real8));              if ((registre = malloc(((size_t) taille_matrice_f77) *
                       sizeof(real8))) == NULL)
             dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, registre,              {
                     &nombre_lignes_a, pivot, (*((real8 **) tau)),                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                     work, &lwork, &erreur);                  return;
               }
             free(registre);  
               memcpy(registre, matrice_a_f77, ((size_t) taille_matrice_f77) *
             if (erreur != 0)                      sizeof(real8));
             {  
                 // L'erreur ne peut être que négative.              dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, registre,
                       &nombre_lignes_a, pivot, (*((real8 **) tau)),
                 (*s_etat_processus).erreur_execution =                      work, &lwork, &erreur);
                         d_ex_routines_mathematiques;  
                 free(work);              free(registre);
                 free(matrice_a_f77);  
                 free(tau);              if (erreur != 0)
                 return;              {
             }                  // L'erreur ne peut être que négative.
   
             // La permutation doit maintenant être unitaire                  (*s_etat_processus).erreur_execution =
                           d_ex_routines_mathematiques;
             dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,                  free(work);
                     &nombre_lignes_a, pivot, (*((real8 **) tau)),                  free(matrice_a_f77);
                     work, &lwork, &erreur);                  free(tau);
                   return;
             if (erreur != 0)              }
             {  
                 // L'erreur ne peut être que négative.              // La permutation doit maintenant être unitaire
   
                 (*s_etat_processus).erreur_execution =              dgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
                         d_ex_routines_mathematiques;                      &nombre_lignes_a, pivot, (*((real8 **) tau)),
                 free(work);                      work, &lwork, &erreur);
                 free(matrice_a_f77);  
                 free(tau);              if (erreur != 0)
                 return;              {
             }                  // L'erreur ne peut être que négative.
   
             for(i = 0; i < (unsigned long) nombre_colonnes_a; i++)                  (*s_etat_processus).erreur_execution =
             {                          d_ex_routines_mathematiques;
                 if ((i + 1) != (unsigned long) pivot[i])                  free(work);
                 {                  free(matrice_a_f77);
                     (*s_etat_processus).erreur_execution =                  free(tau);
                             d_ex_routines_mathematiques;                  return;
               }
                     free(pivot);  
                     free(work);              for(i = 0; i < nombre_colonnes_a; i++)
                     free(matrice_a_f77);              {
                     free(tau);                  if ((i + 1) != pivot[i])
                   {
                     return;                      (*s_etat_processus).erreur_execution =
                 }                              d_ex_routines_mathematiques;
             }  
                       free(pivot);
             free(pivot);                      free(work);
                       free(matrice_a_f77);
             for(k = 0, i = 0; i < (unsigned long) nombre_colonnes_a; i++)                      free(tau);
             {  
                 for(j = 0; j < (unsigned long) nombre_lignes_a; j++)                      return;
                 {                  }
                     ((real8 **) (*s_matrice).tableau)[j][i] = ((real8 *)              }
                             matrice_a_f77)[k++];  
                 }              free(pivot);
             }  
               for(k = 0, i = 0; i < nombre_colonnes_a; i++)
             free(work);              {
             free(matrice_a_f77);                  for(j = 0; j < nombre_lignes_a; j++)
                   {
             break;                      ((real8 **) (*s_matrice).tableau)[j][i] = ((real8 *)
         }                              matrice_a_f77)[k++];
                   }
         case 'C' :              }
         {  
             if ((matrice_a_f77 = (void *) malloc(taille_matrice_f77 *              free(work);
                     sizeof(complex16))) == NULL)              free(matrice_a_f77);
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              break;
                 return;          }
             }  
           case 'C' :
             if (((*tau) = malloc(((nombre_colonnes_a < nombre_lignes_a)          {
                     ? nombre_colonnes_a : nombre_lignes_a) * sizeof(complex16)))              if ((matrice_a_f77 = malloc(((size_t) taille_matrice_f77) *
                     == NULL)                      sizeof(complex16))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
   
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              if (((*tau) = malloc(((size_t) ((nombre_colonnes_a <
             {                      nombre_lignes_a) ? nombre_colonnes_a : nombre_lignes_a)) *
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)                      sizeof(complex16))) == NULL)
                 {              {
                     ((complex16 *) matrice_a_f77)[k].partie_reelle =                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                             ((complex16 **) (*s_matrice).tableau)[j][i]                  return;
                             .partie_reelle;              }
                     ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =  
                             ((complex16 **) (*s_matrice).tableau)[j][i]              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                             .partie_imaginaire;              {
                 }                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             }                  {
                       ((complex16 *) matrice_a_f77)[k].partie_reelle =
             if ((pivot = malloc(nombre_colonnes_a * sizeof(integer4))) == NULL)                              ((complex16 **) (*s_matrice).tableau)[j][i]
             {                              .partie_reelle;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      ((complex16 *) matrice_a_f77)[k++].partie_imaginaire =
                 return;                              ((complex16 **) (*s_matrice).tableau)[j][i]
             }                              .partie_imaginaire;
                   }
             if ((rwork = malloc(2 * nombre_colonnes_a * sizeof(real8))) == NULL)              }
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              if ((pivot = malloc(((size_t) nombre_colonnes_a) *
                 return;                      sizeof(integer4))) == NULL)
             }              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             for(i = 0; i < (unsigned long) nombre_colonnes_a; pivot[i++] = 0);                  return;
               }
             lwork = -1;  
               if ((rwork = malloc(2 * ((size_t) nombre_colonnes_a) *
             if ((work = malloc(sizeof(complex16))) == NULL)                      sizeof(real8))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
   
             // Calcul de la taille de l'espace              for(i = 0; i < nombre_colonnes_a; pivot[i++] = 0);
   
             zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,              lwork = -1;
                     &nombre_lignes_a, pivot, (*((complex16 **) tau)),  
                     work, &lwork, rwork, &erreur);              if ((work = malloc(sizeof(complex16))) == NULL)
               {
             if (erreur != 0)                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 // L'erreur ne peut être que négative.              }
   
                 (*s_etat_processus).erreur_execution =              // Calcul de la taille de l'espace
                         d_ex_routines_mathematiques;  
               zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
                 free(work);                      &nombre_lignes_a, pivot, (*((complex16 **) tau)),
                 free(rwork);                      work, &lwork, rwork, &erreur);
                 free(pivot);  
                 free(matrice_a_f77);              if (erreur != 0)
                 free(tau);              {
                 return;                  // L'erreur ne peut être que négative.
             }  
                   (*s_etat_processus).erreur_execution =
             lwork = ((complex16 *) work)[0].partie_reelle;                          d_ex_routines_mathematiques;
   
             free(work);                  free(work);
                   free(rwork);
             if ((work = malloc(lwork * sizeof(complex16))) == NULL)                  free(pivot);
             {                  free(matrice_a_f77);
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  free(tau);
                 return;                  return;
             }              }
   
             // Calcul de la permutation              lwork = (integer4) ((complex16 *) work)[0].partie_reelle;
   
             if ((registre = (void *) malloc(taille_matrice_f77 *              free(work);
                     sizeof(complex16))) == NULL)  
             {              if ((work = malloc(((size_t) lwork) * sizeof(complex16))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             memcpy(registre, matrice_a_f77,  
                     taille_matrice_f77 * sizeof(complex16));              // Calcul de la permutation
   
             zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, registre,              if ((registre = malloc(((size_t) taille_matrice_f77) *
                     &nombre_lignes_a, pivot, (*((complex16 **) tau)),                      sizeof(complex16))) == NULL)
                     work, &lwork, rwork, &erreur);              {
                   (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             free(registre);                  return;
               }
             if (erreur != 0)  
             {              memcpy(registre, matrice_a_f77,
                 // L'erreur ne peut être que négative.                      ((size_t) taille_matrice_f77) * sizeof(complex16));
   
                 (*s_etat_processus).erreur_execution =              zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, registre,
                         d_ex_routines_mathematiques;                      &nombre_lignes_a, pivot, (*((complex16 **) tau)),
                       work, &lwork, rwork, &erreur);
                 free(work);  
                 free(rwork);              free(registre);
                 free(pivot);  
                 free(matrice_a_f77);              if (erreur != 0)
                 free(tau);              {
                 return;                  // L'erreur ne peut être que négative.
             }  
                   (*s_etat_processus).erreur_execution =
             // La permutation doit maintenant être unitaire                          d_ex_routines_mathematiques;
   
             zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,                  free(work);
                     &nombre_lignes_a, pivot, (*((complex16 **) tau)),                  free(rwork);
                     work, &lwork, rwork, &erreur);                  free(pivot);
                   free(matrice_a_f77);
             if (erreur != 0)                  free(tau);
             {                  return;
                 // L'erreur ne peut être que négative.              }
   
                 (*s_etat_processus).erreur_execution =              // La permutation doit maintenant être unitaire
                         d_ex_routines_mathematiques;  
               zgeqp3_(&nombre_lignes_a, &nombre_colonnes_a, matrice_a_f77,
                 free(work);                      &nombre_lignes_a, pivot, (*((complex16 **) tau)),
                 free(rwork);                      work, &lwork, rwork, &erreur);
                 free(pivot);  
                 free(matrice_a_f77);              if (erreur != 0)
                 free(tau);              {
                 return;                  // L'erreur ne peut être que négative.
             }  
                   (*s_etat_processus).erreur_execution =
             free(rwork);                          d_ex_routines_mathematiques;
   
             for(i = 0; i < (unsigned long) nombre_colonnes_a; i++)                  free(work);
             {                  free(rwork);
                 if ((i + 1) != (unsigned long) pivot[i])                  free(pivot);
                 {                  free(matrice_a_f77);
                     (*s_etat_processus).erreur_execution =                  free(tau);
                             d_ex_routines_mathematiques;                  return;
               }
                     free(pivot);  
                     free(work);              free(rwork);
                     free(matrice_a_f77);  
                     free(tau);              for(i = 0; i < nombre_colonnes_a; i++)
               {
                     return;                  if ((i + 1) != pivot[i])
                 }                  {
             }                      (*s_etat_processus).erreur_execution =
                               d_ex_routines_mathematiques;
             free(pivot);  
                       free(pivot);
             for(k = 0, i = 0; i < (unsigned long) nombre_colonnes_a; i++)                      free(work);
             {                      free(matrice_a_f77);
                 for(j = 0; j < (unsigned long) nombre_lignes_a; j++)                      free(tau);
                 {  
                     ((complex16 **) (*s_matrice).tableau)[j][i].partie_reelle =                      return;
                             ((complex16 *) matrice_a_f77)[k].partie_reelle;                  }
                     ((complex16 **) (*s_matrice).tableau)[j][i]              }
                             .partie_imaginaire = ((complex16 *)  
                             matrice_a_f77)[k++].partie_imaginaire;              free(pivot);
                 }  
             }              for(k = 0, i = 0; i < nombre_colonnes_a; i++)
               {
             free(work);                  for(j = 0; j < nombre_lignes_a; j++)
             free(matrice_a_f77);                  {
                       ((complex16 **) (*s_matrice).tableau)[j][i].partie_reelle =
             break;                              ((complex16 *) matrice_a_f77)[k].partie_reelle;
         }                      ((complex16 **) (*s_matrice).tableau)[j][i]
     }                              .partie_imaginaire = ((complex16 *)
                               matrice_a_f77)[k++].partie_imaginaire;
     return;                  }
 }              }
   
               free(work);
 /*              free(matrice_a_f77);
 ================================================================================  
   Fonctions calculant le déterminant ou le rang d'une matrice quelconque              break;
 ================================================================================          }
   Entrées : struct_matrice      }
 --------------------------------------------------------------------------------  
   Sorties : déterminant      return;
 --------------------------------------------------------------------------------  }
   Effets de bord : néant  
 ================================================================================  
 */  /*
   ================================================================================
     Fonctions calculant le déterminant ou le rang d'une matrice quelconque
 static integer4  ================================================================================
 calcul_rang(struct_processus *s_etat_processus, void *matrice_f77,    Entrées : struct_matrice
         integer4 nombre_lignes_a, integer4 nombre_colonnes_a,  --------------------------------------------------------------------------------
         integer4 *pivot, integer4 dimension_vecteur_pivot, unsigned char type)    Sorties : déterminant
 {  --------------------------------------------------------------------------------
     integer4                    erreur;    Effets de bord : néant
     integer4                    *iwork;  ================================================================================
     integer4                    *jpvt;  */
     integer4                    lwork;  
     integer4                    longueur;  
     integer4                    nombre_colonnes_b;  static integer4
     integer4                    nombre_lignes_b;  calcul_rang(struct_processus *s_etat_processus, void *matrice_f77,
     integer4                    ordre;          integer4 nombre_lignes_a, integer4 nombre_colonnes_a,
     integer4                    rang;          integer4 *pivot, integer4 dimension_vecteur_pivot, unsigned char type)
   {
     real8                       anorme;      integer4                    erreur;
     real8                       rcond;      integer4                    *iwork;
     real8                       *rwork;      integer4                    *jpvt;
       integer4                    lwork;
     unsigned char               norme;      integer4                    longueur;
       integer4                    nombre_colonnes_b;
     unsigned long               i;      integer4                    nombre_lignes_b;
       integer4                    ordre;
     void                        *matrice_b;      integer4                    rang;
     void                        *matrice_c;  
     void                        *work;      real8                       anorme;
       real8                       rcond;
 #undef NORME_I      real8                       *rwork;
 #ifdef NORME_I  
     norme = 'I';      unsigned char               norme;
   
     if ((work = malloc(nombre_lignes_a * sizeof(real8))) == NULL)      integer8                    i;
     {  
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;      void                        *matrice_b;
         return(-1);      void                        *matrice_c;
     }      void                        *work;
 #else  
     norme = '1';  #undef NORME_I
     work = NULL;  #ifdef NORME_I
 #endif      norme = 'I';
   
     longueur = 1;      if ((work = malloc(((size_t) nombre_lignes_a) * sizeof(real8))) == NULL)
       {
     if (type == 'R')          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
     {          return(-1);
         anorme = dlange_(&norme, &nombre_lignes_a, &nombre_colonnes_a,      }
                 matrice_f77, &nombre_lignes_a, work, longueur);  #else
       norme = '1';
 #ifndef NORME_I      work = NULL;
         free(work);  #endif
 #endif  
       longueur = 1;
         if ((matrice_c = malloc(nombre_lignes_a * nombre_colonnes_a *  
                 sizeof(real8))) == NULL)      if (type == 'R')
         {      {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          anorme = dlange_(&norme, &nombre_lignes_a, &nombre_colonnes_a,
             return(-1);                  matrice_f77, &nombre_lignes_a, work, longueur);
         }  
   #ifndef NORME_I
         memcpy(matrice_c, matrice_f77, nombre_lignes_a * nombre_colonnes_a *          free(work);
                 sizeof(real8));  #endif
   
         dgetrf_(&nombre_lignes_a, &nombre_colonnes_a, matrice_f77,          if ((matrice_c = malloc(((size_t) (nombre_lignes_a * nombre_colonnes_a))
                 &nombre_lignes_a, pivot, &erreur);                  * sizeof(real8))) == NULL)
           {
         if (erreur < 0)              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         {              return(-1);
             (*s_etat_processus).erreur_execution =          }
                     d_ex_routines_mathematiques;  
           memcpy(matrice_c, matrice_f77, ((size_t) (nombre_lignes_a *
             free(matrice_f77);                  nombre_colonnes_a)) * sizeof(real8));
             return(-1);  
         }          dgetrf_(&nombre_lignes_a, &nombre_colonnes_a, matrice_f77,
                   &nombre_lignes_a, pivot, &erreur);
         if ((iwork = malloc(nombre_colonnes_a * sizeof(integer4))) == NULL)  
         {          if (erreur < 0)
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          {
             return(-1);              (*s_etat_processus).erreur_execution =
         }                      d_ex_routines_mathematiques;
   
         if ((work = malloc(4 * nombre_colonnes_a * sizeof(real8))) == NULL)              free(matrice_f77);
         {              return(-1);
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          }
             return(-1);  
         }          if ((iwork = malloc(((size_t) nombre_colonnes_a) * sizeof(integer4)))
                   == NULL)
         ordre = (nombre_lignes_a > nombre_colonnes_a)          {
                 ? nombre_colonnes_a : nombre_lignes_a;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(-1);
         dgecon_(&norme, &ordre, matrice_f77,          }
                 &nombre_lignes_a, &anorme, &rcond, work, iwork, &erreur,  
                 longueur);          if ((work = malloc(4 * ((size_t) nombre_colonnes_a) * sizeof(real8)))
                   == NULL)
         free(work);          {
         free(iwork);              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(-1);
         if (erreur < 0)          }
         {  
             (*s_etat_processus).erreur_execution =          ordre = (nombre_lignes_a > nombre_colonnes_a)
                     d_ex_routines_mathematiques;                  ? nombre_colonnes_a : nombre_lignes_a;
   
             free(matrice_f77);          dgecon_(&norme, &ordre, matrice_f77,
             return(-1);                  &nombre_lignes_a, &anorme, &rcond, work, iwork, &erreur,
         }                  longueur);
   
         if ((jpvt = malloc(nombre_colonnes_a * sizeof(integer4))) == NULL)          free(work);
         {          free(iwork);
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
             return(-1);          if (erreur < 0)
         }          {
               (*s_etat_processus).erreur_execution =
         for(i = 0; i < (unsigned long) nombre_colonnes_a; i++)                      d_ex_routines_mathematiques;
         {  
             ((integer4 *) jpvt)[i] = 0;              free(matrice_f77);
         }              return(-1);
           }
         lwork = -1;  
           if ((jpvt = malloc(((size_t) nombre_colonnes_a) * sizeof(integer4)))
         if ((work = malloc(sizeof(real8))) == NULL)                  == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return(-1);              return(-1);
         }          }
   
         nombre_colonnes_b = 1;          for(i = 0; i < nombre_colonnes_a; i++)
         nombre_lignes_b = (nombre_lignes_a > nombre_colonnes_a)          {
                 ? nombre_lignes_a : nombre_colonnes_a;              ((integer4 *) jpvt)[i] = 0;
           }
         if ((matrice_b = malloc(nombre_lignes_b * sizeof(real8))) == NULL)  
         {          lwork = -1;
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
             return(-1);          if ((work = malloc(sizeof(real8))) == NULL)
         }          {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         for(i = 0; i < (unsigned long) nombre_lignes_b; i++)              return(-1);
         {          }
             ((real8 *) matrice_b)[i] = 0;  
         }          nombre_colonnes_b = 1;
           nombre_lignes_b = (nombre_lignes_a > nombre_colonnes_a)
         dgelsy_(&nombre_lignes_a, &nombre_colonnes_a,                  ? nombre_lignes_a : nombre_colonnes_a;
                 &nombre_colonnes_b, matrice_c, &nombre_lignes_a,  
                 matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,          if ((matrice_b = malloc(((size_t) nombre_lignes_b) * sizeof(real8)))
                 work, &lwork, &erreur);                  == NULL)
           {
         lwork = ((real8 *) work)[0];              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         free(work);              return(-1);
           }
         if ((work = malloc(lwork * sizeof(real8))) == NULL)  
         {          for(i = 0; i < nombre_lignes_b; i++)
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          {
             return(-1);              ((real8 *) matrice_b)[i] = 0;
         }          }
   
         dgelsy_(&nombre_lignes_a, &nombre_colonnes_a,          dgelsy_(&nombre_lignes_a, &nombre_colonnes_a,
                 &nombre_colonnes_b, matrice_c, &nombre_lignes_a,                  &nombre_colonnes_b, matrice_c, &nombre_lignes_a,
                 matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,                  matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,
                 work, &lwork, &erreur);                  work, &lwork, &erreur);
   
         free(matrice_b);          lwork = (integer4) ((real8 *) work)[0];
         free(matrice_c);          free(work);
         free(work);  
         free(jpvt);          if ((work = malloc(((size_t) lwork) * sizeof(real8))) == NULL)
           {
         if (erreur < 0)              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         {              return(-1);
             (*s_etat_processus).erreur_execution =          }
                     d_ex_routines_mathematiques;  
           dgelsy_(&nombre_lignes_a, &nombre_colonnes_a,
             free(matrice_f77);                  &nombre_colonnes_b, matrice_c, &nombre_lignes_a,
             return(-1);                  matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,
         }                  work, &lwork, &erreur);
     }  
     else          free(matrice_b);
     {          free(matrice_c);
         anorme = zlange_(&norme, &nombre_lignes_a, &nombre_colonnes_a,          free(work);
                 matrice_f77, &nombre_lignes_a, work, longueur);          free(jpvt);
   
 #ifndef NORME_I          if (erreur < 0)
         free(work);          {
 #endif              (*s_etat_processus).erreur_execution =
                       d_ex_routines_mathematiques;
         if ((matrice_c = malloc(nombre_lignes_a * nombre_colonnes_a *  
                 sizeof(complex16))) == NULL)              free(matrice_f77);
         {              return(-1);
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          }
             return(-1);      }
         }      else
       {
         memcpy(matrice_c, matrice_f77, nombre_lignes_a * nombre_colonnes_a *          anorme = zlange_(&norme, &nombre_lignes_a, &nombre_colonnes_a,
                 sizeof(complex16));                  matrice_f77, &nombre_lignes_a, work, longueur);
   
         zgetrf_(&nombre_lignes_a, &nombre_colonnes_a, matrice_f77,  #ifndef NORME_I
                 &nombre_lignes_a, pivot, &erreur);          free(work);
   #endif
         if (erreur < 0)  
         {          if ((matrice_c = malloc(((size_t) (nombre_lignes_a * nombre_colonnes_a))
             (*s_etat_processus).erreur_execution =                  * sizeof(complex16))) == NULL)
                     d_ex_routines_mathematiques;          {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             free(matrice_f77);              return(-1);
             return(-1);          }
         }  
           memcpy(matrice_c, matrice_f77, ((size_t) (nombre_lignes_a *
         if ((rwork = malloc(2 * nombre_colonnes_a * sizeof(real8))) == NULL)                  nombre_colonnes_a)) * sizeof(complex16));
         {  
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          zgetrf_(&nombre_lignes_a, &nombre_colonnes_a, matrice_f77,
             return(-1);                  &nombre_lignes_a, pivot, &erreur);
         }  
           if (erreur < 0)
         if ((work = malloc(2 * nombre_colonnes_a * sizeof(complex16))) == NULL)          {
         {              (*s_etat_processus).erreur_execution =
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                      d_ex_routines_mathematiques;
             return(-1);  
         }              free(matrice_f77);
               return(-1);
         ordre = (nombre_lignes_a > nombre_colonnes_a)          }
                 ? nombre_colonnes_a : nombre_lignes_a;  
           if ((rwork = malloc(2 * ((size_t) nombre_colonnes_a) * sizeof(real8)))
         zgecon_(&norme, &ordre, matrice_f77,                  == NULL)
                 &nombre_lignes_a, &anorme, &rcond, work, rwork, &erreur,          {
                 longueur);              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(-1);
         free(work);          }
   
         if (erreur < 0)          if ((work = malloc(2 * ((size_t) nombre_colonnes_a) *
         {                  sizeof(complex16))) == NULL)
             (*s_etat_processus).erreur_execution =          {
                     d_ex_routines_mathematiques;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(-1);
             free(matrice_f77);          }
             return(-1);  
         }          ordre = (nombre_lignes_a > nombre_colonnes_a)
                   ? nombre_colonnes_a : nombre_lignes_a;
         if ((jpvt = malloc(nombre_colonnes_a * sizeof(integer4))) == NULL)  
         {          zgecon_(&norme, &ordre, matrice_f77,
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  &nombre_lignes_a, &anorme, &rcond, work, rwork, &erreur,
             return(-1);                  longueur);
         }  
           free(work);
         for(i = 0; i < (unsigned long) nombre_colonnes_a; i++)  
         {          if (erreur < 0)
             ((integer4 *) jpvt)[i] = 0;          {
         }              (*s_etat_processus).erreur_execution =
                       d_ex_routines_mathematiques;
         lwork = -1;  
               free(matrice_f77);
         if ((work = malloc(sizeof(complex16))) == NULL)              return(-1);
         {          }
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
             return(-1);          if ((jpvt = malloc(((size_t) nombre_colonnes_a) * sizeof(integer4)))
         }                  == NULL)
           {
         nombre_colonnes_b = 1;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         nombre_lignes_b = (nombre_lignes_a > nombre_colonnes_a)              return(-1);
                 ? nombre_lignes_a : nombre_colonnes_a;          }
   
         if ((matrice_b = malloc(nombre_lignes_b * sizeof(complex16))) == NULL)          for(i = 0; i < nombre_colonnes_a; i++)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              ((integer4 *) jpvt)[i] = 0;
             return(-1);          }
         }  
           lwork = -1;
         for(i = 0; i < (unsigned long) nombre_lignes_b; i++)  
         {          if ((work = malloc(sizeof(complex16))) == NULL)
             ((complex16 *) matrice_b)[i].partie_reelle = 0;          {
             ((complex16 *) matrice_b)[i].partie_imaginaire = 0;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         }              return(-1);
           }
         zgelsy_(&nombre_lignes_a, &nombre_colonnes_a,  
                 &nombre_colonnes_b, matrice_c, &nombre_lignes_a,          nombre_colonnes_b = 1;
                 matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,          nombre_lignes_b = (nombre_lignes_a > nombre_colonnes_a)
                 work, &lwork, rwork, &erreur);                  ? nombre_lignes_a : nombre_colonnes_a;
   
         lwork = ((complex16 *) work)[0].partie_reelle;          if ((matrice_b = malloc(((size_t) nombre_lignes_b) *
         free(work);                  sizeof(complex16))) == NULL)
           {
         if ((work = malloc(lwork * sizeof(complex16))) == NULL)              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         {              return(-1);
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          }
             return(-1);  
         }          for(i = 0; i < nombre_lignes_b; i++)
           {
         zgelsy_(&nombre_lignes_a, &nombre_colonnes_a,              ((complex16 *) matrice_b)[i].partie_reelle = 0;
                 &nombre_colonnes_b, matrice_c, &nombre_lignes_a,              ((complex16 *) matrice_b)[i].partie_imaginaire = 0;
                 matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,          }
                 work, &lwork, rwork, &erreur);  
           zgelsy_(&nombre_lignes_a, &nombre_colonnes_a,
         free(rwork);                  &nombre_colonnes_b, matrice_c, &nombre_lignes_a,
         free(matrice_b);                  matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,
         free(matrice_c);                  work, &lwork, rwork, &erreur);
         free(work);  
         free(jpvt);          lwork = (integer4) ((complex16 *) work)[0].partie_reelle;
           free(work);
         if (erreur < 0)  
         {          if ((work = malloc(((size_t) lwork) * sizeof(complex16))) == NULL)
             (*s_etat_processus).erreur_execution =          {
                     d_ex_routines_mathematiques;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(-1);
             free(matrice_f77);          }
             return(-1);  
         }          zgelsy_(&nombre_lignes_a, &nombre_colonnes_a,
     }                  &nombre_colonnes_b, matrice_c, &nombre_lignes_a,
                   matrice_b, &nombre_lignes_b, jpvt, &rcond, &rang,
     return(rang);                  work, &lwork, rwork, &erreur);
 }  
           free(rwork);
           free(matrice_b);
 void          free(matrice_c);
 determinant(struct_processus *s_etat_processus, struct_matrice *s_matrice,          free(work);
         void *valeur)          free(jpvt);
 {  
     complex16                   *vecteur_complexe;          if (erreur < 0)
           {
     integer4                    dimension_vecteur_pivot;              (*s_etat_processus).erreur_execution =
     integer4                    nombre_colonnes_a;                      d_ex_routines_mathematiques;
     integer4                    nombre_lignes_a;  
     integer4                    *pivot;              free(matrice_f77);
     integer4                    rang;              return(-1);
           }
     integer8                    signe;      }
   
     real8                       *vecteur_reel;      return(rang);
   }
     unsigned long               i;  
     unsigned long               j;  
     unsigned long               k;  void
     unsigned long               taille_matrice_f77;  determinant(struct_processus *s_etat_processus, struct_matrice *s_matrice,
           void *valeur)
     void                        *matrice_f77;  {
       complex16                   *vecteur_complexe;
     nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;  
     nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;      integer4                    dimension_vecteur_pivot;
     dimension_vecteur_pivot = (nombre_lignes_a < nombre_colonnes_a)      integer4                    nombre_colonnes_a;
             ? nombre_lignes_a : nombre_colonnes_a;      integer4                    nombre_lignes_a;
     taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;      integer4                    *pivot;
       integer4                    rang;
     switch((*s_matrice).type)  
     {      integer8                    i;
         case 'I' :      integer8                    j;
         {      integer8                    k;
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *      integer8                    signe;
                     sizeof(real8))) == NULL)      integer8                    taille_matrice_f77;
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;      real8                       *vecteur_reel;
                 return;  
             }      void                        *matrice_f77;
   
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)      nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;
             {      nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)      dimension_vecteur_pivot = (nombre_lignes_a < nombre_colonnes_a)
                 {              ? nombre_lignes_a : nombre_colonnes_a;
                     ((real8 *) matrice_f77)[k++] = ((integer8 **)      taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;
                             (*s_matrice).tableau)[j][i];  
                 }      switch((*s_matrice).type)
             }      {
           case 'I' :
             if ((pivot = (integer4 *) malloc(dimension_vecteur_pivot *          {
                     sizeof(integer4))) == NULL)              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
             {                      sizeof(real8))) == NULL)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             }                  return;
               }
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,  
                     nombre_lignes_a, nombre_colonnes_a, pivot,              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                     dimension_vecteur_pivot, 'R')) < 0)              {
             {                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
                 return;                  {
             }                      ((real8 *) matrice_f77)[k++] = (real8) ((integer8 **)
                               (*s_matrice).tableau)[j][i];
             if (rang < nombre_lignes_a)                  }
             {              }
                 (*((real8 *) valeur)) = 0;  
             }              if ((pivot = (integer4 *) malloc(((size_t) dimension_vecteur_pivot)
             else                      * sizeof(integer4))) == NULL)
             {              {
                 if ((vecteur_reel = malloc((*s_matrice).nombre_colonnes *                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                         sizeof(real8))) == NULL)                  return;
                 {              }
                     (*s_etat_processus).erreur_systeme =  
                             d_es_allocation_memoire;              if ((rang = calcul_rang(s_etat_processus, matrice_f77,
                     return;                      nombre_lignes_a, nombre_colonnes_a, pivot,
                 }                      dimension_vecteur_pivot, 'R')) < 0)
               {
                 signe = 1;                  return;
               }
                 for(i = 0; i < (*s_matrice).nombre_colonnes; i++)  
                 {              if (rang < nombre_lignes_a)
                     if ((unsigned long) pivot[i] != (i + 1))              {
                     {                  (*((real8 *) valeur)) = 0;
                         signe = (signe == 1) ? -1 : 1;              }
                     }              else
               {
                     vecteur_reel[i] = ((real8 *) matrice_f77)                  if ((vecteur_reel = malloc(((size_t) ((*s_matrice)
                             [(i * nombre_colonnes_a) + i];                          .nombre_colonnes)) * sizeof(real8))) == NULL)
                 }                  {
                       (*s_etat_processus).erreur_systeme =
                 for(i = 1; i < (*s_matrice).nombre_colonnes; i++)                              d_es_allocation_memoire;
                 {                      return;
                     vecteur_reel[0] *= vecteur_reel[i];                  }
                 }  
                   signe = 1;
                 (*((real8 *) valeur)) = vecteur_reel[0] * signe;  
                   for(i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 free(vecteur_reel);                  {
             }                      if (pivot[i] != (i + 1))
                       {
             free(matrice_f77);                          signe = (signe == 1) ? -1 : 1;
             free(pivot);                      }
   
             break;                      vecteur_reel[i] = ((real8 *) matrice_f77)
         }                              [(i * nombre_colonnes_a) + i];
                   }
         case 'R' :  
         {                  for(i = 1; i < (*s_matrice).nombre_colonnes; i++)
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *                  {
                     sizeof(real8))) == NULL)                      vecteur_reel[0] *= vecteur_reel[i];
             {                  }
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return;                  (*((real8 *) valeur)) = vecteur_reel[0] * ((real8) signe);
             }                  free(vecteur_reel);
               }
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)  
             {              free(matrice_f77);
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              free(pivot);
                 {  
                     ((real8 *) matrice_f77)[k++] = ((real8 **)              break;
                             (*s_matrice).tableau)[j][i];          }
                 }  
             }          case 'R' :
           {
             if ((pivot = (integer4 *) malloc(dimension_vecteur_pivot *              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
                     sizeof(integer4))) == NULL)                      sizeof(real8))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
   
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                     nombre_lignes_a, nombre_colonnes_a, pivot,              {
                     dimension_vecteur_pivot, 'R')) < 0)                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             {                  {
                 return;                      ((real8 *) matrice_f77)[k++] = ((real8 **)
             }                              (*s_matrice).tableau)[j][i];
                   }
             if (rang < nombre_lignes_a)              }
             {  
                 (*((real8 *) valeur)) = 0;              if ((pivot = (integer4 *) malloc(((size_t) dimension_vecteur_pivot)
             }                      * sizeof(integer4))) == NULL)
             else              {
             {                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 if ((vecteur_reel = malloc((*s_matrice).nombre_colonnes *                  return;
                         sizeof(real8))) == NULL)              }
                 {  
                     (*s_etat_processus).erreur_systeme =              if ((rang = calcul_rang(s_etat_processus, matrice_f77,
                             d_es_allocation_memoire;                      nombre_lignes_a, nombre_colonnes_a, pivot,
                     return;                      dimension_vecteur_pivot, 'R')) < 0)
                 }              {
                   return;
                 signe = 1;              }
   
                 for(i = 0; i < (*s_matrice).nombre_colonnes; i++)              if (rang < nombre_lignes_a)
                 {              {
                     if ((unsigned long) pivot[i] != (i + 1))                  (*((real8 *) valeur)) = 0;
                     {              }
                         signe = (signe == 1) ? -1 : 1;              else
                     }              {
                   if ((vecteur_reel = malloc(((size_t) (*s_matrice)
                     vecteur_reel[i] = ((real8 *) matrice_f77)                          .nombre_colonnes) * sizeof(real8))) == NULL)
                             [(i * nombre_colonnes_a) + i];                  {
                 }                      (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                 for(i = 1; i < (*s_matrice).nombre_colonnes; i++)                      return;
                 {                  }
                     vecteur_reel[0] *= vecteur_reel[i];  
                 }                  signe = 1;
   
                 (*((real8 *) valeur)) = vecteur_reel[0] * signe;                  for(i = 0; i < (*s_matrice).nombre_colonnes; i++)
                   {
                 free(vecteur_reel);                      if (pivot[i] != (i + 1))
             }                      {
                           signe = (signe == 1) ? -1 : 1;
             free(matrice_f77);                      }
             free(pivot);  
                       vecteur_reel[i] = ((real8 *) matrice_f77)
             break;                              [(i * nombre_colonnes_a) + i];
         }                  }
   
         case 'C' :                  for(i = 1; i < (*s_matrice).nombre_colonnes; i++)
         {                  {
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *                      vecteur_reel[0] *= vecteur_reel[i];
                     sizeof(complex16))) == NULL)                  }
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*((real8 *) valeur)) = vecteur_reel[0] * ((real8) signe);
                 return;  
             }                  free(vecteur_reel);
               }
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)  
             {              free(matrice_f77);
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              free(pivot);
                 {  
                     ((complex16 *) matrice_f77)[k++] = ((complex16 **)              break;
                             (*s_matrice).tableau)[j][i];          }
                 }  
             }          case 'C' :
           {
             if ((pivot = (integer4 *) malloc(dimension_vecteur_pivot *              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
                     sizeof(integer4))) == NULL)                      sizeof(complex16))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
   
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
                     nombre_lignes_a, nombre_colonnes_a, pivot,              {
                     dimension_vecteur_pivot, 'C')) < 0)                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             {                  {
                 return;                      ((complex16 *) matrice_f77)[k++] = ((complex16 **)
             }                              (*s_matrice).tableau)[j][i];
                   }
             if (rang < nombre_lignes_a)              }
             {  
                 (*((complex16 *) valeur)).partie_reelle = 0;              if ((pivot = (integer4 *) malloc(((size_t) dimension_vecteur_pivot)
                 (*((complex16 *) valeur)).partie_imaginaire = 0;                      * sizeof(integer4))) == NULL)
             }              {
             else                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             {                  return;
                 if ((vecteur_complexe = malloc((*s_matrice).nombre_colonnes *              }
                         sizeof(complex16))) == NULL)  
                 {              if ((rang = calcul_rang(s_etat_processus, matrice_f77,
                     (*s_etat_processus).erreur_systeme =                      nombre_lignes_a, nombre_colonnes_a, pivot,
                             d_es_allocation_memoire;                      dimension_vecteur_pivot, 'C')) < 0)
                     return;              {
                 }                  return;
               }
                 signe = 1;  
               if (rang < nombre_lignes_a)
                 for(i = 0; i < (*s_matrice).nombre_colonnes; i++)              {
                 {                  (*((complex16 *) valeur)).partie_reelle = 0;
                     if ((unsigned long) pivot[i] != (i + 1))                  (*((complex16 *) valeur)).partie_imaginaire = 0;
                     {              }
                         signe = (signe == 1) ? -1 : 1;              else
                     }              {
                   if ((vecteur_complexe = malloc(((size_t) (*s_matrice)
                     vecteur_complexe[i] = ((complex16 *) matrice_f77)                          .nombre_colonnes) * sizeof(complex16))) == NULL)
                             [(i * nombre_colonnes_a) + i];                  {
                 }                      (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                 for(i = 1; i < (*s_matrice).nombre_colonnes; i++)                      return;
                 {                  }
                     f77multiplicationcc_(&(vecteur_complexe[0]),  
                             &(vecteur_complexe[i]), &(vecteur_complexe[0]));                  signe = 1;
                 }  
                   for(i = 0; i < (*s_matrice).nombre_colonnes; i++)
                 f77multiplicationci_(&(vecteur_complexe[0]), &signe,                  {
                         ((complex16 *) valeur));                      if (pivot[i] != (i + 1))
                       {
                 free(vecteur_complexe);                          signe = (signe == 1) ? -1 : 1;
             }                      }
   
             free(matrice_f77);                      vecteur_complexe[i] = ((complex16 *) matrice_f77)
             free(pivot);                              [(i * nombre_colonnes_a) + i];
                   }
             break;  
         }                  for(i = 1; i < (*s_matrice).nombre_colonnes; i++)
     }                  {
                       f77multiplicationcc_(&(vecteur_complexe[0]),
     return;                              &(vecteur_complexe[i]), &(vecteur_complexe[0]));
 }                  }
   
                   f77multiplicationci_(&(vecteur_complexe[0]), &signe,
 void                          ((complex16 *) valeur));
 rang(struct_processus *s_etat_processus, struct_matrice *s_matrice,  
         integer8 *valeur)                  free(vecteur_complexe);
 {              }
     integer4                    dimension_vecteur_pivot;  
     integer4                    nombre_lignes_a;              free(matrice_f77);
     integer4                    nombre_colonnes_a;              free(pivot);
     integer4                    *pivot;  
     integer4                    rang;              break;
     integer4                    taille_matrice_f77;          }
       }
     unsigned long               i;  
     unsigned long               j;      return;
     unsigned long               k;  }
   
     void                        *matrice_f77;  
   void
     nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;  rang(struct_processus *s_etat_processus, struct_matrice *s_matrice,
     nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;          integer8 *valeur)
     dimension_vecteur_pivot = (nombre_lignes_a < nombre_colonnes_a)  {
             ? nombre_lignes_a : nombre_colonnes_a;      integer4                    dimension_vecteur_pivot;
     taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;      integer4                    nombre_lignes_a;
       integer4                    nombre_colonnes_a;
     if ((pivot = (integer4 *) malloc(dimension_vecteur_pivot *      integer4                    *pivot;
             sizeof(integer4))) == NULL)      integer4                    rang;
     {      integer4                    taille_matrice_f77;
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
         return;      integer8                    i;
     }      integer8                    j;
       integer8                    k;
     switch((*s_matrice).type)  
     {      void                        *matrice_f77;
         case 'I' :  
         {      nombre_lignes_a = (integer4) (*s_matrice).nombre_lignes;
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *      nombre_colonnes_a = (integer4) (*s_matrice).nombre_colonnes;
                     sizeof(real8))) == NULL)      dimension_vecteur_pivot = (nombre_lignes_a < nombre_colonnes_a)
             {              ? nombre_lignes_a : nombre_colonnes_a;
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;      taille_matrice_f77 = nombre_lignes_a * nombre_colonnes_a;
                 return;  
             }      if ((pivot = (integer4 *) malloc(((size_t) dimension_vecteur_pivot) *
               sizeof(integer4))) == NULL)
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)      {
             {          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)          return;
                 {      }
                     ((real8 *) matrice_f77)[k++] = ((integer8 **)  
                             (*s_matrice).tableau)[j][i];      switch((*s_matrice).type)
                 }      {
             }          case 'I' :
           {
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
                     nombre_lignes_a, nombre_colonnes_a, pivot,                      sizeof(real8))) == NULL)
                     dimension_vecteur_pivot, 'R')) < 0)              {
             {                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 free(pivot);                  return;
                 free(matrice_f77);              }
                 return;  
             }              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
               {
             free(matrice_f77);                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             (*valeur) = rang;                  {
             break;                      ((real8 *) matrice_f77)[k++] = (real8) ((integer8 **)
         }                              (*s_matrice).tableau)[j][i];
                   }
         case 'R' :              }
         {  
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *              if ((rang = calcul_rang(s_etat_processus, matrice_f77,
                     sizeof(real8))) == NULL)                      nombre_lignes_a, nombre_colonnes_a, pivot,
             {                      dimension_vecteur_pivot, 'R')) < 0)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  free(pivot);
             }                  free(matrice_f77);
                   return;
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              free(matrice_f77);
                 {              (*valeur) = rang;
                     ((real8 *) matrice_f77)[k++] = ((real8 **)              break;
                             (*s_matrice).tableau)[j][i];          }
                 }  
             }          case 'R' :
           {
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
                     nombre_lignes_a, nombre_colonnes_a, pivot,                      sizeof(real8))) == NULL)
                     dimension_vecteur_pivot, 'R')) < 0)              {
             {                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 free(pivot);                  return;
                 free(matrice_f77);              }
                 return;  
             }              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
               {
             free(matrice_f77);                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             (*valeur) = rang;                  {
             break;                      ((real8 *) matrice_f77)[k++] = ((real8 **)
         }                              (*s_matrice).tableau)[j][i];
                   }
         case 'C' :              }
         {  
             if ((matrice_f77 = (void *) malloc(taille_matrice_f77 *              if ((rang = calcul_rang(s_etat_processus, matrice_f77,
                     sizeof(complex16))) == NULL)                      nombre_lignes_a, nombre_colonnes_a, pivot,
             {                      dimension_vecteur_pivot, 'R')) < 0)
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              {
                 return;                  free(pivot);
             }                  free(matrice_f77);
                   return;
             for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)              }
             {  
                 for(j = 0; j < (*s_matrice).nombre_lignes; j++)              free(matrice_f77);
                 {              (*valeur) = rang;
                     ((complex16 *) matrice_f77)[k++] = ((complex16 **)              break;
                             (*s_matrice).tableau)[j][i];          }
                 }  
             }          case 'C' :
           {
             if ((rang = calcul_rang(s_etat_processus, matrice_f77,              if ((matrice_f77 = malloc(((size_t) taille_matrice_f77) *
                     nombre_lignes_a, nombre_colonnes_a, pivot,                      sizeof(complex16))) == NULL)
                     dimension_vecteur_pivot, 'C')) < 0)              {
             {                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 free(pivot);                  return;
                 free(matrice_f77);              }
                 return;  
             }              for(k = 0, i = 0; i < (*s_matrice).nombre_colonnes; i++)
               {
             free(matrice_f77);                  for(j = 0; j < (*s_matrice).nombre_lignes; j++)
             (*valeur) = rang;                  {
             break;                      ((complex16 *) matrice_f77)[k++] = ((complex16 **)
         }                              (*s_matrice).tableau)[j][i];
     }                  }
               }
     free(pivot);  
               if ((rang = calcul_rang(s_etat_processus, matrice_f77,
     return;                      nombre_lignes_a, nombre_colonnes_a, pivot,
 }                      dimension_vecteur_pivot, 'C')) < 0)
               {
 // vim: ts=4                  free(pivot);
                   free(matrice_f77);
                   return;
               }
   
               free(matrice_f77);
               (*valeur) = rang;
               break;
           }
       }
   
       free(pivot);
   
       return;
   }
   
   // vim: ts=4

Removed from v.1.12  
changed lines
  Added in v.1.60


CVSweb interface <joel.bertrand@systella.fr>