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 SolidGraph *_solidgraph; 00082 FieldGraph *_fieldgraph; 00083 EqPotGraph *_eqpotgraph; 00084 ParticleGraph *_particlegraph; 00085 MeshGraph *_meshgraph; 00086 00087 view_e _view; 00088 int _level; 00089 int _vb[3]; 00090 00091 size_t _eqlines_auto; 00092 std::vector<double> _eqlines_manual; 00093 size_t _particle_div; 00094 bool _scharge_field; 00095 bool _qm_discretation; 00096 bool _mesh; 00097 00098 field_type_e _fieldplot_sel; 00099 bool _fieldplot_logscale; 00100 00101 bool _cache; 00102 00103 void reset_graphs( void ); 00104 00105 public: 00106 00114 GeomPlot( Frame *frame, const Geometry *geom ); 00115 00118 ~GeomPlot(); 00119 00124 void disable_cache( void ); 00125 00128 void set_epot( const ScalarField *epot ); 00129 00132 void set_eqlines_manual( const std::vector<double> &pot ); 00133 00136 std::vector<double> get_eqlines_manual( void ) const { 00137 return( _eqlines_manual ); 00138 } 00139 00147 void set_eqlines_auto( size_t N ); 00148 00151 size_t get_eqlines_auto( void ) const { 00152 return( _eqlines_auto ); 00153 } 00154 00157 void set_bfield( const VectorField *bfield ) { 00158 _bfield = bfield; 00159 } 00160 00163 const VectorField *get_bfield( void ) const { 00164 return( _bfield ); 00165 } 00166 00169 void set_efield( const VectorField *efield ) { 00170 _efield = efield; 00171 } 00172 00175 const VectorField *get_efield( void ) const { 00176 return( _efield ); 00177 } 00178 00181 void set_trajdens( const ScalarField *tdens ); 00182 00185 const ScalarField *get_trajdens( void ) const { 00186 return( _tdens ); 00187 } 00188 00191 void set_scharge( const ScalarField *scharge ); 00192 00195 const ScalarField *get_scharge( void ) const { 00196 return( _scharge ); 00197 } 00198 00201 void set_fieldgraph_plot( field_type_e fieldplot ); 00202 00205 field_type_e get_fieldgraph_plot( void ) const { 00206 return( _fieldplot_sel ); 00207 } 00208 00211 void set_fieldgraph_logscale( bool enable ); 00212 00215 bool get_fieldgraph_logscale( void ) const { 00216 return( _fieldplot_logscale ); 00217 } 00218 00221 void set_particle_database( const ParticleDataBase *pdb ) { 00222 set_particledatabase( pdb ); 00223 } 00224 00227 void set_particledatabase( const ParticleDataBase *pdb ); 00228 00235 void set_particle_div( size_t particle_div ); 00236 00239 size_t get_particle_div( void ) const { 00240 return( _particle_div ); 00241 } 00242 00249 void set_qm_discretation( bool enable ); 00250 00253 bool get_qm_discretation( void ) const { 00254 return( _qm_discretation ); 00255 } 00256 00262 void set_mesh( bool enable ); 00263 00266 bool get_mesh( void ) const { 00267 return( _mesh ); 00268 } 00269 00277 void set_view( view_e view, int level = -1 ); 00278 00281 view_e get_view( void ) const { 00282 return( _view ); 00283 } 00284 00287 int get_level( void ) const { 00288 return( _level ); 00289 } 00290 00293 double get_level_si( void ) const { 00294 return( _geom->origo(_vb[2])+_level*_geom->h() ); 00295 } 00296 00299 int vb( int i ) const { 00300 return( _vb[i] ); 00301 } 00302 00305 void get_vb( int vb[3] ) const { 00306 vb[0] = _vb[0]; 00307 vb[1] = _vb[1]; 00308 vb[2] = _vb[2]; 00309 } 00310 00311 }; 00312 00313 00314 #endif