diff options
Diffstat (limited to 'externals/grill/vasp/source/vecblk.cpp')
-rw-r--r-- | externals/grill/vasp/source/vecblk.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/externals/grill/vasp/source/vecblk.cpp b/externals/grill/vasp/source/vecblk.cpp new file mode 100644 index 00000000..1efc3981 --- /dev/null +++ b/externals/grill/vasp/source/vecblk.cpp @@ -0,0 +1,49 @@ +#include "vecblk.h" +//#include <math.h> + + +/////////////////////////////////////////////////////////////////////////// +// VecBlock class +/////////////////////////////////////////////////////////////////////////// + +VecBlock::VecBlock(BL cx,I msrc,I mdst,I marg,I blarg): + cplx(cx),asrc(msrc),barg(blarg),aarg(marg*blarg),adst(mdst) +{ + I i,all = asrc+aarg*blarg+adst; + vecs = new VBuffer *[all]; + for(i = 0; i < all; ++i) vecs[i] = NULL; +} + +VecBlock::~VecBlock() +{ + if(vecs) { + I all = asrc+aarg*barg+adst; + for(I i = 0; i < all; ++i) + if(vecs[i]) delete vecs[i]; + delete[] vecs; + } +} + +Vasp *VecBlock::_DstVasp(I n) +{ + Vasp *ret = new Vasp; + ret->Frames(Frames()); + for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Dst(i)); + return ret; +} + +Vasp *VecBlock::_SrcVasp(I n) +{ + Vasp *ret = new Vasp; + ret->Frames(Frames()); + for(I i = 0; i < n; ++i) *ret += Vasp::Ref(*_Src(i)); + return ret; +} + +Vasp *VecBlock::_ResVasp(I n) +{ + return _Dst(0)?_DstVasp(n):_SrcVasp(n); +} + + + |