36 strcpy ( target,
"000" );
38 else if ( r > -0.11 && r < -0.09 )
40 strcpy ( target,
"990" );
44 sprintf ( target,
"99%d", (
int ) ( r * 10.0 + 0.5 ) );
46 else if ( r >= 989.0 )
48 strcpy ( target,
"989" );
52 sprintf ( target,
"%03d", (
int ) ( r + 0.5 ) );
66 if ( r < 0.0 || ( r > 0.0 && r < 0.1 ) )
68 strcpy ( target,
"9999" );
70 else if ( r <= 8899.0 )
72 sprintf ( target,
"%04d", (
int ) ( r + 0.5 ) );
76 strcpy ( target,
"8899" );
89 if ( r < 0.0 || ( r > 0.0 && r < 0.1 ) )
91 strcpy ( target,
"9999" );
93 else if ( r <= 999.8 )
95 sprintf ( target,
"%04d", (
int ) ( r * 10.0 + 0.5 ) );
99 strcpy ( target,
"9998" );
112 sprintf ( target,
"%04d", (
int ) ( r * 10.0 + 0.5 ) );
128 i = ( int ) ( r * 100.0 + 0.5 );
130 i = ( int ) ( r * 100.0 - 0.5 );
132 if ( i > 0 && i <= 996 )
134 sprintf ( target,
"%03d", i );
138 sprintf ( target,
"997" );
142 sprintf ( target,
"998" );
146 sprintf ( target,
"999" );
160 i = ( int ) ( r * 1000.0 + 0.5 );
164 sprintf ( target,
"00" );
168 sprintf ( target,
"97" );
172 sprintf ( target,
"%02d", i + 90 );
176 sprintf ( target,
"%02d", i / 10 );
178 else if ( i <= 4000 )
180 sprintf ( target,
"%02d", 50 + i/100 );
184 sprintf ( target,
"98" );
188 sprintf ( target,
"99" );
218 sprintf ( syn->
s1.
UUU,
"%03d", s->
ival );
225 if (s->
val < -0.11 || s->
val > -0.09)
232 if ( syn->
s3.
RRR[0] == 0 )
234 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 ||
235 strcmp (
"2", syn->
s0.
A1 ) == 0 ||
236 strcmp (
"3", syn->
s0.
A1 ) == 0 ||
237 strcmp (
"4", syn->
s0.
A1 ) == 0 ||
238 strcmp (
"5", syn->
s0.
A1 ) == 0 ||
239 strcmp (
"6", syn->
s0.
A1 ) == 0 )
249 else if ( syn->
s5.
RRR[0] == 0 )
256 else if ( tpd == 7200 )
258 if ( syn->
s1.
RRR[0] == 0 )
260 if ( strcmp (
"6", syn->
s0.
A1 ) )
269 else if ( tpd == 10800 )
271 if ( ( hr % 3 ) == 0 )
273 if ( syn->
s3.
tr[0] ==
'5' )
284 else if ( tpd == ( 6 * 3600 ) )
286 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
288 if ( ( hr % 12 ) == 0 )
295 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
297 if ( ( hr % 3 ) == 0 )
304 else if ( strcmp (
"3", syn->
s0.
A1 ) == 0 )
315 else if ( strcmp (
"4", syn->
s0.
A1 ) == 0 )
317 if ( ( hr % 6 ) == 0 )
324 else if ( strcmp (
"5", syn->
s0.
A1 ) == 0 )
335 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
345 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
356 if ( syn->
s1.
RRR[0] == 0 )
358 if ( ( hr % 6 ) == 0 )
366 else if ( tpd == ( 9 * 3600 ) )
368 if ( syn->
s3.
RRR[0] == 0 )
374 else if ( syn->
s5.
RRR[0] == 0 )
381 else if ( tpd == ( 12 * 3600 ) )
383 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
392 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
394 if ( ( hr % 3 ) == 0 )
401 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
403 if ( ( hr % 12 ) == 6 )
409 else if ( strcmp( syn->
s0.
II,
"08") == 0 && syn->
s0.
iii[0] ==
'5' )
416 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
427 if ( syn->
s1.
RRR[0] == 0 )
429 if ( ( hr % 6 ) == 0 )
435 else if ( ( hr % 3 ) == 0 )
437 if ( syn->
s3.
RRR[0] == 0 )
443 else if ( syn->
s3.
tr[0] ==
'1' ||
444 syn->
s3.
tr[0] ==
'5' )
456 else if ( tpd == ( 15 * 3600 ) )
458 if ( syn->
s3.
RRR[0] == 0 )
464 else if ( syn->
s5.
RRR[0] == 0 )
471 else if ( tpd == ( 18 * 3600 ) )
473 if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
483 else if ( tpd == ( 24 * 3600 ) )
485 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
496 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
501 else if ( strcmp (
"3", syn->
s0.
A1 ) == 0 )
512 else if ( strcmp (
"4", syn->
s0.
A1 ) == 0 )
517 else if ( strcmp (
"5", syn->
s0.
A1 ) == 0 )
528 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
530 if ( strcmp (
"07", syn->
s0.
II ) == 0 )
532 if ( strcmp (
"06", syn->
e.
HH ) == 0 )
544 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
557 if ( syn->
s3.
sss[0] == 0 )
566 if ( syn->
s3.
RRR[0] == 0 )
568 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 ||
569 strcmp (
"2", syn->
s0.
A1 ) == 0 ||
570 strcmp (
"3", syn->
s0.
A1 ) == 0 ||
571 strcmp (
"4", syn->
s0.
A1 ) == 0 ||
572 strcmp (
"5", syn->
s0.
A1 ) == 0 ||
573 strcmp (
"6", syn->
s0.
A1 ) == 0 )
583 else if ( syn->
s5.
RRR[0] == 0 )
593 if ( ( hr % 3 ) == 0 )
595 if ( syn->
s3.
tr[0] ==
'5' )
609 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
611 if ( ( hr % 12 ) == 0 )
618 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
620 if ( ( hr % 3 ) == 0 )
627 else if ( strcmp (
"3", syn->
s0.
A1 ) == 0 )
638 else if ( strcmp (
"4", syn->
s0.
A1 ) == 0 )
640 if ( ( hr % 6 ) == 0 )
647 else if ( strcmp (
"5", syn->
s0.
A1 ) == 0 )
658 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
668 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
678 if ( syn->
s1.
RRR[0] == 0 )
680 if ( ( hr % 6 ) == 0 )
691 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
700 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
702 if ( ( hr % 3 ) == 0 )
709 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
711 if ( ( hr % 12 ) == 6 )
718 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
729 if ( syn->
s1.
RRR[0] == 0 )
731 if ( ( hr % 6 ) == 0 )
737 else if ( ( hr % 3 ) == 0 )
739 if ( syn->
s3.
RRR[0] == 0 )
745 else if ( syn->
s3.
tr[0] ==
'1' ||
746 syn->
s3.
tr[0] ==
'5' )
766 if ( strcmp (
"1", syn->
s0.
A1 ) == 0 )
777 else if ( strcmp (
"2", syn->
s0.
A1 ) == 0 )
782 else if ( strcmp (
"3", syn->
s0.
A1 ) == 0 )
793 else if ( strcmp (
"4", syn->
s0.
A1 ) == 0 )
798 else if ( strcmp (
"5", syn->
s0.
A1 ) == 0 )
809 else if ( strcmp (
"6", syn->
s0.
A1 ) == 0 )
811 if ( strcmp (
"07", syn->
s0.
II ) == 0 )
813 if ( strcmp (
"06", syn->
e.
HH ) == 0 )
825 else if ( strcmp (
"7", syn->
s0.
A1 ) == 0 )
837 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
839 sprintf ( aux,
"%d", s->
ival );
846 if ( strcmp ( syn->
s0.
A1,
"1" ) == 0 )
848 sprintf ( aux,
"%d" , s->
ival );
928 sprintf ( c->
s1.
eee,
"%03d", (
int ) ( s->
val * 0.1 + 0.5 ) );
933 sprintf ( c->
s2.
eee,
"%03d", (
int ) ( s->
val * 0.1 + 0.5 ) );
941 sprintf ( c->
s1.
Rd,
"%d", s->
ival );
949 sprintf ( c->
s4.
yr,
"%02d", s->
day );
953 sprintf ( c->
s4.
yr,
"%02d", (s->
day + 50) % 50 );
Include header file for binary bufr2tac.
int bufr2tac_set_error(struct bufr2tac_subset_state *s, int severity, char *origin, char *explanation)
int time_period_duration(struct bufr2tac_subset_state *s)
Get time period duration in seconds.
int hour_rounded(struct synop_chunks *syn)
Get the rounded hour of a given date.
int syn_parse_x13(struct synop_chunks *syn, struct bufr2tac_subset_state *s)
Parse a expanded descriptor with X = 13.
char * prec_to_RRRR24(char *target, double r)
converts a precipitation in Kg/m2 into a RRRR24 string
char * prec_to_RxRxRxRx(char *target, double r)
converts a precipitation in Kg/m2 into a RxRxRxRx string
char * prec_to_RRRR(char *target, double r)
converts a precipitation in Kg/m2 into a RRRR string (code table 3596)
int buoy_parse_x13(struct buoy_chunks *b, struct bufr2tac_subset_state *s)
Parse a expanded descriptor with X = 13.
int climat_parse_x13(struct climat_chunks *c, struct bufr2tac_subset_state *s)
Parse a expanded descriptor with X = 13.
char * recent_snow_to_ss(char *target, double r)
converts recent snow in m to ss (code table 3870)
char * prec_to_RRR(char *target, double r)
converts a precipitation in Kg/m2 into a RRR string
char * total_snow_depth_to_sss(char *target, double r)
converts tatal snow depth in m to sss (code table 3889)
#define DESCRIPTOR_VALUE_MISSING
Bit mask for a missing value in a struct bufr_atom_data.
#define CLIMAT_SEC4
mask bit meaning section 4 of climat is solicited to or parsed with success
#define CLIMAT_SEC2
mask bit meaning section 2 of climat is solicited to or parsed with success
#define CLIMAT_SEC1
mask bit meaning section 1 of climat is solicited to or parsed with success
#define SYNOP_NMISC
number of misc3 struct to store the parsed results of 9SpSpspsp groups
#define SYNOP_SEC1
mask bit meaning section 1 or synop is solicited to or parsed with success
#define SYNOP_SEC3
mask bit meaning section 3 or synop is solicited to or parsed with success
#define SYNOP_SEC5
mask bit meaning section 5 or synop is solicited to or parsed with success
stores information needed to parse a sequential list of expanded descriptors for a subset
struct bufr_atom_data * a
struct bufr_descriptor desc
contains all possible substrings from a synop report is parsed with success
contains all possible substrings from a synop report is parsed with success
struct misc3 misc[SYNOP_NMISC]
contains all possible substrings from a synop report is parsed with success