44 real(kind=
dp),
dimension(3) :: x
79 real(kind=
dp),
dimension(3),
intent(in) :: x
80 integer,
optional,
intent(inout) :: id
95 real(kind=
dp),
intent(in) :: x
96 real(kind=
dp),
intent(in) :: y
97 real(kind=
dp),
intent(in) :: z
98 integer,
optional,
intent(inout) :: id
101 if (
present(id))
then
115 class(
point_t),
intent(inout) :: this
116 real(kind=
dp),
dimension(3),
intent(in) :: x
125 class(
point_t),
intent(in) :: p1
126 class(
point_t),
intent(in) :: p2
129 if (
abscmp(p1%x(1), p2%x(1)) .and. &
130 abscmp(p1%x(2), p2%x(2)) .and. &
131 abscmp(p1%x(3), p2%x(3)))
then
142 class(
point_t),
intent(in) :: p1
143 class(
point_t),
intent(in) :: p2
146 if (.not.
abscmp(p1%x(1), p2%x(1)) .or. &
147 .not.
abscmp(p1%x(2), p2%x(2)) .or. &
148 .not.
abscmp(p1%x(3), p2%x(3)))
then
159 class(
point_t),
intent(in) :: p1
160 class(
point_t),
intent(in) :: p2
163 if (p1%x(1) .lt. p2%x(1) .or. &
164 (
abscmp(p1%x(1), p2%x(1)) .and. &
165 (p1%x(2) .lt. p2%x(2) .or. &
166 (
abscmp(p1%x(2), p2%x(2)) .and. p1%x(3) .lt. p2%x(3)))))
then
177 class(
point_t),
intent(in) :: p1
178 class(
point_t),
intent(in) :: p2
191 class(
point_t),
intent(in) :: p1
192 class(
point_t),
intent(in) :: p2
195 res%x(1) = p1%x(1) + p2%x(1)
196 res%x(2) = p1%x(2) + p2%x(2)
197 res%x(3) = p1%x(3) + p2%x(3)
203 class(
point_t),
intent(in) :: p1
204 class(
point_t),
intent(in) :: p2
207 res%x(1) = p1%x(1) - p2%x(1)
208 res%x(2) = p1%x(2) - p2%x(2)
209 res%x(3) = p1%x(3) - p2%x(3)
215 class(
point_t),
intent(in) :: p
216 real(kind=
rp),
intent(in) :: a
219 res%x(1) = a * p%x(1)
220 res%x(2) = a * p%x(2)
221 res%x(3) = a * p%x(3)
227 class(
point_t),
intent(in) :: p1
228 type(
point_t),
intent(in) :: p2
231 res = sqrt( (p1%x(1) - p2%x(1))**2 &
232 + (p1%x(2) - p2%x(2))**2 &
233 + (p1%x(3) - p2%x(3))**2 )
238 class(
point_t),
intent(in) :: x
239 real(kind=
rp),
intent(in) :: a(3,3)
247 b%x(i) = b%x(i) + a(i,j) * x%x(j)
integer, parameter, public dp
integer, parameter, public rp
Global precision used in computations.
type(point_t) function point_init(x, id)
Initialize a point from an array x of coordinates.
pure logical function point_gt(p1, p2)
Check if .
pure logical function point_eq(p1, p2)
Check if .
type(point_t) function point_subtract(p1, p2)
Returns the subtraction of 2 points .
type(point_t) function point_init_xyz(x, y, z, id)
Initialize a point from coordinates.
subroutine point_assign(this, x)
Assigns coordinates x to a point.
type(point_t) function point_scalar_mult(p, a)
Returns the multiplication of a point by a scalar .
pure logical function point_lt(p1, p2)
Check if .
pure real(kind=rp) function point_euclid_dist(p1, p2)
Returns the Euclidean distance between two points .
type(point_t) function point_add(p1, p2)
Returns the addition of 2 points .
type(point_t) function point_mat_mult(A, x)
Computes matrix-vector product in : .
pure logical function point_ne(p1, p2)
Check if .
Defines a pointer to a point type.
A point in with coordinates .