Report Typos and Errors    
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
Derived types and interfaces | Functions/Subroutines
sll_m_hexagonal_meshes Module Reference

Derived types and interfaces

type  sll_t_hex_mesh_2d
 2d hexagonal mesh More...
 
type  hex_mesh_2d_ptr
 
interface  sll_o_delete
 

Functions/Subroutines

type(sll_t_hex_mesh_2d) function, pointer, public sll_f_new_hex_mesh_2d (num_cells, center_x1, center_x2, r11, r12, r21, r22, r31, r32, radius, EXTRA_TABLES)
 Creates and initializes a new hexagonal mesh. More...
 
subroutine, public sll_s_hex_mesh_2d_init (mesh, num_cells, radius, center_x1, center_x2, r1_x1, r1_x2, r2_x1, r2_x2, r3_x1, r3_x2, EXTRA_TABLES)
 initializes a previously allocated 2d hex-mesh More...
 
subroutine init_center_points_triangle (mesh)
 <BRIEF_DESCRIPTION> More...
 
subroutine init_edge_center_triangle (mesh)
 <BRIEF_DESCRIPTION> More...
 
subroutine index_hex_to_global (mesh, k1, k2, index_tab)
 Finds the index in the global array of the point which coordinates where passed as parameter. More...
 
real(kind=f64) function eta1_node_hex (mesh, i, j)
 Computes the first cartesian coordinate of a given point. More...
 
real(kind=f64) function eta2_node_hex (mesh, i, j)
 Computes the second cartesian coordinate of a given point. More...
 
function eta1_cell_hex (mesh, cell_num)
 Computes the first cartesian coordinate of the center of the cell. More...
 
real(kind=f64) function eta2_cell_hex (mesh, cell_num)
 Computes the 2nd cartesian coordinate of the center of the cell. More...
 
real(kind=f64) function eta1_cell_hex_two_arg (mesh, i, j)
 NOT IMPLEMENTED. More...
 
real(kind=f64) function eta2_cell_hex_two_arg (mesh, i, j)
 NOT IMPLEMENTED. More...
 
integer(kind=i32) function, public sll_f_cells_to_origin (k1, k2)
 Computes the number of cell from point to origin. More...
 
subroutine cell_type (mesh, num_ele, val)
 Computes the type of triangle of a given cell. More...
 
function hex_to_global (mesh, k1, k2)
 Transform hexagonal coordinates to global index. More...
 
function global_to_hex1 (mesh, index)
 Gives the 1st hexagonal coordinate to point of global index "index". More...
 
function global_to_hex2 (mesh, index)
 Gives the 2nd hexagonal coordinate to point of global index "index". More...
 
function global_to_x1 (mesh, index)
 Gives the 1st cartesian coordinate to point of global index "index". More...
 
function global_to_x2 (mesh, index)
 Gives the 2nd cartesian coordinate to point of global index "index". More...
 
function, public sll_f_cart_to_hex1 (mesh, x1, x2)
 Transform cartesian coordinates to 1st hexagonal coordinates. More...
 
function, public sll_f_cart_to_hex2 (mesh, x1, x2)
 Transform cartesian coordinates to 2ndst hexagonal coordinates. More...
 
function global_to_local (mesh, ref_index, global)
 Transforms global to local index in respect to a reference index. More...
 
function, public sll_f_local_to_global (mesh, ref_index, local)
 Transforms local index in a given reference local indexation to a global index from the mesh. More...
 
function local_hex_to_global (mesh, k1_ref, k2_ref, local)
 Same as sll_f_local_to_global but taking hexagonal coordinates as reference indexing. More...
 
subroutine, public sll_s_get_cell_vertices_index (x, y, mesh, s1, s2, s3)
 Returns indices of the edges of a given cell. More...
 
subroutine, public sll_s_get_triangle_index (k1, k2, mesh, x, triangle_index)
 Given a mesh point and the first cartesian coordinate of a point (that is not on the mesh) we return the given cell index. More...
 
