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.
bdyice_lim2.F90 in branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY – NEMO

source: branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim2.F90 @ 4291

Last change on this file since 4291 was 4148, checked in by cetlod, 10 years ago

merge in trunk changes between r3853 and r3940 and commit the changes, see ticket #1169

  • Property svn:keywords set to Id
File size: 5.4 KB
Line 
1MODULE bdyice_lim2
2   !!======================================================================
3   !!                       ***  MODULE  bdyice_lim2  ***
4   !! Unstructured Open Boundary Cond. :  Open boundary conditions for sea-ice (LIM2)
5   !!======================================================================
6   !!  History :  3.3  !  2010-09 (D. Storkey)  Original code
7   !!             3.4  !  2011    (D. Storkey) rewrite in preparation for OBC-BDY merge
8   !!             3.5  !  2012    (S. Mocavero, I. Epicoco) Optimization of BDY communications
9   !!----------------------------------------------------------------------
10#if defined   key_bdy   &&   defined key_lim2
11   !!----------------------------------------------------------------------
12   !!   'key_bdy'            and                 Unstructured Open Boundary Conditions
13   !!   'key_lim2'                                                 LIM-2 sea ice model
14   !!----------------------------------------------------------------------
15   !!   bdy_ice_lim_2      : Application of open boundaries to ice
16   !!   bdy_ice_frs        : Application of Flow Relaxation Scheme
17   !!----------------------------------------------------------------------
18   USE timing          ! Timing
19   USE oce             ! ocean dynamics and tracers variables
20   USE ice_2           ! LIM_2 ice variables
21   USE dom_oce         ! ocean space and time domain variables
22   USE bdy_oce         ! ocean open boundary conditions
23   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
24   USE in_out_manager  ! write to numout file
25   USE lib_mpp         ! distributed memory computing
26   
27   IMPLICIT NONE
28   PRIVATE
29
30   PUBLIC   bdy_ice_lim_2    ! routine called in sbcmod
31
32   !!----------------------------------------------------------------------
33   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
34   !! $Id$
35   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
36   !!----------------------------------------------------------------------
37CONTAINS
38
39   SUBROUTINE bdy_ice_lim_2( kt )
40      !!----------------------------------------------------------------------
41      !!                  ***  SUBROUTINE bdy_ice_lim_2  ***
42      !!
43      !! ** Purpose : - Apply open boundary conditions for ice (LIM2)
44      !!
45      !!----------------------------------------------------------------------
46      INTEGER, INTENT( in ) :: kt     ! Main time step counter
47      !!
48      INTEGER               :: ib_bdy ! Loop index
49
50      DO ib_bdy=1, nb_bdy
51
52         SELECT CASE( nn_ice_lim2(ib_bdy) )
53         CASE(jp_none)
54            CYCLE
55         CASE(jp_frs)
56            CALL bdy_ice_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy )
57         CASE DEFAULT
58            CALL ctl_stop( 'bdy_ice_lim_2 : unrecognised option for open boundaries for ice fields' )
59         END SELECT
60      ENDDO
61
62   END SUBROUTINE bdy_ice_lim_2
63
64   SUBROUTINE bdy_ice_frs( idx, dta, ib_bdy )
65      !!------------------------------------------------------------------------------
66      !!                 ***  SUBROUTINE bdy_ice_frs  ***
67      !!                   
68      !! ** Purpose : Apply the Flow Relaxation Scheme for sea-ice fields in the case
69      !!              of unstructured open boundaries. Currently only tested for LIM2.
70      !!
71      !! Reference : Engedahl H., 1995: Use of the flow relaxation scheme in a three-
72      !!             dimensional baroclinic ocean model with realistic topography. Tellus, 365-382.
73      !!------------------------------------------------------------------------------
74      TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices
75      TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data
76      INTEGER,         INTENT(in) ::   ib_bdy  ! BDY set index
77      !!
78      INTEGER  ::   jb, jgrd   ! dummy loop indices
79      INTEGER  ::   ii, ij         ! local scalar
80      REAL(wp) ::   zwgt, zwgt1    ! local scalar
81      !!------------------------------------------------------------------------------
82      !
83      IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs')
84      !
85      jgrd = 1      ! Everything is at T-points here
86      !
87      DO jb = 1, idx%nblen(jgrd)
88            ii    = idx%nbi(jb,jgrd)
89            ij    = idx%nbj(jb,jgrd)
90            zwgt  = idx%nbw(jb,jgrd)
91            zwgt1 = 1.e0 - idx%nbw(jb,jgrd)
92            frld (ii,ij) = ( frld (ii,ij) * zwgt1 + dta%frld (jb) * zwgt ) * tmask(ii,ij,1)     ! Leads fraction
93            hicif(ii,ij) = ( hicif(ii,ij) * zwgt1 + dta%hicif(jb) * zwgt ) * tmask(ii,ij,1)     ! Ice depth
94            hsnif(ii,ij) = ( hsnif(ii,ij) * zwgt1 + dta%hsnif(jb) * zwgt ) * tmask(ii,ij,1)     ! Snow depth
95      END DO
96      CALL lbc_bdy_lnk( frld, 'T', 1., ib_bdy )                                         ! lateral boundary conditions
97      CALL lbc_bdy_lnk( hicif, 'T', 1., ib_bdy )   ;   CALL lbc_bdy_lnk( hsnif, 'T', 1., ib_bdy )
98      !     
99      IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs')
100      !
101   END SUBROUTINE bdy_ice_frs
102#else
103   !!---------------------------------------------------------------------------------
104   !!   Default option                                                    Empty module
105   !!---------------------------------------------------------------------------------
106CONTAINS
107   SUBROUTINE bdy_ice_lim_2( kt )      ! Empty routine
108      WRITE(*,*) 'bdy_ice_frs_lim_2: You should not have seen this print! error?', kt
109   END SUBROUTINE bdy_ice_lim_2
110#endif
111
112   !!=================================================================================
113END MODULE bdyice_lim2
Note: See TracBrowser for help on using the repository browser.