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

Changeset 4033


Ignore:
Timestamp:
2013-09-24T12:25:20+02:00 (11 years ago)
Author:
davestorkey
Message:

Bug fixes for Orlanski routines:

  1. Correct formulation of relaxation term.
  2. Add spatial scale factors to calculation of radiation term.
Location:
branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

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

    r4008 r4033  
    5858      INTEGER  ::   ii_offset, ij_offset                   ! offsets for mask indices 
    5959      INTEGER  ::   flagu, flagv                           ! short cuts 
    60       REAL(wp) ::   zdt, zdx, zdy, znor2, zcx, zcy         ! intermediate calculations 
     60      REAL(wp) ::   zmask_x, zmask_y1, zmask_y2 
     61      REAL(wp) ::   zex, zey, zey1, zey2 
     62      REAL(wp) ::   zdt, zdx, zdy, znor2, zrx, zry         ! intermediate calculations 
    6163      REAL(wp) ::   zout, zwgt, zdy_centred 
    62       REAL(wp) ::   zdy_left, zdy_right, zsign_ups 
     64      REAL(wp) ::   zdy_1, zdy_2, zsign_ups 
     65      REAL(wp), PARAMETER :: zepsilon = 1.e-30                 ! local small value 
    6366      REAL(wp), POINTER, DIMENSION(:,:)          :: pmask      ! land/sea mask for field 
    64       REAL(wp), POINTER, DIMENSION(:,:)          :: pmask_xdiv ! land/sea mask for x-derivatives 
    65       REAL(wp), POINTER, DIMENSION(:,:)          :: pmask_ydiv ! land/sea mask for y-derivatives 
     67      REAL(wp), POINTER, DIMENSION(:,:)          :: pmask_xdif ! land/sea mask for x-derivatives 
     68      REAL(wp), POINTER, DIMENSION(:,:)          :: pmask_ydif ! land/sea mask for y-derivatives 
     69      REAL(wp), POINTER, DIMENSION(:,:)          :: pe_xdif    ! scale factors for x-derivatives 
     70      REAL(wp), POINTER, DIMENSION(:,:)          :: pe_ydif    ! scale factors for y-derivatives 
    6671      !!---------------------------------------------------------------------- 
    6772 
     
    7580         CASE(1) 
    7681            pmask => tmask(:,:,1) 
    77             pmask_xdiv => umask(:,:,1) 
     82            pmask_xdif => umask(:,:,1) 
     83            pmask_ydif => vmask(:,:,1) 
     84            pe_xdif => e1u(:,:) 
     85            pe_ydif => e2v(:,:) 
    7886            ii_offset = 0 
    79             pmask_ydiv => vmask(:,:,1) 
    8087            ij_offset = 0 
    8188         CASE(2) 
    8289            pmask => umask(:,:,1) 
    83             pmask_xdiv => tmask(:,:,1) 
     90            pmask_xdif => tmask(:,:,1) 
     91            pmask_ydif => fmask(:,:,1) 
     92            pe_xdif => e1t(:,:) 
     93            pe_ydif => e2f(:,:) 
    8494            ii_offset = 1 
    85             pmask_ydiv => fmask(:,:,1) 
    8695            ij_offset = 0 
    8796         CASE(3) 
    8897            pmask => vmask(:,:,1) 
    89             pmask_xdiv => fmask(:,:,1) 
     98            pmask_xdif => fmask(:,:,1) 
     99            pmask_ydif => tmask(:,:,1) 
     100            pe_xdif => e1f(:,:) 
     101            pe_ydif => e2t(:,:) 
    90102            ii_offset = 0 
    91             pmask_ydiv => tmask(:,:,1) 
    92103            ij_offset = 1 
    93104         CASE DEFAULT ;   CALL ctl_stop( 'unrecognised value for igrd in bdy_orlanksi_2d' ) 
     
    100111         flagv = int( idx%flagv(jb,igrd) ) 
    101112         ! 
    102          ! calculate positions of b-1 and b-2 points for this rim point 
     113         ! Calculate positions of b-1 and b-2 points for this rim point 
    103114         ! also (b-1,j-1) and (b-1,j+1) points 
    104115         iibm1 = ii + flagu ; iibm2 = ii + 2*flagu  
    105116         ijbm1 = ij + flagv ; ijbm2 = ij + 2*flagv 
    106          ! 
     117          ! 
    107118         iijm1 = ii - abs(flagv) ; iijp1 = ii + abs(flagv)  
    108119         ijjm1 = ij - abs(flagu) ; ijjp1 = ij + abs(flagu) 
     
    111122         ijbm1jm1 = ij + flagv - abs(flagu) ; ijbm1jp1 = ij + flagv + abs(flagu)  
    112123         ! 
    113          ! Calculate normal (zcx) and tangential (zcy) components of radiation velocities. 
     124         ! 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) )  
     127         zey1 = ( (iibm1-iibm1jm1) * pe_xdif(iibm1jm1+ii_offset,ijbm1jm1          )  &  
     128        &      +  (ijbm1-ijbm1jm1) * pe_ydif(iibm1jm1          ,ijbm1jm1+ij_offset) )  
     129         zey2 = ( (iibm1jp1-iibm1) * pe_xdif(iibm1+ii_offset,ijbm1)                  & 
     130        &      +  (ijbm1jp1-ijbm1) * pe_ydif(iibm1          ,ijbm1+ij_offset) )  
     131         ! make sure scale factors are nonzero 
     132         if( zey1 .lt. rsmall ) zey1 = zey2 
     133         if( zey2 .lt. rsmall ) zey2 = zey1 
     134         zex = max(zex,rsmall); zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
     135         ! 
     136         ! Calculate masks for calculation of spatial derivatives.         
     137         zmask_x = ( abs(iibm1-iibm2) * pmask_xdif(iibm2+ii_offset,ijbm2          )         & 
     138        &          + abs(ijbm1-ijbm2) * pmask_ydif(iibm2          ,ijbm2+ij_offset) )  
     139         zmask_y1 = ( (iibm1-iibm1jm1) * pmask_xdif(iibm1jm1+ii_offset,ijbm1jm1          )  &  
     140        &          +  (ijbm1-ijbm1jm1) * pmask_ydif(iibm1jm1          ,ijbm1jm1+ij_offset) )  
     141         zmask_y2 = ( (iibm1jp1-iibm1) * pmask_xdif(iibm1+ii_offset,ijbm1)                  & 
     142        &          +  (ijbm1jp1-ijbm1) * pmask_ydif(iibm1          ,ijbm1+ij_offset) )  
     143 
     144         ! Calculation of terms required for both versions of the scheme.  
    114145         ! Mask derivatives to ensure correct land boundary conditions for each variable. 
    115146         ! Centred derivative is calculated as average of "left" and "right" derivatives for  
    116147         ! this reason.  
     148         ! Note no rdt factor in expression for zdt because it cancels in the expressions for  
     149         ! zrx and zry. 
    117150         zdt = phia(iibm1,ijbm1) - phib(iibm1,ijbm1) 
    118          zdx = ( phia(iibm1,ijbm1) - phia(iibm2,ijbm2) )                          & 
    119         &    * ( abs(iibm1-iibm2) * pmask_xdiv(iibm2+ii_offset,ijbm2          )   & 
    120         &      + abs(ijbm1-ijbm2) * pmask_ydiv(iibm2          ,ijbm2+ij_offset) )  
    121          zdy_left  = phib(iibm1   ,ijbm1   ) - phib(iibm1jm1,ijbm1jm1)                  & 
    122         &    * ( (iibm1-iibm1jm1) * pmask_xdiv(iibm1jm1+ii_offset,ijbm1jm1          )   &  
    123         &      + (ijbm1-ijbm1jm1) * pmask_ydiv(iibm1jm1          ,ijbm1jm1+ij_offset) )  
    124          zdy_right = phib(iibm1jp1,ijbm1jp1) - phib(iibm1   ,ijbm1)                     & 
    125         &    * ( (iibm1jp1-iibm1) * pmask_xdiv(iibm1+ii_offset,ijbm1)                   & 
    126         &      + (ijbm1jp1-ijbm1) * pmask_ydiv(iibm1          ,ijbm1+ij_offset) )  
    127          zdy_centred = 0.5 * ( zdy_left + zdy_right ) 
     151         zdx = ( ( phia(iibm1,ijbm1) - phia(iibm2,ijbm2) ) / zex ) * zmask_x  
     152         zdy_1 = ( ( phib(iibm1   ,ijbm1   ) - phib(iibm1jm1,ijbm1jm1) ) / zey1 ) * zmask_y1     
     153         zdy_2 = ( ( phib(iibm1jp1,ijbm1jp1) - phib(iibm1   ,ijbm1)    ) / zey2 ) * zmask_y2  
     154         zdy_centred = 0.5 * ( zdy_1 + zdy_2 ) 
    128155!!$         zdy_centred = phib(iibm1jp1,ijbm1jp1) - phib(iibm1jm1,ijbm1jm1) 
    129156         ! upstream differencing for tangential derivatives 
    130157         zsign_ups = sign( 1., zdt * zdy_centred ) 
    131158         zsign_ups = 0.5*( zsign_ups + abs(zsign_ups) ) 
    132          zdy = zsign_ups * zdy_left + (1. - zsign_ups) * zdy_right 
     159         zdy = zsign_ups * zdy_1 + (1. - zsign_ups) * zdy_2 
    133160         znor2 = zdx * zdx + zdy * zdy 
    134          znor2 = max(znor2,rsmall) 
    135          zcx = zdt * zdx / znor2 
    136          zcy = zdt * zdy / znor2 
    137          ! 
    138          ! update boundary value: 
    139          zout = sign( 1., zcx ) 
     161         znor2 = max(znor2,zepsilon) 
     162         ! 
     163         zrx = zdt * zdx / ( zex * znor2 )  
     164         zrx = min(zrx,2.0_wp) 
     165         zout = sign( 1., zrx ) 
    140166         zout = 0.5*( zout + abs(zout) ) 
    141          zwgt = (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) 
     167         zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
    142168         ! only apply radiation on outflow points  
    143169         if( ll_npo ) then     !! NPO version !! 
    144             phia(ii,ij) = (1.-zout) * phib(ii,ij)                                                   & 
    145            &            + zout      * ( phib(ii,ij) + zcx*phia(iibm1,ijbm1) ) / ( 1. + zcx )  
     170            phia(ii,ij) = (1.-zout) * ( phib(ii,ij) + zwgt * ( phi_ext(jb) - phib(ii,ij) ) )        & 
     171           &            + zout      * ( phib(ii,ij) + zrx*phia(iibm1,ijbm1)                         & 
     172           &                            + zwgt * ( phi_ext(jb) - phib(ii,ij) ) ) / ( 1. + zrx )  
    146173         else                  !! full oblique radiation !! 
    147             zsign_ups = sign( 1., zcy ) 
     174            zsign_ups = sign( 1., zdt * zdy ) 
    148175            zsign_ups = 0.5*( zsign_ups + abs(zsign_ups) ) 
    149             phia(ii,ij) = (1.-zout) * phib(ii,ij)                                                   & 
    150            &            + zout      * ( phib(ii,ij) + zcx*phia(iibm1,ijbm1)                         & 
    151            &                    - zsign_ups      * zcy * ( phib(ii   ,ij   ) - phib(iijm1,ijjm1 ) ) & 
    152            &                    - (1.-zsign_ups) * zcy * ( phib(iijp1,ijjp1) - phib(ii   ,ij    ) ) ) / ( 1. + zcx )  
     176            zey = zsign_ups * zey1 + (1.-zsign_ups) * zey2  
     177            zry = zdt * zdy / ( zey * znor2 )  
     178            phia(ii,ij) = (1.-zout) * ( phib(ii,ij) + zwgt * ( phi_ext(jb) - phib(ii,ij) ) )        & 
     179           &            + zout      * ( phib(ii,ij) + zrx*phia(iibm1,ijbm1)                         & 
     180           &                    - zsign_ups      * zry * ( phib(ii   ,ij   ) - phib(iijm1,ijjm1 ) ) & 
     181           &                    - (1.-zsign_ups) * zry * ( phib(iijp1,ijjp1) - phib(ii   ,ij    ) ) & 
     182           &                    + zwgt * ( phi_ext(jb) - phib(ii,ij) ) ) / ( 1. + zrx )  
    153183         end if 
    154          phia(ii,ij) = phia(ii,ij) + zwgt * ( phi_ext(jb) - phib(ii,ij) )  
    155184         phia(ii,ij) = phia(ii,ij) * pmask(ii,ij) 
    156185      END DO 
     
    185214      INTEGER  ::   ii_offset, ij_offset                   ! offsets for mask indices 
    186215      INTEGER  ::   flagu, flagv                           ! short cuts 
    187       REAL(wp) ::   zdt, zdx, zdy, znor2, zcx, zcy         ! intermediate calculations 
     216      REAL(wp) ::   zmask_x, zmask_y1, zmask_y2 
     217      REAL(wp) ::   zex, zey, zey1, zey2 
     218      REAL(wp) ::   zdt, zdx, zdy, znor2, zrx, zry         ! intermediate calculations 
    188219      REAL(wp) ::   zout, zwgt, zdy_centred 
    189       REAL(wp) ::   zdy_left, zdy_right,  zsign_ups 
     220      REAL(wp) ::   zdy_1, zdy_2,  zsign_ups 
     221      REAL(wp), PARAMETER :: zepsilon = 1.e-30                 ! local small value 
    190222      REAL(wp), POINTER, DIMENSION(:,:,:)        :: pmask      ! land/sea mask for field 
    191       REAL(wp), POINTER, DIMENSION(:,:,:)        :: pmask_xdiv ! land/sea mask for x-derivatives 
    192       REAL(wp), POINTER, DIMENSION(:,:,:)        :: pmask_ydiv ! land/sea mask for y-derivatives 
     223      REAL(wp), POINTER, DIMENSION(:,:,:)        :: pmask_xdif ! land/sea mask for x-derivatives 
     224      REAL(wp), POINTER, DIMENSION(:,:,:)        :: pmask_ydif ! land/sea mask for y-derivatives 
     225      REAL(wp), POINTER, DIMENSION(:,:)          :: pe_xdif    ! scale factors for x-derivatives 
     226      REAL(wp), POINTER, DIMENSION(:,:)          :: pe_ydif    ! scale factors for y-derivatives 
    193227      !!---------------------------------------------------------------------- 
    194228 
     
    202236         CASE(1) 
    203237            pmask => tmask(:,:,:) 
    204             pmask_xdiv => umask(:,:,:) 
     238            pmask_xdif => umask(:,:,:) 
     239            pmask_ydif => vmask(:,:,:) 
     240            pe_xdif => e1u(:,:) 
     241            pe_ydif => e2v(:,:) 
    205242            ii_offset = 0 
    206             pmask_ydiv => vmask(:,:,:) 
    207243            ij_offset = 0 
    208244         CASE(2) 
    209245            pmask => umask(:,:,:) 
    210             pmask_xdiv => tmask(:,:,:) 
     246            pmask_xdif => tmask(:,:,:) 
     247            pmask_ydif => fmask(:,:,:) 
     248            pe_xdif => e1t(:,:) 
     249            pe_ydif => e2f(:,:) 
    211250            ii_offset = 1 
    212             pmask_ydiv => fmask(:,:,:) 
    213251            ij_offset = 0 
    214252         CASE(3) 
    215253            pmask => vmask(:,:,:) 
    216             pmask_xdiv => fmask(:,:,:) 
     254            pmask_xdif => fmask(:,:,:) 
     255            pmask_ydif => tmask(:,:,:) 
     256            pe_xdif => e1f(:,:) 
     257            pe_ydif => e2t(:,:) 
    217258            ii_offset = 0 
    218             pmask_ydiv => tmask(:,:,:) 
    219259            ij_offset = 1 
    220260         CASE DEFAULT ;   CALL ctl_stop( 'unrecognised value for igrd in bdy_orlanksi_2d' ) 
     
    240280            ijbm1jm1 = ij + flagv - abs(flagu) ; ijbm1jp1 = ij + flagv + abs(flagu)  
    241281            ! 
    242             ! Calculate normal (zcx) and tangential (zcy) components of radiation velocities. 
     282            ! 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) )  
     285            zey1 = ( (iibm1-iibm1jm1) * pe_xdif(iibm1jm1+ii_offset,ijbm1jm1          )  &  
     286           &      +  (ijbm1-ijbm1jm1) * pe_ydif(iibm1jm1          ,ijbm1jm1+ij_offset) )  
     287            zey2 = ( (iibm1jp1-iibm1) * pe_xdif(iibm1+ii_offset,ijbm1)                  & 
     288           &      +  (ijbm1jp1-ijbm1) * pe_ydif(iibm1          ,ijbm1+ij_offset) )  
     289            ! make sure scale factors are nonzero 
     290            if( zey1 .lt. rsmall ) zey1 = zey2 
     291            if( zey2 .lt. rsmall ) zey2 = zey1 
     292            zex = max(zex,rsmall); zey1 = max(zey1,rsmall); zey2 = max(zey2,rsmall);  
     293            ! 
     294            ! Calculate masks for calculation of spatial derivatives.         
     295            zmask_x = ( abs(iibm1-iibm2) * pmask_xdif(iibm2+ii_offset,ijbm2          ,jk)          & 
     296           &          + abs(ijbm1-ijbm2) * pmask_ydif(iibm2          ,ijbm2+ij_offset,jk) )  
     297            zmask_y1 = ( (iibm1-iibm1jm1) * pmask_xdif(iibm1jm1+ii_offset,ijbm1jm1          ,jk)   &  
     298           &          +  (ijbm1-ijbm1jm1) * pmask_ydif(iibm1jm1          ,ijbm1jm1+ij_offset,jk) )  
     299            zmask_y2 = ( (iibm1jp1-iibm1) * pmask_xdif(iibm1+ii_offset,ijbm1          ,jk)         & 
     300           &          +  (ijbm1jp1-ijbm1) * pmask_ydif(iibm1          ,ijbm1+ij_offset,jk) )  
     301            ! 
     302            ! Calculate normal (zrx) and tangential (zry) components of radiation velocities. 
    243303            ! Mask derivatives to ensure correct land boundary conditions for each variable. 
    244304            ! Centred derivative is calculated as average of "left" and "right" derivatives for  
    245305            ! this reason.  
    246306            zdt = phia(iibm1,ijbm1,jk) - phib(iibm1,ijbm1,jk) 
    247             zdx = phia(iibm1,ijbm1,jk) - phia(iibm2,ijbm2,jk)                     & 
    248         &    * ( (iibm1-iibm2) * pmask_xdiv(iibm2+ii_offset,ijbm2          ,jk)   & 
    249         &      + (ijbm1-ijbm2) * pmask_ydiv(iibm2          ,ijbm2+ij_offset,jk) )  
    250             zdy_left  = phib(iibm1   ,ijbm1   ,jk) - phib(iibm1jm1,ijbm1jm1,jk)            & 
    251         &    * ( (iibm1-iibm1jm1) * pmask_xdiv(iibm1jm1+ii_offset,ijbm1jm1          ,jk)   &  
    252         &      + (ijbm1-ijbm1jm1) * pmask_ydiv(iibm1jm1          ,ijbm1jm1+ij_offset,jk) )  
    253             zdy_right = phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1   ,ijbm1   ,jk)      & 
    254         &    * ( (iibm1jp1-iibm1) * pmask_xdiv(iibm1+ii_offset,ijbm1          ,jk)   & 
    255         &      + (ijbm1jp1-ijbm1) * pmask_ydiv(iibm1          ,ijbm1+ij_offset,jk) )  
    256             zdy_centred = 0.5 * ( zdy_left + zdy_right ) 
    257             zdy_centred = phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1jm1,ijbm1jm1,jk) 
     307            zdx = ( ( phia(iibm1,ijbm1,jk) - phia(iibm2,ijbm2,jk) ) / zex ) * zmask_x                   
     308            zdy_1 = ( ( phib(iibm1   ,ijbm1   ,jk) - phib(iibm1jm1,ijbm1jm1,jk) ) / zey1 ) * zmask_y1   
     309            zdy_2 = ( ( phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1   ,ijbm1   ,jk) ) / zey2 ) * zmask_y2       
     310            zdy_centred = 0.5 * ( zdy_1 + zdy_2 ) 
     311!!$            zdy_centred = phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1jm1,ijbm1jm1,jk) 
    258312            ! upstream differencing for tangential derivatives 
    259313            zsign_ups = sign( 1., zdt * zdy_centred ) 
    260314            zsign_ups = 0.5*( zsign_ups + abs(zsign_ups) ) 
    261             zdy = zsign_ups * zdy_left + (1. - zsign_ups) * zdy_right 
     315            zdy = zsign_ups * zdy_1 + (1. - zsign_ups) * zdy_2 
    262316            znor2 = zdx * zdx + zdy * zdy 
    263             znor2 = max(znor2,rsmall) 
    264             zcx = zdt * zdx / znor2 
    265             zcy = zdt * zdy / znor2 
     317            znor2 = max(znor2,zepsilon) 
    266318            ! 
    267319            ! update boundary value: 
    268             zout = sign( 1., zcx ) 
     320            zrx = zdt * zdx / ( zex * znor2 ) 
     321            zrx = min(zrx,2.0_wp) 
     322            zout = sign( 1., zrx ) 
    269323            zout = 0.5*( zout + abs(zout) ) 
    270             zwgt = (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) 
     324            zwgt = 2.*rdt*( (1.-zout) * idx%nbd(jb,igrd) + zout * idx%nbdout(jb,igrd) ) 
    271325            ! only apply radiation on outflow points  
    272326            if( ll_npo ) then     !! NPO version !! 
    273                phia(ii,ij,jk) = (1.-zout) * phib(ii,ij,jk)                                                   & 
    274               &               + zout      * ( phib(ii,ij,jk) + zcx*phia(iibm1,ijbm1,jk) ) / ( 1. + zcx )  
     327               phia(ii,ij,jk) = (1.-zout) * ( phib(ii,ij,jk) + zwgt * ( phi_ext(jb,jk) - phib(ii,ij,jk) ) ) & 
     328              &               + zout      * ( phib(ii,ij,jk) + zrx*phia(iibm1,ijbm1,jk)                     & 
     329              &                            + zwgt * ( phi_ext(jb,jk) - phib(ii,ij,jk) ) ) / ( 1. + zrx )  
    275330            else                  !! full oblique radiation !! 
    276                zsign_ups = sign( 1., zcy ) 
     331               zsign_ups = sign( 1., zdt * zdy ) 
    277332               zsign_ups = 0.5*( zsign_ups + abs(zsign_ups) ) 
    278                phia(ii,ij,jk) = (1.-zout) * phib(ii,ij,jk)                                                   & 
    279               &               + zout      * ( phib(ii,ij,jk) + zcx*phia(iibm1,ijbm1,jk)                      & 
    280               &                    - zsign_ups      * zcy * ( phib(ii   ,ij   ,jk) - phib(iijm1,ijjm1,jk ) ) & 
    281               &                    - (1.-zsign_ups) * zcy * ( phib(iijp1,ijjp1,jk) - phib(ii   ,ij   ,jk ) ) ) / ( 1. + zcx )  
     333               zey = zsign_ups * zey1 + (1.-zsign_ups) * zey2  
     334               zry = zdt * zdy / ( zey * znor2 )  
     335               phia(ii,ij,jk) = (1.-zout) * ( phib(ii,ij,jk) + zwgt * ( phi_ext(jb,jk) - phib(ii,ij,jk) ) )    & 
     336              &               + zout      * ( phib(ii,ij,jk) + zrx*phia(iibm1,ijbm1,jk)                        & 
     337              &                       - zsign_ups      * zry * ( phib(ii   ,ij   ,jk) - phib(iijm1,ijjm1,jk) ) & 
     338              &                       - (1.-zsign_ups) * zry * ( phib(iijp1,ijjp1,jk) - phib(ii   ,ij   ,jk) ) & 
     339              &                       + zwgt * ( phi_ext(jb,jk) - phib(ii,ij,jk) ) ) / ( 1. + zrx )  
    282340            end if 
    283 !!$            phia(ii,ij,jk) = phia(ii,ij,jk) + zwgt * ( phi_ext(jb,jk) - phib(ii,ij,jk) )  
    284341            phia(ii,ij,jk) = phia(ii,ij,jk) * pmask(ii,ij,jk) 
    285342         END DO 
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90

    r3994 r4033  
    117117   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  gphit, gphiu   !: latitude  of t-, u-, v- and f-points (degre) 
    118118   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  gphiv, gphif   !: 
    119    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  e1t, e2t       !: horizontal scale factors at t-point (m) 
    120    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  e1u, e2u       !: horizontal scale factors at u-point (m) 
    121    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  e1v, e2v       !: horizontal scale factors at v-point (m) 
    122    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  e1f, e2f       !: horizontal scale factors at f-point (m) 
     119   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::  e1t, e2t       !: horizontal scale factors at t-point (m) 
     120   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::  e1u, e2u       !: horizontal scale factors at u-point (m) 
     121   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::  e1v, e2v       !: horizontal scale factors at v-point (m) 
     122   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) ::  e1f, e2f       !: horizontal scale factors at f-point (m) 
    123123   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  e1e2t          !: surface at t-point (m2) 
    124124   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ff             !: coriolis factor (2.*omega*sin(yphi) ) (s-1) 
Note: See TracChangeset for help on using the changeset viewer.