subroutine get_neighbours (mesh, cell_index, nei_1, nei_2, nei_3)
 returns the indices of the neighbouring cells/triangles More...
 
subroutine, public sll_s_get_edge_index (k1, k2, mesh, x, edge_index1, edge_index2, edge_index3)
 <BRIEF_DESCRIPTION> More...
 
function, public sll_f_change_elements_notation (mesh, i_elmt_old)
 Function that allows to change from the current element notation to one more intuitive. More...
 
recursive subroutine hex_to_aligned_pt (mesh, ind, transf, x_new, y_new)
 Computes the coordinate transformation hex->aligned for a point. More...
 
subroutine hex_to_aligned_elmt (mesh, i_elmt, transf, transf_matA, transf_vecB)
 Computes the coordinate transformation hex->aligned for an element. More...
 
subroutine ref_to_hex_elmt (mesh, i_elmt, transf_matA, transf_vecB)
 Computes the coordinate transformation ref->hex for an element. More...
 
subroutine ref_to_aligned_elmt (mesh, i_elmt, transf, transf_matA, transf_vecB)
 Computes the coordinate transformation ref->aligned for an element. More...
 
subroutine, public sll_s_display_hex_mesh_2d (mesh)
 Displays hexagonal mesh in terminal. More...
 
subroutine, public sll_s_write_caid_files (mesh, transf, spline_deg)
 Writes files for CAID. More...
 
subroutine write_hex_mesh_2d (mesh, name)
 Writes the hexagonal mesh into a given file. More...
 
subroutine write_field_hex_mesh_xmf (mesh, field, name)
 Same as write_field_hex_mesh but output in xmf. More...
 
subroutine write_hex_mesh_mtv (mesh, mtv_file)
 Same as write_hex_mesh but output is mtv file. More...
 
subroutine, public sll_s_delete_hex_mesh_2d (mesh)
 Deletes an hexagonal mesh. More...
 

Function/Subroutine Documentation

◆ cell_type()

subroutine sll_m_hexagonal_meshes::cell_type ( class(sll_t_hex_mesh_2d mesh,
integer(kind=i32), intent(in)  num_ele,
integer(kind=i32), intent(out)  val 
)
private

Computes the type of triangle of a given cell.

Takes a given cell and determines if it is of type II if is oriented as the cell#2 (triangle of edges: (0,0) (sqrt(3)/2, 1/2) (0,1)) or of type I otherwise (triangle of edges: (0,0) (-sqrt(3)/2, 1/2) (0,1))

Parameters
[IN]num_ele integer index of the element
[IN]mesh hexagonal mesh
[OUT]val integer val = 1 if triangle of type I, 2 if triangle of type II, or -1 if there was an error

Definition at line 844 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ eta1_cell_hex()

function sll_m_hexagonal_meshes::eta1_cell_hex ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(in)  cell_num 
)
private

Computes the first cartesian coordinate of the center of the cell.

Computes the first coordinate (eta1) on the cartesian system of the center of the cell which has for global index cell_num

Parameters
[in]cell_numinteger denoting the index of the cell returns res real containing 1st cartesian coordinate of the cell's center

Definition at line 752 of file sll_m_hexagonal_meshes.F90.

◆ eta1_cell_hex_two_arg()

real(kind=f64) function sll_m_hexagonal_meshes::eta1_cell_hex_two_arg ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  i,
integer(kind=i32), intent(in)  j 
)
private

NOT IMPLEMENTED.

NOT IMPLEMENTED

Parameters
[<INor OUT or INOUT>] <PARAM1>
[<INor OUT or INOUT>] <PARAM2>

Definition at line 786 of file sll_m_hexagonal_meshes.F90.

◆ eta1_node_hex()

real(kind=f64) function sll_m_hexagonal_meshes::eta1_node_hex ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  i,
integer(kind=i32), intent(in)  j 
)
private

Computes the first cartesian coordinate of a given point.

Computes the first cartesian coordinate on the cartesian system of a point which has for hexagonal coordinates (i,j)

