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 7792 for branches/UKMO/r6232_HZG_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2017-03-14T16:47:48+01:00 (7 years ago)
Author:
jcastill
Message:

Changes as in branch branches/UKMO/r6232_INGV1_WAVE-coupling@7763

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/r6232_HZG_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r7481 r7792  
    956956      !!---------------------------------------------------------------------- 
    957957      USE zdf_oce,  ONLY : ln_zdfqiao 
     958      USE sbcflx ,  ONLY : ln_shelf_flx, nn_drag, jp_std 
    958959 
    959960      INTEGER, INTENT(in)           ::   kt          ! ocean model time step index 
     
    10391040      ELSE                                                   !   No dynamical coupling   ! 
    10401041         !                                                   ! ========================= ! 
     1042         ! it is possible that the momentum is calculated from the winds (ln_shelf_flx) and a coupled drag coefficient 
     1043         IF( srcv(jpr_wdrag)%laction .AND. ln_shelf_flx .AND. ln_cdgw .AND. nn_drag == jp_std ) THEN 
     1044            DO jj = 1, jpj 
     1045               DO ji = 1, jpi 
     1046                  ! here utau and vtau should contain the wind components as read from the forcing files 
     1047                  zcoef = SQRT(utau(ji,jj)*utau(ji,jj) + vtau(ji,jj)*vtau(ji,jj)) 
     1048                  frcv(jpr_otx1)%z3(ji,jj,1) = zrhoa * frcv(jpr_wdrag)%z3(ji,jj,1) * utau(ji,jj) * zcoef 
     1049                  frcv(jpr_oty1)%z3(ji,jj,1) = zrhoa * frcv(jpr_wdrag)%z3(ji,jj,1) * vtau(ji,jj) * zcoef 
     1050                  utau(ji,jj) = frcv(jpr_otx1)%z3(ji,jj,1) 
     1051                  vtau(ji,jj) = frcv(jpr_oty1)%z3(ji,jj,1) 
     1052               END DO 
     1053            END DO 
     1054            llnewtx = .TRUE. 
     1055         ELSE 
    10411056         frcv(jpr_otx1)%z3(:,:,1) = 0.e0                               ! here simply set to zero  
    10421057         frcv(jpr_oty1)%z3(:,:,1) = 0.e0                               ! an external read in a file can be added instead 
    10431058         llnewtx = .TRUE. 
     1059         ENDIF 
    10441060         ! 
    10451061      ENDIF 
     
    10611077            END DO 
    10621078            CALL lbc_lnk( frcv(jpr_taum)%z3(:,:,1), 'T', 1. ) 
     1079            IF( .NOT. srcv(jpr_otx1)%laction .AND. srcv(jpr_wdrag)%laction .AND. & 
     1080                                ln_shelf_flx .AND. ln_cdgw .AND. nn_drag == jp_std ) & 
     1081               taum(:,:) = frcv(jpr_taum)%z3(:,:,1) 
    10631082            llnewtau = .TRUE. 
    10641083         ELSE 
     
    10751094      !                                                      ! ========================= ! 
    10761095      !                                                      !      10 m wind speed      !   (wndm) 
     1096      !                                                      !   include wave drag coef  !   (wndm) 
    10771097      !                                                      ! ========================= ! 
    10781098      ! 
     
    10851105!CDIR NOVERRCHK 
    10861106               DO ji = 1, jpi  
     1107                  IF( ln_shelf_flx ) THEN   ! the 10 wind module is properly calculated before if ln_shelf_flx 
     1108                     frcv(jpr_w10m)%z3(ji,jj,1) = wndm(ji,jj) 
     1109                  ELSE 
    10871110                  frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef ) 
     1111                  ENDIF 
    10881112               END DO 
    10891113            END DO 
     
    10951119      IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 
    10961120         ! 
     1121         ! if ln_wavcpl, the fields already contain the right information from forcing even if not ln_mixcpl 
    10971122         IF( ln_mixcpl ) THEN 
    1098             utau(:,:) = utau(:,:) * xcplmask(:,:,0) + frcv(jpr_otx1)%z3(:,:,1) * zmsk(:,:) 
    1099             vtau(:,:) = vtau(:,:) * xcplmask(:,:,0) + frcv(jpr_oty1)%z3(:,:,1) * zmsk(:,:) 
    1100             taum(:,:) = taum(:,:) * xcplmask(:,:,0) + frcv(jpr_taum)%z3(:,:,1) * zmsk(:,:) 
    1101             wndm(:,:) = wndm(:,:) * xcplmask(:,:,0) + frcv(jpr_w10m)%z3(:,:,1) * zmsk(:,:) 
    1102          ELSE 
     1123            IF( srcv(jpr_otx1)%laction ) THEN 
     1124               utau(:,:) = utau(:,:) * xcplmask(:,:,0) + frcv(jpr_otx1)%z3(:,:,1) * zmsk(:,:) 
     1125               vtau(:,:) = vtau(:,:) * xcplmask(:,:,0) + frcv(jpr_oty1)%z3(:,:,1) * zmsk(:,:) 
     1126            ENDIF 
     1127            IF( srcv(jpr_taum)%laction )   & 
     1128               taum(:,:) = taum(:,:) * xcplmask(:,:,0) + frcv(jpr_taum)%z3(:,:,1) * zmsk(:,:) 
     1129            IF( srcv(jpr_w10m)%laction )   & 
     1130               wndm(:,:) = wndm(:,:) * xcplmask(:,:,0) + frcv(jpr_w10m)%z3(:,:,1) * zmsk(:,:) 
     1131         ELSE IF( ll_purecpl ) THEN 
    11031132            utau(:,:) = frcv(jpr_otx1)%z3(:,:,1) 
    11041133            vtau(:,:) = frcv(jpr_oty1)%z3(:,:,1) 
     
    11671196      IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1)  
    11681197       
    1169       !                                                      ! ========================= !   
    1170       !                                                      !   Wave drag coefficient   !  
    1171       !                                                      ! ========================= !   
    1172       IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 
    1173  
    11741198      !  Fields received by SAS when OASIS coupling 
    11751199      !  (arrays no more filled at sbcssm stage) 
     
    12421266               CALL ctl_stop( 'sbc_cpl_rcv: wrong definition of sn_rcv_emp%cldes' ) 
    12431267            END SELECT 
    1244          ELSE 
     1268         ELSE IF( ll_purecpl ) THEN 
    12451269            zemp(:,:) = 0._wp 
    12461270         ENDIF 
     
    12501274         IF( srcv(jpr_cal)%laction )     zemp(:,:) = zemp(:,:) - frcv(jpr_cal)%z3(:,:,1) 
    12511275          
    1252          IF( ln_mixcpl ) THEN   ;   emp(:,:) = emp(:,:) * xcplmask(:,:,0) + zemp(:,:) * zmsk(:,:) 
    1253          ELSE                   ;   emp(:,:) =                              zemp(:,:) 
     1276         IF( ln_mixcpl .AND. ( srcv(jpr_oemp)%laction .OR. srcv(jpr_rain)%laction )) THEN 
     1277                                         emp(:,:) = emp(:,:) * xcplmask(:,:,0) + zemp(:,:) * zmsk(:,:) 
     1278         ELSE IF( ll_purecpl ) THEN  ;   emp(:,:) =                              zemp(:,:) 
    12541279         ENDIF 
    12551280         ! 
     
    12661291            ENDIF 
    12671292         ENDIF 
    1268          IF( ln_mixcpl ) THEN   ;   qns(:,:) = qns(:,:) * xcplmask(:,:,0) + zqns(:,:) * zmsk(:,:) 
    1269          ELSE                   ;   qns(:,:) =                              zqns(:,:) 
     1293         IF( ln_mixcpl .AND. ( srcv(jpr_qnsoce)%laction .OR. srcv(jpr_qnsmix)%laction )) THEN 
     1294                                          qns(:,:) = qns(:,:) * xcplmask(:,:,0) + zqns(:,:) * zmsk(:,:) 
     1295         ELSE IF( ll_purecpl ) THEN   ;   qns(:,:) =                              zqns(:,:) 
    12701296         ENDIF 
    12711297 
     
    12761302         ENDIF 
    12771303         IF( ln_dm2dc .AND. ln_cpl )   zqsr(:,:) = sbc_dcy( zqsr )   ! modify qsr to include the diurnal cycle 
    1278          IF( ln_mixcpl ) THEN   ;   qsr(:,:) = qsr(:,:) * xcplmask(:,:,0) + zqsr(:,:) * zmsk(:,:) 
    1279          ELSE                   ;   qsr(:,:) =                              zqsr(:,:) 
     1304         IF( ln_mixcpl .AND. ( srcv(jpr_qsroce)%laction .OR. srcv(jpr_qsrmix)%laction )) THEN 
     1305                                          qsr(:,:) = qsr(:,:) * xcplmask(:,:,0) + zqsr(:,:) * zmsk(:,:) 
     1306         ELSE IF( ll_purecpl ) THEN   ;   qsr(:,:) =                              zqsr(:,:) 
    12801307         ENDIF 
    12811308         ! 
Note: See TracChangeset for help on using the changeset viewer.