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 1696 – NEMO

Changeset 1696


Ignore:
Timestamp:
2009-10-30T19:03:06+01:00 (14 years ago)
Author:
smasson
Message:

receive wind stress module in coupled mode, see ticket:578

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CONFIG/ORCA2_LIM/EXP00/namelist

    r1634 r1696  
    195195cn_snd_crt_grid   = 'T'                     ! 'T' 
    196196                                       ! receive 
    197 cn_rcv_w10m       = 'coupled'               ! 'none' 'coupled' 
     197cn_rcv_w10m       = 'none'                  ! 'none' 'coupled' 
     198cn_rcv_taumod     = 'coupled'               ! 'none' 'coupled' 
    198199cn_rcv_tau_nature = 'oce only'              ! 'oce only' 'oce and ice' 'mixed oce-ice' 
    199200cn_rcv_tau_refere = 'cartesian'             ! 'spherical' 'cartesian' 
  • trunk/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist

    r1634 r1696  
    196196                                       ! receive 
    197197cn_rcv_w10m       = 'coupled'               ! 'none' 'coupled' 
     198cn_rcv_taumod     = 'coupled'               ! 'none' 'coupled' 
    198199cn_rcv_tau_nature = 'oce only'              ! 'oce only' 'oce and ice' 'mixed oce-ice' 
    199200cn_rcv_tau_refere = 'cartesian'             ! 'spherical' 'cartesian' 
  • trunk/NEMO/OPA_SRC/SBC/sbccpl.F90

    r1695 r1696  
    7878   INTEGER, PARAMETER ::   jpr_semp   = 24            ! solid freshwater budget (sublimation - snow) 
    7979   INTEGER, PARAMETER ::   jpr_oemp   = 25            ! ocean freshwater budget (evap - precip) 
    80    INTEGER, PARAMETER ::   jpr_w10m   = 26            !  
    81    INTEGER, PARAMETER ::   jpr_dqnsdt = 27            !  
    82    INTEGER, PARAMETER ::   jpr_rnf    = 28            !  
    83    INTEGER, PARAMETER ::   jpr_cal    = 29            !  
     80   INTEGER, PARAMETER ::   jpr_w10m   = 26            ! 10m wind 
     81   INTEGER, PARAMETER ::   jpr_dqnsdt = 27            ! d(Q non solar)/d(temperature) 
     82   INTEGER, PARAMETER ::   jpr_rnf    = 28            ! runoffs 
     83   INTEGER, PARAMETER ::   jpr_cal    = 29            ! calving 
     84   INTEGER, PARAMETER ::   jpr_taum   = 30            ! wind stress module 
    8485#if ! defined key_cpl_carbon_cycle 
    85    INTEGER, PARAMETER ::   jprcv      = 29            ! total number of fields recieved 
     86   INTEGER, PARAMETER ::   jprcv      = 30            ! total number of fields received 
    8687#else 
    87    INTEGER, PARAMETER ::   jpr_co2    = 30 
    88    INTEGER, PARAMETER ::   jprcv      = 30            ! total number of fields recieved 
     88   INTEGER, PARAMETER ::   jpr_co2    = 31 
     89   INTEGER, PARAMETER ::   jprcv      = 31            ! total number of fields received 
    8990#endif    
    9091   INTEGER, PARAMETER ::   jps_fice   =  1            ! ice fraction  
     
    120121   CHARACTER(len=100) ::   cn_snd_co2         = 'none'        ! 'none' or 'coupled' 
    121122#endif 
    122    ! Recieved from the atmosphere                             ! 
     123   ! Received from the atmosphere                             ! 
    123124   CHARACTER(len=100) ::   cn_rcv_tau_nature  = 'oce only'    ! 'oce only' 'oce and ice' or 'mixed oce-ice' 
    124125   CHARACTER(len=100) ::   cn_rcv_tau_refere  = 'spherical'   ! 'spherical' or 'cartesian' 
     
    132133   CHARACTER(len=100) ::   cn_rcv_rnf         = 'coupled'     ! 'coupled' 'climato' or 'mixed' 
    133134   CHARACTER(len=100) ::   cn_rcv_cal         = 'none'        ! 'none' or 'coupled' 
     135   CHARACTER(len=100) ::   cn_rcv_taumod      = 'none'        ! 'none' or 'coupled' 
    134136#if defined key_cpl_carbon_cycle  
    135137   CHARACTER(len=100) ::   cn_rcv_co2         = 'none'        ! 'none' or 'coupled' 
     
    205207         WRITE(numout,*)'       runoffs                            cn_rcv_rnf         = ', cn_rcv_rnf 
    206208         WRITE(numout,*)'       calving                            cn_rcv_cal         = ', cn_rcv_cal  
     209         WRITE(numout,*)'       stress module                      cn_rcv_taumod      = ', cn_rcv_taumod 
    207210         WRITE(numout,*)'   sent fields' 
    208211         WRITE(numout,*)'       surface temperature                cn_snd_temperature = ', cn_snd_temperature 
     
    406409      !                                                      !      10m wind module      !    
    407410      !                                                      ! ------------------------- ! 
    408       srcv(jpr_w10m)%clname = 'O_Wind10'   ;   IF( TRIM(cn_rcv_w10m) == 'coupled' )   srcv(jpr_w10m)%laction = .TRUE.      
     411      srcv(jpr_w10m)%clname = 'O_Wind10'   ;   IF( TRIM(cn_rcv_w10m  ) == 'coupled' )   srcv(jpr_w10m)%laction = .TRUE.  
     412      ! 
     413      !                                                      ! ------------------------- ! 
     414      !                                                      !   wind stress module      !    
     415      !                                                      ! ------------------------- ! 
     416      srcv(jpr_taum)%clname = 'O_TauMod'   ;   IF( TRIM(cn_rcv_taumod) == 'coupled' )   srcv(jpr_taum)%laction = .TRUE. 
    409417 
    410418#if defined key_cpl_carbon_cycle 
     
    412420      !                                                      !      Atmospheric CO2      ! 
    413421      !                                                      ! ------------------------- ! 
    414       srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(cn_rcv_co2) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE. 
     422      srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(cn_rcv_co2   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE. 
    415423#endif 
    416424      
     
    548556      !!                        qns , qsr    non solar and solar ocean heat fluxes   ('ocean only case) 
    549557      !!                        emp = emps   evap. - precip. (- runoffs) (- calving) ('ocean only case) 
    550       !!                        wndm         10m wind speed  !!!!gm  to be checked 
    551558      !!---------------------------------------------------------------------- 
    552559      INTEGER, INTENT(in) ::   kt       ! ocean model time step index 
     
    554561      INTEGER, INTENT(in) ::   k_ice    ! ice management in the sbc (=0/1/2/3) 
    555562      !! 
     563      LOGICAL ::    llnewtx, llnewtau      ! update wind stress components and module?? 
    556564      INTEGER  ::   ji, jj, jn             ! dummy loop indices 
    557565      INTEGER  ::   isec                   ! number of seconds since nit000 (assuming rdttra did not change since nit000) 
     
    573581 
    574582      !                                                      ! ========================= ! 
    575       IF( srcv(jpr_otx1)%laction ) THEN                      !       ocean stress        ! 
     583      IF( srcv(jpr_otx1)%laction ) THEN                      !  ocean stress components  ! 
    576584         !                                                   ! ========================= ! 
    577585         ! define frcv(:,:,jpr_otx1) and frcv(:,:,jpr_oty1): stress at U/V point along model grid 
     
    618626               CALL lbc_lnk( frcv(:,:,jpr_otx1), 'U',  -1. )   ;   CALL lbc_lnk( frcv(:,:,jpr_oty1), 'V',  -1. ) 
    619627            ENDIF 
     628            llnewtx = .TRUE. 
     629         ELSE 
     630            llnewtx = .FALSE. 
    620631         ENDIF 
    621632         !                                                   ! ========================= ! 
     
    624635         frcv(:,:,jpr_otx1) = 0.e0                               ! here simply set to zero  
    625636         frcv(:,:,jpr_oty1) = 0.e0                               ! an external read in a file can be added instead 
     637         llnewtx = .TRUE. 
    626638         ! 
    627639      ENDIF 
    628640       
    629       ! u(v)tau will be modified by ice model -> need to be reset before each call of the ice/fsbc       
    630       IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 
    631         ! 
    632          utau(:,:) = frcv(:,:,jpr_otx1)                    
    633          vtau(:,:) = frcv(:,:,jpr_oty1) 
    634          ! 
    635          ! wind stress module at T-point 
     641      !                                                      ! ========================= ! 
     642      !                                                      !    wind stress module     !   (taum) 
     643      !                                                      ! ========================= ! 
     644      ! 
     645      IF( .NOT. srcv(jpr_taum)%laction ) THEN                    ! compute wind stress module from its components if not received  
     646         ! => need to be done only when otx1 was changed 
     647         IF( llnewtx ) THEN 
    636648!CDIR NOVERRCHK 
    637          DO jj = 2, jpjm1 
     649            DO jj = 2, jpjm1 
    638650!CDIR NOVERRCHK 
    639             DO ji = fs_2, fs_jpim1   ! vect. opt. 
    640                zzx = utau(ji-1,jj  ) + utau(ji,jj)  
    641                zzy = vtau(ji  ,jj-1) + vtau(ji,jj)  
    642                taum(ji,jj) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 
     651               DO ji = fs_2, fs_jpim1   ! vect. opt. 
     652                  zzx = frcv(ji-1,jj  ,jpr_otx1) + frcv(ji,jj,jpr_otx1)  
     653                  zzy = frcv(ji  ,jj-1,jpr_oty1) + frcv(ji,jj,jpr_oty1)  
     654                  frcv(ji,jj,jpr_taum) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 
     655               END DO 
    643656            END DO 
    644          END DO 
    645          CALL lbc_lnk( taum(:,:), 'T', 1. ) 
    646          ! 
    647          ! wind speed module at T-point 
    648          IF( .NOT. srcv(jpr_w10m)%laction ) THEN  
     657            CALL lbc_lnk( frcv(:,:,jpr_taum), 'T', 1. ) 
     658            llnewtau = .TRUE. 
     659         ELSE 
     660            llnewtau = .FALSE. 
     661         ENDIF 
     662      ELSE 
     663         llnewtau = nrcvinfo(jpr_taum) == PRISM_Recvd   .OR. nrcvinfo(jpr_taum) == PRISM_FromRest .OR.   & 
     664                  & nrcvinfo(jpr_taum) == PRISM_RecvOut .OR. nrcvinfo(jpr_taum) == PRISM_FromRestOut 
     665      ENDIF 
     666       
     667      !                                                      ! ========================= ! 
     668      !                                                      !      10 m wind speed      !   (wndm) 
     669      !                                                      ! ========================= ! 
     670      ! 
     671      IF( .NOT. srcv(jpr_w10m)%laction ) THEN                    ! compute wind spreed from wind stress module if not received   
     672         ! => need to be done only when taumod was changed 
     673         IF( llnewtau ) THEN  
    649674            zcoef = 1. / ( zrhoa * zcdrag )  
    650675            !CDIR NOVERRCHK 
     
    652677               !CDIR NOVERRCHK 
    653678               DO ji = 1, jpi  
    654                   wndm(ji,jj) = SQRT( taum(ji,jj) * zcoef ) 
     679                  frcv(ji,jj,jpr_w10m) = SQRT( frcv(ji,jj,jpr_taum) * zcoef ) 
    655680               END DO 
    656681            END DO 
    657682         ENDIF 
     683      ENDIF 
     684 
     685      ! u(v)tau and taum will be modified by ice model (wndm will be changed by PISCES) 
     686      ! -> need to be reset before each call of the ice/fsbc       
     687      IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 
     688         ! 
     689         utau(:,:) = frcv(:,:,jpr_otx1)                    
     690         vtau(:,:) = frcv(:,:,jpr_oty1) 
     691         taum(:,:) = frcv(:,:,jpr_taum) 
     692         wndm(:,:) = frcv(:,:,jpr_w10m) 
    658693         !   
    659694      ENDIF 
     
    954989      !!       ===>> CAUTION here this changes the net heat flux received from 
    955990      !!             the atmosphere 
    956       !!              * 10m wind module (wndm)    
    957991      !! 
    958992      !!             N.B. - fields over sea-ice are passed in argument so that 
     
    9741008      !!                   pdqns_ice           d(non-solar heat flux)/d(Temperature) over the ice 
    9751009      !!                   sprecip             solid precipitation over the ocean   
    976       !!                   wndm                10m wind module 
    9771010      !!---------------------------------------------------------------------- 
    9781011      REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpl) ::   p_frld     ! lead fraction                [0 to 1] 
     
    10811114      END SELECT 
    10821115 
    1083  
    10841116      SELECT CASE( TRIM( cn_rcv_dqnsdt ) ) 
    10851117      CASE ('coupled') 
     
    10871119      END SELECT 
    10881120 
    1089  
    1090       !                                                      ! ========================= ! 
    1091       !                                                      !      10 m wind speed      !   (wndm) 
    1092       !                                                      ! ========================= ! 
    1093       ! 
    1094       IF( srcv(jpr_w10m  )%laction )   wndm(:,:) = frcv(:,:,jpr_w10m) 
    1095       ! 
    10961121   END SUBROUTINE sbc_cpl_ice_flx 
    10971122    
Note: See TracChangeset for help on using the changeset viewer.