Changeset 969 for XIOS/trunk/src
- Timestamp:
- 10/13/16 15:48:40 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/domain.cpp
r968 r969 614 614 << "please define the 'type' attribute.") 615 615 } 616 616 617 if (type == type_attr::gaussian) 617 618 { 618 hasPole=true ;619 type.setValue(type_attr::unstructured) ;620 }621 else if (type == type_attr::rectilinear) hasPole=true ;619 hasPole=true ; 620 type.setValue(type_attr::unstructured) ; 621 } 622 else if (type == type_attr::rectilinear) hasPole=true ; 622 623 623 624 if (type == type_attr::unstructured) … … 679 680 } 680 681 681 isDistributed_ = !ibegin.isEmpty() || !ni.isEmpty() || !jbegin.isEmpty() || !nj.isEmpty();682 683 682 checkLocalIDomain(); 684 683 checkLocalJDomain(); … … 699 698 computeNGlobDomain(); 700 699 checkZoom(); 701 } 702 700 701 isDistributed_ = !((!ni.isEmpty() && (ni == ni_glo) && !nj.isEmpty() && (nj == nj_glo)) || 702 (!i_index.isEmpty() && i_index.numElements() == ni_glo*nj_glo)); 703 } 704 705 // Check global zoom of a domain 706 // If there is no zoom defined for the domain, zoom will have value of global doamin 703 707 void CDomain::checkZoom(void) 704 708 { … … 715 719 //---------------------------------------------------------------- 716 720 721 // Check validity of local domain on using the combination of 3 parameters: ibegin, ni and i_index 717 722 void CDomain::checkLocalIDomain(void) 718 723 { 719 if (ibegin.isEmpty() && ni.isEmpty()) 724 // If ibegin and ni are provided then we use them to check the validity of local domain 725 if (i_index.isEmpty() && !ibegin.isEmpty() && !ni.isEmpty()) 726 { 727 if ((ni.getValue() < 0 || ibegin.getValue() < 0) || ((ibegin.getValue() + ni.getValue()) > ni_glo.getValue())) 728 { 729 ERROR("CDomain::checkLocalIDomain(void)", 730 << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 731 << "The local domain is wrongly defined," 732 << " check the attributes 'ni_glo' (" << ni_glo.getValue() << "), 'ni' (" << ni.getValue() << ") and 'ibegin' (" << ibegin.getValue() << ")"); 733 } 734 } 735 736 // i_index has higher priority than ibegin and ni 737 if (!i_index.isEmpty()) 738 { 739 int minIIndex = i_index(0); 740 if (ni.isEmpty()) 741 { 742 // No information about ni 743 int minIndex = ni_glo - 1; 744 int maxIndex = 0; 745 for (int idx = 0; idx < i_index.numElements(); ++idx) 746 { 747 if (i_index(idx) < minIndex) minIndex = i_index(idx); 748 if (i_index(idx) > maxIndex) maxIndex = i_index(idx); 749 } 750 ni = maxIndex - minIndex + 1; 751 minIIndex = minIIndex; 752 } 753 754 // It's not so correct but if ibegin is not the first value of i_index 755 // then data on local domain has user-defined distribution. In this case, ibegin, ni have no meaning. 756 if (ibegin.isEmpty()) ibegin = minIIndex; 757 } 758 else if (ibegin.isEmpty() && ni.isEmpty()) 720 759 { 721 760 ibegin = 0; 722 761 ni = ni_glo; 723 762 } 724 else if (!i_index.isEmpty()) 725 { 726 if (ibegin.isEmpty()) ibegin = i_index(0); 727 if (ni.isEmpty()) ni = i_index.numElements(); 728 } 729 730 if ((ni.getValue() < 0 || ibegin.getValue() < 0) || 731 ((type_attr::unstructured != type) && ((ibegin.getValue() + ni.getValue()) > ni_glo.getValue()))) 763 else 764 { 765 766 ERROR("CDomain::checkLocalIDomain(void)", 767 << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 768 << "The local domain is wrongly defined," 769 << "Either 'ni' or 'ibegin' is not defined. " 770 << "If 'ni' and 'ibegin' are used to define domain, both of them must have assigned values." << endl 771 << "Otherwise, i_index can be used to define domain."); 772 } 773 774 775 if ((ni.getValue() < 0 || ibegin.getValue() < 0)) 732 776 { 733 777 ERROR("CDomain::checkLocalIDomain(void)", … … 738 782 } 739 783 784 // Check validity of local domain on using the combination of 3 parameters: jbegin, nj and j_index 740 785 void CDomain::checkLocalJDomain(void) 741 786 { 742 if (jbegin.isEmpty() && nj.isEmpty()) 787 // If jbegin and nj are provided then we use them to check the validity of local domain 788 if (j_index.isEmpty() && !jbegin.isEmpty() && !nj.isEmpty()) 789 { 790 if ((nj.getValue() < 0 || jbegin.getValue() < 0) || (jbegin.getValue() + nj.getValue()) > nj_glo.getValue()) 791 { 792 ERROR("CDomain::checkLocalJDomain(void)", 793 << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 794 << "The local domain is wrongly defined," 795 << " check the attributes 'nj_glo' (" << nj_glo.getValue() << "), 'nj' (" << nj.getValue() << ") and 'jbegin' (" << jbegin.getValue() << ")"); 796 } 797 } 798 799 if (!j_index.isEmpty()) 800 { 801 int minJIndex = j_index(0); 802 if (nj.isEmpty()) 803 { 804 // No information about nj 805 int minIndex = nj_glo - 1; 806 int maxIndex = 0; 807 for (int idx = 0; idx < j_index.numElements(); ++idx) 808 { 809 if (j_index(idx) < minIndex) minIndex = j_index(idx); 810 if (j_index(idx) > maxIndex) maxIndex = j_index(idx); 811 } 812 nj = maxIndex - minIndex + 1; 813 minJIndex = minIndex; 814 } 815 // It's the same as checkLocalIDomain. It's not so correct but if jbegin is not the first value of j_index 816 // then data on local domain has user-defined distribution. In this case, jbegin has no meaning. 817 if (jbegin.isEmpty()) jbegin = minJIndex; 818 } 819 else if (jbegin.isEmpty() && nj.isEmpty()) 743 820 { 744 821 jbegin = 0; 745 822 nj = nj_glo; 746 } 747 else if (!j_index.isEmpty()) 748 { 749 if (jbegin.isEmpty()) jbegin = j_index(0); 750 if (nj.isEmpty()) nj = j_index.numElements(); 751 } 752 753 if ((nj.getValue() < 0 || jbegin.getValue() < 0) || 754 ((type_attr::unstructured != type) && ((jbegin.getValue() + nj.getValue()) > nj_glo.getValue()))) 755 { 756 ERROR("CDomain::checkLocalJDomain(void)", 823 } 824 825 826 if ((nj.getValue() < 0 || jbegin.getValue() < 0)) 827 { 828 ERROR("CDomain::checkLocalJDomain(void)", 757 829 << "[ id = " << this->getId() << " , context = '" << CObjectFactory::GetCurrentContextId() << " ] " 758 830 << "The local domain is wrongly defined," 759 831 << " check the attributes 'nj_glo' (" << nj_glo.getValue() << "), 'nj' (" << nj.getValue() << ") and 'jbegin' (" << jbegin.getValue() << ")"); 760 832 } 761 833 } 762 834
Note: See TracChangeset
for help on using the changeset viewer.