Next: , Previous: Include files, Up: ncap2 netCDF Arithmetic Processor


4.1.16 sort methods

In ncap there are two ways to sort. The first is a regular sort. This sorts ALL the elements of a variable or attribute without regard to any dimensions. The second method applies a sort map to a variable. To apply this sort map the size of the variable must be exactly divisible by the size of the sort map. The method sort(var_in,&var_map) is overloaded. The second optional argument is a call_by_ref variable which will hold the sort map.

     a1[$time]={10,2,3,4,6,5,7,3,4,1};
     a1_sort=sort(a1);
     print(a1_sort);
     // 1, 2, 3, 3, 4, 4, 5, 6, 7, 10 ;
     
     a2[$lon]={2,1,4,3};
     a2_sort=sort(a2,&a2_map);
     print(a2);
     // 1, 2, 3, 4
     print(a2_map);
     // 1, 0, 3, 2 ;

If the map variable doesn't exist prior to the sort call, then it will be created with the same shape as the input variable and be of type NC_INT. If the map variable already exists, then the only restriction is that it be of at least the same size as the input variable. To apply a map use dsort(var_in,var_map).

     defdim("nlat",5);
     
     a3[$lon]={2,5,3,7};
     a4[$nlat,$lon]={
      1, 2, 3, 4,
      5, 6, 7, 8,
      9,10,11,12,
      13,14,15,16,
      17,18,19,20};
     
     a3_sort=sort(a3,&a3_map);
     
     print(a3_map);
     // 0, 2, 1, 3 ;
     
     a5_sort=dsort(a5,a3_map);
     print(a5_sort);
     //  1, 3, 2, 4,
     //  5, 7, 6, 8,
     //  9,11,10,12,
     //  13,15,14,16,
     //  17,19,18,20 ;
     
     a3_map2[$nlat]={4,3,0,2,1 };
     
     a5_sort2=dsort(a5,a3_map2);
     print(a5_sort2);
     // 3, 5, 4, 2, 1
     // 8, 10, 9,7, 6,
     // 13,15,14,12,11,
     // 18,20,19,17,16

As in the above example you a free to create your own mask. If you wish to sort in decending order then use the reverse() method after the sort.