LandscapeDNDC 1.37.0
Loading...
Searching...
No Matches
synth-airchemistry.h
1
8
9#ifndef LDNDC_DATASYNTH_AIRCHEMISTRY_H_
10#define LDNDC_DATASYNTH_AIRCHEMISTRY_H_
11
12#include "synthesizers/synth-base-streamdata.h"
13#include "airchemistry/airchemistrytypes.h"
14#include "time/cbm_date.h"
15
16
17#define SYNTH_AIRCHEMISTRY_REC_SIZE SYNTH_REC_SIZE_(airchemistry)
18
19#define SYNTH_AIRCHEMISTRY_REC_S_DECL_GET(__reg__,__item__) SYNTH_REC_DECL_GET_(airchemistry,__reg__,s,__item__)
20#define SYNTH_AIRCHEMISTRY_REC_D_DECL_GET(__reg__,__item__) SYNTH_REC_DECL_GET_(airchemistry,__reg__,d,__item__)
21
22#define SYNTH_AIRCHEMISTRY_REC_S_DECL_GET_AND_CHK_VALID(__reg__,__item__) SYNTH_REC_DECL_GET_AND_CHK_VALID_(airchemistry,__reg__,s,__item__)
23#define SYNTH_AIRCHEMISTRY_REC_D_DECL_GET_AND_CHK_VALID(__reg__,__item__) SYNTH_REC_DECL_GET_AND_CHK_VALID_(airchemistry,__reg__,d,__item__)
24
25#define SYNTH_AIRCHEMISTRY_INVALIDATE_BUFFER(__buf__) SYNTH_INVALIDATE_BUFFER_(airchemistry,__buf__)
26
27#define SYNTH_AIRCHEMISTRY_CHK_MATCHING(__item__) SYNTH_CHK_MATCHING_(airchemistry,__item__)
28
29#define SYNTH_AIRCHEMISTRY_CALL_LOOP_TEST_AND_SET(__item__) SYNTH_CALL_LOOP_TEST_AND_SET_(airchemistry,__item__)
30#define SYNTH_AIRCHEMISTRY_RETURN_SUCCESS(__item__) SYNTH_RETURN_SUCCESS_(airchemistry,__item__)
31
32#define SYNTH_AIRCHEMISTRY_RECORD_ITEM_COMMON_DECL(__class__,__item_enum__) SYNTH_RECORD_ITEM_COMMON_DECL_(airchemistry,__class__,__item_enum__)
33
34
35#define NH4_FRAC (0.635)
36#define NO3_FRAC (1.0 - NH4_FRAC)
37
38template < typename, unsigned int >
39class lvector_t;
40
41namespace ldndc{ namespace airchemistry{ namespace synth
42{
43typedef record::item_type record_item_t;
44struct scratch_t : public ldndc::synth::streamdata_scratch_base_t< streamdata_info_t >
45{
46 lerr_t initialize(
47 airchemistry_info_t const * /* boundary info */,
48 ltime_t const * /* input date */,
49 ltime_t const * /* output date */);
50
51 lerr_t configure(
52 airchemistry_info_t const * /* boundary info */,
53 ldate_t const * /* current date */,
54 unsigned int /* current target subday */);
55};
56
57struct CBM_API item_base_t : public ldndc::synth::streamdata_item_base_t< streamdata_info_t, scratch_t >
58{
59};
60
61
62class CBM_API lsynth_airchemistry_t : public ldndc::synth::streamdata_synth_base_t< streamdata_info_t >
63{
64 public:
65 lsynth_airchemistry_t();
66 lsynth_airchemistry_t(
67 airchemistry_info_t const * /* airchemistry meta info */,
68 ltime_t const * /* input date */,
69 ltime_t const * /* output date */);
70
71 virtual ~lsynth_airchemistry_t();
72
77 lerr_t configure(
78 ldate_t const * /* target date */,
79 unsigned int = ldndc::invalid_t< unsigned int >::value /* target subday */);
80
85 lerr_t synthesize_record(
86 record_item_t const * /* subday data buffer (input) */, record_item_t * /* subday data buffer (output) */,
87 record_item_t const * /* day data buffer (input) */, record_item_t * /* day data buffer (output) */,
88
89 ldate_t const * /* current date */,
90
91 lvector_t< unsigned int, 1 > * = NULL /* modification count */);
92
100 lerr_t check_record(
101 record_item_t const * /* subday data buffer (input) */,
102 record_item_t const * /* day data buffer (input) */) const;
103
104 inline
105 unsigned int subday()
106 const
107 {
108 return this->scratch_.subday;
109 }
110
111 inline
112 unsigned int time_resolution_inout()
113 const
114 {
115 return this->scratch_.t_res_inout;
116 }
117
118 private:
119 airchemistry_info_t info_;
120 scratch_t scratch_;
121};
122extern item_base_t const * airchemistry_synthesizers[record::RECORD_SIZE];
123} /* namespace synth */
124} /* namespace airchemistry */
125} /* namespace ldndc */
126
127
128#endif /* !LDNDC_DATASYNTH_AIRCHEMISTRY_H_ */
129
Spatially explicit groundwater model.
Definition airchemistryput.h:15