module convert private public :: c2r, r2c interface c2r module procedure x1c2r module procedure x2c2r module procedure x3c2r module procedure x4c2r end interface interface r2c module procedure x1r2c module procedure x2r2c module procedure x3r2c module procedure x4r2c end interface contains subroutine x4c2r(a, a_ri) complex, dimension(:,:,:,:) :: a real, dimension(:,:,:,:,:) :: a_ri if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x4c2r: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x4c2r: size(a, 2) does not match size(a_ri, 3)') if(size(a, 3) /= size(a_ri, 4)) call aborter (6, 'x4c2r: size(a, 3) does not match size(a_ri, 4)') if(size(a, 4) /= size(a_ri, 5)) call aborter (6, 'x4c2r: size(a, 4) does not match size(a_ri, 5)') a_ri(1,:,:,:,:) = real(a(:,:,:,:)) a_ri(2,:,:,:,:) = aimag(a(:,:,:,:)) end subroutine x4c2r subroutine x4r2c(a, a_ri) real, dimension(:,:,:,:,:) :: a_ri complex, dimension(:,:,:,:) :: a if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x4r2c: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x4r2c: size(a, 2) does not match size(a_ri, 3)') if(size(a, 3) /= size(a_ri, 4)) call aborter (6, 'x4r2c: size(a, 3) does not match size(a_ri, 4)') if(size(a, 4) /= size(a_ri, 5)) call aborter (6, 'x4r2c: size(a, 4) does not match size(a_ri, 5)') a(:,:,:,:) = cmplx(a_ri(1,:,:,:,:), a_ri(2,:,:,:,:)) end subroutine x4r2c subroutine x3c2r(a, a_ri) complex, dimension(:,:,:) :: a real, dimension(:,:,:,:) :: a_ri if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x3c2r: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x3c2r: size(a, 2) does not match size(a_ri, 3)') if(size(a, 3) /= size(a_ri, 4)) call aborter (6, 'x3c2r: size(a, 3) does not match size(a_ri, 4)') a_ri(1,:,:,:) = real(a(:,:,:)) a_ri(2,:,:,:) = aimag(a(:,:,:)) end subroutine x3c2r subroutine x3r2c(a, a_ri) real, dimension(:,:,:,:) :: a_ri complex, dimension(:,:,:) :: a if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x3r2c: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x3r2c: size(a, 2) does not match size(a_ri, 3)') if(size(a, 3) /= size(a_ri, 4)) call aborter (6, 'x3r2c: size(a, 3) does not match size(a_ri, 4)') a(:,:,:) = cmplx(a_ri(1,:,:,:), a_ri(2,:,:,:)) end subroutine x3r2c subroutine x2c2r(a, a_ri) complex, dimension(:,:) :: a real, dimension(:,:,:) :: a_ri if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x2c2r: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x2c2r: size(a, 2) does not match size(a_ri, 3)') a_ri(1,:,:) = real(a(:,:)) a_ri(2,:,:) = aimag(a(:,:)) end subroutine x2c2r subroutine x2r2c(a, a_ri) real, dimension(:,:,:) :: a_ri complex, dimension(:,:) :: a if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x2r2c: size(a, 1) does not match size(a_ri, 2)') if(size(a, 2) /= size(a_ri, 3)) call aborter (6, 'x2r2c: size(a, 2) does not match size(a_ri, 3)') a(:,:) = cmplx(a_ri(1,:,:), a_ri(2,:,:)) end subroutine x2r2c subroutine x1c2r(a, a_ri) complex, dimension(:) :: a real, dimension(:,:) :: a_ri if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x2c2r: size(a, 1) does not match size(a_ri, 2)') a_ri(1,:) = real(a(:)) a_ri(2,:) = aimag(a(:)) end subroutine x1c2r subroutine x1r2c(a, a_ri) real, dimension(:,:) :: a_ri complex, dimension(:) :: a if(size(a, 1) /= size(a_ri, 2)) call aborter (6, 'x2r2c: size(a, 1) does not match size(a_ri, 2)') a(:) = cmplx(a_ri(1,:), a_ri(2,:)) end subroutine x1r2c end module convert