icedb  version 0.5.1
Snow particle scattering database API
refract.hpp
Go to the documentation of this file.
1 #pragma once
2 #include "../defs.h"
3 
4 #include <complex>
5 #include <functional>
6 #include <iostream>
7 #include <map>
8 #include <string>
9 #include <vector>
10 #include "../units/units.hpp"
11 #include "refractBase.hpp"
12 #include "../optionsForwards.hpp"
13 
14 namespace icedb {
15  namespace refract {
16  struct requirement_s;
17  typedef std::shared_ptr<const requirement_s> requirement_p;
18  struct requirement_s {
19  std::string parameterName;
20  std::string parameterUnits;
22  std::pair<double, double> validRange;
23  static requirement_p generate(
24  const std::string &name, const std::string& units,
25  double low, double high);
26  };
27  struct provider_s;
28  typedef std::shared_ptr<provider_s> provider_mp;
29  typedef std::shared_ptr<const provider_s> provider_p;
30  struct provider_s : public std::enable_shared_from_this<provider_s> {
31  private:
32  provider_s();
33  public:
34  virtual ~provider_s();
35  std::string name;
36  std::string substance;
37  std::string source;
38  std::string notes;
39  std::map<std::string, requirement_p> reqs;
40  provider_mp addReq(const std::string &name, const std::string &units,
41  double low, double high);
42  provider_mp registerFunc(int priority = 0);
43  enum class spt {
44  NONE,
45  FREQ,
46  FREQTEMP,
47  OTHER
48  } speciality_function_type;
50  static provider_mp generate(
51  const std::string &name, const std::string &subst,
52  const std::string &source, const std::string &notes,
53  provider_s::spt sv, void* ptr);
54  };
55  typedef std::multimap<int, provider_p> provider_collection_type;
56  typedef std::shared_ptr<const provider_collection_type > all_providers_p;
57  typedef std::shared_ptr<provider_collection_type > all_providers_mp;
58 
59  typedef std::function<void(double, std::complex<double>&)> refractFunction_freqonly_t;
60  typedef std::function<void(double, double, std::complex<double>&)> refractFunction_freq_temp_t;
61 
62  all_providers_p listAllProviders();
63  all_providers_p listAllProviders(const std::string &subst);
64  void enumProvider(provider_p p, std::ostream &out = std::cerr);
65  void enumProviders(all_providers_p p, std::ostream &out = std::cerr);
66  void enumSubstances(std::ostream &out = std::cerr);
67 
68  provider_p findProviderByName(const std::string &providerName);
69 
70  provider_p findProvider(const std::string &subst,
71  bool haveFreq = true, bool haveTemp = true, const std::string &startAt = "");
72  all_providers_p findProviders(const std::string &subst,
73  bool haveFreq = true, bool haveTemp = true);
74 
75  void prepRefract(provider_p, const std::string &inFreqUnits,
77  void prepRefract(provider_p,
78  const std::string &inFreqUnits, const std::string &inTempUnits,
80 
81 
82  }
83 }
void enumSubstances(std::ostream &out)
Definition: refract.cpp:184
void enumProviders(all_providers_p p, std::ostream &out)
Definition: refract.cpp:175
void enumProvider(provider_p p, std::ostream &out)
Definition: refract.cpp:158
all_providers_p listAllProviders()
Definition: refract.cpp:145
std::function< void(double, double, std::complex< double > &)> refractFunction_freq_temp_t
Definition: refract.hpp:60
std::shared_ptr< const requirement_s > requirement_p
Definition: refract.hpp:16
std::shared_ptr< provider_s > provider_mp
Definition: refract.hpp:27
void prepRefract(provider_p prov, const std::string &inFreqUnits, refractFunction_freqonly_t &res)
Definition: refract.cpp:268
static requirement_p generate(const std::string &name, const std::string &units, double low, double high)
Definition: refract.cpp:134
all_providers_p findProviders(const std::string &subst, bool haveFreq, bool haveTemp)
Definition: refract.cpp:236
std::map< std::string, requirement_p > reqs
Definition: refract.hpp:39
std::shared_ptr< const provider_collection_type > all_providers_p
Definition: refract.hpp:56
std::pair< double, double > validRange
Definition: refract.hpp:22
provider_p findProviderByName(const std::string &providerName)
Definition: refract.cpp:191
provider_p findProvider(const std::string &subst, bool haveFreq, bool haveTemp, const std::string &start)
Definition: refract.cpp:202
std::shared_ptr< const provider_s > provider_p
Definition: refract.hpp:29
std::function< void(double, std::complex< double > &)> refractFunction_freqonly_t
Definition: refract.hpp:59
std::multimap< int, provider_p > provider_collection_type
Definition: refract.hpp:55
std::shared_ptr< provider_collection_type > all_providers_mp
Definition: refract.hpp:57