source: XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp @ 126

Last change on this file since 126 was 126, checked in by hozdoba, 14 years ago

Amélioration de quelques portions de code.
Ajout de contructeurs par copie.

File size: 3.1 KB
RevLine 
[114]1#include "xmlio.hpp"
2
3using namespace XMLIOSERVER;
[112]4using namespace XMLIOSERVER::XML;
[119]5
[112]6using namespace std;
7
[114]8extern "C" void main_c_(void) ;
[112]9
[123]10// Cette fonction remplit un tableau à N dimensions de valeurs de type T (T = double ou float) de la maniÚre suivante :
11// 0.0 1.0 2.0 3.0, puis 0.1 1.1 2.1 3.1 ... au second appel de la fonction, etc.
12template <class T>
13   static void updateDataTest(T begin, T end)
14{
15   static int called = 0; int i = 0;
16   for (T it = begin; it != end; it++, i++)
[126]17      (*it) = i + called * 0.01;
[123]18   called++;
19}
20
[114]21void main_c_ (void)
22{
23   try
24   {
[126]25      Array<double, 3> arr(100, 100, 20) ; // Initialisation des données (les arguments en fonction des dimensions).
[123]26      string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); // Le fichier de définition.
[114]27      ifstream istr( file.c_str() , ifstream::in );
28
29      // On commence la lecture du flux de donnée xml qui doit posséder pour racine un unique noeud nommé "simulation".
30      XMLNode node = XMLNode::CreateNode(istr, Context::GetRootName());
[123]31
[114]32      // On parse le fichier xml noeud par noeud (ie on construit dynamiquement notre arbre d'objets).
33      XMLParser::Parse(node);
34
[120]35      // On se place dans le contexte 'context1'.
[126]36      Context::SetCurrentContext("context1", true) ;
[120]37
[126]38      std::cout << " * ----------- Début du traitement ----------- * " << std::endl << std::endl;
[123]39
[124]40      {
41         // On crée une instance de traitement de données dans le format NetCDF4.
[126]42         DataTreatment dtreat;
43         dtreat.createDataOutput<NetCDF4DataOutput>();
[123]44
[124]45         // Récupération du calendrier assossié au context courant et initialisation des delais d'écriture.
[126]46         AbstractCalendar* calendar = dtreat.getCurrentContext()->getCalendar();
47         calendar->setTempo(1 * Hour);
[120]48
[126]49         // Affichage de la date initiale (pour vérification).
50         std::cout << "Calendrier associé au contexte : " << *calendar << std::endl << std::endl;
[122]51
[124]52         for(int tcourant = 0, tfinal = 9; tcourant <= tfinal; tcourant++)
53         { /***************************** BOUCLE DE CALCUL *****************************/
[123]54
[124]55            // Mise à jour de la date.
56            calendar->update();
[123]57
[126]58            // Affichage des informations temporelles sur l'itération actuelle.
59            std::cout << "> Itération de calcul effectuée à la date t" << tcourant << " = " << calendar->getCurrentDate()
60                      << " (soit aprÚs " << (Time)calendar->getCurrentDate() << " sec.)." << std::endl;
[123]61
[124]62            // Mise à jour des données.
63            updateDataTest<Array<double, 3>::iterator>(arr.begin(), arr.end());
[123]64
[124]65            // Ecriture des données.
[126]66            dtreat.writeData<Array<double, 3> >("champ1", arr);
[124]67         }
[120]68
[124]69         // On écrit l'arborescence résultante du traitement sur la sortie de log.
[126]70         //Context::ShowTree(std::clog);
[124]71      }
72
[120]73   }
74   catch(const Exception &exc)
75   {  // Pour tout type d'exceptions, on note les informations sur la sortie paramétrée.
76      ERROR(exc.displayText());
77      // On retourne le code d'erreur en fin d'application pour traitements éventuels.
78      // return (exc.code());
79   }
80
[123]81   // return (0);
[120]82}
83
84
Note: See TracBrowser for help on using the repository browser.