97 (*sh) *= shmulti.
array();
106 (*sh) += shadd.
array();
115 (*sh) -= shmin.
array();
123 (*sh).multid1(shmulti);
127 (*sh).multid2(shmulti);
131 for (
int i(0); i <
dim(); ++i) {
132 (*sh)(i) = (*
sh)(i).real();
143 valarray <complex<double> > plast(this->
numx());
145 for (
size_t i(0); i < plast.size(); ++i) {
146 plast[i] = (*sh)(
nump()-2,i) - (*
sh)(
nump()-1,i);
149 for (
size_t i(0); i < plast.size(); ++i) {
152 (*sh)(
nump()-1,i) = 2.0*plast[i];
220 for (
size_t i(0); i<
numx();++i){
221 for (
size_t p(0); p<
nump();++p){
222 if ((isnan((*
sh)(p,i).real())) || (isnan((*
sh)(p,i).imag())))
224 std::cout <<
"NaN @ (" << p <<
"," << i <<
")\n";
267 if (
this != &other) {
278 (*sh) *= shmulti.
array();
287 (*sh) += shadd.
array();
296 (*sh) -= shmin.
array();
304 (*sh).multid1(shmulti);
308 (*sh).multid2(shmulti);
312 (*sh).multid3(shmulti);
353 int st(0), nxt(
nump());
354 for (
int im(0); im < shmultiM.dim(); ++im) {
355 for (
int ip(st); ip < nxt; ++ip)
356 (*
sh)(ip) *= shmultiM(im);
378 fi =
new valarray<complex<double> >(
numx);
382 fi =
new valarray<complex<double> >(other.
numx());
403 if (
this != &other) {
418 (*fi) *= fimulti.
array();
427 (*fi) += fiadd.
array();
436 (*fi) -= fimin.
array();
443 for (
int i(0); i <
numx(); ++i) {
444 (*fi)[i] = (*fi)[i].real();
479 for(
long i(0); i< long(
numx())-2; ++i) {
480 (*fi)[i] -= (*fi)[i+2];
483 for(
long i(
numx()-3); i>-1; --i) {
484 (*fi)[i+1] = (*fi)[i];
521 if (
this != &other) {
533 (*fi) *= fimulti.
array();
542 (*fi) += fiadd.
array();
551 (*fi) -= fimin.
array();
582 fie =
new vector<Field1D> (6,
Field1D(nx));
587 fie =
new vector<Field1D>(6,
Field1D(other(1).
numx()));
588 for(
int i=0; i < other.
dim() ; ++i) (*fie)[i] = other(i);
600 for(
int i=0; i <
dim() ; ++i)
605 for(
int i=0; i <
dim() ; ++i){
606 if (&((*fie)[i]) != &h) {
613 if (
this != &other) {
614 for(
int i=0; i <
dim() ; ++i)
615 (*fie)[i] = other(i);
621 for(
int i=0; i <
dim() ; ++i)
626 if (
this != &other) {
627 for(
int i=0; i <
dim() ; ++i)
628 (*fie)[i] *= other(i);
634 for(
int i=0; i <
dim() ; ++i)
639 if (
this != &other) {
640 for(
int i=0; i <
dim() ; ++i)
641 (*fie)[i] += other(i);
647 for(
int i=0; i <
dim() ; ++i)
652 if (
this != &other) {
653 for(
int i=0; i <
dim() ; ++i)
654 (*fie)[i] -= other(i);
665 fie =
new vector<Field2D> (6,
Field2D(nx,ny));
670 fie =
new vector<Field2D>(6,
Field2D(other(1).
numx(),other(1).numy()));
671 for(
int i=0; i < other.
dim() ; ++i) (*fie)[i] = other(i);
683 for(
int i=0; i <
dim() ; ++i)
688 for(
int i=0; i <
dim() ; ++i){
689 if (&((*fie)[i]) != &h) {
696 if (
this != &other) {
697 for(
int i=0; i <
dim() ; ++i)
698 (*fie)[i] = other(i);
704 for(
int i=0; i <
dim() ; ++i)
709 if (
this != &other) {
710 for(
int i=0; i <
dim() ; ++i)
711 (*fie)[i] *= other(i);
717 for(
int i=0; i <
dim() ; ++i)
722 if (
this != &other) {
723 for(
int i=0; i <
dim() ; ++i)
724 (*fie)[i] += other(i);
730 for(
int i=0; i <
dim() ; ++i)
735 if (
this != &other) {
736 for(
int i=0; i <
dim() ; ++i)
737 (*fie)[i] -= other(i);
750 : lmax(l), mmax(m), pmx(pma), charge(q), ma(_ma), ind(l+1,m+1) {
754 cout <<
"l0 < 1 is not acceptable.\n";
767 for(
int il(0); il <
lmax+1 ; ++il){
771 filter_ceiling[il] = ((il < np)?il:np);
777 for(
int il=0; il <
lmax+1 ; ++il){
778 for(
int im=0; im < ((
mmax < il)?
mmax:il)+1; ++im){
779 ind(il,im) = ((il <
mmax+1)?((il*(il+1))/2+im):
781 filter_ceiling[
ind(il,im)] = ((il < np)?il:np);
798 df =
new vector<SHarmonic1D>(
sz,
SHarmonic1D(other(0).nump(),other(0).numx()));
801 for(
size_t i(0); i <
sz ; ++i){
802 (*df).push_back(other(i));
809 for(
int il(0); il <
lmax+1 ; ++il){
817 for(
int il=0; il <
lmax+1 ; ++il){
818 for(
int im=0; im < ((
mmax < il)?
mmax:il)+1; ++im){
819 ind(il,im) = ((il <
mmax+1)?((il*(il+1))/2+im):
840 return (*
df)[size_t(i)];
845 return (*
df)[size_t(i)];
850 return (*
df)[
ind(l,m)];
855 return (*
df)[
ind(l,m)];
867 for(
size_t i(0); i <
dim() ; ++i){
873 for(
size_t i(0); i <
dim() ; ++i){
874 if (&((*
df)[i]) != &h) {
881 if (
this != &other) {
882 for(
size_t i(0); i <
dim() ; ++i) {
890 for(
size_t i(0); i <
dim() ; ++i) {
896 if (
this != &other) {
897 for(
size_t i(0); i <
dim() ; ++i) {
898 (*df)[i] *= other(i);
905 for(
size_t i(0); i <
dim() ; ++i) {
911 if (
this != &other) {
912 for(
size_t i(0); i <
dim() ; ++i) {
913 (*df)[i] += other(i);
920 for(
size_t i(0); i <
dim() ; ++i) {
926 if (
this != &other) {
927 for(
size_t i(0); i <
dim() ; ++i) {
928 (*df)[i] -= other(i);
935 for(
size_t i(0); i <
dim() ; ++i) {
947 valarray<double> out((*
df)[0].numx());
953 static_cast<complex<double>
> (0.0),
static_cast<complex<double>
>(
pmax()),(*
df)[0].nump()
956 for (
size_t i(0); i<(*df)[0].numx();++i){
967 valarray<double> out((*
df)[0].numx());
974 static_cast<complex<double>
> (0.0),
static_cast<complex<double>
>(
pmax()),(*
df)[0].nump()
980 for (
size_t i(0); i<(*df)[0].numx();++i){
986 for (
size_t i(0); i<(*df)[0].numx();++i){
992 for (
size_t i(0); i<(*df)[0].numx();++i){
999 std::cout <<
"\n\n ERROR: Wrong current Direction \n\n ";
1010 valarray<double> out((*
df)[0].numx());
1016 static_cast<complex<double>
> (0.0),
static_cast<complex<double>
>(
pmax()),(*
df)[0].nump()
1022 for (
size_t i(0); i<(*df)[0].numx();++i){
1028 for (
size_t i(0); i<(*df)[0].numx();++i){
1034 for (
size_t i(0); i<(*df)[0].numx();++i){
1041 std::cout <<
"\n\n ERROR: Wrong current Direction \n\n ";
1058 static_cast<complex<double>
> (0.0),
static_cast<complex<double>
>(
pmax()),(*
df)[0].nump()
1061 double current_c1(4.0/3.0*M_PI*
charge/
ma);
1062 double current_c2(2.0*current_c1);
1063 double current_c3(-1.0*current_c2);
1065 for (
size_t i(0); i<(*df)[0].numx();++i){
1083 valarray<double> out((*
df)[0].numx());
1089 static_cast<complex<double>
> (0.0),
static_cast<complex<double>
>(
pmax()),(*
df)[0].nump()
1092 for (
size_t i(0); i<(*df)[0].numx();++i){
1106 for (
size_t i(0); i<(*df)[
indx].numx();++i){
1107 for (
size_t p(0); p<(*df)[
indx].nump();++p){
1108 if ( isnan((*
df)[
indx](p,i).real()) || isnan((*
df)[
indx](p,i).imag()) )
1110 std::cout <<
"NaN @ (" <<
indx <<
"," << p <<
"," << i <<
")\n";
1137 cout <<
"l0 < 1 or m0 < 1 is not acceptable.\n";
1148 for(
int il=0; il <
lmax+1 ; ++il){
1149 for(
int im=0; im < ((
mmax < il)?
mmax:il)+1; ++im){
1150 ind(il,im) = ((il <
mmax+1)?((il*(il+1))/2+im):
1163 df =
new vector<SHarmonic2D>;
1164 for(
size_t l(0); l < other.
l0()+1 ; ++l){
1165 for(
size_t m(0); m < other.
m0()+1 ; ++m){
1166 (*df).push_back(*(other(l,m)));
1172 for(
int il=0; il <
l0()+1 ; ++il){
1173 for(
int im=0; im < ((
m0() < il)?
m0():il)+1; ++im){
1174 ind(il,im) = ((il <
m0()+1)?((il*(il+1))/2+im):
1175 (il*(
m0()+1)-(
m0()*(
m0()+1))/2 + im));
1198 return &((*df)[size_t(i)]);
1208 return &((*df)[size_t(i)]);
1220 for(
size_t i(0); i <
dim() ; ++i){
1226 for(
size_t i(0); i <
dim() ; ++i){
1227 if (&((*
df)[i]) != &h) {
1234 if (
this != &other) {
1237 for(
size_t l(0); l <
ldim() ; ++l)
1239 for(
size_t m(0); m <
mdim() ; ++m)
1241 (*df)[i] = *(other(l,m));
1250 for(
size_t i(0); i <
dim() ; ++i) {
1256 if (
this != &other) {
1259 for(
size_t l(0); l <
ldim() ; ++l)
1261 for(
size_t m(0); m <
mdim() ; ++m)
1263 (*df)[i] *= *(other(l,m));
1272 for(
size_t i(0); i <
dim() ; ++i) {
1290 if (
this != &other) {
1291 for(
size_t i(0); i <
dim() ; ++i) {
1292 (*df)[i] += *(other(i));
1299 for(
size_t i(0); i <
dim() ; ++i) {
1305 if (
this != &other) {
1316 for(
size_t i(0); i <
dim() ; ++i) {
1317 (*df)[i] -= *(other(i));
1337 Hydro1D:: Hydro1D(
size_t nx,
double _mass,
double _charge): hydromass(_mass), hydrocharge(_charge) {
1338 hn =
new valarray<double >(nx);
1339 hvx =
new valarray<double >(nx);
1340 hvy =
new valarray<double >(nx);
1341 hvz =
new valarray<double >(nx);
1342 ht =
new valarray<double >(nx);
1343 hz =
new valarray<double >(nx);
1347 hn =
new valarray<double >(other.
numx());
1350 hvx =
new valarray<double >(other.
numx());
1353 hvy =
new valarray<double >(other.
numx());
1356 hvz =
new valarray<double >(other.
numx());
1359 ht =
new valarray<double >(other.
numx());
1362 hz =
new valarray<double >(other.
numx());
1397 if (
this != &other) {
1428 if (
this != &other) {
1461 if (
this != &other) {
1494 if (
this != &other) {
1513 vector<size_t> np, vector<double> pmax, vector<double> q, vector<double> ma,
1514 double _hydromass,
double _hydrocharge)
1516 if (
ns != np.size()) {
1517 cout <<
"ERROR:Overdetermined number of species\n";
1520 sp =
new vector<DistFunc1D>;
1521 for(
size_t s(0); s <
ns; ++s){
1522 (*sp).push_back(
DistFunc1D(l0[s],m0[s],np[s],pmax[s],nx,q[s],ma[s]));
1533 sp =
new vector<DistFunc1D>;
1534 for(
size_t s(0); s <
ns; ++s){
1555 if (
this != &other) {
1557 for(
size_t s(0); s <
ns; ++s){
1558 (*sp)[s] = other.
DF(s);
1568 for(
size_t s(0); s <
ns; ++s){
1577 for(
size_t s(0); s <
ns; ++s){
1578 (*sp)[s] *= other.
DF(s);
1586 for(
size_t s(0); s <
ns; ++s){
1595 for(
size_t s(0); s <
ns; ++s){
1596 (*sp)[s] += other.
DF(s);
1604 for(
size_t s(0); s <
ns; ++s){
1613 for(
size_t s(0); s <
ns; ++s){
1614 (*sp)[s] -= other.
DF(s);
1622 for(
size_t s(0); s <
ns; ++s){
1632 for(
size_t s(0); s <
ns; ++s){
1633 (*sp)[s].checknan();
1654 State2D:: State2D(
size_t nx,
size_t ny, vector<size_t> l0, vector<size_t> m0, vector<size_t> np, vector<double> q, vector<double> ma)
1656 if (
ns != np.size()) {
1657 cout <<
"ERROR:Overdetermined number of species\n";
1660 sp =
new vector<DistFunc2D>;
1661 for(
size_t s(0); s <
ns; ++s){
1662 (*sp).push_back(
DistFunc2D(l0[s],m0[s],np[s],nx,ny,q[s],ma[s]));
1670 sp =
new vector<DistFunc2D>;
1671 for(
size_t s(0); s <
ns; ++s){
1690 if (
this != &other) {
1691 for(
size_t s(0); s <
ns; ++s){
1692 (*sp).push_back(other.
DF(s));
1700 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] = d;
1706 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] *= other.
DF(s);
1712 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] *= d;
1718 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] += other.
DF(s);
1724 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] += d;
1730 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] -= other.
DF(s);
1736 for(
size_t s(0); s <
ns; ++s) (*
sp)[s] -= d;
EMF2D & operator=(const complex< double > &d)
Hydro1D & operator*=(const double &d)
valarray< double > & temperaturearray() const
EMF1D & operator*=(const complex< double > &d)
valarray< double > getpressure()
SHarmonic2D & Filterp(size_t N)
SHarmonic2D & mxaxis(const valarray< complex< double > > &shmulti)
vector< DistFunc2D > * sp
SHarmonic2D & mxy_matrix(Array2D< complex< double > > &shmultiM)
SHarmonic1D & operator()(int i)
Underlying data structures.
Field2D & operator+=(const complex< double > &d)
DistFunc1D & operator=(const complex< double > &d)
EMF1D & operator=(const complex< double > &d)
State2D & operator-=(const State2D &other)
SHarmonic2D(size_t nump, size_t numx, size_t numy)
EMF2D & operator-=(const complex< double > &d)
State1D & operator+=(const State1D &other)
Field1D & operator*=(const complex< double > &d)
A Collection of relevant 1D Hydrodynamic Quantities.
SHarmonic2D & myaxis(const valarray< complex< double > > &shmulti)
Field2D & operator*=(const complex< double > &d)
State1D & operator*=(const State1D &other)
Hydro1D(size_t numx, double _mass, double _charge)
SHarmonic2D & mpaxis(const valarray< complex< double > > &shmulti)
EMF2D & operator+=(const complex< double > &d)
DistFunc2D & DF(size_t s)
EMF1D & operator-=(const complex< double > &d)
SHarmonic2D * operator()(size_t i)
SHarmonic2D & operator+=(const complex< double > &d)
DistFunc2D & operator*=(const complex< double > &d)
SHarmonic2D & operator*=(const complex< double > &d)
SHarmonic1D & mxaxis(const valarray< complex< double > > &shmulti)
State1D(size_t nx, vector< size_t > l0, vector< size_t > m0, vector< size_t > np, vector< double > pmax, vector< double > q, vector< double > ma, double hydromass, double hydrocharge)
Array2D< complex< double > > * sh
Field1D & operator-=(const complex< double > &d)
Array2D< complex< double > > & array() const
Array2D< double > getcurrent() const
State1D & operator=(const State1D &other)
Field2D & operator=(const complex< double > &d)
DistFunc2D & operator-=(const complex< double > &d)
valarray< complex< double > > & array() const
State1D & operator-=(const State1D &other)
Field1D & operator=(const complex< double > &d)
SHarmonic1D(size_t nump, size_t numx)
The constructor requires nump, and numx as inputs.
valarray< double > & vyarray() const
T relativistic_invg_moment(const vector< T > q, const valarray< T > x, const int p)
EMF2D & operator*=(const complex< double > &d)
Hydro1D & operator+=(const double &d)
State2D & operator=(const State2D &other)
Array3D< complex< double > > & array() const
SHarmonic1D & operator+=(const complex< double > &d)
valarray< double > & Zarray() const
Field1D & operator+=(const complex< double > &d)
DistFunc1D(size_t l, size_t m, size_t np, double pma, size_t nx, double q, double _ma)
DistFunc1D & operator+=(const complex< double > &d)
EMF1D & operator+=(const complex< double > &d)
Field2D(size_t numx, size_t numy)
vector< SHarmonic1D > * df
Field2D & FLD(size_t ip) const
DistFunc1D & DF(size_t s)
SHarmonic2D & operator=(const complex< double > &d)
DistFunc1D & operator-=(const complex< double > &d)
Fields, Distributions, Harmonics, States - Declarations.
valarray< double > & densityarray() const
valarray< double > getdensity()
valarray< double > & vzarray() const
State2D & operator+=(const State2D &other)
An EMF2D is the container for the 6 EM fields in a 2D-3P code.
DistFunc1D & operator*=(const complex< double > &d)
DistFunc2D & operator+=(const complex< double > &d)
State2D & operator*=(const State2D &other)
Array2D< complex< double > > & array() const
To retrieve the the array that stores the information.
Array2D & Filterd1(size_t N)
Array2D< int > indx() const
valarray< T > MakeCAxis(const T min, const T max, const size_t N)
Field1D & FLD(size_t ip) const
SHarmonic2D & operator-=(const complex< double > &d)
SHarmonic1D & operator*=(const complex< double > &d)
valarray< double > & vxarray() const
SHarmonic1D & Filterp(size_t N)
vector< SHarmonic2D > * df
DistFunc2D(size_t l, size_t m, size_t np, size_t nx, size_t ny, double q, double _ma)
Field2D & operator-=(const complex< double > &d)
DistFunc2D & operator=(const complex< double > &d)
SHarmonic1D & operator-=(const complex< double > &d)
SHarmonic1D & operator=(const complex< double > &d)
Hydro1D & operator-=(const double &d)
vector< DistFunc1D > * sp
EMF2D(size_t nx, size_t ny)
valarray< int > filter_ceiling
The 1D distribution function is the container for all SHarmonic1D per species.
T moment(const vector< T > q, const vector< T > x, const int p)
The 2D distribution function is the container for all SHarmonic2D per species.
State2D(size_t nx, size_t ny, vector< size_t > l0, vector< size_t > m0, vector< size_t > np, vector< double > q, vector< double > ma)
Hydro1D & operator=(const double &d)
SHarmonic1D & mpaxis(const valarray< complex< double > > &shmulti)
Numerical Methods - Declarations.