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.
obcice_lim2.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/obcice_lim2.F90 @ 2797

Last change on this file since 2797 was 2797, checked in by davestorkey, 13 years ago

Delete BDY module and first implementation of new OBC module.

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