GRINS-0.6.0
Public Member Functions | Protected Attributes | List of all members
GRINS::UnsteadyVisualization Class Reference

#include <unsteady_visualization.h>

Inheritance diagram for GRINS::UnsteadyVisualization:
Inheritance graph
[legend]
Collaboration diagram for GRINS::UnsteadyVisualization:
Collaboration graph
[legend]

Public Member Functions

 UnsteadyVisualization (const GetPot &input, const libMesh::Parallel::Communicator &comm LIBMESH_CAN_DEFAULT_TO_COMMWORLD)
 
 ~UnsteadyVisualization ()
 
virtual void output_residual (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const unsigned int time_step, const libMesh::Real time)
 
virtual void output_residual_sensitivities (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params, const unsigned int time_step, const libMesh::Real time)
 
virtual void output_adjoint (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const unsigned int time_step, const libMesh::Real time)
 
virtual void output_solution_sensitivities (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params, const unsigned int time_step, const libMesh::Real time)
 
void output (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system)
 
void output (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const unsigned int time_step, const libMesh::Real time)
 
void output_residual (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
 
void output_residual_sensitivities (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params)
 
void output_adjoint (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
 
void output_solution_sensitivities (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params)
 
void dump_visualization (std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
 

Protected Attributes

std::string _vis_output_file_prefix
 
std::vector< std::string > _output_format
 

Detailed Description

Definition at line 34 of file unsteady_visualization.h.

Constructor & Destructor Documentation

GRINS::UnsteadyVisualization::UnsteadyVisualization ( const GetPot &  input,
const libMesh::Parallel::Communicator &comm  LIBMESH_CAN_DEFAULT_TO_COMMWORLD 
)

Definition at line 42 of file unsteady_visualization.C.

44  : Visualization(input, comm)
45  {
46  return;
47  }
Visualization(const GetPot &input, const libMesh::Parallel::Communicator &comm LIBMESH_CAN_DEFAULT_TO_COMMWORLD)
Definition: visualization.C:50
GRINS::UnsteadyVisualization::~UnsteadyVisualization ( )

Definition at line 49 of file unsteady_visualization.C.

50  {
51  return;
52  }

Member Function Documentation

void GRINS::Visualization::dump_visualization ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
const std::string &  filename_prefix,
const libMesh::Real  time 
)
inherited

Definition at line 154 of file visualization.C.

Referenced by GRINS::Visualization::output(), GRINS::SteadyVisualization::output_adjoint(), and GRINS::SteadyVisualization::output_residual().

157  {
158  libMesh::MeshBase& mesh = equation_system->get_mesh();
159 
160  if( this->_vis_output_file_prefix == "unknown" )
161  {
162  // TODO: Need consisent way to print warning messages.
163  std::cout << " WARNING in Visualization::dump_visualization :"
164  << " using 'unknown' as file prefix since it was not set "
165  << std::endl;
166  }
167 
168  // If we're asked to put files in a subdirectory, let's make sure
169  // it exists
170  if (!mesh.comm().rank())
171  for (std::size_t pos = this->_vis_output_file_prefix.find('/');
172  pos != std::string::npos;
173  pos = this->_vis_output_file_prefix.find('/',++pos))
174  if (mkdir(this->_vis_output_file_prefix.substr(0,pos).c_str(),
175  0777) != 0 && errno != EEXIST)
176  libmesh_file_error(this->_vis_output_file_prefix.substr(0,pos));
177 
178  for( std::vector<std::string>::const_iterator format = _output_format.begin();
179  format != _output_format.end();
180  format ++ )
181  {
182  // The following is a modifed copy from the FIN-S code.
183  if ((*format) == "tecplot" ||
184  (*format) == "dat")
185  {
186  std::string filename = filename_prefix+".dat";
187  libMesh::TecplotIO(mesh,false).write_equation_systems( filename,
188  *equation_system );
189  }
190  else if ((*format) == "tecplot_binary" ||
191  (*format) == "plt")
192  {
193  std::string filename = filename_prefix+".plt";
194  libMesh::TecplotIO(mesh,true).write_equation_systems( filename,
195  *equation_system );
196  }
197  else if ((*format) == "gmv")
198  {
199  std::string filename = filename_prefix+".gmv";
200  libMesh::GMVIO(mesh).write_equation_systems( filename,
201  *equation_system );
202  }
203  else if ((*format) == "pvtu")
204  {
205  std::string filename = filename_prefix+".pvtu";
206  libMesh::VTKIO(mesh).write_equation_systems( filename,
207  *equation_system );
208  }
209  else if ((*format) == "ExodusII")
210  {
211  std::string filename = filename_prefix+".exo";
212 
213  // The "1" is hardcoded for the number of time steps because the ExodusII manual states that
214  // it should be the number of timesteps within the file. Here, we are explicitly only doing
215  // one timestep per file.
216  libMesh::ExodusII_IO(mesh).write_timestep
217  ( filename, *equation_system, 1, time );
218  }
219  else if ((*format) == "Nemesis")
220  {
221  std::string filename = filename_prefix+".nem";
222 
223  // The "1" is hardcoded for the number of time steps because the ExodusII manual states that
224  // it should be the number of timesteps within the file. Here, we are explicitly only doing
225  // one timestep per file.
226  libMesh::Nemesis_IO(mesh).write_timestep
227  ( filename, *equation_system, 1, time );
228  }
229  else if ((*format).find("xda") != std::string::npos ||
230  (*format).find("xdr") != std::string::npos)
231  {
232  std::string filename = filename_prefix+"."+(*format);
233  const bool binary = ((*format).find("xdr") != std::string::npos);
234  equation_system->write( filename,
235  binary ? GRINSEnums::ENCODE : GRINSEnums::WRITE,
236  libMesh::EquationSystems::WRITE_DATA |
237  libMesh::EquationSystems::WRITE_ADDITIONAL_DATA );
238  }
239  else if ((*format) == "mesh_only" )
240  {
241  std::string filename = filename_prefix+"_mesh.xda";
242  equation_system->get_mesh().write( filename );
243  }
244  else
245  {
246  // TODO: Do we want to use this to error throughout the code?
247  // TODO: (at least need to pass/print some message/string) - sahni
248  libmesh_error();
249  }
250  } // End loop over formats
251 
252  return;
253  }
std::vector< std::string > _output_format
std::string _vis_output_file_prefix
void GRINS::Visualization::output ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system)
inherited

Definition at line 98 of file visualization.C.

References GRINS::Visualization::_vis_output_file_prefix, and GRINS::Visualization::dump_visualization().

99  {
100  this->dump_visualization( equation_system, _vis_output_file_prefix, 0.0 );
101 
102  return;
103  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::Visualization::output ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
const unsigned int  time_step,
const libMesh::Real  time 
)
inherited

Definition at line 106 of file visualization.C.

109  {
110  std::stringstream suffix;
111 
112  suffix << time_step;
113 
114  std::string filename = this->_vis_output_file_prefix;
115  filename+="."+suffix.str();
116 
117  this->dump_visualization( equation_system, filename, time );
118 
119  return;
120  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::UnsteadyVisualization::output_adjoint ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const unsigned int  time_step,
const libMesh::Real  time 
)
virtual

Implements GRINS::Visualization.

Definition at line 130 of file unsteady_visualization.C.

References GRINS::CompositeQoI::get_qoi(), GRINS::CompositeQoI::n_qois(), and GRINS::QoIBase::name().

134  {
135  std::stringstream suffix;
136  suffix << time_step;
137 
138  const libMesh::DifferentiableQoI* raw_qoi = system->get_qoi();
139  const CompositeQoI* qoi = dynamic_cast<const CompositeQoI*>( raw_qoi );
140 
141  unsigned int n_qois = qoi->n_qois();
142 
143  for( unsigned int q = 0; q < n_qois; q++ )
144  {
145  libMesh::NumericVector<libMesh::Number>& dual_solution = system->get_adjoint_solution(q);
146 
147  const std::string& qoi_name = qoi->get_qoi(q).name();
148  std::string filename = this->_vis_output_file_prefix+"_unsteady_adjoint_"+qoi_name;
149  filename+="."+suffix.str();
150 
151  system->solution->swap( dual_solution );
152  equation_system->update();
153 
154  this->dump_visualization( equation_system, filename, time );
155 
156  // Now swap back and reupdate
157  system->solution->swap( dual_solution );
158  equation_system->update();
159  }
160  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::Visualization::output_adjoint ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system 
)
inherited

Definition at line 138 of file visualization.C.

140  {
141  this->output_adjoint( equation_system, system, 0, 0.0 );
142  }
void output_adjoint(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
void GRINS::UnsteadyVisualization::output_residual ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const unsigned int  time_step,
const libMesh::Real  time 
)
virtual

Implements GRINS::Visualization.

Definition at line 55 of file unsteady_visualization.C.

59  {
60  std::stringstream suffix;
61  suffix << time_step;
62 
63  std::string filename = this->_vis_output_file_prefix+"_unsteady_residual";
64 
65  filename+="."+suffix.str();
66 
67  // For the unsteady residual, we just want to evaluate F(u) from
68  // dU/dt = F(u). What we do is swap out the time solver to a
69  // SteadySolver and reassemble the residual. Then, we'll need to swap
70  // the solution and the rhs vector stashed in the system. Once we're done,
71  // we'll reset the time solver pointer back to the original guy.
72 
73  libMesh::AutoPtr<libMesh::TimeSolver> prev_time_solver(system->time_solver);
74 
75  libMesh::SteadySolver* steady_solver = new libMesh::SteadySolver( *(system) );
76 
77  system->time_solver = libMesh::AutoPtr<libMesh::TimeSolver>(steady_solver);
78 
79  system->assembly( true /*residual*/, false /*jacobian*/ );
80  system->rhs->close();
81 
82  // Swap solution with newly computed residual
83  system->solution->swap( *(system->rhs) );
84  // Update equation systems
85  equation_system->update();
86 
87  this->dump_visualization( equation_system, filename, time );
88 
89  // Now swap back and reupdate
90  system->solution->swap( *(system->rhs) );
91  equation_system->update();
92 
93  system->time_solver = prev_time_solver;
94 
95  return;
96  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::Visualization::output_residual ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system 
)
inherited

Definition at line 122 of file visualization.C.

124  {
125  this->output_residual( equation_system, system, 0, 0.0 );
126  return;
127  }
void output_residual(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system)
void GRINS::UnsteadyVisualization::output_residual_sensitivities ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const libMesh::ParameterVector &  params,
const unsigned int  time_step,
const libMesh::Real  time 
)
virtual

