geomplot.hpp
Go to the documentation of this file.
00001 00005 /* Copyright (c) 2005-2011 Taneli Kalvas. All rights reserved. 00006 * 00007 * You can redistribute this software and/or modify it under the terms 00008 * of the GNU General Public License as published by the Free Software 00009 * Foundation; either version 2 of the License, or (at your option) 00010 * any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but 00013 * WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this library (file "COPYING" included in the package); 00019 * if not, write to the Free Software Foundation, Inc., 51 Franklin 00020 * Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 * 00022 * If you have questions about your rights to use or distribute this 00023 * software, please contact Berkeley Lab's Technology Transfer 00024 * Department at TTD@lbl.gov. Other questions, comments and bug 00025 * reports should be sent directly to the author via email at 00026 * taneli.kalvas@jyu.fi. 00027 * 00028 * NOTICE. This software was developed under partial funding from the 00029 * U.S. Department of Energy. As such, the U.S. Government has been 00030 * granted for itself and others acting on its behalf a paid-up, 00031 * nonexclusive, irrevocable, worldwide license in the Software to 00032 * reproduce, prepare derivative works, and perform publicly and 00033 * display publicly. Beginning five (5) years after the date 00034 * permission to assert copyright is obtained from the U.S. Department 00035 * of Energy, and subject to any subsequent five (5) year renewals, 00036 * the U.S. Government is granted for itself and others acting on its 00037 * behalf a paid-up, nonexclusive, irrevocable, worldwide license in 00038 * the Software to reproduce, prepare derivative works, distribute 00039 * copies to the public, perform publicly and display publicly, and to 00040 * permit others to do so. 00041 */ 00042 00043 #ifndef GEOMPLOT_HPP 00044 #define GEOMPLOT_HPP 1 00045 00046 00047 #include "types.hpp" 00048 #include "frame.hpp" 00049 #include "geometry.hpp" 00050 #include "scalarfield.hpp" 00051 #include "vectorfield.hpp" 00052 #include "particledatabase.hpp" 00053 00054 #include "solidgraph.hpp" 00055 #include "eqpotgraph.hpp" 00056 #include "particlegraph.hpp" 00057 #include "meshgraph.hpp" 00058 #include "fieldgraph.hpp" 00059 00060 00061 00062 00069 class GeomPlot { 00070 00071 Frame *_frame; 00072 00073 const Geometry *_geom; 00074 const ScalarField *_epot; 00075 const ScalarField *_scharge; 00076 const ScalarField *_tdens; 00077 const VectorField *_bfield; 00078 const VectorField *_efield; 00079 const ParticleDataBase *_pdb; 00080 00081 FieldGraph _fieldgraph; 00082 00083 SolidGraph *_solidgraph; 00084 EqPotGraph *_eqpotgraph; 00085 ParticleGraph *_particlegraph; 00086 MeshGraph *_meshgraph; 00087 00088 view_e _view; 00089 int _level; 00090 int _vb[3]; 00091 00092 size_t _eqlines_auto; 00093 std::vector<double> _eqlines_manual; 00094 size_t _particle_div; 00095 bool _scharge_field; 00096 bool _qm_discretation; 00097 bool _mesh; 00098 00099 bool _cache; 00100 00101 void reset_graphs( void ); 00102 00103 public: 00104 00112 GeomPlot( Frame &frame, const Geometry &geom ); 00113 00116 ~GeomPlot(); 00117 00122 void disable_cache( void ); 00123 00126 void set_epot( const ScalarField *epot ); 00127 00130 void set_eqlines_manual( const std::vector<double> &pot ); 00131 00134 std::vector<double> get_eqlines_manual( void ) const { 00135 return( _eqlines_manual ); 00136 } 00137 00145 void set_eqlines_auto( size_t N ); 00146 00149 size_t get_eqlines_auto( void ) const { 00150 return( _eqlines_auto ); 00151 } 00152 00155 void set_bfield( const VectorField *bfield ); 00156 00159 const VectorField *get_bfield( void ) const { 00160 return( _bfield ); 00161 } 00162 00165 void set_efield( const VectorField *efield ); 00166 00169 const VectorField *get_efield( void ) const { 00170 return( _efield ); 00171 } 00172 00175 void set_trajdens( const ScalarField *tdens ); 00176 00179 const ScalarField *get_trajdens( void ) const { 00180 return( _tdens ); 00181 } 00182 00185 void set_scharge( const ScalarField *scharge ); 00186 00189 const ScalarField *get_scharge( void ) const { 00190 return( _scharge ); 00191 } 00192 00195 void set_fieldgraph_plot( field_type_e fieldplot ); 00196 00199 FieldGraph &fieldgraph( void ) { 00200 return( _fieldgraph ); 00201 } 00202 00203 00206 void set_particle_database( const ParticleDataBase *pdb ) { 00207 set_particledatabase( pdb ); 00208 } 00209 00212 void set_particledatabase( const ParticleDataBase *pdb ); 00213 00220 void set_particle_div( size_t particle_div ); 00221 00224 size_t get_particle_div( void ) const { 00225 return( _particle_div ); 00226 } 00227 00234 void set_qm_discretation( bool enable ); 00235 00238 bool get_qm_discretation( void ) const { 00239 return( _qm_discretation ); 00240 } 00241 00247 void set_mesh( bool enable ); 00248 00251 bool get_mesh( void ) const { 00252 return( _mesh ); 00253 } 00254 00262 void set_view( view_e view, int level = -1 ); 00263 00270 void set_view_si( view_e view, double level ); 00271 00274 view_e get_view( void ) const { 00275 return( _view ); 00276 } 00277 00280 int get_level( void ) const { 00281 return( _level ); 00282 } 00283 00286 double get_level_si( void ) const { 00287 return( _geom->origo(_vb[2])+_level*_geom->h() ); 00288 } 00289 00292 int vb( int i ) const { 00293 return( _vb[i] ); 00294 } 00295 00298 void get_vb( int vb[3] ) const { 00299 vb[0] = _vb[0]; 00300 vb[1] = _vb[1]; 00301 vb[2] = _vb[2]; 00302 } 00303 00304 }; 00305 00306 00307 #endif 00308