ExaTN
functor_init_val.hpp
1 
12 #ifndef EXATN_NUMERICS_FUNCTOR_INIT_VAL_HPP_
13 #define EXATN_NUMERICS_FUNCTOR_INIT_VAL_HPP_
14 
15 #include "Identifiable.hpp"
16 
17 #include "tensor_basic.hpp"
18 
19 #include "tensor_method.hpp"
20 
21 #include <complex>
22 #include <string>
23 
24 namespace exatn{
25 
26 namespace numerics{
27 
28 class FunctorInitVal: public talsh::TensorFunctor<Identifiable>{
29 public:
30 
31  FunctorInitVal(): init_val_(0.0){};
32 
33  template<typename NumericType>
34  FunctorInitVal(NumericType value): init_val_(value){}
35  virtual ~FunctorInitVal() = default;
36 
37  virtual const std::string name() const override
38  {return "TensorFunctorInitVal";}
39 
40  virtual const std::string description() const override
41  {return "Initializes a tensor to a scalar value";}
42 
43  virtual void pack(BytePacket & packet) override
44  {
45  appendToBytePacket(&packet,init_val_.real());
46  appendToBytePacket(&packet,init_val_.imag());
47  return;
48  }
49 
50  virtual void unpack(BytePacket & packet) override
51  {
52  double real,imag;
53  extractFromBytePacket(&packet,real);
54  extractFromBytePacket(&packet,imag);
55  init_val_ = std::complex<double>{real,imag};
56  return;
57  }
58 
59  virtual int apply(talsh::Tensor & local_tensor) override;
60 
61 private:
62 
63  std::complex<double> init_val_; //scalar initialization value
64 };
65 
66 } //namespace numerics
67 
68 } //namespace exatn
69 
70 #endif //EXATN_NUMERICS_FUNCTOR_INIT_VAL_HPP_
exatn::numerics::FunctorInitVal
Definition: functor_init_val.hpp:28
exatn
Definition: DriverClient.hpp:10