Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90449532
WeakEquationMomentum.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
Fri, Nov 1, 19:08
Size
5 KB
Mime Type
text/x-c
Expires
Sun, Nov 3, 19:08 (2 d)
Engine
blob
Format
Raw Data
Handle
22019155
Attached To
rLAMMPS lammps
WeakEquationMomentum.h
View Options
#ifndef WEAK_EQUATION_MOMENTUM_H
#define WEAK_EQUATION_MOMENTUM_H
#include <set>
#include <string>
#include "WeakEquation.h"
namespace
ATC
{
class
Material
;
/**
* @class WeakEquationMomentum
* @brief Momentum
* rho v,t = div P -->
* int M rho v,t = int B P
*/
class
WeakEquationMomentum
:
public
WeakEquation
{
public:
// constructor
WeakEquationMomentum
();
// destructor
virtual
~
WeakEquationMomentum
();
/** integrand that used to form the energy */
virtual
bool
has_E_integrand
(
void
)
const
{
return
true
;}
virtual
void
E_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
energy
)
const
;
/** density that used to form the mass matrix */
virtual
bool
has_M_integrand
(
void
)
const
{
return
true
;}
virtual
void
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
density
)
const
;
/** flux that is integrated with N as its weight */
virtual
bool
has_N_integrand
(
void
)
const
{
return
true
;}
virtual
bool
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
;
/** flux that is integrated with B = Grad N as its weight */
virtual
bool
has_B_integrand
(
void
)
const
{
return
true
;}
virtual
void
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
;
/** necessary interfaces */
virtual
std
::
set
<
std
::
string
>
needs_material_functions
(
void
)
const
{
std
::
string
list
[
4
]
=
{
"mass_density"
,
"stress"
,
"elastic_energy"
,
"body_force"
};
std
::
set
<
std
::
string
>
needs
(
list
,
list
+
4
);
return
needs
;
}
};
/**
* @class WeakEquationMomentumElectrostatic
* @brief Momentum with electrostatic forces
* rho v,t = div P + b -->
* int M rho v,t = int B P + N b
*/
class
WeakEquationMomentumElectrostatic
:
public
WeakEquationMomentum
{
public:
// constructor
WeakEquationMomentumElectrostatic
();
// destructor
virtual
~
WeakEquationMomentumElectrostatic
(){};
/** density that used to form the mass matrix */
virtual
bool
has_M_integrand
(
void
)
const
{
return
true
;}
virtual
void
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
density
)
const
{
WeakEquationMomentum
::
M_integrand
(
fields
,
material
,
density
);
}
/** flux that is integrated with B = Grad N as its weight */
virtual
bool
has_B_integrand
(
void
)
const
{
return
true
;}
virtual
void
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
WeakEquationMomentum
::
B_integrand
(
fields
,
grad_fields
,
material
,
flux
);
}
/** flux that is integrated with N as its weight */
virtual
bool
has_N_integrand
(
void
)
const
{
return
true
;}
virtual
bool
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
;
/** necessary interfaces */
virtual
std
::
set
<
std
::
string
>
needs_material_functions
(
void
)
const
{
std
::
set
<
std
::
string
>
needs
=
WeakEquationMomentum
::
needs_material_functions
();
needs
.
insert
(
"electric_field"
);
return
needs
;
}
protected:
/** conversion factor charge * electric field --> force */
double
qE2f_
;
mutable
DENS_MAT_VEC
_E_
;
};
class
WeakEquationMomentumDiffusion
:
public
WeakEquation
{
public:
// constructor
WeakEquationMomentumDiffusion
();
// destructor
virtual
~
WeakEquationMomentumDiffusion
();
/** integrand that used to form the energy */
virtual
bool
has_E_integrand
(
void
)
const
{
return
false
;}
/** density that used to form the mass matrix */
virtual
bool
has_M_integrand
(
void
)
const
{
return
true
;}
virtual
void
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
density
)
const
;
/** flux that is integrated with N as its weight */
virtual
bool
has_N_integrand
(
void
)
const
{
return
true
;}
virtual
bool
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
;
/** flux that is integrated with B = Grad N as its weight */
virtual
bool
has_B_integrand
(
void
)
const
{
return
true
;}
virtual
void
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
;
/** linear RHS stiffness matrix */
virtual
bool
has_BB_tangent_coefficients
(
void
)
const
{
return
true
;}
virtual
void
BB_tangent_coefficients
(
const
FieldName
field
,
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
coefs
)
const
;
/** necessary interfaces */
virtual
std
::
set
<
std
::
string
>
needs_material_functions
(
void
)
const
{
std
::
string
list
[
4
]
=
{
"mass_density"
,
"viscous_stress"
,
"body_force"
};
std
::
set
<
std
::
string
>
needs
(
list
,
list
+
3
);
return
needs
;
}
};
}
// NAMESPACE
#endif
Event Timeline
Log In to Comment