Memosa-FVM  0.2
Kspace< T > Class Template Reference

#include <Kspace.h>

Collaboration diagram for Kspace< T >:

Public Types

typedef Kspace< T > Tkspace
 
typedef vector< Tkspace * > TkspList
 
typedef Array< T > TArray
 
typedef shared_ptr< TArrayTArrPtr
 
typedef Vector< T, 3 > Tvec
 
typedef Array< TvecTvecArray
 
typedef Array< int > IntArray
 
typedef pmode< T > Tmode
 
typedef shared_ptr< TmodeTmodeptr
 
typedef vector< TmodeptrModes
 
typedef kvol< T > Tkvol
 
typedef shared_ptr< TkvolKvolptr
 
typedef vector< KvolptrVolvec
 
typedef SquareTensor< T, 3 > T3Tensor
 
typedef Tmode::Reflection Reflection
 
typedef Tmode::Reflptr Reflptr
 
typedef Tmode::Refl_pair Refl_pair
 
typedef Tmode::Refl_Map Refl_Map
 
typedef pair< TArray *, TArray * > BinAndTrans
 
typedef map< Tkspace *, pair
< TArray *, TArray * > > 
TransmissionMap
 
typedef
Tkspace::TransmissionMap::iterator 
TransIt
 
typedef pair< const
StorageSite *, const
StorageSite * > 
EntryIndex
 
typedef map< EntryIndex,
shared_ptr< ArrayBase > > 
GhostArrayMap
 

Public Member Functions

 Kspace (T a, T tau, T vgmag, T omega, int ntheta, int nphi, const bool full)
 
 Kspace ()
 
void setCp (const T cp)
 
void setCpNonGray (const T Tl)
 
void makeDegenerate (const int m)
 
void makeFreqArray ()
 
 Kspace (const char *filename, const int dimension)
 
 Kspace (const char *filename, const int dimension, const bool normal)
 
Tkvolgetkvol (int n) const
 
int getlength () const
 
gethbar ()
 
int gettotmodes ()
 
calcDK3 ()
 
getDK3 () const
 
calcTauTot ()
 
void NewtonSolve (T &guess, const T e_sum)
 
void calcTemp (T &guess, const T e_sum, const Tvec An)
 
calcLatTemp (const int c)
 
void calcTemp (T &guess, const T e_sum)
 
calcModeTemp (T guess, const T e_sum, const T m)
 
calcPhononTemp (const int c, const int index, T guess)
 
void gete0_tau (T &Tguess, T &e0tau, T &de0taudT)
 
void gete0 (const T Tguess, T &e0, T &de0dT, const Tvec An)
 
void gete0v (const T Tguess, T &e0, T &de0dT, const Tvec An)
 
void gete0 (const T Tguess, T &e0, T &de0dT)
 
void gete0 (const T Tguess, T &e0, T &de0dT, const T m)
 
getde0taudT (const int c, T Tl)
 
calcSpecificHeat (T Tl)
 
calcSpecificHeat (T Tl, const int m)
 
findKnStats (const T length)
 
void findSpecs (const Tvec n, const int m, const int k, Refl_pair &refls)
 
void CopyKspace (Tkspace &copyFromKspace)
 
FindBallisticHeatRate (const Tvec An, const T T1, const T T2)
 
ArrayBasegetVelocities ()
 
void getVelocities (TvecArray &v)
 
ArrayBasegetVelocities (const int M)
 
ArrayBasegetReflectionArray (const Mesh &mesh, const int FgId)
 
ArrayBasegetHollandConductivity (const T Tl)
 
ArrayBasegetModewiseHollandConductivity (const T Tl)
 
ArrayBasegetModewiseBallisticConductance (const T Tl)
 
void outerProduct (const Tvec &v1, const Tvec &v2, T3Tensor &out)
 
void setTransmission (Tkspace &toKspace, ArrayBase *freqBins, ArrayBase *transArray)
 
findTransmission (Tkspace &toKspace, const T freq)
 
TArraygetTransArray (Tkspace &toKspace)
 
calcBallisticInterface (Tkspace &kspace1, const Tvec &An, const T T0, const T T1)
 
calcBandTemp (const T guess, const T eSum, const IntArray &kpts, const IntArray &mpts)
 
calcDiffuseE (Tkspace &kspace1, const Tvec &An, const T T0, const T T1)
 
void giveTransmissions ()
 
void setDOS (DensityOfStates< T > &DOS)
 
void setScattKernel (ScatteringKernel< T > &Sk)
 
DensityOfStates< T > * getDOSptr ()
 
void setCoarseKspace (Tkspace *cK)
 
TkspacegetCoarseKspace ()
 
TransmissionMapgetTransMap ()
 
T & gete (const int cell, const int count)
 
T & gete0 (const int cell, const int count)
 
T & getInj (const int cell, const int count)
 
T & getRes (const int cell, const int count)
 
T & getFas (const int cell, const int count)
 
int getGlobalIndex (const int cell, const int count)
 
void seteArray (TArrPtr ePtr)
 
void sete0Array (TArrPtr e0Ptr)
 
void setSourceArray (TArrPtr SPtr)
 
void setInjArray (TArrPtr InjPtr)
 
void setResArray (TArrPtr ResPtr)
 
void setFASArray (TArrPtr FASPtr)
 
void setTauArray (TArrPtr TauPtr)
 
TArraygeteArray ()
 
TArraygete0Array ()
 
TArraygetSourceArray ()
 
TArraygetInjArray ()
 
TArraygetResArray ()
 
TArraygetFASArray ()
 
TArraygetTauArray ()
 
const T getTau (const int index)
 
void geteCellVals (const int c, TArray &o)
 
void gete0CellVals (const int c, TArray &o)
 
void getnCellVals (const int c, TArray &o)
 
void seteCellVals (const int c, const TArray &o)
 
void setResidCell (const int c, const TArray &o)
 
void addFAS (const int c, TArray &Bvec)
 
void addFASint (const int c, TArray &Bvec)
 
void makeFAS ()
 
void syncLocal (const StorageSite &site)
 
void syncScatter (const StorageSite &site)
 
void createSyncGather (const StorageSite &site)
 
void syncGather (const StorageSite &site)
 
int get_request_size (const StorageSite &site)
 
void getEquilibriumArray (TArray &vals, const T Tl)
 
TArraygetFreqArray ()
 
void getSourceTerm (const int c, TArray &s, TArray &ds)
 
void ScatterPhonons (const int c, const int totIts, TArray &C, TArray &B, const TArray &V, TArray &newE, const T cv)
 
void setRelTimeFunction (const T A, const T B, const T C)
 
void updateTau (const int c, const T Tl)
 
ArrayBasegetRTAsources (const int c)
 
ArrayBasegetFullsources (const int c)
 
ArrayBasegetIsources (const int c, const bool correct)
 
ArrayBasegetIIsources (const int c, const bool correct)
 
ArrayBasegetSourceDeriv (const int c)
 
ArrayBasegetWaveVectors ()
 
ArrayBasegeteCellValsPy (const int c)
 
ArrayBasegete0CellVars (const int c)
 
ArrayBasegete0CellValsPy (const T Tl)
 
ArrayBasegetFreqArrayPy ()
 
ArrayBasegetTauArrayPy ()
 
void weightArray (TArray &e)
 
void weightArray (ArrayBase *ep)
 
ArrayBasegetEmptyArray (const int length)
 
void setTref (const T Tref)
 
ArrayBasegetSourceArrayPy ()
 
void addSource (const int c, TArray &BVec, const T cv)
 

Private Member Functions

 Kspace (const Kspace &)
 

Private Attributes

int _length
 
Volvec _Kmesh
 
_totvol
 
TransmissionMap _transMap
 
DensityOfStates< T > * _DOS
 
ScatteringKernel< T > * _ScattKernel
 
Tkspace_coarseKspace
 
TArrPtr _e
 
TArrPtr _e0
 
TArrPtr _Source
 
TArrPtr _injected
 
TArrPtr _residual
 
TArrPtr _FASCorrection
 
TArrPtr _Tau
 
GhostArrayMap _ghostArrays
 
TArray _freqArray
 
RelTimeFun< T > _relFun
 

Detailed Description

template<class T>
class Kspace< T >

Definition at line 28 of file Kspace.h.

Member Typedef Documentation

template<class T>
typedef pair<TArray*, TArray*> Kspace< T >::BinAndTrans

Definition at line 51 of file Kspace.h.

template<class T>
typedef pair<const StorageSite*, const StorageSite*> Kspace< T >::EntryIndex

Definition at line 54 of file Kspace.h.

template<class T>
typedef map<EntryIndex, shared_ptr<ArrayBase> > Kspace< T >::GhostArrayMap

Definition at line 55 of file Kspace.h.

template<class T>
typedef Array<int> Kspace< T >::IntArray

Definition at line 39 of file Kspace.h.

template<class T>
typedef shared_ptr<Tkvol> Kspace< T >::Kvolptr

Definition at line 44 of file Kspace.h.

template<class T>
typedef vector<Tmodeptr> Kspace< T >::Modes

Definition at line 42 of file Kspace.h.

template<class T>
typedef Tmode::Refl_Map Kspace< T >::Refl_Map

Definition at line 50 of file Kspace.h.

template<class T>
typedef Tmode::Refl_pair Kspace< T >::Refl_pair

Definition at line 49 of file Kspace.h.

template<class T>
typedef Tmode::Reflection Kspace< T >::Reflection

Definition at line 47 of file Kspace.h.

template<class T>
typedef Tmode::Reflptr Kspace< T >::Reflptr

Definition at line 48 of file Kspace.h.

template<class T>
typedef SquareTensor<T,3> Kspace< T >::T3Tensor

Definition at line 46 of file Kspace.h.

template<class T>
typedef Array<T> Kspace< T >::TArray

Definition at line 35 of file Kspace.h.

template<class T>
typedef shared_ptr<TArray> Kspace< T >::TArrPtr

Definition at line 36 of file Kspace.h.

template<class T>
typedef Kspace<T> Kspace< T >::Tkspace

Definition at line 33 of file Kspace.h.

template<class T>
typedef vector<Tkspace*> Kspace< T >::TkspList

Definition at line 34 of file Kspace.h.

template<class T>
typedef kvol<T> Kspace< T >::Tkvol

Definition at line 43 of file Kspace.h.

template<class T>
typedef pmode<T> Kspace< T >::Tmode

Definition at line 40 of file Kspace.h.

template<class T>
typedef shared_ptr<Tmode> Kspace< T >::Tmodeptr

Definition at line 41 of file Kspace.h.

template<class T>
typedef Tkspace::TransmissionMap::iterator Kspace< T >::TransIt

Definition at line 53 of file Kspace.h.

template<class T>
typedef map<Tkspace*,pair<TArray*,TArray*> > Kspace< T >::TransmissionMap

Definition at line 52 of file Kspace.h.

template<class T>
typedef Vector<T,3> Kspace< T >::Tvec

Definition at line 37 of file Kspace.h.

template<class T>
typedef Array<Tvec> Kspace< T >::TvecArray

Definition at line 38 of file Kspace.h.

template<class T>
typedef vector<Kvolptr> Kspace< T >::Volvec

Definition at line 45 of file Kspace.h.

Constructor & Destructor Documentation

template<class T>
Kspace< T >::Kspace ( a,
tau,
vgmag,
omega,
int  ntheta,
int  nphi,
const bool  full 
)
inline

Definition at line 57 of file Kspace.h.

References Kspace< T >::_freqArray, Kspace< T >::_Kmesh, Kspace< T >::_totvol, Kspace< T >::makeFreqArray(), Array< T >::resize(), and sin().

57  :
58  _length(ntheta*nphi),
59  _Kmesh(),
60  _totvol(0.),
61  _freqArray(0)
62  { //makes gray, isotropic kspace
63 
64  const long double pi=3.141592653589793238462643383279502884197169399;
65  //long double sumX(0);
66  //long double sumY(0);
67  //long double sumZ(0);
68  long double theta;
69  long double phi;
70  long double dtheta=pi/T(ntheta)/2.;
71  long double dphi=2.*pi/T(nphi);
72  long double dk3;
73  const long double Kmax=pi/a;
74  const long double Ktot=pi*pow(Kmax,3.)*4./3./pow((2.*pi),3.);
75  Tvec vg;
76  int count=1;
77  T W=2.;
78 
79  if(full)
80  {
81  W=1.;
82  dtheta*=2;
83  }
84 
85  _freqArray.resize(ntheta*nphi);
86  _freqArray=omega;
87  for(int t=0;t<ntheta;t++)
88  {
89  theta=dtheta*(T(t)+.5);
90  for(int p=0;p<nphi;p++)
91  {
92  phi=dphi*(T(p)+.5);
93  const T xyFac=dtheta-cos(2*theta)*sin(dtheta);
94  dk3=(sin(theta)*sin(dtheta/2.)*(dphi/pi/2.))*Ktot*W;
95  vg[0]=vgmag*xyFac*sin(phi)*sin(dphi/2.)/dk3*pow(Kmax,3.)/3./pow((2.*pi),3.)*W;
96  vg[1]=vgmag*xyFac*cos(phi)*sin(dphi/2.)/dk3*pow(Kmax,3.)/3./pow((2.*pi),3.)*W;
97  vg[2]=vgmag*dphi/2.*sin(2*theta)*sin(dphi)/dk3*pow(Kmax,3.)/3./pow((2.*pi),3.)*W;
98  //vg[0]=vgmag*sin(theta)*sin(phi);
99  //vg[1]=vgmag*sin(theta)*cos(phi);
100  //vg[2]=vgmag*cos(theta);
101  Tmodeptr modeptr=shared_ptr<Tmode>(new Tmode(vg,omega,tau));
102  modeptr->setIndex(count);
103  count++;
104  Kvolptr volptr=shared_ptr<Tkvol>(new Tkvol(modeptr,dk3));
105  volptr->setkvec(vg);
106  _Kmesh.push_back(volptr);
107  _totvol+=dk3;
108  }
109  }
110  makeFreqArray();
111  }
int _length
Definition: Kspace.h:1712
TArray _freqArray
Definition: Kspace.h:1727
void resize(const int newLength)
Definition: Array.h:56
Volvec _Kmesh
Definition: Kspace.h:1713
Tangent sin(const Tangent &a)
Definition: Tangent.h:307
T _totvol
Definition: Kspace.h:1714
shared_ptr< Tkvol > Kvolptr
Definition: Kspace.h:44
shared_ptr< Tmode > Tmodeptr
Definition: Kspace.h:41
void makeFreqArray()
Definition: Kspace.h:163
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
Kspace< T >::Kspace ( )
inline

