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

Changeset 8917


Ignore:
Timestamp:
2017-12-06T13:25:24+01:00 (4 years ago)
Author:
jcastill
Message:

Some fixes to take into account that the received wave fields are on the T grid and winds on the U,V grids, so that variables are calculated in the right grid

Location:
branches/UKMO/r6232_HZG_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
3 edited

Legend:

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

    r8756 r8917  
    10621062         ! it is possible that the momentum is calculated from the winds (ln_shelf_flx) and a coupled drag coefficient 
    10631063         IF( srcv(jpr_wdrag)%laction .AND. ln_shelf_flx .AND. ln_cdgw .AND. nn_drag == jp_std ) THEN 
    1064             DO jj = 1, jpj 
    1065                DO ji = 1, jpi 
    1066                   ! here utau and vtau should contain the wind components as read from the forcing files 
    1067                   zcoef = SQRT(utau(ji,jj)*utau(ji,jj) + vtau(ji,jj)*vtau(ji,jj)) 
    1068                   frcv(jpr_otx1)%z3(ji,jj,1) = zrhoa * frcv(jpr_wdrag)%z3(ji,jj,1) * utau(ji,jj) * zcoef 
    1069                   frcv(jpr_oty1)%z3(ji,jj,1) = zrhoa * frcv(jpr_wdrag)%z3(ji,jj,1) * vtau(ji,jj) * zcoef 
     1064            DO jj = 1, jpjm1 
     1065               DO ji = 1, jpim1 
     1066                  ! here utau and vtau should contain the wind components as read from the forcing files, 
     1067                  ! and the wind module should already be properly calculated 
     1068                  frcv(jpr_otx1)%z3(ji,jj,1) = zrhoa * 0.5 * ( frcv(jpr_wdrag)%z3(ji,jj,1) + frcv(jpr_wdrag)%z3(ji+1,jj,1) ) * & 
     1069                                                                         utau(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) ) 
     1070                  frcv(jpr_oty1)%z3(ji,jj,1) = zrhoa * 0.5 * ( frcv(jpr_wdrag)%z3(ji,jj,1) + frcv(jpr_wdrag)%z3(ji,jj+1,1) ) * & 
     1071                                                                         vtau(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) ) 
    10701072                  utau(ji,jj) = frcv(jpr_otx1)%z3(ji,jj,1) 
    10711073                  vtau(ji,jj) = frcv(jpr_oty1)%z3(ji,jj,1) 
    10721074               END DO 
    10731075            END DO 
     1076            CALL lbc_lnk_multi( frcv(jpr_otx1)%z3(:,:,1), 'U', -1. , frcv(jpr_oty1)%z3(:,:,1), 'V', -1. , & 
     1077                                                             utau(:,:), 'U', -1. , vtau(:,:), 'V',  -1. ) 
    10741078            llnewtx = .TRUE. 
    10751079         ELSE 
  • branches/UKMO/r6232_HZG_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcflx.F90

    r8764 r8917  
    150150 
    151151            IF( ln_rel_wind ) THEN 
    152                DO jj = 2, jpjm1 
    153                   DO ji = fs_2, fs_jpim1   ! vect. opt. 
    154                      zwnd_i(ji,jj) = ( sf(jp_utau)%fnow(ji,jj,1) - rn_wfac * 0.5 * ( ssu_m(ji-1,jj  ) + ssu_m(ji,jj) )) 
    155                      zwnd_j(ji,jj) = ( sf(jp_vtau)%fnow(ji,jj,1) - rn_wfac * 0.5 * ( ssv_m(ji  ,jj-1) + ssv_m(ji,jj) )) 
     152               DO jj = 1, jpj 
     153                  DO ji = 1, jpi 
     154                     zwnd_i(ji,jj) = sf(jp_utau)%fnow(ji,jj,1) - rn_wfac * ssu_m(ji,jj) 
     155                     zwnd_j(ji,jj) = sf(jp_vtau)%fnow(ji,jj,1) - rn_wfac * ssv_m(ji,jj) 
    156156                  END DO 
    157157               END DO 
    158                CALL lbc_lnk( zwnd_i(:,:) , 'T', -1. ) 
    159                CALL lbc_lnk( zwnd_j(:,:) , 'T', -1. ) 
    160158            ELSE 
    161159               zwnd_i(:,:) = sf(jp_utau)%fnow(:,:,1) 
     
    179177         !                                                        ! this code is inefficient but put here to allow merging with another UKMO branch 
    180178         IF( ln_shelf_flx ) THEN 
     179            ! calculate first the wind module, as it will be used later 
     180            DO jj = 2, jpjm1 
     181               DO ji = fs_2, fs_jpim1    ! vect. opt. 
     182                  ztx = zwnd_i(ji-1,jj  ) + zwnd_i(ji,jj) 
     183                  zty = zwnd_j(ji  ,jj-1) + zwnd_j(ji,jj) 
     184                  wndm(ji,jj) = 0.5 * SQRT( ztx * ztx + zty * zty ) 
     185               END DO 
     186            END DO 
     187            CALL lbc_lnk( wndm(:,:), 'T', 1. ) 
     188 
    181189            IF( ln_cdgw .AND. nn_drag == jp_std ) THEN 
    182190               IF( cpl_wdrag ) THEN  
     
    190198                  END DO 
    191199               ELSE 
    192                   DO jj = 1, jpj 
    193                      DO ji = 1, jpi 
    194                         totwind = sqrt(zwnd_i(ji,jj)*zwnd_i(ji,jj) + zwnd_j(ji,jj)*zwnd_j(ji,jj)) 
    195                         utau(ji,jj) = zrhoa * cdn_wave(ji,jj) * zwnd_i(ji,jj) * totwind 
    196                         vtau(ji,jj) = zrhoa * cdn_wave(ji,jj) * zwnd_j(ji,jj) * totwind 
     200                  DO jj = 1, jpjm1 
     201                     DO ji = 1, jpim1 
     202                        utau(ji,jj) = zrhoa * 0.5 * ( cdn_wave(ji,jj) + cdn_wave(ji+1,jj) ) * zwnd_i(ji,jj) * & 
     203                                                                        0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) ) 
     204                        vtau(ji,jj) = zrhoa * 0.5 * ( cdn_wave(ji,jj) + cdn_wave(ji,jj+1) ) * zwnd_j(ji,jj) * & 
     205                                                                        0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) ) 
    197206                     END DO 
    198207                  END DO 
     208                  CALL lbc_lnk_multi( utau(:,:), 'U', -1., vtau(:,:), 'V', -1. ) 
    199209               ENDIF 
    200210            ELSE IF( nn_drag == jp_const ) THEN 
    201                DO jj = 1, jpj 
    202                   DO ji = 1, jpi 
    203                      totwind = sqrt(zwnd_i(ji,jj)*zwnd_i(ji,jj) + zwnd_j(ji,jj)*zwnd_j(ji,jj)) 
    204                      utau(ji,jj) = zrhoa * zcdrag * zwnd_i(ji,jj) * totwind 
    205                      vtau(ji,jj) = zrhoa * zcdrag * zwnd_j(ji,jj) * totwind 
     211               DO jj = 1, jpjm1 
     212                  DO ji = 1, jpim1 
     213                     utau(ji,jj) = zrhoa * zcdrag * zwnd_i(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji+1,jj) ) 
     214                     vtau(ji,jj) = zrhoa * zcdrag * zwnd_j(ji,jj) * 0.5 * ( wndm(ji,jj) + wndm(ji,jj+1) ) 
    206215                  END DO 
    207216               END DO 
     217               CALL lbc_lnk_multi( utau(:,:), 'U', -1., vtau(:,:), 'V', -1. ) 
    208218            ENDIF 
    209219         ENDIF 
     
    221231               zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 
    222232               taum(ji,jj) = zmod 
    223                IF( ln_shelf_flx ) THEN 
    224                   ! winds as received, not relative to the current 
    225                   ztx = sf(jp_utau)%fnow(ji-1,jj  ) + sf(jp_utau)%fnow(ji,jj) 
    226                   zty = sf(jp_vtau)%fnow(ji  ,jj-1) + sf(jp_vtau)%fnow(ji,jj) 
    227                   wndm(ji,jj) = 0.5 * SQRT( ztx * ztx + zty * zty ) 
    228                ELSE 
     233               IF( .NOT. ln_shelf_flx ) THEN 
    229234               wndm(ji,jj) = SQRT( zmod * zcoef ) 
    230235               ENDIF 
  • branches/UKMO/r6232_HZG_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90

    r8756 r8917  
    268268            END DO 
    269269         END DO 
    270  
     270         CALL lbc_lnk_multi( utau(:,:), 'U', -1. , vtau(:,:), 'V', -1. , taum(:,: ), 'T', -1. ) 
    271271      ENDIF 
    272272      ! 
Note: See TracChangeset for help on using the changeset viewer.