Ignore:
Timestamp:
05/03/11 11:55:06 (13 years ago)
Author:
hozdoba
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/xmlio/node/domain.cpp

    r185 r187  
    55#include "group_template_impl.hpp" 
    66 
     7#include "mpi_manager.hpp" 
     8 
    79#include <algorithm> 
    810 
     
    1416   CDomain::CDomain(void) 
    1517      : CObjectTemplate<CDomain>(), CDomainAttributes() 
    16       , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[10][10])), relFiles() 
     18      , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])), relFiles() 
    1719      , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 
    1820      , lonvalue_sub(), latvalue_sub() 
     
    2123   CDomain::CDomain(const StdString & id) 
    2224      : CObjectTemplate<CDomain>(id), CDomainAttributes() 
    23       , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[10][10])), relFiles() 
     25      , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])), relFiles() 
    2426      , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub() 
    2527      , lonvalue_sub(), latvalue_sub() 
     
    124126          (ni_glo.isEmpty() || nj_glo.getValue() <= 0 )) 
    125127         ERROR("CDomain::checkAttributes(void)", 
     128               << "[ Id = " << this->getId() << " ] " 
    126129               << "Le domaine global est mal défini," 
    127130               << " vérifiez les valeurs de \'ni_glo\' et \'nj_glo\' !") ; 
     
    159162          ibegin.getValue() < 1 || iend.getValue() > ni_glo.getValue()) 
    160163         ERROR("CDomain::checkAttributes(void)", 
     164               << "[ Id = " << this->getId() << " ] " 
    161165               << "Domaine local mal défini," 
    162166               << " vérifiez les valeurs ni, ni_glo, ibegin, iend") ; 
     
    294298         data_ibegin.setValue(0) ; 
    295299      if (data_jbegin.isEmpty() && (data_dim.getValue() == 2)) 
    296            data_jbegin.setValue(0) ; 
     300         data_jbegin.setValue(0) ; 
    297301 
    298302      if (!data_ni.isEmpty() && (data_ni.getValue() <= 0)) 
     
    398402   void CDomain::completeLonLat(void) 
    399403   { 
    400       //ARRAY_CREATE(value, valuetype, numdims, extent)// todo 
    401       //ARRAY_CREATE(value, valuetype, numdims, extent) 
     404      ARRAY_CREATE(lonvalue_temp, double, 1, [0]); 
     405      ARRAY_CREATE(latvalue_temp, double, 1, [0]); 
     406       
     407      const int ibegin_serv  = ibegin.getValue(), 
     408                jbegin_serv  = jbegin.getValue(), 
     409                zoom_ni_serv = zoom_ni_loc.getValue(), 
     410                zoom_nj_serv = zoom_nj_loc.getValue(); 
     411                       
     412      /*std::cout << "Rang du serveur :" << comm::CMPIManager::GetCommRank()   << std::endl 
     413                << "Begin serv : "     << ibegin_serv << ", " << jbegin_serv <<  std::endl 
     414                << "End serv : "       << iend_serv   << ", " << jend_serv   <<  std::endl 
     415                << "Zoom_loc begin : " << zoom_ibegin_loc << ", " << zoom_jbegin_loc <<  std::endl 
     416                << "Zoom_loc size : "  << zoom_ni_loc << ", " << zoom_nj_loc <<  std::endl;*/ 
     417       
    402418       
    403419      ARRAY(double, 1) lonvalue_ = this->lonvalue.getValue(), 
     
    406422      if (this->data_dim.getValue() == 2) 
    407423      { 
     424         StdSize dm = zoom_ni_serv * zoom_nj_serv; 
    408425         StdSize dn = this->ni.getValue() * this->nj.getValue(); 
     426          
    409427         lonvalue_->resize(boost::extents[dn]); 
    410428         latvalue_->resize(boost::extents[dn]); 
    411  
    412          for (StdSize k = 0; k < lonvalue_sub.size(); k++) 
    413          { 
    414             int l = 0; 
    415             ARRAY(double, 1) lonvalue_loc = this->lonvalue_sub[k], 
    416                              latvalue_loc = this->latvalue_sub[k]; 
    417             const int ibegin_loc = ibegin_sub[k], iend_loc = iend_sub[k], 
    418                       jbegin_loc = jbegin_sub[k], jend_loc = jend_sub[k]; 
    419                                                                   
    420             for (int i = ibegin_loc-1; i <= (iend_loc-1); i++) 
    421             { 
    422                for (int j = jbegin_loc-1; j <= (jend_loc-1); j++) 
    423                { 
    424                   (*lonvalue_)[i+j*this->ni.getValue()] = (*lonvalue_loc)[l];               
    425                   (*latvalue_)[i+j*this->ni.getValue()] = (*latvalue_loc)[l++]; 
    426                } 
    427             } 
    428          }    
    429       } 
    430       else 
    431       { 
    432          StdSize dn = this->ni.getValue(); 
    433          lonvalue_->resize(boost::extents[dn]); 
    434          latvalue_->resize(boost::extents[dn]); 
     429         lonvalue_temp->resize(boost::extents[dm]); 
     430         latvalue_temp->resize(boost::extents[dm]); 
    435431          
    436432         for (StdSize k = 0; k < lonvalue_sub.size(); k++) 
     
    442438                      jbegin_loc = jbegin_sub[k], jend_loc = jend_sub[k]; 
    443439                       
    444             for (int i = ibegin_loc-1; i <= (iend_loc-1); i++) 
     440            for (int i = ibegin_loc - ibegin_serv; i < (iend_loc - ibegin_serv + 1); i++) 
     441            { 
     442               for (int j = jbegin_loc - jbegin_serv; j < (jend_loc - jbegin_serv + 1); j++) 
     443               { 
     444                  (*lonvalue_)[i + j * this->ni.getValue()] = (*lonvalue_loc)[l];               
     445                  (*latvalue_)[i + j * this->ni.getValue()] = (*latvalue_loc)[l++]; 
     446               } 
     447            } 
     448         } 
     449         this->lonvalue.setValue(lonvalue_temp); 
     450         this->latvalue.setValue(latvalue_temp); 
     451      } 
     452      else 
     453      { 
     454         lonvalue_->resize(boost::extents[this->ni.getValue()]); 
     455         latvalue_->resize(boost::extents[this->nj.getValue()]); 
     456         lonvalue_temp->resize(boost::extents[zoom_ni_serv]); 
     457         latvalue_temp->resize(boost::extents[zoom_nj_serv]); 
     458          
     459         for (StdSize k = 0; k < lonvalue_sub.size(); k++) 
     460         { 
     461            int l = 0; 
     462            ARRAY(double, 1) lonvalue_loc = this->lonvalue_sub[k], 
     463                             latvalue_loc = this->latvalue_sub[k]; 
     464            const int ibegin_loc = ibegin_sub[k], iend_loc = iend_sub[k], 
     465                      jbegin_loc = jbegin_sub[k], jend_loc = jend_sub[k]; 
     466                       
     467            for (int i = ibegin_loc - ibegin_serv; i < (iend_loc - ibegin_loc + 1); i++) 
    445468               (*lonvalue_)[i] = (*lonvalue_loc)[l++]; 
    446469                
    447             for (int j = jbegin_loc-1, l = 0; j <= (jend_loc-1); j++) 
     470            for (int j = jbegin_loc - jbegin_serv; j < (jend_loc - jbegin_loc + 1); j++) 
    448471               (*latvalue_)[j] = (*latvalue_loc)[l++]; 
    449          }          
     472         }        
     473         this->lonvalue.setValue(lonvalue_temp); 
     474         this->latvalue.setValue(latvalue_temp); 
    450475      } 
    451476   } 
     
    551576      else 
    552577      { // CÃŽté serveur uniquement 
    553          this->completeLonLat(); 
     578         if (!this->isEmpty()) 
     579            this->completeLonLat(); 
    554580      } 
    555581      this->completeMask(); 
Note: See TracChangeset for help on using the changeset viewer.