New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10473 for branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2019-01-08T18:02:36+01:00 (5 years ago)
Author:
jcastill
Message:

Merged branch UKMO/r6232_INGV1_WAVE-coupling@7620

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/AMM15_v3_6_STABLE_package_collate_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r10396 r10473  
    2323   USE sbcapr 
    2424   USE sbcdcy          ! surface boundary condition: diurnal cycle 
     25   USE sbcwave         ! surface boundary condition: waves 
    2526   USE phycst          ! physical constants 
    2627#if defined key_lim3 
     
    108109   INTEGER, PARAMETER ::   jpr_e3t1st = 41            ! first T level thickness  
    109110   INTEGER, PARAMETER ::   jpr_fraqsr = 42            ! fraction of solar net radiation absorbed in the first ocean level 
    110    INTEGER, PARAMETER ::   jprcv      = 42            ! total number of fields received 
     111   INTEGER, PARAMETER ::   jpr_mslp   = 43            ! mean sea level pressure    
     112   INTEGER, PARAMETER ::   jpr_hsig   = 44            ! Hsig    
     113   INTEGER, PARAMETER ::   jpr_phioc  = 45            ! Wave=>ocean energy flux    
     114   INTEGER, PARAMETER ::   jpr_sdrftx = 46            ! Stokes drift on grid 1    
     115   INTEGER, PARAMETER ::   jpr_sdrfty = 47            ! Stokes drift on grid 2    
     116   INTEGER, PARAMETER ::   jpr_wper   = 48            ! Mean wave period   
     117   INTEGER, PARAMETER ::   jpr_wnum   = 49            ! Mean wavenumber   
     118   INTEGER, PARAMETER ::   jpr_wstrf  = 50            ! Stress fraction adsorbed by waves   
     119   INTEGER, PARAMETER ::   jpr_wdrag  = 51            ! Neutral surface drag coefficient   
     120   INTEGER, PARAMETER ::   jprcv      = 51            ! total number of fields received 
    111121 
    112122   INTEGER, PARAMETER ::   jps_fice   =  1            ! ice fraction sent to the atmosphere 
     
    138148   INTEGER, PARAMETER ::   jps_e3t1st = 27            ! first level depth (vvl) 
    139149   INTEGER, PARAMETER ::   jps_fraqsr = 28            ! fraction of solar net radiation absorbed in the first ocean level 
    140    INTEGER, PARAMETER ::   jpsnd      = 28            ! total number of fields sended 
     150   INTEGER, PARAMETER ::   jps_ficet  = 29            ! total ice fraction     
     151   INTEGER, PARAMETER ::   jps_ocxw   = 30            ! currents on grid 1     
     152   INTEGER, PARAMETER ::   jps_ocyw   = 31            ! currents on grid 2   
     153   INTEGER, PARAMETER ::   jps_wlev   = 32            ! water level    
     154   INTEGER, PARAMETER ::   jpsnd      = 32            ! total number of fields sent 
    141155 
    142156   !                                                         !!** namelist namsbc_cpl ** 
     
    152166   ! Received from the atmosphere                     ! 
    153167   TYPE(FLD_C) ::   sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 
    154    TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2                         
     168   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp                              
     169   ! Send to waves    
     170   TYPE(FLD_C) ::   sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev    
     171   ! Received from waves    
     172   TYPE(FLD_C) ::   sn_rcv_hsig,sn_rcv_phioc,sn_rcv_sdrfx,sn_rcv_sdrfy,sn_rcv_wper,sn_rcv_wnum,sn_rcv_wstrf,sn_rcv_wdrag 
    155173   ! Other namelist parameters                        ! 
    156174   INTEGER     ::   nn_cplmodel            ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 
     
    164182 
    165183   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix     ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
     184     
     185   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]    
     186   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0 
    166187 
    167188   INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo           ! OASIS info argument 
     
    182203      !!             ***  FUNCTION sbc_cpl_alloc  *** 
    183204      !!---------------------------------------------------------------------- 
    184       INTEGER :: ierr(3) 
     205      INTEGER :: ierr(4) 
    185206      !!---------------------------------------------------------------------- 
    186207      ierr(:) = 0 
     
    195216      ALLOCATE( xcplmask(jpi,jpj,0:3) , STAT=ierr(3) ) 
    196217      ! 
     218      IF( .NOT. ln_apr_dyn ) ALLOCATE( ssh_ib(jpi,jpj), ssh_ibb(jpi,jpj), apr(jpi, jpj), STAT=ierr(4) ) 
     219 
    197220      sbc_cpl_alloc = MAXVAL( ierr ) 
    198221      IF( lk_mpp            )   CALL mpp_sum ( sbc_cpl_alloc ) 
     
    221244      REAL(wp), POINTER, DIMENSION(:,:) ::   zacs, zaos 
    222245      !! 
    223       NAMELIST/namsbc_cpl/  sn_snd_temp, sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2,      & 
    224          &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr,      & 
    225          &                  sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf  , sn_rcv_cal   , sn_rcv_iceflx,   & 
    226          &                  sn_rcv_co2 , nn_cplmodel  , ln_usecplmask 
     246      NAMELIST/namsbc_cpl/  sn_snd_temp , sn_snd_alb  , sn_snd_thick , sn_snd_crt   , sn_snd_co2,      &    
     247         &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau   , sn_rcv_dqnsdt, sn_rcv_qsr,      &    
     248         &                  sn_snd_ifrac, sn_snd_crtw , sn_snd_wlev  , sn_rcv_hsig  , sn_rcv_phioc ,   &    
     249         &                  sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper  , sn_rcv_wnum  , sn_rcv_wstrf ,   &   
     250         &                  sn_rcv_wdrag, sn_rcv_qns  , sn_rcv_emp   , sn_rcv_rnf   , sn_rcv_cal   ,   &   
     251         &                  sn_rcv_iceflx,sn_rcv_co2  , nn_cplmodel  , ln_usecplmask, sn_rcv_mslp 
    227252      !!--------------------------------------------------------------------- 
    228253      ! 
     
    265290         WRITE(numout,*)'      sea ice heat fluxes             = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 
    266291         WRITE(numout,*)'      atm co2                         = ', TRIM(sn_rcv_co2%cldes   ), ' (', TRIM(sn_rcv_co2%clcat   ), ')' 
     292         WRITE(numout,*)'      significant wave heigth         = ', TRIM(sn_rcv_hsig%cldes  ), ' (', TRIM(sn_rcv_hsig%clcat  ), ')'    
     293         WRITE(numout,*)'      wave to oce energy flux         = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')'    
     294         WRITE(numout,*)'      Surface Stokes drift grid u     = ', TRIM(sn_rcv_sdrfx%cldes ), ' (', TRIM(sn_rcv_sdrfx%clcat ), ')'    
     295         WRITE(numout,*)'      Surface Stokes drift grid v     = ', TRIM(sn_rcv_sdrfy%cldes ), ' (', TRIM(sn_rcv_sdrfy%clcat ), ')'    
     296         WRITE(numout,*)'      Mean wave period                = ', TRIM(sn_rcv_wper%cldes  ), ' (', TRIM(sn_rcv_wper%clcat  ), ')'    
     297         WRITE(numout,*)'      Mean wave number                = ', TRIM(sn_rcv_wnum%cldes  ), ' (', TRIM(sn_rcv_wnum%clcat  ), ')'    
     298         WRITE(numout,*)'      Stress frac adsorbed by waves   = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')'    
     299         WRITE(numout,*)'      Neutral surf drag coefficient   = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')' 
    267300         WRITE(numout,*)'  sent fields (multiple ice categories)' 
    268301         WRITE(numout,*)'      surface temperature             = ', TRIM(sn_snd_temp%cldes  ), ' (', TRIM(sn_snd_temp%clcat  ), ')' 
    269302         WRITE(numout,*)'      albedo                          = ', TRIM(sn_snd_alb%cldes   ), ' (', TRIM(sn_snd_alb%clcat   ), ')' 
    270303         WRITE(numout,*)'      ice/snow thickness              = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' 
     304         WRITE(numout,*)'      total ice fraction              = ', TRIM(sn_snd_ifrac%cldes ), ' (', TRIM(sn_snd_ifrac%clcat ), ')' 
    271305         WRITE(numout,*)'      surface current                 = ', TRIM(sn_snd_crt%cldes   ), ' (', TRIM(sn_snd_crt%clcat   ), ')' 
    272306         WRITE(numout,*)'                      - referential   = ', sn_snd_crt%clvref  
     
    274308         WRITE(numout,*)'                      - mesh          = ', sn_snd_crt%clvgrd 
    275309         WRITE(numout,*)'      oce co2 flux                    = ', TRIM(sn_snd_co2%cldes   ), ' (', TRIM(sn_snd_co2%clcat   ), ')' 
     310         WRITE(numout,*)'      water level                     = ', TRIM(sn_snd_wlev%cldes  ), ' (', TRIM(sn_snd_wlev%clcat  ), ')'    
     311         WRITE(numout,*)'      mean sea level pressure         = ', TRIM(sn_rcv_mslp%cldes  ), ' (', TRIM(sn_rcv_mslp%clcat  ), ')'    
     312         WRITE(numout,*)'      surface current to waves        = ', TRIM(sn_snd_crtw%cldes  ), ' (', TRIM(sn_snd_crtw%clcat  ), ')'    
     313         WRITE(numout,*)'                      - referential   = ', sn_snd_crtw%clvref    
     314         WRITE(numout,*)'                      - orientation   = ', sn_snd_crtw%clvor    
     315         WRITE(numout,*)'                      - mesh          = ', sn_snd_crtw%clvgrd 
    276316         WRITE(numout,*)'  nn_cplmodel                         = ', nn_cplmodel 
    277317         WRITE(numout,*)'  ln_usecplmask                       = ', ln_usecplmask 
     
    312352      !  
    313353      ! Vectors: change of sign at north fold ONLY if on the local grid 
     354      IF( TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM(sn_rcv_tau%cldes ) == 'oce and ice') THEN ! avoid working with the atmospheric fields if they are not coupled 
    314355      IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' )   srcv(jpr_otx1:jpr_itz2)%nsgn = -1. 
    315356       
     
    383424         srcv(jpr_ity1)%clgrid = 'V'                  ! i.e. it is always at U- & V-points for i- & j-comp. resp. 
    384425      ENDIF 
     426      ENDIF 
    385427        
    386428      !                                                      ! ------------------------- ! 
     
    479521      !                                                      ! ------------------------- ! 
    480522      srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE. 
     523 
     524      !                                                      ! ------------------------- !    
     525      !                                                      ! Mean Sea Level Pressure   !    
     526      !                                                      ! ------------------------- !    
     527      srcv(jpr_mslp)%clname = 'O_MSLP'     ;   IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' )    srcv(jpr_mslp)%laction = .TRUE.    
     528 
    481529      !                                                      ! ------------------------- ! 
    482530      !                                                      !   topmelt and botmelt     !    
     
    492540         srcv(jpr_topm:jpr_botm)%laction = .TRUE. 
    493541      ENDIF 
     542      !                                                      ! ------------------------- !   
     543      !                                                      !      Wave breaking        !       
     544      !                                                      ! ------------------------- !    
     545      srcv(jpr_hsig)%clname  = 'O_Hsigwa'    ! significant wave height   
     546      IF( TRIM(sn_rcv_hsig%cldes  ) == 'coupled' )  THEN   
     547         srcv(jpr_hsig)%laction = .TRUE.   
     548         cpl_hsig = .TRUE.   
     549      ENDIF   
     550      srcv(jpr_phioc)%clname = 'O_PhiOce'    ! wave to ocean energy   
     551      IF( TRIM(sn_rcv_phioc%cldes ) == 'coupled' )  THEN   
     552         srcv(jpr_phioc)%laction = .TRUE.   
     553         cpl_phioc = .TRUE.   
     554      ENDIF   
     555      srcv(jpr_sdrftx)%clname = 'O_Sdrfx'    ! Stokes drift in the u direction   
     556      IF( TRIM(sn_rcv_sdrfx%cldes ) == 'coupled' )  THEN   
     557         srcv(jpr_sdrftx)%laction = .TRUE.   
     558         cpl_sdrftx = .TRUE.   
     559      ENDIF   
     560      srcv(jpr_sdrfty)%clname = 'O_Sdrfy'    ! Stokes drift in the v direction   
     561      IF( TRIM(sn_rcv_sdrfy%cldes ) == 'coupled' )  THEN   
     562         srcv(jpr_sdrfty)%laction = .TRUE.   
     563         cpl_sdrfty = .TRUE.   
     564      ENDIF   
     565      srcv(jpr_wper)%clname = 'O_WPer'       ! mean wave period   
     566      IF( TRIM(sn_rcv_wper%cldes  ) == 'coupled' )  THEN   
     567         srcv(jpr_wper)%laction = .TRUE.   
     568         cpl_wper = .TRUE.   
     569      ENDIF   
     570      srcv(jpr_wnum)%clname = 'O_WNum'       ! mean wave number   
     571      IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' )  THEN   
     572         srcv(jpr_wnum)%laction = .TRUE.   
     573         cpl_wnum = .TRUE.   
     574      ENDIF   
     575      srcv(jpr_wstrf)%clname = 'O_WStrf'     ! stress fraction adsorbed by the wave   
     576      IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' )  THEN   
     577         srcv(jpr_wstrf)%laction = .TRUE.   
     578         cpl_wstrf = .TRUE.   
     579      ENDIF   
     580      srcv(jpr_wdrag)%clname = 'O_WDrag'     ! neutral surface drag coefficient   
     581      IF( TRIM(sn_rcv_wdrag%cldes ) == 'coupled' )  THEN   
     582         srcv(jpr_wdrag)%laction = .TRUE.   
     583         cpl_wdrag = .TRUE.   
     584      ENDIF   
     585      !    
    494586      !                                                      ! ------------------------------- ! 
    495587      !                                                      !   OPA-SAS coupling - rcv by opa !    
     
    646738      !                                                      ! ------------------------- ! 
    647739      ssnd(jps_fice)%clname = 'OIceFrc' 
     740      ssnd(jps_ficet)%clname = 'OIceFrcT' 
    648741      ssnd(jps_hice)%clname = 'OIceTck' 
    649742      ssnd(jps_hsnw)%clname = 'OSnwTck' 
     
    654747      ENDIF 
    655748       
     749      IF (TRIM( sn_snd_ifrac%cldes )  == 'coupled') ssnd(jps_ficet)%laction = .TRUE. 
     750 
    656751      SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 
    657752      CASE( 'none'         )       ! nothing to do 
     
    674769      ssnd(jps_ocy1)%clname = 'O_OCury1'   ;   ssnd(jps_ivy1)%clname = 'O_IVely1' 
    675770      ssnd(jps_ocz1)%clname = 'O_OCurz1'   ;   ssnd(jps_ivz1)%clname = 'O_IVelz1' 
     771      ssnd(jps_ocxw)%clname = 'O_OCurxw'    
     772      ssnd(jps_ocyw)%clname = 'O_OCuryw' 
    676773      ! 
    677774      ssnd(jps_ocx1:jps_ivz1)%nsgn = -1.   ! vectors: change of the sign at the north fold 
     
    694791      END SELECT 
    695792 
     793      ssnd(jps_ocxw:jps_ocyw)%nsgn = -1.   ! vectors: change of the sign at the north fold    
     794               
     795      IF( sn_snd_crtw%clvgrd == 'U,V' ) THEN    
     796         ssnd(jps_ocxw)%clgrid = 'U' ; ssnd(jps_ocyw)%clgrid = 'V'    
     797      ELSE IF( sn_snd_crtw%clvgrd /= 'T' ) THEN    
     798         CALL ctl_stop( 'sn_snd_crtw%clvgrd must be equal to T' )    
     799      ENDIF    
     800      IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) ssnd(jps_ocxw:jps_ocyw)%nsgn = 1.    
     801      SELECT CASE( TRIM( sn_snd_crtw%cldes ) )    
     802         CASE( 'none'                 )   ; ssnd(jps_ocxw:jps_ocyw)%laction = .FALSE.    
     803         CASE( 'oce only'             )   ; ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE.    
     804         CASE( 'weighted oce and ice' )   !   nothing to do    
     805         CASE( 'mixed oce-ice'        )   ; ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE.    
     806         CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crtw%cldes' )    
     807      END SELECT 
     808 
    696809      !                                                      ! ------------------------- ! 
    697810      !                                                      !          CO2 flux         ! 
    698811      !                                                      ! ------------------------- ! 
    699812      ssnd(jps_co2)%clname = 'O_CO2FLX' ;  IF( TRIM(sn_snd_co2%cldes) == 'coupled' )    ssnd(jps_co2 )%laction = .TRUE. 
     813 
     814      !                                                      ! ------------------------- !    
     815      !                                                      !     Sea surface height    !    
     816      !                                                      ! ------------------------- !    
     817      ssnd(jps_wlev)%clname = 'O_Wlevel' ;  IF( TRIM(sn_snd_wlev%cldes) == 'coupled' )   ssnd(jps_wlev)%laction = .TRUE. 
    700818 
    701819      !                                                      ! ------------------------------- ! 
     
    792910      IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 )   & 
    793911         &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    794       ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
     912      IF( ln_dm2dc .AND. ln_cpl ) ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
    795913 
    796914      CALL wrk_dealloc( jpi,jpj, zacs, zaos ) 
     
    846964      !!                        emp          upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 
    847965      !!---------------------------------------------------------------------- 
     966      USE zdf_oce,  ONLY : ln_zdfqiao 
     967 
    848968      INTEGER, INTENT(in)           ::   kt          ! ocean model time step index 
    849969      INTEGER, INTENT(in)           ::   k_fsbc      ! frequency of sbc (-> ice model) computation  
     
    10281148      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    10291149#endif 
     1150      !    
     1151      !                                                      ! ========================= !    
     1152      !                                                      ! Mean Sea Level Pressure   !   (taum)    
     1153      !                                                      ! ========================= !    
     1154      !    
     1155      IF( srcv(jpr_mslp)%laction ) THEN                    ! UKMO SHELF effect of atmospheric pressure on SSH    
     1156          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields    
     1157        
     1158          r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization    
     1159          ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)    
     1160          apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1) !atmospheric pressure    
     1161        
     1162          IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:)  ! correct this later (read from restart if possible)    
     1163      END IF    
     1164      !   
     1165      IF( ln_sdw ) THEN  ! Stokes Drift correction activated   
     1166      !                                                      ! ========================= !    
     1167      !                                                      !       Stokes drift u      !   
     1168      !                                                      ! ========================= !    
     1169         IF( srcv(jpr_sdrftx)%laction ) ut0sd(:,:) = frcv(jpr_sdrftx)%z3(:,:,1)   
     1170      !   
     1171      !                                                      ! ========================= !    
     1172      !                                                      !       Stokes drift v      !   
     1173      !                                                      ! ========================= !    
     1174         IF( srcv(jpr_sdrfty)%laction ) vt0sd(:,:) = frcv(jpr_sdrfty)%z3(:,:,1)   
     1175      !   
     1176      !                                                      ! ========================= !    
     1177      !                                                      !      Wave mean period     !   
     1178      !                                                      ! ========================= !    
     1179         IF( srcv(jpr_wper)%laction ) wmp(:,:) = frcv(jpr_wper)%z3(:,:,1)   
     1180      !   
     1181      !                                                      ! ========================= !    
     1182      !                                                      !  Significant wave height  !   
     1183      !                                                      ! ========================= !    
     1184         IF( srcv(jpr_hsig)%laction ) hsw(:,:) = frcv(jpr_hsig)%z3(:,:,1)   
     1185      !   
     1186      !                                                      ! ========================= !    
     1187      !                                                      !    Vertical mixing Qiao   !   
     1188      !                                                      ! ========================= !    
     1189         IF( srcv(jpr_wnum)%laction .AND. ln_zdfqiao ) wnum(:,:) = frcv(jpr_wnum)%z3(:,:,1)   
     1190        
     1191         ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode   
     1192         IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction &   
     1193                                                                    .OR. srcv(jpr_hsig)%laction ) &   
     1194            CALL sbc_stokes()   
     1195      ENDIF   
     1196      !                                                      ! ========================= !    
     1197      !                                                      ! Stress adsorbed by waves  !   
     1198      !                                                      ! ========================= !    
     1199      IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1)   
     1200        
     1201      !                                                      ! ========================= !    
     1202      !                                                      ! Wave drag coefficient   !   
     1203      !                                                      ! ========================= !    
     1204      IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 
    10301205 
    10311206      !  Fields received by SAS when OASIS coupling 
     
    21012276      ENDIF 
    21022277      ! 
     2278      !                                                      ! ------------------------- !    
     2279      !                                                      !  Surface current to waves !    
     2280      !                                                      ! ------------------------- !    
     2281      IF( ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN    
     2282          !        
     2283          !                                                  j+1  j     -----V---F    
     2284          ! surface velocity always sent from T point                    !       |    
     2285          !                                                       j      |   T   U    
     2286          !                                                              |       |    
     2287          !                                                   j   j-1   -I-------|    
     2288          !                                               (for I)        |       |    
     2289          !                                                             i-1  i   i    
     2290          !                                                              i      i+1 (for I)    
     2291          SELECT CASE( TRIM( sn_snd_crtw%cldes ) )    
     2292          CASE( 'oce only'             )      ! C-grid ==> T    
     2293             DO jj = 2, jpjm1    
     2294                DO ji = fs_2, fs_jpim1   ! vector opt.    
     2295                   zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) )    
     2296                   zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji , jj-1,1) )     
     2297                END DO    
     2298             END DO    
     2299          CASE( 'weighted oce and ice' )       
     2300             SELECT CASE ( cp_ice_msh )    
     2301             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T    
     2302                DO jj = 2, jpjm1    
     2303                   DO ji = fs_2, fs_jpim1   ! vector opt.    
     2304                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un (ji-1,jj  ,1) ) * zfr_l(ji,jj)      
     2305                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn (ji  ,jj-1,1) ) * zfr_l(ji,jj)    
     2306                      zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)    
     2307                      zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)    
     2308                   END DO    
     2309                END DO    
     2310             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T    
     2311                DO jj = 2, jpjm1    
     2312                   DO ji = 2, jpim1   ! NO vector opt.    
     2313                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)      
     2314                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)      
     2315                      zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     &    
     2316                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2317                      zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     &    
     2318                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2319                   END DO    
     2320                END DO    
     2321             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T    
     2322                DO jj = 2, jpjm1    
     2323                   DO ji = 2, jpim1   ! NO vector opt.    
     2324                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)      
     2325                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)      
     2326                      zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     &    
     2327                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2328                      zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     &    
     2329                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2330                   END DO    
     2331                END DO    
     2332             END SELECT    
     2333             CALL lbc_lnk( zitx1, 'T', -1. )   ;   CALL lbc_lnk( zity1, 'T', -1. )    
     2334          CASE( 'mixed oce-ice'        )    
     2335             SELECT CASE ( cp_ice_msh )    
     2336             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T    
     2337                DO jj = 2, jpjm1    
     2338                   DO ji = fs_2, fs_jpim1   ! vector opt.    
     2339                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
     2340                         &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)    
     2341                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &    
     2342                         &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)    
     2343                   END DO    
     2344                END DO    
     2345             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T    
     2346                DO jj = 2, jpjm1    
     2347                   DO ji = 2, jpim1   ! NO vector opt.    
     2348                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &       
     2349                         &         + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     &    
     2350                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2351                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &     
     2352                         &         + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     &    
     2353                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2354                   END DO    
     2355                END DO    
     2356             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T    
     2357                DO jj = 2, jpjm1    
     2358                   DO ji = 2, jpim1   ! NO vector opt.    
     2359                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &       
     2360                         &         + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     &    
     2361                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2362                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &     
     2363                         &         + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     &    
     2364                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)    
     2365                   END DO    
     2366                END DO    
     2367             END SELECT    
     2368          END SELECT    
     2369         CALL lbc_lnk( zotx1, ssnd(jps_ocxw)%clgrid, -1. )   ; CALL lbc_lnk( zoty1, ssnd(jps_ocyw)%clgrid, -1. )    
     2370         !    
     2371         !    
     2372         IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) THEN             ! Rotation of the components    
     2373         !                                                                        ! Ocean component    
     2374            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->e', ztmp1 )       ! 1st component     
     2375            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->n', ztmp2 )       ! 2nd component     
     2376            zotx1(:,:) = ztmp1(:,:)                                                   ! overwrite the components     
     2377            zoty1(:,:) = ztmp2(:,:)     
     2378            IF( ssnd(jps_ivx1)%laction ) THEN                                     ! Ice component    
     2379               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 )    ! 1st component     
     2380               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 )    ! 2nd component     
     2381               zitx1(:,:) = ztmp1(:,:)                                                ! overwrite the components     
     2382               zity1(:,:) = ztmp2(:,:)    
     2383            ENDIF    
     2384         ENDIF    
     2385         !    
     2386!         ! spherical coordinates to cartesian -> 2 components to 3 components    
     2387!         IF( TRIM( sn_snd_crtw%clvref ) == 'cartesian' ) THEN    
     2388!            ztmp1(:,:) = zotx1(:,:)                     ! ocean currents    
     2389!            ztmp2(:,:) = zoty1(:,:)    
     2390!            CALL oce2geo ( ztmp1, ztmp2, 'T', zotx1, zoty1, zotz1 )    
     2391!            !    
     2392!            IF( ssnd(jps_ivx1)%laction ) THEN           ! ice velocities    
     2393!               ztmp1(:,:) = zitx1(:,:)    
     2394!               ztmp1(:,:) = zity1(:,:)    
     2395!               CALL oce2geo ( ztmp1, ztmp2, 'T', zitx1, zity1, zitz1 )    
     2396!            ENDIF    
     2397!         ENDIF    
     2398         !    
     2399         IF( ssnd(jps_ocxw)%laction )   CALL cpl_snd( jps_ocxw, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info )   ! ocean x current 1st grid    
     2400         IF( ssnd(jps_ocyw)%laction )   CALL cpl_snd( jps_ocyw, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info )   ! ocean y current 1st grid    
     2401         !     
     2402      ENDIF    
     2403      !    
     2404      IF( ssnd(jps_ficet)%laction ) THEN    
     2405         CALL cpl_snd( jps_ficet, isec, RESHAPE ( fr_i, (/jpi,jpj,1/) ), info )    
     2406      END IF    
     2407      !                                                      ! ------------------------- !    
     2408      !                                                      !   Water levels to waves   !    
     2409      !                                                      ! ------------------------- !    
     2410      IF( ssnd(jps_wlev)%laction ) THEN    
     2411         IF( ln_apr_dyn ) THEN     
     2412            IF( kt /= nit000 ) THEN     
     2413               ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )     
     2414            ELSE     
     2415               ztmp1(:,:) = sshb(:,:)     
     2416            ENDIF     
     2417         ELSE     
     2418            ztmp1(:,:) = sshn(:,:)     
     2419         ENDIF     
     2420         CALL cpl_snd( jps_wlev  , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )    
     2421      END IF 
    21032422      ! 
    21042423      !  Fields sent by OPA to SAS when doing OPA<->SAS coupling 
Note: See TracChangeset for help on using the changeset viewer.