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 13357 for NEMO/branches/2020/tickets_icb_1900/src/OCE/ICB/icbdyn.F90 – NEMO

Ignore:
Timestamp:
2020-07-30T13:20:57+02:00 (4 years ago)
Author:
mathiot
Message:

ticket #1900: add changes for Merino 2016 works. Results unchanged if flag ln_M2016 is set to .false. . Remaining step: test ln_M2016 = .true.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/tickets_icb_1900/src/OCE/ICB/icbdyn.F90

    r13265 r13357  
    197197      ij  = mj1( ij  ) 
    198198      ! 
     199      ! assume icb is grounded if tmask(ii,ij,1) or tmask(ii,ij,ikb), depending of the option is not 0 
     200      !IF ( ln_icb_ground ) THEN 
     201      !   ! interpol needed data 
     202      !   CALL icb_utl_interp( pxi, pyj, pe3t=ze3t )   ! 3d velocities 
     203      !   
     204      !   !compute bottom level 
     205      !   CALL icb_utl_getkb( ikb, ze3t, zD ) 
     206      ! 
     207      !   IF(  tmask(ii,ij,ikb)  /=   0._wp  )   RETURN           ! berg reach a new t-cell, but an ocean one 
     208      !ELSE 
    199209      IF(  tmask(ii,ij,1)  /=   0._wp  )   RETURN           ! berg reach a new t-cell, but an ocean one 
     210      !END IF 
    200211      ! 
    201212      ! From here, berg have reach land: treat grounding/bouncing 
     
    254265      REAL(wp), PARAMETER ::   pp_Cr0       = 0.06_wp    ! 
    255266      ! 
    256       INTEGER  ::   itloop 
    257       REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi 
    258       REAL(wp) ::   zvo, zvi, zva, zvwave, zssh_y 
     267      INTEGER  ::   itloop, ikb, jk 
     268      REAL(wp) ::   zuo, zssu, zui, zua, zuwave, zssh_x, zcn, zhi 
     269      REAL(wp) ::   zvo, zssv, zvi, zva, zvwave, zssh_y 
    259270      REAL(wp) ::   zff, zT, zD, zW, zL, zM, zF 
    260271      REAL(wp) ::   zdrag_ocn, zdrag_atm, zdrag_ice, zwave_rad 
    261       REAL(wp) ::   z_ocn, z_atm, z_ice 
     272      REAL(wp) ::   z_ocn, z_atm, z_ice, zdep 
    262273      REAL(wp) ::   zampl, zwmod, zCr, zLwavelength, zLcutoff, zLtop 
    263274      REAL(wp) ::   zlambda, zdetA, zA11, zA12, zaxe, zaye, zD_hi 
    264275      REAL(wp) ::   zuveln, zvveln, zus, zvs, zspeed, zloc_dx, zspeed_new 
     276      REAL(wp), DIMENSION(jpk) :: zuoce, zvoce, ze3t, zdepw 
    265277      !!---------------------------------------------------------------------- 
    266278 
    267279      ! Interpolate gridded fields to berg 
    268280      nknberg = berg%number(1) 
    269       CALL icb_utl_interp( pxi, pyj, pe1=pe1, pe2=pe2,   &   ! scale factor 
    270          &                 puo=zuo, pui=zui, pua=zua,    &   ! oce/ice/atm velocities 
    271          &                 pvo=zvo, pvi=zvi, pva=zva,    &   ! oce/ice/atm velocities 
    272          &                 pssh_i=zssh_x, pssh_j=zssh_y, &   ! ssh gradient 
    273          &                 phi=zhi, pff=zff )               ! ice thickness and coriolis 
    274  
    275       IF (lwp) THEN 
    276          WRITE(numout,*) 'icbdyn ', pxi, pyj  
    277          WRITE(numout,*) pe1, zuo, zui, zua, zssh_x 
    278          WRITE(numout,*) pe2, zvo, zvi, zva, zssh_y 
    279          WRITE(numout,*) zhi, zff  
    280          WRITE(numout,*) '' 
    281       END IF 
    282  
     281      CALL icb_utl_interp( pxi, pyj, pe1=pe1, pe2=pe2,     &   ! scale factor 
     282         &                 pssu=zssu, pui=zui, pua=zua,    &   ! oce/ice/atm velocities 
     283         &                 pssv=zssv, pvi=zvi, pva=zva,    &   ! oce/ice/atm velocities 
     284         &                 pssh_i=zssh_x, pssh_j=zssh_y,   &   ! ssh gradient 
     285         &                 phi=zhi, pff=zff)                   ! ice thickness and coriolis 
    283286 
    284287      zM = berg%current_point%mass 
    285288      zT = berg%current_point%thickness               ! total thickness 
    286       zD = ( rn_rho_bergs / pp_rho_seawater ) * zT    ! draught (keel depth) 
     289      zD = rho_berg_1_oce * zT                        ! draught (keel depth) 
    287290      zF = zT - zD                                    ! freeboard 
    288291      zW = berg%current_point%width 
     
    291294      zhi   = MIN( zhi   , zD    ) 
    292295      zD_hi = MAX( 0._wp, zD-zhi ) 
    293  
    294       ! Wave radiation 
    295       zuwave = zua - zuo   ;   zvwave = zva - zvo     ! Use wind speed rel. to ocean for wave model 
     296  
     297     ! Wave radiation 
     298      zuwave = zua - zssu   ;   zvwave = zva - zssv   ! Use wind speed rel. to ocean for wave model 
    296299      zwmod  = zuwave*zuwave + zvwave*zvwave          ! The wave amplitude and length depend on the  current; 
    297300      !                                               ! wind speed relative to the ocean. Actually wmod is wmod**2 here. 
     
    318321      IF( abs(zui) + abs(zvi) == 0._wp )   z_ice = 0._wp 
    319322 
     323      ! lateral velocities 
     324      ! default ssu and ssv 
     325      ! ln_M2016: mean velocity along the profile 
     326      IF ( ln_M2016 ) THEN 
     327         ! interpol needed data 
     328         CALL icb_utl_interp( pxi, pyj, puoce=zuoce, pvoce=zvoce, pe3t=ze3t )   ! 3d velocities 
     329         
     330         !compute bottom level 
     331         CALL icb_utl_getkb( ikb, ze3t, zD ) 
     332          
     333         ! compute mean velocity  
     334         zuo = 0.0 ; zvo = 0.0; zdep = 0.0 
     335         DO jk = 1, ikb-1 
     336            zuo = zuo + zuoce(jk) * ze3t(jk) 
     337            zvo = zvo + zvoce(jk) * ze3t(jk) 
     338            zdep = zdep + ze3t(jk) 
     339         END DO 
     340         zuo = (zuo + zuoce(ikb) * (zD - zdep)) / zD 
     341         zvo = (zvo + zvoce(ikb) * (zD - zdep)) / zD 
     342      ELSE 
     343         zuo = zssu 
     344         zvo = zssv 
     345      END IF 
     346 
    320347      zuveln = puvel   ;   zvveln = pvvel ! Copy starting uvel, vvel 
    321348      ! 
     
    330357         ! Explicit accelerations 
    331358         !zaxe= zff*pvvel -grav*zssh_x +zwave_rad*zuwave & 
    332          !    -zdrag_ocn*(puvel-zuo) -zdrag_atm*(puvel-zua) -zdrag_ice*(puvel-zui) 
     359         !    -zdrag_ocn*(puvel-zssu) -zdrag_atm*(puvel-zua) -zdrag_ice*(puvel-zui) 
    333360         !zaye=-zff*puvel -grav*zssh_y +zwave_rad*zvwave & 
    334          !    -zdrag_ocn*(pvvel-zvo) -zdrag_atm*(pvvel-zva) -zdrag_ice*(pvvel-zvi) 
     361         !    -zdrag_ocn*(pvvel-zssv) -zdrag_atm*(pvvel-zva) -zdrag_ice*(pvvel-zvi) 
    335362         zaxe = -grav * zssh_x + zwave_rad * zuwave 
    336363         zaye = -grav * zssh_y + zwave_rad * zvwave 
Note: See TracChangeset for help on using the changeset viewer.