namespace ewalena
0.2.15
ewalena is not an acronym
|
00001 // ------------------------------------------------------------------- 00002 // @author Toby D. Young 00003 // @version $Id: basis_state_base.h 702 2012-02-13 02:08:58Z tyoung76 $ 00004 // 00005 // Copyright 2012 namespace ewalena authors. All rights reserved. 00006 // 00007 // Redistribution and use in source and binary forms, with or without 00008 // modification, are permitted provided that the following conditions 00009 // are met: 00010 // 00011 // 1. Redistributions of source code must retain the above copyright 00012 // notice, this list of conditions and the following disclaimer. 00013 // 00014 // 2. Redistributions in binary form must reproduce the above 00015 // copyright notice, this list of conditions and the following 00016 // disclaimer in the documentation and/or other materials provided 00017 // with the distribution. 00018 // 00019 // THIS SOFTWARE IS PROVIDED BY THE NAMEPSACE EWALENA AUTHORS ``AS 00020 // IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00021 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00022 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00023 // NAMESPACE EWALENA AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 00024 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00025 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00026 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00027 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00028 // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00029 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 00030 // OF THE POSSIBILITY OF SUCH DAMAGE. 00031 // 00032 // The views and conclusions contained in the software and 00033 // documentation are those of the authors and should not be 00034 // interpreted as representing official policies, either expressed or 00035 // implied, of the namespace ewalena authors. 00036 // ------------------------------------------------------------------- 00037 00038 #ifndef __ewalena_basis_base_h 00039 #define __ewalena_basis_base_h 00040 00041 #ifdef EWALENA_HAVE_CONFIG_H 00042 #include <ewalena/base/config.h> 00043 #endif 00044 00045 #include <ewalena/numerics/basis_data.h> 00046 #include <ewalena/base/point.h> 00047 00048 #include <string> 00049 #include <vector> 00050 00051 namespace ewalena 00052 { 00053 00061 template <int dim, typename ValueType = double> 00062 class BasisBase 00063 : 00064 protected BasisData<ValueType> 00065 { 00066 00067 private: 00068 00069 Point<dim, ValueType> __origin; 00070 00071 protected: 00072 00073 public: 00074 00075 00079 BasisBase (const BasisData<ValueType> &basis_data); 00080 00084 virtual ~BasisBase (); 00085 00089 unsigned int n_contractions () const; 00090 00094 virtual std::string name () const; 00095 00099 ewalena::Point<dim, ValueType> origin () const; 00100 00104 bool is_orthogonal_basis (const ValueType tolerance = 1e-12); 00105 00109 virtual ValueType value (const ewalena::Point<dim, ValueType> &point) const; 00110 00114 virtual ValueType laplacian (const BasisBase<dim, ValueType> &basis_i, 00115 const BasisBase<dim, ValueType> &basis_j) const; 00116 00120 virtual ValueType integral (const BasisBase<dim, ValueType> &basis_i, 00121 const BasisBase<dim, ValueType> &basis_j) const; 00122 00126 virtual ValueType integral (const BasisBase<dim, ValueType> &basis_i, 00127 const BasisBase<dim, ValueType> &basis_j, 00128 const BasisBase<dim, ValueType> &basis_k, 00129 const BasisBase<dim, ValueType> &basis_l) const; 00130 00131 }; /* BasisBase */ 00132 00133 } /* namespace ewalena */ 00134 00135 #endif /* __ewalena_basis_base_h */ 00136