Last change
on this file since 3466 was
1910,
checked in by Laurent Fairhead, 11 years ago
|
Merged trunk changes r1860:1909 into testing branch
|
-
Property copyright set to
Name of program: LMDZ Creation date: 1984 Version: LMDZ5 License: CeCILL version 2 Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539 See the license file in the root directory
|
File size:
694 bytes
|
Rev | Line | |
---|
[1765] | 1 | module zroots_unity_m |
---|
| 2 | |
---|
| 3 | implicit none |
---|
| 4 | |
---|
| 5 | contains |
---|
| 6 | |
---|
| 7 | FUNCTION zroots_unity(n, nn) |
---|
| 8 | |
---|
| 9 | ! Returns nn powers of the nth root of unity. |
---|
| 10 | |
---|
| 11 | USE nrtype, only: wp, twopi |
---|
| 12 | |
---|
| 13 | INTEGER, INTENT(IN) :: n, nn |
---|
| 14 | COMPLEX(WP) zroots_unity(nn) |
---|
| 15 | |
---|
| 16 | ! Local: |
---|
| 17 | INTEGER k |
---|
| 18 | REAL(WP) :: theta |
---|
| 19 | |
---|
| 20 | !------------------------------------------------- |
---|
| 21 | |
---|
| 22 | zroots_unity(1) = 1. |
---|
| 23 | theta = TWOPI / n |
---|
| 24 | k=1 |
---|
| 25 | do |
---|
| 26 | if (k >= nn) exit |
---|
| 27 | zroots_unity(k + 1) = cmplx(cos(k * theta), sin(k * theta), WP) |
---|
| 28 | zroots_unity(k + 2: min(2 * k, nn)) = zroots_unity(k + 1) & |
---|
| 29 | * zroots_unity(2: min(k, nn - k)) |
---|
| 30 | k = 2 * k |
---|
| 31 | end do |
---|
| 32 | |
---|
| 33 | END FUNCTION zroots_unity |
---|
| 34 | |
---|
| 35 | end module zroots_unity_m |
---|
Note: See
TracBrowser
for help on using the repository browser.