Implements GRINS::Visualization.

Definition at line 99 of file unsteady_visualization.C.

104  {
105  for (unsigned int p=0; p != params.size(); ++p)
106  {
107  std::stringstream suffix;
108  suffix << time_step;
109 
110  std::stringstream pstr;
111  pstr << p;
112 
113  std::string filename =
114  this->_vis_output_file_prefix + "_unsteady_dRdp" +
115  pstr.str() + '.' + suffix.str();
116 
117  // Swap solution with precomputed sensitivity rhs
118  system->solution->swap(system->get_sensitivity_rhs(p));
119  equation_system->update();
120 
121  this->dump_visualization( equation_system, filename, time );
122 
123  // Now swap back and reupdate
124  system->solution->swap(system->get_sensitivity_rhs(p));
125  equation_system->update();
126  }
127  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::Visualization::output_residual_sensitivities ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const libMesh::ParameterVector &  params 
)
inherited

Definition at line 130 of file visualization.C.

133  {
135  ( equation_system, system, params, 0, 0.0 );
136  }
void output_residual_sensitivities(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params)
void GRINS::UnsteadyVisualization::output_solution_sensitivities ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const libMesh::ParameterVector &  params,
const unsigned int  time_step,
const libMesh::Real  time 
)
virtual

Implements GRINS::Visualization.

