1 ////////////////////////////////////////////////////////////////////////////////////// 2 // This file is distributed under the University of Illinois/NCSA Open Source License. 3 // See LICENSE file in top directory for details. 4 // 5 // Copyright (c) 2018 QMCPACK developers 6 // 7 // File developed by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Lab 8 // Ye Luo, yeluo@anl.gov, Argonne National Lab 9 // 10 // File created by: Ye Luo, yeluo@anl.gov, Argonne National Lab 11 ////////////////////////////////////////////////////////////////////////////////////// 12 13 #ifndef QMCPLUSPLUS_QMC_TYPES_H 14 #define QMCPLUSPLUS_QMC_TYPES_H 15 16 #include "OhmmsPETE/TinyVector.h" 17 #include "OhmmsPETE/Tensor.h" 18 #include <complex> 19 20 namespace qmcplusplus 21 { 22 /* Facilitates use of full/mixed precision without rebuilding the code 23 * 24 * a template class may define its local types 25 * template<typename Prec> 26 * class Foo 27 * { 28 * using FooTypes = QMCTypes<Prec>; 29 * ... 30 * }; 31 * 32 */ 33 template<typename Precision, int DIM> 34 class QMCTypes final 35 { 36 public: 37 using RealType = Precision; 38 using ComplexType = std::complex<Precision>; 39 #ifdef QMC_COMPLEX 40 using ValueType = ComplexType; 41 #else 42 using ValueType = RealType; 43 #endif 44 using GradType = TinyVector<ValueType, DIM>; 45 using PosType = TinyVector<RealType, DIM>; 46 using TensorType = Tensor<RealType, DIM>; 47 }; 48 49 } // namespace qmcplusplus 50 #endif 51