37 #include "InternalErr.h"
66 if(varname==
"nlayer" && 28 == tnumelm)
67 obtain_gpm_l3_layer(nelms,offset,step,count);
68 else if(varname==
"hgt" && 5 == tnumelm)
69 obtain_gpm_l3_hgt(nelms,offset,step,count);
70 else if(varname==
"nalt" && 5 == tnumelm)
71 obtain_gpm_l3_nalt(nelms,offset,step,count);
78 void HDF5GMCFSpecialCVArray::obtain_gpm_l3_layer(
int nelms,vector<int>&offset,vector<int>&step,vector<int>&count) {
81 vector<float>total_val;
82 total_val.resize(tnumelm);
83 for (
int i = 0; i<20;i++)
84 total_val[i] = 0.5*(i+1);
86 for (
int i = 20; i<28;i++)
87 total_val[i] = total_val[19]+(i-19);
92 if (nelms == tnumelm) {
93 set_value ((dods_float32 *) &total_val[0], nelms);
100 for (
int i = 0; i < nelms; i++)
101 val[i] = total_val[offset[0] + step[0] * i];
102 set_value ((dods_float32 *) &val[0], nelms);
106 void HDF5GMCFSpecialCVArray::obtain_gpm_l3_hgt(
int nelms,vector<int>&offset,vector<int>&step,vector<int>&count) {
109 vector<float>total_val;
120 if (nelms == tnumelm) {
121 set_value ((dods_float32 *) &total_val[0], nelms);
128 for (
int i = 0; i < nelms; i++)
129 val[i] = total_val[offset[0] + step[0] * i];
130 set_value ((dods_float32 *) &val[0], nelms);
134 void HDF5GMCFSpecialCVArray::obtain_gpm_l3_nalt(
int nelms,vector<int>&offset,vector<int>&step,vector<int>&count) {
137 vector<float>total_val;
150 if (nelms == tnumelm) {
151 set_value ((dods_float32 *) &total_val[0], nelms);
158 for (
int i = 0; i < nelms; i++)
159 val[i] = total_val[offset[0] + step[0] * i];
160 set_value ((dods_float32 *) &val[0], nelms);
173 Dim_iter p = dim_begin ();
175 while (p != dim_end ()) {
177 int start = dimension_start (p,
true);
178 int stride = dimension_stride (p,
true);
179 int stop = dimension_stop (p,
true);
183 if (stride < 0 || start < 0 || stop < 0 || start > stop) {
186 oss <<
"Array/Grid hyperslab indices are bad: [" << start <<
187 ":" << stride <<
":" << stop <<
"]";
188 throw Error (malformed_expr, oss.str ());
192 if (start == 0 && stop == 0 && stride == 0) {
193 start = dimension_start (p,
false);
194 stride = dimension_stride (p,
false);
195 stop = dimension_stop (p,
false);
200 count[id] = ((stop - start) / stride) + 1;
204 "=format_constraint():"
205 <<
"id=" <<
id <<
" offset=" << offset[
id]
206 <<
" step=" << step[
id]
207 <<
" count=" << count[
id]
HDF5GMCFSpecialCVArray(H5DataType dtype, int tnumelm, const string &varfullpath, H5GCFProduct product_type, const string &n="", BaseType *v=0)
int format_constraint(int *cor, int *step, int *edg)
This class specifies the retrieval of the missing lat/lon values for general HDF5 products...
virtual BaseType * ptr_duplicate()
#define BESDEBUG(x, y)
macro used to send debug information to the debug stream