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 2797 for branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obc_oce.F90 – NEMO

Ignore:
Timestamp:
2011-07-11T12:53:56+02:00 (13 years ago)
Author:
davestorkey
Message:

Delete BDY module and first implementation of new OBC module.

  1. Initial restructuring.
  2. Use fldread to read open boundary data.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obc_oce.F90

    r2715 r2797  
    11MODULE obc_oce 
    2    !!============================================================================== 
     2   !!====================================================================== 
    33   !!                       ***  MODULE obc_oce   *** 
    4    !! Open Boundary Cond. :   define related variables 
    5    !!============================================================================== 
    6    !! history :  OPA  ! 1991-01 (CLIPPER)  Original code  
    7    !!   NEMO     1.0  ! 2002-02 (C. Talandier)  modules, F90 
     4   !! Unstructured Open Boundary Cond. :   define related variables 
     5   !!====================================================================== 
     6   !! History :  1.0  !  2001-05  (J. Chanut, A. Sellar)  Original code 
     7   !!            3.0  !  2008-04  (NEMO team)  add in the reference version      
     8   !!            3.3  !  2010-09  (D. Storkey) add ice boundary conditions 
     9   !!            3.4  !  2011     (D. Storkey, J. Chanut) OBC-BDY merge 
    810   !!---------------------------------------------------------------------- 
    9 #if defined key_obc 
     11#if defined key_obc  
    1012   !!---------------------------------------------------------------------- 
    11    !!   'key_obc' :                                Open Boundary Condition 
     13   !!   'key_obc'                      Unstructured Open Boundary Condition 
    1214   !!---------------------------------------------------------------------- 
    1315   USE par_oce         ! ocean parameters 
    14    USE obc_par         ! open boundary condition parameters 
     16   USE obc_par         ! Unstructured boundary parameters 
     17   USE lib_mpp         ! distributed memory computing 
    1518 
    1619   IMPLICIT NONE 
    1720   PUBLIC 
    18     
    19    PUBLIC   obc_oce_alloc   ! called by obcini.F90 module 
     21 
     22   TYPE, PUBLIC ::   OBC_INDEX    !: Indices and weights which define the open boundary 
     23      INTEGER,          DIMENSION(jpbgrd) ::  nblen 
     24      INTEGER,          DIMENSION(jpbgrd) ::  nblenrim 
     25      INTEGER, POINTER, DIMENSION(:,:)   ::  nbi 
     26      INTEGER, POINTER, DIMENSION(:,:)   ::  nbj 
     27      INTEGER, POINTER, DIMENSION(:,:)   ::  nbr 
     28      INTEGER, POINTER, DIMENSION(:,:)   ::  nbmap 
     29      REAL   , POINTER, DIMENSION(:,:)   ::  nbw 
     30      REAL   , POINTER, DIMENSION(:)     ::  flagu 
     31      REAL   , POINTER, DIMENSION(:)     ::  flagv 
     32   END TYPE OBC_INDEX 
     33 
     34   TYPE, PUBLIC ::   OBC_DATA     !: Storage for external data 
     35      REAL, POINTER, DIMENSION(:)     ::  ssh 
     36      REAL, POINTER, DIMENSION(:)     ::  u2d 
     37      REAL, POINTER, DIMENSION(:)     ::  v2d 
     38      REAL, POINTER, DIMENSION(:,:)   ::  u3d 
     39      REAL, POINTER, DIMENSION(:,:)   ::  v3d 
     40      REAL, POINTER, DIMENSION(:,:)   ::  tem 
     41      REAL, POINTER, DIMENSION(:,:)   ::  sal 
     42#if defined key_lim2 
     43      REAL, POINTER, DIMENSION(:)     ::  frld 
     44      REAL, POINTER, DIMENSION(:)     ::  hicif 
     45      REAL, POINTER, DIMENSION(:)     ::  hsnif 
     46#endif 
     47   END TYPE OBC_DATA 
    2048 
    2149   !!---------------------------------------------------------------------- 
    22    !! open boundary variables 
     50   !! Namelist variables 
    2351   !!---------------------------------------------------------------------- 
     52   CHARACTER(len=80), DIMENSION(jp_obc) ::   cn_coords_file !: Name of obc coordinates file 
     53   CHARACTER(len=80)                    ::   cn_mask_file   !: Name of obc mask file 
    2454   ! 
    25    !                                            !!* Namelist namobc: open boundary condition * 
    26    INTEGER           ::   nn_obcdta   = 0        !:  = 0 use the initial state as obc data 
    27    !                                             !   = 1 read obc data in obcxxx.dta files 
    28    CHARACTER(len=20) ::   cn_obcdta   = 'annual' !: set to annual  if obc datafile hold 1 year of data 
    29    !                                             !  set to monthly if obc datafile hold 1 month of data 
    30    LOGICAL           ::   ln_obc_clim = .true.   !:  obc data files are climatological 
    31    LOGICAL           ::   ln_obc_fla  = .false.  !:  Flather open boundary condition not used 
    32    LOGICAL           ::   ln_vol_cst  = .true.   !:  Conservation of the whole volume 
    33    REAL(wp)          ::   rn_dpein    =  1.      !: damping time scale for inflow at East open boundary 
    34    REAL(wp)          ::   rn_dpwin    =  1.      !:    "                      "   at West open boundary 
    35    REAL(wp)          ::   rn_dpsin    =  1.      !:    "                      "   at South open boundary 
    36    REAL(wp)          ::   rn_dpnin    =  1.      !:    "                      "   at North open boundary 
    37    REAL(wp)          ::   rn_dpeob    = 15.      !: damping time scale for the climatology at East open boundary 
    38    REAL(wp)          ::   rn_dpwob    = 15.      !:    "                           "       at West open boundary 
    39    REAL(wp)          ::   rn_dpsob    = 15.      !:    "                           "       at South open boundary 
    40    REAL(wp)          ::   rn_dpnob    = 15.      !:    "                           "       at North open boundary 
    41    REAL(wp)          ::   rn_volemp   =  1.      !: = 0 the total volume will have the variability of the  
    42    !                                             !      surface Flux E-P else (volemp = 1) the volume will be constant 
    43    !                                             !  = 1 the volume will be constant during all the integration. 
     55   LOGICAL, DIMENSION(jp_obc) ::   ln_coords_file           !: =T read obc coordinates from file;  
     56   !                                                        !: =F read obc coordinates from namelist 
     57   LOGICAL                    ::   ln_mask_file             !: =T read obcmask from file 
     58   LOGICAL, DIMENSION(jp_obc) ::   ln_tides                 !: =T apply tidal harmonic forcing along open boundaries 
     59   LOGICAL                    ::   ln_vol                   !: =T volume correction              
     60   LOGICAL, DIMENSION(jp_obc) ::   ln_clim                  !: =T obc data files contain climatological data (time-cyclic) 
     61   ! 
     62   INTEGER                    ::   nb_obc                   !: number of open boundary sets 
     63   INTEGER, DIMENSION(jp_obc) ::   nn_rimwidth              !: boundary rim width 
     64   INTEGER, DIMENSION(jp_obc) ::   nn_dtactl           !: = 0 use the initial state as obc dta ;  
     65                                                            !: = 1 read it in a NetCDF file 
     66   INTEGER                    ::   nn_volctl                !: = 0 the total volume will have the variability of the surface Flux E-P  
     67   !                                                        !  = 1 the volume will be constant during all the integration. 
     68   INTEGER, DIMENSION(jp_obc) ::   nn_dyn2d                 ! Choice of boundary condition for barotropic variables (U,V,SSH) 
     69   INTEGER, DIMENSION(jp_obc) ::   nn_dyn3d                 ! Choice of boundary condition for baroclinic velocities  
     70   INTEGER, DIMENSION(jp_obc) ::   nn_tra                   ! Choice of boundary condition for active tracers (T and S) 
     71#if defined key_lim2 
     72   INTEGER, DIMENSION(jp_obc) ::   nn_ice_lim2              ! Choice of boundary condition for sea ice variables  
     73#endif 
     74   ! 
     75   INTEGER, DIMENSION(jp_obc) ::   nn_dmp2d_in              ! Damping timescale (days) for 2D solution for inward radiation or FRS  
     76   INTEGER, DIMENSION(jp_obc) ::   nn_dmp2d_out             ! Damping timescale (days) for 2D solution for outward radiation  
     77   INTEGER, DIMENSION(jp_obc) ::   nn_dmp3d_in              ! Damping timescale (days) for 3D solution for inward radiation or FRS  
     78   INTEGER, DIMENSION(jp_obc) ::   nn_dmp3d_out             ! Damping timescale (days) for 3D solution for outward radiation 
    4479 
    45    !                                  !!! OLD non-DOCTOR name of namelist variables 
    46    INTEGER  ::   nbobc                 !: number of open boundaries ( 1=< nbobc =< 4 )  
    47    INTEGER  ::   nobc_dta              !:  = 0 use the initial state as obc data 
    48    REAL(wp) ::   rdpein                !: damping time scale for inflow at East open boundary 
    49    REAL(wp) ::   rdpwin                !:    "                      "   at West open boundary 
    50    REAL(wp) ::   rdpsin                !:    "                      "   at South open boundary 
    51    REAL(wp) ::   rdpnin                !:    "                      "   at North open boundary 
    52    REAL(wp) ::   rdpeob                !: damping time scale for the climatology at East open boundary 
    53    REAL(wp) ::   rdpwob                !:    "                           "       at West open boundary 
    54    REAL(wp) ::   rdpsob                !:    "                           "       at South open boundary 
    55    REAL(wp) ::   rdpnob                !:    "                           "       at North open boundary 
    56    REAL(wp) ::   volemp                !: = 0 the total volume will have the variability of the  
    57    CHARACTER(len=20) :: cffile 
     80    
     81   !!---------------------------------------------------------------------- 
     82   !! Global variables 
     83   !!---------------------------------------------------------------------- 
     84   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   obctmask   !: Mask defining computational domain at T-points 
     85   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   obcumask   !: Mask defining computational domain at U-points 
     86   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   obcvmask   !: Mask defining computational domain at V-points 
    5887 
    59  
    60    !!General variables for open boundaries: 
    61    !!-------------------------------------- 
    62    LOGICAL ::   lfbceast, lfbcwest      !: logical flag for a fixed East and West open boundaries        
    63    LOGICAL ::   lfbcnorth, lfbcsouth    !: logical flag for a fixed North and South open boundaries        
    64    !                                    !  These logical flags are set to 'true' if damping time  
    65    !                                    !  scale are set to 0 in the namelist, for both inflow and outflow). 
    66  
    67    REAL(wp), PUBLIC ::   obcsurftot       !: Total lateral surface of open boundaries 
    68     
    69    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: &  !: 
    70       obctmsk,            &  !: mask array identical to tmask, execpt along OBC where it is set to 0 
    71       !                      !  it used to calculate the cumulate flux E-P in the obcvol.F90 routine 
    72       obcumask, obcvmask     !: u-, v- Force filtering mask for the open 
    73       !                      !  boundary condition on grad D 
    74  
    75    !!-------------------- 
    76    !! East open boundary: 
    77    !!-------------------- 
    78    INTEGER ::   nie0  , nie1      !: do loop index in mpp case for jpieob 
    79    INTEGER ::   nie0p1, nie1p1    !: do loop index in mpp case for jpieob+1 
    80    INTEGER ::   nie0m1, nie1m1    !: do loop index in mpp case for jpieob-1 
    81    INTEGER ::   nje0  , nje1      !: do loop index in mpp case for jpjed, jpjef 
    82    INTEGER ::   nje0p1, nje1m1    !: do loop index in mpp case for jpjedp1,jpjefm1 
    83    INTEGER ::   nje1m2, nje0m1    !: do loop index in mpp case for jpjefm1-1,jpjed 
    84  
    85    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   &  !: 
    86       sshfoe,           & !: now climatology of the east boundary sea surface height 
    87       ubtfoe,vbtfoe       !: now climatology of the east boundary barotropic transport 
    88       
    89    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   &  !: 
    90       ufoe, vfoe,       & !: now climatology of the east boundary velocities  
    91       tfoe, sfoe,       & !: now climatology of the east boundary temperature and salinity 
    92       uclie               !: baroclinic componant of the zonal velocity after radiation  
    93       !                   ! in the obcdyn.F90 routine 
    94  
    95    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfoe_b   !: east boundary ssh correction averaged over the barotropic loop 
    96       !                                            !  (if Flather's algoritm applied at open boundary) 
    97  
    98    !!------------------------------- 
    99    !! Arrays for radiative East OBC:  
    100    !!------------------------------- 
    101    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   uebnd, vebnd      !: baroclinic u & v component of the velocity over 3 rows  
    102       !                                                    !  and 3 time step (now, before, and before before) 
    103    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   tebnd, sebnd      !: East boundary temperature and salinity over 2 rows  
    104       !                                                    !  and 2 time step (now and before) 
    105    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   u_cxebnd, v_cxebnd    !: Zonal component of the phase speed ratio computed with  
    106       !                                                    !  radiation of u and v velocity (respectively) at the  
    107       !                                                    !  east open boundary (u_cxebnd = cx rdt ) 
    108    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   uemsk, vemsk, temsk   !: 2D mask for the East OB 
    109  
    110    ! Note that those arrays are optimized for mpp case  
    111    ! (hence the dimension jpj is the size of one processor subdomain) 
    112  
    113    !!-------------------- 
    114    !! West open boundary 
    115    !!-------------------- 
    116    INTEGER ::   niw0  , niw1       !: do loop index in mpp case for jpiwob 
    117    INTEGER ::   niw0p1, niw1p1     !: do loop index in mpp case for jpiwob+1 
    118    INTEGER ::   njw0  , njw1       !: do loop index in mpp case for jpjwd, jpjwf 
    119    INTEGER ::   njw0p1, njw1m1     !: do loop index in mpp case for jpjwdp1,jpjwfm1 
    120    INTEGER ::   njw1m2, njw0m1     !: do loop index in mpp case for jpjwfm2,jpjwd 
    121  
    122    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:) ::   &  !: 
    123       sshfow,           & !: now climatology of the west boundary sea surface height 
    124       ubtfow,vbtfow       !: now climatology of the west boundary barotropic transport 
    125  
    126    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   &  !: 
    127       ufow, vfow,       & !: now climatology of the west velocities  
    128       tfow, sfow,       & !: now climatology of the west temperature and salinity 
    129       ucliw               !: baroclinic componant of the zonal velocity after the radiation  
    130       !                   !  in the obcdyn.F90 routine 
    131  
    132    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfow_b    !: west boundary ssh correction averaged over the barotropic loop 
    133       !                                          !  (if Flather's algoritm applied at open boundary) 
    134  
    135    !!------------------------------- 
    136    !! Arrays for radiative West OBC 
    137    !!------------------------------- 
    138    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   uwbnd, vwbnd     !: baroclinic u & v components of the velocity over 3 rows  
    139       !                                                   !  and 3 time step (now, before, and before before) 
    140    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   twbnd, swbnd     !: west boundary temperature and salinity over 2 rows and  
    141       !                                                   !  2 time step (now and before) 
    142    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   u_cxwbnd, v_cxwbnd   !: Zonal component of the phase speed ratio computed with  
    143       !                                                   !  radiation of zonal and meridional velocity (respectively)  
    144       !                                                   !  at the west open boundary (u_cxwbnd = cx rdt ) 
    145    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   uwmsk, vwmsk, twmsk  !: 2D mask for the West OB 
    146  
    147    ! Note that those arrays are optimized for mpp case  
    148    ! (hence the dimension jpj is the size of one processor subdomain) 
    149  
    150    !!--------------------- 
    151    !! North open boundary 
    152    !!--------------------- 
    153    INTEGER ::   nin0  , nin1       !: do loop index in mpp case for jpind, jpinf 
    154    INTEGER ::   nin0p1, nin1m1     !: do loop index in mpp case for jpindp1, jpinfm1 
    155    INTEGER ::   nin1m2, nin0m1     !: do loop index in mpp case for jpinfm1-1,jpind 
    156    INTEGER ::   njn0  , njn1       !: do loop index in mpp case for jpnob 
    157    INTEGER ::   njn0p1, njn1p1     !: do loop index in mpp case for jpnob+1 
    158    INTEGER ::   njn0m1, njn1m1     !: do loop index in mpp case for jpnob-1 
    159  
    160    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:) ::   &  !: 
    161       sshfon,           & !: now climatology of the north boundary sea surface height 
    162       ubtfon,vbtfon       !: now climatology of the north boundary barotropic transport 
    163  
    164    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   &    !: 
    165       ufon, vfon,       & !: now climatology of the north boundary velocities 
    166       tfon, sfon,       & !: now climatology of the north boundary temperature and salinity 
    167       vclin               !: baroclinic componant of the meridian velocity after the radiation 
    168       !                   !  in yhe obcdyn.F90 routine 
    169  
    170    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfon_b      !: north boundary ssh correction averaged over the barotropic loop 
    171       !                                            !  (if Flather's algoritm applied at open boundary) 
    172  
    173    !!-------------------------------- 
    174    !! Arrays for radiative North OBC 
    175    !!-------------------------------- 
    176    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   unbnd, vnbnd      !: baroclinic u & v components of the velocity over 3 
    177       !                                                    !  rows and 3 time step (now, before, and before before) 
    178    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   tnbnd, snbnd      !: north boundary temperature and salinity over 
    179       !                                                    !  2 rows and 2 time step (now and before) 
    180    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   u_cynbnd, v_cynbnd    !: Meridional component of the phase speed ratio compu- 
    181       !                                                    !  ted with radiation of zonal and meridional velocity  
    182       !                                                    !  (respectively) at the north OB (u_cynbnd = cx rdt ) 
    183    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   unmsk, vnmsk, tnmsk   !: 2D mask for the North OB 
    184  
    185    ! Note that those arrays are optimized for mpp case  
    186    ! (hence the dimension jpj is the size of one processor subdomain) 
    187     
    188    !!--------------------- 
    189    !! South open boundary 
    190    !!--------------------- 
    191    INTEGER ::   nis0  , nis1       !: do loop index in mpp case for jpisd, jpisf 
    192    INTEGER ::   nis0p1, nis1m1     !: do loop index in mpp case for jpisdp1, jpisfm1 
    193    INTEGER ::   nis1m2, nis0m1     !: do loop index in mpp case for jpisfm1-1,jpisd 
    194    INTEGER ::   njs0  , njs1       !: do loop index in mpp case for jpsob 
    195    INTEGER ::   njs0p1, njs1p1     !: do loop index in mpp case for jpsob+1 
    196  
    197    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:) ::    &   !: 
    198       sshfos,           & !: now climatology of the south boundary sea surface height 
    199       ubtfos,vbtfos       !: now climatology of the south boundary barotropic transport 
    200  
    201    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::    &   !: 
    202       ufos, vfos,       & !: now climatology of the south boundary velocities  
    203       tfos, sfos,       & !: now climatology of the south boundary temperature and salinity 
    204       vclis               !: baroclinic componant of the meridian velocity after the radiation  
    205       !                   !  in the obcdyn.F90 routine 
    206  
    207    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshfos_b     !: south boundary ssh correction averaged over the barotropic loop 
    208       !                                           !  (if Flather's algoritm applied at open boundary) 
    209  
    210    !!-------------------------------- 
    211    !! Arrays for radiative South OBC   (computed by the forward time step in dynspg) 
    212    !!-------------------------------- 
    213    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   usbnd, vsbnd     !: baroclinic u & v components of the velocity over 3  
    214       !                                                   !  rows and 3 time step (now, before, and before before) 
    215    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   tsbnd, ssbnd     !: south boundary temperature and salinity over 
    216       !                                                   !  2 rows and 2 time step (now and before) 
    217    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   u_cysbnd, v_cysbnd   !: Meridional component of the phase speed ratio 
    218       !                                                   !  computed with radiation of zonal and meridional velocity  
    219       !                                                   !  (repsectively) at the south OB (u_cynbnd = cx rdt ) 
    220    REAL(wp), ALLOCATABLE, SAVE,     DIMENSION(:,:) ::   usmsk, vsmsk, tsmsk  !: 2D mask for the South OB 
     88   REAL(wp)                                    ::   obcsurftot !: Lateral surface of unstructured open boundary 
    22189 
    22290   !!---------------------------------------------------------------------- 
    223    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     91   !! open boundary data variables 
     92   !!---------------------------------------------------------------------- 
     93 
     94   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)       ::   dta_global        !: workspace for reading in global data arrays 
     95   TYPE(OBC_INDEX), DIMENSION(jp_obc), TARGET    ::   idx_obc           !: obc indices (local process) 
     96   TYPE(OBC_DATA) , DIMENSION(jp_obc)            ::   dta_obc           !: obc external data (local process) 
     97 
     98   !!---------------------------------------------------------------------- 
     99   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    224100   !! $Id$  
    225    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     101   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    226102   !!---------------------------------------------------------------------- 
    227103CONTAINS 
    228104 
    229    INTEGER FUNCTION obc_oce_alloc() 
     105   FUNCTION obc_oce_alloc() 
    230106      !!---------------------------------------------------------------------- 
    231       !!               ***  FUNCTION obc_oce_alloc  *** 
     107      USE lib_mpp, ONLY: ctl_warn, mpp_sum 
     108      ! 
     109      INTEGER :: obc_oce_alloc 
    232110      !!---------------------------------------------------------------------- 
    233  
    234       ALLOCATE(                                                               & 
    235               !! East open boundary 
    236               obctmsk(jpi,jpj), obcumask(jpi,jpj), obcvmask(jpi,jpj),        & 
    237               sshfoe(jpjed:jpjef), ubtfoe(jpjed:jpjef), vbtfoe(jpjed:jpjef), & 
    238               ufoe(jpj,jpk), vfoe(jpj,jpk), tfoe(jpj,jpk), sfoe(jpj,jpk),    & 
    239               uclie(jpj,jpk), sshfoe_b(jpjed:jpjef,jpj),                     & 
    240               !! Arrays for radiative East OBC 
    241               uebnd(jpj,jpk,3,3), vebnd(jpj,jpk,3,3) ,                       & 
    242               tebnd(jpj,jpk,2,2), sebnd(jpj,jpk,2,2),                        & 
    243               u_cxebnd(jpj,jpk), v_cxebnd(jpj,jpk),                          & 
    244               uemsk(jpj,jpk), vemsk(jpj,jpk), temsk(jpj,jpk),                & 
    245               !! West open boundary 
    246               sshfow(jpjwd:jpjwf), ubtfow(jpjwd:jpjwf), vbtfow(jpjwd:jpjwf), & 
    247               ufow(jpj,jpk), vfow(jpj,jpk), tfow(jpj,jpk),                   & 
    248               sfow(jpj,jpk), ucliw(jpj,jpk), sshfow_b(jpjwd:jpjwf,jpj),      & 
    249               !! Arrays for radiative West OBC 
    250               uwbnd(jpj,jpk,3,3), vwbnd(jpj,jpk,3,3),                        & 
    251               twbnd(jpj,jpk,2,2), swbnd(jpj,jpk,2,2),                        & 
    252               u_cxwbnd(jpj,jpk), v_cxwbnd(jpj,jpk),                          & 
    253               uwmsk(jpj,jpk), vwmsk(jpj,jpk), twmsk(jpj,jpk),                & 
    254               !! North open boundary 
    255               sshfon(jpind:jpinf), ubtfon(jpind:jpinf), vbtfon(jpind:jpinf), & 
    256               ufon(jpi,jpk), vfon(jpi,jpk), tfon(jpi,jpk),                   & 
    257               sfon(jpi,jpk), vclin(jpi,jpk), sshfon_b(jpind:jpinf,jpj),      & 
    258               !! Arrays for radiative North OBC 
    259               unbnd(jpi,jpk,3,3), vnbnd(jpi,jpk,3,3),                        & 
    260               tnbnd(jpi,jpk,2,2), snbnd(jpi,jpk,2,2),                        & 
    261               u_cynbnd(jpi,jpk), v_cynbnd(jpi,jpk),                          & 
    262               unmsk(jpi,jpk), vnmsk(jpi,jpk), tnmsk (jpi,jpk),               & 
    263               !! South open boundary 
    264               sshfos(jpisd:jpisf), ubtfos(jpisd:jpisf), vbtfos(jpisd:jpisf), & 
    265               ufos(jpi,jpk), vfos(jpi,jpk), tfos(jpi,jpk),                   & 
    266               sfos(jpi,jpk), vclis(jpi,jpk),                                 & 
    267               sshfos_b(jpisd:jpisf,jpj),                                     & 
    268               !! Arrays for radiative South OBC  
    269               usbnd(jpi,jpk,3,3), vsbnd(jpi,jpk,3,3),                        & 
    270               tsbnd(jpi,jpk,2,2), ssbnd(jpi,jpk,2,2),                        & 
    271               u_cysbnd(jpi,jpk), v_cysbnd(jpi,jpk),                          & 
    272               usmsk(jpi,jpk), vsmsk(jpi,jpk), tsmsk(jpi,jpk),                & 
    273               !! 
    274               STAT=obc_oce_alloc ) 
     111      ! 
     112      ALLOCATE( obctmask(jpi,jpj) , obcumask(jpi,jpj), obcvmask(jpi,jpj),                    &   
     113         &      STAT=obc_oce_alloc ) 
     114         ! 
     115      IF( lk_mpp             )   CALL mpp_sum ( obc_oce_alloc ) 
     116      IF( obc_oce_alloc /= 0 )   CALL ctl_warn('obc_oce_alloc: failed to allocate arrays.') 
    275117      ! 
    276118   END FUNCTION obc_oce_alloc 
    277     
     119 
    278120#else 
    279121   !!---------------------------------------------------------------------- 
    280    !!   Default option         Empty module                          No OBC 
     122   !!   Dummy module                NO Unstructured Open Boundary Condition 
    281123   !!---------------------------------------------------------------------- 
     124   LOGICAL ::   ln_tides = .false.  !: =T apply tidal harmonic forcing along open boundaries 
    282125#endif 
    283126 
    284127   !!====================================================================== 
    285128END MODULE obc_oce 
     129 
Note: See TracChangeset for help on using the changeset viewer.