moving nice initializers to orientation
This commit is contained in:
parent
ccdf1e5e8e
commit
5d6faff4d6
|
@ -3,6 +3,25 @@ module orientations
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
type, extends(rotation), public :: orientation
|
type, extends(rotation), public :: orientation
|
||||||
end type
|
end type orientation
|
||||||
|
|
||||||
end module orientations
|
interface orientation
|
||||||
|
module procedure :: orientation_init
|
||||||
|
end interface orientation
|
||||||
|
|
||||||
|
contains
|
||||||
|
|
||||||
|
type(orientation) function orientation_init(eu,ax,om,qu,cu,ho,ro)
|
||||||
|
use prec
|
||||||
|
implicit none
|
||||||
|
real(pReal), intent(in), optional, dimension(3) :: eu, cu, ho
|
||||||
|
real(pReal), intent(in), optional, dimension(4) :: ax, qu, ro
|
||||||
|
real(pReal), intent(in), optional, dimension(3,3) :: om
|
||||||
|
|
||||||
|
if (present(om)) then
|
||||||
|
call orientation_init%fromRotationMatrix(om)
|
||||||
|
endif
|
||||||
|
|
||||||
|
end function orientation_init
|
||||||
|
|
||||||
|
end module
|
||||||
|
|
|
@ -39,44 +39,13 @@ module rotations
|
||||||
procedure, public :: asAxisAnglePair
|
procedure, public :: asAxisAnglePair
|
||||||
procedure, public :: asRodriguesFrankVector
|
procedure, public :: asRodriguesFrankVector
|
||||||
procedure, public :: asRotationMatrix
|
procedure, public :: asRotationMatrix
|
||||||
|
procedure, public :: fromRotationMatrix
|
||||||
procedure, public :: rotVector
|
procedure, public :: rotVector
|
||||||
procedure, public :: rotTensor
|
procedure, public :: rotTensor
|
||||||
end type
|
end type rotation
|
||||||
|
|
||||||
interface rotation
|
|
||||||
module procedure :: init
|
|
||||||
end interface
|
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
type(rotation) function init(eu,ax,om,qu,cu,ho,ro)
|
|
||||||
real(pReal), intent(in), optional, dimension(3) :: eu, cu, ho
|
|
||||||
real(pReal), intent(in), optional, dimension(4) :: ax, qu, ro
|
|
||||||
real(pReal), intent(in), optional, dimension(3,3) :: om
|
|
||||||
|
|
||||||
if (count([present(eu),present(ax),present(om),present(qu),&
|
|
||||||
present(cu),present(ho),present(ro)]) > 1_pInt) write(6,*) 'invalid'
|
|
||||||
|
|
||||||
if (present(eu)) then
|
|
||||||
init%q = eu2qu(eu)
|
|
||||||
elseif (present(ax)) then
|
|
||||||
init%q = ax2qu(ax)
|
|
||||||
elseif (present(om)) then
|
|
||||||
init%q = om2qu(om)
|
|
||||||
elseif (present(qu)) then
|
|
||||||
init%q = quaternion(qu)
|
|
||||||
elseif (present(cu)) then
|
|
||||||
init%q = cu2qu(cu)
|
|
||||||
elseif (present(ho)) then
|
|
||||||
init%q = ho2qu(ho)
|
|
||||||
elseif (present(ro)) then
|
|
||||||
init%q = ro2qu(ro)
|
|
||||||
else
|
|
||||||
init%q = quaternion([1.0_pReal,0.0_pReal,0.0_pReal,0.0_pReal])
|
|
||||||
endif
|
|
||||||
|
|
||||||
end function
|
|
||||||
|
|
||||||
function asQuaternion(this)
|
function asQuaternion(this)
|
||||||
class(rotation), intent(in) :: this
|
class(rotation), intent(in) :: this
|
||||||
real(pReal), dimension(4) :: asQuaternion
|
real(pReal), dimension(4) :: asQuaternion
|
||||||
|
@ -129,6 +98,16 @@ function asHomochoric(this)
|
||||||
|
|
||||||
end function asHomochoric
|
end function asHomochoric
|
||||||
|
|
||||||
|
|
||||||
|
subroutine fromRotationMatrix(this,om)
|
||||||
|
class(rotation), intent(out) :: this
|
||||||
|
real(pReal), dimension(3,3), intent(in) :: om
|
||||||
|
|
||||||
|
this%q = om2qu(om)
|
||||||
|
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------
|
!--------------------------------------------------------------------------
|
||||||
!> @author Marc De Graef, Carnegie Mellon University
|
!> @author Marc De Graef, Carnegie Mellon University
|
||||||
!> @brief rotates a vector passively (default) or actively
|
!> @brief rotates a vector passively (default) or actively
|
||||||
|
|
Loading…
Reference in New Issue