*IF DEF,W08_1A                                                             GLW1F404.47     
C *****************************COPYRIGHT******************************     PREWIND1.3      
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved.    PREWIND1.4      
C                                                                          PREWIND1.5      
C Use, duplication or disclosure of this code is subject to the            PREWIND1.6      
C restrictions as set forth in the contract.                               PREWIND1.7      
C                                                                          PREWIND1.8      
C                Meteorological Office                                     PREWIND1.9      
C                London Road                                               PREWIND1.10     
C                BRACKNELL                                                 PREWIND1.11     
C                Berkshire UK                                              PREWIND1.12     
C                RG12 2SZ                                                  PREWIND1.13     
C                                                                          PREWIND1.14     
C If no contract has been raised with this copy of the code, the use,      PREWIND1.15     
C duplication or disclosure of it is strictly prohibited.  Permission      PREWIND1.16     
C to do so must first be obtained in writing from the Head of Numerical    PREWIND1.17     
C Modelling at the above address.                                          PREWIND1.18     
C ******************************COPYRIGHT******************************    PREWIND1.19     
! subroutine prewind (for wave model)                                      PREWIND1.20     
!                                                                          PREWIND1.21     
! Description:                                                             PREWIND1.22     
!   input values from wave model dump of wind components                   PREWIND1.23     
!   are converted to speed and direction, and are then rearranged          PREWIND1.24     
!   into the blocked data arrays required by WAM                           PREWIND1.25     
!   the call to airsea will calculate values for ustar (array us_out)      PREWIND1.26     
!   and also roughness length Z0 (array Z0_out)                            PREWIND1.27     
!                                                                          PREWIND1.28     
! Method:                                                                  PREWIND1.29     
!                                                                          PREWIND1.30     
!                                                                          PREWIND1.31     
!                                                                          PREWIND1.32     
! Current Code Owner: Martin Holt                                          PREWIND1.33     
!                                                                          PREWIND1.34     
! History:                                                                 PREWIND1.35     
! Version   Date     Comment                                               PREWIND1.36     
! -------   ----     -------                                               PREWIND1.37     
! UM4.1    June 1996 Original code.  M Holt                                PREWIND1.38     
!                                                                          PREWIND1.39     
! Code Description:                                                        PREWIND1.40     
!   Language: FORTRAN 77 + common extensions.                              PREWIND1.41     
!                                                                          PREWIND1.42     
!- End of header                                                           PREWIND1.43     
                                                                           PREWIND1.44     

      SUBROUTINE PREWIND(UWIND,VWIND,TAUW_X,TAUW_Y,mdata,                  ,4PREWIND1.45     
     & U10_OUT,                                                            PREWIND1.46     
     & THW_OUT,                                                            PREWIND1.47     
     & US_OUT,                                                             PREWIND1.48     
     & Z0_OUT,                                                             PREWIND1.49     
     & TAUW,                                                               PREWIND1.50     
                                                                           PREWIND1.51     
*CALL ARGWVAL                                                              PREWIND1.52     
*CALL ARGWVGD                                                              PREWIND1.53     
*CALL ARGWVCP                                                              PREWIND1.54     
*CALL ARGWVTB                                                              PREWIND1.55     
                                                                           PREWIND1.56     
     & icode,cmessage)                                                     PREWIND1.57     
                                                                           PREWIND1.58     
                                                                           PREWIND1.59     
*CALL PARCONS                                                              PREWIND1.60     
*CALL PARWVTB                                                              PREWIND1.61     
                                                                           PREWIND1.62     
*CALL TYPWVGD                                                              PREWIND1.63     
*CALL TYPWVAL                                                              PREWIND1.64     
*CALL TYPWVCP                                                              PREWIND1.65     
*CALL TYPWVTB                                                              PREWIND1.66     
                                                                           PREWIND1.67     
      INTEGER ICODE            ! OUT return code                           PREWIND1.68     
      CHARACTER*80 CMESSAGE    ! OUT message accompanying return code      PREWIND1.69     
                                                                           PREWIND1.70     
      integer mdata                                                        PREWIND1.71     
                                                                           PREWIND1.72     
      real                                                                 PREWIND1.73     
     &     UWIND(mdata), ! IN u component of wind on sea-points grid       PREWIND1.74     
     &     VWIND(mdata), ! IN v component of wind on sea-points grid       PREWIND1.75     
     &     TAUW_X(MDATA),! wave stress tauw on sea points grid x comp      PREWIND1.76     
     &     TAUW_Y(MDATA) ! wave stress tauw on sea points grid y comp      PREWIND1.77     
                                                                           PREWIND1.78     
                                                                           PREWIND1.79     
C     ARRAYS OUT                                                           PREWIND1.80     
                                                                           PREWIND1.81     
      real                                                                 PREWIND1.82     
     & U10_OUT(niblo,nblo), ! blocked wind speeds                          PREWIND1.83     
     & THW_OUT(niblo,nblo), ! blocked wind direction                       PREWIND1.84     
     & US_OUT(niblo,nblo),  ! blocked ustar                                PREWIND1.85     
     & Z0_OUT(niblo,nblo),  ! blocked roughness length                     PREWIND1.86     
     & TAUW(niblo,nblo)     ! blocked wave induced stress                  PREWIND1.87     
                                                                           PREWIND1.88     
