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

Last change on this file since 128 was 128, checked in by hozdoba, 14 years ago
File size: 3.4 KB
Line 
1#include "xmlio.hpp"
2
3using namespace XMLIOSERVER;
4using namespace XMLIOSERVER::XML;
5
6using namespace std;
7
8extern "C" void main_c_(void) ;
9
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++)
17      (*it) = i + called * 0.01;
18   called++;
19}
20
21void main_c_ (void)
22{
23   try
24   {
25      Array<double, 3> arr(100, 100, 20) ; // Initialisation des données (les arguments en fonction des dimensions).
26      string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); // Le fichier de définition.
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());
31
32      // On parse le fichier xml noeud par noeud (ie on construit dynamiquement notre arbre d'objets).
33      XMLParser::Parse(node);
34
35      // On se place dans le contexte 'context1'.
36      Context::SetCurrentContext("context1", true) ;
37
38      std::cout << " * ----------- Début du traitement ----------- * " << std::endl << std::endl;
39
40      {
41         // On crée une instance de traitement de données dans le format NetCDF4.
42         DataTreatment dtreat;
43         dtreat.createDataOutput<NetCDF4DataOutput>();
44
45         // Récupération du calendrier assossié au context courant et initialisation des delais d'écriture.
46         AbstractCalendar* calendar = dtreat.getCurrentContext()->getCalendar();
47         calendar->setTimeStep(1 * Hour);
48
49         // Affichage de la date initiale (pour vérification).
50         std::cout << "Calendrier associé au contexte : " << *calendar << std::endl << std::endl;
51
52         for(int tcourant = 0, tfinal = 9; tcourant <= tfinal; tcourant++)
53         { /***************************** BOUCLE DE CALCUL *****************************/
54
55            // Mise à jour de la date.
56            calendar->update();
57
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;
61
62            // Mise à jour des données.
63            updateDataTest<Array<double, 3>::iterator>(arr.begin(), arr.end());
64
65            // Ecriture des données.
66            dtreat.writeData<Array<double, 3> >("champ1", arr);
67         }
68
69         // Ecriture des avertissements obtenus jusqu'à présent.
70         std::cout << std::endl; ILogger::Flush(std::cout);
71
72         /*std::cout << " * ----------- Affichage de l'arborescence ----------- * " << std::endl << std::endl;
73
74         // On écrit l'arborescence résultante du traitement sur la sortie de log.
75         Context::ShowTree(std::clog);
76         std::cout << std::endl;*/
77      }
78
79   }
80   catch(const Exception &exc)
81   {  // Pour tout type d'exceptions, on note les informations sur la sortie paramétrée.
82      ERROR(exc.displayText());
83      // On retourne le code d'erreur en fin d'application pour traitements éventuels.
84      // return (exc.code());
85   }
86
87   // return (0);
88}
89
90
Note: See TracBrowser for help on using the repository browser.