Changeset 3994


Ignore:
Timestamp:
2013-07-30T15:20:03+02:00 (7 years ago)
Author:
davestorkey
Message:

Bug fixes: add masking in bdy_orlanski routines and avoid division by
zero error. Also need TARGET attributes in dom_oce.F90.

Location:
branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC
Files:
5 edited

Legend:

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

    r3991 r3994  
    220220      igrd = 2      ! Orlanski bc on u-velocity;  
    221221      !             
    222       CALL bdy_orlanski_2d( idx, igrd, pub2d, pua2d, dta%u2d, ll_npo ) 
     222      CALL bdy_orlanski_2d( idx, igrd, pub2d, pua2d, dta%u2d, umask(:,:,1), ll_npo ) 
    223223 
    224224      igrd = 3      ! Orlanski bc on v-velocity 
    225225      !   
    226       CALL bdy_orlanski_2d( idx, igrd, pvb2d, pva2d, dta%v2d, ll_npo ) 
     226      CALL bdy_orlanski_2d( idx, igrd, pvb2d, pva2d, dta%v2d, vmask(:,:,1), ll_npo ) 
    227227      ! 
    228228      IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_orlanski') 
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90

    r3991 r3994  
    239239      igrd = 2      ! Orlanski bc on u-velocity;  
    240240      !             
    241       CALL bdy_orlanski_3d( idx, igrd, ub, ua, dta%u3d, ll_npo ) 
     241      CALL bdy_orlanski_3d( idx, igrd, ub, ua, dta%u3d, umask, ll_npo ) 
    242242 
    243243      igrd = 3      ! Orlanski bc on v-velocity 
    244244      !   
    245       CALL bdy_orlanski_3d( idx, igrd, vb, va, dta%v3d, ll_npo ) 
     245      CALL bdy_orlanski_3d( idx, igrd, vb, va, dta%v3d, vmask, ll_npo ) 
    246246      ! 
    247247      CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy )    ! Boundary points should be updated 
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdylib.F90

    r3991 r3994  
    3434CONTAINS 
    3535 
    36    SUBROUTINE bdy_orlanski_2d( idx, igrd, phib, phia, phi_ext, ll_npo ) 
     36   SUBROUTINE bdy_orlanski_2d( idx, igrd, phib, phia, phi_ext, mask, ll_npo ) 
    3737      !!---------------------------------------------------------------------- 
    3838      !!                 ***  SUBROUTINE bdy_orlanski_2d  *** 
     
    5050      REAL(wp), DIMENSION(:,:),   INTENT(inout)  ::   phia     ! model after 2D field (to be updated) 
    5151      REAL(wp), DIMENSION(:),     INTENT(in)     ::   phi_ext  ! external forcing data 
     52      REAL(wp), DIMENSION(:,:),   INTENT(in)     ::   mask     ! land/sea mask 
    5253      LOGICAL,                    INTENT(in)     ::   ll_npo   ! switch for NPO version 
    5354 
     
    9596       &        + (1. - zsign_ups) * ( phib(iibm1jp1,ijbm1jp1) - phib(iibm1   ,ijbm1   ) ) 
    9697         znor2 = zdx * zdx + zdy * zdy 
     98         znor2 = max(znor2,rsmall) 
    9799         zcx = zdt * zdx / znor2 
    98100         zcy = zdt * zdy / znor2 
     
    115117         end if 
    116118         phia(ii,ij) = phia(ii,ij) + zwgt * ( phi_ext(jb) - phia(ii,ij) )  
     119         phia(ii,ij) = phia(ii,ij) * mask(ii,ij) 
    117120      END DO 
    118121      ! 
     
    122125 
    123126 
    124    SUBROUTINE bdy_orlanski_3d( idx, igrd, phib, phia, phi_ext, ll_npo ) 
     127   SUBROUTINE bdy_orlanski_3d( idx, igrd, phib, phia, phi_ext, mask, ll_npo ) 
    125128      !!---------------------------------------------------------------------- 
    126129      !!                 ***  SUBROUTINE bdy_orlanski_3d  *** 
     
    138141      REAL(wp), DIMENSION(:,:,:), INTENT(inout)  ::   phia     ! model after 3D field (to be updated) 
    139142      REAL(wp), DIMENSION(:,:),   INTENT(in)     ::   phi_ext  ! external forcing data 
     143      REAL(wp), DIMENSION(:,:,:), INTENT(in)     ::   mask     ! land/sea mask 
    140144      LOGICAL,                    INTENT(in)     ::   ll_npo   ! switch for NPO version 
    141145 
     
    184188           &    + (1. - zsign_ups) * ( phib(iibm1jp1,ijbm1jp1,jk) - phib(iibm1   ,ijbm1   ,jk) ) 
    185189            znor2 = zdx * zdx + zdy * zdy 
     190            znor2 = max(znor2,rsmall) 
    186191            zcx = zdt * zdx / znor2 
    187192            zcy = zdt * zdy / znor2 
     
    204209            end if 
    205210            phia(ii,ij,jk) = phia(ii,ij,jk) + zwgt * ( phi_ext(jb,jk) - phia(ii,ij,jk) )  
     211            phia(ii,ij,jk) = phia(ii,ij,jk) * mask(ii,ij,jk) 
    206212         END DO 
    207213         ! 
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90

    r3991 r3994  
    224224      igrd = 1      ! Orlanski bc on temperature;  
    225225      !             
    226       CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_tem), tsa(:,:,:,jp_tem), dta%tem, ll_npo ) 
     226      CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_tem), tsa(:,:,:,jp_tem), dta%tem, tmask, ll_npo ) 
    227227 
    228228      igrd = 1      ! Orlanski bc on salinity; 
    229229      !   
    230       CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_sal), tsa(:,:,:,jp_sal), dta%sal, ll_npo ) 
     230      CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_sal), tsa(:,:,:,jp_sal), dta%sal, tmask, ll_npo ) 
    231231      ! 
    232232      IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_orlanski') 
  • branches/2013/dev_r3987_METO1_MERCATOR6_OBC_BDY_merge/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90

    r3851 r3994  
    193193   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   bmask        !: land/ocean mask of barotropic stream function 
    194194 
    195    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tmask, umask, vmask, fmask   !: land/ocean mask at T-, U-, V- and F-pts 
     195   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, fmask   !: land/ocean mask at T-, U-, V- and F-pts 
    196196 
    197197   REAL(wp), PUBLIC, DIMENSION(jpiglo) ::   tpol, fpol          !: north fold mask (jperio= 3 or 4) 
Note: See TracChangeset for help on using the changeset viewer.