Definition at line 163 of file unsteady_visualization.C.

168  {
169  for (unsigned int p=0; p != params.size(); ++p)
170  {
171  std::stringstream suffix;
172  suffix << time_step;
173 
174  std::stringstream pstr;
175  pstr << p;
176 
177  std::string filename =
178  this->_vis_output_file_prefix + "_unsteady_dudp" +
179  pstr.str() + '.' + suffix.str();
180 
181  // Swap solution with precomputed sensitivity solution
182  system->solution->swap(system->get_sensitivity_solution(p));
183  equation_system->update();
184 
185  this->dump_visualization( equation_system, filename, time );
186 
187  // Now swap back and reupdate
188  system->solution->swap(system->get_sensitivity_solution(p));
189  equation_system->update();
190  }
191  }
void dump_visualization(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, const std::string &filename_prefix, const libMesh::Real time)
std::string _vis_output_file_prefix
void GRINS::Visualization::output_solution_sensitivities ( std::tr1::shared_ptr< libMesh::EquationSystems >  equation_system,
GRINS::MultiphysicsSystem system,
const libMesh::ParameterVector &  params 
)
inherited

Definition at line 145 of file visualization.C.

148  {
150  ( equation_system, system, params, 0, 0.0 );
151  }
void output_solution_sensitivities(std::tr1::shared_ptr< libMesh::EquationSystems > equation_system, GRINS::MultiphysicsSystem *system, const libMesh::ParameterVector &params)

Member Data Documentation

std::vector<std::string> GRINS::Visualization::_output_format
protectedinherited

Definition at line 106 of file visualization.h.

Referenced by GRINS::Visualization::Visualization().

std::string GRINS::Visualization::_vis_output_file_prefix
protectedinherited

The documentation for this class was generated from the following files:

Generated on Mon Jun 22 2015 21:32:24 for GRINS-0.6.0 by  doxygen 1.8.9.1