00001 // 00002 // C++ Interface: femaxxdriver 00003 // 00004 // Description: 00005 // 00006 // 00007 // Author: Roman Geus <geus@maxwell>, (C) 2004 00008 // 00009 // Copyright: See COPYING file that comes with this distribution 00010 // 00011 // 00012 #ifndef FEMAXXDRIVER_H 00013 #define FEMAXXDRIVER_H 00014 00015 #include <Teuchos_ParameterList.hpp> 00016 #include "HDF5ParallelReader.h" 00017 00018 // forward declarations 00019 namespace mesh { 00020 class TetMesh; 00021 } 00022 class FemaxMesh; 00023 class Epetra_Comm; 00024 class Epetra_SerialDenseVector; 00025 class Epetra_MultiVector; 00026 00035 class FemaxxDriver { 00036 public: 00037 FemaxxDriver(const Epetra_Comm& comm, Teuchos::ParameterList& params); 00038 00039 ~FemaxxDriver(); 00040 00041 private: 00044 FemaxxDriver(const FemaxxDriver&); 00045 00048 FemaxxDriver& operator=(const FemaxxDriver&); 00049 00050 public: 00053 void run(); 00054 00056 void load_mesh(); 00057 00059 void calculate_eigenfields(); 00060 00062 void postprocess(); 00063 00067 const Teuchos::ParameterList& get_params() { 00068 return params_; 00069 } 00070 00074 FemaxMesh& get_femax_mesh() { 00075 return *femax_mesh_; 00076 } 00077 00081 mesh::TetMesh& get_tet_mesh() { 00082 return *tmesh_; 00083 } 00084 00089 static void set_defaults(Teuchos::ParameterList& params); 00090 00098 const Epetra_MultiVector get_eigenvectors(); 00099 00107 Epetra_SerialDenseVector get_eigenvalues(); 00108 00110 const Epetra_Comm& get_comm() const { 00111 return comm_; 00112 } 00113 00114 protected: 00117 const Epetra_Comm& comm_; 00120 Teuchos::ParameterList params_; 00123 Epetra_MultiVector* Q_; 00126 double* lambda_; 00129 int nof_converged_; 00132 mesh::TetMesh* tmesh_; 00135 FemaxMesh* femax_mesh_; 00136 }; 00137 00138 #endif