Skip to main content

KernelOpt

This class contains the options for the kernel.

The structure of this class is given below.

Structure​

TYPE KernelOpt_
LOGICAL(LGT) :: isInitiated = .FALSE.
!! This variable is Set to true when we initiate the kernel

LOGICAL(LGT) :: isCommonDomain = .TRUE.
!! This variable is True when the domain is common.
!! It is useful in the case of multi-physics simulations.
!! In multi-physics applications different fields can have different
!! type and order of shape functions. To construct such shape functions
!! we may have to use different finite element meshes (hence, domains).
!! For example, in the fluid mechanics, we often use Taylor-Hood element
!! Which employs different order of interpolation for pressure and velocity.

LOGICAL(LGT) :: showTime = .FALSE.
!! If it is set to true then we create a file called
!! KernelName_time_stat.csv
!! This file contains the statics of time taken by the kernel
!! It will be helpful in improving the kernel

LOGICAL(LGT) :: unifyVTK = .FALSE.
!! if it is true all data are exported into one vtu file
!! in WriteData_vtk method

LOGICAL(LGT) :: createPVD = .FALSE.
!! if true paraview data file is created
!! in WriteData_vtk method

INTEGER(I4B) :: problemType = TypeKernelProblemOpt%scalar
!! Kernel problem type
!! TypeKernelProblemOpt%scalar
!! TypeKernelProblemOpt%Vector
!! TypeKernelProblemOpt%MultiPhysics

INTEGER(I4B) :: algorithm = 1
!! algorithm

INTEGER(I4B) :: vtkOutputFreq = 0
!! frequency of output with WriteData_vtk

INTEGER(I4B) :: hdfOutputFreq = 0
!! frequency of output with WriteData_hdf

INTEGER(I4B) :: coordinateSystem = TypeKernelCoordOpt%default
!! Spatial coordinate system type. It can take following values
!! `KERNEL_CARTESIAN` for Cartesian coordinates
!! `KERNEL_CYLINDRICAL` for Cylinderical coordinates
!! `KERNEL_SPHERICAL` for Sperical coordinates
!! NOTE: These parameters are defined in the AbstractKernelParam module.

INTEGER(I4B) :: maxIter = 100
!! Maximum number of iteration iterations
!! This is useful when when we use iterative solvers like
!! Newton method, Modified Newton method, or Iterative-predictor solvers.
!! NOTE: DEFAULT_maxIter is defined in AbstractKernelParam

INTEGER(I4B) :: timeDependency = TypeKernelTimeOpt%default
!! This variable indicates if the problem is time dependent or not.
!! It can take following values:
!! KERNEL_STEADY or KERNEL_STATIC
!! KERNEL_PSEUDOSTATIC
!! KERNEL_TRANSIENT or KERNEL_DYNAMIC
!! NOTE: These variables are defined in AbstractKernelParam

INTEGER(I4B) :: nsd = 0
!! Spatial dimension of the problem,

INTEGER(I4B) :: nnt = 1
!! Number of nodes in time element
!! NOTE: This variables is used only in space-time finite element methods

INTEGER(I4B) :: tdof = 0
!! Total number of degree of freedom per node
!! NOTE: This variable is Set internally by each kernel while
!! Setting the kernel.

INTEGER(I4B) :: postProcessOpt = 1
!! Postprocessing options
!! INFO: The actual action depends upon the specific kernels

INTEGER(I4B) :: currentTimeStep = 1
!! Current time step number of the simulation.
!! NOTE: This varible is needed in the transient simulation only.

INTEGER(I4B) :: totalTimeStep = 0
!! Total number of time step number in the simulation.
!! NOTE: This varible is needed in the transient simulation only.

! Reals

REAL(DFP) :: normRHS = 0.0_DFP
!! norm of the right-hand-side vector in the system of linear equations
!! NOTE: This variable is used internally

REAL(DFP) :: dt = 0.0_DFP
!! Time step size used in the pseudostatic and dynamic problems
!! Needed in transient case

REAL(DFP) :: startTime = 0.0
!! Starting time of simulation
!! NOTE: This varible is needed in the transient or pseudostatic simulation

REAL(DFP) :: endTime = 0.0
!! Final time of the simulation
!! NOTE: This varible is needed in the transient or pseudostatic simulation

REAL(DFP) :: currentTime = 0.0
!! The current time of the simulation
!! NOTE: This varible is needed in the transient simulation only.

REAL(DFP) :: lengthScale = 1.0_DFP
!! This variable denotes the length scale of the problem.
!! NOTE: This variable is for internal use only.

REAL(DFP) :: gravity(3) = 0.0_DFP
!! Acceleration vector due to gravity

REAL(DFP) :: incrementScale = 1.0_DFP
!! x = x + incrementScale * displacement

TYPE(KernelErrorOpt_) :: dispError
!! Displacement error

TYPE(KernelErrorOpt_) :: velError
!! Velocity error

