grid_tools
1.10.0
|
Euclidean geometry, geometric (stereographic) projections, related transformations (Mobius). More...
Go to the source code of this file.
Data Types | |
interface | pmat4::absv |
interface | pmat4::axial |
interface | pmat4::axtoq |
interface | pmat4::axtorot |
interface | pmat4::corral |
interface | pmat4::cross_product |
interface | pmat4::ctoz |
interface | pmat4::det |
interface | pmat4::diag |
interface | pmat4::dlltoxy |
interface | pmat4::expmat |
interface | pmat4::gram |
interface | pmat4::hav |
interface | pmat4::huarea |
interface | pmat4::identity |
interface | pmat4::mobius |
interface | pmat4::mobiusi |
interface | pmat4::mulqq |
interface | pmat4::normalize |
interface | pmat4::normalized |
interface | pmat4::orthogonalized |
interface | pmat4::outer_product |
interface | pmat4::qtoax |
interface | pmat4::qtorot |
interface | pmat4::qtospin |
interface | pmat4::rottoax |
interface | pmat4::rottoq |
interface | pmat4::rowops |
interface | pmat4::sarea |
interface | pmat4::setem |
interface | pmat4::setmobius |
interface | pmat4::spintoq |
interface | pmat4::trace |
interface | pmat4::triple_product |
interface | pmat4::znfun |
interface | pmat4::zntay |
interface | pmat4::ztoc |
Modules | |
module | pmat4 |
Module for handy vector and matrix operations in Euclidean geometry. | |
Functions/Subroutines | |
real(dp) function | pmat4::absv_d (a) |
Return the absolute magnitude of a double precision real vector. More... | |
real(sp) function | pmat4::absv_s (a) |
Return the absolute magnitude of a single precision real vector. More... | |
real(dp) function, dimension(3) | pmat4::axial33_d (b) |
Return the 3-vector corresponding to the given antisymmetric "axial vector" matrix, assuming a right-handed correspondence. More... | |
real(sp) function, dimension(3) | pmat4::axial33_s (b) |
Return the 3-vector corresponding to the given antisymmetric "axial vector" matrix, assuming a right-handed correspondence. More... | |
real(dp) function, dimension(3, 3) | pmat4::axial3_d (a) |
Return the axial "vector", as an antisymmetric matrix, corresponding to the given 3-vector assuming a right-handed correspondence. More... | |
real(sp) function, dimension(3, 3) | pmat4::axial3_s (a) |
Return the axial "vector", as an antisymmetric matrix, corresponding to the given 3-vector assuming a right-handed correspondence. More... | |
subroutine, public | pmat4::axtoq (v, q) |
Go from an axial 3-vector to its equivalent quaternion. More... | |
subroutine, public | pmat4::axtorot (ax3, orth33) |
Construct the 3*3 orthogonal matrix, orth33, that corresponds to the proper rotation encoded by the 3-vector, ax3. More... | |
subroutine | pmat4::cmobius (aa, bb, cc, dd, vz, vw) |
Perform a complex Mobius transformation from cartesian vz to cartesian vw where the transformation coefficients are the standard aa,bb,cc,dd. More... | |
subroutine, public | pmat4::corral (m, n, mask, a, d, aa, e) |
Find positive diagonals D and E and a Lagrange multiplier F that minimize the row-sum +column-sum of masked terms, (D_i +log(|A_ij|) +E_j)^2 subject to the single constraint, sum_j E_j =0, where the mask permits only nonnegligible A_ij to participate in the quadratic quantities. More... | |
real(dp) function, dimension(3) | pmat4::cross_product_d (a, b) |
Return the cross product of two double precision real 3-vectors. More... | |
real(sp) function, dimension(3) | pmat4::cross_product_s (a, b) |
Return the cross product of two single precision real 3-vectors. More... | |
subroutine, public | pmat4::ctoz (v, z, infz) |
Utility codes for various Mobius transformations. More... | |
subroutine | cyclic (u1, u2, u3, d1, d2, d3) |
Cyclically permute real vectors, u1, u2, u3, and scalars, d1, d2, d3. More... | |
subroutine | cyclic (u1, u2, u3, d1, d2, d3) |
Cyclically permute real vectors, u1, u2, u3, and scalars, d1, d2, d3. More... | |
real(dp) function | pmat4::det_d (a) |
Return the determinant of a double precision matrix. More... | |
integer(spi) function | pmat4::det_i (a) |
Return the determinant of a single precision integer matrix. More... | |
integer(dpi) function | pmat4::det_id (a) |
Return the determinant of a double precision integer matrix. More... | |
real(sp) function | pmat4::det_s (a) |
Return the determinant of a single precision matrix. More... | |
real(dp) function, dimension(size(a), size(a)) | pmat4::diagn_d (a) |
Return the diagonal matrix whose elements are the given vector. More... | |
integer(spi) function, dimension(size(a), size(a)) | pmat4::diagn_i (a) |
Return the diagonal matrix whose elements are the given vector. More... | |
real(sp) function, dimension(size(a), size(a)) | pmat4::diagn_s (a) |
Return the diagonal matrix whose elements are the given vector. More... | |
real(dp) function, dimension(size(b, 1)) | pmat4::diagnn_d (b) |
Return the vector whose elements are the diagonal ones of a given matrix. More... | |
integer(spi) function, dimension(size(b, 1)) | pmat4::diagnn_i (b) |
Return the vector whose elements are the diagonal ones of a given matrix. More... | |
real(sp) function, dimension(size(b, 1)) | pmat4::diagnn_s (b) |
Return the vector whose elements are the diagonal ones of a given matrix. More... | |
subroutine | pmat4::dlltoxy_d (rlat, drlat, drlon, x2) |
From a reference latitude, and increments of latitude and longitude, return the local cartesian 2-vector corresponding to the projection of the increment onto the tangent plane of the reference point. More... | |
subroutine | pmat4::dlltoxy_s (rlat, drlat, drlon, x2) |
From a reference latitude, and increments of latitude and longitude, return the local cartesian 2-vector corresponding to the projection of the increment onto the tangent plane of the reference point. More... | |
real(dp) function | pmat4::dqarea_d (rlat, drlata, drlona, drlatb, drlonb, drlatc, drlonc) |
Compute the area of the spherical quadrilateral with a vertex at latitude rlat, and three other vertices at A, B, and C in turn, whose incremented latitudes and longitudes are drlata,drlona (for A), drlatb,drlonb (for B), and drlatc,drlonc (for C). More... | |
real(sp) function | pmat4::dqarea_s (rlat, drlata, drlona, drlatb, drlonb, drlatc, drlonc) |
Compute the area of the spherical quadrilateral with a vertex at latitude rlat, and three other vertices at A, B, and C in turn, whose incremented latitudes and longitudes are drlata,drlona (for A), drlatb,drlonb (for B), and drlatc,drlonc (for C). More... | |
real(dp) function | pmat4::dtarea_d (rlat, drlata, drlona, drlatb, drlonb) |
Compute the area of the spherical triangle with a vertex at latitude rlat, and two other vertices, A and B, whose incremented latitudes and longitudes are drlata,drlona (for A) and drlatb,drlonb (for B). More... | |
real(sp) function | pmat4::dtarea_s (rlat, drlata, drlona, drlatb, drlonb) |
Compute the area of the spherical triangle with a vertex at latitude rlat, and two other vertices, A and B, whose incremented latitudes and longitudes are drlata,drlona (for A) and drlatb,drlonb (for B). More... | |
subroutine, public | pmat4::expmat (n, a, b, detb) |
Evaluate the exponential, B, of a matrix, A, of degree n. More... | |
subroutine | pmat4::expmatd (n, a, b, bd, detb, detbd) |
Like expmat, but for the 1st derivatives also. More... | |
subroutine | pmat4::expmatdd (n, a, b, bd, bdd, detb, detbd, detbdd) |
Like expmat, but for the 1st and 2nd derivatives also. More... | |
subroutine | pmat4::gram_d (as, b, nrank, det) |
Apply a form of Gram-Schmidt orthogonalization process to return as many normalized orthogonal basis column vectors in matrix B as possible in the space spanned by the columns of matrix A. More... | |
subroutine | pmat4::gram_s (as, b, nrank, det) |
Apply a form of Gram-Schmidt orthogonalization process to return as many normalized orthogonal basis column vectors in matrix B as possible in the space spanned by the columns of matrix A. More... | |
subroutine | pmat4::graml_d (as, b, nrank, detsign, ldet) |
A version of gram_d where the determinant information is returned in logarithmic form (to avoid overflows for large matrices). More... | |
real(dp) function | pmat4::hav_d (t) |
Haversine function in double precision. More... | |
real(sp) function | pmat4::hav_s (t) |
Haversine function in single precision. More... | |
real(dp) function | pmat4::huarea_d (sa, sb) |
Spherical area of right-angle triangle whose orthogonal sides have orthographic projection dimensions, sa and sb, sphere of unit radius. More... | |
real(sp) function | pmat4::huarea_s (sa, sb) |
Spherical area of right-angle triangle whose orthogonal sides have orthographic projection dimensions, sa and sb, sphere of unit radius. More... | |
integer(spi) function, dimension(3, 3) | pmat4::identity3_i () |
Return the 3-dimensional integer identity matrix. More... | |
integer(spi) function, dimension(n, n) | pmat4::identity_i (n) |
Return the integer identity matrix for a given dimensionality. More... | |
real(dp) function, dimension(0:3), public | pmat4::mulqq (a, b) |
Multiply quaternions, a*b, assuming operation performed from right to left. More... | |
subroutine | pmat4::normalize_d (v) |
Normalize the given double precision real vector. More... | |
subroutine | pmat4::normalize_s (v) |
Normalize the given single precision real vector. More... | |
real(dp) function, dimension(size(a)) | pmat4::normalized_d (a) |
Return the normalized version of a double precision real vector. More... | |
real(sp) function, dimension(size(a)) | pmat4::normalized_s (a) |
Return the normalized version of a single precision real vector. More... | |
real(dp) function, dimension(size(u)) | pmat4::orthogonalized_d (u, a) |
Return the part of vector a that is orthogonal to unit vector u. More... | |
real(sp) function, dimension(size(u)) | pmat4::orthogonalized_s (u, a) |
Return the part of vector a that is orthogonal to unit vector u. More... | |
real(dp) function, dimension(size(a), size(b)) | pmat4::outer_product_d (a, b) |
Return the outer product matrix of two double precision real vectors. More... | |
integer(spi) function, dimension(size(a), size(b)) | pmat4::outer_product_i (a, b) |
Return the outer product matrix of two integer vectors. More... | |
real(sp) function, dimension(size(a), size(b)) | pmat4::outer_product_s (a, b) |
Return the outer product matrix of two single precision real vectors. More... | |
subroutine | pmat4::plaingram_d (b, nrank) |
A "plain" (unpivoted) version of Gram-Schmidt, for square matrices only. More... | |
subroutine | pmat4::plaingram_s (b, nrank) |
A "plain" (unpivoted) version of Gram-Schmidt, for square matrices only. More... | |
subroutine, public | pmat4::qtoax (q, v) |
Go from quaternion to axial 3-vector. More... | |
subroutine, public | pmat4::qtorot (q, rot) |
Go from quaternion to rotation matrix representations. More... | |
subroutine, public | pmat4::qtospin (q, cspin) |
Go from the unit quaternion to the complex spinor representation. More... | |
subroutine, public | pmat4::rottoax (orth33, ax3) |
Assuming that given orth33 is a 3*3 proper rotation matrix, derive an axial 3-vector, ax3, such that orth33 is implied by ax3 when the latter is interpreted as encoding a rotation (as in subroutine axtorot). More... | |
subroutine, public | pmat4::rottoq (rot, q) |
Go from rotation matrix to a corresponding unit quaternion representation. More... | |
subroutine | pmat4::rowgram (m, n, a, ipiv, tt, b, rank) |
Without changing (tall) rectangular input matrix a, perform pivoted gram- Schmidt operations to orthogonalize the rows, until rows that remain become negligible. More... | |
subroutine, public | pmat4::rowops (m, n, ipiv, tt, v, vv) |
Apply the row-operations, implied by ipiv and tt returned by rowgram, to the single column vector, v, to produce the transformed vector vv. More... | |
real(dp) function | pmat4::sarea_d (v1, v2, v3) |
Compute the area of the spherical triangle, {v1,v2,v3}. More... | |
real(sp) function | pmat4::sarea_s (v1, v2, v3) |
Compute the area of the spherical triangle, {v1,v2,v3}, measured in the right-handed sense, by dropping a perpendicular to u0 on the longest side so that the area becomes the sum of areas of the two simpler right-angled triangles. More... | |
subroutine | pmat4::setem (c, d, e, g, r) |
Given the 4 components of a unit quaternion, return the associated 3*3 rotation matrix. More... | |
subroutine, public | pmat4::setmobius (xc0, xc1, xc2, aa, bb, cc, dd) |
Find the Mobius transformation complex coefficients, aa,bb,cc,dd, with aa*dd-bb*cc=1, for a standard (north-)polar stereographic transformation that takes cartesian point, xc0 to the north pole, xc1 to (lat=0,lon=0), xc2 to the south pole (=complex infinity). More... | |
subroutine, public | pmat4::spintoq (cspin, q) |
Go from the complex spinor matrix to the unit quaternion representation. More... | |
real(dp) function | pmat4::trace_d (b) |
Return the trace of a given double precision real matrix. More... | |
integer(spi) function | pmat4::trace_i (b) |
Return the trace of a given integer matrix. More... | |
real(sp) function | pmat4::trace_s (b) |
Return the trace of a given single precision real matrix. More... | |
real(dp) function, dimension(4) | pmat4::triple_cross_product_d (u, v, w) |
Return the triple_cross_product for 4-vectors. More... | |
real(sp) function, dimension(4) | pmat4::triple_cross_product_s (u, v, w) |
Deliver the triple-cross-product, x, of the three 4-vectors, u, v, w, with the sign convention that ordered, {u,v,w,x} form a right-handed quartet in the generic case (determinant >= 0). More... | |
real(dp) function | pmat4::triple_product_d (a, b, c) |
Return the triple product of three double precision real 3-vectors. More... | |
real(sp) function | pmat4::triple_product_s (a, b, c) |
Return the triple product of three single precision real 3-vectors. More... | |
subroutine | pmat4::zmobius (aa, bb, cc, dd, z, infz, w, infw) |
Perform a complex Mobius transformation from (z,infz) to (w,infw) where the transformation coefficients are the standard aa,bb,cc,dd. More... | |
subroutine | pmat4::zmobiusi (aa, bb, cc, dd, zz, infz, zw, infw) |
Perform the inverse of the mobius transformation with coefficients, {aa,bb,cc,dd}. More... | |
subroutine, public | pmat4::znfun (n, z, zn, znd, zndd, znddd) |
For a given nonnegative integer n and real argument z, evaluate the nth,...,(n+3)th derivatives, wrt z, of the function C(z) = cosh(sqrt(2z)) or, equivalently, of C(z) = cos(sqrt(-2z)), according to the sign of z. More... | |
subroutine, public | pmat4::zntay (n, z, zn) |
Evaluate, by Taylor-Maclaurin expansion, the nth-derivative of the function, C(z)=cosh(sqrt(2z)), or equiavlently, of C(z)=cos(sqrt(-2z)). More... | |
subroutine | pmat4::zsetmobius (z0, infz0, z1, infz1, z2, infz2, aa, bb, cc, dd) |
Find the Mobius transformation complex coefficients, aa,bb,cc,dd, with aa*dd-bb*cc=1, that takes polar stereographic point, z0 to the north pole, z1 to (lat=0,lon=0), z2 to the south pole (=complex infinity). More... | |
subroutine, public | pmat4::ztoc (z, infz, v) |
Given a complex z, return the equivalent cartesian unit 3-vector associated by the polar stereographic projection. More... | |
subroutine | pmat4::ztocd (z, infz, v, vd) |
The convention adopted for the complex derivative is that, for a complex infinitesimal map displacement, delta_z, the corresponding infinitesimal change of cartesian vector position is delta_v given by: delta_v = Real(vd*delta_z). More... | |
Euclidean geometry, geometric (stereographic) projections, related transformations (Mobius).
Definition in file pmat4.f90.
subroutine sarea_s::cyclic | ( | real(sp), dimension(3), intent(inout) | u1, |
real(sp), dimension(3), intent(inout) | u2, | ||
real(sp), dimension(3), intent(inout) | u3, | ||
real(sp), intent(inout) | d1, | ||
real(sp), intent(inout) | d2, | ||
real(sp), intent(inout) | d3 | ||
) |
Cyclically permute real vectors, u1, u2, u3, and scalars, d1, d2, d3.
[in,out] | u1 | real vector to be shifted |
[in,out] | u2 | real vector to be shifted |
[in,out] | u3 | real vector to be shifted |
[in,out] | d1 | real variable to be shifted |
[in,out] | d2 | real variable to be shifted |
[in,out] | d3 | real variable to be shifted |
Definition at line 705 of file pmat4.f90.
Referenced by pmat4::sarea_d(), and pmat4::sarea_s().
subroutine sarea_d::cyclic | ( | real(dp), dimension(3), intent(inout) | u1, |
real(dp), dimension(3), intent(inout) | u2, | ||
real(dp), dimension(3), intent(inout) | u3, | ||
real(dp), intent(inout) | d1, | ||
real(dp), intent(inout) | d2, | ||
real(dp), intent(inout) | d3 | ||
) |
Cyclically permute real vectors, u1, u2, u3, and scalars, d1, d2, d3.
[in,out] | u1 | real vector to be shifted |
[in,out] | u2 | real vector to be shifted |
[in,out] | u3 | real vector to be shifted |
[in,out] | d1 | real variable to be shifted |
[in,out] | d2 | real variable to be shifted |
[in,out] | d3 | real variable to be shifted |