Changeset 744 for XIOS/trunk/src/node
- Timestamp:
- 10/21/15 11:50:09 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/field.cpp
r742 r744 758 758 { 759 759 ERROR("CField::solveGridReference(void)", 760 << "At least one dimension must be defined for this field."); 761 } 762 763 CDomain* domain; 764 CAxis* axis; 765 std::vector<CDomain*> vecDom; 766 std::vector<CAxis*> vecAxis; 767 std::vector<std::string> domList, axisList; 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 776 if (!domain_ref.isEmpty()) 777 { 778 if (0 != baseFieldRef) 779 { 780 if ((!baseFieldRef->domain_ref.isEmpty()) && (baseFieldRef->domain_ref.getValue() == domain_ref.getValue())) 781 hasDomainFromFieldRef = true; 782 } 783 784 if (CDomain::has(domain_ref.getValue())) 785 { 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 790 vecDom.push_back(domain); 791 } 792 else 760 << "A grid must be defined for field '" << (!name.isEmpty() ? name.getValue() : getId()) << "' ."); 761 } 762 else if (!grid_ref.isEmpty() && (!domain_ref.isEmpty() || !axis_ref.isEmpty())) 763 { 764 ERROR("CField::solveGridReference(void)", 765 << "Field '" << (!name.isEmpty() ? name.getValue() : getId()) << "' has both a grid and a domain/axis." << std::endl 766 << "Please define either 'grid_ref' or 'domain_ref'/'axis_ref'."); 767 } 768 769 if (grid_ref.isEmpty()) 770 { 771 std::vector<CDomain*> vecDom; 772 std::vector<CAxis*> vecAxis; 773 774 if (!domain_ref.isEmpty()) 775 { 776 if (CDomain::has(domain_ref)) 777 vecDom.push_back(CDomain::get(domain_ref)); 778 else 793 779 ERROR("CField::solveGridReference(void)", 794 << "Reference to the domain \'" 795 << domain_ref.getValue() << "\' is wrong"); 796 } 797 798 if (!axis_ref.isEmpty()) 799 { 800 if (0 != baseFieldRef) 801 { 802 if ((!baseFieldRef->axis_ref.isEmpty()) && (baseFieldRef->axis_ref.getValue() == axis_ref.getValue())) 803 hasAxisFromFieldRef = true; 804 } 805 if (CAxis::has(axis_ref.getValue())) 806 { 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 811 vecAxis.push_back(axis); 812 } 813 else 780 << "Invalid reference to domain '" << domain_ref.getValue() << "'."); 781 } 782 783 if (!axis_ref.isEmpty()) 784 { 785 if (CAxis::has(axis_ref)) 786 vecAxis.push_back(CAxis::get(axis_ref)); 787 else 814 788 ERROR("CField::solveGridReference(void)", 815 << "Reference to the axis \'" 816 << axis_ref.getValue() <<"\' is wrong"); 817 } 818 819 if (!grid_ref.isEmpty()) 820 { 821 if (0 != baseFieldRef) 822 { 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())) 830 { 831 this->grid = CGrid::get(grid_ref.getValue()); 832 } 833 else 834 ERROR("CField::solveGridReference(void)", 835 << "Reference to the grid \'" 836 << grid_ref.getValue() << "\' is wrong"); 789 << "Invalid reference to axis '" << axis_ref.getValue() << "'."); 837 790 } 791 792 this->grid = CGrid::createGrid(vecDom, vecAxis); 793 } 794 else 795 { 796 if (CGrid::has(grid_ref)) 797 this->grid = CGrid::get(grid_ref); 838 798 else 839 { 840 this->grid = CGrid::createGrid(vecDom, vecAxis); 841 this->grid_ref.setValue(this->grid->getId()); 842 } 843 } 844 else 845 { 846 this->grid = CGrid::createGrid(vecDom, vecAxis); 847 this->grid_ref.setValue(this->grid->getId()); 799 ERROR("CField::solveGridReference(void)", 800 << "Invalid reference to grid '" << grid_ref.getValue() << "'."); 848 801 } 849 802 }
Note: See TracChangeset
for help on using the changeset viewer.