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.
sbcice_if.F90 in branches/2011/dev_r2784_CMCC1_topbfm/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/2011/dev_r2784_CMCC1_topbfm/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_if.F90 @ 2798

Last change on this file since 2798 was 2798, checked in by vichi, 13 years ago

Added initial coupling with BFM

  • Property svn:keywords set to Id
File size: 5.7 KB
Line 
1MODULE sbcice_if
2   !!======================================================================
3   !!                       ***  MODULE  sbcice  ***
4   !! Surface module :  update surface ocean boundary condition over ice
5   !!                   covered area using ice-if model
6   !!======================================================================
7   !! History :  3.0   !  2006-06  (G. Madec)  Original code
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   sbc_ice_if     : update sbc in ice-covered area
12   !!----------------------------------------------------------------------
13   USE oce             ! ocean dynamics and tracers
14   USE dom_oce         ! ocean space and time domain
15   USE phycst          ! physical constants
16   USE eosbn2          ! equation of state
17   USE sbc_oce         ! surface boundary condition: ocean fields
18   USE fldread         ! read input field
19   USE iom             ! I/O manager library
20   USE in_out_manager  ! I/O manager
21   USE lib_mpp         ! MPP library
22
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   sbc_ice_if      ! routine called in sbcmod
27
28   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_ice   ! structure of input ice-cover (file informations, fields read)
29   
30   !! * Substitutions
31#  include "domzgr_substitute.h90"
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 sbc_ice_if( kt )
40      !!---------------------------------------------------------------------
41      !!                     ***  ROUTINE sbc_ice_if  ***
42      !!
43      !! ** Purpose :   handle surface boundary condition over ice cover area
44      !!      when sea-ice model are not used
45      !!
46      !! ** Method  : - read sea-ice cover climatology
47      !!              - blah blah blah, ...
48      !!
49      !! ** Action  :   utau, vtau : remain unchanged
50      !!                taum, wndm : remain unchanged
51      !!                qns, qsr   : update heat flux below sea-ice
52      !!                emp, emps  : update freshwater flux below sea-ice
53      !!                fr_i       : update the ice fraction
54      !!---------------------------------------------------------------------
55      INTEGER, INTENT(in) ::   kt   ! ocean time step
56      !
57      INTEGER  ::   ji, jj     ! dummy loop indices
58      INTEGER  ::   ierror     ! return error code
59      REAL(wp) ::   ztrp, zsice, zt_fzp, zfr_obs
60      REAL(wp) ::   zqri, zqrj, zqrp, zqi
61      !!
62      CHARACTER(len=100) ::   cn_dir              ! Root directory for location of ice-if files
63      TYPE(FLD_N)        ::   sn_ice              ! informations about the fields to be read
64      NAMELIST/namsbc_iif/ cn_dir, sn_ice
65      !!---------------------------------------------------------------------
66      !                                         ! ====================== !
67     
68      IF( MOD( kt-1, nn_fsbc) == 0 ) THEN
69         !
70         ztrp = -40.             ! restoring terme for temperature (w/m2/k)
71         zsice = - 0.04 / 0.8    ! ratio of isohaline compressibility over isotherme compressibility
72                                 ! ( d rho / dt ) / ( d rho / ds )      ( s = 34, t = -1.8 )
73         
74         fr_i(:,:) = tfreez( sss_m ) * tmask(:,:,1)      ! sea surface freezing temperature [Celcius]
75
76         ! Flux and ice fraction computation
77!CDIR COLLAPSE
78         DO jj = 1, jpj
79            DO ji = 1, jpi
80               !
81               zt_fzp  = fr_i(ji,jj)                        ! freezing point temperature
82               !                                            ! ocean ice fraction (0/1) from the freezing point temperature
83               IF( sst_m(ji,jj) <= zt_fzp ) THEN   ;   fr_i(ji,jj) = 1.e0
84               ELSE                                ;   fr_i(ji,jj) = 0.e0
85               ENDIF
86
87          zfr_obs = fr_i(ji,jj) 
88               tn(ji,jj,1) = MAX( tn(ji,jj,1), zt_fzp )     ! avoid over-freezing point temperature
89
90               qsr(ji,jj) = ( 1. - zfr_obs ) * qsr(ji,jj)   ! solar heat flux : zero below observed ice cover
91
92               !                                            ! non solar heat flux : add a damping term
93               !      # ztrp*(t-(tgel-1.))  if observed ice and no opa ice   (zfr_obs=1 fr_i=0)
94               !      # ztrp*min(0,t-tgel)  if observed ice and opa ice      (zfr_obs=1 fr_i=1)
95               zqri = ztrp * ( tb(ji,jj,1) - ( zt_fzp - 1.) )
96               zqrj = ztrp * MIN( 0., tb(ji,jj,1) - zt_fzp )
97               zqrp = ( zfr_obs * ( (1. - fr_i(ji,jj) ) * zqri    &
98                 &                 +      fr_i(ji,jj)   * zqrj ) ) * tmask(ji,jj,1)
99
100               !                                            ! non-solar heat flux
101               !      # qns unchanged              if no climatological ice              (zfr_obs=0)
102               !      # qns = zqrp                 if climatological ice and no opa ice  (zfr_obs=1, fr_i=0)
103               !      # qns = zqrp -2(-4) watt/m2  if climatological ice and opa ice     (zfr_obs=1, fr_i=1)
104               !                                   (-2=arctic, -4=antarctic)   
105               zqi = -3. + SIGN( 1.e0, ff(ji,jj) )
106               qns(ji,jj) = ( ( 1.- zfr_obs ) * qns(ji,jj)                             &
107                  &          +      zfr_obs   * fr_i(ji,jj) * zqi ) * tmask(ji,jj,1)   &
108                  &       + zqrp
109            END DO
110         END DO
111         !
112      ENDIF
113      !
114   END SUBROUTINE sbc_ice_if
115
116   !!======================================================================
117END MODULE sbcice_if
Note: See TracBrowser for help on using the repository browser.