Page MenuHomec4science

container_lammps.hh
No OneTemporary

File Metadata

Created
Fri, Aug 2, 23:15

container_lammps.hh

/**
* @file container_lammps.hh
*
* @author Guillaume Anciaux <guillaume.anciaux@epfl.ch>
*
* @date Thu Jul 24 14:21:58 2014
*
* @brief This is the container of lammps atomic references
*
* @section LICENSE
*
* Copyright INRIA and CEA
*
* The LibMultiScale is a C++ parallel framework for the multiscale
* coupling methods dedicated to material simulations. This framework
* provides an API which makes it possible to program coupled simulations
* and integration of already existing codes.
*
* This Project was initiated in a collaboration between INRIA Futurs Bordeaux
* within ScAlApplix team and CEA/DPTA Ile de France.
* The project is now continued at the Ecole Polytechnique Fédérale de Lausanne
* within the LSMS/ENAC laboratory.
*
* This software is governed by the CeCILL-C license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL-C
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*
*/
#ifndef __LIBMULTISCALE_CONTAINER_LAMMPS_HH__
#define __LIBMULTISCALE_CONTAINER_LAMMPS_HH__
/* -------------------------------------------------------------------------- */
#include "container.hh"
#include "ref_atom_lammps.hh"
//#include "reference_manager_lammps.hh"
//#include "communicator.hh"
/* -------------------------------------------------------------------------- */
__BEGIN_LIBMULTISCALE__
/**
* Container for lammps atoms
*
*/
template <UInt _Dim>
class ContainerLammps :
public Container_base<RefLammps<_Dim> > {
/* ------------------------------------------------------------------------ */
/* Typedefs */
/* ------------------------------------------------------------------------ */
public:
class iterator;
static const UInt Dim = _Dim;
/* ------------------------------------------------------------------------ */
/* Constructors/Destructors */
/* ------------------------------------------------------------------------ */
public:
ContainerLammps():Container_base<RefLammps<Dim> >(),
stress_hook(NULL),stressKin_hook(NULL),
epot_hook(NULL){};
~ContainerLammps(){
if (epot_hook) delete epot_hook;
if (stress_hook) delete stress_hook;
if (stressKin_hook) delete stressKin_hook;
epot_hook = NULL;
stressKin_hook = NULL;
stress_hook = NULL;
};
/* ------------------------------------------------------------------------ */
/* Accessors */
/* ------------------------------------------------------------------------ */
iterator getIterator(DOFType dt = dt_local);
UInt nbElem(DOFType dt = dt_local);
// virtual ReferenceManagerLammps<Dim> & getRefManager(){return refmanager;}
// void setReferenceManagerState(bool state){
// switch (state){
// case true: refmanager.Activate();break;
// case false: refmanager.UnActivate();break;
// }
// };
/* ------------------------------------------------------------------------ */
/* Methods */
/* ------------------------------------------------------------------------ */
RefLammps<_Dim> & get (UInt index);
void init(){
if (!stress_hook)
stress_hook = new StressHookLammps(0,lammps_main_object);
if (!stressKin_hook)
stressKin_hook = new StressHookLammps(1,lammps_main_object);
if (!epot_hook)
epot_hook = new EpotHookLammps(lammps_main_object);
};
/* ------------------------------------------------------------------------ */
/* Class Members */
/* ------------------------------------------------------------------------ */
//! array of atom structures
StressHookLammps * stress_hook;
StressHookLammps * stressKin_hook;
EpotHookLammps * epot_hook;
RefLammps<Dim> at;
private:
//! reference manager for lammps
// ReferenceManagerLammps<Dim> refmanager;
};
__END_LIBMULTISCALE__
/* -------------------------------------------------------------------------- */
#include "iterator_lammps.hh"
/* -------------------------------------------------------------------------- */
__BEGIN_LIBMULTISCALE__
template <UInt Dim>
inline typename ContainerLammps<Dim>::iterator
ContainerLammps<Dim>::getIterator(DOFType dt){
iterator it(*this);
return it;
}
/* -------------------------------------------------------------------------- */
template <UInt _Dim>
inline RefLammps<_Dim> & ContainerLammps<_Dim>::get(UInt index){
at.index_atom = index;
at.stress_hook = this->stress_hook;
at.stressKin_hook = this->stressKin_hook;
at.epot_hook = this->epot_hook;
return at;
}
/* -------------------------------------------------------------------------- */
template <UInt _Dim>
inline UInt ContainerLammps<_Dim>::nbElem(DOFType dt){
if (!lammps_main_object) return 0;
if (!lammps_main_object->atom)return 0;
// if (ghost_flags)
// return lammps_main_object->atom->nlocal+lammps_main_object->atom->nghost;
return lammps_main_object->atom->nlocal;
}
/* -------------------------------------------------------------------------- */
template <UInt Dim>
class ContainerLammpsMinimize : public ContainerLammps<Dim> {
};
/* -------------------------------------------------------------------------- */
__END_LIBMULTISCALE__
#endif /* __LIBMULTISCALE_CONTAINER_LAMMPS_HH__ */

Event Timeline