
// 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-2022 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:        15/01/97                                            *
 *                                                                $     *
 *     AUTEUR:      G RIO   (mailto:gerardrio56@free.fr)                *
 *                                                                $     *
 *     PROJET:      Herezh++                                            *
 *                                                                $     *
 ************************************************************************
 * deuxième partie du fichier Met_Sfe1.h
 * contient en fait toutes les structures de données de passage d'informations
 *                                                                $     *
 *     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     *                                                                      *
 *     VERIFICATION:                                                    *
 *                                                                      *
 *     !  date  !   auteur   !       but                          !     *
 *     ------------------------------------------------------------     *
 *     !        !            !                                    !     *
 *                                                                      *
 *                                                                $     *
 *     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     *
 *     MODIFICATIONS:
 *                                                                      *
 *     !  date  !   auteur   !       but                          !     *
 *     ------------------------------------------------------------     *
 *                                                                      *
 *                                                                $     *
 *                                                                      *
 ************************************************************************/

#include "Tenseur.h"
#include "Base.h"

// deuxième partie du fichier Met_Sfe1.h
// contient en fait toutes les structures de données de passage d'informations


/// @addtogroup groupe_des_metrique
///  @{
///

/// CLASSE CONTENEUR : cas des grandeurs relatives à la courbure, grandeurs à 0, t et tdt
/// les données sont publiques
		class Courbure_t_tdt
		 { public : Courbure_t_tdt () : // constructeur par défaut
	                   aiB_0(NULL),aiH_0(NULL),aiB_t(NULL),aiH_t(NULL),aiB_tdt(NULL),aiH_tdt(NULL)
	                   ,aijBB_0(NULL),aijHH_0(NULL),aijBB_t(NULL),aijHH_t(NULL),aijBB_tdt(NULL),aijHH_tdt(NULL)
                     ,curbBB_t(NULL),curbBB_tdt(NULL),curbBB_0(NULL)
		  	         ,ajacobien_tdt(NULL),ajacobien_t(NULL),ajacobien_0(NULL)
		  	          {};		  	        
                    Courbure_t_tdt  // constructeur normal 
                       (BaseB * aaiB_0,BaseH * aaiH_0,BaseB * aaiB_t,BaseH * aaiH_t, BaseB * aaiB_tdt
                        ,BaseH *aaiH_tdt
                        ,TenseurBB* aaijBB_0,TenseurHH* aaijHH_0,TenseurBB* aaijBB_t
                        ,TenseurHH* aaijHH_t,TenseurBB* aaijBB_tdt,TenseurHH* aaijHH_tdt
                        ,TenseurBB * gcurbBB_t,TenseurBB * gcurbBB_tdt,TenseurBB * gcurbBB_0
                        ,double* gjacobien,double* gajacobien_t,double* gajacobien_0) :
	                   aiB_0(aaiB_0),aiH_0(aaiH_0),aiB_t(aaiB_t),aiH_t(aaiH_t),aiB_tdt(aaiB_tdt),
	                   aiH_tdt(aaiH_tdt),
                       aijBB_0(aaijBB_0),aijHH_0(aaijHH_0)
                       ,aijBB_t(aaijBB_t),aijHH_t(aaijHH_t),aijBB_tdt(aaijBB_tdt),aijHH_tdt(aaijHH_tdt)
                       ,curbBB_t(gcurbBB_t),curbBB_tdt(gcurbBB_tdt),curbBB_0(gcurbBB_0),
		  	          ajacobien_tdt(gjacobien),ajacobien_t(gajacobien_t),ajacobien_0(gajacobien_0)
		  	          {};		  	        
                    Courbure_t_tdt (const Courbure_t_tdt& ex) : // constructeur de copie
	                   aiB_0(ex.aiB_0),aiH_0(ex.aiH_0),aiB_t(ex.aiB_t),aiH_t(ex.aiH_t),aiB_tdt(ex.aiB_tdt)
	                 ,aiH_tdt(ex.aiH_tdt),
                     aijBB_0(ex.aijBB_0),aijHH_0(ex.aijHH_0),aijBB_t(ex.aijBB_t),aijHH_t(ex.aijHH_t)
                     ,aijBB_tdt(ex.aijBB_tdt),aijHH_tdt(ex.aijHH_tdt)
                     ,curbBB_t(ex.curbBB_t),curbBB_tdt(ex.curbBB_tdt),curbBB_0(ex.curbBB_0),
		  	          ajacobien_tdt(ex.ajacobien_tdt),ajacobien_t(ex.ajacobien_t),ajacobien_0(ex.ajacobien_0)
		  	          {};		  	        

                    Courbure_t_tdt& operator= (const Courbure_t_tdt& ex)  // surcharge d'affectation
	                   {aiB_0=ex.aiB_0;aiH_0=ex.aiH_0;aiB_t=ex.aiB_t;aiH_t=ex.aiH_t;aiB_tdt=ex.aiB_tdt;
	                   aiH_tdt=ex.aiH_tdt;
                     aijBB_0=ex.aijBB_0;aijHH_0=ex.aijHH_0; aijBB_t=ex.aijBB_t;aijHH_t=ex.aijHH_t;
                     aijBB_tdt=ex.aijBB_tdt;aijHH_tdt=ex.aijHH_tdt;
                     curbBB_t=ex.curbBB_t;curbBB_tdt=ex.curbBB_tdt;curbBB_0=ex.curbBB_0;
		  	          ajacobien_tdt=ex.ajacobien_tdt;ajacobien_t=ex.ajacobien_t;ajacobien_0=ex.ajacobien_0;
		  	          return *this;};
		  	        // mise à jour des grandeurs 
		  	        void Mise_a_jour_grandeur(BaseB * aaiB_0,BaseH * aaiH_0,BaseB * aaiB_t,BaseH* aaiH_t
		  	            ,BaseB * aaiB_tdt,BaseH *aaiH_tdt
                        ,TenseurBB* aaijBB_0,TenseurHH* aaijHH_0,TenseurBB* aaijBB_t,TenseurHH* aaijHH_t
                        ,TenseurBB* aaijBB_tdt,TenseurHH* aaijHH_tdt
                        ,TenseurBB * gcurbBB_t,TenseurBB * gcurbBB_tdt,TenseurBB * gcurbBB_0
                        ,double* gjacobien,double* gajacobien_t,double* gajacobien_0)  		  	        
	                   {aiB_0=aaiB_0;aiH_0=aaiH_0;aiB_t=aaiB_t;aiH_t=aaiH_t;aiB_tdt=aaiB_tdt;
	                   aiH_tdt=aaiH_tdt;
                     aijBB_0=aaijBB_0;aijHH_0=aaijHH_0;aijBB_t=aaijBB_t;aijHH_t=aaijHH_t;
                     aijBB_tdt=aaijBB_tdt;aijHH_tdt=aaijHH_tdt;
                     curbBB_t=gcurbBB_t;curbBB_tdt=gcurbBB_tdt;curbBB_0=gcurbBB_0;
		  	          ajacobien_tdt=gjacobien;ajacobien_t=gajacobien_t;ajacobien_0=gajacobien_0;
		  	          };
		           // mise à jour des grandeurs à 0 et à t sauf les variations (pas de tableau et pas à tdt)
		           // à partir de grandeurs stockées par ailleurs (il s'aait ici donc d'affectation de contenu et
		           // non de pointeur !)
		  	        void Recup_grandeur_0_t(BaseB & aaiB_0,BaseH & aaiH_0,BaseB & aaiB_t,BaseH& aaiH_t
                        ,TenseurBB& aaijBB_0,TenseurHH& aaijHH_0,TenseurBB& aaijBB_t,TenseurHH& aaijHH_t
                        ,TenseurBB & ,double& gajacobien_0,double& gajacobien_t)		  	        	
	                   {*aiB_0=aaiB_0;*aiH_0=aaiH_0;*aiB_t=aaiB_t;*aiH_t=aaiH_t;
                        *aijBB_0=aaijBB_0;*aijHH_0=aaijHH_0;*aijBB_t=aaijBB_t;*aijHH_t=aaijHH_t;
                        *ajacobien_t=gajacobien_t;*ajacobien_0=gajacobien_0;
	                   };
		           
		 // variables :
		    BaseB * aiB_0; BaseH * aiH_0; BaseB * aiB_t; BaseH * aiH_t;BaseB * aiB_tdt;
		    BaseH * aiH_tdt;
            TenseurBB * aijBB_0; TenseurHH * aijHH_0; 
            TenseurBB * aijBB_t ; TenseurHH * aijHH_t ;TenseurBB * aijBB_tdt;TenseurHH * aijHH_tdt; 
            TenseurBB * curbBB_t;TenseurBB * curbBB_tdt;TenseurBB * curbBB_0; 
            double* ajacobien_tdt;double* ajacobien_t;double* ajacobien_0;
		 };
/// @}  // end of group

