15 #include "HDFSPArrayAddCVField.h"
22 #include "InternalErr.h"
29 HDFSPArrayAddCVField::read ()
32 BESDEBUG(
"h4",
"Coming to HDFSPArrayAddCVField read "<<endl);
46 int nelms = format_constraint(&offset[0],&step[0],&count[0]);
48 if(sptype == TRMML3C_V6) {
50 if(dtype != DFNT_FLOAT32) {
51 throw InternalErr (__FILE__, __LINE__,
52 "The Height datatype of TRMM CSH product should be float.");
56 throw InternalErr (__FILE__, __LINE__,
57 "The number of elements should be 19.");
60 vector<float>total_val;
61 total_val.resize(tnumelm);
63 for (
int i = 1; i<tnumelm;i++)
64 total_val[i] = (
float)i;
67 if (nelms == tnumelm) {
68 set_value ((dods_float32 *) &total_val[0], nelms);
75 for (
int i = 0; i < nelms; i++)
76 val[i] = total_val[offset[0] + step[0] * i];
77 set_value ((dods_float32 *) &val[0], nelms);
81 if(sptype == TRMML3S_V7) {
84 if(dtype != DFNT_FLOAT32) {
85 throw InternalErr (__FILE__, __LINE__,
86 "The Height datatype of TRMM CSH product should be float.");
90 Obtain_trmm_v7_layer(nelms,offset,step);
92 Obtain_trmml3s_v7_nthrash(nelms,offset,step);
94 throw InternalErr (__FILE__, __LINE__,
95 "This special coordinate variable is not supported.");
100 if(sptype == TRMML2_V7) {
103 if(dtype != DFNT_FLOAT32) {
104 throw InternalErr (__FILE__, __LINE__,
105 "The Height datatype of TRMM CSH product should be float.");
108 if(tnumelm == 28 && name ==
"nlayer")
109 Obtain_trmm_v7_layer(nelms,offset,step);
111 throw InternalErr (__FILE__, __LINE__,
112 "This special coordinate variable is not supported.");
124 throw InternalErr (__FILE__, __LINE__,
125 "The number of elements should be 19.");
128 vector<float>total_val;
129 total_val.resize(tnumelm);
130 for (
int i = 0; i<20;i++)
131 total_val[i] = 0.5*(i+1);
133 for (
int i = 20; i<28;i++)
134 total_val[i] = total_val[19]+(i-19);
141 if (nelms == tnumelm) {
142 set_value ((dods_float32 *) &total_val[0], nelms);
149 for (
int i = 0; i < nelms; i++)
150 val[i] = total_val[offset[0] + step[0] * i];
151 set_value ((dods_float32 *) &val[0], nelms);
158 void HDFSPArrayAddCVField:: Obtain_trmm_v7_layer(
int nelms, vector<int>&offset,vector<int>&step) {
161 vector<float>total_val;
162 total_val.resize(tnumelm);
163 for (
int i = 0; i<20;i++)
164 total_val[i] = 0.5*(i+1);
166 for (
int i = 20; i<28;i++)
167 total_val[i] = total_val[19]+(i-19);
174 if (nelms == tnumelm) {
175 set_value ((dods_float32 *) &total_val[0], nelms);
182 for (
int i = 0; i < nelms; i++)
183 val[i] = total_val[offset[0] + step[0] * i];
184 set_value ((dods_float32 *) &val[0], nelms);
189 void HDFSPArrayAddCVField:: Obtain_trmml3s_v7_nthrash(
int nelms, vector<int>&offset,vector<int>&step) {
191 vector<float>total_val;
192 total_val.resize(tnumelm);
194 if(name ==
"nthrshZO") {
204 else if (name ==
"nthrshHB") {
211 total_val[5] = 0.9999;
214 else if(name ==
"nthrshSRT") {
225 throw InternalErr (__FILE__, __LINE__,
226 "Unsupported coordinate variable names.");
231 if (nelms == tnumelm) {
232 set_value ((dods_float32 *) &total_val[0], nelms);
239 for (
int i = 0; i < nelms; i++)
240 val[i] = total_val[offset[0] + step[0] * i];
241 set_value ((dods_float32 *) &val[0], nelms);
250 HDFSPArrayAddCVField::format_constraint (
int *offset,
int *step,
int *count)
255 Dim_iter p = dim_begin ();
256 while (p != dim_end ()) {
258 int start = dimension_start (p,
true);
259 int stride = dimension_stride (p,
true);
260 int stop = dimension_stop (p,
true);
265 oss <<
"Array/Grid hyperslab start point "<< start <<
266 " is greater than stop point " << stop <<
".";
267 throw Error(malformed_expr, oss.str());
272 count[id] = ((stop - start) / stride) + 1;
276 "=format_constraint():"
277 <<
"id=" <<
id <<
" offset=" << offset[
id]
278 <<
" step=" << step[
id]
279 <<
" count=" << count[
id]