IBSimu 1.0.4
geomplot.hpp
Go to the documentation of this file.
00001 
00005 /* Copyright (c) 2005-2010 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 "frame.hpp"
00048 #include "geometry.hpp"
00049 #include "scalarfield.hpp"
00050 #include "vectorfield.hpp"
00051 #include "particledatabase.hpp"
00052 
00053 #include "solidgraph.hpp"
00054 #include "eqpotgraph.hpp"
00055 #include "particlegraph.hpp"
00056 #include "meshgraph.hpp"
00057 #include "fieldgraph.hpp"
00058 
00059 
00063 class GeomPlot {
00064 
00065     Frame                   *_frame;
00066 
00067     const Geometry          *_geom;
00068     const ScalarField       *_epot;
00069     const ScalarField       *_scharge;
00070     const VectorField       *_bfield;
00071     const ParticleDataBase  *_pdb;
00072 
00073     SolidGraph              *_solidgraph;
00074     FieldGraph              *_fieldgraph;
00075     EqPotGraph              *_eqpotgraph;
00076     ParticleGraph           *_particlegraph;
00077     MeshGraph               *_meshgraph;
00078 
00079     view_e                  _view;
00080     int                     _level;
00081     int                     _vb[3];
00082 
00083     size_t                  _eqlines_auto;
00084     std::vector<double>     _eqlines_manual;
00085     size_t                  _particle_div;
00086     bool                    _scharge_field;
00087     bool                    _qm_discretation;
00088     bool                    _mesh;
00089 
00090     bool                    _cache;
00091 
00092     void reset_graphs( void );
00093 
00094 public:
00095 
00103     GeomPlot( Frame *frame, const Geometry *geom );
00104 
00105     ~GeomPlot();
00106 
00107     void disable_cache( void );
00108 
00109     void set_epot( const ScalarField *epot );
00110 
00111     void set_eqlines_manual( const std::vector<double> &pot );
00112 
00113     std::vector<double> get_eqlines_manual( void ) {
00114         return( _eqlines_manual );
00115     }
00116 
00117     void set_eqlines_auto( size_t N );
00118 
00119     size_t get_eqlines_auto( void ) {
00120         return( _eqlines_auto );
00121     }
00122 
00129     void set_bfield( const VectorField *bfield );
00130 
00131     void set_scharge( const ScalarField *scharge );
00132 
00133     void set_scharge_field( bool enable );
00134     
00135     bool get_scharge_field( void ) {
00136         return( _scharge_field );
00137     }
00138     
00139     void set_particle_database( const ParticleDataBase *pdb ) {
00140         set_particledatabase( pdb );
00141     }
00142 
00143     void set_particledatabase( const ParticleDataBase *pdb );
00144 
00145     void set_particle_div( size_t particle_div );
00146 
00147     size_t get_particle_div( void ) {
00148         return( _particle_div );
00149     }
00150 
00151     void set_qm_discretation( bool enable );
00152 
00153     bool get_qm_discretation( void ) {
00154         return( _qm_discretation );
00155     }
00156 
00157     void set_mesh( bool enable );
00158 
00159     bool get_mesh( void ) {
00160         return( _mesh );
00161     }
00162 
00170     void set_view( view_e view, int level = -1 );
00171 
00172     view_e get_view( void ) const {
00173         return( _view );
00174     }
00175 
00176     int get_level( void ) const {
00177         return( _level );
00178     }
00179 
00180     double get_level_si( void ) const {
00181         return( _geom->origo(_vb[2])+_level*_geom->h() );
00182     }
00183 
00184     int vb( int i ) const {
00185         return( _vb[i] );
00186     }
00187 
00188     void get_vb( int vb[3] ) const {
00189         vb[0] = _vb[0];
00190         vb[1] = _vb[1];
00191         vb[2] = _vb[2];
00192     }
00193     
00194 };
00195 
00196 
00197 #endif
00198 
00199 
00200 
00201 
00202