DumperVGroupe< T, Dim > Class Template Reference

#include <dumper_vgroupe.h>

Inheritance diagram for DumperVGroupe< T, Dim >:

Inheritance graph
[legend]
Collaboration diagram for DumperVGroupe< T, Dim >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 DumperVGroupe (DomainInterface &d, int ID)

Protected Member Functions

void Dump ()
 dump function that dump to file screen or whatever
void Init ()
 initialisation of the dumper internal data
void SetParam (char *key, double value)
 setting parameters to object that auto configure fields from key/value call

Private Attributes

double * deplacements_par_tranche
unsigned int * nb_par_tranche
unsigned int nb_tranches
FILE * output [1]

Detailed Description

template<typename T, unsigned int Dim>
class DumperVGroupe< T, Dim >

Definition at line 52 of file dumper_vgroupe.h.


Constructor & Destructor Documentation

template<typename T, unsigned int Dim>
DumperVGroupe< T, Dim >::DumperVGroupe ( DomainInterface d,
int  ID 
) [inline]

Definition at line 56 of file dumper_vgroupe.h.

00056                                            :
00057     Dumper<T,Dim>(static_cast<T &>(d),ID)
00058     {
00059     };


Member Function Documentation

template<typename Domain, unsigned int Dim>
void DumperVGroupe< Domain, Dim >::Dump (  )  [inline, protected, virtual]

dump function that dump to file screen or whatever

Implements DumperInterface.

Definition at line 71 of file dumper_atom_vgroup.cpp.

References UnitsConverter::AtomsUnits, cpt, DBG_ALL, DumperVGroupe< T, Dim >::deplacements_par_tranche, DUMP, UnitsConverter::etalon_metre, ipow(), DumperVGroupe< T, Dim >::nb_par_tranche, DumperVGroupe< T, Dim >::nb_tranches, DumperVGroupe< T, Dim >::output, and UnitsConverter::SetReadUnits().

00071                                     {
00072   UnitsConverter unit;
00073   unit.SetReadUnits(UnitsConverter::AtomsUnits);
00074 
00075 
00076   //  Boule & b = static_cast<Boule &>(*this->geom);
00077   unsigned int couche_index=0;
00078   unsigned int cpt = 0;
00079 
00080   typedef typename Domain::RefDof RefAtom;
00081   typedef typename Domain::ContenerDofs ContenerAtoms;
00082   typedef typename Domain::IteratorDofs IteratorAtoms;
00083 
00084   ContenerAtoms & c = Dumper<Domain,Dim>::dom.getContener();
00085   IteratorAtoms & it = c.GetIterator();
00086   RefAtom at = it.GetFirst();
00087 
00088   memset(nb_par_tranche,0,sizeof(int)*nb_tranches);
00089   memset(deplacements_par_tranche,0,sizeof(double)*nb_tranches);
00090   
00091   at = it.GetFirst();
00092   while (!it.end())
00093     {
00094       double d;
00095       if (Dim == 1)
00096         d = fabs(at.position0(0));
00097       else if (Dim == 2)
00098         d = ipow(at.position0(0),2)+ipow(at.position0(1),2);
00099       else if (Dim == 3)
00100         d = ipow(at.position0(0),2)+ipow(at.position0(1),2)+ipow(at.position0(2),2);
00101 
00102       /* la distance au centre de la boule est utilise pour caracteriser la projection dans l'espace des phases */
00103 
00104       DUMP("le d trouve = " << d,DBG_ALL);
00105       //      d = (d - b.Rmin())/(b.Rmax()-b.Rmin());
00106 
00107       DUMP("le d rapporte dans 0..1 = " << d,DBG_ALL);
00108       /* petit calcul simpliste pour trouver la tranche d'oignon que l'ont veux */
00109       couche_index = static_cast<unsigned int>(nb_tranches*d);
00110       if (Dim == 1) couche_index = cpt;
00111       DUMP("couche_index trouve = " << couche_index,DBG_ALL);
00112 
00113       /* prepare le deplacement */
00114 
00115       double ux = (at.position(0) - at.position0(0))*unit.etalon_metre;
00116       double uy = (at.position(1) - at.position0(1))*unit.etalon_metre;
00117       double uz = (at.position(2) - at.position0(2))*unit.etalon_metre;
00118 
00119       double dep = sqrt(ux*ux+uy*uy+uz*uz);
00120       if (Dim == 1)
00121         dep = ux;
00122       DUMP("deplacement calcule = " << dep,DBG_ALL);
00123       /* on additionne le deplacement de chaque atome dans la couche qui le concerne */
00124       deplacements_par_tranche[couche_index] += dep;
00125       /* on augmente le nombre d'atomes dans la couche - il faudra faire la moyenne a la fin !*/
00126       ++nb_par_tranche[couche_index];
00127       
00128       DUMP("deplacement_par_tranche[" << couche_index << "]= " << deplacements_par_tranche[couche_index],DBG_ALL);
00129       DUMP("nb_par_tranche[" << couche_index << "]= " << nb_par_tranche[couche_index],DBG_ALL);
00130       at = it.GetNext();
00131       ++cpt;
00132     }
00133   
00134   delete &it;
00135   
00136   for (unsigned int k=0;k < nb_tranches;++k)
00137     {
00138       /* on dump directement la moyenne */
00139       if (nb_par_tranche[couche_index] == 0) continue;
00140       DUMP("deplacement_moy_par_tranche[" << couche_index << "]= " << deplacements_par_tranche[k] << "/" << nb_par_tranche[couche_index],DBG_ALL);
00141       fprintf(output[0],"%d\t%d\t%.15e\n",Dumper<Domain,Dim>::dump_step,k+1,deplacements_par_tranche[k]/nb_par_tranche[couche_index]);
00142     }    
00143 }

