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 int _fieldplot_steps; 00100 zscale_e _fieldplot_zscale; 00101 00102 bool _cache; 00103 00104 void reset_graphs( void ); 00105 00106 public: 00107 00115 GeomPlot( Frame *frame, const Geometry *geom ); 00116 00119 ~GeomPlot(); 00120 00125 void disable_cache( void ); 00126 00129 void set_epot( const ScalarField *epot ); 00130 00133 void set_eqlines_manual( const std::vector<double> &pot ); 00134 00137 std::vector<double> get_eqlines_manual( void ) const { 00138 return( _eqlines_manual ); 00139 } 00140 00148 void set_eqlines_auto( size_t N ); 00149 00152 size_t get_eqlines_auto( void ) const { 00153 return( _eqlines_auto ); 00154 } 00155 00158 void set_bfield( const VectorField *bfield ) { 00159 _bfield = bfield; 00160 } 00161 00164 const VectorField *get_bfield( void ) const { 00165 return( _bfield ); 00166 } 00167 00170 void set_efield( const VectorField *efield ) { 00171 _efield = efield; 00172 } 00173 00176 const VectorField *get_efield( void ) const { 00177 return( _efield ); 00178 } 00179 00182 void set_trajdens( const ScalarField *tdens ); 00183 00186 const ScalarField *get_trajdens( void ) const { 00187 return( _tdens ); 00188 } 00189 00192 void set_scharge( const ScalarField *scharge ); 00193 00196 const ScalarField *get_scharge( void ) const { 00197 return( _scharge ); 00198 } 00199 00202 void set_fieldgraph_plot( field_type_e fieldplot ); 00203 00206 field_type_e get_fieldgraph_plot( void ) const { 00207 return( _fieldplot_sel ); 00208 } 00209 00216 void set_fieldgraph_stepped_palette( int steps ); 00217 00220 void set_fieldgraph_zscale( zscale_e zscale ); 00221 00224 zscale_e get_fieldgraph_zscale( void ) const { 00225 return( _fieldplot_zscale ); 00226 } 00227 00230 void set_particle_database( const ParticleDataBase *pdb ) { 00231 set_particledatabase( pdb ); 00232 } 00233 00236 void set_particledatabase( const ParticleDataBase *pdb ); 00237 00244 void set_particle_div( size_t particle_div ); 00245 00248 size_t get_particle_div( void ) const { 00249 return( _particle_div ); 00250 } 00251 00258 void set_qm_discretation( bool enable ); 00259 00262 bool get_qm_discretation( void ) const { 00263 return( _qm_discretation ); 00264 } 00265 00271 void set_mesh( bool enable ); 00272 00275 bool get_mesh( void ) const { 00276 return( _mesh ); 00277 } 00278 00286 void set_view( view_e view, int level = -1 ); 00287 00294 void set_view_si( view_e view, double level ); 00295 00298 view_e get_view( void ) const { 00299 return( _view ); 00300 } 00301 00304 int get_level( void ) const { 00305 return( _level ); 00306 } 00307 00310 double get_level_si( void ) const { 00311 return( _geom->origo(_vb[2])+_level*_geom->h() ); 00312 } 00313 00316 int vb( int i ) const { 00317 return( _vb[i] ); 00318 } 00319 00322 void get_vb( int vb[3] ) const { 00323 vb[0] = _vb[0]; 00324 vb[1] = _vb[1]; 00325 vb[2] = _vb[2]; 00326 } 00327 00328 }; 00329 00330 00331 #endif 00332