Changeset 137 for XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp
- Timestamp:
- 11/17/10 14:40:14 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp
r125 r137 11 11 public: 12 12 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() 16 15 { /* Ne rien faire de plus */ } 17 16 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"); } 19 22 static string GetDefName(void) { return (CDomain::GetName()); } 20 23 21 24 inline void check(void) ; 22 25 23 ~CDomain(void) { /* Ne rien faire de plus */ } 26 ~CDomain(void) 27 { /* Ne rien faire de plus */ } 24 28 25 29 }; // class Domain 26 30 27 31 void CDomain::check(void) 28 { 29 //static bool isChecked = false ; 32 { // Recodée en partie le 17/11/10 30 33 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\' !") ; 32 38 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 !") ; 36 51 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()) 39 75 { 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") ; 42 79 } 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); 96 86 } 97 87 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 ; 99 91 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 !") ; 105 97 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; 107 102 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 ; 113 107 114 // Gestion de la compression 115 108 // Gestion de la compression // 116 109 if (data_i_index.hasValue()) 117 110 { 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) 119 118 { 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 !") ; 133 124 } 134 125 } 135 126 else 136 127 { 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") ; 139 131 } 140 //cout<<"data_n_index.hasValue() "<<data_n_index.hasValue()<<endl ; 132 141 133 if (!data_n_index.hasValue()) 142 { 143 if (data_dim ==1)134 { // -> bloc re-vérfié OK 135 if (data_dim == 1) 144 136 { 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) ; 153 144 } 154 else // data_dim=2145 else // (data_dim == 2) 155 146 { 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) ; 173 157 } 174 158 } 175 176 //isChecked = true ;177 159 } 178 160
Note: See TracChangeset
for help on using the changeset viewer.