c     local arrays:                                                        PREWIND1.89     
                                                                           PREWIND1.90     
      real windspeed(mdata), windir(mdata), tw_fld(mdata)                  PREWIND1.91     
                                                                           PREWIND1.92     
      integer                                                              PREWIND1.93     
     &       i    ! loop counter                                           PREWIND1.94     
     &      ,ig   ! loop counter over blocks                               PREWIND1.95     
                                                                           PREWIND1.96     
                                                                           PREWIND1.97     
CLL 1.0 convert UWIND and VWIND into speed and direction                   PREWIND1.98     
                                                                           PREWIND1.99     
                                                                           PREWIND1.100    
      do i=1,mdata                                                         PREWIND1.101    
                                                                           PREWIND1.102    
       windspeed(i)=sqrt(uwind(i)*uwind(i) + vwind(i)*vwind(i) )           PREWIND1.103    
                                                                           PREWIND1.104    
       tw_fld(i)=sqrt(tauw_x(i)*tauw_x(i) + tauw_y(i)*tauw_y(i) )          PREWIND1.105    
                                                                           PREWIND1.106    
       windir(i) = atan2(uwind(i),vwind(i))                                PREWIND1.107    
                                                                           PREWIND1.108    
      enddo                                                                PREWIND1.109    
                                                                           PREWIND1.110    
                                                                           PREWIND1.111    
C   NOW call blokfld for windspeed wind direction and wave stress          PREWIND1.112    
                                                                           PREWIND1.113    
      call blokfld(windspeed,U10_OUT,mdata,                                PREWIND1.114    
*CALL ARGWVAL                                                              PREWIND1.115    
*CALL ARGWVGD                                                              PREWIND1.116    
     & icode)                                                              PREWIND1.117    
                                                                           PREWIND1.118    
      if(icode.eq.1)then                                                   PREWIND1.119    
       CMESSAGE='error in PREWIND: BLOKFLD U10'                            PREWIND1.120    
       return                                                              PREWIND1.121    
      endif                                                                PREWIND1.122    
                                                                           PREWIND1.123    
      call blokfld(windir,THW_OUT,mdata,                                   PREWIND1.124    
*CALL ARGWVAL                                                              PREWIND1.125    
*CALL ARGWVGD                                                              PREWIND1.126    
     & icode)                                                              PREWIND1.127    
                                                                           PREWIND1.128    
      if(icode.eq.1)then                                                   PREWIND1.129    
       CMESSAGE='error in PREWIND: BLOKFLD THW'                            PREWIND1.130    
       return                                                              PREWIND1.131    
      endif                                                                PREWIND1.132    
                                                                           PREWIND1.133    
      call blokfld(tw_fld,tauw,mdata,                                      PREWIND1.134    
*CALL ARGWVAL                                                              PREWIND1.135    
*CALL ARGWVGD                                                              PREWIND1.136    
     & icode)                                                              PREWIND1.137    
C                                                                          PREWIND1.138    
      if(icode.eq.1)then                                                   PREWIND1.139    
       CMESSAGE='error in WAVSTEP: BLOKFLD TAUW'                           PREWIND1.140    
       return                                                              PREWIND1.141    
      endif                                                                PREWIND1.142    
                                                                           PREWIND1.143    
                                                                           PREWIND1.144    
C     now call AIRSEA for each block in turn NOTE IGL is in ARGWVGD        PREWIND1.145    
                                                                           PREWIND1.146    
      DO IG = 1,IGL                                                        PREWIND1.147    
                                                                           PREWIND1.148    
C      this call is for u10 to convert to ustar                            PREWIND1.149    
                                                                           PREWIND1.150    
         CALL AIRSEA (U10_OUT(1,ig), TAUW(1,IG), US_OUT(1,ig),             PREWIND1.151    
     & Z0_OUT(1,ig), IJS(ig), IJL(ig),                                     PREWIND1.152    
*CALL ARGWVAL                                                              PREWIND1.153    
*CALL ARGWVCP                                                              PREWIND1.154    
*CALL ARGWVTB                                                              PREWIND1.155    
     & icode)                                                              PREWIND1.156    
                                                                           PREWIND1.157    
      if(icode.eq.1)then                                                   PREWIND1.158    
       CMESSAGE='error in PREWIND: AIRSEA '                                PREWIND1.159    
       return                                                              PREWIND1.160    
      endif                                                                PREWIND1.161    
C                                                                          PREWIND1.162    
      ENDDO                                                                PREWIND1.163    
                                                                           PREWIND1.164    
      RETURN                                                               PREWIND1.165    
      END                                                                  PREWIND1.166    
*ENDIF                                                                     PREWIND1.167