Definition at line 113 of file Kspace.h.

113  :
114  _freqArray(0),
115  _coarseKspace(NULL)
116  {}
TArray _freqArray
Definition: Kspace.h:1727
Tkspace * _coarseKspace
Definition: Kspace.h:1718
template<class T>
Kspace< T >::Kspace ( const char *  filename,
const int  dimension 
)
inline

Definition at line 181 of file Kspace.h.

References Kspace< T >::_Kmesh, Kspace< T >::_length, Kspace< T >::calcDK3(), and Kspace< T >::makeFreqArray().

181  :
182  _freqArray(0),
183  _coarseKspace(NULL)
184  {
185  ifstream fp_in;
186  fp_in.open(filename,ifstream::in);
187 
188  int modeNum;
189  int kPoints;
190  int directions;
191 
192  cout<<endl<<"Reading BZ file"<<endl;
193  fp_in>>modeNum;
194  cout<<"Number of Polarizations: "<<modeNum<<endl;
195  fp_in>>kPoints;
196  cout<<"Number of Wave Vector Magnitude Discretizations: "<<kPoints<<endl;
197  fp_in>>directions;
198  cout<<"Number of Angular Discretizations: "<<directions<<endl;
199  cout<<"Total Number of K-Space Points: "<<modeNum*kPoints*directions<<endl;
200 
201  _length=kPoints*directions;
202  int count=1;
203 
204  for(int k=0;k<_length;k++)
205  {
206  Kvolptr volptr=shared_ptr<Tkvol>(new Tkvol(modeNum));
207  Modes& modes=volptr->getModes();
208 
209  for(int m=0;m<modeNum;m++)
210  {
211  T Tdummy(0.);
212  T omega(0.);
213  T tau(0.);
214  Tvec vg;
215  Tvec K;
216  T weight(0.);
217  Tmodeptr modeptr=shared_ptr<Tmode>(new Tmode());
218  fp_in>>Tdummy;
219  fp_in>>weight;
220  fp_in>>omega;
221  fp_in>>Tdummy;
222  K[0]=Tdummy;
223 
224  if(dimension==2)
225  {
226  fp_in>>Tdummy;
227  K[1]=Tdummy;
228  K[2]=0.;
229  }
230 
231  if(dimension==3)
232  {
233  fp_in>>Tdummy;
234  K[1]=Tdummy;
235  fp_in>>Tdummy;
236  K[2]=Tdummy;
237  }
238 
239  fp_in>>Tdummy;
240  vg[0]=Tdummy;
241 
242  if(dimension==2)
243  {
244  fp_in>>Tdummy;
245  vg[1]=Tdummy;
246  vg[2]=0.;
247  }
248 
249  if(dimension==3)
250  {
251  fp_in>>Tdummy;
252  vg[1]=Tdummy;
253  fp_in>>Tdummy;
254  vg[2]=Tdummy;
255  }
256 
257  fp_in>>tau;
258 
259  modeptr->getVRef()=vg;
260  modeptr->getTauRef()=tau;
261  modeptr->getOmegaRef()=omega;
262  modeptr->setIndex(count);
263  count++;
264  modes.push_back(modeptr);
265  volptr->setkvec(K);
266  volptr->setdk3(weight);
267  }
268  _Kmesh.push_back(volptr);
269  }
270 
271  fp_in.close();
272  calcDK3();
273  makeFreqArray();
274  }
int _length
Definition: Kspace.h:1712
vector< Tmodeptr > Modes
Definition: Kspace.h:42
T calcDK3()
Definition: Kspace.h:397
TArray _freqArray
Definition: Kspace.h:1727
Volvec _Kmesh
Definition: Kspace.h:1713
shared_ptr< Tkvol > Kvolptr
Definition: Kspace.h:44
Tkspace * _coarseKspace
Definition: Kspace.h:1718
shared_ptr< Tmode > Tmodeptr
Definition: Kspace.h:41
void makeFreqArray()
Definition: Kspace.h:163
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
Kspace< T >::Kspace ( const char *  filename,
const int  dimension,
const bool  normal 
)
inline

Definition at line 276 of file Kspace.h.

References Kspace< T >::_freqArray, Kspace< T >::_Kmesh, Kspace< T >::_length, Kspace< T >::calcDK3(), pmode< T >::getIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::getomega(), Kspace< T >::gettotmodes(), and Array< T >::resize().

