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

Changeset 4046


Ignore:
Timestamp:
2013-09-27T18:18:21+02:00 (11 years ago)
Author:
davestorkey
Message:
  1. Minor bug fix involving scale factors.
  2. Comment out limit on radiation velocities for now.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdylib.F90

    r4033 r4046  
    5959      INTEGER  ::   flagu, flagv                           ! short cuts 
    6060      REAL(wp) ::   zmask_x, zmask_y1, zmask_y2 
    61       REAL(wp) ::   zex, zey, zey1, zey2 
     61      REAL(wp) ::   zex1, zex2, zey, zey1, zey2 
    6262      REAL(wp) ::   zdt, zdx, zdy, znor2, zrx, zry         ! intermediate calculations 
    6363      REAL(wp) ::   zout, zwgt, zdy_centred 
     
    123123         ! 
    124124         ! Calculate scale factors for calculation of spatial derivatives.         
    125          zex = ( abs(iibm1-iibm2) * pe_xdif(iibm2+ii_offset,ijbm2          )         & 
    126         &      + abs(ijbm1-ijbm2) * pe_ydif(iibm2          ,ijbm2+ij_offset) )  
     125         zex1 = ( abs(iibm1-iibm2) * pe_xdif(iibm1+ii_offset,ijbm1          )         & 
     126        &       + abs(ijbm1-ijbm2) * pe_ydif(iibm1          ,ijbm1+ij_offset) )  
     127         zex2 = ( abs(iibm1-iibm2) * pe_xdif(iibm2+ii_offset,ijbm2          )         & 
     128        &       + abs(ijbm1-ijbm2) * pe_ydif(iibm2          ,ijbm2+ij_offset) )  
    127129         zey1 = ( (iibm1-iibm1jm1) * pe_xdif(iibm1jm1+ii_offset,ijbm1jm1          )  &  
    128130        &      +  (ijbm1-ijbm1jm1) * pe_ydif(iibm1jm1          ,ijbm1jm1+ij_offset) )  
     
    132134         if( zey1 .lt. rsmall ) zey1 = zey2 
    133135         if( zey2 .lt. rsmall ) zey2 = zey1 
    134          zex = max(zex,rsmall); zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
     136         zex1 = max(zex1,rsmall); zex2 = max(zex2,rsmall) 
     137         zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
    135138         ! 
    136139         ! Calculate masks for calculation of spatial derivatives.         
     
    149152         ! zrx and zry. 
    150153         zdt = phia(iibm1,ijbm1) - phib(iibm1,ijbm1) 
    151          zdx = ( ( phia(iibm1,ijbm1) - phia(iibm2,ijbm2) ) / zex ) * zmask_x  
     154         zdx = ( ( phia(iibm1,ijbm1) - phia(iibm2,ijbm2) ) / zex2 ) * zmask_x  
    152155         zdy_1 = ( ( phib(iibm1   ,ijbm1   ) - phib(iibm1jm1,ijbm1jm1) ) / zey1 ) * zmask_y1     
    153156         zdy_2 = ( ( phib(iibm1jp1,ijbm1jp1) - phib(iibm1   ,ijbm1)    ) / zey2 ) * zmask_y2  
     
    161164         znor2 = max(znor2,zepsilon) 
    162165         ! 
    163          zrx = zdt * zdx / ( zex * znor2 )  
    164          zrx = min(zrx,2.0_wp) 
     166         zrx = zdt * zdx / ( zex1 * znor2 )  
     167!!$         zrx = min(zrx,2.0_wp) 
    165168         zout = sign( 1., zrx ) 
    166169         zout = 0.5*( zout + abs(zout) ) 
     
    215218      INTEGER  ::   flagu, flagv                           ! short cuts 
    216219      REAL(wp) ::   zmask_x, zmask_y1, zmask_y2 
    217       REAL(wp) ::   zex, zey, zey1, zey2 
     220      REAL(wp) ::   zex1, zex2, zey, zey1, zey2 
    218221      REAL(wp) ::   zdt, zdx, zdy, znor2, zrx, zry         ! intermediate calculations 
    219222      REAL(wp) ::   zout, zwgt, zdy_centred 
     
    281284            ! 
    282285            ! Calculate scale factors for calculation of spatial derivatives.         
    283             zex = ( abs(iibm1-iibm2) * pe_xdif(iibm2+ii_offset,ijbm2          )         & 
    284            &      + abs(ijbm1-ijbm2) * pe_ydif(iibm2          ,ijbm2+ij_offset) )  
     286            zex1 = ( abs(iibm1-iibm2) * pe_xdif(iibm1+ii_offset,ijbm1          )         & 
     287           &       + abs(ijbm1-ijbm2) * pe_ydif(iibm1          ,ijbm1+ij_offset) )  
     288            zex2 = ( abs(iibm1-iibm2) * pe_xdif(iibm2+ii_offset,ijbm2          )         & 
     289           &       + abs(ijbm1-ijbm2) * pe_ydif(iibm2          ,ijbm2+ij_offset) )  
    285290            zey1 = ( (iibm1-iibm1jm1) * pe_xdif(iibm1jm1+ii_offset,ijbm1jm1          )  &  
    286291           &      +  (ijbm1-ijbm1jm1) * pe_ydif(iibm1jm1          ,ijbm1jm1+ij_offset) )  
     
    290295            if( zey1 .lt. rsmall ) zey1 = zey2 
    291296            if( zey2 .lt. rsmall ) zey2 = zey1 
    292             zex = max(zex,rsmall); zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
     297            zex1 = max(zex1,rsmall); zex2 = max(zex2,rsmall);  
     298            zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
    293299            ! 
    294300            ! Calculate masks for calculation of spatial derivatives.         
     
    305311            ! this reason.  
    306312            zdt = phia(iibm1,ijbm1,jk) - phib(iibm1,ijbm1,jk) 
    307             zdx = ( ( phia(iibm1,ijbm1,jk) - phia(iibm2,ijbm2,jk) ) / zex ) * zmask_x                   
     313            zdx = ( ( phia(iibm1,ijbm1,jk) - phia(iibm2,ijbm2,jk) ) / zex2 ) * zmask_x                   
    308314            zdy_1 = ( ( phib(iibm1   ,ijbm1   ,jk) - phib(iibm1jm1,ijbm1jm1,jk) ) / zey1 ) * zmask_y1   
    309315            zdy_2 = ( ( phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1   ,ijbm1   ,jk) ) / zey2 ) * zmask_y2       
     
    318324            ! 
    319325            ! update boundary value: 
    320             zrx = zdt * zdx / ( zex * znor2 ) 
    321             zrx = min(zrx,2.0_wp) 
     326            zrx = zdt * zdx / ( zex1 * znor2 ) 
     327!!$            zrx = min(zrx,2.0_wp) 
    322328            zout = sign( 1., zrx ) 
    323329            zout = 0.5*( zout + abs(zout) ) 
Note: See TracChangeset for help on using the changeset viewer.