Ignore:
Timestamp:
11/17/10 14:40:14 (14 years ago)
Author:
hozdoba
Message:

mise à jour

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp

    r125 r137  
    1111      public: 
    1212 
    13          CDomain(void) : ObjectTemplate<CDomain>(), DomainAttribut() 
    14          { /* Ne rien faire de plus */ } 
    15          CDomain(const string& _id) : ObjectTemplate<CDomain>(_id), DomainAttribut() 
     13         CDomain(void) 
     14            : ObjectTemplate<CDomain>(), DomainAttribut() 
    1615         { /* Ne rien faire de plus */ } 
    1716 
    18          static string GetName(void) {return ("domain"); } 
     17         CDomain(const string& _id) 
     18            : ObjectTemplate<CDomain>(_id), DomainAttribut() 
     19         { /* Ne rien faire de plus */ } 
     20 
     21         static string GetName(void)    { return ("domain"); } 
    1922         static string GetDefName(void) { return (CDomain::GetName()); } 
    2023 
    2124         inline void check(void) ; 
    2225 
    23          ~CDomain(void) { /* Ne rien faire de plus */ } 
     26         ~CDomain(void) 
     27         { /* Ne rien faire de plus */ } 
    2428 
    2529   }; // class Domain 
    2630 
    2731   void CDomain::check(void) 
    28    { 
    29       //static bool isChecked = false ; 
     32   { // Recodée en partie le 17/11/10 
    3033 
    31       //if (isChecked) return; // Si la vérification a été faite, on arrête tout. 
     34      // Domaine global // 
     35      if ((!ni_glo.hasValue() || ni_glo <= 0 ) || 
     36          (!nj_glo.hasValue() || nj_glo <= 0 )) 
     37        ERROR("Le domaine global est mal défini, vérifiez les valeurs de \'ni_glo\' et \'nj_glo\' !") ; 
    3238 
    33       // domaine global 
    34       if (!ni_glo.hasValue() || ni_glo<=0 ) throw XMLIOSERVER::XMLIOUndefinedValueException("domaine global mal defini") ; 
    35       if (!nj_glo.hasValue() || nj_glo<=0 ) throw XMLIOSERVER::XMLIOUndefinedValueException("domaine global mal defini") ; 
     39      // Domaine local en i // 
     40      if (ni.hasValue() && ibegin.hasValue() && !iend.hasValue()) 
     41         iend = ibegin + ni - 1 ; 
     42      else if (ni.hasValue() && iend.hasValue() && !ibegin.hasValue()) 
     43         ibegin = ni - iend + 1 ; 
     44      else if (ibegin.hasValue() && iend.hasValue() && !ni.hasValue()) 
     45         ni = iend - ibegin - 1 ; 
     46      else if (ibegin.hasValue() && iend.hasValue() && 
     47               ni.hasValue() && (iend != ibegin + ni - 1)) 
     48         ERROR("Le domaine est mal défini, iend est différent de (ibegin + ni - 1) !") ; 
     49      else 
     50         ERROR("Le domaine est mal défini, deux valeurs au moins parmis iend, ibegin, ni doivent être définies !") ; 
    3651 
    37       //domaine local en i 
    38       if ( ni.hasValue() && ibegin.hasValue()) 
     52      if (ni < 0 || ibegin > iend || 
     53          ibegin < 1 || iend > ni_glo) 
     54         ERROR("Domaine local mal défini, vérifiez les valeurs ni, ni_glo, ibegin, iend") ; 
     55 
     56      // Domaine local en j // 
     57      if (nj.hasValue() && jbegin.hasValue() && !jend.hasValue()) 
     58         jend = jbegin + nj - 1 ; 
     59      else if (nj.hasValue() && jend.hasValue() && !jbegin.hasValue()) 
     60         jbegin = nj - jend + 1 ; 
     61      else if (jbegin.hasValue() && jend.hasValue() && !nj.hasValue()) 
     62         nj = jend - jbegin - 1 ; 
     63      else if (jbegin.hasValue() && jend.hasValue() && 
     64               nj.hasValue() && (jend != jbegin + nj - 1)) 
     65         ERROR("Le domaine est mal défini, jend est différent de (jbegin + nj - 1) !") ; 
     66      else 
     67         ERROR("Le domaine est mal défini, deux valeurs au moins parmis jend, jbegin, nj doivent être définjes !") ; 
     68 
     69      if (nj < 0 || jbegin > jend || 
     70          jbegin < 1 || jend > nj_glo) 
     71         ERROR("Domaine local mal défini, vérifiez les valeurs nj, nj_glo, jbegin, jend") ; 
     72 
     73      // Masque de domaine // 
     74      if (mask.hasValue()) 
    3975      { 
    40          if (iend.hasValue() && iend!=ibegin+ni-1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 1") ; 
    41          iend = ibegin + ni - 1 ; 
     76         if ((mask->extent(0) != ni) || 
     77             (mask->extent(1) != nj)) 
     78            ERROR("Le masque n'a pas la même taille que le domaine local") ; 
    4279      } 
    43       else if (ni.hasValue() && iend.hasValue()) 
    44       { 
    45          if (ibegin != ni-iend+1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 2") ; 
    46          ibegin = ni - iend + 1 ; 
    47       } 
    48       else if (ibegin.hasValue() && iend.hasValue()) 
    49       { 
    50          if (ni!=iend-ibegin-1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 3") ; 
    51          ni = iend - ibegin - 1 ; 
    52       } 
    53       else throw XMLIOSERVER::XMLIOUndefinedValueException("domain local non défini 4") ; 
    54  
    55       if (ni<0 || ibegin>iend || ibegin<1 || iend>ni_glo) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 5") ; 
    56  
    57       //domaine local en j 
    58       if ( nj.hasValue() && jbegin.hasValue()) 
    59       { 
    60          if (jend.hasValue() && jend!=jbegin+nj-1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 6") ; 
    61          jend = jbegin + nj - 1 ; 
    62       } 
    63       else if (nj.hasValue() && jend.hasValue()) 
    64       { 
    65          if (jbegin!=nj-jend+1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 7") ; 
    66          jbegin = nj - jend + 1 ; 
    67       } 
    68       else if (jbegin.hasValue() && jend.hasValue()) 
    69       { 
    70          if (nj!=jend-jbegin-1) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 8") ; 
    71          nj = jend - jbegin - 1 ; 
    72       } 
    73       else throw XMLIOSERVER::XMLIOUndefinedValueException("domain local non défini 9") ; 
    74  
    75       if (nj<0 || jbegin>jend || jbegin<1 || jend>nj_glo) throw XMLIOSERVER::XMLIOUndefinedValueException("domain local mal défini 10") ; 
    76  
    77       //cout<<"mask ni "<<mask->extent(0)<<" nj "<<mask->extent(1)<<"  "<<mask<<endl ; 
    78       if (mask.hasValue()) 
    79          if (mask->extent(0) != ni || mask->extent(1) != nj) 
    80             throw XMLIOSERVER::XMLIOUndefinedValueException("le champ mask n'a pas la même taille que le domaine local") ; 
    81  
    82       if (data_dim.hasValue()) 
    83       { 
    84          if (!(data_dim==1 || data_dim==2)) throw XMLIOSERVER::XMLIOUndefinedValueException("dimension non comptatible (doit être 1 ou 2)") ; 
    85       } 
    86       else throw XMLIOSERVER::XMLIOUndefinedValueException("Dimension des donnée non définie") ; 
    87  
    88       if (data_ni.hasValue()) 
    89       { 
    90          if (data_ni<=0) throw XMLIOSERVER::XMLIOUndefinedValueException("Dimension des données négative") ; 
    91       } 
    92       else 
    93       { 
    94          if (data_dim==1) data_ni=ni*nj ; 
    95          else data_ni=(int) ni ; 
     80      else // (!mask.hasValue()) 
     81      { // Si aucun masque n'est défini, on en crée un nouveau qui valide l'intégralité du domaine. 
     82         Array<bool, 2> __arr(shape(ni, nj)); 
     83         __arr = true ; 
     84         mask->resize(shape(ni,nj)) ; 
     85         this->set_mask(__arr); 
    9686      } 
    9787 
    98       if (!data_ibegin.hasValue()) data_ibegin=0 ; 
     88      // Données du domaine // 
     89      if (!data_jbegin.hasValue()) data_jbegin = 0 ; 
     90      if (!data_ibegin.hasValue()) data_ibegin = 0 ; 
    9991 
    100       if (data_nj.hasValue()) 
    101       { 
    102          if (data_nj<=0) throw XMLIOSERVER::XMLIOUndefinedValueException("Dimension des données négative") ; 
    103       } 
    104       else data_nj=(int) nj ; 
     92      if (data_dim.hasValue() && 
     93        !(data_dim==1 || data_dim==2)) 
     94         ERROR("Dimension des données non comptatible (doit être 1 ou 2) !") ; 
     95      else if (! data_dim.hasValue()) 
     96         ERROR("Dimension des données non définie !") ; 
    10597 
    106       if (!data_jbegin.hasValue()) data_jbegin=0 ; 
     98      if (data_ni.hasValue() && (data_ni <= 0)) 
     99         ERROR("Dimension des données négative (data_ni).") ; 
     100      else if (!data_ni.hasValue()) 
     101         data_ni = (data_dim == 1) ? (ni * nj) : (int) ni; 
    107102 
    108       if (!mask.hasValue()) 
    109       { // Si aucun masque n'est défini, on en crée un nouveau qui valide l'intégralité du domaine. 
    110          mask->resize(shape(ni,nj)) ; 
    111          *mask=true ; 
    112       } 
     103      if (data_nj.hasValue() && (data_nj <= 0)) 
     104         ERROR("Dimension des données négative (data_nj).") ; 
     105      else if (!data_nj.hasValue()) 
     106         data_nj = (int) nj ; 
    113107 
    114       // Gestion de la compression 
    115  
     108      // Gestion de la compression // 
    116109      if (data_i_index.hasValue()) 
    117110      { 
    118          if (data_n_index.hasValue()) 
     111         if (data_n_index.hasValue() && 
     112            (data_n_index != data_i_index->extent(0))) 
     113            ERROR("Dimension data_i_index incompatible avec data_n_index.") ; 
     114         else if (!data_n_index.hasValue()) 
     115            data_n_index = data_i_index->extent(0) ; 
     116 
     117         if (data_dim == 2) 
    119118         { 
    120             if (data_n_index!=data_i_index->extent(0)) 
    121                throw XMLIOSERVER::XMLIOUndefinedValueException("Dimension data_i_index incompatible avec data_n_index") ; 
    122          } 
    123          else data_n_index=data_i_index->extent(0) ; 
    124  
    125          if (data_dim==2) 
    126          { 
    127             if (data_j_index.hasValue()) 
    128             { 
    129                if (data_j_index->extent(0)!=data_i_index->extent(0)) 
    130                   throw XMLIOSERVER::XMLIOUndefinedValueException("Dimension data_j_index incompatible avec data_i_index") ; 
    131             } 
    132             else throw XMLIOSERVER::XMLIOUndefinedValueException("data_j_index non défini") ; 
     119            if (data_j_index.hasValue() && 
     120               (data_j_index->extent(0) != data_i_index->extent(0))) 
     121               ERROR("Dimension data_j_index incompatible avec data_i_index.") ; 
     122            else if (!data_j_index.hasValue()) 
     123               ERROR("La donnée data_j_index doit être renseignée !") ; 
    133124         } 
    134125      } 
    135126      else 
    136127      { 
    137          if (data_n_index.hasValue() || (data_dim==2 && data_j_index.hasValue())) 
    138             throw XMLIOSERVER::XMLIOUndefinedValueException("data_i_index non défini") ; 
     128         if (data_n_index.hasValue() || 
     129            ((data_dim == 2) && (data_j_index.hasValue()))) 
     130            ERROR("data_i_index non défini") ; 
    139131      } 
    140       //cout<<"data_n_index.hasValue() "<<data_n_index.hasValue()<<endl ; 
     132 
    141133      if (!data_n_index.hasValue()) 
    142       { 
    143          if (data_dim==1) 
     134      { // -> bloc re-vérfié OK 
     135         if (data_dim == 1) 
    144136         { 
    145             int i ; 
    146             data_n_index=*data_ni ; 
    147             //cout <<"data_n_index "<<data_n_index<<"  "<<data_ni<<" "<<data_nj<<endl ; 
    148  
    149             data_i_index->resize(data_n_index) ; 
    150  
    151             for (i=0;i<data_ni;i++) (*data_i_index)(i)=i ; 
    152             //cout <<"data_i_index "<<*data_i_index<<endl ; 
     137            const int dni = data_ni; 
     138            Array<int, 1> __arri(shape(dni)); 
     139            this->set_data_n_index(dni) ; 
     140            for (int i = 0; i < dni; i++) 
     141               __arri(i) = i+1 ; 
     142            data_i_index->resize(dni) ; 
     143            this->set_data_i_index(__arri) ; 
    153144         } 
    154          else   // data_dim=2 
     145         else   // (data_dim == 2) 
    155146         { 
    156             int i ; 
    157             int j ; 
    158             int count ; 
    159  
    160             data_n_index = data_ni * data_nj ; 
    161             data_i_index -> resize(data_n_index) ; 
    162             data_j_index -> resize(data_n_index) ; 
    163             for(count=0,i=0; i<data_ni;i++) 
    164                for(j=0; j<data_nj;j++) 
    165                { 
    166                   (*data_i_index)(count)=i ; 
    167                  // cout<<count<<"  "<<(*data_i_index)(count)<<endl ; 
    168                   (*data_j_index)(count)=j ; 
    169                   //cout<<count<<"  "<<(*data_j_index)(count)<<endl ; 
    170                   count++ ; 
    171                } 
    172                //cout<<data_ni<<" "<<data_nj<<" "<<data_n_index<<" "<<*data_i_index<<" "<<*data_j_index<<endl ; 
     147            const int dni = data_ni * data_nj; 
     148            Array<int, 1> __arri(shape(dni)), __arrj(shape(dni)); 
     149            this->set_data_n_index(dni) ; 
     150            for(int count = 0, i = 0; i  <data_ni; i++) 
     151               for(int j = 0; j < data_nj; j++, count++) 
     152               { __arri(count) = i+1 ;  __arrj(count) = j+1 ; } 
     153            data_i_index -> resize(dni) ; 
     154            data_j_index -> resize(dni) ; 
     155            this->set_data_i_index(__arri) ; 
     156            this->set_data_j_index(__arrj) ; 
    173157         } 
    174158      } 
    175  
    176       //isChecked = true ; 
    177159   } 
    178160 
Note: See TracChangeset for help on using the changeset viewer.