!copyright (C) 2001  MSC-RPN COMM  %%%RPNPHY%%%
***s/p rdmax

      subroutine rdmax( chrd, ch, vmax, inrd, ni, nk, nkrd) 1
#include "impnone.cdk"

      integer ni, nk, nkrd
      integer inrd(nkrd)
      real chrd(ni,nkrd), ch(ni,nk), vmax(ni)

*Author:
*          Marc Gagnon
*
*Arguments:
*
*          - Output -
* chrd     array after reduction
*
*          - Input -
* ch       original array before reduction
* vmax     work field
* inrd     list of reduced levels
* ni       horizontal dimension 
* nk       number of levels
* nkrd     reduced number of levels
*
*Object:
*          select a subset of the levels of a 2D (ni by nk) array,
*          keeping the max values encountered between each selected
*          level
*
*Notes:
*          ni .gt. 0
*          nkrd .le. nk
*          inrd(*) is included in [1..nk]
**

      integer krd, kc, ks, k, i

      do krd=1,nkrd
        kc = inrd(krd)

        if( krd .ne. nkrd) then
          ks = inrd(krd+1)
        else
          ks = kc
        endif

        do i=1,ni
          vmax(i) = ch(i,kc)
        enddo

        do k=kc+1,ks-1
          do i=1,ni
            vmax(i) = max( vmax(i), ch(i,k))
          enddo
        enddo

        do i=1,ni
          chrd(i,krd) = vmax(i)
        enddo

      enddo

      end