Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F85662674
KernelFunction.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Sep 30, 22:09
Size
7 KB
Mime Type
text/x-c
Expires
Wed, Oct 2, 22:09 (2 d)
Engine
blob
Format
Raw Data
Handle
21234970
Attached To
rLAMMPS lammps
KernelFunction.h
View Options
#ifndef KERNEL_FUNCTION_H
#define KERNEL_FUNCTION_H
#include <set>
#include "LammpsInterface.h"
#include "MatrixLibrary.h"
namespace
ATC
{
/**
* @class KernelFunctionMgr
* @brief Base class for managing kernels
*/
class
KernelFunctionMgr
{
public:
/** Static instance of this class */
static
KernelFunctionMgr
*
instance
();
class
KernelFunction
*
function
(
char
**
arg
,
int
nargs
);
protected:
KernelFunctionMgr
()
{};
~
KernelFunctionMgr
();
private:
static
KernelFunctionMgr
*
myInstance_
;
std
::
set
<
KernelFunction
*>
pointerSet_
;
};
/**
* @class KernelFunction
* @brief Base class for kernels for atom-continuum transfer
*/
class
KernelFunction
{
public:
// constructor
KernelFunction
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunction
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
=
0
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
=
0
;
// bond function value via quadrature
virtual
double
bond
(
DENS_VEC
&
xa
,
DENS_VEC
&
xb
,
double
lam1
,
double
lam2
)
const
;
// localization-volume intercepts for bond calculation
virtual
void
bond_intercepts
(
DENS_VEC
&
xa
,
DENS_VEC
&
xb
,
double
&
lam1
,
double
&
lam2
)
const
;
virtual
bool
node_contributes
(
DENS_VEC
node
)
const
;
virtual
bool
in_support
(
DENS_VEC
node
)
const
;
double
inv_vol
(
void
)
const
{
return
invVol_
;
}
virtual
double
dimensionality_factor
(
void
)
const
{
return
1.
;
}
protected:
double
invVol_
;
// normalization factor
double
Rc_
,
invRc_
;
// cutoff radius
int
nsd_
;
// number of dimensions
/** pointer to lammps interface class */
LammpsInterface
*
lammpsInterface_
;
/** periodicity flags and lengths */
int
periodicity
[
3
];
double
box_bounds
[
2
][
3
];
double
box_length
[
3
];
};
/**
* @class KernelFunctionStep
* @brief Class for defining kernel function of a step with spherical support
*/
class
KernelFunctionStep
:
public
KernelFunction
{
public:
// constructor
KernelFunctionStep
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionStep
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
// bond function value
virtual
double
bond
(
DENS_VEC
&
xa
,
DENS_VEC
&
xb
,
double
lam1
,
double
lam2
)
const
{
return
lam2
-
lam1
;
}
};
/**
* @class KernelFunctionCell
* @brief Class for defining kernel function of a step with rectangular support
* suitable for a rectangular grid
*/
class
KernelFunctionCell
:
public
KernelFunction
{
public:
// constructor
KernelFunctionCell
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionCell
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
// bond function value
virtual
double
bond
(
DENS_VEC
&
xa
,
DENS_VEC
&
xb
,
double
lam1
,
double
lam2
)
const
{
return
lam2
-
lam1
;}
// bond intercept values : origin is the node position
void
bond_intercepts
(
DENS_VEC
&
xa
,
DENS_VEC
&
xb
,
double
&
lam1
,
double
&
lam2
)
const
;
bool
node_contributes
(
DENS_VEC
node
)
const
;
bool
in_support
(
DENS_VEC
dx
)
const
;
protected:
double
hx
,
hy
,
hz
;
DENS_VEC
cellBounds_
;
};
/**
* @class KernelFunctionCubicSphere
* @brief Class for defining kernel function of a cubic with spherical support
*/
class
KernelFunctionCubicSphere
:
public
KernelFunction
{
public:
// constructor
KernelFunctionCubicSphere
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionCubicSphere
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
};
/**
* @class KernelFunctionQuarticSphere
* @brief Class for defining kernel function of a quartic with spherical support
*/
class
KernelFunctionQuarticSphere
:
public
KernelFunction
{
public:
// constructor
KernelFunctionQuarticSphere
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionQuarticSphere
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
};
/**
* @class KernelFunctionCubicCyl
* @brief Class for defining kernel function of a cubic with cylindrical support
*/
class
KernelFunctionCubicCyl
:
public
KernelFunction
{
public:
// constructor
KernelFunctionCubicCyl
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionCubicCyl
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
virtual
double
dimensionality_factor
(
void
)
const
{
return
0.5
;
}
};
/**
* @class KernelFunctionQuarticCyl
* @brief Class for defining kernel function of a quartic with cylindrical support
*/
class
KernelFunctionQuarticCyl
:
public
KernelFunction
{
public:
// constructor
KernelFunctionQuarticCyl
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionQuarticCyl
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
virtual
double
dimensionality_factor
(
void
)
const
{
return
0.5
;
}
};
/**
* @class KernelFunctionCubicBar
* @brief Class for defining kernel function of a cubic with 1-dimensional (bar) support
*/
class
KernelFunctionCubicBar
:
public
KernelFunction
{
public:
// constructor
KernelFunctionCubicBar
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionCubicBar
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
virtual
double
dimensionality_factor
(
void
)
const
{
return
0.25
;
}
};
/**
* @class KernelFunctionCubicBar
* @brief Class for defining kernel function of a cubic with 1-dimensional (bar) support
*/
class
KernelFunctionLinearBar
:
public
KernelFunction
{
public:
// constructor
KernelFunctionLinearBar
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionLinearBar
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
virtual
double
dimensionality_factor
(
void
)
const
{
return
0.25
;
}
};
/**
* @class KernelFunctionQuarticBar
* @brief Class for defining kernel function of a quartic with 1-dimensional (bar) support
*/
class
KernelFunctionQuarticBar
:
public
KernelFunction
{
public:
// constructor
KernelFunctionQuarticBar
(
int
nparameters
,
double
*
parameters
);
// destructor
virtual
~
KernelFunctionQuarticBar
()
{};
// function value
virtual
double
value
(
DENS_VEC
&
x_atom
)
const
;
// function derivative
virtual
void
derivative
(
const
DENS_VEC
&
x_atom
,
DENS_VEC
&
deriv
)
const
;
virtual
double
dimensionality_factor
(
void
)
const
{
return
0.25
;
}
};
};
#endif
Event Timeline
Log In to Comment