Here is the call graph for this function:

template<typename Domain, unsigned int Dim>
void DumperVGroupe< Domain, Dim >::Init (  )  [inline, protected, virtual]

initialisation of the dumper internal data

Implements DumperInterface.

Definition at line 55 of file dumper_atom_vgroup.cpp.

References DumperVGroupe< T, Dim >::deplacements_par_tranche, DumperVGroupe< T, Dim >::nb_par_tranche, NB_TRANCHES, DumperVGroupe< T, Dim >::nb_tranches, and DumperVGroupe< T, Dim >::output.

00055                                     {
00056   /* j'initialise les tranches pour la projection */
00057   nb_tranches = NB_TRANCHES;
00058   if (Dim == 1)
00059     nb_tranches = Dumper<Domain,Dim>::dom.getContener().nbElem();
00060   
00061   deplacements_par_tranche = new double[nb_tranches];
00062   nb_par_tranche = new unsigned int[nb_tranches];
00063   
00064   /* je creer le fichier pour le dump de la vitesse de groupe */
00065   char temp[255];
00066   snprintf(temp,255,"%s_vgroupe.plot",Dumper<Domain,Dim>::base_name);
00067   output[0] = fopen(temp,"wb+");    
00068 }

template<typename Domain, unsigned int Dim>
void DumperVGroupe< Domain, Dim >::SetParam ( char *  key,
double  value 
) [inline, protected, virtual]

setting parameters to object that auto configure fields from key/value call

Implements DumperInterface.

Definition at line 50 of file dumper_atom_vgroup.cpp.

00050                                                               {
00051 
00052 }


Member Data Documentation

template<typename T, unsigned int Dim>
double* DumperVGroupe< T, Dim >::deplacements_par_tranche [private]

Definition at line 70 of file dumper_vgroupe.h.

Referenced by DumperVGroupe< T, Dim >::Dump(), and DumperVGroupe< T, Dim >::Init().

template<typename T, unsigned int Dim>
unsigned int* DumperVGroupe< T, Dim >::nb_par_tranche [private]

Definition at line 71 of file dumper_vgroupe.h.

Referenced by DumperVGroupe< T, Dim >::Dump(), and DumperVGroupe< T, Dim >::Init().

template<typename T, unsigned int Dim>
unsigned int DumperVGroupe< T, Dim >::nb_tranches [private]

Definition at line 69 of file dumper_vgroupe.h.

Referenced by DumperVGroupe< T, Dim >::Dump(), and DumperVGroupe< T, Dim >::Init().

template<typename T, unsigned int Dim>
FILE* DumperVGroupe< T, Dim >::output[1] [private]

Definition at line 73 of file dumper_vgroupe.h.

Referenced by DumperVGroupe< T, Dim >::Dump(), and DumperVGroupe< T, Dim >::Init().


The documentation for this class was generated from the following files:
Generated on Fri Sep 7 13:13:15 2007 for LibMultiScale by  doxygen 1.5.2