Parameters
iinteger denoting the first hexagonal coordinate of a point
jinteger denoting the second hexagonal coordinate of a point returns res real containing the coordinate "eta1"

Definition at line 718 of file sll_m_hexagonal_meshes.F90.

◆ eta2_cell_hex()

real(kind=f64) function sll_m_hexagonal_meshes::eta2_cell_hex ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  cell_num 
)
private

Computes the 2nd cartesian coordinate of the center of the cell.

Computes the 2nd coordinate (eta2) on the cartesian system of the center of the cell which has for global index cell_num

Parameters
[in]cell_numinteger denoting the index of the cell returns res real containing 2nd cartesian coordinate of the cell's center

Definition at line 769 of file sll_m_hexagonal_meshes.F90.

◆ eta2_cell_hex_two_arg()

real(kind=f64) function sll_m_hexagonal_meshes::eta2_cell_hex_two_arg ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  i,
integer(kind=i32), intent(in)  j 
)
private

NOT IMPLEMENTED.

NOT IMPLEMENTED

Parameters
[<INor OUT or INOUT>] <PARAM1>
[<INor OUT or INOUT>] <PARAM2>

Definition at line 802 of file sll_m_hexagonal_meshes.F90.

◆ eta2_node_hex()

real(kind=f64) function sll_m_hexagonal_meshes::eta2_node_hex ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  i,
integer(kind=i32), intent(in)  j 
)
private

Computes the second cartesian coordinate of a given point.

Computes the second cartesian coordinate on the cartesian system of a point which has for hexagonal coordinates (i,j)

Parameters
iinteger denoting the first hexagonal coordinate of a point
jinteger denoting the second hexagonal coordinate of a point returns res real containing the coordinate "eta2"

Definition at line 736 of file sll_m_hexagonal_meshes.F90.

◆ get_neighbours()

subroutine sll_m_hexagonal_meshes::get_neighbours ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
integer(kind=i32), intent(in)  cell_index,
integer(kind=i32), intent(out)  nei_1,
integer(kind=i32), intent(out)  nei_2,
integer(kind=i32), intent(out)  nei_3 
)
private

returns the indices of the neighbouring cells/triangles

Parameters
meshhex_mesh hexagonal mesh
cell_indexinteger: index of the cell from which we want to know the neighbours
[OUT]nei_1 integer: index of the 1st neighbour
[OUT]nei_2 integer: index of the 2nd neighbour
[OUT]nei_3 integer: index of the 3rd neighbour

Definition at line 1235 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ global_to_hex1()

