MercuryDPM  Trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Base_X_Y_Z.cc
Go to the documentation of this file.
1 //Copyright (c) 2013-2020, The MercuryDPM Developers Team. All rights reserved.
2 //For the list of developers, see <http://www.MercuryDPM.org/Team>.
3 //
4 //Redistribution and use in source and binary forms, with or without
5 //modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name MercuryDPM nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 //DISCLAIMED. IN NO EVENT SHALL THE MERCURYDPM DEVELOPERS TEAM BE LIABLE FOR ANY
19 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 //ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 //(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 #include "Base_X_Y_Z.h"
27 #include "Particles/BaseParticle.h"
28 #include "DPMBase.h"
29 
30 using namespace CGCoordinates;
31 
33 {
34  Mdouble prefactor = 1.0 / (constants::sqrt_2 * constants::sqrt_pi * width);
35  return prefactor / erf(cutoff / (constants::sqrt_2 * width));
36 }
37 
39 {
40  Mdouble widthSqrt2 = width * constants::sqrt_2;
41  Mdouble a = -cutoff;
42  Mdouble b = cutoff + distance;
43  return 0.5 / (
44  +erf(b / widthSqrt2) * b
45  + widthSqrt2 / constants::sqrt_pi * exp(-mathsFunc::square(b / widthSqrt2))
46  - erf(a / widthSqrt2) * a
47  - widthSqrt2 / constants::sqrt_pi * exp(-mathsFunc::square(a / widthSqrt2))
48  );
49 }
50 
55 void Base_X_Y_Z::normalisePolynomialCoefficients(std::vector<Mdouble>& coefficients, Mdouble cutoff)
56 {
57  Mdouble volume = 0.0;
58  for (std::size_t i = 0; i < coefficients.size(); i++)
59  volume += coefficients[i] / static_cast<Mdouble>(i + 1);
60  volume *= 2.0 * cutoff;
61  for (double& coefficient : coefficients)
62  coefficient /= volume;
63  //logger(INFO,"Volume %",volume);
64 }
65 
67 {
68  return 1;
69 }
70 
71 //template<StatType T>
72 //double NORMALIZED_POLYNOMIAL<T>::get_volume()
73 //{
74 // double volume = 0;
75 // unsigned int N = coefficients.size();
76 // if (dim == 3)
77 // {
78 // for (unsigned int i = 0; i < N; i++)
79 // volume += coefficients[i] / (2. + N - i);
80 // volume *= 4. * constants::pi;
81 // }
82 // else if (dim == 2)
83 // {
84 // std::cerr << "dim=2 is not working yet" << std::endl;
85 // exit(-1);
86 // for (unsigned int i = 0; i < coefficients.size(); i++)
87 // volume += coefficients[i] / (1. + N - i);
88 // volume *= 2. * constants::pi;
89 // }
90 // else if (dim == 1)
91 // {
92 // std::cerr << "dim=1 is not working yet" << std::endl;
93 // exit(-1);
94 // for (unsigned int i = 0; i < coefficients.size(); i++)
95 // volume += coefficients[i] / (0. + N - i);
96 // volume *= 2.;
97 // }
98 // else
99 // {
100 // std::cerr << "Error in get_volume: dim=" << dim << std::endl;
101 // exit(-1);
102 // }
103 // return volume;
104 //}
double Mdouble
Definition: GeneralDefine.h:34
Mdouble exp(Mdouble Exponent)
Definition: ExtendedMath.cc:84
const std::complex< Mdouble > i
Definition: ExtendedMath.h:50
const Mdouble sqrt_pi
Definition: ExtendedMath.h:46
static Mdouble getGaussPrefactor(Mdouble width, Mdouble cutoff)
Computes the prefactor of the Gauss CGFunction, which is dependent on the number of non-averaged dime...
Definition: Base_X_Y_Z.cc:32
const Mdouble sqrt_2
Definition: ExtendedMath.h:48
static const unsigned countVariables()
Definition: Base_X_Y_Z.cc:66
static Mdouble getGaussIntegralPrefactor(Mdouble distance, Mdouble width, Mdouble cutoff)
Computes the prefactor of the Gauss line integral, which is dependent on the number of non-averaged d...
Definition: Base_X_Y_Z.cc:38
T square(const T val)
squares a number
Definition: ExtendedMath.h:104
static void normalisePolynomialCoefficients(std::vector< Mdouble > &coefficients, Mdouble cutoff)
Normalises the coefficients of Polynomial CGFunction such that the integral over all non-averaged dim...
Definition: Base_X_Y_Z.cc:55