52 const Vector& pnd_agenda_input_t,
53 const Matrix& pnd_agenda_input,
57 const Index& species_index,
67 pnd_agenda_input_names,
80 const Vector& pnd_agenda_input_t,
81 const Matrix& pnd_agenda_input,
85 const Index& species_index,
95 pnd_agenda_input_names,
112 const Vector& psd_size_grid,
113 const Vector& pnd_agenda_input_t,
114 const Matrix& pnd_agenda_input,
130 "The number of columns in *pnd_agenda_input* must "
131 "be 0, 1, 2, 3 or 4.");
140 "This PSD has four free parameters. This means that "
141 "the number\nof columns in *pnd_agenda_input* and the "
142 "number of numerics\n(i.e. non-NaN) and among "
143 "the GIN arguments n0, mu, la and\nga must add up to "
144 "four. And this was found not to be the case.");
154 mgd_i_pai[0] = nhit++;
159 mgd_i_pai[1] = nhit++;
164 mgd_i_pai[2] = nhit++;
169 mgd_i_pai[3] = nhit++;
183 for (
Index i = 0; i < ndx; i++) {
184 for (
Index j = 0; j < 4; j++) {
185 if (dx2in[i] == mgd_i_pai[j]) {
194 for (
Index ip = 0; ip < np; ip++) {
196 for (
Index i = 0; i < 4; i++) {
197 if (mgd_i_pai[i] >= 0) {
198 mgd_pars[i] = pnd_agenda_input(ip, mgd_i_pai[i]);
201 Numeric t = pnd_agenda_input_t[ip];
204 if ((mgd_pars[0] == 0.) && (!ndx)) {
209 if (t < t_min || t > t_max) {
211 "Method called with a temperature of ", t,
" K.\n"
212 "This is outside the specified allowed range: [ max(0.,", t_min,
220 "Bad MGD parameter detected: la <= 0");
222 "Bad MGD parameter detected: ga <= 0");
239 for (
Index i = 0; i < 4; i++) {
241 dpsd_data_dx(mgd_i_jac[i], ip,
joker) = jac_data(i,
joker);
250 const Vector& psd_size_grid,
251 const Vector& pnd_agenda_input_t,
252 const Matrix& pnd_agenda_input,
270 "The number of columns in *pnd_agenda_input* must "
273 "*scat_species_a* should be > 0.");
275 "*scat_species_b* should be > 0 and < 5.");
284 "One (but only one) of n0, mu, la and ga must be NaN, "
285 "to flag that this parameter is the one dependent of "
288 "Sorry, mu and la are not yet allowed to be the "
289 "dependent parameter.");
297 "This PSD has four free parameters. This means that "
298 "the number\nof columns in *pnd_agenda_input* and the "
299 "number of numerics\n(i.e. not -999 or NaN) and among "
300 "the GIN arguments n0, mu, la and\nga must add up to "
301 "four. And this was found not to be the case.");
304 Vector mgd_pars(4), ext_pars(1);
311 }
else if (!n0_depend) {
312 mgd_i_pai[0] = nhit++;
316 }
else if (!mu_depend) {
317 mgd_i_pai[1] = nhit++;
321 }
else if (!la_depend) {
322 mgd_i_pai[2] = nhit++;
326 }
else if (!ga_depend) {
327 mgd_i_pai[3] = nhit++;
343 for (
Index i = 0; i < ndx; i++) {
350 for (
Index j = 0; j < 4; j++) {
351 if (dx2in[i] == mgd_i_pai[j]) {
361 for (
Index ip = 0; ip < np; ip++) {
363 ext_pars[0] = pnd_agenda_input(ip, ext_i_pai[0]);
365 for (
Index i = 0; i < 4; i++) {
366 if (mgd_i_pai[i] >= 0) {
367 mgd_pars[i] = pnd_agenda_input(ip, mgd_i_pai[i]);
370 Numeric t = pnd_agenda_input_t[ip];
373 if ((ext_pars[0] == 0.) && (!ndx)) {
378 if (t < t_min || t > t_max) {
380 "Method called with a temperature of ", t,
" K.\n"
381 "This is outside the specified allowed range: [ max(0.,", t_min,
389 Numeric mub1 = 0, eterm = 0, scfac = 0;
392 mub1 = mgd_pars[1] + scat_species_b + 1;
393 eterm = mub1 / mgd_pars[3];
394 scfac = (mgd_pars[3] *
pow(mgd_pars[2], eterm)) /
395 (scat_species_a * tgamma(eterm));
396 mgd_pars[0] = scfac * ext_pars[0];
397 }
else if (la_depend) {
399 "The mass content must be > 0 when la is "
400 "the dependent parameter.");
401 mub1 = mgd_pars[1] + scat_species_b + 1;
402 eterm = mub1 / mgd_pars[3];
403 scfac = mgd_pars[3] / (scat_species_a * mgd_pars[0] * tgamma(eterm));
404 scfac =
pow(scfac, -1 / eterm);
405 mgd_pars[2] = scfac *
pow(ext_pars[0], -1 / eterm);
413 "Bad MGD parameter detected: mu + b + 1 <= 0");
415 "Bad MGD parameter detected: la <= 0");
417 "Bad MGD parameter detected: ga <= 0");
428 (
bool)mgd_do_jac[0] || n0_depend,
429 (
bool)mgd_do_jac[1] || mu_depend,
430 (
bool)mgd_do_jac[2] || la_depend,
431 (
bool)mgd_do_jac[3] || ga_depend);
436 dpsd_data_dx(ext_i_jac[0], ip,
joker) = jac_data(0,
joker);
437 dpsd_data_dx(ext_i_jac[0], ip,
joker) *= scfac;
438 }
else if (la_depend) {
439 dpsd_data_dx(ext_i_jac[0], ip,
joker) = jac_data(2,
joker);
440 dpsd_data_dx(ext_i_jac[0], ip,
joker) *=
441 scfac * (-1 / eterm) *
pow(ext_pars[0], -(1 / eterm + 1));
448 for (
Index i = 0; i < 4; i++) {
450 dpsd_data_dx(mgd_i_jac[i], ip,
joker) = jac_data(i,
joker);
459 const Vector& psd_size_grid,
460 const Vector& pnd_agenda_input_t,
461 const Matrix& pnd_agenda_input,
480 pnd_agenda_input_names,
497 const Vector& psd_size_grid,
498 const Vector& pnd_agenda_input_t,
499 const Matrix& pnd_agenda_input,
514 "mean particle mass",
518 pnd_agenda_input_names,
535 const Vector& psd_size_grid,
536 const Vector& pnd_agenda_input_t,
537 const Matrix& pnd_agenda_input,
556 pnd_agenda_input_names,
573 const Vector& psd_size_grid,
574 const Vector& pnd_agenda_input_t,
575 const Matrix& pnd_agenda_input,
594 pnd_agenda_input_names,
612 const Vector& psd_size_grid,
613 const Vector& pnd_agenda_input_t,
614 const Matrix& pnd_agenda_input,
633 pnd_agenda_input_names,
654 const Vector& psd_size_grid,
655 const Vector& pnd_agenda_input_t,
656 const Matrix& pnd_agenda_input,
675 "The number of columns in *pnd_agenda_input* must "
679 const bool n0_depend = (
Index)n0 == -999;
680 const bool dm_depend = (
Index)dm == -999;
681 const bool iwc_depend = (
Index)iwc == -999;
684 const bool iwc_fixed = !(
std::isnan(iwc)) && !iwc_depend;
685 const bool n0_fixed = !(
std::isnan(n0)) && !n0_depend;
686 const bool dm_fixed = !(
std::isnan(dm)) && !dm_depend;
689 (nin + iwc_fixed + n0_fixed + dm_fixed == 1)),
690 "This PSD can have one or two independent parameters, that is \n"
691 "the sum of the number of columns in pnd_agenda_input and\n"
692 "non-NAN, non-dependent values in iwc, n0, dm must be equal to\n"
699 if ((n0_depend || dm_depend) && (!iwc_fixed)) {
703 if ((!n0_depend) && (!n0_fixed)) {
707 if ((!dm_depend) && (!dm_fixed)) {
715 for (
Index i = 0; i < ndx; ++i) {
716 for (
Index j = 0; j < 3; ++j) {
717 if (dx2in[i] == i_pai[j]) {
725 if (psd_size_grid[0] < std::numeric_limits<Numeric>::epsilon()) {
727 "psd_size_grid has only one element which is 0. This is not allowed.");
730 Numeric iwc_p(0.0), n0_p(0.0), dm_p(0.0);
732 for (
Index ip = 0; ip < np; ip++) {
733 Numeric t = pnd_agenda_input_t[ip];
737 iwc_p = pnd_agenda_input(ip, i_pai[0]);
740 n0_p = pnd_agenda_input(ip, i_pai[1]);
743 dm_p = pnd_agenda_input(ip, i_pai[2]);
746 if (n0_depend && dm_depend) {
749 }
else if (n0_depend) {
751 }
else if (dm_depend) {
756 if ((t < t_min) || (t > t_max)) {
758 "Method called with a temperature of ", t,
" K.\n"
759 "This is outside the specified allowed range: [ max(0.,", t_min,
766 "The provided or inferred value of *Dm* (", dm_p,
") is "
767 " less than zero or *Dm_min* and this is not allowed. "
768 "This means that you have very small or zero values "
769 "in *pnd_agenda_input* which is not supported "
775 Vector x_grid(psd_size_grid);
776 x_grid *= 1.0 / dm_p;
778 if (x_grid[0] < std::numeric_limits<Numeric>::epsilon()) {
779 x_grid[0] = 0.1 * psd_size_grid[1];
783 psd_data(ip,
joker), jac_data, x_grid, alpha,
beta);
784 psd_data(ip,
joker) *= n0_p;
785 jac_data(0,
joker) *= n0_p;
789 dndn0 *= (1.0 / n0_p);
792 dxddm *= (-1.0 / dm_p);
793 Numeric dn0diwc = n0_p / iwc_p;
796 dpsd_data_dx(i_jac[0], ip,
joker) = 0.0;
799 Numeric ddmdiwc = 0.25 * dm_p / iwc_p;
803 dpsd_data_dx(i_jac[0], ip,
joker) += dndiwc;
804 }
else if (n0_depend) {
807 dpsd_data_dx(i_jac[0], ip,
joker) += dndiwc;
812 dpsd_data_dx(i_jac[1], ip,
joker) = dndn0;
816 Numeric ddmdn0 = -0.25 / n0_p * dm_p;
818 dpsd_data_dx(i_jac[1], ip,
joker) += dndn02;
823 dpsd_data_dx(i_jac[2], ip,
joker) = dxddm;
824 dpsd_data_dx(i_jac[2], ip,
joker) *= dndx;
827 Numeric dn0ddm = -4.0 * n0_p / dm_p;
829 dpsd_data_dx(i_jac[2], ip,
joker) += dndn02;
834 if ((!iwc_depend) && (iwc_p == 0.0)) {
835 psd_data(0,
joker) = 0.0;
836 for (
size_t i = 0; i < 2; ++i) {
838 dpsd_data_dx(i_jac[i], ip,
joker) = 0.0;
848 const Vector& psd_size_grid,
849 const Vector& pnd_agenda_input_t,
850 const Matrix& pnd_agenda_input,
869 "*pnd_agenda_input* must have one column.");
871 "regime must either be \"TR\" or \"ML\".");
873 "*scat_species_a* should be > 0.");
875 "Method called with a mass-dimension-relation exponent b of ",
876 scat_species_b,
".\n"
877 "This is outside the specified allowed range: [", b_min,
",",
880 for (
Index ip = 0; ip < np; ip++) {
882 Numeric swc = pnd_agenda_input(ip, 0);
883 Numeric t = pnd_agenda_input_t[ip];
887 if (
abs(swc) < 1e-15) {
892 if ((swc == 0.) && (!ndx)) {
897 if (t < t_min || t > t_max) {
899 "Method called with a temperature of ", t,
" K.\n"
900 "This is outside the specified allowed range: [ max(0.,", t_min,
909 }
else if (t > t_max_psd) {
930 for (
Index i = 0; i < nsi; i++) {
931 psd_data(ip, i) = psd_weight * psd_1p[i];
939 const Numeric swcp = swc + dswc;
947 for (
Index i = 0; i < nsi; i++) {
948 dpsd_data_dx(0, ip, i) = (psd_1p[i] - psd_data(ip, i)) / dswc;
957 const Vector& psd_size_grid,
958 const Vector& pnd_agenda_input_t,
959 const Matrix& pnd_agenda_input,
976 "*pnd_agenda_input* must have one column.");
978 "Jacobian calculations and \"noisy\" can not be "
981 "This PSD treats pure ice, using Dveq as size grid.\n"
982 "This means that *scat_species_b* should be close to 3,\n"
983 "but it is outside of the tolerated range of [2.9,3.1].\n"
984 "Your value of *scat_species_b* is: ", scat_species_b)
986 "This PSD treats pure ice, using Dveq as size grid.\n"
987 "This means that *scat_species_a* should be close to 480,\n"
988 "but it is outside of the tolerated range of [460,500].\n"
989 "Your value of *scat_species_a* is: ", scat_species_a)
991 for (
Index ip = 0; ip < np; ip++) {
993 Numeric iwc = pnd_agenda_input(ip, 0);
994 Numeric t = pnd_agenda_input_t[ip];
997 if ((iwc == 0.) && (!ndx)) {
1002 if (t < t_min || t > t_max) {
1004 "Method called with a temperature of ", t,
" K.\n"
1005 "This is outside the specified allowed range: [ max(0.,", t_min,
1012 if (t < t_min_psd) {
1014 }
else if (t > t_max_psd) {
1029 for (
Index i = 0; i < nsi; i++) {
1030 psd_data(ip, i) = psd_weight * psd_1p[i];
1038 const Numeric iwcp = iwc + diwc;
1040 for (
Index i = 0; i < nsi; i++) {
1041 dpsd_data_dx(0, ip, i) = (psd_1p[i] - psd_data(ip, i)) / diwc;
1054 const Vector& psd_size_grid,
1055 const Vector& pnd_agenda_input_t,
1056 const Matrix& pnd_agenda_input,
1059 const Numeric& scat_species_a,
1060 const Numeric& scat_species_b,
1071 pnd_agenda_input_names,
1088 const Vector& psd_size_grid,
1089 const Vector& pnd_agenda_input_t,
1090 const Matrix& pnd_agenda_input,
1093 const Numeric& scat_species_a,
1094 const Numeric& scat_species_b,
1105 pnd_agenda_input_names,
1126 const Vector& psd_size_grid,
1127 const Vector& pnd_agenda_input_t,
1128 const Matrix& pnd_agenda_input,
1131 const Numeric& scat_species_a,
1132 const Numeric& scat_species_b,
1143 pnd_agenda_input_names,
1164 const Vector& psd_size_grid,
1165 const Vector& pnd_agenda_input_t,
1166 const Matrix& pnd_agenda_input,
1169 const String& hydrometeor_type,
1175 const Index nin = pnd_agenda_input_names.
nelem();
1176 const Index ndx = dpnd_data_dx_names.
nelem();
1182 "Length of *pnd_agenda_input_names* and number of "
1183 "columns in *pnd_agenda_input* must be equal.");
1185 "*pnd_agenda_input* must have two columns"
1186 "(mass density and number density).");
1189 "*dpnd_data_dx_names* must have length <=2.");
1194 for (
Index i = 0; i < nin; i++) {
1197 }
else if ((
Index)pnd_agenda_input_names[i].find(
"number_density") !=
1204 "mass_density-tag not found ");
1206 "number_density-tag not found ");
1211 for (
Index i = 0; i < ndx; i++) {
1213 dpnd_data_dx_idx[0] = i;
1214 }
else if ((
Index)dpnd_data_dx_names[i].find(
"number_density") !=
1216 dpnd_data_dx_idx[1] = i;
1221 psd_data.
resize(np, nsi);
1224 dpsd_data_dx.
resize(ndx, np, nsi);
1227 dpsd_data_dx.
resize(0, 0, 0);
1230 for (
Index ip = 0; ip < np; ip++) {
1232 Numeric WC = pnd_agenda_input(ip, input_idx[0]);
1233 Numeric N_tot = pnd_agenda_input(ip, input_idx[1]);
1234 Numeric t = pnd_agenda_input_t[ip];
1237 if ((WC == 0.) && (!ndx)) {
1242 if (t < t_min || t > t_max) {
1244 "Method called with a temperature of ", t,
" K.\n"
1245 "This is outside the specified allowed range: [ max(0.,", t_min,
1262 psd_SB06(psd_1p, dpsd_1p, psd_size_grid, N_tot, WC, hydrometeor_type);
1264 for (
Index i = 0; i < nsi; i++) {
1265 psd_data(ip, i) = psd_weight * psd_1p[i];
1267 for (
Index idx = 0; idx < dpnd_data_dx_idx.
nelem(); idx++) {
1270 if (dpnd_data_dx_idx[idx] != -1) {
1271 dpsd_data_dx(dpnd_data_dx_idx[idx], ip, i) =
1272 psd_weight * dpsd_1p(i, idx);
1283 const Vector& psd_size_grid,
1284 const Vector& pnd_agenda_input_t,
1285 const Matrix& pnd_agenda_input,
1288 const String& hydrometeor_type,
1294 const Index nin = pnd_agenda_input_names.
nelem();
1295 const Index ndx = dpnd_data_dx_names.
nelem();
1301 "Length of *pnd_agenda_input_names* and number of "
1302 "columns in *pnd_agenda_input* must be equal.");
1304 "*pnd_agenda_input* must have two columns"
1305 "(mass density and number density).");
1308 "*dpnd_data_dx_names* must have length <=2.");
1313 for (
Index i = 0; i < nin; i++) {
1316 }
else if ((
Index)pnd_agenda_input_names[i].find(
"number_density") !=
1323 "mass_density-tag not found ");
1325 "number_density-tag not found ");
1330 for (
Index i = 0; i < ndx; i++) {
1332 dpnd_data_dx_idx[0] = i;
1333 }
else if ((
Index)dpnd_data_dx_names[i].find(
"number_density") !=
1335 dpnd_data_dx_idx[1] = i;
1340 psd_data.
resize(np, nsi);
1343 dpsd_data_dx.
resize(ndx, np, nsi);
1346 dpsd_data_dx.
resize(0, 0, 0);
1349 for (
Index ip = 0; ip < np; ip++) {
1351 Numeric WC = pnd_agenda_input(ip, input_idx[0]);
1352 Numeric N_tot = pnd_agenda_input(ip, input_idx[1]);
1353 Numeric t = pnd_agenda_input_t[ip];
1356 if ((WC == 0.) && (!ndx)) {
1361 if (t < t_min || t > t_max) {
1363 "Method called with a temperature of ", t,
" K.\n"
1364 "This is outside the specified allowed range: [ max(0.,", t_min,
1381 psd_MY05(psd_1p, dpsd_1p, psd_size_grid, N_tot, WC, hydrometeor_type);
1383 for (
Index i = 0; i < nsi; i++) {
1384 psd_data(ip, i) = psd_weight * psd_1p[i];
1386 for (
Index idx = 0; idx < dpnd_data_dx_idx.
nelem(); idx++) {
1389 if (dpnd_data_dx_idx[idx] != -1) {
1390 dpsd_data_dx(dpnd_data_dx_idx[idx], ip, i) =
1391 psd_weight * dpsd_1p(i, idx);
This file contains the definition of Array.
The global header file for ARTS.
Index nelem() const ARTS_NOEXCEPT
Index nrows() const noexcept
Index ncols() const noexcept
Index nelem() const noexcept
Returns the number of elements.
void resize(Index r, Index c)
Resize function.
void resize(Index p, Index r, Index c)
Resize function.
static const Index npos
Define npos:
#define ARTS_ASSERT(condition,...)
#define ARTS_USER_ERROR_IF(condition,...)
Linear algebra functions.
void psdModifiedGammaMassXmean(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdModifiedGammaMassXmean.
void psdMonoMass(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const ArrayOfArrayOfScatteringMetaData &scat_meta, const Index &species_index, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdMonoMass.
void psdFieldEtAl07(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const String ®ime, const Numeric &t_min, const Numeric &t_max, const Numeric &t_min_psd, const Numeric &t_max_psd, const Numeric &b_min, const Numeric &b_max, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdFieldEtAl07.
void psdModifiedGammaMassNtot(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdModifiedGammaMassNtot.
void psdModifiedGammaMass(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdModifiedGammaMass.
void psdMcFarquaharHeymsfield97(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &t_min, const Numeric &t_max, const Numeric &t_min_psd, const Numeric &t_max_psd, const Index &picky, const Index &noisy, const Verbosity &)
WORKSPACE METHOD: psdMcFarquaharHeymsfield97.
void psdDelanoeEtAl14(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &iwc, const Numeric &n0, const Numeric &dm, const Numeric &rho, const Numeric &alpha, const Numeric &beta, const Numeric &t_min, const Numeric &t_max, const Numeric &dm_min, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdDelanoeEtAl14.
void psdModifiedGammaMassSingleMoment(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n_alpha, const Numeric &n_b, const Numeric &mu, const Numeric &gamma, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdModifiedGammaMassSingleMoment.
void psdMonoDispersive(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const ArrayOfArrayOfScatteringMetaData &scat_meta, const Index &species_index, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdMonoDispersive.
void psdModifiedGammaMassMeanParticleMass(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdModifiedGammaMassMeanParticleMass.
void psdSeifertBeheng06(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const String &hydrometeor_type, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdSeifertBeheng06.
void psdModifiedGammaMassXmedian(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdModifiedGammaMassXmedian.
void psdAbelBoutle12(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdAbelBoutle12.
void psdWangEtAl16(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdWangEtAl16.
void psdFieldEtAl19(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &verbosity)
WORKSPACE METHOD: psdFieldEtAl19.
void psdMilbrandtYau05(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const String &hydrometeor_type, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdMilbrandtYau05.
void psdModifiedGamma(Matrix &psd_data, Tensor3 &dpsd_data_dx, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
WORKSPACE METHOD: psdModifiedGamma.
void delanoe_shape_with_derivative(VectorView psd, MatrixView jac_data, const Vector &x, const Numeric &alpha, const Numeric &beta)
! Shape functions for normalized PSD.
void mgd_with_derivatives(VectorView psd, MatrixView jac_data, const Vector &x, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const bool &do_n0_jac, const bool &do_mu_jac, const bool &do_la_jac, const bool &do_ga_jac)
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
Declarations having to do with the four output streams.
constexpr bool isnan(double d) noexcept
This file contains declerations of functions of physical character.
void psd_snow_F07(Vector &psd, const Vector &diameter, const Numeric &swc, const Numeric &t, const Numeric alpha, const Numeric beta, const String ®ime)
The F07 snow PSD.
void psd_MY05(Vector &psd, Matrix &dpsd, const Vector &diameter_max, const Numeric N_tot, const Numeric WC, const String psd_type)
void psd_mgd_mass_and_something(Matrix &psd_data, Tensor3 &dpsd_data_dx, const String &something, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n0, const Numeric &mu, const Numeric &la, const Numeric &ga, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
Code common to MGD PSD involving the integrated mass.
Numeric n0_from_t(Numeric t)
Sets N0star based on temperature.
void psd_cloudice_MH97(Vector &psd, const Vector &diameter, const Numeric &iwc, const Numeric &t, const bool noisy)
The MH97 cloud ice PSD.
void psd_mono_common(Matrix &psd_data, Tensor3 &dpsd_data_dx, const String &type, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const ArrayOfArrayOfScatteringMetaData &scat_meta, const Index &species_index, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
Code common to PSDs of mono type.
Numeric n0_from_iwc_dm(Numeric iwc, Numeric dm, Numeric rho)
Derives N0star from IWC and Dm.
Numeric dm_from_iwc_n0(Numeric iwc, Numeric n0, Numeric rho)
Derives Dm from IWC and N0star.
void psd_SB06(Vector &psd, Matrix &dpsd, const Vector &mass, const Numeric &N_tot, const Numeric &WC, const String &hydrometeor_type)
void psd_mgd_smm_common(Matrix &psd_data, Tensor3 &dpsd_data_dx, const String &psd_name, const Vector &psd_size_grid, const Vector &pnd_agenda_input_t, const Matrix &pnd_agenda_input, const ArrayOfString &pnd_agenda_input_names, const ArrayOfString &dpnd_data_dx_names, const Numeric &scat_species_a, const Numeric &scat_species_b, const Numeric &n_alpha_in, const Numeric &n_b_in, const Numeric &mu_in, const Numeric &gamma_in, const Numeric &t_min, const Numeric &t_max, const Index &picky, const Verbosity &)
Code common to a number of modified gamma PSDs used with single-moment mass schemes.
Internal functions associated with size distributions.
#define START_OF_PSD_METHODS()
Numeric pow(const Rational base, Numeric exp)
Power of.