function sll_m_hexagonal_meshes::global_to_hex1 ( class(sll_t_hex_mesh_2d mesh,
  index 
)
private

Gives the 1st hexagonal coordinate to point of global index "index".

Takes the global index of the point (see hex_to_global(...) for conventions) returns the first coordinate (k1) on the (r1,r2) basis

Parameters
[IN]mesh hexagonal mesh
[IN]index global index of point we need hexagonal coordinates

Definition at line 934 of file sll_m_hexagonal_meshes.F90.

◆ global_to_hex2()

function sll_m_hexagonal_meshes::global_to_hex2 ( class(sll_t_hex_mesh_2d mesh,
  index 
)
private

Gives the 2nd hexagonal coordinate to point of global index "index".

Takes the global index of the point (see hex_to_global(...) for conventions) returns the second coordinate (k2) on the (r1,r2) basis

Parameters
[IN]mesh hexagonal mesh
[IN]index global index of point we need hexagonal coordinates

Definition at line 948 of file sll_m_hexagonal_meshes.F90.

◆ global_to_local()

function sll_m_hexagonal_meshes::global_to_local ( class(sll_t_hex_mesh_2d mesh,
  ref_index,
  global 
)
private

Transforms global to local index in respect to a reference index.

In the same manner that we assign global indices (see hex_to_global(...)) we assign local indices, but this time the initial point is the point which index is ref_index ie. local_index(i,i) = 1

Parameters
[IN]mesh hexagonal mesh
[IN]ref_index reference index from which the local index is counted
[IN]global global index of point we wish to know local index

Definition at line 1029 of file sll_m_hexagonal_meshes.F90.

◆ global_to_x1()

function sll_m_hexagonal_meshes::global_to_x1 ( class(sll_t_hex_mesh_2d mesh,
  index 
)
private

Gives the 1st cartesian coordinate to point of global index "index".

Takes the global index of the point (see hex_to_global(...) for conventions) returns the first coordinate (x1) on the cartesian basis

Parameters
[IN]mesh hexagonal mesh
[IN]index global index of point we need hexagonal coordinates

Definition at line 962 of file sll_m_hexagonal_meshes.F90.

◆ global_to_x2()

function sll_m_hexagonal_meshes::global_to_x2 ( class(sll_t_hex_mesh_2d mesh,
  index 
)
private

Gives the 2nd cartesian coordinate to point of global index "index".

Takes the global index of the point (see hex_to_global(...) for conventions) returns the second coordinate (x2) on the cartesian basis

Parameters
[IN]mesh hexagonal mesh
[IN]index global index of point we need hexagonal coordinates

Definition at line 976 of file sll_m_hexagonal_meshes.F90.

◆ hex_to_aligned_elmt()

subroutine sll_m_hexagonal_meshes::hex_to_aligned_elmt ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(in)  i_elmt,
character(len=*), intent(in)  transf,
intent(out)  transf_matA,
intent(out)  transf_vecB 
)
private

Computes the coordinate transformation hex->aligned for an element.

Given an element in the hexagonal mesh, this subroutine computes the affine transformation that maps the element to the aligned transforma- tion. This transformation can be written in the form AX + B = X'.

Parameters
[IN]mesh hexagonal mesh
[IN]i_elmt int index of the element in the hexagonal mesh.
[OUT]transf_matA real matrix that contains the A matrix.
[OUT]transf_vecB real vector that contains the B vector.

Definition at line 1596 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ hex_to_aligned_pt()

recursive subroutine sll_m_hexagonal_meshes::hex_to_aligned_pt ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(in)  ind,
character(len=*), intent(in)  transf,
intent(out)  x_new,
intent(out)  y_new 
)
private

Computes the coordinate transformation hex->aligned for a point.

Given a point in the hexagonal mesh, this subroutine computes the coordinates it would have if mapped to an aligned flux surface.

Parameters
[IN]mesh hexagonal mesh
[IN]ind integer index of the point to be mapped.
[IN]x real the x-coordinate of point to be mapped
[IN]y real the y-coordinate of point to be mapped
[OUT]x_new real the x-coordinate of mapped point
[OUT]y_new real the y-coordinate of mapped point

Definition at line 1516 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ hex_to_global()

function sll_m_hexagonal_meshes::hex_to_global ( class(sll_t_hex_mesh_2d mesh,
intent(in)  k1,
intent(in)  k2 
)
private

Transform hexagonal coordinates to global index.

Takes the coordinates (k1,k2) on the (r1,r2) basis and returns global index of that mesh point. By default the index of the center of the mesh is 0. Then following the r1 direction and a counter-clockwise motion we assing an index to every point of the mesh.

Parameters
[IN]mesh hexagonal mesh
[IN]k1 first hexagonal coordinate
[IN]k2 second hexagonal coordinate
[OUT]val global index of point at (k1, k2)

Definition at line 906 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ index_hex_to_global()

subroutine sll_m_hexagonal_meshes::index_hex_to_global ( class(sll_t_hex_mesh_2d mesh,
integer(kind=i32), intent(in)  k1,
integer(kind=i32), intent(in)  k2,
integer(kind=i32), intent(out)  index_tab 
)
private

Finds the index in the global array of the point which coordinates where passed as parameter.

To every mesh point of associated hexagonal coordinates (k1,k2) we can associate a global index. This notation association can be accessed through an array initialized at the initialization of the object This function, computes the connectivity between the hexagonal mesh and the table.

Parameters
k1integer denoting the first hexagonal coordinate of a point
k2integer denoting the second hexagonal coordinate of a point
index_tabout integer denoting the index to get the global index of the point situated at (k1, k2)

Definition at line 677 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ init_center_points_triangle()

subroutine sll_m_hexagonal_meshes::init_center_points_triangle ( class(sll_t_hex_mesh_2d mesh)
private

<BRIEF_DESCRIPTION>

<DETAILED_DESCRIPTION>

Parameters
[<INor OUT or INOUT>] <PARAM1>
[<INor OUT or INOUT>] <PARAM2>

Definition at line 478 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ init_edge_center_triangle()

subroutine sll_m_hexagonal_meshes::init_edge_center_triangle ( class(sll_t_hex_mesh_2d mesh)
private

<BRIEF_DESCRIPTION>

<DETAILED_DESCRIPTION>

Parameters
[<INor OUT or INOUT>] <PARAM1>
[<INor OUT or INOUT>] <PARAM2>

Definition at line 572 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ local_hex_to_global()

function sll_m_hexagonal_meshes::local_hex_to_global ( class(sll_t_hex_mesh_2d mesh,
  k1_ref,
  k2_ref,
  local 
)
private

Same as sll_f_local_to_global but taking hexagonal coordinates as reference indexing.

returns the global index of the point which has as

Parameters
[IN]mesh hexagonal mesh
[IN]k1_ref 1st hex coordinate of reference index for local system
[IN]k2_ref 2nd hex coordinate of reference index for local system
[IN]local Local index on reference system

Definition at line 1096 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ ref_to_aligned_elmt()

subroutine sll_m_hexagonal_meshes::ref_to_aligned_elmt ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(in)  i_elmt,
character(len=*), intent(in)  transf,
intent(out)  transf_matA,
intent(out)  transf_vecB 
)
private

Computes the coordinate transformation ref->aligned for an element.

Given an element in the hexagonal mesh, this subroutine computes the affine transformation that maps the reference triangle to the element following an aligned transformation. This transformation can be written in the form AX + B = X', as it is a combination of ref_to_hex_elmt and hex_to_aligned_elmt.

Parameters
[IN]mesh hexagonal mesh
[IN]i_elmt int index of the element in the hexagonal mesh.
[OUT]transf_matA real matrix that contains the A matrix.
[OUT]transf_vecB real vector that contains the B vector.

Definition at line 1757 of file sll_m_hexagonal_meshes.F90.

◆ ref_to_hex_elmt()

subroutine sll_m_hexagonal_meshes::ref_to_hex_elmt ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(in)  i_elmt,
intent(out)  transf_matA,
intent(out)  transf_vecB 
)
private

Computes the coordinate transformation ref->hex for an element.

The coordinate transformation is the transformation from the reference element to the current cell. As the reference element is the 1st cell of an hexagonal mesh of radius 1 the transformation is only a rotation followed by a translation. Thus we only need 6 values to stock the transformation. 4 values for the matrix A and 2 for the vector v, where: Ax + b = x'. x being the reference coordinates and x' the coordinates of the current mesh. Reference coordinates: (0,0), (sqrt(3)/2, 0.5), (0,1)

Parameters
[IN]mesh hexagonal mesh
[IN]i_elmt int index of the element in the hexagonal mesh.
[OUT]transf_matA real matrix that contains the A matrix.
[OUT]transf_vecB real vector that contains the B vector.

Definition at line 1703 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ sll_f_cart_to_hex1()

function, public sll_m_hexagonal_meshes::sll_f_cart_to_hex1 ( class(sll_t_hex_mesh_2d mesh,
  x1,
  x2 
)

Transform cartesian coordinates to 1st hexagonal coordinates.

Takes the coordinates (x1,x2) on the cartesian basis and returns the first coordinate (k1) on the (r1, r2) basis

Parameters
[IN]mesh hexagonal mesh
[IN]x1 first cartesian coordinate
[IN]x2 second cartesian coordinate

Definition at line 991 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ sll_f_cart_to_hex2()

function, public sll_m_hexagonal_meshes::sll_f_cart_to_hex2 ( class(sll_t_hex_mesh_2d mesh,
  x1,
  x2 
)

Transform cartesian coordinates to 2ndst hexagonal coordinates.

Takes the coordinates (x1,x2) on the cartesian basis and returns the second coordinate (k2) on the (r1, r2) basis

Parameters
[IN]mesh hexagonal mesh
[IN]x1 first cartesian coordinate
[IN]x2 second cartesian coordinate

Definition at line 1009 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ sll_f_cells_to_origin()

integer(kind=i32) function, public sll_m_hexagonal_meshes::sll_f_cells_to_origin ( integer(kind=i32), intent(in)  k1,
integer(kind=i32), intent(in)  k2 
)

Computes the number of cell from point to origin.

Takes the coordinates (k1,k2) on the (r1,r2) basis and returns the number of cells between that point and the origin. If (k1, k2) = (0,0), then val = 0

Parameters
[IN]k1 integer first hexagonal coordinate of a point
[IN]k2 integer second hexagonal coordinate of a point
[OUT]val integer number of cells to origin

Definition at line 821 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ sll_f_change_elements_notation()

function, public sll_m_hexagonal_meshes::sll_f_change_elements_notation ( type(sll_t_hex_mesh_2d), pointer  mesh,
intent(in)  i_elmt_old 
)

Function that allows to change from the current element notation to one more intuitive.

As the notations of the elements, chosen by Charles, is not really intuitive, this functions allow to go from that one, to one easier to understand. It will give the index of the element in the new notation system, when given an index of the older system. Here is the difference between the two notation for a mesh of 6 elements (ie. nc = 1): Charles notation: || New notation: /|\ || /|\ / 1|2 \ || / 2|1 \ | 3|/6 | || | 3|/6 | The new notation system | /4|5\ | || | /4|5\ | respects more the hexagonal |/ || |/ notation style.

Parameters
[in]meshpointer to the hexagonal mesh
[in]i_elmt_oldinteger index of an element in Charles notation
[out]i_elmtinteger index of an element in the new notation system.

Definition at line 1370 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_f_local_to_global()

function, public sll_m_hexagonal_meshes::sll_f_local_to_global ( class(sll_t_hex_mesh_2d mesh,
  ref_index,
  local 
)

Transforms local index in a given reference local indexation to a global index from the mesh.

returns the global index of the point which has as

Parameters
[IN]mesh hexagonal mesh
[IN]ref_index reference index where the local indexation starts
[IN]local local index in the indexation starting at ref_index

Definition at line 1063 of file sll_m_hexagonal_meshes.F90.

Here is the caller graph for this function:

◆ sll_f_new_hex_mesh_2d()

type(sll_t_hex_mesh_2d) function, pointer, public sll_m_hexagonal_meshes::sll_f_new_hex_mesh_2d ( integer(kind=i32), intent(in)  num_cells,
real(kind=f64), intent(in), optional  center_x1,
real(kind=f64), intent(in), optional  center_x2,
real(kind=f64), intent(in), optional  r11,
real(kind=f64), intent(in), optional  r12,
real(kind=f64), intent(in), optional  r21,
real(kind=f64), intent(in), optional  r22,
real(kind=f64), intent(in), optional  r31,
real(kind=f64), intent(in), optional  r32,
real(kind=f64), intent(in), optional  radius,
integer(kind=i32), intent(in), optional  EXTRA_TABLES 
)

Creates and initializes a new hexagonal mesh.

An hexagonal mesh is defined using the number of cells in each direction, the coordinates of its center, the generator vectors values, and the radius

Parameters
num_cellsinteger denoting the number of cells in any direction parting from origin
center_x1optional real: first cartesian coordinate of the origin
center_x2optional real: second cartesian coordinate of the origin
r11optional real: 1st cartesian coordinate of 1st generating vector
r12optional real: 2nd cartesian coordinate of 1st generating vector
r21optional real: 1st cartesian coordinate of 2nd generating vector
r22optional real: 2nd cartesian coordinate of 2nd generating vector
r31optional real: 1st cartesian coordinate of 3rd generating vector
r32optional real: 2nd cartesian coordinate of 3rd generating vector
radiusoptional real: distance between origin and external vertex
EXTRA_TABLESinteger flag: if set to 1 additional tables (for edges' center) will be created return a pointer to the newly allocated object.

Definition at line 179 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_s_delete_hex_mesh_2d()

subroutine, public sll_m_hexagonal_meshes::sll_s_delete_hex_mesh_2d ( class(sll_t_hex_mesh_2d), intent(inout)  mesh)

Deletes an hexagonal mesh.

Takes care of all deallocation necessary to sll_o_delete an hex mesh

Parameters
[IN]mesh hexagonal mesh to be deleted

Definition at line 2200 of file sll_m_hexagonal_meshes.F90.

◆ sll_s_display_hex_mesh_2d()

subroutine, public sll_m_hexagonal_meshes::sll_s_display_hex_mesh_2d ( class(sll_t_hex_mesh_2d), intent(in)  mesh)

Displays hexagonal mesh in terminal.

Displays a simple text describing the mesh to the terminal

Parameters
[IN]mesh hexagonal mesh

Definition at line 1785 of file sll_m_hexagonal_meshes.F90.

◆ sll_s_get_cell_vertices_index()

subroutine, public sll_m_hexagonal_meshes::sll_s_get_cell_vertices_index ( intent(in)  x,
intent(in)  y,
class(sll_t_hex_mesh_2d), intent(in)  mesh,
intent(out)  s1,
intent(out)  s2,
intent(out)  s3 
)

Returns indices of the edges of a given cell.

Returns global indices of the edges of a a given cell. The cell index is obtained by knowing where the point at (x,y) is. If you need the edges of a cell from which you only know the CELL INDEX, you can use this function as follows: call sll_s_get_cell_vertices_index(meshcenter_cartesian_coord(1,cell_index), & mesh, & s1, s2, s3)

Parameters
[IN]x 1st cartesian coordiante of a point in the cell we wish to know the indices
[IN]y 2nd cartesian coordiante of a point in the cell we wish to know the indices
[IN]mesh hexagonal mesh
[OUT]s1 index of 1st vertex of the cell where (x,y) is
[OUT]s2 index of 2nd vertex of the cell where (x,y) is
[OUT]s3 index of 3rd vertex of the cell where (x,y) is

Definition at line 1132 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_s_get_edge_index()

subroutine, public sll_m_hexagonal_meshes::sll_s_get_edge_index ( intent(in)  k1,
intent(in)  k2,
type(sll_t_hex_mesh_2d), pointer  mesh,
intent(in)  x,
intent(out)  edge_index1,
intent(out)  edge_index2,
intent(out)  edge_index3 
)

<BRIEF_DESCRIPTION>

<DETAILED_DESCRIPTION>

Parameters
[<INor OUT or INOUT>] <PARAM1>
[<INor OUT or INOUT>] <PARAM2>

Definition at line 1312 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_s_get_triangle_index()

subroutine, public sll_m_hexagonal_meshes::sll_s_get_triangle_index ( integer(kind=i32), intent(in)  k1,
integer(kind=i32), intent(in)  k2,
class(sll_t_hex_mesh_2d), intent(in)  mesh,
real(kind=f64), intent(in)  x,
integer(kind=i32), intent(out)  triangle_index 
)

Given a mesh point and the first cartesian coordinate of a point (that is not on the mesh) we return the given cell index.

Given a the hexagonal coordiantes of a mesh point (k1, k2) and the first cartesian coordinate of a point (x) (that is not on the mesh) we return the given cell index. This function is used to localize a point on the hexagonal mesh. We suppose the user knows the cartesian coordinates (and thus the hexagonal coordinates, see sll_f_cart_to_hex1 and sll_f_cart_to_hex2).

Parameters
[IN]k1 first hexagonal coordinate of point we wish to localize
[IN]k2 second hexagonal coordinate of point we wish to localize
[IN]mesh hexagonal mesh
[IN]x first cartesian coordiante of point we wish to localize
[OUT]triangle_index index of the cell where the point is localized

Definition at line 1200 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_s_hex_mesh_2d_init()

subroutine, public sll_m_hexagonal_meshes::sll_s_hex_mesh_2d_init ( type(sll_t_hex_mesh_2d mesh,
intent(in)  num_cells,
intent(in)  radius,
intent(in)  center_x1,
intent(in)  center_x2,
intent(in)  r1_x1,
intent(in)  r1_x2,
intent(in)  r2_x1,
intent(in)  r2_x2,
intent(in)  r3_x1,
intent(in)  r3_x2,
intent(in)  EXTRA_TABLES 
)

initializes a previously allocated 2d hex-mesh

Parameters
num_cellsinteger denoting the number of cells in any direction parting from origin
center_x1optional real: first cartesian coordinate of the origin
center_x2optional real: second cartesian coordinate of the origin
r11optional real: 1st cartesian coordinate of 1st generating vector
r12optional real: 2nd cartesian coordinate of 1st generating vector
r21optional real: 1st cartesian coordinate of 2nd generating vector
r22optional real: 2nd cartesian coordinate of 2nd generating vector
r31optional real: 1st cartesian coordinate of 3rd generating vector
r32optional real: 2nd cartesian coordinate of 3rd generating vector
radiusoptional real: distance between origin and external vertex
EXTRA_TABLESinteger flag: if set to 1 additional tables (for edges' center) will be created return a pointer to the newly allocated object.

Definition at line 237 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sll_s_write_caid_files()

subroutine, public sll_m_hexagonal_meshes::sll_s_write_caid_files ( type(sll_t_hex_mesh_2d), pointer  mesh,
character(len=*), intent(in)  transf,
integer(kind=i32)  spline_deg 
)

Writes files for CAID.

Writes the files elements.txt, nodes.txt and dirichlet.txt describing respectively the mesh's cells, edges and BC in the format of DJANGO CAID and pigasus. This is was written in order to have a Poisson solver for the hex-mesh

Parameters
meshhex-mesh that will be described

Definition at line 1805 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_field_hex_mesh_xmf()

subroutine sll_m_hexagonal_meshes::write_field_hex_mesh_xmf ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
real(kind=f64), dimension(:), intent(in)  field,
character(len=*), intent(in)  name 
)
private

Same as write_field_hex_mesh but output in xmf.

This function writes for every point of the hex mesh its cartesian coordinate as well as the value of a given field(vector) at that point

Parameters
[IN]mesh the hexagonal mesh
[IN]field a vector of size =(number of pts of the mesh) containg the values of a field on every mesh point.
[IN]name the name of the file where the info will be written into.

Definition at line 2004 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:

◆ write_hex_mesh_2d()

subroutine sll_m_hexagonal_meshes::write_hex_mesh_2d ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
character(len=*), intent(in)  name 
)
private

Writes the hexagonal mesh into a given file.

Besides general information of the mesh, this function writes in a text file (called 'name') for every point its global index, as well as the hexagonal and cartesian coordinates

Parameters
[IN]mesh the hexagonal mesh
[IN]name the name of the file where the info will be written into.

Definition at line 1967 of file sll_m_hexagonal_meshes.F90.

◆ write_hex_mesh_mtv()

subroutine sll_m_hexagonal_meshes::write_hex_mesh_mtv ( class(sll_t_hex_mesh_2d), intent(in)  mesh,
character(len=*), intent(in)  mtv_file 
)
private

Same as write_hex_mesh but output is mtv file.

Besides general information of the mesh, this function writes in a text file (called 'name') for every point its global index, as well as the hexagonal and cartesian coordinates. To visualize use plotmtv.

Parameters
[IN]mesh the hexagonal mesh
[IN]name the name of the file where the info will be written into.

Definition at line 2050 of file sll_m_hexagonal_meshes.F90.

Here is the call graph for this function:
    Report Typos and Errors