libMesh
main.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2017 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 // <h1>Solution Transfer Example 1 - </h1>
21 // \author Derek Gaston
22 // \date 2013
23 //
24 // This example demonstrates how to use the DTKSolutionTransfer object
25 // to transfer a solution from one Mesh to another.
26 
27 // Basic include files needed for the mesh functionality.
28 #include "libmesh/libmesh.h"
29 #include "libmesh/mesh.h"
30 #include "libmesh/mesh_generation.h"
31 #include "libmesh/explicit_system.h"
32 #include "libmesh/equation_systems.h"
33 #include "libmesh/exodusII_io.h"
34 #include "libmesh/libmesh_config.h"
35 
36 #ifdef LIBMESH_TRILINOS_HAVE_DTK
37 #include "libmesh/dtk_solution_transfer.h"
38 #endif
39 
40 // Bring in everything from the libMesh namespace
41 using namespace libMesh;
42 
43 
45  const Parameters & /* parameters */,
46  const std::string &,
47  const std::string &)
48 {
49  return p(0)*p(0) + 1; // x^2 + 1
50 }
51 
53  const std::string & system_name)
54 {
55  ExplicitSystem & system = es.get_system<ExplicitSystem>(system_name);
56  es.parameters.set<Real> ("time") = system.time = 0;
58 }
59 
60 int main(int argc, char * argv[])
61 {
62  LibMeshInit init (argc, argv);
63 
64 #if !defined(LIBMESH_TRILINOS_HAVE_DTK)
65  // Skip this example (and use a different return code) if libMesh
66  // was compiled without Trilinos+DTK support.
67  libmesh_example_requires(false, "--enable-trilinos");
68 
69 #else
70 
71  Mesh from_mesh(init.comm());
72  MeshTools::Generation::build_cube(from_mesh, 4, 4, 4, 0, 1, 0, 1, 0, 1, HEX8);
73  from_mesh.print_info();
74  EquationSystems from_es(from_mesh);
75  System & from_sys = from_es.add_system<ExplicitSystem>("From");
76  unsigned int from_var = from_sys.add_variable("from");
78  from_es.init();
79 
80  ExodusII_IO(from_mesh).write_equation_systems("from.e", from_es);
81 
82  Mesh to_mesh(init.comm());
83  MeshTools::Generation::build_cube(to_mesh, 5, 5, 5, 0, 1, 0, 1, 0, 1, TET4);
84  to_mesh.print_info();
85  EquationSystems to_es(to_mesh);
86  System & to_sys = to_es.add_system<ExplicitSystem>("To");
87  unsigned int to_var = to_sys.add_variable("to");
88  to_es.init();
89 
90  DTKSolutionTransfer dtk_transfer(init.comm());
91 
92  dtk_transfer.transfer(from_sys.variable(from_var), to_sys.variable(to_var));
93 
94  to_es.update();
95  ExodusII_IO(to_mesh).write_equation_systems("to.e", to_es);
96 
97 #endif
98 
99  return 0;
100 }
Real time
For time-dependent problems, this is the time t at the beginning of the current timestep.
Definition: system.h:1545
This is the EquationSystems class.
virtual void transfer(const Variable &from_var, const Variable &to_var) libmesh_override
Transfer the values of a variable to another.
This class provides the ability to map between arbitrary, user-defined strings and several data types...
Definition: parameters.h:63
int main(int argc, char *argv[])
Definition: main.C:60
The ExodusII_IO class implements reading meshes in the ExodusII file format from Sandia National Labs...
Definition: exodusII_io.h:52
unsigned int add_variable(const std::string &var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=libmesh_nullptr)
Adds the variable var to the list of variables for this system.
Definition: system.C:1101
const class libmesh_nullptr_t libmesh_nullptr
void project_solution(FunctionBase< Number > *f, FunctionBase< Gradient > *g=libmesh_nullptr) const
Projects arbitrary functions onto the current solution.
The LibMeshInit class, when constructed, initializes the dependent libraries (e.g.
Definition: libmesh.h:62
The libMesh namespace provides an interface to certain functionality in the library.
void initialize(EquationSystems &es, const std::string &system_name)
Definition: main.C:52
Number initial_value(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition: main.C:44
const Variable & variable(unsigned int var) const
Return a constant reference to Variable var.
Definition: system.h:2114
This is the base class for classes which contain information related to any physical process that mig...
Definition: system.h:76
void init(triangulateio &t)
Initializes the fields of t to NULL/0 as necessary.
virtual System & add_system(const std::string &system_type, const std::string &name)
Add the system of type system_type named name to the systems array.
const Parallel::Communicator & comm() const
Definition: libmesh.h:81
void attach_init_function(void fptr(EquationSystems &es, const std::string &name))
Register a user function to use in initializing the system.
Definition: system.C:1760
virtual void write_equation_systems(const std::string &, const EquationSystems &, const std::set< std::string > *system_names=libmesh_nullptr)
This method implements writing a mesh with data to a specified file where the data is taken from the ...
Definition: mesh_output.C:31
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
T & set(const std::string &)
Definition: parameters.h:469
Parameters parameters
Data structure holding arbitrary parameters.
Implementation of a SolutionTransfer object that uses the DataTransferKit (https://github.com/CNERG/DataTransferKit) to transfer variables back and forth between systems.
const T_sys & get_system(const std::string &name) const
virtual void init()
Initialize all the systems.
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default.
Definition: mesh.h:50
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
void update()
Updates local values for all the systems.
void build_cube(UnstructuredMesh &mesh, const unsigned int nx=0, const unsigned int ny=0, const unsigned int nz=0, const Real xmin=0., const Real xmax=1., const Real ymin=0., const Real ymax=1., const Real zmin=0., const Real zmax=1., const ElemType type=INVALID_ELEM, const bool gauss_lobatto_grid=false)
Builds a (elements) cube.
The ExplicitSystem provides only "right hand side" storage, which should be sufficient for solving mo...