- Timestamp:
- 10/15/15 15:46:40 (9 years ago)
- Location:
- XIOS/trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/inputs/COMPLETE/context_atmosphere.xml
r636 r742 5 5 <field_definition level="1" enabled=".FALSE." default_value="9.96921e+36"> 6 6 <field id="field_A_atm" name="field_A_atm_origin" operation="average" freq_op="1ts" grid_ref="grid_A_atm" /> 7 <field id="field_A_atm_zoom" name="field_A_atm" operation="average" freq_op="1ts" field_ref="field_A_atm" grid_ref="grid_A_atm_zoom" />7 <field id="field_A_atm_zoom" name="field_A_atm" operation="average" freq_op="1ts" field_ref="field_A_atm" domain_ref="domain_atm_zoom" axis_ref="axis_atm" /> 8 8 </field_definition> 9 9 … … 36 36 <axis axis_ref="axis_atm" /> 37 37 </grid> 38 <grid id="grid_A_atm_zoom">39 <domain domain_ref="domain_atm_zoom" />40 <axis axis_ref="axis_atm_zoom" />41 </grid>42 38 </grid_definition> 43 39 -
XIOS/trunk/inputs/REMAP/iodef.xml
- Property svn:executable set to *
r734 r742 7 7 8 8 <field_definition level="1" > 9 <field id="src_field" operation="instant" grid_ref="src_grid"/> 10 <field id="dst_field" operation="instant" field_ref="src_field" grid_ref="dst_grid"/> 11 <field id="dst_field_regular" operation="instant" field_ref="tmp_field" grid_ref="dst_grid_regular" read_access="true"/> 12 <field id="tmp_field" operation="instant" grid_ref="src_grid_regular"/> 9 <field id="src_field" operation="instant" domain_ref="src_domain"/> 10 <field id="dst_field" operation="instant" field_ref="src_field" domain_ref="dst_domain"/> 11 <field id="tmp_field" operation="instant" domain_ref="src_domain_regular"/> 12 <field id="dst_field_regular_grid" operation="instant" field_ref="tmp_field" grid_ref="dst_grid_regular" read_access="true"/> 13 <field id="dst_field_regular" operation="instant" field_ref="tmp_field" domain_ref="dst_domain_regular" read_access="true"/> 14 13 15 </field_definition> 14 16 … … 18 20 <field field_ref="src_field" name="field" /> 19 21 </file> 20 <file id="output_dst" name="output_dst" >22 <file id="output_dst" name="output_dst" type="one_file"> 21 23 <field field_ref="dst_field" name="field" /> 22 24 </file> 23 25 <file id="output_dst_regular" name="output_dst_regular" type="one_file"> 24 26 <field field_ref="dst_field_regular" name="field" /> 27 <field field_ref="dst_field_regular_grid" name="field_grid" /> 25 28 </file> 26 29 <file id="output_src_regular" name="output_src_regular" mode="read" type="multiple_file"> 27 <field id="src_field_regular" name="field" grid_ref="src_grid_regular" operation="instant"/> 30 <field id="src_field_regular" name="field" domain_ref="src_domain_regular" operation="instant"/> 31 </file> 32 <file id="output_src_regular_tmp" name="output_src_regular_tmp"> 33 <field field_ref="tmp_field"/> 28 34 </file> 29 35 </file_definition> … … 38 44 <interpolate_domain/> 39 45 </domain> 40 <domain id="dst_domain_regular" domain_src="src_domain_regular" ni_glo=" 360" nj_glo="180" type="rectilinear">46 <domain id="dst_domain_regular" domain_src="src_domain_regular" ni_glo="90" nj_glo="45" type="rectilinear"> 41 47 <generate_rectilinear_domain /> 42 48 <interpolate_domain/> … … 48 54 49 55 <grid_definition> 50 <grid id="dst_grid">51 <domain domain_ref="dst_domain" />52 </grid>53 56 <grid id="dst_grid_regular"> 54 57 <domain domain_ref="dst_domain_regular" /> 55 </grid>56 <grid id="src_grid">57 <domain domain_ref="src_domain" />58 </grid>59 <grid id="src_grid_regular">60 <domain domain_ref="src_domain_regular" />61 58 </grid> 62 59 </grid_definition> … … 69 66 <variable id="optimal_buffer_size" type="string">performance</variable> 70 67 <variable id="buffer_size_factor" type="double">30.0</variable> 71 <variable id=" buffer_size_min" type="double">800000</variable>68 <variable id="min_buffer_size" type="double">800000</variable> 72 69 </variable_group> 73 70 -
XIOS/trunk/src/declare_ref_func.hpp
r540 r742 79 79 sset.insert(refer_ptr); \ 80 80 } \ 81 baseRefObject = refer_ptr; \ 82 baseRefObject->addReference(this) ; \ 81 83 \ 82 if (hasDirect##type##Reference()) baseRefObject->addReference(this) ;\84 /* if (hasDirect##type##Reference()) baseRefObject->addReference(this) ;*/ \ 83 85 } \ 84 86 \ -
XIOS/trunk/src/node/axis.cpp
r731 r742 66 66 /*! 67 67 * Test whether the data defined on the axis can be outputted in a compressed way. 68 * 68 * 69 69 * \return true if and only if a mask was defined for this axis 70 70 */ … … 326 326 } 327 327 328 void CAxis::checkAttributesOnClient(const std::vector<int>& globalDim, int orderPositionInGrid, 329 CServerDistributionDescription::ServerDistributionType distType) 328 void CAxis::checkAttributesOnClient() 330 329 { 331 330 if (this->areClientAttributesChecked_) return; … … 340 339 CServerDistributionDescription::ServerDistributionType distType) 341 340 { 342 if (!this->areClientAttributesChecked_) checkAttributesOnClient(globalDim, 343 orderPositionInGrid, 344 distType); 341 if (!this->areClientAttributesChecked_) checkAttributesOnClient(); 345 342 CContext* context = CContext::getCurrent(); 346 343 -
XIOS/trunk/src/node/axis.hpp
r731 r742 102 102 static void recvServerAttribut(CEventServer& event); 103 103 void recvServerAttribut(CBufferIn& buffer) ; 104 void checkAttributesOnClient(const std::vector<int>& globalDim, int orderPositionInGrid, 105 CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION); 104 void checkAttributesOnClient(); 106 105 void sendCheckedAttributes(const std::vector<int>& globalDim, int orderPositionInGrid, 107 106 CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION); -
XIOS/trunk/src/node/field.cpp
r741 r742 755 755 void CField::solveGridReference(void) 756 756 { 757 if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty()) 758 { 759 ERROR("CField::solveGridReference(void)", 760 << "At least one dimension must be defined for this field."); 761 } 762 757 763 CDomain* domain; 758 764 CAxis* axis; … … 761 767 std::vector<std::string> domList, axisList; 762 768 769 // In some cases, domain_ref, axis_ref and grid_ref don't come from the current field but from his direct field_ref 770 // To make sure to use the correct *_ref, we need to compare these values to direct field_ref's 771 CField* baseFieldRef = this->getBaseFieldReference(); 772 bool hasDomainFromFieldRef = false; 773 bool hasAxisFromFieldRef = false; 774 bool hasGridFromFieldRef = false; 775 763 776 if (!domain_ref.isEmpty()) 764 777 { 778 if (0 != baseFieldRef) 779 { 780 if ((!baseFieldRef->domain_ref.isEmpty()) && (baseFieldRef->domain_ref.getValue() == domain_ref.getValue())) 781 hasDomainFromFieldRef = true; 782 } 783 765 784 if (CDomain::has(domain_ref.getValue())) 766 785 { 767 786 domain = CDomain::get(domain_ref.getValue()); 787 // It's a direct reference, so we use this ref as its name 788 domain->name.setValue(domain_ref.getValue()); 789 768 790 vecDom.push_back(domain); 769 791 } … … 776 798 if (!axis_ref.isEmpty()) 777 799 { 800 if (0 != baseFieldRef) 801 { 802 if ((!baseFieldRef->axis_ref.isEmpty()) && (baseFieldRef->axis_ref.getValue() == axis_ref.getValue())) 803 hasAxisFromFieldRef = true; 804 } 778 805 if (CAxis::has(axis_ref.getValue())) 779 806 { 780 807 axis = CAxis::get(axis_ref.getValue()); 808 // It's a direct reference, so we use this ref as its name 809 axis->name.setValue(axis_ref.getValue()); 810 781 811 vecAxis.push_back(axis); 782 812 } … … 789 819 if (!grid_ref.isEmpty()) 790 820 { 791 if ( CGrid::has(grid_ref.getValue()))821 if (0 != baseFieldRef) 792 822 { 793 this->grid = CGrid::get(grid_ref.getValue()); 794 domList = grid->getDomainList(); 795 axisList = grid->getAxisList(); 796 if (domList.empty() && axisList.empty()) 823 if ((!baseFieldRef->grid_ref.isEmpty()) && (baseFieldRef->grid_ref.getValue() == grid_ref.getValue())) 824 hasGridFromFieldRef = true; 825 } 826 827 if ((domain_ref.isEmpty() && axis_ref.isEmpty()) || (!hasGridFromFieldRef)) 828 { 829 if (CGrid::has(grid_ref.getValue())) 797 830 { 798 this->grid = CGrid:: createGrid(vecDom, vecAxis);831 this->grid = CGrid::get(grid_ref.getValue()); 799 832 } 800 } 801 else 802 ERROR("CField::solveGridReference(void)", 803 << "Reference to the grid \'" 804 << grid_ref.getValue() << "\' is wrong"); 833 else 834 ERROR("CField::solveGridReference(void)", 835 << "Reference to the grid \'" 836 << grid_ref.getValue() << "\' is wrong"); 837 } 838 else 839 { 840 this->grid = CGrid::createGrid(vecDom, vecAxis); 841 this->grid_ref.setValue(this->grid->getId()); 842 } 805 843 } 806 844 else 807 845 { 808 846 this->grid = CGrid::createGrid(vecDom, vecAxis); 809 } 810 811 if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty()) 812 { 813 ERROR("CField::solveGridReference(void)", 814 << "At least one dimension must be defined for this field."); 847 this->grid_ref.setValue(this->grid->getId()); 815 848 } 816 849 } -
XIOS/trunk/src/node/grid.cpp
r739 r742 21 21 namespace xios { 22 22 23 /// ////////////////////// D éfinitions ////////////////////// ///23 /// ////////////////////// Dfinitions ////////////////////// /// 24 24 25 25 CGrid::CGrid(void) … … 126 126 } 127 127 } 128 128 129 129 return attributesSizes; 130 130 } … … 342 342 axisListP[i]->sendCheckedAttributes(globalDim_,axisPositionInGrid_[i]); 343 343 else 344 axisListP[i]->checkAttributesOnClient( globalDim_,axisPositionInGrid_[i]);344 axisListP[i]->checkAttributesOnClient(); 345 345 ++idx; 346 346 } … … 500 500 } 501 501 502 grid->computeGridGlobalDimension(domains, axis, grid->axis_domain_order); 502 503 grid->solveDomainAxisRefInheritance(true); 503 504 504 505 return grid; … … 1307 1308 if (isDomListSet) return; 1308 1309 std::vector<CDomain*> domList = this->getVirtualDomainGroup()->getAllChildren(); 1309 if (!domains.empty() && domList.empty()) domList = domains; 1310 if (!domains.empty() && domList.empty()) 1311 { 1312 for (int i = 0; i < domains.size(); ++i) 1313 this->getVirtualDomainGroup()->addChild(domains[i]); 1314 domList = this->getVirtualDomainGroup()->getAllChildren(); 1315 } 1316 1310 1317 if (!domList.empty()) 1311 1318 { … … 1329 1336 if (isAxisListSet) return; 1330 1337 std::vector<CAxis*> aList = this->getVirtualAxisGroup()->getAllChildren(); 1331 if (!axis.empty() && aList.empty()) aList = axis; 1338 if (!axis.empty() && aList.empty()) 1339 { 1340 for (int i = 0; i < axis.size(); ++i) 1341 this->getVirtualAxisGroup()->addChild(axis[i]); 1342 aList = this->getVirtualAxisGroup()->getAllChildren(); 1343 } 1344 1332 1345 if (!aList.empty()) 1333 1346 { -
XIOS/trunk/src/node/grid.hpp
r731 r742 202 202 void modifyMask(const CArray<int,1>& indexToModify); 203 203 204 void computeGridGlobalDimension(const std::vector<CDomain*>& domains, 205 const std::vector<CAxis*>& axis, 206 const CArray<bool,1>& axisDomainOrder); 207 204 208 private: 205 209 template<int N> … … 218 222 void setAxisList(const std::vector<CAxis*> axis = std::vector<CAxis*>()); 219 223 void setDomainList(const std::vector<CDomain*> domains = std::vector<CDomain*>()); 220 221 void computeGridGlobalDimension(const std::vector<CDomain*>& domains,222 const std::vector<CAxis*>& axis,223 const CArray<bool,1>& axisDomainOrder);224 224 225 225 CDomain* addDomain(const std::string& id); -
XIOS/trunk/src/test/test_remap.f90
r734 r742 119 119 bounds_lon_1D=dst_boundslon, bounds_lat_1D=dst_boundslat, nvertex=dst_nvertex) 120 120 121 ! CALL xios_set_domain_attr("dst_domain_regular", type="rectilinear")122 123 124 121 ALLOCATE(tmp_field(180*90/2)) 125 122 dtime%second = 3600 -
XIOS/trunk/src/transformation/grid_transformation.cpp
r734 r742 46 46 { 47 47 CAxis* axis = CAxis::createAxis(); 48 axis->setAttributes(axisSrcTmp[idx]); 48 axis->axis_ref.setValue(axisSrcTmp[idx]->getId()); 49 axis->solveRefInheritance(true); 50 axis->solveInheritanceTransformation(); 51 axis->checkAttributesOnClient(); 49 52 axisSrc.push_back(axis); 50 53 } … … 53 56 { 54 57 CDomain* domain = CDomain::createDomain(); 55 domain->setAttributes(domainSrcTmp[idx]); 58 domain->domain_ref.setValue(domainSrcTmp[idx]->getId()); 59 domain->solveRefInheritance(true); 56 60 domain->solveInheritanceTransformation(); 57 61 domain->checkAttributesOnClient(); … … 60 64 61 65 gridSource_ = CGrid::createGrid(domainSrc, axisSrc, gridDestination_->axis_domain_order); 66 gridSource_->computeGridGlobalDimension(domainSrc, axisSrc, gridDestination_->axis_domain_order); 62 67 63 68 initializeMappingOfOriginalGridSource();
Note: See TracChangeset
for help on using the changeset viewer.