45 type(basis_vectors_t),
public :: basis
56 procedure affine_coordinates_constructor
62 type(namespace_t),
intent(in) :: namespace
63 integer,
intent(in) :: dim
64 real(real64),
intent(in) :: basis_vectors(1:dim, 1:dim)
65 class(affine_coordinates_t),
pointer :: affine
72 affine%local_basis = .false.
74 affine%orthogonal = affine%basis%orthogonal
81 type(affine_coordinates_t),
intent(inout) :: this_out
82 type(affine_coordinates_t),
intent(in) :: this_in
86 this_out%dim = this_in%dim
87 this_out%local_basis = this_in%local_basis
88 this_out%basis = this_in%basis
95 class(affine_coordinates_t),
target,
intent(in) :: this
96 real(real64),
intent(in) :: chi(:)
97 real(real64) :: xx(1:this%dim)
101 xx(:) = this%basis%to_cartesian(chi(:))
107 class(affine_coordinates_t),
target,
intent(in) :: this
108 real(real64),
intent(in) :: xx(:)
109 real(real64) :: chi(1:this%dim)
113 chi(:) = this%basis%from_cartesian(xx(:))
119 class(affine_coordinates_t),
intent(in) :: this
120 integer,
optional,
intent(in) :: iunit
121 type(namespace_t),
optional,
intent(in) :: namespace
123 integer :: idir1, idir2
127 write(
message(1),
'(a)')
' Using affine coordinates'
130 do idir1 = 1, this%dim
131 write(
message(2),
'(4x,a,99(f8.3,a))')
'(', &
143 integer,
intent(in) :: idir
147 select case (this%dim)
151 ds = norm2(
dcross_product(this%basis%vectors(1:3, 2), this%basis%vectors(1:3, 3)))
153 ds = norm2(
dcross_product(this%basis%vectors(1:3, 3), this%basis%vectors(1:3, 1)))
155 ds = norm2(
dcross_product(this%basis%vectors(1:3, 1), this%basis%vectors(1:3, 2)))
161 ds = this%basis%vectors(1, 1)*this%basis%vectors(2, 2) - this%basis%vectors(2, 1)*this%basis%vectors(1, 2)
178 real(real64),
intent(in) :: chi(:)
179 real(real64) :: jacobian(1:this%dim, 1:this%dim)
181 jacobian(:, :) = this%basis%vectors(:, :)
187 real(real64),
intent(in) :: chi(:)
188 real(real64) :: jacobian_inverse(1:this%dim, 1:this%dim)
190 jacobian_inverse(:, :) = this%basis%change_of_basis_matrix(:, :)
subroutine affine_coordinates_write_info(this, iunit, namespace)
pure real(real64) function, dimension(1:this%dim) affine_coordinates_to_cartesian(this, chi)
class(affine_coordinates_t) function, pointer affine_coordinates_constructor(namespace, dim, basis_vectors)
subroutine, public affine_coordinates_copy(this_out, this_in)
real(real64) function, dimension(1:this%dim, 1:this%dim) affine_coordinates_jacobian(this, chi)
real(real64) function, dimension(1:this%dim, 1:this%dim) affine_coordinates_jacobian_inverse(this, chi)
pure real(real64) function, dimension(1:this%dim) affine_coordinates_from_cartesian(this, xx)
real(real64) function affine_coordinates_surface_element(this, idir)
This module is intended to contain "only mathematical" functions and procedures.
pure real(real64) function, dimension(1:3), public dcross_product(a, b)
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
character(len=20) pure function, public units_abbrev(this)
This module defines the unit system, used for input and output.
type(unit_system_t), public units_out
Vectors defining a basis in a vector space. This class provides methods to convert vector coordinates...
abstract class to describe coordinate systems