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 3066 for branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2011-11-09T14:09:37+01:00 (13 years ago)
Author:
rfurner
Message:

ticket #885 adding changes from branches/2011/dev_r2802_UKMO8_cice between r2802 and r3041

Location:
branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC
Files:
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90

    r2528 r3066  
    99   !!              -   !  2006-08  (G. Madec)  style  
    1010   !!             3.2  !  2006-08  (S. Masson, G. Madec)  suppress useless variables + style  
     11   !!             3.4  !  2011-11  (C. Harris)  minor changes for CICE constants  
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    4849#endif 
    4950 
     51#if defined key_cice 
     52   REAL(wp), PUBLIC ::   rau0     = 1026._wp      !: reference volumic mass (density)  (kg/m3) 
     53#else 
    5054   REAL(wp), PUBLIC ::   rau0     = 1035._wp      !: reference volumic mass (density)  (kg/m3) 
     55#endif 
    5156   REAL(wp), PUBLIC ::   rau0r                    !: reference specific volume         (m3/kg) 
    5257   REAL(wp), PUBLIC ::   rcp      =    4.e+3_wp   !: ocean specific heat 
    5358   REAL(wp), PUBLIC ::   ro0cpr                   !: = 1. / ( rau0 * rcp ) 
    5459 
    55 #if defined key_lim3 
     60#if defined key_lim3 || defined key_cice 
    5661   REAL(wp), PUBLIC ::   rcdsn   =   0.31_wp      !: thermal conductivity of snow 
    5762   REAL(wp), PUBLIC ::   rcdic   =   2.034396_wp  !: thermal conductivity of fresh ice 
     
    100105      rsiyea = 365.25 * rday * 2. * rpi / 6.283076 
    101106      rsiday = rday / ( 1. + rday / rsiyea ) 
     107#if defined key_cice 
     108      omega =  7.292116e-05 
     109#else 
    102110      omega  = 2. * rpi / rsiday  
     111#endif 
    103112 
    104113      rau0r  = 1. /   rau0   
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90

    r2715 r3066  
    55   !!====================================================================== 
    66   !! History :  9.0  !  05-07  (C. Talandier) original code 
     7   !!            3.4  !  11-11  (C. Harris) decomposition changes for running with CICE 
    78   !!---------------------------------------------------------------------- 
    89   USE dom_oce          ! ocean space and time domain variables 
     
    434435 
    435436      ijpi = ( jpiglo-2*jpreci + (isplt-1) ) / isplt + 2*jpreci 
     437#if defined key_nemocice_decomp 
     438      ijpj = ( jpjglo+1-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj  
     439#else 
    436440      ijpj = ( jpjglo-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj 
     441#endif 
    437442 
    438443      ALLOCATE(ilcitl (isplt,jsplt)) 
     
    445450 
    446451      IF(  irestil == 0 )   irestil = isplt 
     452#if defined key_nemocice_decomp 
     453 
     454      ! In order to match CICE the size of domains in NEMO has to be changed 
     455      ! The last line of blocks (west) will have fewer points  
     456      DO jj = 1, jsplt  
     457         DO ji=1, isplt-1  
     458            ilcitl(ji,jj) = ijpi  
     459         END DO  
     460         ilcitl(isplt,jj) = jpiglo - (isplt - 1) * (ijpi - nrecil) 
     461      END DO  
     462 
     463#else  
     464 
    447465      DO jj = 1, jsplt 
    448466         DO ji = 1, irestil 
     
    453471         END DO 
    454472      END DO 
     473 
     474#endif 
    455475       
    456476      IF( irestjl == 0 )   irestjl = jsplt 
     477#if defined key_nemocice_decomp  
     478 
     479      ! Same change to domains in North-South direction as in East-West.  
     480      DO ji = 1, isplt  
     481         DO jj=1, jsplt-1  
     482            ilcjtl(ji,jj) = ijpj  
     483         END DO  
     484         ilcjtl(ji,jsplt) = jpjglo - (jsplt - 1) * (ijpj - nrecjl) 
     485      END DO  
     486 
     487#else  
     488 
    457489      DO ji = 1, isplt 
    458490         DO jj = 1, irestjl 
     
    463495         END DO 
    464496      END DO 
    465        
     497 
     498#endif 
    466499      zidom = nrecil 
    467500      DO ji = 1, isplt 
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90

    r2715 r3066  
    125125      !!        !  98-05  (M. Imbard, J. Escobar, L. Colombet )  SHMEM and MPI versions 
    126126      !!   8.5  !  02-08  (G. Madec)  F90 : free form 
     127      !!   3.4  !  11-11  (C. Harris) decomposition changes for running with CICE 
    127128      !!---------------------------------------------------------------------- 
    128129      INTEGER  ::   ji, jj, jn   ! dummy loop indices 
     
    152153 
    153154      IF(  iresti == 0 )   iresti = jpni 
     155 
     156#if defined key_nemocice_decomp 
     157      ! In order to match CICE the size of domains in NEMO has to be changed 
     158      ! The last line of blocks (west) will have fewer points 
     159 
     160      DO jj = 1, jpnj 
     161         DO ji=1, jpni-1 
     162            ilcit(ji,jj) = jpi 
     163         END DO 
     164         ilcit(jpni,jj) = jpiglo - (jpni - 1) * (jpi - nreci) 
     165      END DO 
     166 
     167#else 
     168 
    154169      DO jj = 1, jpnj 
    155170         DO ji = 1, iresti 
     
    161176      END DO 
    162177       
     178#endif 
    163179      IF( irestj == 0 )   irestj = jpnj 
     180 
     181#if defined key_nemocice_decomp 
     182      ! Same change to domains in North-South direction as in East-West.  
     183      DO ji=1,jpni 
     184         DO jj=1,jpnj-1 
     185            ilcjt(ji,jj) = jpj 
     186         END DO 
     187         ilcjt(ji,jpnj) = jpjglo - (jpnj - 1) * (jpj - nrecj) 
     188      END DO 
     189 
     190#else 
     191 
    164192      DO ji = 1, jpni 
    165193         DO jj = 1, irestj 
     
    171199      END DO 
    172200       
     201#endif 
    173202      IF(lwp) THEN 
    174203         WRITE(numout,*) 
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90

    r2777 r3066  
    66   !! History :  3.0  ! 2006-08  (G. Madec)  Surface module 
    77   !!            3.2  ! 2009-06  (S. Masson) merge with ice_oce 
    8    !!            4.0  ! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
     8   !!            3.3.1! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
     9   !!            3.4  ! 2011-11  (C. Harris) CICE added as an option 
    910   !!---------------------------------------------------------------------- 
    10 #if defined key_lim3 || defined key_lim2 
     11#if defined key_lim3 || defined key_lim2 || defined key_cice 
    1112   !!---------------------------------------------------------------------- 
    1213   !!   'key_lim2' or 'key_lim3' :             LIM-2 or LIM-3 sea-ice model 
     
    1920   USE par_ice_2        ! LIM-2 parameters 
    2021# endif 
     22# if defined key_cice  
     23   USE ice_domain_size, only: ncat  
     24#endif 
    2125   USE lib_mpp          ! MPP library 
    2226   USE in_out_manager   ! I/O manager 
     
    3034   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim2    = .TRUE.   !: LIM-2 ice model 
    3135   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim3    = .FALSE.  !: no LIM-3 
     36   LOGICAL         , PUBLIC, PARAMETER ::   lk_cice    = .FALSE.  !: no CICE  
    3237#  if defined key_lim2_vp 
    3338   CHARACTER(len=1), PUBLIC, PARAMETER ::   cp_ice_msh = 'I'      !: VP : 'I'-grid ice-velocity (B-grid lower left corner) 
     
    3944   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim2    = .FALSE.  !: no LIM-2 
    4045   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim3    = .TRUE.   !: LIM-3 ice model 
     46   LOGICAL         , PUBLIC, PARAMETER ::   lk_cice    = .FALSE.  !: no CICE  
    4147   CHARACTER(len=1), PUBLIC, PARAMETER ::   cp_ice_msh = 'C'      !: 'C'-grid ice-velocity 
    4248# endif 
     49# if defined  key_cice 
     50   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim2    = .FALSE.  !: no LIM-2 
     51   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim3    = .FALSE.  !: no LIM-3 
     52   LOGICAL         , PUBLIC, PARAMETER ::   lk_cice    = .TRUE.   !: CICE ice model 
     53   CHARACTER(len=1), PUBLIC            ::   cp_ice_msh = 'F'      !: 'F'-grid ice-velocity 
     54# endif 
    4355 
     56#if defined key_lim3 || defined key_lim2  
    4457   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qns_ice   !: non solar heat flux over ice                  [W/m2] 
    4558   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice   !: solar heat flux over ice                      [W/m2] 
     
    6073# endif 
    6174 
     75#elif defined key_cice 
     76   ! 
     77   ! for consistency with LIM, these are declared with three dimensions 
     78   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qlw_ice            !: incoming long-wave 
     79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qla_ice            !: latent flux over ice           [W/m2] 
     80   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice            !: solar heat flux over ice       [W/m2] 
     81   ! 
     82   ! other forcing arrays are two dimensional 
     83   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ss_iou             !: x ice-ocean surface stress at NEMO U point 
     84   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ss_iov             !: y ice-ocean surface stress at NEMO V point 
     85   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   emp_ice            !: sublimation-snow budget over ice    [kg/m2] 
     86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   tatm_ice           !: air temperature 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qatm_ice           !: specific humidity 
     88   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   wndi_ice           !: i wind at T point 
     89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   wndj_ice           !: j wind at T point 
     90   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   nfrzmlt            !: NEMO frzmlt 
     91   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   fr_iu              !: ice fraction at NEMO U point 
     92   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   fr_iv              !: ice fraction at NEMO V point 
     93   ! 
     94   ! finally, arrays corresponding to different ice categories 
     95   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   a_i                !: category ice fraction 
     96   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   topmelt           !: category topmelt 
     97   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   botmelt           !: category botmelt 
     98#endif 
     99 
    62100   !!---------------------------------------------------------------------- 
    63101   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     
    71109      !!                     ***  FUNCTION sbc_ice_alloc  *** 
    72110      !!---------------------------------------------------------------------- 
     111#if defined key_lim3 || defined key_lim2 
    73112      ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) ,     & 
    74113         &      qla_ice (jpi,jpj,jpl) , dqla_ice(jpi,jpj,jpl) ,     & 
     
    77116         &      utau_ice(jpi,jpj)     , vtau_ice(jpi,jpj)     ,     & 
    78117         &      fr1_i0  (jpi,jpj)     , fr2_i0  (jpi,jpj)     ,     & 
    79 # if defined key_lim3 
     118#if defined key_lim3 
    80119         &      emp_ice(jpi,jpj)      , tatm_ice(jpi,jpj)     , STAT= sbc_ice_alloc ) 
    81 # else 
     120#else 
    82121         &      emp_ice(jpi,jpj)                              , STAT= sbc_ice_alloc ) 
    83 # endif 
     122#endif 
     123#elif defined key_cice 
     124      ALLOCATE( qla_ice(jpi,jpj,1)    , qlw_ice(jpi,jpj,1)    , qsr_ice(jpi,jpj,1)    , & 
     125                wndi_ice(jpi,jpj)     , tatm_ice(jpi,jpj)     , qatm_ice(jpi,jpj)     , & 
     126                wndj_ice(jpi,jpj)     , nfrzmlt(jpi,jpj)      , ss_iou(jpi,jpj)       , & 
     127                ss_iov(jpi,jpj)       , fr_iu(jpi,jpj)        , fr_iv(jpi,jpj)        , & 
     128                a_i(jpi,jpj,ncat)     , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat), STAT= sbc_ice_alloc ) 
     129#endif 
    84130         ! 
    85131      IF( lk_mpp            )   CALL mpp_sum ( sbc_ice_alloc ) 
     
    89135#else 
    90136   !!---------------------------------------------------------------------- 
    91    !!   Default option                      NO LIM 2.0 or 3.0 sea-ice model 
     137   !!   Default option                      NO LIM 2.0 or 3.0 or CICE sea-ice model 
    92138   !!---------------------------------------------------------------------- 
    93139   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim2    = .FALSE.  !: no LIM-2 ice model 
    94140   LOGICAL         , PUBLIC, PARAMETER ::   lk_lim3    = .FALSE.  !: no LIM-3 ice model 
     141   LOGICAL         , PUBLIC, PARAMETER ::   lk_cice    = .FALSE.  !: no CICE  ice model 
    95142   CHARACTER(len=1), PUBLIC, PARAMETER ::   cp_ice_msh = '-'      !: no grid ice-velocity 
    96143#endif 
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r2777 r3066  
    1414   !!            3.2  !  2009-04  (B. Lemaire)  Introduce iom_put 
    1515   !!            3.3  !  2010-10  (S. Masson)  add diurnal cycle 
     16   !!            3.4  !  2011-11  (C. Harris) Fill arrays required by CICE 
    1617   !!---------------------------------------------------------------------- 
    1718 
     
    3435   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3536   USE prtctl          ! Print control 
    36 #if defined key_lim3 
     37#if defined key_lim3 || defined key_cice 
    3738   USE sbc_ice         ! Surface boundary condition: ice fields 
    3839#endif 
     
    182183      !                                                        ! surface ocean fluxes computed with CLIO bulk formulea 
    183184      IF( MOD( kt - 1, nn_fsbc ) == 0 )   CALL blk_oce_core( sf, sst_m, ssu_m, ssv_m ) 
     185 
     186#if defined key_cice 
     187      IF( MOD( kt - 1, nn_fsbc ) == 0 )   THEN 
     188         qlw_ice(:,:,1)   = sf(jp_qlw)%fnow(:,:,1)  
     189         qsr_ice(:,:,1)   = sf(jp_qsr)%fnow(:,:,1) 
     190         tatm_ice(:,:)    = sf(jp_tair)%fnow(:,:,1)          
     191         qatm_ice(:,:)    = sf(jp_humi)%fnow(:,:,1) 
     192         tprecip(:,:)     = sf(jp_prec)%fnow(:,:,1) * rn_pfac 
     193         sprecip(:,:)     = sf(jp_snow)%fnow(:,:,1) * rn_pfac 
     194         wndi_ice(:,:)    = sf(jp_wndi)%fnow(:,:,1) 
     195         wndj_ice(:,:)    = sf(jp_wndj)%fnow(:,:,1) 
     196      ENDIF 
     197#endif 
    184198      ! 
    185199   END SUBROUTINE sbc_blk_core 
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r3062 r3066  
    1111   !!             -   ! 2010-11  (G. Madec) ice-ocean stress always computed at each ocean time-step 
    1212   !!             -   ! 2010-10  (J. Chanut, C. Bricaud, G. Madec)  add the surface pressure forcing 
     13   !!            3.4  ! 2011-11  (C. Harris) CICE added as an option 
    1314   !!---------------------------------------------------------------------- 
    1415 
     
    3233   USE sbcice_lim       ! surface boundary condition: LIM 3.0 sea-ice model 
    3334   USE sbcice_lim_2     ! surface boundary condition: LIM 2.0 sea-ice model 
     35   USE sbcice_cice      ! surface boundary condition: CICE    sea-ice model 
    3436   USE sbccpl           ! surface boundary condition: coupled florulation 
    3537   USE cpl_oasis3, ONLY:lk_cpl      ! are we in coupled mode? 
     
    9496        IF( lk_lim2 )   nn_ice      = 2 
    9597        IF( lk_lim3 )   nn_ice      = 3 
     98        IF( lk_cice )   nn_ice      = 4 
    9699      ENDIF 
    97100      IF( cp_cfg == 'gyre' ) THEN            ! GYRE configuration 
     
    144147         &  CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 
    145148      ! 
    146       IF( nn_ice == 2 .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. lk_cpl ) )   & 
    147          &   CALL ctl_stop( 'sea-ice model requires a bulk formulation or coupled configuration' ) 
     149      IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. lk_cpl ) )   & 
     150         &   CALL ctl_stop( 'LIM sea-ice model requires a bulk formulation or coupled configuration' ) 
     151      IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. lk_cpl ) )   & 
     152         &   CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or lk_cpl' ) 
     153      IF( nn_ice == 4 .AND. ( .NOT. ( cp_cfg == 'orca' ) .OR. lk_agrif ) )   & 
     154         &   CALL ctl_stop( 'CICE sea-ice model currently only available in a global ORCA configuration without AGRIF' ) 
    148155       
    149156      IF( ln_dm2dc )   nday_qsr = -1   ! initialisation flag 
     
    182189         IF( nsbc ==  5 )   WRITE(numout,*) '              coupled formulation' 
    183190      ENDIF 
     191 
     192      IF( nn_ice == 4 )   CALL cice_sbc_init (nsbc) 
    184193      ! 
    185194   END SUBROUTINE sbc_init 
     
    256265         !                                                      
    257266      CASE(  3 )   ;       CALL sbc_ice_lim  ( kt, nsbc )            ! LIM-3 ice model 
     267         ! 
     268      CASE(  4 )   ;       CALL sbc_ice_cice ( kt, nsbc )            ! CICE ice model 
    258269      END SELECT                                               
    259270 
     
    338349            &         tab2d_2=vtau      , clinfo2=' vtau     - : ', mask2=vmask, ovlap=1 ) 
    339350      ENDIF 
     351 
     352      IF( kt == nitend )   CALL sbc_final         ! Close down surface module if necessary 
    340353      ! 
    341354   END SUBROUTINE sbc 
     355 
     356   SUBROUTINE sbc_final 
     357      !!--------------------------------------------------------------------- 
     358      !!                    ***  ROUTINE sbc_final  *** 
     359      !!--------------------------------------------------------------------- 
     360 
     361      !----------------------------------------------------------------- 
     362      ! Finalize CICE (if used) 
     363      !----------------------------------------------------------------- 
     364 
     365      IF( nn_ice == 4 )   CALL cice_sbc_final 
     366      ! 
     367   END SUBROUTINE sbc_final 
    342368 
    343369   !!====================================================================== 
  • branches/2011/dev_UKM0_2011/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r3062 r3066  
    2727   !!            3.3  ! 2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface  
    2828   !!             -   ! 2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase 
    29    !!            4.0  ! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
     29   !!            3.3.1! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
     30   !!            3.4  ! 2011-11  (C. Harris) decomposition changes for running with CICE 
    3031   !!---------------------------------------------------------------------- 
    3132 
     
    247248      IF( Agrif_Root() ) THEN 
    248249         jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci   ! first  dim. 
     250#if defined key_nemocice_decomp 
     251         jpj = ( jpjglo+1-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim.  
     252#else 
    249253         jpj = ( jpjglo-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj   ! second dim. 
     254#endif 
    250255         jpk = jpkdta                                             ! third dim 
    251256         jpim1 = jpi-1                                            ! inner domain indices 
Note: See TracChangeset for help on using the changeset viewer.