1 /**
2 * Copyright 1981-2016 ECMWF.
3 *
4 * This software is licensed under the terms of the Apache Licence
5 * Version 2.0 which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6 *
7 * In applying this licence, ECMWF does not waive the privileges and immunities
8 * granted to it by virtue of its status as an intergovernmental organisation
9 * nor does it submit to any jurisdiction.
10 */
11 
12 #include "gdecode.h"
13 #include "sencode.h"
14 
15 #include "sencode2.h"
16 
IS2NUMB(gribProduct ** grib,fortint * number)17 fortint IS2NUMB(gribProduct ** grib, fortint * number) {
18 gribProduct * g = *grib;
19 
20   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
21     return (fortint) -1;
22 
23   MOVE1BYTE(((g->g1)->local.contents.def2.number),number);
24   return 0;
25 }
26 
RS2NUMB(gribProduct ** grib,fortdouble * number)27 fortint RS2NUMB(gribProduct ** grib, fortdouble *number) {
28 fortint Number = (fortint) *number;
29   return IS2NUMB(grib,&Number);
30 }
31 
IS2TOTL(gribProduct ** grib,fortint * total)32 fortint IS2TOTL(gribProduct ** grib, fortint * total) {
33 gribProduct * g = *grib;
34 
35   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
36     return (fortint) -1;
37 
38   MOVE1BYTE(((g->g1)->local.contents.def2.total),total);
39   return 0;
40 }
41 
RS2TOTL(gribProduct ** grib,fortdouble * total)42 fortint RS2TOTL(gribProduct ** grib, fortdouble *total) {
43 fortint Total = (fortint) *total;
44   return IS2TOTL(grib,&Total);
45 }
46 
IS2METH(gribProduct ** grib,fortint * method)47 fortint IS2METH(gribProduct ** grib, fortint * method) {
48 gribProduct * g = *grib;
49 
50   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
51     return (fortint) -1;
52 
53   MOVE1BYTE(((g->g1)->local.contents.def2.method),method);
54   return 0;
55 }
56 
RS2METH(gribProduct ** grib,fortdouble * method)57 fortint RS2METH(gribProduct ** grib, fortdouble *method) {
58 fortint Method = (fortint) *method;
59   return IS2METH(grib,&Method);
60 }
61 
IS2STAR(gribProduct ** grib,fortint * startTimestep)62 fortint IS2STAR(gribProduct ** grib, fortint * startTimestep) {
63 gribProduct * g = *grib;
64 
65   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
66     return (fortint) -1;
67 
68   MOVE2BYTES(((g->g1)->local.contents.def2.startTimestep),startTimestep);
69   return 0;
70 }
71 
RS2STAR(gribProduct ** grib,fortdouble * startTimestep)72 fortint RS2STAR(gribProduct ** grib, fortdouble *startTimestep) {
73 fortint StartTimestep = (fortint) *startTimestep;
74   return IS2STAR(grib,&StartTimestep);
75 }
76 
IS2END(gribProduct ** grib,fortint * endTimestep)77 fortint IS2END(gribProduct ** grib, fortint * endTimestep) {
78 gribProduct * g = *grib;
79 
80   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
81     return (fortint) -1;
82 
83   MOVE2BYTES(((g->g1)->local.contents.def2.endTimestep),endTimestep);
84   return 0;
85 }
86 
RS2END(gribProduct ** grib,fortdouble * endTimestep)87 fortint RS2END(gribProduct ** grib, fortdouble *endTimestep) {
88 fortint EndTimestep = (fortint) *endTimestep;
89   return IS2END(grib,&EndTimestep);
90 }
91 
IS2NLAT(gribProduct ** grib,fortint * domainNorthLatitude)92 fortint IS2NLAT(gribProduct ** grib, fortint * domainNorthLatitude) {
93 gribProduct * g = *grib;
94 fortint value = *domainNorthLatitude;
95 
96   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
97     return (fortint) -1;
98 
99   if( value < 0 ) value = 0x800000 | (-value);
100   MOVE3BYTES(((g->g1)->local.contents.def2.domainNorthLatitude),&value);
101   return 0;
102 }
103 
RS2NLAT(gribProduct ** grib,fortdouble * domainNorthLatitude)104 fortint RS2NLAT(gribProduct ** grib, fortdouble *domainNorthLatitude) {
105 fortint DomainNorthLatitude = (fortint) (*domainNorthLatitude*1000.0);
106   return IS2NLAT(grib,&DomainNorthLatitude);
107 }
108 
IS2WLON(gribProduct ** grib,fortint * domainWestLongitude)109 fortint IS2WLON(gribProduct ** grib, fortint * domainWestLongitude) {
110 gribProduct * g = *grib;
111 fortint value = *domainWestLongitude;
112 
113   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
114     return (fortint) -1;
115 
116   if( value < 0 ) value = 0x800000 | (-value);
117   MOVE3BYTES(((g->g1)->local.contents.def2.domainWestLongitude),&value);
118   return 0;
119 }
120 
RS2WLON(gribProduct ** grib,fortdouble * domainWestLongitude)121 fortint RS2WLON(gribProduct ** grib, fortdouble *domainWestLongitude) {
122 fortint DomainWestLongitude = (fortint) (*domainWestLongitude*1000.0);
123   return IS2WLON(grib,&DomainWestLongitude);
124 }
125 
IS2SLAT(gribProduct ** grib,fortint * domainSouthLatitude)126 fortint IS2SLAT(gribProduct ** grib, fortint * domainSouthLatitude) {
127 gribProduct * g = *grib;
128 fortint value = *domainSouthLatitude;
129 
130   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
131     return (fortint) -1;
132 
133   if( value < 0 ) value = 0x800000 | (-value);
134   MOVE3BYTES(((g->g1)->local.contents.def2.domainSouthLatitude),&value);
135   return 0;
136 }
137 
RS2SLAT(gribProduct ** grib,fortdouble * domainSouthLatitude)138 fortint RS2SLAT(gribProduct ** grib, fortdouble *domainSouthLatitude) {
139 fortint DomainSouthLatitude = (fortint) (*domainSouthLatitude*1000.0);
140   return IS2SLAT(grib,&DomainSouthLatitude);
141 }
142 
IS2ELON(gribProduct ** grib,fortint * domainEastLongitude)143 fortint IS2ELON(gribProduct ** grib, fortint * domainEastLongitude) {
144 gribProduct * g = *grib;
145 fortint value = *domainEastLongitude;
146 
147   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
148     return (fortint) -1;
149 
150   if( value < 0 ) value = 0x800000 | (-value);
151   MOVE3BYTES(((g->g1)->local.contents.def2.domainEastLongitude),&value);
152   return 0;
153 }
154 
RS2ELON(gribProduct ** grib,fortdouble * domainEastLongitude)155 fortint RS2ELON(gribProduct ** grib, fortdouble *domainEastLongitude) {
156 fortint DomainEastLongitude = (fortint) (*domainEastLongitude*1000.0);
157   return IS2ELON(grib,&DomainEastLongitude);
158 }
159 
IS2OPCL(gribProduct ** grib,fortint * operationalForecastCluster)160 fortint IS2OPCL(gribProduct ** grib, fortint * operationalForecastCluster) {
161 gribProduct * g = *grib;
162 
163   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
164     return (fortint) -1;
165 
166   MOVE1BYTE(((g->g1)->local.contents.def2.operationalForecastCluster),operationalForecastCluster);
167     return 0;
168 }
169 
RS2OPCL(gribProduct ** grib,fortdouble * operationalForecastCluster)170 fortint RS2OPCL(gribProduct ** grib, fortdouble *operationalForecastCluster) {
171 fortint OperationalForecastCluster = (fortint) *operationalForecastCluster;
172   return IS2OPCL(grib,&OperationalForecastCluster);
173 }
174 
IS2CFCL(gribProduct ** grib,fortint * controlForecastCluster)175 fortint IS2CFCL(gribProduct ** grib, fortint * controlForecastCluster) {
176 gribProduct * g = *grib;
177 
178   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
179     return (fortint) -1;
180 
181   MOVE1BYTE(((g->g1)->local.contents.def2.controlForecastCluster),controlForecastCluster);
182     return 0;
183 }
184 
RS2CFCL(gribProduct ** grib,fortdouble * controlForecastCluster)185 fortint RS2CFCL(gribProduct ** grib, fortdouble *controlForecastCluster) {
186 fortint ControlForecastCluster = (fortint) *controlForecastCluster;
187   return IS2CFCL(grib,&ControlForecastCluster);
188 }
189 
IS2NUCL(gribProduct ** grib,fortint * numberInCluster)190 fortint IS2NUCL(gribProduct ** grib, fortint * numberInCluster) {
191 gribProduct * g = *grib;
192 
193   if( !( ecmwfLocalDefinitionPresent(g) && (g1_definition(g)==2) ) )
194     return (fortint) -1;
195 
196   MOVE1BYTE(((g->g1)->local.contents.def2.numberInCluster),numberInCluster);
197     return 0;
198 }
199 
RS2NUCL(gribProduct ** grib,fortdouble * numberInCluster)200 fortint RS2NUCL(gribProduct ** grib, fortdouble *numberInCluster) {
201 fortint NumberInCluster = (fortint) *numberInCluster;
202   return IS2NUCL(grib,&NumberInCluster);
203 }
204 
IS2LIST(gribProduct ** grib,fortint * array,fortint * size)205 fortint IS2LIST(gribProduct ** grib, fortint * array, fortint * size) {
206 gribProduct * g = *grib;
207 fortint loop, listLength;
208 unsigned char * p;
209 
210   if( !ecmwfLocalDefinition2Present(g) ) return -1;
211 
212   listLength =  g1_2_count(g);
213   if( listLength > *size ) return -1;
214 
215   p = (unsigned char *) ((g->g1)->local.contents.def2.forecastNumberList);
216   for( loop = 0; loop < listLength; loop++ ) {
217     MOVE1BYTE(p,(array+loop));
218     p++;
219   }
220 
221   return listLength;
222 
223 }
224