da_truncate_spectra.inc
References to this file elsewhere.
1 subroutine da_truncate_spectra(max_wave, nw, power_trunc, power, &
2 max_wave_trunc)
3
4 !-----------------------------------------------------------------------
5 ! Purpose: TBD
6 !-----------------------------------------------------------------------
7
8 implicit none
9
10 integer, intent(in) :: max_wave ! Smallest wave for domain.
11 integer, intent(in) :: nw ! Dimension of input power spectrum.
12 real, intent(in) :: power_trunc ! Power truncation (fraction).
13 real, intent(in) :: power(0:nw) ! Power spectrum.
14 integer, intent(out) :: max_wave_trunc ! Smallest wave after truncation.
15
16 integer :: l ! Loop counter.
17 real :: truncated_power ! Truncated power.
18 real :: cumul_power ! Cumulative power.
19
20 truncated_power = power_trunc * sum(power(0:nw))
21
22 cumul_power = 0.0
23 max_wave_trunc = max_wave
24 do l = 0, nw - 1
25 cumul_power = cumul_power + power(l)
26 if (cumul_power > truncated_power) then
27 max_wave_trunc = l - 1
28 exit
29 end if
30 end do
31
32 if (max_wave_trunc > max_wave) then
33 write(unit=message(1),fmt='(a)') &
34 'da_truncate_spectra: Power requested needs higher resolution.'
35 write(unit=message(2),fmt='(a,i8)') &
36 'Maximum grid wavenumber = ', max_wave
37 write(unit=message(3),fmt='(a,i8)') &
38 'Truncating to wavenumber = ', max_wave_trunc
39 call da_warning(__FILE__,__LINE__,message(1:3))
40 max_wave_trunc = max_wave
41 end if
42
43 end subroutine da_truncate_spectra
44
45