ajout de deux fichiers oubliés de Resolin

This commit is contained in:
Gérard Rio 2021-09-28 17:29:26 +02:00
parent 6ce5927da9
commit 11e3626b01
2 changed files with 225 additions and 0 deletions

View file

@ -0,0 +1,147 @@
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* ******** *** SparseLib++ */
/* ******* ** *** *** *** v. 1.5c */
/* ***** *** ******** ******** */
/* ***** *** ******** ******** R. Pozo */
/* ** ******* *** ** *** *** K. Remington */
/* ******** ******** A. Lumsdaine */
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* */
/* */
/* SparseLib++ : Sparse Matrix Library */
/* */
/* National Institute of Standards and Technology */
/* University of Notre Dame */
/* Authors: R. Pozo, K. Remington, A. Lumsdaine */
/* */
/* NOTICE */
/* */
/* Permission to use, copy, modify, and distribute this software and */
/* its documentation for any purpose and without fee is hereby granted */
/* provided that the above notice appear in all copies and supporting */
/* documentation. */
/* */
/* Neither the Institutions (National Institute of Standards and Technology, */
/* University of Notre Dame) nor the Authors make any representations about */
/* the suitability of this software for any purpose. This software is */
/* provided ``as is'' without expressed or implied warranty. */
/* */
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// modification GR
// 1) on utilise une interface unique pour tous les préconditionneurs
// d'où l'héritage d'une classe virtuelle
// 2) on utilise sytématiquement les classes templates MV++
#ifndef ILUPRE_GR_H
#define ILUPRE_GR_H
//#include "vecdefs.h"
#include "vecdefs_GR.h" // modif GR
//#include VECTOR_H // modif GR
#include "comprow_double.h"
#include "compcol_double.h"
#include "pre_cond_double.h"
#include "Mat_abstraite.h"
class CompCol_ILUPreconditioner_double : public Pre_cond_double
{
private:
VECTOR_double l_val_;
VECTOR_int l_colptr_;
VECTOR_int l_rowind_;
int l_nz_;
VECTOR_double u_val_;
VECTOR_int u_colptr_;
VECTOR_int u_rowind_;
int u_nz_;
int dim_[2];
public:
CompCol_ILUPreconditioner_double(const CompCol_Mat_double &A);
// cas d'une matrice abstraite
CompCol_ILUPreconditioner_double(const Mat_abstraite &A);
~CompCol_ILUPreconditioner_double(void){};
// méthodes-------
VECTOR_double solve(const VECTOR_double &x) const;
VECTOR_double trans_solve(const VECTOR_double &x) const;
//====================== protégée ========================
protected :
// fonction interne d'initialisation pour éviter la recopie
void Init_CompCol_Mat_double(const CompCol_Mat_double &A);
void Init_Mat_creuse_CompCol(const Mat_abstraite &A);
};
class CompRow_ILUPreconditioner_double : public Pre_cond_double
{
private:
VECTOR_double l_val_;
VECTOR_int l_rowptr_;
VECTOR_int l_colind_;
int l_nz_;
VECTOR_double u_val_;
VECTOR_int u_rowptr_;
VECTOR_int u_colind_;
int u_nz_;
int dim_[2];
public:
CompRow_ILUPreconditioner_double(const CompRow_Mat_double &A);
// cas d'une matrice abstraite
CompRow_ILUPreconditioner_double(const Mat_abstraite &A);
~CompRow_ILUPreconditioner_double(void){};
// méthodes-------
VECTOR_double solve(const VECTOR_double &x) const;
VECTOR_double trans_solve(const VECTOR_double &x) const;
//====================== protégée ========================
protected :
// fonction interne d'initialisation pour éviter la recopie
void Init_CompRow_Mat_double(const CompRow_Mat_double &A);
};
// introduction d'une classe qui regroupe les différentes possibilités de
// stockage matricielle
class ILUPreconditioner_double : public Pre_cond_double
{
public:
// CONSTRUCTEUR
// cas d'une matrice abstraite
ILUPreconditioner_double(const Mat_abstraite &A);
// destructeur
~ILUPreconditioner_double(void);
// méthodes-------
VECTOR_double solve(const VECTOR_double &x) const
{ return preCond_mat->solve(x);};
VECTOR_double trans_solve(const VECTOR_double &x) const
{ return preCond_mat->trans_solve(x);};
//====================== protégée ========================
private:
// pour l'instant deux types de matrices possibles
Pre_cond_double * preCond_mat;
};
#endif

View file

@ -0,0 +1,78 @@
// This file is part of the Herezh++ application.
//
// The finite element software Herezh++ is dedicated to the field
// of mechanics for large transformations of solid structures.
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
//
// Herezh++ is distributed under GPL 3 license ou ultérieure.
//
// Copyright (C) 1997-2021 Université Bretagne Sud (France)
// AUTHOR : Gérard Rio
// E-MAIL : gerardrio56@free.fr
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//
// For more information, please consult: <https://herezh.irdl.fr/>.
/************************************************************************
* DATE: 03/01/01 *
* $ *
* AUTEUR: G RIO (mailto:gerardrio56@free.fr) *
* $ *
* PROJET: Herezh++ *
* $ *
************************************************************************
* BUT: Faire une interface générique pour les préconditionnements. *
* $ *
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * *
* VERIFICATION: *
* *
* ! date ! auteur ! but ! *
* ------------------------------------------------------------ *
* ! ! ! ! *
* $ *
* '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' *
* MODIFICATIONS: *
* ! date ! auteur ! but ! *
* ------------------------------------------------------------ *
* $ *
************************************************************************/
#ifndef PRE_COND_DOUBLE_H
#define PRE_COND_DOUBLE_H
#include "vecdefs_GR.h"
#include "comprow_double.h"
#include "compcol_double.h"
/// @addtogroup Les_classes_Matrices
/// @{
///
class Pre_cond_double {
public:
virtual ~Pre_cond_double(){}; //destructeur virtuel pour l'appel des vrais destructeur
// résolution du système AX=b
virtual VECTOR_double solve (const VECTOR_double &x) const = 0;
// résolution du sytème Xt A = b
virtual VECTOR_double trans_solve (const VECTOR_double &x) const = 0;
};
/// @} // end of group
#endif