TYPE(KernelErrorOpt_) :: solError
!! solution error

TYPE(KernelErrorOpt_) :: resError
!! Residual error

TYPE(String) :: name
!! This is the name of the kernel. It can be anything you want.

TYPE(String) :: engine
!! Which type of linear solver library (engine) we use to
!! solve system of linear equations. We can specify following
!! values.
!! `NATIVE_SERIAL`, `NATIVE_OMP`, `NATIVE_MPI`, `LIS_SERIAL`
!! `LIS_OMP`, `LIS_MPI`, `PETSC`

TYPE(String) :: tanmatProp
!! Symmetric or Unsymmetric tangent matrix

TYPE(String) :: tanmatName
!! MATRIX
!! BLOCKMATRIX

TYPE(String) :: outputPath
!! Path to put output files
!! Default is results

TYPE(String) :: domainFile
!! domain file name

TYPE(KernelBasisOpt_) :: basisForSpace
!! Basis function option for space

TYPE(KernelBasisOpt_) :: basisForTime
!! Basis function option for time

TYPE(KernelBasisOpt_) :: basisForPressure
!! Basis function option for pressure

TYPE(KernelBasisOpt_) :: basisForVelocity
!! Basis function option for velocity

TYPE(IterationData_) :: iterData
!! Iteration data
!! INFO: The actual action depends upon the specific kernels

END TYPE KernelOpt_

isInitiated​

This logical variable is set to true when we initiate the kernel.

isCommonDomain​

This variable is True when the domain is common, that is, all physical variables are defined on the same domain.

This variable is usually set to false in the multi-physics applications. In multi-physics applications different fields can have different type and order of shape functions. To construct such shape functions we may have to use different finite element meshes (hence, domains). For example, in the fluid mechanics, we often use Taylor-Hood element which employs different order of interpolation for pressure and velocity.

showTime​

If it is set to true then we create a file called KernelName_time_stat.csv. This file contains the statics of time taken by the kernel. It will be helpful in improving the kernel.

unifyVTK​

If it is true then all the data are exported into one vtu file in WriteData_vtk method.

createPVD​

If it is true then a Paraview data file is created in WriteData_vtk method.

problemType​

This variable is an integer code for the type of problem kernel is designed to solve. For example, scale, vector, or multi-physics problem.

You can access these variables from a global variable called TypeKernelProblemOpt, for example see AbstractKernelParam

algorithm​

This integer variable depends upon the kernel, and it denotes the specific algorithm used in the kernel.

vtkOutputFreq​

This integer variable denotes the frequency of output with WriteData_vtk.

hdfOutputFreq​

This integer variable denotes the frequency of output with WriteData_hdf.

coordinateSystem​

This integer variable denotes the coordinate system in which the kernel solves the problem. Its value are defined in a global variable called TypeKernelCoordOpt, which is defined in AbstractKernelParam.

maxIter​

This integer variable denotes the maximum number of iterations. This is useful when we use iterative solvers like Newton method, Modified Newton method, or Iterative-predictor solvers.

timeDependency​

This integer variable denoted the time dependency of the kernel problem. Its values are defined in the global variable called TypeKernelTimeOpt which is defined in the AbstractKernelParam

nsd​

This integer variable denotes the spatial dimension of the problem that the kernel solves.

nnt​

This integer variable denotes the number of time nodes in the space-time finite element method.

tdof​

This integer variable denotes the total number of degrees of freedom per node in the problem. This variable is set by the kernel internally white setting the kernel.

postProcessOpt​

This integer variable denotes the post-processing option. The actual action depends upon the specific kernels.

currentTimeStep​

This integer variable denotes the current time step of the kernel. It is often used in the transient simulation.

totalTimeStep​

This integer variable denotes the total number of time steps.

normRHS​

This real variable stores the current norm of RHS.

dt​

This real variable contains the current time step size.

startTime​

This real variable contains the starting time of the kernel.

endTime​

This real variable contains the final time of the kernel.

lengthScale​

Length scale is a real variable which denotes the length scale of the problem.

gravity​

Gravity vector.

incrementScale​

Increment scale for displacement.

dispError, velError, solError, resError​

These are instances of KernelErrorOpt_ which contains the error information, you can find more information in AbstractKernelParam

name​

This is a string which contains the name of the kernel.

engine​

This is a string which contains the name of the engine of the kernel.

tanmatProp​

This string contains the property of the tangent matrix, such as Symmetric or Unsymmetric.

tanmatName​

Name of the tangent matrix.

outputPath​

Path to put output files.

domainFile​

Name of the domain file.

basisForSpace, basisForTime, basisForPressure, basisForVelocity​

These variables are instances of KernelBasisOpt_ which contains the basis function options for space, time, pressure, and velocity. You can find more information about them AbstractKernelParam.

iterData​

This is an instance of IterationData_ which is defined in the base module, see IterationData.