276  :
277  _freqArray(0),
278  _coarseKspace(NULL)
279  {
280  ifstream fp_in;
281  fp_in.open(filename,ifstream::in);
282 
283  int modeNum;
284  int kPoints;
285  int directions;
286 
287  cout<<endl<<"Using Shifted Normal Scattering"<<endl;
288  cout<<"Reading BZ file"<<endl;
289  fp_in>>modeNum;
290  cout<<"Number of Polarizations: "<<modeNum<<endl;
291  fp_in>>kPoints;
292  cout<<"Number of Wave Vector Magnitude Discretizations: "<<kPoints<<endl;
293  fp_in>>directions;
294  cout<<"Number of Angular Discretizations: "<<directions<<endl;
295  cout<<"Total Number of K-Space Points: "<<modeNum*kPoints*directions<<endl;
296 
297  _length=kPoints*directions;
298  int count=1;
299 
300  for(int k=0;k<_length;k++)
301  {
302  Kvolptr volptr=shared_ptr<Tkvol>(new Tkvol(modeNum));
303  Modes& modes=volptr->getModes();
304 
305  for(int m=0;m<modeNum;m++)
306  {
307  T Tdummy(0.);
308  T omega(0.);
309  T tau(0.);
310  T tauN(0.);
311  Tvec vg;
312  Tvec K;
313  T weight(0.);
314  Tmodeptr modeptr=shared_ptr<Tmode>(new Tmode());
315  fp_in>>Tdummy;
316  fp_in>>weight;
317  fp_in>>omega;
318  fp_in>>Tdummy;
319  K[0]=Tdummy;
320 
321  if(dimension==2)
322  {
323  fp_in>>Tdummy;
324  K[1]=Tdummy;
325  K[2]=0.;
326  }
327 
328  if(dimension==3)
329  {
330  fp_in>>Tdummy;
331  K[1]=Tdummy;
332  fp_in>>Tdummy;
333  K[2]=Tdummy;
334  }
335 
336  fp_in>>Tdummy;
337  vg[0]=Tdummy;
338 
339  if(dimension==2)
340  {
341  fp_in>>Tdummy;
342  vg[1]=Tdummy;
343  vg[2]=0.;
344  }
345 
346  if(dimension==3)
347  {
348  fp_in>>Tdummy;
349  vg[1]=Tdummy;
350  fp_in>>Tdummy;
351  vg[2]=Tdummy;
352  }
353 
354  fp_in>>tau;
355  fp_in>>tauN;
356 
357  modeptr->getVRef()=vg;
358  modeptr->getTauRef()=tau;
359  modeptr->getTauNRef()=tauN;
360  modeptr->getOmegaRef()=omega;
361  modeptr->setIndex(count);
362  count++;
363  modes.push_back(modeptr);
364  volptr->setkvec(K);
365  volptr->setdk3(weight);
366  }
367  _Kmesh.push_back(volptr);
368  }
369 
370  fp_in.close();
371  calcDK3();
372 
374 
375  for(int k=0;k<_length;k++)
376  {
377  Tkvol& kv=getkvol(k);
378  const int modenum=kv.getmodenum();
379  for(int m=0;m<modenum;m++)
380  {
381  Tmode& mode=kv.getmode(m);
382  const int index=mode.getIndex()-1;
383  _freqArray[index]=mode.getomega();
384  }
385  }
386 
387  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
vector< Tmodeptr > Modes
Definition: Kspace.h:42
T calcDK3()
Definition: Kspace.h:397
TArray _freqArray
Definition: Kspace.h:1727
void resize(const int newLength)
Definition: Array.h:56
Volvec _Kmesh
Definition: Kspace.h:1713
shared_ptr< Tkvol > Kvolptr
Definition: Kspace.h:44
int gettotmodes()
Definition: Kspace.h:393
Tkspace * _coarseKspace
Definition: Kspace.h:1718
shared_ptr< Tmode > Tmodeptr
Definition: Kspace.h:41
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
Kspace< T >::Kspace ( const Kspace< T > &  )
private

Member Function Documentation

template<class T>
void Kspace< T >::addFAS ( const int  c,
TArray Bvec 
)
inline

Definition at line 1273 of file Kspace.h.

References Kspace< T >::_FASCorrection, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

Referenced by COMETDiscretizer< T >::addFAS().

1274  {
1275  int start=getGlobalIndex(c,0);
1276  int end=start+gettotmodes();
1277  for(int i=start; i<end; i++)
1278  Bvec[i-start]-=(*_FASCorrection)[i];
1279  }
TArrPtr _FASCorrection
Definition: Kspace.h:1724
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
template<class T>
void Kspace< T >::addFASint ( const int  c,
TArray Bvec 
)
inline

Definition at line 1281 of file Kspace.h.

References Kspace< T >::_FASCorrection, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

Referenced by COMETInterface< T >::updateOtherGhost(), and COMETInterface< T >::updateResid().

1282  {
1283  int start=getGlobalIndex(c,0);
1284  int end=start+gettotmodes();
1285  for(int i=start; i<end; i++)
1286  Bvec[i-start]+=(*_FASCorrection)[i];
1287  }
TArrPtr _FASCorrection
Definition: Kspace.h:1724
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
template<class T>
void Kspace< T >::addSource ( const int  c,
TArray BVec,
const T  cv 
)
inline

Definition at line 1693 of file Kspace.h.

References Kspace< T >::_Source, and Kspace< T >::getGlobalIndex().

Referenced by COMETDiscretizer< T >::COMETSource().

1694  {
1695  if(!(_Source==NULL))
1696  {
1697  const int beg=getGlobalIndex(c,0);
1698  const int fin=getGlobalIndex(c+1,0);
1699  int index(0);
1700  for(int i=beg;i<fin;i++)
1701  {
1702  BVec[index]+=(*_Source)[i]*cv;
1703  index++;
1704  }
1705  }
1706  }
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
TArrPtr _Source
Definition: Kspace.h:1721
template<class T>
T Kspace< T >::calcBallisticInterface ( Tkspace kspace1,
const Tvec An,
const T  T0,
const T  T1 
)
inline

Definition at line 1049 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calce0(), Kspace< T >::findTransmission(), kvol< T >::getdk3(), Kspace< T >::getDK3(), Kspace< T >::getkvol(), Kspace< T >::getlength(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::getomega(), and pmode< T >::getv().

1050  {
1051  T heatRate0(0.);
1052  T heatRate1(0.);
1053  const int k1len=kspace1.getlength();
1054  const T DK0=getDK3();
1055 
1056  for(int k=0;k<_length;k++)
1057  {
1058  Tkvol& kvol=getkvol(k);
1059  T dk3=kvol.getdk3();
1060  const int numModes=kvol.getmodenum();
1061  for(int m=0;m<numModes;m++)
1062  {
1063  Tmode& mode=kvol.getmode(m);
1064  Tvec vg=mode.getv();
1065  const T VdotA=An[0]*vg[0]+An[1]*vg[1]+An[2]*vg[2];
1066 
1067  if(VdotA>0.)
1068  {
1069  const T e0=mode.calce0(T0);
1070  const T t01=findTransmission(kspace1,mode.getomega());
1071  heatRate0+=t01*VdotA*dk3*e0/DK0;
1072  }
1073  }
1074  }
1075 
1076  for(int k=0;k<k1len;k++)
1077  {
1078  Tkvol& kvol=kspace1.getkvol(k);
1079  T dk3=kvol.getdk3();
1080  const int numModes=kvol.getmodenum();
1081  for(int m=0;m<numModes;m++)
1082  {
1083  Tmode& mode=kvol.getmode(m);
1084  Tvec vg=mode.getv();
1085  const T VdotA=An[0]*vg[0]+An[1]*vg[1]+An[2]*vg[2];
1086 
1087  if(VdotA<0.)
1088  {
1089  const T e0=mode.calce0(T1);
1090  const T t10=kspace1.findTransmission(*this,mode.getomega());
1091  heatRate1+=t10*VdotA*dk3*e0/DK0;
1092  }
1093  }
1094  }
1095 
1096  heatRate1/=heatRate0;
1097  heatRate1=1+heatRate1;
1098  heatRate1*=heatRate0*DK0;
1099 
1100  return heatRate1;
1101  }
int _length
Definition: Kspace.h:1712
T findTransmission(Tkspace &toKspace, const T freq)
Definition: Kspace.h:1008
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T getDK3() const
Definition: Kspace.h:408
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcBandTemp ( const T  guess,
const T  eSum,
const IntArray kpts,
const IntArray mpts 
)
inline

Definition at line 1103 of file Kspace.h.

References pmode< T >::calcde0dT(), pmode< T >::calce0(), fabs(), kvol< T >::getdk3(), Kspace< T >::getkvol(), Array< T >::getLength(), and kvol< T >::getmode().

Referenced by COMETModel< T >::calcBandTemps().

1104  {
1105  T newguess(guess);
1106  T deltaT=1.;
1107  int iters=0;
1108  if(kpts.getLength()>0)
1109  {
1110  while((deltaT>1e-6)&&(iters<10))
1111  {
1112  T e0sum(0);
1113  T de0sum(0);
1114  for(int i=0;i<kpts.getLength();i++)
1115  {
1116  const int k=kpts[i];
1117  const int m=mpts[i];
1118  T dk3=getkvol(k).getdk3();
1119  Tmode& mode=getkvol(k).getmode(m);
1120  e0sum+=mode.calce0(newguess)*dk3;
1121  de0sum+=mode.calcde0dT(newguess)*dk3;
1122  }
1123  deltaT=(e0sum-eSum)/de0sum;
1124  newguess-=deltaT;
1125  deltaT=fabs(deltaT)/newguess;
1126  iters++;
1127  }
1128  return newguess;
1129  }
1130  else
1131  return 0;
1132  }
T calce0(T Tl)
Definition: pmode.h:88
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Tmode & getmode(int n) const
Definition: kvol.h:44
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
pmode< T > Tmode
Definition: Kspace.h:40
T getdk3()
Definition: kvol.h:42
template<class T>
T Kspace< T >::calcDiffuseE ( Tkspace kspace1,
const Tvec An,
const T  T0,
const T  T1 
)
inline

Definition at line 1134 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calce0(), Kspace< T >::findTransmission(), kvol< T >::getdk3(), Kspace< T >::getDK3(), Kspace< T >::getkvol(), Kspace< T >::getlength(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::getomega(), and pmode< T >::getv().

1135  {
1136  T heatRate0(0.);
1137  T heatRate1(0.);
1138  const int k1len=kspace1.getlength();
1139  const T DK0=getDK3();
1140 
1141  for(int k=0;k<_length;k++)
1142  {
1143  Tkvol& kvol=getkvol(k);
1144  T dk3=kvol.getdk3();
1145  const int numModes=kvol.getmodenum();
1146  for(int m=0;m<numModes;m++)
1147  {
1148  Tmode& mode=kvol.getmode(m);
1149  Tvec vg=mode.getv();
1150  const T VdotA=An[0]*vg[0]+An[1]*vg[1]+An[2]*vg[2];
1151 
1152  if(VdotA>0.)
1153  {
1154  const T e0=mode.calce0(T0);
1155  const T t01=findTransmission(kspace1,mode.getomega());
1156  heatRate0+=t01*VdotA*dk3*e0/DK0;
1157  }
1158  }
1159  }
1160 
1161  T sumVdotA(0.);
1162 
1163  for(int k=0;k<k1len;k++)
1164  {
1165  Tkvol& kvol=kspace1.getkvol(k);
1166  T dk3=kvol.getdk3();
1167  const int numModes=kvol.getmodenum();
1168  for(int m=0;m<numModes;m++)
1169  {
1170  Tmode& mode=kvol.getmode(m);
1171  Tvec vg=mode.getv();
1172  const T VdotA=An[0]*vg[0]+An[1]*vg[1]+An[2]*vg[2];
1173 
1174  if(VdotA<0.)
1175  {
1176  const T e0=mode.calce0(T1);
1177  const T t10=kspace1.findTransmission(*this,mode.getomega());
1178  heatRate1-=(1.-t10)*VdotA*dk3*e0/DK0;
1179  }
1180  else
1181  sumVdotA+=VdotA*dk3/DK0;
1182  }
1183  }
1184 
1185  heatRate1=heatRate0/sumVdotA+heatRate1/sumVdotA;
1186 
1187  return heatRate1;
1188  }
int _length
Definition: Kspace.h:1712
T findTransmission(Tkspace &toKspace, const T freq)
Definition: Kspace.h:1008
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T getDK3() const
Definition: Kspace.h:408
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcDK3 ( )
inline

Definition at line 397 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), and Kspace< T >::getkvol().

Referenced by Kspace< T >::Kspace().

398  {
399  T r(0.0);
400  for(int k=0;k<_length;k++)
401  {
402  Tkvol& kv=getkvol(k);
403  r+=kv.getdk3();
404  }
405  _totvol=r;
406  return r;
407  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T _totvol
Definition: Kspace.h:1714
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcLatTemp ( const int  c)
inline

Definition at line 461 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, Kspace< T >::calcTemp(), kvol< T >::getdk3(), Kspace< T >::getGlobalIndex(), Kspace< T >::getkvol(), and kvol< T >::getmodenum().

Referenced by COMETModel< T >::makeNonEqTemp().

462  {
463  int cInd(getGlobalIndex(c,0));
464  T esum(0);
465  T guess(300);
466  for(int k=0;k<_length;k++)
467  {
468  Tkvol& kv=getkvol(k);
469  const int modenum=kv.getmodenum();
470  T dk3=kv.getdk3();
471  for(int m=0;m<modenum;m++)
472  {
473  esum+=(*_e)[cInd]*dk3/_totvol;
474  cInd++;
475  }
476  }
477  esum*=_totvol;
478  calcTemp(guess,esum);
479  return guess;
480 
481  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
void calcTemp(T &guess, const T e_sum, const Tvec An)
Definition: Kspace.h:443
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
T _totvol
Definition: Kspace.h:1714
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcModeTemp ( guess,
const T  e_sum,
const T  m 
)
inline

Definition at line 501 of file Kspace.h.

References fabs(), and Kspace< T >::gete0().

Referenced by COMETModel< T >::calcModeTemps().

502  {
503  T e0;
504  T de0dT;
505  T deltaT=1.;
506  T newguess;
507  int iters=0;
508  while((deltaT>1e-6)&&(iters<10))
509  {
510  gete0(guess, e0, de0dT,m);
511  deltaT=(e0-e_sum)/de0dT;
512  newguess=guess-deltaT;
513  deltaT=fabs(deltaT/guess);
514  guess=newguess;
515  iters++;
516  }
517  return guess;
518  }
void gete0(const T Tguess, T &e0, T &de0dT, const Tvec An)
Definition: Kspace.h:564
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
template<class T>
T Kspace< T >::calcPhononTemp ( const int  c,
const int  index,
guess 
)
inline

Definition at line 520 of file Kspace.h.

References pmode< T >::calcde0dT(), pmode< T >::calce0(), fabs(), Kspace< T >::gete(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

521  {
522  const int modenum=getkvol(0).getmodenum();
523  const int m=index%modenum;
524  const int k=floor(index/modenum);
525  Tkvol& kv=getkvol(k);
526  Tmode& mode=kv.getmode(m);
527  const T e=gete(c,index);
528  T deltaT=1.;
529  int iters=0;
530  T inguess=guess;
531 
532  while((deltaT>1e-6)&&(iters<10))
533  {
534  T e0=mode.calce0(inguess);
535  T de0dT=mode.calcde0dT(inguess);
536  deltaT=(e0-e)/de0dT;
537  inguess=guess-deltaT;
538  deltaT=fabs(deltaT/guess);
539  guess=inguess;
540  iters++;
541  }
542  return guess;
543 
544  }
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
int getmodenum()
Definition: kvol.h:43
T & gete(const int cell, const int count)
Definition: Kspace.h:1211
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcSpecificHeat ( Tl)
inline

Definition at line 668 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

669  {
670  T r(0.0);
671  for(int k=0;k<_length;k++)
672  {
673  Tkvol& kv=getkvol(k);
674  const int modenum=kv.getmodenum();
675  T dk3=kv.getdk3();
676  for(int m=0;m<modenum;m++)
677  {
678  Tmode& mode=kv.getmode(m);
679  r+=mode.calcde0dT(Tl)*dk3;
680  }
681  }
682  return r;
683  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcSpecificHeat ( Tl,
const int  m 
)
inline

Definition at line 685 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getkvol(), and kvol< T >::getmode().

686  {
687  T r(0.0);
688  for(int k=0;k<_length;k++)
689  {
690  Tkvol& kv=getkvol(k);
691  T dk3=kv.getdk3();
692  Tmode& mode=kv.getmode(m);
693  r+=mode.calcde0dT(Tl)*dk3;
694  }
695  return r;
696  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::calcTauTot ( )
inline

Definition at line 409 of file Kspace.h.

References Kspace< T >::_length, kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::gettau().

Referenced by COMETModel< T >::updateTL().

410  { // returns sum(dk3/tau)
411  T tauTot=0.;
412  for(int k=0;k<_length;k++)
413  {
414  Tkvol& kv=getkvol(k);
415  const int modenum=kv.getmodenum();
416  T dk3=kv.getdk3();
417  for(int m=0;m<modenum;m++)
418  {
419  Tmode& mode=kv.getmode(m);
420  tauTot+=dk3/mode.gettau();
421  }
422  }
423  return tauTot;
424  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::calcTemp ( T &  guess,
const T  e_sum,
const Tvec  An 
)
inline

Definition at line 443 of file Kspace.h.

References fabs(), and Kspace< T >::gete0v().

Referenced by Kspace< T >::calcLatTemp(), COMETInterface< T >::findWallTemp(), and COMETDiscretizer< T >::updateGhostCoarse().

444  {
445  T e0;
446  T de0dT;
447  T deltaT=1.;
448  T newguess;
449  int iters=0;
450  while((deltaT>1e-6)&&(iters<10))
451  {
452  gete0v(guess, e0, de0dT,An);
453  deltaT=e0/de0dT-e_sum/de0dT;
454  newguess=guess-deltaT;
455  deltaT=fabs(deltaT/guess);
456  guess=newguess;
457  iters++;
458  }
459  }
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
void gete0v(const T Tguess, T &e0, T &de0dT, const Tvec An)
Definition: Kspace.h:589
template<class T>
void Kspace< T >::calcTemp ( T &  guess,
const T  e_sum 
)
inline

Definition at line 483 of file Kspace.h.

References fabs(), and Kspace< T >::gete0().

484  {
485  T e0;
486  T de0dT;
487  T deltaT=1.;
488  T newguess;
489  int iters=0;
490  while((deltaT>1e-20)&&(iters<100))
491  {
492  gete0(guess, e0, de0dT);
493  deltaT=e0/de0dT-e_sum/de0dT;
494  newguess=guess-deltaT;
495  deltaT=fabs(deltaT/guess);
496  guess=newguess;
497  iters++;
498  }
499  }
void gete0(const T Tguess, T &e0, T &de0dT, const Tvec An)
Definition: Kspace.h:564
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
template<class T>
void Kspace< T >::CopyKspace ( Tkspace copyFromKspace)
inline

Definition at line 781 of file Kspace.h.

References Kspace< T >::_Kmesh, Kspace< T >::_length, Kspace< T >::_totvol, Kspace< T >::getDK3(), Kspace< T >::getDOSptr(), Kspace< T >::getkvol(), Kspace< T >::getlength(), and Kspace< T >::setDOS().

Referenced by COMETModel< T >::MakeNewKspaces().

782  {
783  _length=copyFromKspace.getlength();
784  _totvol=copyFromKspace.getDK3();
785  _Kmesh.clear();
786  for(int i=0;i<_length;i++)
787  {
788  Kvolptr newKvol=Kvolptr(new Tkvol());
789  newKvol->copyKvol(copyFromKspace.getkvol(i));
790  _Kmesh.push_back(newKvol);
791  }
792 
793  setDOS(*copyFromKspace.getDOSptr());
794 
795  }
int _length
Definition: Kspace.h:1712
Volvec _Kmesh
Definition: Kspace.h:1713
void setDOS(DensityOfStates< T > &DOS)
Definition: Kspace.h:1205
T _totvol
Definition: Kspace.h:1714
shared_ptr< Tkvol > Kvolptr
Definition: Kspace.h:44
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::createSyncGather ( const StorageSite site)
inline

Definition at line 1382 of file Kspace.h.

References Kspace< T >::_e, Kspace< T >::_ghostArrays, StorageSite::getGatherMap(), Array< T >::getLength(), and Kspace< T >::gettotmodes().

Referenced by Kspace< T >::syncLocal().

1383  {
1384  const StorageSite::GatherMap& gatherMap = site.getGatherMap();
1385 
1386  foreach(const StorageSite::GatherMap::value_type& mpos, gatherMap)
1387  {
1388  const StorageSite& oSite = *mpos.first;
1389  EntryIndex e(&oSite, &site);
1390  const Array<int>& toIndices = *(mpos.second);
1391  if (_ghostArrays.find(e) == _ghostArrays.end())
1392  _ghostArrays[e] = _e->newSizedClone(toIndices.getLength()*gettotmodes());
1393  }
1394 
1395  }
TArrPtr _e
Definition: Kspace.h:1719
pair< const StorageSite *, const StorageSite * > EntryIndex
Definition: Kspace.h:54
const GatherMap & getGatherMap() const
Definition: StorageSite.h:59
int gettotmodes()
Definition: Kspace.h:393
map< const StorageSite *, shared_ptr< Array< int > > > GatherMap
Definition: StorageSite.h:24
GhostArrayMap _ghostArrays
Definition: Kspace.h:1726
int getLength() const
Definition: Array.h:87
template<class T>
T Kspace< T >::FindBallisticHeatRate ( const Tvec  An,
const T  T1,
const T  T2 
)
inline

Definition at line 797 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calce0(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::getv().

798  {
799  T q=0.;
800  for(int k=0;k<_length;k++)
801  {
802  Tkvol& kvol=getkvol(k);
803  const T dk3=kvol.getdk3();
804  const int modes=kvol.getmodenum();
805  for(int m=0;m<modes;m++)
806  {
807  Tmode& mode=kvol.getmode(m);
808  Tvec vg=mode.getv();
809  T flux=vg[0]*An[0]+vg[1]*An[1]+vg[2]*An[2];
810  T e0;
811  if(flux>0.)
812  e0=mode.calce0(T2);
813  else
814  e0=mode.calce0(T1);
815  q+=flux*e0*dk3;
816  }
817  }
818  return q;
819  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::findKnStats ( const T  length)
inline

Definition at line 698 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::gettau(), pmode< T >::getv(), and sqrt().

699  {
700  T AveKn(0.0);
701  T maxKn(0.0);
702  T minKn;
703 
704  Tvec vg1=getkvol(0).getmode(0).getv();
705  T vmag1=sqrt(pow(vg1[0],2)+pow(vg1[1],2)+pow(vg1[2],2));
706  T tau1=getkvol(0).getmode(0).gettau();
707  T npol(getkvol(0).getmodenum());
708  minKn=vmag1*tau1;
709 
710  for(int k=0;k<_length;k++)
711  {
712  Tkvol& kv=getkvol(k);
713  const int modenum=kv.getmodenum();
714  T dk3=kv.getdk3();
715  for(int m=0;m<modenum;m++)
716  {
717  Tmode& mode=kv.getmode(m);
718  Tvec vg=mode.getv();
719  T vmag=sqrt(pow(vg[0],2)+pow(vg[1],2)+pow(vg[2],2));
720  T tau=mode.gettau();
721  AveKn+=vmag*tau*dk3/_totvol;
722  if(vmag*tau>maxKn)
723  maxKn=vmag*tau;
724  if(vmag*tau<minKn)
725  minKn=vmag*tau;
726 
727  }
728  }
729  AveKn/=length;
730  AveKn/=npol;
731  maxKn/=length;
732  minKn/=length;
733 
734  cout<<"Average Kn: "<<AveKn<<endl;
735  cout<<"Maximum Kn: "<<maxKn<<endl;
736  cout<<"Minimum Kn: "<<minKn<<endl;
737 
738  return AveKn;
739 
740  }
int _length
Definition: Kspace.h:1712
Tvec getv()
Definition: pmode.h:59
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Tmode & getmode(int n) const
Definition: kvol.h:44
Tangent sqrt(const Tangent &a)
Definition: Tangent.h:317
T _totvol
Definition: Kspace.h:1714
T gettau()
Definition: pmode.h:61
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::findSpecs ( const Tvec  n,
const int  m,
const int  k,
Refl_pair refls 
)
inline

Definition at line 742 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::getkvol(), kvol< T >::getmode(), and pmode< T >::getv().

Referenced by PhononModel< T >::init(), and COMETModel< T >::init().

743  {
744 
745  Tkvol& kvol=getkvol(k);
746  Tmode& mode=kvol.getmode(m);
747  Tvec kvec=mode.getv();
748  const T kmag=pow(kvec[0]*kvec[0]+
749  kvec[1]*kvec[1]+kvec[2]*kvec[2],.5);
750  Tvec nk(kvec);
751  nk/=kmag;
752 
753  const T kdotn(kvec[0]*n[0]+kvec[1]*n[1]+kvec[2]*n[2]);
754 
755  Tvec target=kvec-n*(2.*kdotn);
756  T minDif(1e50);
757  int m1;
758 
759  for(int k1=0;k1<_length;k1++)
760  {
761  Tkvol& kvol1=getkvol(k1);
762  Tmode& mode1=kvol1.getmode(m);
763  const Tvec kvec1=mode1.getv();
764  const Tvec dif(target-kvec1);
765  const T difMag=pow(dif[0]*dif[0]+dif[1]*dif[1]+dif[2]*dif[2],.5);
766 
767  if(difMag<minDif)
768  {
769  m1=k1;
770  minDif=difMag;
771  }
772 
773  }
774 
775  refls.first.first=1.;
776  refls.second.first=1.;
777  refls.first.second=m1; //refls.first-- to whom the mode dumps energy
778  refls.second.second=-1; //refls.second-- from whom the mode receices energy
779  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T Kspace< T >::findTransmission ( Tkspace toKspace,
const T  freq 
)
inline

Definition at line 1008 of file Kspace.h.

References Kspace< T >::_transMap, and Array< T >::getLength().

Referenced by Kspace< T >::calcBallisticInterface(), and Kspace< T >::calcDiffuseE().

1009  {
1010  TArray& freqBins=*_transMap[&toKspace].first;
1011  TArray& trans=*_transMap[&toKspace].second;
1012 
1013  int minInd=0;
1014  int maxInd=freqBins.getLength()-1;
1015 
1016  if(freq<freqBins[minInd] || freq>freqBins[maxInd])
1017  throw CException("Frequency not in the given range!");
1018 
1019  while(1)
1020  {
1021  int mid=floor((minInd+maxInd)/2.);
1022  T midFreq=freqBins[mid];
1023 
1024  if(freq>midFreq)
1025  {
1026  minInd=mid;
1027  if(freq<=freqBins[minInd+1])
1028  return trans[minInd];
1029  }
1030  else
1031  {
1032  maxInd=mid;
1033  if(freq>freqBins[maxInd-1])
1034  return trans[maxInd-1];
1035  }
1036  }
1037 
1038  }
Array< T > TArray
Definition: Kspace.h:35
TransmissionMap _transMap
Definition: Kspace.h:1715
template<class T>
int Kspace< T >::get_request_size ( const StorageSite site)
inline

Definition at line 1437 of file Kspace.h.

References StorageSite::getGatherProcID(), and StorageSite::getScatterMap().

Referenced by Kspace< T >::syncLocal().

1438  {
1439  int indx(0);
1440  const StorageSite::ScatterMap& scatterMap = site.getScatterMap();
1441  foreach(const StorageSite::ScatterMap::value_type& mpos, scatterMap)
1442  {
1443  const StorageSite& oSite = *mpos.first;
1444  //checking if storage site is only site or ghost site, we only communicate ghost site ( oSite.getCount() == -1 )
1445  if ( oSite.getGatherProcID() != -1 )
1446  indx++;
1447  }
1448  return indx++;
1449  }
int getGatherProcID() const
Definition: StorageSite.h:83
const ScatterMap & getScatterMap() const
Definition: StorageSite.h:58
map< const StorageSite *, shared_ptr< Array< int > > > ScatterMap
Definition: StorageSite.h:23
template<class T>
Tkspace* Kspace< T >::getCoarseKspace ( )
inline

Definition at line 1209 of file Kspace.h.

References Kspace< T >::_coarseKspace.

Referenced by Kspace< T >::giveTransmissions().

1209 {return _coarseKspace;}
Tkspace * _coarseKspace
Definition: Kspace.h:1718
template<class T>
T Kspace< T >::getde0taudT ( const int  c,
Tl 
)
inline

Definition at line 646 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getGlobalIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

Referenced by COMETDiscretizer< T >::COMETEquilibrium(), and COMETDiscretizer< T >::COMETShifted().

647  {
648  const T hbar=6.582119e-16; // (eV s)
649 
650  T de0taudT=0.;
651  int index=getGlobalIndex(c,0);
652  for(int k=0;k<_length;k++)
653  {
654  Tkvol& kv=getkvol(k);
655  const int modenum=kv.getmodenum();
656  T dk3=kv.getdk3();
657  for(int m=0;m<modenum;m++)
658  {
659  Tmode& mode=kv.getmode(m);
660  //T energy=hbar*mode.getomega();
661  de0taudT+=mode.calcde0dT(Tl)*dk3/_totvol/(*_Tau)[index];
662  index++;
663  }
664  }
665  return de0taudT;
666  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
T _totvol
Definition: Kspace.h:1714
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T& Kspace< T >::gete ( const int  cell,
const int  count 
)
inline
template<class T>
void Kspace< T >::gete0 ( const T  Tguess,
T &  e0,
T &  de0dT,
const Tvec  An 
)
inline

Definition at line 564 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, pmode< T >::calcde0dT(), pmode< T >::calce0(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::getv().

Referenced by Kspace< T >::calcModeTemp(), and Kspace< T >::calcTemp().

565  {
566  e0=0.;
567  de0dT=0.;
568  for(int k=0;k<_length;k++)
569  {
570  Tkvol& kv=getkvol(k);
571  const int modenum=kv.getmodenum();
572  T dk3=kv.getdk3();
573  for(int m=0;m<modenum;m++)
574  {
575  Tmode& mode=kv.getmode(m);
576  Tvec vg=mode.getv();
577  T vdota=vg[0]*An[0]+vg[1]*An[1]+vg[2]*An[2];
578  if(vdota>0)
579  {
580  e0+=mode.calce0(Tguess)*dk3/_totvol;
581  de0dT+=mode.calcde0dT(Tguess)*dk3/_totvol;
582  }
583  }
584  }
585  e0*=_totvol;
586  de0dT*=_totvol;
587  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T _totvol
Definition: Kspace.h:1714
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::gete0 ( const T  Tguess,
T &  e0,
T &  de0dT 
)
inline

Definition at line 614 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), pmode< T >::calce0(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

615  {
616  e0=0.;
617  de0dT=0.;
618  for(int k=0;k<_length;k++)
619  {
620  Tkvol& kv=getkvol(k);
621  const int modenum=kv.getmodenum();
622  T dk3=kv.getdk3();
623  for(int m=0;m<modenum;m++)
624  {
625  Tmode& mode=kv.getmode(m);
626  e0+=mode.calce0(Tguess)*dk3;
627  de0dT+=mode.calcde0dT(Tguess)*dk3;
628  }
629  }
630  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::gete0 ( const T  Tguess,
T &  e0,
T &  de0dT,
const T  m 
)
inline

Definition at line 632 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), pmode< T >::calce0(), kvol< T >::getdk3(), Kspace< T >::getkvol(), and kvol< T >::getmode().

633  {
634  e0=0.;
635  de0dT=0.;
636  for(int k=0;k<_length;k++)
637  {
638  Tkvol& kv=getkvol(k);
639  T dk3=kv.getdk3();
640  Tmode& mode=kv.getmode(m);
641  e0+=mode.calce0(Tguess)*dk3;
642  de0dT+=mode.calcde0dT(Tguess)*dk3;
643  }
644  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T& Kspace< T >::gete0 ( const int  cell,
const int  count 
)
inline

Definition at line 1212 of file Kspace.h.

References Kspace< T >::_e0, and Kspace< T >::gettotmodes().

1212 {return (*_e0)[cell*gettotmodes()+count];}
int gettotmodes()
Definition: Kspace.h:393
TArrPtr _e0
Definition: Kspace.h:1720
template<class T>
void Kspace< T >::gete0_tau ( T &  Tguess,
T &  e0tau,
T &  de0taudT 
)
inline

Definition at line 546 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0taudT(), pmode< T >::calce0tau(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

Referenced by Kspace< T >::NewtonSolve().

547  {
548  e0tau=0.;
549  de0taudT=0.;
550  for(int k=0;k<_length;k++)
551  {
552  Tkvol& kv=getkvol(k);
553  const int modenum=kv.getmodenum();
554  T dk3=kv.getdk3();
555  for(int m=0;m<modenum;m++)
556  {
557  Tmode& mode=kv.getmode(m);
558  e0tau+=mode.calce0tau(Tguess)*dk3;
559  de0taudT+=mode.calcde0taudT(Tguess)*dk3;
560  }
561  }
562  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
TArray& Kspace< T >::gete0Array ( )
inline

Definition at line 1225 of file Kspace.h.

References Kspace< T >::_e0.

Referenced by COMETModel< T >::sete0().

1225 {return *_e0;}
TArrPtr _e0
Definition: Kspace.h:1720
template<class T>
void Kspace< T >::gete0CellVals ( const int  c,
TArray o 
)
inline

Definition at line 1240 of file Kspace.h.

References Kspace< T >::_e0, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

1241  {
1242  int start=getGlobalIndex(c,0);
1243  int end=start+gettotmodes();
1244  for(int i=start; i<end; i++)
1245  o[i-start]=(*_e0)[i];
1246  }
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
TArrPtr _e0
Definition: Kspace.h:1720
template<class T>
ArrayBase* Kspace< T >::gete0CellValsPy ( const T  Tl)
inline

Definition at line 1603 of file Kspace.h.

References Kspace< T >::getEquilibriumArray(), Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1604  {
1605  TArray* e=new TArray(gettotmodes());
1606  getEquilibriumArray(*e,Tl);
1607  weightArray(*e);
1608  return e;
1609  }
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
void getEquilibriumArray(TArray &vals, const T Tl)
Definition: Kspace.h:1451
int gettotmodes()
Definition: Kspace.h:393
template<class T>
ArrayBase* Kspace< T >::gete0CellVars ( const int  c)
inline

Definition at line 1583 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), Kspace< T >::getGlobalIndex(), Kspace< T >::getkvol(), kvol< T >::getmodenum(), and Kspace< T >::gettotmodes().

1584  {
1585  TArray* e=new TArray(gettotmodes());
1586  int cnt=getGlobalIndex(c,0);
1587  int index=0;
1588  for(int k=0;k<_length;k++)
1589  {
1590  Tkvol& kv=getkvol(k);
1591  const T dk3=kv.getdk3();
1592  const int modenum=kv.getmodenum();
1593  for(int m=0;m<modenum;m++)
1594  {
1595  (*e)[index]=(*_e0)[cnt]*(dk3/_totvol);
1596  index++;
1597  cnt++;
1598  }
1599  }
1600  return e;
1601  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
Array< T > TArray
Definition: Kspace.h:35
T _totvol
Definition: Kspace.h:1714
int gettotmodes()
Definition: Kspace.h:393
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::gete0v ( const T  Tguess,
T &  e0,
T &  de0dT,
const Tvec  An 
)
inline

Definition at line 589 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, pmode< T >::calcde0dT(), pmode< T >::calce0(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::getv().

Referenced by Kspace< T >::calcTemp().

590  {
591  e0=0.;
592  de0dT=0.;
593  for(int k=0;k<_length;k++)
594  {
595  Tkvol& kv=getkvol(k);
596  const int modenum=kv.getmodenum();
597  T dk3=kv.getdk3();
598  for(int m=0;m<modenum;m++)
599  {
600  Tmode& mode=kv.getmode(m);
601  Tvec vg=mode.getv();
602  T vdota=vg[0]*An[0]+vg[1]*An[1]+vg[2]*An[2];
603  if(vdota>0)
604  {
605  e0+=mode.calce0(Tguess)*dk3/_totvol*vdota;
606  de0dT+=mode.calcde0dT(Tguess)*dk3/_totvol*vdota;
607  }
608  }
609  }
610  e0*=_totvol;
611  de0dT*=_totvol;
612  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T _totvol
Definition: Kspace.h:1714
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::geteCellVals ( const int  c,
TArray o 
)
inline

Definition at line 1232 of file Kspace.h.

References Kspace< T >::_e, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

Referenced by COMETInterface< T >::findWallTemp(), Kspace< T >::geteCellValsPy(), and COMETInterface< T >::makeValueArray().

1233  {
1234  int start=getGlobalIndex(c,0);
1235  int end=start+gettotmodes();
1236  for(int i=start; i<end; i++)
1237  o[i-start]=(*_e)[i];
1238  }
TArrPtr _e
Definition: Kspace.h:1719
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
template<class T>
ArrayBase* Kspace< T >::geteCellValsPy ( const int  c)
inline

Definition at line 1575 of file Kspace.h.

References Kspace< T >::geteCellVals(), Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1576  {
1577  TArray* e=new TArray(gettotmodes());
1578  geteCellVals(c,*e);
1579  weightArray(*e);
1580  return e;
1581  }
void geteCellVals(const int c, TArray &o)
Definition: Kspace.h:1232
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
int gettotmodes()
Definition: Kspace.h:393
template<class T>
ArrayBase* Kspace< T >::getEmptyArray ( const int  length)
inline

Definition at line 1676 of file Kspace.h.

1677  {return new TArray(length);}
Array< T > TArray
Definition: Kspace.h:35
template<class T>
void Kspace< T >::getEquilibriumArray ( TArray vals,
const T  Tl 
)
inline

Definition at line 1451 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calce0(), pmode< T >::getIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

Referenced by Kspace< T >::gete0CellValsPy().

1452  {
1453  for(int k=0;k<_length;k++)
1454  {
1455  Tkvol& kv=getkvol(k);
1456  const int modenum=kv.getmodenum();
1457  for(int m=0;m<modenum;m++)
1458  {
1459  Tmode& mode=kv.getmode(m);
1460  const int index=mode.getIndex()-1;
1461  vals[index]=mode.calce0(Tl);
1462  }
1463  }
1464  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T& Kspace< T >::getFas ( const int  cell,
const int  count 
)
inline

Definition at line 1215 of file Kspace.h.

References Kspace< T >::_FASCorrection, and Kspace< T >::gettotmodes().

1215 {return (*_FASCorrection)[cell*gettotmodes()+count];}
TArrPtr _FASCorrection
Definition: Kspace.h:1724
int gettotmodes()
Definition: Kspace.h:393
template<class T>
TArray& Kspace< T >::getFASArray ( )
inline

Definition at line 1229 of file Kspace.h.

References Kspace< T >::_FASCorrection.

Referenced by COMETModel< T >::injectResid().

1229 {return *_FASCorrection;}
TArrPtr _FASCorrection
Definition: Kspace.h:1724
template<class T>
TArray& Kspace< T >::getFreqArray ( )
inline

Definition at line 1466 of file Kspace.h.

References Kspace< T >::_freqArray.

1466 {return _freqArray;}
TArray _freqArray
Definition: Kspace.h:1727
template<class T>
ArrayBase* Kspace< T >::getFreqArrayPy ( )
inline

Definition at line 1611 of file Kspace.h.

References Kspace< T >::_freqArray, and Kspace< T >::gettotmodes().

1612  {
1613  TArray* e=new TArray(gettotmodes());
1614  (*e)=_freqArray;
1615  return e;
1616  }
TArray _freqArray
Definition: Kspace.h:1727
Array< T > TArray
Definition: Kspace.h:35
int gettotmodes()
Definition: Kspace.h:393
template<class T>
ArrayBase* Kspace< T >::getFullsources ( const int  c)
inline

Definition at line 1528 of file Kspace.h.

References Kspace< T >::_ScattKernel, Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1529  {
1530  TArray* S=new TArray(gettotmodes());
1531  TArray ds(gettotmodes());
1532  _ScattKernel->updateSource2(c,*S,ds);
1533  weightArray(*S);
1534  return S;
1535  }
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
int gettotmodes()
Definition: Kspace.h:393
template<class T>
int Kspace< T >::getGlobalIndex ( const int  cell,
const int  count 
)
inline

Definition at line 1216 of file Kspace.h.

References Kspace< T >::gettotmodes().

Referenced by Kspace< T >::addFAS(), Kspace< T >::addFASint(), Kspace< T >::addSource(), COMETBoundary< T >::applyTemperatureWallCoarse(), COMETBoundary< T >::applyTemperatureWallFine(), COMETModel< T >::binwiseHeatFluxIntegral(), Kspace< T >::calcLatTemp(), COMETDiscretizer< T >::COMETCollision(), COMETDiscretizer< T >::COMETConvectionCoarse(), COMETDiscretizer< T >::COMETConvectionFine(), COMETDiscretizer< T >::COMETEquilibrium(), COMETDiscretizer< T >::COMETFullScatt(), COMETModel< T >::correctSolution(), COMETDiscretizer< T >::Distribute(), Kspace< T >::getde0taudT(), Kspace< T >::gete0CellVals(), Kspace< T >::gete0CellVars(), Kspace< T >::geteCellVals(), Kspace< T >::getnCellVals(), Kspace< T >::getRTAsources(), COMETModel< T >::HeatFluxIntegral(), COMETModel< T >::HeatFluxIntegralFace(), COMETModel< T >::init(), COMETModel< T >::initCoarse(), COMETModel< T >::injectResid(), COMETDiscretizer< T >::makeValueArray(), COMETModel< T >::modewiseHeatFluxIntegral(), COMETDiscretizer< T >::scaledResid(), COMETDiscretizer< T >::ScatterPhonons(), COMETModel< T >::sete0(), Kspace< T >::seteCellVals(), Kspace< T >::setResidCell(), Kspace< T >::syncGather(), Kspace< T >::syncScatter(), COMETDiscretizer< T >::updatee0(), COMETDiscretizer< T >::updateGhostCoarse(), COMETDiscretizer< T >::updateGhostFine(), and Kspace< T >::updateTau().

1216 {return cell*gettotmodes()+count;}
int gettotmodes()
Definition: Kspace.h:393
template<class T>
T Kspace< T >::gethbar ( )
inline

Definition at line 392 of file Kspace.h.

392 {return 6.582119e-16;}
template<class T>
ArrayBase* Kspace< T >::getHollandConductivity ( const T  Tl)
inline

Definition at line 906 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::gettau(), pmode< T >::getv(), Kspace< T >::outerProduct(), and SquareTensor< T, N >::zero().

907  {//returns the thermal conductivity tensor in row major order
908  T3Tensor KTensor;
909  T3Tensor Dummy;
910  KTensor.zero();
911  Dummy.zero();
912 
913  for(int k=0;k<_length;k++)
914  {
915  Tkvol& kvol=getkvol(k);
916  const T dk3=kvol.getdk3();
917  const int numModes=kvol.getmodenum();
918  for(int m=0;m<numModes;m++)
919  {
920  Tmode& mode=kvol.getmode(m);
921  Tvec vg=mode.getv();
922  T tau=mode.gettau();
923  T de0dT=mode.calcde0dT(Tl);
924  outerProduct(vg, vg, Dummy);
925  KTensor+=Dummy*tau*de0dT*dk3;
926  Dummy.zero();
927  }
928  }
929 
930  TArray* Kptr=new TArray(9);
931  int count=0;
932  for(int j=0;j<3;j++)
933  {
934  for(int i=0;i<3;i++)
935  {
936  (*Kptr)[count]=KTensor(i,j);
937  count++;
938  }
939  }
940 
941  return Kptr;
942  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
void outerProduct(const Tvec &v1, const Tvec &v2, T3Tensor &out)
Definition: Kspace.h:993
Array< T > TArray
Definition: Kspace.h:35
SquareTensor< T, 3 > T3Tensor
Definition: Kspace.h:46
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
ArrayBase* Kspace< T >::getIIsources ( const int  c,
const bool  correct 
)
inline

Definition at line 1546 of file Kspace.h.

References Kspace< T >::_ScattKernel, Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1547  {
1548  TArray* S=new TArray(gettotmodes());
1549  TArray ds(gettotmodes());
1550  _ScattKernel->getTypeIIsource(c,*S,ds,correct);
1551  weightArray(*S);
1552  return S;
1553  }
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
int gettotmodes()
Definition: Kspace.h:393
template<class T>
T& Kspace< T >::getInj ( const int  cell,
const int  count 
)
inline

Definition at line 1213 of file Kspace.h.

References Kspace< T >::_injected, and Kspace< T >::gettotmodes().

1213 {return (*_injected)[cell*gettotmodes()+count];}
TArrPtr _injected
Definition: Kspace.h:1722
int gettotmodes()
Definition: Kspace.h:393
template<class T>
TArray& Kspace< T >::getInjArray ( )
inline

Definition at line 1227 of file Kspace.h.

References Kspace< T >::_injected.

Referenced by COMETModel< T >::correctSolution(), and COMETModel< T >::injectResid().

1227 {return *_injected;}
TArrPtr _injected
Definition: Kspace.h:1722
template<class T>
ArrayBase* Kspace< T >::getIsources ( const int  c,
const bool  correct 
)
inline

Definition at line 1537 of file Kspace.h.

References Kspace< T >::_ScattKernel, Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1538  {
1539  TArray* S=new TArray(gettotmodes());
1540  TArray ds(gettotmodes());
1541  _ScattKernel->getTypeIsource(c,*S,ds,correct);
1542  weightArray(*S);
1543  return S;
1544  }
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
int gettotmodes()
Definition: Kspace.h:393
template<class T>
Tkvol& Kspace< T >::getkvol ( int  n) const
inline

Definition at line 390 of file Kspace.h.

References Kspace< T >::_Kmesh.

Referenced by COMETInterface< T >::addFAS(), PhononModel< T >::advance(), PhononInterface< X >::applyInterfaceCondition(), PhononBoundary< X >::applyReflectingWall(), PhononBoundary< X >::applyTemperatureWall(), COMETBoundary< T >::applyTemperatureWallCoarse(), COMETBoundary< T >::applyTemperatureWallFine(), DensityOfStates< T >::binEntireKspace(), DensityOfStates< T >::binMode(), COMETModel< T >::binwiseHeatFluxIntegral(), Kspace< T >::calcBallisticInterface(), COMETModel< T >::calcBandFlux(), COMETModel< T >::calcBandRelEnergy(), Kspace< T >::calcBandTemp(), COMETModel< T >::calcBandTemps(), DensityOfStates< T >::calcBinFlux(), Kspace< T >::calcDiffuseE(), Kspace< T >::calcDK3(), Kspace< T >::calcLatTemp(), COMETModel< T >::calcModeFlux(), COMETModel< T >::calcModeTemps(), Kspace< T >::calcPhononTemp(), Kspace< T >::calcSpecificHeat(), Kspace< T >::calcTauTot(), COMETDiscretizer< T >::COMETCollision(), COMETDiscretizer< T >::COMETConvection(), COMETDiscretizer< T >::COMETConvectionCoarse(), COMETDiscretizer< T >::COMETConvectionFine(), COMETDiscretizer< T >::COMETEquilibrium(), COMETDiscretizer< T >::COMETFullScatt(), COMETDiscretizer< T >::COMETShifted(), Kspace< T >::CopyKspace(), COMETModel< T >::correctSolution(), COMETDiscretizer< T >::Distribute(), COMETModel< T >::equilibrate(), Kspace< T >::FindBallisticHeatRate(), Kspace< T >::findKnStats(), Kspace< T >::findSpecs(), COMETInterface< T >::findWallTemp(), COMETDiscretizer< T >::gatherResid(), Kspace< T >::getde0taudT(), Kspace< T >::gete0(), Kspace< T >::gete0_tau(), Kspace< T >::gete0CellVars(), Kspace< T >::gete0v(), Kspace< T >::getEquilibriumArray(), Kspace< T >::getHollandConductivity(), Kspace< T >::getModewiseBallisticConductance(), Kspace< T >::getModewiseHollandConductivity(), Kspace< T >::getReflectionArray(), Kspace< T >::getRTAsources(), Kspace< T >::getTauArrayPy(), COMETModel< T >::getValueArray(), Kspace< T >::getVelocities(), Kspace< T >::getWaveVectors(), PhononModel< T >::HeatFluxIntegral(), COMETModel< T >::HeatFluxIntegral(), COMETModel< T >::HeatFluxIntegralFace(), PhononModel< T >::init(), COMETModel< T >::init(), COMETModel< T >::initCoarse(), COMETModel< T >::injectResid(), Kspace< T >::Kspace(), Kspace< T >::makeDegenerate(), COMETInterface< T >::makeDMMcoeffs(), COMETInterface< T >::makeEquilibriumArray(), Kspace< T >::makeFreqArray(), COMETDiscretizer< T >::makeValueArray(), DensityOfStates< T >::mergeBins(), COMETModel< T >::modewiseHeatFluxIntegral(), COMETDiscretizer< T >::ScatterPhonons(), Kspace< T >::setCp(), Kspace< T >::setCpNonGray(), DensityOfStates< T >::setDensity(), COMETModel< T >::sete0(), Kspace< T >::setTref(), DensityOfStates< T >::sumOutgoing(), PhononModel< T >::updatee0(), COMETDiscretizer< T >::updatee0(), COMETDiscretizer< T >::updateeShifted(), COMETDiscretizer< T >::updateGhostCoarse(), COMETDiscretizer< T >::updateGhostFine(), PhononModel< T >::updateHeatFlux(), PhononModel< T >::updateTL(), Kspace< T >::weightArray(), and COMETInterface< T >::ZeroGhost().

390 {return *_Kmesh[n];}
Volvec _Kmesh
Definition: Kspace.h:1713
template<class T>
int Kspace< T >::getlength ( ) const
inline

Definition at line 391 of file Kspace.h.

References Kspace< T >::_length.

Referenced by COMETInterface< T >::addFAS(), PhononModel< T >::advance(), PhononInterface< X >::applyInterfaceCondition(), PhononBoundary< X >::applyReflectingWall(), PhononBoundary< X >::applyTemperatureWall(), COMETBoundary< T >::applyTemperatureWallCoarse(), COMETBoundary< T >::applyTemperatureWallFine(), DensityOfStates< T >::binEntireKspace(), DensityOfStates< T >::binMode(), Kspace< T >::calcBallisticInterface(), COMETModel< T >::calcBandRelEnergy(), Kspace< T >::calcDiffuseE(), COMETModel< T >::calcModeFlux(), COMETModel< T >::calcModeTemps(), COMETDiscretizer< T >::COMETCollision(), COMETDiscretizer< T >::COMETConvection(), COMETDiscretizer< T >::COMETConvectionCoarse(), COMETDiscretizer< T >::COMETConvectionFine(), COMETDiscretizer< T >::COMETEquilibrium(), COMETDiscretizer< T >::COMETFullScatt(), COMETDiscretizer< T >::COMETShifted(), Kspace< T >::CopyKspace(), COMETModel< T >::correctSolution(), COMETDiscretizer< T >::Distribute(), COMETModel< T >::equilibrate(), COMETInterface< T >::findWallTemp(), COMETDiscretizer< T >::gatherResid(), COMETModel< T >::getValueArray(), PhononModel< T >::HeatFluxIntegral(), COMETModel< T >::HeatFluxIntegral(), COMETModel< T >::HeatFluxIntegralFace(), PhononModel< T >::init(), COMETModel< T >::init(), COMETModel< T >::initCoarse(), COMETModel< T >::injectResid(), COMETInterface< T >::makeEquilibriumArray(), COMETDiscretizer< T >::makeValueArray(), DensityOfStates< T >::mergeBins(), COMETModel< T >::modewiseHeatFluxIntegral(), COMETDiscretizer< T >::ScatterPhonons(), COMETModel< T >::sete0(), PhononModel< T >::updatee0(), COMETDiscretizer< T >::updatee0(), COMETDiscretizer< T >::updateeShifted(), COMETDiscretizer< T >::updateGhostCoarse(), COMETDiscretizer< T >::updateGhostFine(), PhononModel< T >::updateHeatFlux(), PhononModel< T >::updateTL(), and COMETInterface< T >::ZeroGhost().

391 {return _length;}
int _length
Definition: Kspace.h:1712
template<class T>
ArrayBase* Kspace< T >::getModewiseBallisticConductance ( const T  Tl)
inline

Definition at line 969 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), Kspace< T >::gettotmodes(), and pmode< T >::getv().

970  {
971  TArray* Kptr=new TArray(gettotmodes());
972  TArray& K=*Kptr;
973 
974  int count=0;
975  for(int k=0;k<_length;k++)
976  {
977  Tkvol& kvol=getkvol(k);
978  const T dk3=kvol.getdk3();
979  const int numModes=kvol.getmodenum();
980  for(int m=0;m<numModes;m++)
981  {
982  Tmode& mode=kvol.getmode(m);
983  Tvec vg=mode.getv();
984  T de0dT=mode.calcde0dT(Tl);
985  K[count]=vg[0]*de0dT*dk3;
986  count++;
987  }
988  }
989 
990  return Kptr;
991  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< T > TArray
Definition: Kspace.h:35
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
ArrayBase* Kspace< T >::getModewiseHollandConductivity ( const T  Tl)
inline

Definition at line 944 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::calcde0dT(), kvol< T >::getdk3(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::gettau(), Kspace< T >::gettotmodes(), and pmode< T >::getv().

945  {
946  TArray* Kptr=new TArray(gettotmodes());
947  TArray& K=*Kptr;
948 
949  int count=0;
950  for(int k=0;k<_length;k++)
951  {
952  Tkvol& kvol=getkvol(k);
953  const T dk3=kvol.getdk3();
954  const int numModes=kvol.getmodenum();
955  for(int m=0;m<numModes;m++)
956  {
957  Tmode& mode=kvol.getmode(m);
958  Tvec vg=mode.getv();
959  T tau=mode.gettau();
960  T de0dT=mode.calcde0dT(Tl);
961  K[count]=vg[0]*vg[0]*tau*de0dT*dk3;
962  count++;
963  }
964  }
965 
966  return Kptr;
967  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< T > TArray
Definition: Kspace.h:35
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
Vector< T, 3 > Tvec
Definition: Kspace.h:37
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::getnCellVals ( const int  c,
TArray o 
)
inline

Definition at line 1248 of file Kspace.h.

References Kspace< T >::_e, Kspace< T >::_freqArray, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

1249  {
1250  const T hbar(6.582119e-16);
1251  int start=getGlobalIndex(c,0);
1252  int end=start+gettotmodes();
1253  for(int i=start; i<end; i++)
1254  o[i-start]=(*_e)[i]/hbar/_freqArray[i-start];
1255  }
TArrPtr _e
Definition: Kspace.h:1719
TArray _freqArray
Definition: Kspace.h:1727
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
template<class T>
ArrayBase* Kspace< T >::getReflectionArray ( const Mesh mesh,
const int  FgId 
)
inline

Definition at line 871 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::getIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::getReflpair(), and Kspace< T >::gettotmodes().

872  {
873  const int allModes=gettotmodes();
874  IntArray* reflInd=new IntArray(allModes);
875 
876  for(int k=0;k<_length;k++)
877  {
878  Tkvol& kvol=getkvol(k);
879  const int modes=kvol.getmodenum();
880  for(int m=0;m<modes;m++)
881  {
882  Tmode& mode=kvol.getmode(m);
883  const int count=mode.getIndex()-1;
884  Refl_pair& refls=mode.getReflpair(FgId);
885  if(refls.second.second!=-1) //v dot A < 0
886  {
887  const int kk=refls.second.second;
888  Tmode& FromMode=getkvol(kk).getmode(m);
889  const int indx=FromMode.getIndex();
890  (*reflInd)[count]=indx;
891  }
892  else if(refls.first.second!=-1)//v dot A > 0
893  {
894  const int kk=refls.first.second;
895  Tmode& ToMode=getkvol(kk).getmode(m);
896  const int indx=ToMode.getIndex();
897  (*reflInd)[count]=indx;
898  }
899  else
900  throw CException("Not a reflecting wall!");
901  }
902  }
903  return reflInd;
904  }
Array< int > IntArray
Definition: Kspace.h:39
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Tmode & getmode(int n) const
Definition: kvol.h:44
int getIndex()
Definition: pmode.h:73
Tmode::Refl_pair Refl_pair
Definition: Kspace.h:49
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
T& Kspace< T >::getRes ( const int  cell,
const int  count 
)
inline

Definition at line 1214 of file Kspace.h.

References Kspace< T >::_residual, and Kspace< T >::gettotmodes().

1214 {return (*_residual)[cell*gettotmodes()+count];}
int gettotmodes()
Definition: Kspace.h:393
TArrPtr _residual
Definition: Kspace.h:1723
template<class T>
TArray& Kspace< T >::getResArray ( )
inline

Definition at line 1228 of file Kspace.h.

References Kspace< T >::_residual.

Referenced by COMETModel< T >::injectResid().

1228 {return *_residual;}
TArrPtr _residual
Definition: Kspace.h:1723
template<class T>
ArrayBase* Kspace< T >::getRTAsources ( const int  c)
inline

Definition at line 1504 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), Kspace< T >::getGlobalIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::gettau(), and Kspace< T >::gettotmodes().

1505  {
1506  TArray* S=new TArray(gettotmodes());
1507  int ind=getGlobalIndex(c,0);
1508  int cnt(0);
1509 
1510  for(int k=0;k<_length;k++)
1511  {
1512  Tkvol& kvol=getkvol(k);
1513  const int modes=kvol.getmodenum();
1514  const T dk3=kvol.getdk3();
1515  for(int m=0;m<modes;m++)
1516  {
1517  Tmode& mode=kvol.getmode(m);
1518  T tau=mode.gettau();
1519  (*S)[cnt]=((*_e0)[ind]-(*_e)[ind])/tau*(dk3/_totvol);
1520  cnt++;
1521  ind++;
1522  }
1523  }
1524  return S;
1525 
1526  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
Array< T > TArray
Definition: Kspace.h:35
T _totvol
Definition: Kspace.h:1714
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
TArray& Kspace< T >::getSourceArray ( )
inline

Definition at line 1226 of file Kspace.h.

References Kspace< T >::_Source.

1226 {return *_Source;}
TArrPtr _Source
Definition: Kspace.h:1721
template<class T>
ArrayBase* Kspace< T >::getSourceArrayPy ( )
inline

Definition at line 1690 of file Kspace.h.

References Kspace< T >::_Source.

1691  {return _Source.get();}
TArrPtr _Source
Definition: Kspace.h:1721
template<class T>
ArrayBase* Kspace< T >::getSourceDeriv ( const int  c)
inline

Definition at line 1555 of file Kspace.h.

References Kspace< T >::_ScattKernel, Kspace< T >::gettotmodes(), and Kspace< T >::weightArray().

1556  {
1557  TArray s(gettotmodes());
1558  TArray* ds=new TArray(gettotmodes());
1559  _ScattKernel->updateSource2(c,s,*ds);
1560  weightArray(*ds);
1561  return ds;
1562  }
Array< T > TArray
Definition: Kspace.h:35
void weightArray(TArray &e)
Definition: Kspace.h:1637
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
int gettotmodes()
Definition: Kspace.h:393
template<class T>
void Kspace< T >::getSourceTerm ( const int  c,
TArray s,
TArray ds 
)
inline

Definition at line 1468 of file Kspace.h.

References Kspace< T >::_ScattKernel.

Referenced by COMETDiscretizer< T >::findResidFull().

1469  {
1470 
1471 
1472  _ScattKernel->updateSource2(c,s,ds);
1473 
1474  }
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
template<class T>
const T Kspace< T >::getTau ( const int  index)
inline

Definition at line 1231 of file Kspace.h.

References Kspace< T >::_Tau.

Referenced by COMETDiscretizer< T >::COMETCollision(), COMETDiscretizer< T >::COMETEquilibrium(), and COMETDiscretizer< T >::COMETFullScatt().

1231 {return (*_Tau)[index];}
TArrPtr _Tau
Definition: Kspace.h:1725
template<class T>
TArray& Kspace< T >::getTauArray ( )
inline

Definition at line 1230 of file Kspace.h.

References Kspace< T >::_Tau.

1230 {return *_Tau;}
TArrPtr _Tau
Definition: Kspace.h:1725
template<class T>
ArrayBase* Kspace< T >::getTauArrayPy ( )
inline

Definition at line 1618 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::gettau(), and Kspace< T >::gettotmodes().

1619  {
1620  TArray* e=new TArray(gettotmodes());
1621  int index(0);
1622  for(int k=0;k<_length;k++)
1623  {
1624  Tkvol& kv=getkvol(k);
1625  //const T dk3=kv.getdk3();
1626  const int modenum=kv.getmodenum();
1627  for(int m=0;m<modenum;m++)
1628  {
1629  Tmode& mode=kv.getmode(m);
1630  (*e)[index]=mode.gettau();
1631  index++;
1632  }
1633  }
1634  return e;
1635  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< T > TArray
Definition: Kspace.h:35
int gettotmodes()
Definition: Kspace.h:393
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
int Kspace< T >::gettotmodes ( )
inline

Definition at line 393 of file Kspace.h.

References Kspace< T >::_Kmesh, and Kspace< T >::_length.

Referenced by COMETInterface< T >::addFAS(), Kspace< T >::addFAS(), COMETDiscretizer< T >::addFAS(), Kspace< T >::addFASint(), COMETBoundary< T >::applyTemperatureWallFine(), COMETDiscretizer< T >::COMETCollision(), COMETDiscretizer< T >::COMETConvectionFine(), COMETDiscretizer< T >::COMETEquilibrium(), COMETDiscretizer< T >::COMETFullScatt(), COMETDiscretizer< T >::COMETShifted(), COMETDiscretizer< T >::COMETSolveCoarse(), COMETDiscretizer< T >::COMETSolveFine(), COMETDiscretizer< T >::COMETSolveFull(), COMETDiscretizer< T >::correctInterface(), Kspace< T >::createSyncGather(), COMETInterface< T >::Distribute(), COMETDiscretizer< T >::Distribute(), COMETInterface< T >::DistributeResid(), COMETDiscretizer< T >::findResidCoarse(), COMETDiscretizer< T >::findResidFine(), COMETDiscretizer< T >::findResidFull(), COMETInterface< T >::findWallTemp(), COMETDiscretizer< T >::gatherResid(), Kspace< T >::gete(), Kspace< T >::gete0(), Kspace< T >::gete0CellVals(), Kspace< T >::gete0CellValsPy(), Kspace< T >::gete0CellVars(), Kspace< T >::geteCellVals(), Kspace< T >::geteCellValsPy(), Kspace< T >::getFas(), Kspace< T >::getFreqArrayPy(), Kspace< T >::getFullsources(), Kspace< T >::getGlobalIndex(), Kspace< T >::getIIsources(), Kspace< T >::getInj(), Kspace< T >::getIsources(), Kspace< T >::getModewiseBallisticConductance(), Kspace< T >::getModewiseHollandConductivity(), Kspace< T >::getnCellVals(), Kspace< T >::getReflectionArray(), Kspace< T >::getRes(), Kspace< T >::getRTAsources(), Kspace< T >::getSourceDeriv(), Kspace< T >::getTauArrayPy(), COMETModel< T >::getValueArray(), Kspace< T >::getVelocities(), COMETModel< T >::init(), COMETModel< T >::initCoarse(), Kspace< T >::Kspace(), COMETInterface< T >::makeCoarseCoeffs(), COMETInterface< T >::makeDMMcoeffs(), COMETInterface< T >::makeEquilibriumArray(), Kspace< T >::makeFreqArray(), COMETInterface< T >::makeNoInterfaceCoeffs(), COMETInterface< T >::makeValueArray(), COMETDiscretizer< T >::makeValueArray(), COMETModel< T >::modewiseHeatFluxIntegral(), COMETDiscretizer< T >::ScatterPhonons(), Kspace< T >::seteCellVals(), Kspace< T >::setResidCell(), Kspace< T >::syncGather(), Kspace< T >::syncScatter(), COMETDiscretizer< T >::updateGhostFine(), COMETInterface< T >::updateOtherGhost(), COMETInterface< T >::updateResid(), and Kspace< T >::weightArray().

394  {
395  return (_Kmesh[0]->getmodenum())*_length;
396  }
int _length
Definition: Kspace.h:1712
Volvec _Kmesh
Definition: Kspace.h:1713
template<class T>
TArray& Kspace< T >::getTransArray ( Tkspace toKspace)
inline

Definition at line 1040 of file Kspace.h.

References Kspace< T >::_transMap.

Referenced by COMETInterface< T >::makeDMMcoeffs().

1041  {
1042  typename TransmissionMap::const_iterator pos=_transMap.find(&toKspace);
1043  if(pos!=_transMap.end())
1044  return *((pos->second).second);
1045  else
1046  throw CException("getTransArray: Transmission not set!");
1047  }
TransmissionMap _transMap
Definition: Kspace.h:1715
template<class T>
TransmissionMap& Kspace< T >::getTransMap ( )
inline

Definition at line 1210 of file Kspace.h.

References Kspace< T >::_transMap.

Referenced by Kspace< T >::giveTransmissions().

1210 {return _transMap;}
TransmissionMap _transMap
Definition: Kspace.h:1715
template<class T>
ArrayBase* Kspace< T >::getVelocities ( )
inline

Definition at line 821 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::getIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), Kspace< T >::gettotmodes(), and pmode< T >::getv().

822  {
823  const int allModes=gettotmodes();
824  TvecArray* Velocities=new TvecArray(allModes);
825 
826  for(int k=0;k<_length;k++)
827  {
828  Tkvol& kvol=getkvol(k);
829  const int modes=kvol.getmodenum();
830  for(int m=0;m<modes;m++)
831  {
832  const int count=kvol.getmode(m).getIndex()-1;
833  (*Velocities)[count]=kvol.getmode(m).getv();
834  }
835  }
836  return Velocities;
837  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< Tvec > TvecArray
Definition: Kspace.h:38
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::getVelocities ( TvecArray v)
inline

Definition at line 839 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::getIndex(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), Kspace< T >::gettotmodes(), pmode< T >::getv(), Array< T >::resize(), and Array< T >::zero().

840  {
841  const int allModes=gettotmodes();
842  v.resize(allModes);
843  v.zero();
844 
845  for(int k=0;k<_length;k++)
846  {
847  Tkvol& kvol=getkvol(k);
848  const int modes=kvol.getmodenum();
849  for(int m=0;m<modes;m++)
850  {
851  const int count=kvol.getmode(m).getIndex()-1;
852  v[count]=kvol.getmode(m).getv();
853  }
854  }
855  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
int gettotmodes()
Definition: Kspace.h:393
Definition: kvol.h:14
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
ArrayBase* Kspace< T >::getVelocities ( const int  M)
inline

Definition at line 857 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::getkvol(), kvol< T >::getmode(), and pmode< T >::getv().

858  {
859  TvecArray* Velocities=new TvecArray(_length);
860  int count(0);
861  for(int k=0;k<_length;k++)
862  {
863  Tkvol& kvol=getkvol(k);
864  //const int modes=kvol.getmodenum();
865  (*Velocities)[count]=kvol.getmode(M).getv();
866  count++;
867  }
868  return Velocities;
869  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< Tvec > TvecArray
Definition: Kspace.h:38
Definition: kvol.h:14
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
ArrayBase* Kspace< T >::getWaveVectors ( )
inline

Definition at line 1564 of file Kspace.h.

References Kspace< T >::_length, kvol< T >::getkvec(), and Kspace< T >::getkvol().

1565  {
1566  TvecArray* Kpts=new TvecArray(_length);
1567  for(int k=0;k<_length;k++)
1568  {
1569  Tkvol& kvol=getkvol(k);
1570  (*Kpts)[k]=kvol.getkvec();
1571  }
1572  return Kpts;
1573  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< Tvec > TvecArray
Definition: Kspace.h:38
Definition: kvol.h:14
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::giveTransmissions ( )
inline

Definition at line 1190 of file Kspace.h.

References Kspace< T >::_coarseKspace, Kspace< T >::_transMap, Kspace< T >::getCoarseKspace(), and Kspace< T >::getTransMap().

1191  {
1192  TransmissionMap& coarseTrans=_coarseKspace->getTransMap();
1193 
1194  for(TransIt it=_transMap.begin();it!=_transMap.end();it++)
1195  {
1196  Tkspace* fineToKspace=it->first;
1197  if(fineToKspace!=NULL)
1198  {
1199  Tkspace* coarseToKspace=fineToKspace->getCoarseKspace();
1200  coarseTrans[coarseToKspace]=(it->second);
1201  }
1202  }
1203  }
Tkspace::TransmissionMap::iterator TransIt
Definition: Kspace.h:53
Kspace< T > Tkspace
Definition: Kspace.h:33
map< Tkspace *, pair< TArray *, TArray * > > TransmissionMap
Definition: Kspace.h:52
TransmissionMap _transMap
Definition: Kspace.h:1715
Tkspace * _coarseKspace
Definition: Kspace.h:1718
TransmissionMap & getTransMap()
Definition: Kspace.h:1210
template<class T>
void Kspace< T >::makeDegenerate ( const int  m)
inline

Definition at line 152 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::getcpRef(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

153  {
154  for(int k=0;k<_length;k++)
155  {
156  Tkvol& kv=getkvol(k);
157  const int modenum=kv.getmodenum();
158  Tmode& mode=kv.getmode(m);
159  mode.getcpRef()*=2.;
160  }
161  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::makeFAS ( )
inline

Definition at line 1289 of file Kspace.h.

Referenced by COMETModel< T >::makeFAS().

1289 {(*_FASCorrection)-=(*_residual);}
template<class T>
void Kspace< T >::makeFreqArray ( )
inline

Definition at line 163 of file Kspace.h.

References Kspace< T >::_freqArray, Kspace< T >::_length, Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), pmode< T >::getomega(), Kspace< T >::gettotmodes(), and Array< T >::resize().

Referenced by Kspace< T >::Kspace().

164  {
166  int count=0;
167  for(int k=0;k<_length;k++)
168  {
169  Tkvol& kv=getkvol(k);
170  const int modenum=kv.getmodenum();
171  for(int m=0;m<modenum;m++)
172  {
173  Tmode& mode=kv.getmode(m);
174  const T omega=mode.getomega();
175  _freqArray[count]=omega;
176  count++;
177  }
178  }
179  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
TArray _freqArray
Definition: Kspace.h:1727
void resize(const int newLength)
Definition: Array.h:56
int gettotmodes()
Definition: Kspace.h:393
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::NewtonSolve ( T &  guess,
const T  e_sum 
)
inline

Definition at line 425 of file Kspace.h.

References fabs(), and Kspace< T >::gete0_tau().

Referenced by PhononModel< T >::COMETupdateTL(), PhononModel< T >::updateTL(), and COMETModel< T >::updateTL().

426  {
427  T e0_tau;
428  T de0_taudT;
429  T deltaT=1.;
430  T newguess;
431  int iters=0;
432  while((deltaT>1e-6)&&(iters<10))
433  {
434  gete0_tau(guess,e0_tau,de0_taudT);
435  deltaT=(e0_tau-e_sum)/de0_taudT;
436  newguess=guess-deltaT;
437  deltaT=fabs(deltaT/guess);
438  guess=newguess;
439  iters++;
440  }
441  }
void gete0_tau(T &Tguess, T &e0tau, T &de0taudT)
Definition: Kspace.h:546
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
template<class T>
void Kspace< T >::outerProduct ( const Tvec v1,
const Tvec v2,
T3Tensor out 
)
inline

Definition at line 993 of file Kspace.h.

Referenced by Kspace< T >::getHollandConductivity().

994  {
995  for(int i=0;i<3;i++)
996  for(int j=0;j<3;j++)
997  out(i,j)=v1[i]*v2[j];
998  }
template<class T>
void Kspace< T >::ScatterPhonons ( const int  c,
const int  totIts,
TArray C,
TArray B,
const TArray V,
TArray newE,
const T  cv 
)
inline

Definition at line 1476 of file Kspace.h.

References Kspace< T >::_ScattKernel, and Kspace< T >::seteCellVals().

Referenced by COMETDiscretizer< T >::ScatterPhonons().

1478  {
1479  _ScattKernel->scatterPhonons(c, totIts, C, B, V, newE, cv);
1480  seteCellVals(c,newE);
1481  }
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
void seteCellVals(const int c, const TArray &o)
Definition: Kspace.h:1257
template<class T>
void Kspace< T >::setCoarseKspace ( Tkspace cK)
inline

Definition at line 1208 of file Kspace.h.

References Kspace< T >::_coarseKspace.

1208 {_coarseKspace=cK;}
Tkspace * _coarseKspace
Definition: Kspace.h:1718
template<class T>
void Kspace< T >::setCp ( const T  cp)
inline

Definition at line 118 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, pmode< T >::getcpRef(), Kspace< T >::getkvol(), kvol< T >::getmode(), and kvol< T >::getmodenum().

119  {//input the total specific heat in eV/m^3/K
120 
121  for(int k=0;k<_length;k++)
122  {
123  Tkvol& kv=getkvol(k);
124  const int modenum=kv.getmodenum();
125  for(int m=0;m<modenum;m++)
126  {
127  Tmode& mode=kv.getmode(m);
128  mode.getcpRef()=cp/_totvol;
129  }
130  }
131  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T _totvol
Definition: Kspace.h:1714
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::setCpNonGray ( const T  Tl)
inline

Definition at line 133 of file Kspace.h.

References Kspace< T >::_length, pmode< T >::getcpRef(), Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::getomega().

134  {
135  for(int k=0;k<_length;k++)
136  {
137  Tkvol& kv=getkvol(k);
138  const int modenum=kv.getmodenum();
139  for(int m=0;m<modenum;m++)
140  {
141  Tmode& mode=kv.getmode(m);
142  const T omega=mode.getomega();
143  const T hbar=6.582119e-16; // (eV s)
144  const T kb=8.617343e-5; // (eV/K)
145 
146  mode.getcpRef()=kb*pow((hbar*omega/kb/Tl),2)*
147  exp(hbar*omega/kb/Tl)/pow((exp(hbar*omega/kb/Tl)-1),2);
148  }
149  }
150  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
pmode< T > Tmode
Definition: Kspace.h:40
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::setDOS ( DensityOfStates< T > &  DOS)
inline

Definition at line 1205 of file Kspace.h.

References Kspace< T >::_DOS.

Referenced by Kspace< T >::CopyKspace().

1205 {_DOS=&DOS;}
DensityOfStates< T > * _DOS
Definition: Kspace.h:1716
template<class T>
void Kspace< T >::sete0Array ( TArrPtr  e0Ptr)
inline

Definition at line 1218 of file Kspace.h.

References Kspace< T >::_e0.

Referenced by COMETModel< T >::init(), and COMETModel< T >::initCoarse().

1218 {_e0=e0Ptr;}
TArrPtr _e0
Definition: Kspace.h:1720
template<class T>
void Kspace< T >::seteArray ( TArrPtr  ePtr)
inline

Definition at line 1217 of file Kspace.h.

References Kspace< T >::_e.

Referenced by COMETModel< T >::init(), and COMETModel< T >::initCoarse().

1217 {_e=ePtr;}
TArrPtr _e
Definition: Kspace.h:1719
template<class T>
void Kspace< T >::seteCellVals ( const int  c,
const TArray o 
)
inline

Definition at line 1257 of file Kspace.h.

References Kspace< T >::_e, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

Referenced by COMETInterface< T >::Distribute(), and Kspace< T >::ScatterPhonons().

1258  {
1259  int start=getGlobalIndex(c,0);
1260  int end=start+gettotmodes();
1261  for(int i=start; i<end; i++)
1262  (*_e)[i]=o[i-start];
1263  }
TArrPtr _e
Definition: Kspace.h:1719
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
template<class T>
void Kspace< T >::setFASArray ( TArrPtr  FASPtr)
inline

Definition at line 1222 of file Kspace.h.

References Kspace< T >::_FASCorrection.

Referenced by COMETModel< T >::initCoarse().

1222 {_FASCorrection=FASPtr;}
TArrPtr _FASCorrection
Definition: Kspace.h:1724
template<class T>
void Kspace< T >::setInjArray ( TArrPtr  InjPtr)
inline

Definition at line 1220 of file Kspace.h.

References Kspace< T >::_injected.

Referenced by COMETModel< T >::initCoarse().

1220 {_injected=InjPtr;}
TArrPtr _injected
Definition: Kspace.h:1722
template<class T>
void Kspace< T >::setRelTimeFunction ( const T  A,
const T  B,
const T  C 
)
inline

Definition at line 1483 of file Kspace.h.

References Kspace< T >::_relFun.

1484  {
1485  _relFun._A=A;
1486  _relFun._B=B;
1487  _relFun._C=C;
1488  _relFun._constTau=false;
1489  }
RelTimeFun< T > _relFun
Definition: Kspace.h:1728
template<class T>
void Kspace< T >::setResArray ( TArrPtr  ResPtr)
inline

Definition at line 1221 of file Kspace.h.

References Kspace< T >::_residual.

Referenced by COMETModel< T >::init(), and COMETModel< T >::initCoarse().

1221 {_residual=ResPtr;}
TArrPtr _residual
Definition: Kspace.h:1723
template<class T>
void Kspace< T >::setResidCell ( const int  c,
const TArray o 
)
inline

Definition at line 1265 of file Kspace.h.

References Kspace< T >::_residual, Kspace< T >::getGlobalIndex(), and Kspace< T >::gettotmodes().

Referenced by COMETInterface< T >::DistributeResid().

1266  {
1267  int start=getGlobalIndex(c,0);
1268  int end=start+gettotmodes();
1269  for(int i=start; i<end; i++)
1270  (*_residual)[i]=o[i-start];
1271  }
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
int gettotmodes()
Definition: Kspace.h:393
TArrPtr _residual
Definition: Kspace.h:1723
template<class T>
void Kspace< T >::setScattKernel ( ScatteringKernel< T > &  Sk)
inline

Definition at line 1206 of file Kspace.h.

References Kspace< T >::_ScattKernel.

1206 {_ScattKernel=&Sk;}
ScatteringKernel< T > * _ScattKernel
Definition: Kspace.h:1717
template<class T>
void Kspace< T >::setSourceArray ( TArrPtr  SPtr)
inline

Definition at line 1219 of file Kspace.h.

References Kspace< T >::_Source.

Referenced by COMETModel< T >::init(), and COMETModel< T >::initCoarse().

1219 {_Source=SPtr;}
TArrPtr _Source
Definition: Kspace.h:1721
template<class T>
void Kspace< T >::setTauArray ( TArrPtr  TauPtr)
inline

Definition at line 1223 of file Kspace.h.

References Kspace< T >::_Tau.

Referenced by COMETModel< T >::init(), and COMETModel< T >::initCoarse().

1223 {_Tau=TauPtr;}
TArrPtr _Tau
Definition: Kspace.h:1725
template<class T>
void Kspace< T >::setTransmission ( Tkspace toKspace,
ArrayBase freqBins,
ArrayBase transArray 
)
inline

Definition at line 1000 of file Kspace.h.

References Kspace< T >::_transMap.

1001  {
1002  BinAndTrans* BTPtr=new BinAndTrans;
1003  BTPtr->first=dynamic_cast<TArray*>(freqBins);
1004  BTPtr->second=dynamic_cast<TArray*>(transArray);
1005  _transMap[&toKspace]=*BTPtr;
1006  }
Array< T > TArray
Definition: Kspace.h:35
TransmissionMap _transMap
Definition: Kspace.h:1715
pair< TArray *, TArray * > BinAndTrans
Definition: Kspace.h:51
template<class T>
void Kspace< T >::setTref ( const T  Tref)
inline

Definition at line 1679 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::getkvol(), kvol< T >::getmode(), kvol< T >::getmodenum(), and pmode< T >::setTref().

1680  {
1681  for(int k=0;k<_length;k++)
1682  {
1683  Tkvol& kv=getkvol(k);
1684  const int modenum=kv.getmodenum();
1685  for(int m=0;m<modenum;m++)
1686  kv.getmode(m).setTref(Tref);
1687  }
1688  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::syncGather ( const StorageSite site)
inline

Definition at line 1397 of file Kspace.h.

References Kspace< T >::_ghostArrays, StorageSite::getGatherMap(), Kspace< T >::getGlobalIndex(), Array< T >::getLength(), and Kspace< T >::gettotmodes().

Referenced by Kspace< T >::syncLocal().

1398  {
1399  const StorageSite::GatherMap& gatherMap = site.getGatherMap();
1400 
1401  const int totModes=gettotmodes();
1402 
1403  foreach(const StorageSite::GatherMap::value_type& mpos, gatherMap)
1404  {
1405  const StorageSite& oSite = *mpos.first;
1406  const Array<int>& toIndices = *(mpos.second);
1407  EntryIndex e(&oSite, &site);
1408 
1409  if (_ghostArrays.find(e) == _ghostArrays.end())
1410  {
1411  ostringstream err;
1412  err << "Kspace::syncScatter: ghost array not found for"
1413  << &oSite << endl;
1414  throw CException(err.str());
1415  }
1416 
1417  const TArray& ghostArray=dynamic_cast<const TArray&>(*_ghostArrays[e]);
1418  const int cellCount=toIndices.getLength();
1419 
1420  int ghostIndex(0);
1421  for(int index=0;index<cellCount;index++)
1422  {
1423  const int c=toIndices[index];
1424  for(int cKindex=getGlobalIndex(c,0);
1425  cKindex<getGlobalIndex(c,0)+totModes;
1426  cKindex++)
1427  {
1428  (*_e)[cKindex]=ghostArray[ghostIndex];
1429  ghostIndex++;
1430  }
1431  }
1432 
1433  }
1434 
1435  }
pair< const StorageSite *, const StorageSite * > EntryIndex
Definition: Kspace.h:54
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
Array< T > TArray
Definition: Kspace.h:35
const GatherMap & getGatherMap() const
Definition: StorageSite.h:59
int gettotmodes()
Definition: Kspace.h:393
map< const StorageSite *, shared_ptr< Array< int > > > GatherMap
Definition: StorageSite.h:24
GhostArrayMap _ghostArrays
Definition: Kspace.h:1726
int getLength() const
Definition: Array.h:87
template<class T>
void Kspace< T >::syncLocal ( const StorageSite site)
inline

Definition at line 1291 of file Kspace.h.

References Kspace< T >::_ghostArrays, Kspace< T >::createSyncGather(), Kspace< T >::get_request_size(), ArrayBase::getData(), ArrayBase::getDataSize(), StorageSite::getGatherMap(), StorageSite::getGatherProcID(), StorageSite::getScatterMap(), StorageSite::getTag(), Kspace< T >::syncGather(), and Kspace< T >::syncScatter().

Referenced by COMETModel< T >::swapGhostInfo().

1292  {
1293  //package values to be sent/received
1294  syncScatter(site);
1295  createSyncGather(site);
1296 
1297 #ifdef FVM_PARALLEL
1298  //SENDING
1299  MPI::Request request_send[get_request_size(site)];
1300  MPI::Request request_recv[get_request_size(site)];
1301  int indxSend = 0;
1302  int indxRecv = 0;
1303 
1304  const StorageSite::ScatterMap& scatterMap = site.getScatterMap();
1305  foreach(const StorageSite::ScatterMap::value_type& mpos, scatterMap)
1306  {
1307  const StorageSite& oSite = *mpos.first;
1308  //checking if storage site is only site or ghost site, we only communicate ghost site ( oSite.getCount() == -1 )
1309  EntryIndex e(&site,&oSite);
1310  ArrayBase& sendArray = *_ghostArrays[e];
1311  int to_where = oSite.getGatherProcID();
1312  if ( to_where != -1 )
1313  {
1314  int mpi_tag = oSite.getTag();
1315  request_send[indxSend++] =
1316  MPI::COMM_WORLD.Isend( sendArray.getData(), sendArray.getDataSize(), MPI::BYTE, to_where, mpi_tag );
1317  }
1318  }
1319 
1320  //RECIEVING
1321  //getting values from other meshes to fill g
1322  const StorageSite::GatherMap& gatherMap = site.getGatherMap();
1323  foreach(const StorageSite::GatherMap::value_type& mpos, gatherMap)
1324  {
1325  const StorageSite& oSite = *mpos.first;
1326  //checking if storage site is only site or ghost site, we only communicate ghost site ( oSite.getCount() == -1 )
1327  EntryIndex e(&oSite,&site);
1328  ArrayBase& recvArray = *_ghostArrays[e];
1329  int from_where = oSite.getGatherProcID();
1330  if ( from_where != -1 )
1331  {
1332  int mpi_tag = oSite.getTag();
1333  request_recv[indxRecv++] =
1334  MPI::COMM_WORLD.Irecv( recvArray.getData(), recvArray.getDataSize(), MPI::BYTE, from_where, mpi_tag );
1335  }
1336  }
1337 
1338 
1339  int count = get_request_size(site);
1340  MPI::Request::Waitall( count, request_recv );
1341  MPI::Request::Waitall( count, request_send );
1342 #endif
1343 
1344  syncGather(site);
1345 
1346  }
virtual int getDataSize() const =0
void createSyncGather(const StorageSite &site)
Definition: Kspace.h:1382
void syncScatter(const StorageSite &site)
Definition: Kspace.h:1348
void syncGather(const StorageSite &site)
Definition: Kspace.h:1397
pair< const StorageSite *, const StorageSite * > EntryIndex
Definition: Kspace.h:54
int getTag() const
Definition: StorageSite.h:84
int get_request_size(const StorageSite &site)
Definition: Kspace.h:1437
int getGatherProcID() const
Definition: StorageSite.h:83
const ScatterMap & getScatterMap() const
Definition: StorageSite.h:58
map< const StorageSite *, shared_ptr< Array< int > > > ScatterMap
Definition: StorageSite.h:23
const GatherMap & getGatherMap() const
Definition: StorageSite.h:59
virtual void * getData() const =0
map< const StorageSite *, shared_ptr< Array< int > > > GatherMap
Definition: StorageSite.h:24
GhostArrayMap _ghostArrays
Definition: Kspace.h:1726
template<class T>
void Kspace< T >::syncScatter ( const StorageSite site)
inline

Definition at line 1348 of file Kspace.h.

References Kspace< T >::_e, Kspace< T >::_ghostArrays, Kspace< T >::getGlobalIndex(), Array< T >::getLength(), StorageSite::getScatterMap(), and Kspace< T >::gettotmodes().

Referenced by Kspace< T >::syncLocal().

1349  {
1350  const StorageSite::ScatterMap& scatterMap = site.getScatterMap();
1351 
1352  const int totModes=gettotmodes();
1353 
1354  foreach(const StorageSite::ScatterMap::value_type& mpos, scatterMap)
1355  {
1356  const StorageSite& oSite = *mpos.first;
1357  EntryIndex e(&site, &oSite);
1358  const Array<int>& fromIndices = *(mpos.second);
1359 
1360  if (_ghostArrays.find(e) == _ghostArrays.end())
1361  _ghostArrays[e] = _e->newSizedClone( fromIndices.getLength()*totModes);
1362 
1363  const int cellCount = fromIndices.getLength();
1364  TArray& ghostArray = dynamic_cast<TArray&>(*_ghostArrays[e]);
1365 
1366  int ghostIndex(0);
1367  for(int index=0;index<cellCount;index++)
1368  {
1369  const int c=fromIndices[index];
1370  for(int cKindex=getGlobalIndex(c,0);
1371  cKindex<getGlobalIndex(c,0)+totModes;
1372  cKindex++)
1373  {
1374  ghostArray[ghostIndex]=(*_e)[cKindex];
1375  ghostIndex++;
1376  }
1377  }
1378 
1379  }
1380  }
TArrPtr _e
Definition: Kspace.h:1719
pair< const StorageSite *, const StorageSite * > EntryIndex
Definition: Kspace.h:54
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
Array< T > TArray
Definition: Kspace.h:35
const ScatterMap & getScatterMap() const
Definition: StorageSite.h:58
map< const StorageSite *, shared_ptr< Array< int > > > ScatterMap
Definition: StorageSite.h:23
int gettotmodes()
Definition: Kspace.h:393
GhostArrayMap _ghostArrays
Definition: Kspace.h:1726
int getLength() const
Definition: Array.h:87
template<class T>
void Kspace< T >::updateTau ( const int  c,
const T  Tl 
)
inline

Definition at line 1491 of file Kspace.h.

References Kspace< T >::_freqArray, Kspace< T >::_relFun, Kspace< T >::_Tau, and Kspace< T >::getGlobalIndex().

Referenced by COMETModel< T >::init(), COMETModel< T >::initCoarse(), COMETModel< T >::sete0(), and COMETDiscretizer< T >::updatee0().

1492  {
1493  const int beg=getGlobalIndex(c,0);
1494  const int fin=getGlobalIndex(c+1,0);
1495  int index(0);
1496  for(int i=beg;i<fin;i++)
1497  {
1498  _relFun.update(_freqArray[index],Tl,(*_Tau)[i]);
1499  index++;
1500  }
1501 
1502  }
TArray _freqArray
Definition: Kspace.h:1727
int getGlobalIndex(const int cell, const int count)
Definition: Kspace.h:1216
TArrPtr _Tau
Definition: Kspace.h:1725
RelTimeFun< T > _relFun
Definition: Kspace.h:1728
template<class T>
void Kspace< T >::weightArray ( TArray e)
inline

Definition at line 1637 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), Kspace< T >::getkvol(), Array< T >::getLength(), kvol< T >::getmodenum(), and Kspace< T >::gettotmodes().

Referenced by Kspace< T >::gete0CellValsPy(), Kspace< T >::geteCellValsPy(), Kspace< T >::getFullsources(), Kspace< T >::getIIsources(), Kspace< T >::getIsources(), and Kspace< T >::getSourceDeriv().

1638  {
1639  if(e.getLength()==gettotmodes())
1640  {
1641  int cnt=0;
1642  for(int k=0;k<_length;k++)
1643  {
1644  Tkvol& kv=getkvol(k);
1645  const T dk3=kv.getdk3();
1646  const int modenum=kv.getmodenum();
1647  for(int m=0;m<modenum;m++)
1648  {
1649  e[cnt]*=dk3/_totvol;
1650  cnt++;
1651  }
1652 
1653  }
1654  }
1655  else
1656  throw CException("Array not same length: weightArray");
1657  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
T _totvol
Definition: Kspace.h:1714
int gettotmodes()
Definition: Kspace.h:393
kvol< T > Tkvol
Definition: Kspace.h:43
template<class T>
void Kspace< T >::weightArray ( ArrayBase ep)
inline

Definition at line 1659 of file Kspace.h.

References Kspace< T >::_length, Kspace< T >::_totvol, kvol< T >::getdk3(), Kspace< T >::getkvol(), and kvol< T >::getmodenum().

1660  {
1661  TArray& e=dynamic_cast<TArray&>(*ep);
1662  int cnt=0;
1663  for(int k=0;k<_length;k++)
1664  {
1665  Tkvol& kv=getkvol(k);
1666  const T dk3=kv.getdk3();
1667  const int modenum=kv.getmodenum();
1668  for(int m=0;m<modenum;m++)
1669  {
1670  e[cnt]*=dk3/_totvol;
1671  cnt++;
1672  }
1673  }
1674  }
int _length
Definition: Kspace.h:1712
Tkvol & getkvol(int n) const
Definition: Kspace.h:390
Array< T > TArray
Definition: Kspace.h:35
T _totvol
Definition: Kspace.h:1714
kvol< T > Tkvol
Definition: Kspace.h:43

Member Data Documentation

template<class T>
Tkspace* Kspace< T >::_coarseKspace
private
template<class T>
DensityOfStates<T>* Kspace< T >::_DOS
private

Definition at line 1716 of file Kspace.h.

Referenced by Kspace< T >::getDOSptr(), and Kspace< T >::setDOS().

template<class T>
TArrPtr Kspace< T >::_e0
private
template<class T>
TArrPtr Kspace< T >::_FASCorrection
private
template<class T>
GhostArrayMap Kspace< T >::_ghostArrays
private
template<class T>
TArrPtr Kspace< T >::_injected
private
template<class T>
Volvec Kspace< T >::_Kmesh
private
template<class T>
RelTimeFun<T> Kspace< T >::_relFun
private

Definition at line 1728 of file Kspace.h.

Referenced by Kspace< T >::setRelTimeFunction(), and Kspace< T >::updateTau().

template<class T>
TArrPtr Kspace< T >::_residual
private
template<class T>
TArrPtr Kspace< T >::_Source
private
template<class T>
TArrPtr Kspace< T >::_Tau
private

The documentation for this class was generated from the following file: