Overview
In the main files of our application: my_laplacian_application.h and my_laplacian_application.cpp we will have to include the code describing our element and condition and tell Kratos how to use it. The original files created in the previous section require some minor modifications, which are explained below:
Header file: my_laplacian_application.h
The first lines are just the typical legal issues related to the Kratos license. Just add your name as the main author of this application.
// | / |
// ' / __| _` | __| _ \ __|
// . \ | ( | | ( |\__ `
// _|\_\_| \__,_|\__|\___/ ____/
// Multi-Physics
//
// License: BSD License
// Kratos default license: kratos/license.txt
//
// Main authors: @{KRATOS_APP_AUTHOR}
//
In order to avoid class redefinition, you have to define a label for your application definition, as follows:
#if !defined(KRATOS_MY_LAPLACIAN_APPLICATION_H_INCLUDED )
#define KRATOS_MY_LAPLACIAN_APPLICATION_H_INCLUDED
the #endif
is at the end of the code (the rest of the lines must be included between these ones):
#endif // KRATOS_MY_LAPLACIAN_APPLICATION_H_INCLUDED defined
We will need to add the “include” files, such as the element and condition:
#include "custom_elements/my_laplacian_element.h"
#include "custom_conditions/point_source_condition.h"
The class MyLaplacianApplication
definition comes inside the Kratos namespace. Then, you will need to declare the element and conditions as private member variables:
private:
///@name Static Member Variables
///@{
///@}
///@name Member Variables
///@{
const MyLaplacianElement mMyLaplacianElement;
const PointSourceCondition mPointSourceCondition;
///@}
As specified in the Style Guide, all member variables inside a class are identified by a lower case m at the beginning of the name.
Source file: my_laplacian_application.cpp
First of all, remember to customize the header and add the include files. The elements initialization will need the geometries headers:
// | / |
// ' / __| _` | __| _ \ __|
// . \ | ( | | ( |\__ `
// _|\_\_| \__,_|\__|\___/ ____/
// Multi-Physics
//
// License: BSD License
// Kratos default license: kratos/license.txt
//
// Main authors: HERE_YOUR_NAME
//
// System includes
// External includes
// Project includes
#include "geometries/triangle_2d_3.h"
#include "geometries/line_2d_2.h"
#include "geometries/point_2d.h"
#include "my_laplacian_application.h"
#include "my_laplacian_application_variables.h"
The implementation file includes the initialization of the element and conditions inside the constructor, and then, registering them:
namespace Kratos {
KratosMyLaplacianApplication::KratosMyLaplacianApplication():
KratosApplication("MyLaplacianApplication"),
mMyLaplacianElement( 0, Element::GeometryType::Pointer( new Triangle2D3<Node>( Element::GeometryType::PointsArrayType (3) ) ) ),
mPointSourceCondition( 0, Element::GeometryType::Pointer( new Point2D <Node>( Element::GeometryType::PointsArrayType (1) ) ) )
{}
void KratosMyLaplacianApplication::Register() {
// calling base class register to register Kratos components
KratosApplication::Register();
std::cout << "Initializing KratosMyLaplacianApplication... " << std::endl;
KRATOS_REGISTER_VARIABLE( POINT_HEAT_SOURCE )
KRATOS_REGISTER_ELEMENT( "MyLaplacianElement", mMyLaplacianElement )
KRATOS_REGISTER_CONDITION( "PointSourceCondition", mPointSourceCondition )
}
} // namespace Kratos.
Variables files
We only need to create POINT_HEAT_SOURCE
variable since the other variables needed in this app are already included in the kernel (CONDUCTIVITY
and TEMPERATURE
). The application generator has carried out the next tasks:
- Define the variables in the
application_variables.h
(just remember to customize the header) - Create the variables in the
application_variables.cpp
- Register the variables in Kratos in the
application.h
, as we have seen above - Register the variables in Python in the
custom_python/python_application.cpp
file.
CMakeLists.txt
Finally, we will need to add the new sources to the cmake file (only the .cpp are needed).
This is currently done automatically with the commands. Check that you have these lines in your CMakeLists.txt.
## MyLaplacian Core sources
file(GLOB_RECURSE KRATOS_MY_LAPLACIAN_APPLICATION_CORE
${CMAKE_CURRENT_SOURCE_DIR}/my_laplacian_application.cpp
${CMAKE_CURRENT_SOURCE_DIR}/my_laplacian_application_variables.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_conditions/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_elements/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_processes/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/custom_utilities/*.cpp
)