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