10#ifndef WATERCYCLE_CMFCOLUMN_SOLUTES_H_
11#define WATERCYCLE_CMFCOLUMN_SOLUTES_H_
13#include "watercycle/cmfcolumn/cmfcolumn-config.h"
15#include <input/groundwater/groundwater.h>
16#include <comm/cbm_msg.h>
18namespace cmf {
namespace water {
24class WaterCycleCMFColumn;
27 cmf::water::solute
const * cmf_solute;
41struct LDNDC_API CMFColumnSolutesTransportBase
43 virtual ~CMFColumnSolutesTransportBase() {}
44 virtual char model()
const = 0;
45 virtual int link( WaterCycleCMFColumn *) = 0;
46 virtual int publish_solute_buffers(
47 char const * , cbm::reply_t *) {
return 0; }
48 virtual int publish_fluxscale_buffer( cbm::reply_t *) {
return 0; }
49 virtual bool need_integratables()
const {
return false; }
50 virtual void biogeochem_to_hydro(
51 int , cbm::reply_t *) = 0;
52 virtual void hydro_to_biogeochem(
53 int , cbm::reply_t *) = 0;
55 virtual void set_groundwaternitrate(
56 groundwater::input_class_groundwater_t
const *)
68struct LDNDC_API CMFColumnSolutesTransportNone
69 :
public CMFColumnSolutesTransportBase
71 virtual ~CMFColumnSolutesTransportNone() {}
72 char model()
const {
return 'N'; }
74 int link( WaterCycleCMFColumn *) {
return 0; }
75 void biogeochem_to_hydro(
76 int , cbm::reply_t * _reply) { _reply->resend = 0; }
77 void hydro_to_biogeochem(
78 int , cbm::reply_t * _reply) { _reply->resend = 0; }
81struct LDNDC_API CMFColumnSolutesTransportCoupled
82 :
public CMFColumnSolutesTransportBase
84 virtual ~CMFColumnSolutesTransportCoupled() {}
85 char model()
const {
return 'C'; }
87 int link( WaterCycleCMFColumn *);
88 void biogeochem_to_hydro(
int , cbm::reply_t *);
89 void hydro_to_biogeochem(
int , cbm::reply_t *);
91 std::vector< CMFColumnSolute > solutes;
93 void update_biogeochem();
96 void set_groundwaternitrate(
97 groundwater::input_class_groundwater_t
const *);
99struct LDNDC_API CMFColumnSolutesTransportWaterflux
100 :
public CMFColumnSolutesTransportBase
102 virtual ~CMFColumnSolutesTransportWaterflux() {}
103 char model()
const {
return 'W'; }
107 std::shared_ptr< cmf::upslope::Cell > cell;
109 cmf::upslope::Cell
const * cell;
111 std::vector< double const * > solutes;
112 double const * flux_scale;
115 std::vector< neighbor_t > neighbors;
125#ifdef CMFCOLUMN_HAVE_SURFACETRANSPORT
130 std::vector< solute_t > solutes;
134 int link( WaterCycleCMFColumn *);
135 int publish_solute_buffers(
136 char const * , cbm::reply_t *);
137 int publish_fluxscale_buffer( cbm::reply_t *);
138 bool need_integratables()
const {
return true; }
139 void biogeochem_to_hydro(
int , cbm::reply_t *);
140 void hydro_to_biogeochem(
int , cbm::reply_t *);
142 void storewatervolumes();
143 void fluxcorrection();
145 void update_biogeochem();
Spatially explicit groundwater model.
Definition: airchemistryput.h:15