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

source: branches/2011/UKMO_MERCATOR_obc_bdy_merge/NEMOGCM/NEMO/OPA_SRC/OBC/obc_oce.F90 @ 2800

Last change on this file since 2800 was 2800, checked in by davestorkey, 13 years ago
  1. Application of boundary conditions to barotropic and baroclinic velocities clearly separated.
  2. Option to input full velocities in boundary data (default expects barotropic and baroclinic velocities separately).
  3. Option to use initial conditions as boundary conditions coded.
  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1MODULE obc_oce
2   !!======================================================================
3   !!                       ***  MODULE obc_oce   ***
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
10   !!----------------------------------------------------------------------
11#if defined key_obc 
12   !!----------------------------------------------------------------------
13   !!   'key_obc'                      Unstructured Open Boundary Condition
14   !!----------------------------------------------------------------------
15   USE par_oce         ! ocean parameters
16   USE obc_par         ! Unstructured boundary parameters
17   USE lib_mpp         ! distributed memory computing
18
19   IMPLICIT NONE
20   PUBLIC
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
48
49   !!----------------------------------------------------------------------
50   !! Namelist variables
51   !!----------------------------------------------------------------------
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
54   !
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
79
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
87
88   REAL(wp)                                    ::   obcsurftot !: Lateral surface of unstructured open boundary
89
90   REAL(wp), POINTER, DIMENSION(:,:)           ::   pssh       !:
91   REAL(wp), POINTER, DIMENSION(:,:)           ::   phur       !:
92   REAL(wp), POINTER, DIMENSION(:,:)           ::   phvr       !: Pointers for barotropic fields
93   REAL(wp), POINTER, DIMENSION(:,:)           ::   pu2d       !:
94   REAL(wp), POINTER, DIMENSION(:,:)           ::   pv2d       !:
95
96   !!----------------------------------------------------------------------
97   !! open boundary data variables
98   !!----------------------------------------------------------------------
99
100   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)       ::   dta_global        !: workspace for reading in global data arrays
101   TYPE(OBC_INDEX), DIMENSION(jp_obc), TARGET    ::   idx_obc           !: obc indices (local process)
102   TYPE(OBC_DATA) , DIMENSION(jp_obc)            ::   dta_obc           !: obc external data (local process)
103
104   !!----------------------------------------------------------------------
105   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
106   !! $Id$
107   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
108   !!----------------------------------------------------------------------
109CONTAINS
110
111   FUNCTION obc_oce_alloc()
112      !!----------------------------------------------------------------------
113      USE lib_mpp, ONLY: ctl_warn, mpp_sum
114      !
115      INTEGER :: obc_oce_alloc
116      !!----------------------------------------------------------------------
117      !
118      ALLOCATE( obctmask(jpi,jpj) , obcumask(jpi,jpj), obcvmask(jpi,jpj),                    & 
119         &      STAT=obc_oce_alloc )
120         !
121      IF( lk_mpp             )   CALL mpp_sum ( obc_oce_alloc )
122      IF( obc_oce_alloc /= 0 )   CALL ctl_warn('obc_oce_alloc: failed to allocate arrays.')
123      !
124   END FUNCTION obc_oce_alloc
125
126#else
127   !!----------------------------------------------------------------------
128   !!   Dummy module                NO Unstructured Open Boundary Condition
129   !!----------------------------------------------------------------------
130   LOGICAL ::   ln_tides = .false.  !: =T apply tidal harmonic forcing along open boundaries
131#endif
132
133   !!======================================================================
134END MODULE obc_oce
135
Note: See TracBrowser for help on using the repository browser.