IBSimu 1.0.4
|
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