Changeset 123
- Timestamp:
- 09/27/10 14:01:47 (14 years ago)
- Location:
- XMLIO_V2/dev/dev_rv/src/XMLIO
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp
r122 r123 51 51 timeinfo = localtime ( &rawtime ); 52 52 53 strftime (buffer, 100, "%Y-%b-%d %H:%M:%S %Z",timeinfo);53 strftime (buffer, 100, "%Y-%b-%d %H:%M:%S %Z", timeinfo); 54 54 55 55 return (string(buffer)); … … 141 141 virtual void setVars(void) 142 142 { 143 NcType tvar; 143 144 NcVar *var = NULL; 144 145 Poco::HashMap<string, string> hm; … … 156 157 if (string(field->operation).compare("once") == 0) wtime = false; 157 158 159 tvar = ncFloat; 160 if (field->prec.hasValue()) 161 if (field->prec == 8) tvar = ncDouble; 162 158 163 if (wtime) 159 164 { 160 165 if (lonlat) // 2D spatio + temps 161 166 { 162 if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,167 if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 163 168 dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat")))) 164 169 throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !"); … … 166 171 else // 3D spatio + temps 167 172 { 168 if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,173 if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 169 174 dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat"), 170 175 dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str())))) … … 176 181 if (lonlat) // 2D spatio sans temps 177 182 { 178 if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,183 if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 179 184 dataFile->get_dim("lon"), dataFile->get_dim("lat")))) 180 185 throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !"); … … 182 187 else // 3D spatio sans temps 183 188 { 184 if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,189 if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 185 190 dataFile->get_dim("lon"), dataFile->get_dim("lat"), 186 191 dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str())))) -
XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp
r120 r123 17 17 return (NoLeapMonthLength[d.getMonth()-1]); 18 18 } 19 20 friend std::ostream& operator<<(std::ostream& out, AbstractCalendar& c) 21 { out << "[type: " << c.getId() << ", start: " << c.getInitDate() << ", current: " << c.getCurrentDate() << "]"; return (out); } 19 22 20 23 virtual int getYearTotalLength(const Date& d) const { return (365 * 86400); } // Retourne la durée d'une année en seconde. -
XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp
r122 r123 36 36 AbstractDataTreatment(Context* const _ctxt) : currentContext(_ctxt), enabledFiles() 37 37 { 38 std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl;38 //std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl; 39 39 // Résolution des héritages pour le context actuel (Context::ResolveInheritance() résoud les héritages pour tous les contextes). 40 40 solveAllInheritance(); 41 41 42 42 // Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 43 std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;43 //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl; 44 44 findEnabledFiles(); 45 45 46 46 // Recherche des champs à sortir (enable à true + niveau de sortie correct) pour chaque fichier précédemment listé. 47 std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl;47 //std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl; 48 48 findAllEnabledFields(); 49 49 50 50 // Résolution des références de grilles pour chacun des champs. 51 std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl;51 //std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl; 52 52 solveAllGridRef(); 53 53 54 std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;54 //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl; 55 55 } 56 56 -
XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
r122 r123 8 8 extern "C" void main_c_(void) ; 9 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. 12 template <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.1; 18 called++; 19 } 20 10 21 void main_c_ (void) 11 22 { 12 23 try 13 24 { 14 //string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_test.xml"); 15 //string file("/local/XMLIOSERVER_DEV/dev_rv/iodef_test.xml"); 16 string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); 17 25 Array<double, 3> arr(3, 3, 3) ; // Les données. 26 string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); // Le fichier de définition. 18 27 ifstream istr( file.c_str() , ifstream::in ); 19 28 20 29 // On commence la lecture du flux de donnée xml qui doit posséder pour racine un unique noeud nommé "simulation". 21 30 XMLNode node = XMLNode::CreateNode(istr, Context::GetRootName()); 31 22 32 // On parse le fichier xml noeud par noeud (ie on construit dynamiquement notre arbre d'objets). 23 33 XMLParser::Parse(node); 24 25 // On résoud les héritages descendants ainsi que les héritages par référence.26 //Context::ResolveInheritance(); // Plus nécessaire!!27 34 28 35 // On se place dans le contexte 'context1'. 29 36 Context::SetCurrentContext("context1") ; 30 37 31 std::cout << " * ----------- <<<TOP>>> Début du traitement ----------- * " << std::endl; 38 std::cout << " * ----------- Début du traitement ----------- * " << std::endl; 39 40 //Affichage de la date initiale (pour vérification). 41 std::cout << *Context::GetObject("context1")->getCalendar() << std::endl; 42 32 43 // On crée une instance de traitement de données dans le format NetCDF4. 33 44 AbstractDataTreatment *dtreat = new NetCDF4DataTreatment(Context::GetObject("context1")); 34 35 // Affichage de la liste des fichiers à sortir (par id).36 //dtreat->printEnabledFilesId();37 45 38 46 NetCDF4DataOutput dop(CFile::GetObject("fichier1")); 39 47 dop.createFileAndHeader(); 40 48 41 // On écrit l'arborescence résultante du traitement sur la sortie. 49 for(int tcourant = 0, tfinal = 9; tcourant <= tfinal; tcourant++) 50 { 51 // Mise à jour de la date. 52 53 54 // Mise à jour des données. 55 updateDataTest<Array<double, 3>::iterator>(arr.begin(), arr.end()); 56 57 // Ecriture des données. 58 // dtreat->writeData("Premier_champ", arr); 59 60 } 61 62 // On écrit l'arborescence résultante du traitement sur la sortie de log. 42 63 //Context::ShowTree(std::clog); 43 64 … … 52 73 } 53 74 54 // return (0);75 // return (0); 55 76 } 56 77 57 78 58 /* CODE TEST POUR CALENDRIER59 AbstractCalendar* calendar = new GregorianCalendar();60 61 Date dd (*calendar, 2000, 05, 03, 00, 00, 00) ;62 Date ddd(*calendar, 2030, 11, 02, 10, 33, 40) ;63 64 Date d1 (*calendar, 2007, 11, 12, 00, 00, 00) ;65 Date d2 (*calendar, 2008, 11, 12, 00, 00, 00) ;66 67 string sttr("12/07/2005 - 10:11:30");68 string stttr("111s 14.36 mi 7y 3.9y 3.4 mg");69 Date d3 = Date::FromString(sttr, *calendar);70 71 // Les mois sont considérés comme des entiers mais stockés comme des flottants.72 Duration sc0 = Second * -65.3 + Minute * 117.5 + Hour * 65.9 + Day * 417.8 + Month * 16.0 - Year * 17.5;73 Duration sc1 = Second * 175.3 - Minute * 13109.6 + Hour * 135.1 - Day * 616.4 + Month * 236.0 + Year * 33.9;74 Duration sc2 = 60 * Day;75 76 Duration sc3 = Duration::FromString(stttr);77 78 std::cout << calendar->getInitDate() << std::endl;79 std::cout << calendar->getCurrentDate() << std::endl;80 81 std::cout << boolalpha << (calendar->getInitDate() != calendar->getCurrentDate()) << std::endl;82 83 std::cout << (Time)d2 - (Time)(d1 + 365 * Day) << std::endl;84 std::cout << sc0 << std::endl << sc1 << std::endl << sc1 - sc0 << std::endl;85 std::cout << ddd - dd << std::endl;86 std::cout << dd << std::endl;87 std::cout << (Time)dd << std::endl;88 std::cout << calendar->getNbSecond(dd) << std::endl;89 90 std::cout << (dd+sc2) << std::endl;91 std::cout << (d3) << std::endl;92 93 std::cout << (sc3) << std::endl;94 95 delete calendar;96 */97 -
XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp
r122 r123 94 94 if (attributes.end() != attributes.find("id")) 95 95 { WARNING("Le noeud de définition possÚde un identifiant, ce dernier ne sera pas pris en compte lors du traitement !"); } 96 97 if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date"))98 setCalendar(attributes["calendar_type"], attributes["start_date"]);99 100 96 101 97 if (name.compare(FieldDefinition::GetDefName()) == 0) // Parsing pour la définition des champs. … … 153 149 GridDefinition * getGridDefinition(void) const { return (this->gridDef ); } 154 150 DomainDefinition * getDomainDefinition(void) const { return (this->domainDef); } 151 152 void updateCurrentDate(const Duration* const dr = NULL) 153 { 154 static Duration dur = Hour; 155 if (dr != NULL) dur = *dr; 156 Date newCurrentDate = ccalendar->getCurrentDate() + dur; 157 ccalendar->getCurrentDate() = newCurrentDate; 158 } 155 159 156 160 AbstractCalendar * getCalendar(void) const { return (this->ccalendar ); } -
XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp
r120 r123 15 15 } 16 16 17 Date(const Date& d) : relCalendar(d. relCalendar)17 Date(const Date& d) : relCalendar(d.getRelCalendar()) 18 18 , year(d.year), month(d.month), day(d.day), hour(d.hour), minute(d.minute), second(d.second) 19 19 { 20 20 if(!checkDate()) 21 21 WARNING("La date initialisée a été modifiée car elle était incorrecte par rapport au calendrier souhaité."); 22 } 23 24 Date& operator=(const Date& d) 25 { 26 // relCalendar = d.getRelCalendar(); << inutile si fonction bien utilisée 27 year = d.year; month = d.month; day = d.day; 28 hour = d.hour; minute = d.minute; second = d.second; 29 return (*this); 22 30 } 23 31 -
XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp
r119 r123 26 26 friend std::istream& operator>>(std::istream& in, struct _duration& d) 27 27 { 28 d.year = d.month = d.day = d.hour = d.minute = d.second = 0.0; 28 29 double v = 1.0; 29 30 char c = '/'; … … 77 78 Hour = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0}, 78 79 Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0}, 79 Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}; 80 Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}, 81 NoneDu = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 80 82 81 83 } // namespace XMLIOSERVER -
XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp
r122 r123 15 15 CField(void) : ObjectTemplate<CField>(), FieldAttribut(), grid(NULL) 16 16 {/* Ne rien faire de plus */} 17 CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL) 17 CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL), foper(NULL) 18 18 {/* Ne rien faire de plus */} 19 19 … … 23 23 24 24 const CGrid* getGrid(void) const { return (grid); } 25 const Array<double, 1>& getData(void) const { return (data); } 26 const FieldOperation* getFieldOperation(void) const { return (foper); } 25 27 26 28 virtual CField* getReference(void) const … … 28 30 if(!field_ref.hasValue()) return (NULL); 29 31 if (!CField::HasObject(field_ref)) 30 { WARNING("Référence invalide sur l'objet "+GetName()+" nommé \""+((string)field_ref)+"\""); return (NULL); }32 { WARNING("Référence invalide sur l'objet "+GetName()+" nommé \""+((string)field_ref)+"\""); return (NULL); } 31 33 32 34 return (CField::GetObject(field_ref)); … … 39 41 40 42 CGrid* grid ; 43 FieldOperation* foper; 44 Array<double, 1> data; 41 45 42 46 }; // class CField -
XMLIO_V2/dev/dev_rv/src/XMLIO/file_attribut.hpp
r107 r123 10 10 DECLARE_ATTR(name, string) ; 11 11 DECLARE_ATTR(description, string) ; 12 DECLARE_ATTR(output_freq, int) ;12 DECLARE_ATTR(output_freq, Duration) ; 13 13 DECLARE_ATTR(output_level, int) ; 14 14 DECLARE_ATTR(enabled, bool); -
XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp
r122 r123 44 44 { /* Ne rien faire de plus */ } 45 45 46 47 46 private: 48 47 … … 52 51 CDomain* domain ; 53 52 54 Array<int, 1> storeIndex ;55 Array<int, 1> out_i_index ;56 Array<int, 1> out_j_index ;57 Array<int, 1> out_l_index ;53 Array<int, 1> storeIndex ; 54 Array<int, 1> out_i_index ; 55 Array<int, 1> out_j_index ; 56 Array<int, 1> out_l_index ; 58 57 59 58 }; // class CGrid 60 61 59 62 60 CGrid* CGrid::CreateObject(const CDomain* const a_domain, const CAxis* const a_axis) … … 66 64 67 65 grid->domain_ref = a_domain->getId() ; 68 grid->axis_ref = a_axis->getId() ;66 grid->axis_ref = a_axis ->getId() ; 69 67 70 68 return (grid); -
XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp
r120 r123 37 37 Context& context = *Context::CreateObject(attributes["id"]); 38 38 39 if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date")) 40 context.setCalendar(attributes["calendar_type"], attributes["start_date"]); 41 39 42 context.parse(_node); 40 43 attributes.clear(); -
XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp
r122 r123 40 40 #include "abstract_object.hpp" 41 41 42 // Gestion du calendrier 42 // Gestion du calendrier. 43 43 #include "duration.hpp" 44 44 #include "date.hpp" … … 47 47 #include "calendar_utils.hpp" 48 48 49 // Gestion de l'écriture des données 49 // Gestion de l'écriture des données. 50 50 #include "abstract_data_output.hpp" 51 51 52 //.... 52 53 #include "xml_node.hpp" 53 54 #include "object_template.hpp" … … 59 60 #include "field_attribut.hpp" 60 61 #include "file_attribut.hpp" 62 63 // Traitement des opérations sur les champs 64 #include "field_operation.hpp" 61 65 62 66 #include "group_template.hpp" … … 70 74 #include "file.hpp" 71 75 76 // Résolution des références aux grilles pour les champs. 72 77 #include "field_gridrefsolver.hpp" 73 78 79 //.... 74 80 #include "context.hpp" 75 81 #include "xml_parser.hpp" … … 79 85 #include "NetCDF4_data_output.hpp" 80 86 81 // Traitement des données 87 // Traitement des données (abstract puis selon types de sortie) 82 88 #include "abstract_data_treatment.hpp" 83 89 #include "NetCDF4_data_treatment.hpp"
Note: See TracChangeset
for help on using the changeset viewer.