Changeset 2528 for trunk/NEMOGCM/NEMO/LIM_SRC_3
- Timestamp:
- 2010-12-27T18:33:53+01:00 (13 years ago)
- Location:
- trunk/NEMOGCM/NEMO/LIM_SRC_3
- Files:
-
- 29 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/dom_ice.F90
r1608 r2528 26 26 27 27 !!---------------------------------------------------------------------- 28 !! NEMO/LIM 3.2, UCL-ASTR-LOCEAN-IPSL (2009)28 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 29 29 !! $Id$ 30 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)30 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 31 31 !!====================================================================== 32 32 END MODULE dom_ice -
trunk/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r1471 r2528 1 1 MODULE ice 2 !!====================================================================== 3 !! *** MODULE ice *** 4 !! LIM-3 Sea Ice physics: diagnostics variables of ice defined in memory 5 !!===================================================================== 6 !! History : 3.0 ! 2008-03 (M. Vancoppenolle) : original code LIM-3 7 !!---------------------------------------------------------------------- 2 8 #if defined key_lim3 3 9 !!---------------------------------------------------------------------- 4 10 !! 'key_lim3' : LIM3 sea-ice model 5 11 !!---------------------------------------------------------------------- 6 !! History :7 !! 2.0 ! 03-08 (C. Ethe) F90: Free form and module8 !! 3.0 ! 08-03 (M. Vancoppenolle) : LIM3 !9 !!----------------------------------------------------------------------10 !! LIM 3.0, UCL-LOCEAN-IPSL (2005)11 !! $Id$12 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt13 !!----------------------------------------------------------------------14 !! * Modules used15 12 USE par_ice ! LIM sea-ice parameters 16 13 17 14 IMPLICIT NONE 18 15 PRIVATE 19 !! 16 20 17 !!====================================================================== 21 !! *** MODULE ice ***22 !!23 !! **************24 !! * L I M 3.0 *25 !! **************26 !!27 !! ''in ice we trust''28 !!29 !! This module contains the sea ice30 !! diagnostics variables of ice defined31 !! in memory32 !!33 !!======================================================================34 !!35 18 !! LIM3 by the use of sweat, agile fingers and sometimes brain juice, 36 19 !! was developed in Louvain-la-Neuve by : … … 48 31 !! 49 32 !! * Gurvan Madec, Claude Talandier, Christian Ethe 50 !! and Rachid Benshila (LOCEAN-IPSL, France)33 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 51 34 !! * Xavier Fettweis (UCL-ASTR), Ralph Timmermann (AWI, Germany) 52 35 !! * Bill Lipscomb (LANL), Cecilia Bitz (UWa) … … 64 47 !! * Bouillon et al., in prep for 2008. 65 48 !! 66 !! Or the reference manual, that should be available by 2009 67 !! 49 !! Or the reference manual, that should be available by 2010 68 50 !!====================================================================== 69 51 !! | 70 !! ***************************************** | 71 !! * * | 72 !! ************ I C E S T A T E V A R I A B L E S **************** | 73 !! * * | 74 !! ***************************************** | 52 !! I C E S T A T E V A R I A B L E S | 75 53 !! | 76 54 !! Introduction : | 77 55 !! -------------- | 78 !! |79 56 !! Every ice-covered grid cell is characterized by a series of state | 80 57 !! variables. To account for unresolved spatial variability in ice | … … 130 107 !! | 131 108 !! ** Global variables | 132 !! |133 109 !!-------------|-------------|---------------------------------|-------| 134 110 !! a_i | a_i_b | Ice concentration | | … … 145 121 !! | 146 122 !! ** Equivalent variables | 147 !! |148 123 !!-------------|-------------|---------------------------------|-------| 149 124 !! | … … 179 154 !! et_s ! - ! Total snow enthalpy | 10^9 J| 180 155 !! bv_i ! - ! Mean relative brine volume | ??? | 181 !! |182 !! |183 156 !!===================================================================== 184 157 185 LOGICAL, PUBLIC :: & 186 con_i = .false. ! switch for conservation test 158 LOGICAL, PUBLIC :: con_i = .false. ! switch for conservation test 187 159 188 160 !!-------------------------------------------------------------------------- 189 161 !! * Share Module variables 190 162 !!-------------------------------------------------------------------------- 191 REAL(wp), PUBLIC :: rdt_ice !: ice time step 163 INTEGER , PUBLIC :: nstart !: iteration number of the begining of the run 164 INTEGER , PUBLIC :: nlast !: iteration number of the end of the run 165 INTEGER , PUBLIC :: nitrun !: number of iteration 166 INTEGER , PUBLIC :: numit !: iteration number 167 REAL(wp), PUBLIC :: tpstot !: time of the run in seconds 168 REAL(wp), PUBLIC :: rdt_ice !: ice time step 192 169 193 170 INTEGER , PUBLIC :: & !!: ** ice-dynamic namelist (namicedyn) ** -
trunk/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r2477 r2528 4 4 !! Sea-ice model : LIM Sea ice model Initialization 5 5 !!====================================================================== 6 !! History : 3.0 ! 2008-03 (M. Vancoppenolle) LIM-3 original code 7 !! 3.3 ! 2010-12 (G. Madec) add call to lim_thd_init and lim_thd_sal_init 8 !!---------------------------------------------------------------------- 6 9 #if defined key_lim3 7 10 !!---------------------------------------------------------------------- … … 10 13 !! ice_init : sea-ice model initialization 11 14 !!---------------------------------------------------------------------- 12 USE dom_oce13 USE in_out_manager14 USE sbc_oce 15 USE sbc_ice 16 USE phycst ! Define parameters for the routines17 USE ice18 USE lim msh19 USE lim istate20 USE limthd ! LIM: ice thermodynamics 21 USE limthd_sal ! LIM: ice thermodynamics: salinity 22 USE limrst23 USE par_ice24 USE limvar25 USE lib_mpp 15 USE phycst ! physical constants 16 USE dom_oce ! ocean domain 17 USE sbc_oce ! Surface boundary condition: ocean fields 18 USE sbc_ice ! Surface boundary condition: ice fields 19 USE ice ! LIM: sea-ice variables 20 USE limmsh ! LIM: mesh 21 USE limistate ! LIM: initial state 22 USE limrst ! LIM: restart 23 USE limthd ! LIM: ice thermodynamics 24 USE limthd_sal ! LIM: ice thermodynamics: salinity 25 USE par_ice ! LIM: sea-ice parameters 26 USE limvar ! LIM: variables 27 USE in_out_manager ! I/O manager 28 USE lib_mpp ! MPP library 26 29 27 30 IMPLICIT NONE 28 31 PRIVATE 29 32 30 PUBLIC ice_init ! called by opa.F90 31 !!---------------------------------------------------------------------- 32 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008) 33 PUBLIC ice_init ! called by opa.F90 34 35 !!---------------------------------------------------------------------- 36 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 33 37 !! $Id$ 34 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 35 !!---------------------------------------------------------------------- 36 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 37 40 CONTAINS 38 41 … … 42 45 !! 43 46 !! ** purpose : 44 !!45 !! History :46 !! 2.0 ! 02-08 (G. Madec) F90: Free form and modules47 !! 3.0 ! 08-03 (M. Vancop) ITD, salinity, EVP-C48 47 !!---------------------------------------------------------------------- 49 50 ! Open the namelist file48 ! 49 ! ! Open the namelist file 51 50 CALL ctl_opn( numnam_ice, 'namelist_ice', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 52 53 CALL ice_run ! read in namelist some run parameters51 ! 52 CALL ice_run ! namelist read some ice run parameters 54 53 ! 55 54 CALL lim_thd_init ! namelist read ice thermodynics parameters … … 63 62 CALL lim_itd_ini ! initialize the ice thickness distribution 64 63 65 ! ! Initial sea-ice state64 ! ! Initial sea-ice state 66 65 IF( .NOT.ln_rstart ) THEN ! start from rest 67 66 numit = 0 … … 79 78 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction 80 79 ! 81 nstart = numit + nn_fsbc 82 nitrun = nitend - nit000 + 1 83 nlast = numit + nitrun 80 nstart = numit + nn_fsbc 81 nitrun = nitend - nit000 + 1 82 nlast = numit + nitrun 84 83 ! 85 84 IF( nstock == 0 ) nstock = nlast + 1 86 85 ! 87 86 END SUBROUTINE ice_init 87 88 88 89 89 SUBROUTINE ice_run … … 97 97 !! 98 98 !! ** input : Namelist namicerun 99 !!100 !! history :101 !! 2.0 ! 03-08 (C. Ethe) Original code102 !! 3.0 ! 08-03 (M. Vancop) LIM3103 99 !!------------------------------------------------------------------- 104 100 NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, ln_limdyn, acrit, hsndif, hicdif, cai, cao, ln_nicep 105 101 !!------------------------------------------------------------------- 106 107 ! ! Read Namelist namicerun 108 REWIND ( numnam_ice ) 109 READ ( numnam_ice , namicerun ) 110 102 ! 103 REWIND( numnam_ice ) ! Read Namelist namicerun 104 READ ( numnam_ice , namicerun ) 105 ! 111 106 IF( lk_mpp .AND. ln_nicep ) THEN 112 107 ln_nicep = .FALSE. 113 108 CALL ctl_warn( 'ice_run : specific control print for LIM3 desactivated with MPI' ) 114 109 ENDIF 115 116 IF(lwp) THEN 110 ! 111 IF(lwp) THEN ! control print 117 112 WRITE(numout,*) 118 113 WRITE(numout,*) 'ice_run : ice share parameters for dynamics/advection/thermo of sea-ice' … … 124 119 WRITE(numout,*) ' atmospheric drag over sea ice = ', cai 125 120 WRITE(numout,*) ' atmospheric drag over ocean = ', cao 126 WRITE(numout,*) ' Several ice points in the ice or not in ocean.output = ', ln_nicep127 ENDIF 128 121 WRITE(numout,*) ' Several ice points in the ice or not in ocean.output = ', ln_nicep 122 ENDIF 123 ! 129 124 END SUBROUTINE ice_run 125 130 126 131 127 SUBROUTINE lim_itd_ini 132 128 !!------------------------------------------------------------------ 133 129 !! *** ROUTINE lim_itd_ini *** 134 !! ** Purpose : 135 !! Initializes the ice thickness distribution 136 !! ** Method : 137 !! Very simple. Currently there are no ice types in the 138 !! model... 139 !! 140 !! ** Arguments : 141 !! kideb , kiut : Starting and ending points on which the 142 !! the computation is applied 143 !! 144 !! ** Inputs / Ouputs : (global commons) 145 !! 146 !! ** External : 147 !! 148 !! ** References : 149 !! 150 !! ** History : 151 !! (12-2005) Martin Vancoppenolle 152 !! 130 !! 131 !! ** Purpose : Initializes the ice thickness distribution 132 !! ** Method : ... 153 133 !!------------------------------------------------------------------ 154 !! * Arguments 155 156 !! * Local variables 157 INTEGER :: jl, & ! ice category dummy loop index 158 jm ! ice types dummy loop index 159 160 REAL(wp) :: & ! constant values 161 zeps = 1.0e-10, & ! 162 zc1 , & ! 163 zc2 , & ! 164 zc3 , & ! 165 zx1 166 134 INTEGER :: jl, jm ! dummy loop index 135 REAL(wp) :: zc1, zc2, zc3, zx1 ! local scalars 136 !!------------------------------------------------------------------ 137 138 IF(lwp) WRITE(numout,*) 167 139 IF(lwp) WRITE(numout,*) 'lim_itd_ini : Initialization of ice thickness distribution ' 168 140 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 169 170 !!-- End of declarations171 !!------------------------------------------------------------------------------172 141 173 142 !------------------------------------------------------------------------------! … … 207 176 !- Thickness categories boundaries 208 177 !---------------------------------- 209 hi_max(:) = 0. 0210 hi_max_typ(:,:) = 0. 0178 hi_max(:) = 0._wp 179 hi_max_typ(:,:) = 0._wp 211 180 212 181 !- Type 1 - undeformed ice 213 zc1 = 3./REAL(ice_cat_bounds(1,2)-ice_cat_bounds(1,1)+1)214 zc2 = 10. 0*zc1215 zc3 = 3.0182 zc1 = 3._wp / REAL( ice_cat_bounds(1,2) - ice_cat_bounds(1,1) + 1 , wp ) 183 zc2 = 10._wp * zc1 184 zc3 = 3._wp 216 185 217 186 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 218 zx1 = REAL( jl-1) / REAL(ice_cat_bounds(1,2)-ice_cat_bounds(1,1)+1)219 hi_max(jl) = hi_max(jl-1) + zc1 + zc2 * (1. 0 + TANH ( zc3 * (zx1 - 1.0) ) )187 zx1 = REAL( jl-1 , wp ) / REAL( ice_cat_bounds(1,2) - ice_cat_bounds(1,1) + 1 , wp ) 188 hi_max(jl) = hi_max(jl-1) + zc1 + zc2 * (1._wp + TANH( zc3 * (zx1 - 1._wp ) ) ) 220 189 END DO 221 190 222 191 !- Fill in the hi_max_typ vector, useful in other circumstances 223 ! Tricky trick 224 ! hi_max_typ is actually not used in the code and will be removed in a 225 ! next flyspray at this time, the tricky trick will also be removed 226 ! Martin, march 08 192 ! Tricky trick: hi_max_typ is actually not used in the code and will be removed in a 193 ! next flyspray at this time, the tricky trick will also be removed (Martin, march 08) 227 194 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 228 195 hi_max_typ(jl,1) = hi_max(jl) … … 239 206 END DO 240 207 ENDIF 241 208 ! 242 209 DO jl = 1, jpl 243 hi_mean(jl) = ( hi_max(jl) + hi_max(jl-1) ) / 2.0244 END DO 245 210 hi_mean(jl) = ( hi_max(jl) + hi_max(jl-1) ) * 0.5_wp 211 END DO 212 ! 246 213 tn_ice(:,:,:) = t_su(:,:,:) 247 214 ! 248 215 END SUBROUTINE lim_itd_ini 249 216 … … 255 222 SUBROUTINE ice_init ! Empty routine 256 223 END SUBROUTINE ice_init 257 258 SUBROUTINE lim_itd_ini259 END SUBROUTINE lim_itd_ini260 224 #endif 261 225 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
r1530 r2528 34 34 # include "vectopt_loop_substitute.h90" 35 35 !!---------------------------------------------------------------------- 36 !! NEMO/LIM 3.2, UCL-LOCEAN-IPSL (2009)36 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 37 37 !! $Id$ 38 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 39 !!---------------------------------------------------------------------- 40 40 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limcons.F90
r1465 r2528 36 36 !! * Module variables 37 37 !!---------------------------------------------------------------------- 38 !! LIM 3.0, UCL-LOCEAN-IPSL (2005)38 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 39 39 !! $Id$ 40 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 41 !!---------------------------------------------------------------------- 42 42 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limdia.F90
r2477 r2528 14 14 !! lim_dia_init : initialization and namelist read 15 15 !!---------------------------------------------------------------------- 16 !! * Modules used 17 USE phycst 18 USE in_out_manager 19 USE par_ice ! ice parameters 20 USE sbc_ice ! ice variables 21 USE daymod 22 USE dom_ice 23 USE ice 24 USE dom_oce 25 USE sbc_oce ! Surface boundary condition: ocean fields 26 USE dom_oce 27 USE lib_mpp 28 USE in_out_manager 29 16 USE ice ! LIM-3: sea-ice variable 17 USE par_ice ! LIM-3: ice parameters 18 USE dom_ice ! LIM-3: sea-ice domain 19 USE dom_oce ! ocean domain 20 USE sbc_oce ! surface boundary condition: ocean fields 21 USE daymod ! model calendar 22 USE phycst ! physical constant 23 USE in_out_manager ! I/O manager 24 USE lib_mpp ! MPP library 25 30 26 IMPLICIT NONE 31 27 PRIVATE … … 46 42 INTEGER :: nbvt ! number of time variables 47 43 INTEGER :: naveg ! number of step for accumulation before averaging 48 REAL(wp) :: epsi06 = 1.e-6 ! small number44 REAL(wp) :: epsi06 = 1.e-6_wp ! small number 49 45 50 46 CHARACTER(len= 8) :: fmtinf = '1PE13.5 ' ! format of the output values … … 84 80 ! 0) date from the minimum of ice extent 85 81 !--------------------------------------- 86 zday_min = 273. ! zday_min = date of minimum extent, here September 30th87 zday = REAL(numit-nit000 ) * rdt_ice / ( 86400. * REAL(nn_fsbc) )82 zday_min = 273._wp ! zday_min = date of minimum extent, here September 30th 83 zday = REAL(numit-nit000,wp) * rdt_ice / ( 86400._wp * REAL(nn_fsbc,wp) ) 88 84 ! 89 85 IF( zday > zday_min ) THEN ; zshift_date = zday - zday_min … … 97 93 98 94 DO jv = nbvt + 1, nvinfo ! put everything to zero 99 vinfor(jv) = 0. 95 vinfor(jv) = 0._wp 100 96 END DO 101 97 … … 108 104 DO ji = fs_2, fs_jpim1 ! vector opt. 109 105 IF( tms(ji,jj) == 1 ) THEN 110 vinfor(3) = vinfor(3) + at_i(ji,jj)*aire(ji,jj) * 1.e-12 !ice area111 IF (at_i(ji,jj).GT.0.15) vinfor(5) = vinfor(5) + aire(ji,jj) * 1.e-12 !ice extent112 vinfor(7) = vinfor(7) + vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !ice volume113 vinfor(9) = vinfor(9) + vt_s(ji,jj)*aire(ji,jj) * 1.e-12 !snow volume114 vinfor(15) = vinfor(15) + ot_i(ji,jj) *vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !mean age115 vinfor(29) = vinfor(29) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !mean salinity106 vinfor(3) = vinfor(3) + at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice area 107 IF (at_i(ji,jj).GT.0.15) vinfor(5) = vinfor(5) + aire(ji,jj) * 1.e-12_wp !ice extent 108 vinfor(7) = vinfor(7) + vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice volume 109 vinfor(9) = vinfor(9) + vt_s(ji,jj)*aire(ji,jj) * 1.e-12_wp !snow volume 110 vinfor(15) = vinfor(15) + ot_i(ji,jj) *vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean age 111 vinfor(29) = vinfor(29) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean salinity 116 112 ! the computation of this diagnostic is not reliable 117 113 vinfor(31) = vinfor(31) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 118 114 v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12 119 vinfor(53) = vinfor(53) + emps(ji,jj)*aire(ji,jj) * 1.e-12 !salt flux120 vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) * 1.e-12 !brine drainage flux121 vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) * 1.e-12 !equivalent salt flux122 vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12 !SST123 vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12 !SSS124 vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12 ! snow temperature125 vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12 ! ice heat content126 vinfor(69) = vinfor(69) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12 !ice volume127 vinfor(71) = vinfor(71) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12 !ice volume128 vinfor(73) = vinfor(73) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12 !ice volume129 vinfor(75) = vinfor(75) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12 !ice volume130 vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12 !ice volume115 vinfor(53) = vinfor(53) + emps(ji,jj)*aire(ji,jj) * 1.e-12_wp !salt flux 116 vinfor(55) = vinfor(55) + fsbri(ji,jj)*aire(ji,jj) * 1.e-12_wp !brine drainage flux 117 vinfor(57) = vinfor(57) + fseqv(ji,jj)*aire(ji,jj) * 1.e-12_wp !equivalent salt flux 118 vinfor(59) = vinfor(59) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !SST 119 vinfor(61) = vinfor(61) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !SSS 120 vinfor(65) = vinfor(65) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! snow temperature 121 vinfor(67) = vinfor(67) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! ice heat content 122 vinfor(69) = vinfor(69) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12_wp !ice volume 123 vinfor(71) = vinfor(71) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12_wp !ice volume 124 vinfor(73) = vinfor(73) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12_wp !ice volume 125 vinfor(75) = vinfor(75) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12_wp !ice volume 126 vinfor(77) = vinfor(77) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12_wp !ice volume 131 127 vinfor(79) = 0.0 132 vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) * 1.e-12 ! mass flux128 vinfor(81) = vinfor(81) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 133 129 ENDIF 134 130 END DO … … 139 135 DO ji = fs_2, fs_jpim1 ! vector opt. 140 136 IF( tms(ji,jj) == 1 ) THEN 141 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !undef def ice volume137 vinfor(11) = vinfor(11) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 142 138 ENDIF 143 139 END DO … … 145 141 END DO 146 142 147 vinfor(13) = 0. 143 vinfor(13) = 0._wp 148 144 149 145 vinfor(15) = vinfor(15) / MAX(vinfor(7),epsi06) ! these have to be divided by total ice volume to have the … … 169 165 DO ji = fs_2, fs_jpim1 ! vector opt. 170 166 IF( tms(ji,jj) == 1 ) THEN 171 vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12 !ice volume172 vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12 !ice volume167 vinfor(33) = vinfor(33) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 168 vinfor(35) = vinfor(35) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 173 169 ENDIF 174 170 END DO … … 179 175 DO ji = fs_2, fs_jpim1 ! vector opt. 180 176 IF( tms(ji,jj) == 1 ) THEN 181 vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12 !th growth rates182 vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12 183 vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12 184 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12 185 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12 186 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12 / rdt_ice ! volume acc in OW177 vinfor(37) = vinfor(37) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp !th growth rates 178 vinfor(39) = vinfor(39) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 179 vinfor(41) = vinfor(41) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 180 vinfor(43) = vinfor(43) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 181 vinfor(45) = vinfor(45) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 182 vinfor(47) = vinfor(47) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice ! volume acc in OW 187 183 ENDIF 188 184 END DO … … 193 189 DO ji = fs_2, fs_jpim1 ! vector opt. 194 190 IF( tms(ji,jj) == 1 ) THEN 195 vinfor(63) = vinfor(63) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 191 vinfor(63) = vinfor(63) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 196 192 ENDIF 197 193 END DO … … 209 205 DO jl = 1, jpl 210 206 IF ((o_i(ji,jj,jl) - zshift_date).LT.0.0) THEN 211 vinfor(17) = vinfor(17) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! FY ice area212 vinfor(25) = vinfor(25) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! FY ice volume213 vinfor(49) = vinfor(49) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !FY ice salinity207 vinfor(17) = vinfor(17) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice area 208 vinfor(25) = vinfor(25) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice volume 209 vinfor(49) = vinfor(49) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 214 210 zafy = zafy + a_i(ji,jj,jl) 215 211 ENDIF 216 212 IF ((o_i(ji,jj,jl) - zshift_date).GT.0.0) THEN 217 vinfor(19) = vinfor(19) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! MY ice area218 vinfor(27) = vinfor(27) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! MY ice volume219 vinfor(51) = vinfor(51) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !MY ice salinity213 vinfor(19) = vinfor(19) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! MY ice area 214 vinfor(27) = vinfor(27) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! MY ice volume 215 vinfor(51) = vinfor(51) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !MY ice salinity 220 216 zamy = zamy + a_i(ji,jj,jl) 221 217 ENDIF 222 218 END DO 223 219 IF ((at_i(ji,jj).GT.0.15).AND.(zafy.GT.zamy)) THEN 224 vinfor(21) = vinfor(21) + aire(ji,jj) * 1.e-12 ! Seasonal ice extent220 vinfor(21) = vinfor(21) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 225 221 ENDIF 226 222 IF ((at_i(ji,jj).GT.0.15).AND.(zafy.LE.zamy)) THEN 227 vinfor(23) = vinfor(23) + aire(ji,jj) * 1.e-12 ! Perennial ice extent223 vinfor(23) = vinfor(23) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 228 224 ENDIF 229 225 ENDIF … … 245 241 DO ji = 134, 138 246 242 vinfor(83) = vinfor(83) - v_ice(ji,jj) * & 247 e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12 243 e1t(ji,jj)*at_i(ji,jj)*rdt_ice * 1.e-12_wp 248 244 vinfor(84) = vinfor(84) - v_ice(ji,jj) * & 249 e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12 245 e1t(ji,jj)*vt_i(ji,jj)*rdt_ice * 1.e-12_wp 250 246 END DO 251 247 … … 258 254 DO ji = fs_2, fs_jpim1 ! vector opt. 259 255 IF( tms(ji,jj) == 1 ) THEN 260 vinfor(4) = vinfor(4) + at_i(ji,jj)*aire(ji,jj) * 1.e-12 !ice area261 IF (at_i(ji,jj).GT.0.15) vinfor(6) = vinfor(6) + aire(ji,jj) * 1.e-12 !ice extent262 vinfor(8) = vinfor(8) + vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !ice volume263 vinfor(10) = vinfor(10) + vt_s(ji,jj)*aire(ji,jj) * 1.e-12 !snow volume264 vinfor(16) = vinfor(16) + ot_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !mean age265 vinfor(30) = vinfor(30) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12 !mean salinity256 vinfor(4) = vinfor(4) + at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice area 257 IF (at_i(ji,jj).GT.0.15) vinfor(6) = vinfor(6) + aire(ji,jj) * 1.e-12_wp !ice extent 258 vinfor(8) = vinfor(8) + vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !ice volume 259 vinfor(10) = vinfor(10) + vt_s(ji,jj)*aire(ji,jj) * 1.e-12_wp !snow volume 260 vinfor(16) = vinfor(16) + ot_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean age 261 vinfor(30) = vinfor(30) + smt_i(ji,jj)*vt_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !mean salinity 266 262 ! this diagnostic is not well computed (weighted by vol instead 267 263 ! of area) 268 264 vinfor(32) = vinfor(32) + vt_i(ji,jj)*( u_ice(ji,jj)*u_ice(ji,jj) + & 269 265 v_ice(ji,jj)*v_ice(ji,jj) )*aire(ji,jj)/1.0e12 !ice vel 270 vinfor(54) = vinfor(54) + at_i(ji,jj)*emps(ji,jj)*aire(ji,jj) * 1.e-12 ! Total salt flux271 vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) * 1.e-12 ! Brine drainage salt flux272 vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) * 1.e-12 ! Equivalent salt flux273 vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12 !SST274 vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12 !SSS275 vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12 ! snow temperature276 vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12 ! ice enthalpy277 vinfor(70) = vinfor(70) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12 !ice volume278 vinfor(72) = vinfor(72) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12 !ice volume279 vinfor(74) = vinfor(74) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12 !ice volume280 vinfor(76) = vinfor(76) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12 !ice volume281 vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12 !ice volume266 vinfor(54) = vinfor(54) + at_i(ji,jj)*emps(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Total salt flux 267 vinfor(56) = vinfor(56) + at_i(ji,jj)*fsbri(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Brine drainage salt flux 268 vinfor(58) = vinfor(58) + at_i(ji,jj)*fseqv(ji,jj)*aire(ji,jj) * 1.e-12_wp ! Equivalent salt flux 269 vinfor(60) = vinfor(60) +(sst_m(ji,jj)+rt0)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !SST 270 vinfor(62) = vinfor(62) + sss_m(ji,jj)*at_i(ji,jj)*aire(ji,jj) * 1.e-12_wp !SSS 271 vinfor(66) = vinfor(66) + et_s(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! snow temperature 272 vinfor(68) = vinfor(68) + et_i(ji,jj)/1.0e9*aire(ji,jj) * 1.e-12_wp ! ice enthalpy 273 vinfor(70) = vinfor(70) + v_i(ji,jj,1)*aire(ji,jj) * 1.e-12_wp !ice volume 274 vinfor(72) = vinfor(72) + v_i(ji,jj,2)*aire(ji,jj) * 1.e-12_wp !ice volume 275 vinfor(74) = vinfor(74) + v_i(ji,jj,3)*aire(ji,jj) * 1.e-12_wp !ice volume 276 vinfor(76) = vinfor(76) + v_i(ji,jj,4)*aire(ji,jj) * 1.e-12_wp !ice volume 277 vinfor(78) = vinfor(78) + v_i(ji,jj,5)*aire(ji,jj) * 1.e-12_wp !ice volume 282 278 vinfor(80) = 0.0 283 vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) * 1.e-12 ! mass flux279 vinfor(82) = vinfor(82) + emp(ji,jj)*aire(ji,jj) * 1.e-12_wp ! mass flux 284 280 ENDIF 285 281 END DO … … 289 285 DO jj = 2, njeqm1 290 286 DO ji = fs_2, fs_jpim1 ! vector opt. 291 vinfor(12) = vinfor(12) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !undef def ice volume287 vinfor(12) = vinfor(12) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !undef def ice volume 292 288 END DO 293 289 END DO … … 320 316 DO ji = fs_2, fs_jpim1 ! vector opt. 321 317 IF( tms(ji,jj) == 1 ) THEN 322 vinfor(34) = vinfor(34) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12 !ice volume323 vinfor(36) = vinfor(36) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12 !ice volume318 vinfor(34) = vinfor(34) + d_v_i_trp(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 319 vinfor(36) = vinfor(36) + d_v_i_thd(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !ice volume 324 320 ENDIF 325 321 END DO … … 330 326 DO ji = fs_2, fs_jpim1 ! vector opt. 331 327 IF( tms(ji,jj) == 1 ) THEN 332 vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12 !th growth rates333 vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12 334 vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12 335 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12 336 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12 337 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12 / rdt_ice ! volume acc in OW328 vinfor(38) = vinfor(38) + diag_sni_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp !th growth rates 329 vinfor(40) = vinfor(40) + diag_lat_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 330 vinfor(42) = vinfor(42) + diag_bot_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 331 vinfor(44) = vinfor(44) + diag_dyn_gr(ji,jj)*aire(ji,jj) * 1.e-12_wp 332 vinfor(46) = vinfor(46) + dv_dt_thd(ji,jj,5)*aire(ji,jj) * 1.e-12_wp 333 vinfor(48) = vinfor(48) + v_newice(ji,jj) *aire(ji,jj) * 1.e-12_wp / rdt_ice ! volume acc in OW 338 334 ENDIF 339 335 END DO … … 344 340 DO ji = fs_2, fs_jpim1 ! vector opt. 345 341 IF( tms(ji,jj) == 1 ) THEN 346 vinfor(64) = vinfor(64) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 342 vinfor(64) = vinfor(64) + t_su(ji,jj,jl)*a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 347 343 ENDIF 348 344 END DO … … 356 352 DO ji = fs_2, fs_jpim1 ! vector opt. 357 353 IF( tms(ji,jj) == 1 ) THEN 358 zafy = 0. 359 zamy = 0. 354 zafy = 0._wp 355 zamy = 0._wp 360 356 DO jl = 1, jpl 361 IF( (o_i(ji,jj,jl) - zshift_date) < 0. ) THEN362 vinfor(18) = vinfor(18) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! FY ice area363 vinfor(26) = vinfor(26) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! FY ice volume357 IF( (o_i(ji,jj,jl) - zshift_date) < 0._wp ) THEN 358 vinfor(18) = vinfor(18) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice area 359 vinfor(26) = vinfor(26) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! FY ice volume 364 360 zafy = zafy + a_i(ji,jj,jl) 365 vinfor(50) = vinfor(50) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !FY ice salinity361 vinfor(50) = vinfor(50) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 366 362 ENDIF 367 IF( (o_i(ji,jj,jl) - zshift_date) > 0. ) THEN368 vinfor(20) = vinfor(20) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 ! MY ice area369 vinfor(28) = vinfor(28) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 370 vinfor(52) = vinfor(52) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12 !FY ice salinity363 IF( (o_i(ji,jj,jl) - zshift_date) > 0._wp ) THEN 364 vinfor(20) = vinfor(20) + a_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp ! MY ice area 365 vinfor(28) = vinfor(28) + v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp 366 vinfor(52) = vinfor(52) + sm_i(ji,jj,jl)*v_i(ji,jj,jl)*aire(ji,jj) * 1.e-12_wp !FY ice salinity 371 367 zamy = zamy + a_i(ji,jj,jl) 372 368 ENDIF 373 369 END DO ! jl 374 370 IF ((at_i(ji,jj).GT.0.15).AND.(zafy.GT.zamy)) THEN 375 vinfor(22) = vinfor(22) + aire(ji,jj) * 1.e-12 ! Seasonal ice extent371 vinfor(22) = vinfor(22) + aire(ji,jj) * 1.e-12_wp ! Seasonal ice extent 376 372 ENDIF 377 373 IF ((at_i(ji,jj).GT.0.15).AND.(zafy.LE.zamy)) THEN 378 vinfor(24) = vinfor(24) + aire(ji,jj) * 1.e-12 ! Perennial ice extent374 vinfor(24) = vinfor(24) + aire(ji,jj) * 1.e-12_wp ! Perennial ice extent 379 375 ENDIF 380 376 ENDIF ! tms … … 397 393 naveg = 0 398 394 DO jv = 1, nvinfo 399 vinfom(jv) = 0. 395 vinfom(jv) = 0._wp 400 396 END DO 401 397 !MV ENDIF … … 568 564 !--Initialisation of the arrays for the accumulation 569 565 DO jv = 1, nvinfo 570 vinfom(jv) = 0. 566 vinfom(jv) = 0._wp 571 567 END DO 572 568 naveg = 0 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r2477 r2528 4 4 !! Sea-Ice dynamics : 5 5 !!====================================================================== 6 !! history : 1.0 ! 2002-08 (C. Ethe, G. Madec) original VP code 7 !! 3.0 ! 2007-03 (MA Morales Maqueda, S. Bouillon, M. Vancoppenolle) LIM3: EVP-Cgrid 8 !!---------------------------------------------------------------------- 6 9 #if defined key_lim3 7 10 !!---------------------------------------------------------------------- … … 11 14 !! lim_dyn_init : initialization and namelist read 12 15 !!---------------------------------------------------------------------- 13 !! * Modules used14 16 USE phycst 15 17 USE in_out_manager ! I/O manager … … 28 30 PRIVATE 29 31 30 !! * Accessibility 31 PUBLIC lim_dyn ! routine called by ice_step 32 PUBLIC lim_dyn ! routine called by ice_step 32 33 33 34 !! * Substitutions 34 35 # include "vectopt_loop_substitute.h90" 35 36 !! * Module variables 37 REAL(wp) :: rone = 1.e0 ! constant value 38 39 !!---------------------------------------------------------------------- 40 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008) 36 !!---------------------------------------------------------------------- 37 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 41 38 !! $Id$ 42 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 43 !!---------------------------------------------------------------------- 44 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 40 !!---------------------------------------------------------------------- 45 41 CONTAINS 46 42 … … 57 53 !! - computation of the stress at the ocean surface 58 54 !! - treatment of the case if no ice dynamic 59 !! History :60 !! 1.0 ! 01-04 (LIM) Original code61 !! 2.0 ! 02-08 (C. Ethe, G. Madec) F90, mpp62 !! 3.0 ! 2007-03 (M.A. Morales Maqueda, S. Bouillon, M. Vancoppenolle)63 !! LIM3, EVP, C-grid64 55 !!------------------------------------------------------------------------------------ 65 56 INTEGER, INTENT(in) :: kt ! number of iteration 66 !! * Local variables57 !! 67 58 INTEGER :: ji, jj, jl, ja ! dummy loop indices 68 59 INTEGER :: i_j1, i_jpj ! Starting/ending j-indices for rheology 69 REAL(wp) :: zcoef ! temporaryscalar60 REAL(wp) :: zcoef ! local scalar 70 61 REAL(wp), DIMENSION(jpj) :: zind ! i-averaged indicator of sea-ice 71 62 REAL(wp), DIMENSION(jpj) :: zmsk ! i-averaged of tmask … … 91 82 ! --------------------------------------------------- 92 83 93 IF( lk_mpp .OR. nbit_cmp == 1) THEN ! mpp: compute over the whole domain84 IF( lk_mpp .OR. lk_mpp_rep ) THEN ! mpp: compute over the whole domain 94 85 i_j1 = 1 95 86 i_jpj = jpj … … 156 147 zv_io(:,:) = v_ice(:,:) - ssv_m(:,:) 157 148 ! frictional velocity at T-point 149 zcoef = 0.5 * cw 158 150 DO jj = 2, jpjm1 159 151 DO ji = fs_2, fs_jpim1 ! vector opt. 160 ust2s(ji,jj) = 0.5 * cw & 161 & * ( zu_io(ji,jj) * zu_io(ji,jj) + zu_io(ji-1,jj) * zu_io(ji-1,jj) & 162 & + zv_io(ji,jj) * zv_io(ji,jj) + zv_io(ji,jj-1) * zv_io(ji,jj-1) ) * tms(ji,jj) 152 ust2s(ji,jj) = zcoef * ( zu_io(ji,jj) * zu_io(ji,jj) + zu_io(ji-1,jj) * zu_io(ji-1,jj) & 153 & + zv_io(ji,jj) * zv_io(ji,jj) + zv_io(ji,jj-1) * zv_io(ji,jj-1) ) * tms(ji,jj) 163 154 END DO 164 155 END DO … … 169 160 DO jj = 2, jpjm1 170 161 DO ji = fs_2, fs_jpim1 ! vector opt. 171 ust2s(ji,jj) = zcoef * tms(ji,jj) *SQRT( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) &172 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1))162 ust2s(ji,jj) = zcoef * SQRT( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 163 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) * tms(ji,jj) 173 164 END DO 174 165 END DO 175 166 ! 176 167 ENDIF 177 178 168 CALL lbc_lnk( ust2s, 'T', 1. ) ! T-point 179 169 … … 216 206 END DO 217 207 ENDIF 218 208 ! 219 209 END SUBROUTINE lim_dyn 210 220 211 221 212 SUBROUTINE lim_dyn_init … … 230 221 !! 231 222 !! ** input : Namelist namicedyn 232 !!233 !! history :234 !! 8.5 ! 03-08 (C. Ethe) original code235 !! 9.0 ! 07-03 (MA Morales Maqueda, S. Bouillon, M. Vancoppenolle)236 !! EVP-Cgrid-LIM3237 223 !!------------------------------------------------------------------- 238 224 NAMELIST/namicedyn/ epsd, alpha, & … … 242 228 !!------------------------------------------------------------------- 243 229 244 ! Define the initial parameters 245 ! ------------------------- 246 247 ! Read Namelist namicedyn 248 REWIND ( numnam_ice ) 249 READ ( numnam_ice , namicedyn ) 250 IF(lwp) THEN 230 REWIND( numnam_ice ) ! Read Namelist namicedyn 231 READ ( numnam_ice , namicedyn ) 232 233 IF(lwp) THEN ! control print 251 234 WRITE(numout,*) 252 235 WRITE(numout,*) 'lim_dyn_init : ice parameters for ice dynamics ' … … 270 253 WRITE(numout,*) ' timescale for elastic waves telast = ', telast 271 254 WRITE(numout,*) ' coefficient for the solution of int. stresses alphaevp = ', alphaevp 272 273 ENDIF 274 275 usecc2 = 1.0 / ( ecc * ecc ) 276 rhoco = rau0 * cw 255 ENDIF 256 ! 257 IF( angvg /= 0._wp ) THEN 258 CALL ctl_warn( 'lim_dyn_init: turning angle for oceanic stress not properly coded for EVP ', & 259 & '(see limsbc module). We force angvg = 0._wp' ) 260 angvg = 0._wp 261 ENDIF 262 263 usecc2 = 1._wp / ( ecc * ecc ) 264 rhoco = rau0 * cw 277 265 angvg = angvg * rad 278 266 sangvg = SIN( angvg ) 279 267 cangvg = COS( angvg ) 280 pstarh = pstar / 2.0268 pstarh = pstar * 0.5_wp 281 269 282 270 ! Diffusion coefficients. -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r1465 r2528 32 32 # include "vectopt_loop_substitute.h90" 33 33 !!---------------------------------------------------------------------- 34 !! LIM 2.0, UCL-LOCEAN-IPSL (2005)34 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 35 35 !! $Id$ 36 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt36 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 37 37 !!---------------------------------------------------------------------- 38 38 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r1471 r2528 4 4 !! Initialisation of diagnostics ice variables 5 5 !!====================================================================== 6 !! History : 2.0 ! 2004-01 (C. Ethe, G. Madec) Original code 7 !!---------------------------------------------------------------------- 6 8 #if defined key_lim3 7 9 !!---------------------------------------------------------------------- … … 11 13 !! lim_istate_init : initialization of ice state and namelist read 12 14 !!---------------------------------------------------------------------- 13 !! * Modules used 14 USE phycst 15 USE oce ! dynamics and tracers variables 16 USE dom_oce 17 USE sbc_oce ! Surface boundary condition: ocean fields 18 USE par_ice ! ice parameters 19 USE eosbn2 ! equation of state 20 USE in_out_manager 21 USE dom_ice 22 USE ice 23 USE lbclnk 15 USE phycst ! physical constant 16 USE oce ! dynamics and tracers variables 17 USE dom_oce ! ocean domain 18 USE sbc_oce ! Surface boundary condition: ocean fields 19 USE eosbn2 ! equation of state 20 USE ice ! sea-ice variables 21 USE par_ice ! ice parameters 22 USE dom_ice ! sea-ice domain 23 USE in_out_manager ! I/O manager 24 USE lbclnk ! lateral boundary condition - MPP exchanges 24 25 25 26 IMPLICIT NONE 26 27 PRIVATE 27 28 28 !! * Accessibility 29 PUBLIC lim_istate ! routine called by lim_init.F90 30 31 !! * Module variables 32 REAL(wp) :: & !!! ** init namelist (namiceini) ** 33 ttest = 2.0 , & ! threshold water temperature for initial sea ice 34 hninn = 0.5 , & ! initial snow thickness in the north 35 hginn_u = 2.5 , & ! initial ice thickness in the north 36 aginn_u = 0.7 , & ! initial leads area in the north 37 hginn_d = 5.0 , & ! initial ice thickness in the north 38 aginn_d = 0.25 , & ! initial leads area in the north 39 hnins = 0.1 , & ! initial snow thickness in the south 40 hgins_u = 1.0 , & ! initial ice thickness in the south 41 agins_u = 0.7 , & ! initial leads area in the south 42 hgins_d = 2.0 , & ! initial ice thickness in the south 43 agins_d = 0.2 , & ! initial leads area in the south 44 sinn = 6.301 , & ! initial salinity 45 sins = 6.301 46 47 REAL(wp) :: & ! constant values 48 zzero = 0.0 , & 49 zone = 1.0 50 51 !!---------------------------------------------------------------------- 52 !! LIM 3.0, UCL-LOCEAN-IPSL (2008) 29 PUBLIC lim_istate ! routine called by lim_init.F90 30 31 ! !!** init namelist (namiceini) ** 32 REAL(wp) :: ttest = 2.0_wp ! threshold water temperature for initial sea ice 33 REAL(wp) :: hninn = 0.5_wp ! initial snow thickness in the north 34 REAL(wp) :: hginn_u = 2.5_wp ! initial ice thickness in the north 35 REAL(wp) :: aginn_u = 0.7_wp ! initial leads area in the north 36 REAL(wp) :: hginn_d = 5.0_wp ! initial ice thickness in the north 37 REAL(wp) :: aginn_d = 0.25_wp ! initial leads area in the north 38 REAL(wp) :: hnins = 0.1_wp ! initial snow thickness in the south 39 REAL(wp) :: hgins_u = 1.0_wp ! initial ice thickness in the south 40 REAL(wp) :: agins_u = 0.7_wp ! initial leads area in the south 41 REAL(wp) :: hgins_d = 2.0_wp ! initial ice thickness in the south 42 REAL(wp) :: agins_d = 0.2_wp ! initial leads area in the south 43 REAL(wp) :: sinn = 6.301_wp ! initial salinity 44 REAL(wp) :: sins = 6.301_wp ! 45 46 !!---------------------------------------------------------------------- 47 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 53 48 !! $Id$ 54 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 55 !!---------------------------------------------------------------------- 56 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 !!---------------------------------------------------------------------- 57 51 CONTAINS 58 52 … … 65 59 !! ** Method : restart from a state defined in a binary file 66 60 !! or from arbitrary sea-ice conditions 67 !! 68 !! History : 69 !! 2.0 ! 01-04 (C. Ethe, G. Madec) Original code 70 !!-------------------------------------------------------------------- 71 72 !! * Local variables 61 !!------------------------------------------------------------------- 73 62 INTEGER :: ji, jj, jk, jl ! dummy loop indices 74 75 REAL(wp) :: & ! temporary scalar 76 zeps6, zeps, ztmelts, & 77 epsi06 78 REAL(wp), DIMENSION(jpm) :: & 79 zgfactorn, zhin, & 80 zgfactors, zhis 81 REAL(wp) :: & 82 zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs 83 REAL(wp), DIMENSION(jpi,jpj) :: zidto ! ice indicator 63 REAL(wp) :: zeps6, zeps, ztmelts, epsi06 ! local scalars 64 REAL(wp) :: zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs 65 REAL(wp), DIMENSION(jpm) :: zgfactorn, zhin 66 REAL(wp), DIMENSION(jpm) :: zgfactors, zhis 67 REAL(wp), DIMENSION(jpi,jpj) :: zidto ! ice indicator 84 68 !-------------------------------------------------------------------- 85 69 … … 87 71 ! 1) Preliminary things 88 72 !-------------------------------------------------------------------- 89 epsi06 = 1. 0e-673 epsi06 = 1.e-6_wp 90 74 91 75 CALL lim_istate_init ! reading the initials parameters of the ice … … 116 100 117 101 ! constants for heat contents 118 zeps = 1. 0d-20119 zeps6 = 1. 0d-06102 zeps = 1.e-20_wp 103 zeps6 = 1.e-06_wp 120 104 121 105 ! zgfactor for initial ice distribution 122 zgfactorn(:) = 0. 0123 zgfactors(:) = 0. 0106 zgfactorn(:) = 0._wp 107 zgfactors(:) = 0._wp 124 108 125 109 ! first ice type 126 110 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 127 zhin (1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0128 zgfactorn(1) = zgfactorn(1) + exp(-(zhin(1)-hginn_u)*(zhin(1)-hginn_u) /2.0)129 zhis (1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0130 zgfactors(1) = zgfactors(1) + exp(-(zhis(1)-hgins_u)*(zhis(1)-hgins_u) /2.0)111 zhin (1) = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 112 zgfactorn(1) = zgfactorn(1) + exp(-(zhin(1)-hginn_u)*(zhin(1)-hginn_u) * 0.5_wp ) 113 zhis (1) = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 114 zgfactors(1) = zgfactors(1) + exp(-(zhis(1)-hgins_u)*(zhis(1)-hgins_u) * 0.5_wp ) 131 115 END DO ! jl 132 116 zgfactorn(1) = aginn_u / zgfactorn(1) … … 135 119 ! ------------- 136 120 ! new distribution, polynom of second order, conserving area and volume 137 zh1 = 0. 0138 zh2 = 0. 0139 zh3 = 0. 0121 zh1 = 0._wp 122 zh2 = 0._wp 123 zh3 = 0._wp 140 124 DO jl = 1, jpl 141 zh = ( hi_max(jl-1) + hi_max(jl) ) / 2.0125 zh = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 142 126 zh1 = zh1 + zh 143 zh2 = zh2 + zh *zh144 zh3 = zh3 + zh *zh*zh127 zh2 = zh2 + zh * zh 128 zh3 = zh3 + zh * zh * zh 145 129 END DO 146 130 IF(lwp) WRITE(numout,*) ' zh1 : ', zh1 … … 148 132 IF(lwp) WRITE(numout,*) ' zh3 : ', zh3 149 133 150 zvol = aginn_u *hginn_u134 zvol = aginn_u * hginn_u 151 135 zare = aginn_u 152 IF ( jpl .GE.2 ) THEN136 IF( jpl >= 2 ) THEN 153 137 zbn = ( zvol*zh2 - zare*zh3 ) / ( zh2*zh2 - zh1*zh3) 154 138 zan = ( zare - zbn*zh1 ) / zh2 … … 160 144 IF(lwp) WRITE(numout,*) ' zan : ', zan 161 145 162 zvol = agins_u *hgins_u146 zvol = agins_u * hgins_u 163 147 zare = agins_u 164 IF ( jpl .GE.2 ) THEN148 IF( jpl >= 2 ) THEN 165 149 zbs = ( zvol*zh2 - zare*zh3 ) / ( zh2*zh2 - zh1*zh3) 166 150 zas = ( zare - zbs*zh1 ) / zh2 … … 205 189 !--- Northern hemisphere 206 190 !---------------------------------------------------------------- 207 IF( fcor(ji,jj) >= 0. e0) THEN191 IF( fcor(ji,jj) >= 0._wp ) THEN 208 192 209 193 !----------------------- … … 453 437 ENDIF ! on fcor 454 438 455 END DO456 END DO439 END DO 440 END DO 457 441 458 442 !-------------------------------------------------------------------- … … 494 478 495 479 DO jl = 1, jpl 496 497 480 CALL lbc_lnk( a_i(:,:,jl) , 'T', 1. ) 498 481 CALL lbc_lnk( v_i(:,:,jl) , 'T', 1. ) … … 500 483 CALL lbc_lnk( smv_i(:,:,jl), 'T', 1. ) 501 484 CALL lbc_lnk( oa_i(:,:,jl) , 'T', 1. ) 502 485 ! 503 486 CALL lbc_lnk( ht_i(:,:,jl) , 'T', 1. ) 504 487 CALL lbc_lnk( ht_s(:,:,jl) , 'T', 1. ) … … 514 497 CALL lbc_lnk(e_i(:,:,jk,jl), 'T', 1. ) 515 498 END DO 516 517 a_i (:,:,jl) = tms(:,:) * a_i(:,:,jl) 518 499 ! 500 a_i(:,:,jl) = tms(:,:) * a_i(:,:,jl) 519 501 END DO 520 502 521 503 CALL lbc_lnk( at_i , 'T', 1. ) 522 504 at_i(:,:) = tms(:,:) * at_i(:,:) ! put 0 over land 523 505 ! 524 506 CALL lbc_lnk( fsbbq , 'T', 1. ) 525 507 ! 526 508 END SUBROUTINE lim_istate 509 527 510 528 511 SUBROUTINE lim_istate_init … … 532 515 !! ** Purpose : Definition of initial state of the ice 533 516 !! 534 !! ** Method : Read the namiceini namelist and check the parameter535 !! values called at the first timestep (nit000)517 !! ** Method : Read the namiceini namelist and check the parameter 518 !! values called at the first timestep (nit000) 536 519 !! 537 !! ** input : 538 !! Namelist namiceini 539 !! 540 !! history : 541 !! 8.5 ! 03-08 (C. Ethe) original code 520 !! ** input : namelist namiceini 542 521 !!----------------------------------------------------------------------------- 543 NAMELIST/namiceini/ ttest, hninn, hginn_u, aginn_u, hginn_d, aginn_d, hnins, &544 hgins_u, agins_u, hgins_d, agins_d, sinn, sins522 NAMELIST/namiceini/ ttest, hninn, hginn_u, aginn_u, hginn_d, aginn_d, hnins, & 523 & hgins_u, agins_u, hgins_d, agins_d, sinn, sins 545 524 !!----------------------------------------------------------------------------- 546 547 ! Define the initial parameters 548 ! ------------------------- 549 550 ! Read Namelist namiceini 551 REWIND ( numnam_ice ) 525 ! 526 REWIND ( numnam_ice ) ! Read Namelist namiceini 552 527 READ ( numnam_ice , namiceini ) 553 IF(lwp) THEN 528 ! 529 IF(lwp) THEN ! control print 554 530 WRITE(numout,*) 555 531 WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' … … 569 545 WRITE(numout,*) ' initial ice salinity in the south sins = ', sins 570 546 ENDIF 571 547 ! 572 548 END SUBROUTINE lim_istate_init 573 549 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r2477 r2528 86 86 87 87 !!---------------------------------------------------------------------- 88 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)88 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 89 89 !! $Id$ 90 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)90 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 91 91 !!---------------------------------------------------------------------- 92 92 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r2477 r2528 1 1 MODULE limitd_th 2 #if defined key_lim33 !!----------------------------------------------------------------------4 !! 'key_lim3' : LIM3 sea-ice model5 !!----------------------------------------------------------------------6 2 !!====================================================================== 7 3 !! *** MODULE limitd_th *** … … 9 5 !! computation of changes in g(h) 10 6 !!====================================================================== 11 7 #if defined key_lim3 12 8 !!---------------------------------------------------------------------- 13 !! * Modules used 9 !! 'key_lim3' : LIM3 sea-ice model 10 !!---------------------------------------------------------------------- 11 !!---------------------------------------------------------------------- 14 12 USE dom_ice 15 13 USE par_oce ! ocean parameters … … 17 15 USE phycst ! physical constants (ocean directory) 18 16 USE thd_ice 19 USE in_out_manager20 17 USE ice 21 18 USE par_ice … … 24 21 USE limcons 25 22 USE prtctl ! Print control 23 USE in_out_manager 26 24 USE lib_mpp 27 25 … … 29 27 PRIVATE 30 28 31 !! * Routine accessibility32 29 PUBLIC lim_itd_th ! called by ice_stp 33 30 PUBLIC lim_itd_th_rem … … 36 33 PUBLIC lim_itd_shiftice 37 34 38 !! * Module variables39 35 REAL(wp) :: & ! constant values 40 36 epsi20 = 1e-20 , & … … 44 40 45 41 !!---------------------------------------------------------------------- 46 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)42 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 47 43 !! $Id$ 48 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 45 !!---------------------------------------------------------------------- 50 46 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limmsh.F90
r1923 r2528 24 24 25 25 !!---------------------------------------------------------------------- 26 !! NEMO/LIM 3.2, UCL-ASTR-LOCEAN-IPSL (2009)26 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 27 27 !! $Id$ 28 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)28 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 29 29 !!---------------------------------------------------------------------- 30 30 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r2477 r2528 7 7 !! 3.0 ! 2008-03 (M. Vancoppenolle) LIM3 8 8 !! - ! 2008-11 (M. Vancoppenolle, S. Bouillon, Y. Aksenov) add surface tilt in ice rheolohy 9 !! 3.3 ! 2009-05 (G.Garric) addition of the lim2_evp cas 9 10 !!---------------------------------------------------------------------- 10 #if defined key_lim3 11 #if defined key_lim3 || ( defined key_lim2 && ! defined key_lim2_vp ) 11 12 !!---------------------------------------------------------------------- 12 !! 'key_lim3' LIM3 sea-ice model 13 !! 'key_lim3' OR LIM-3 sea-ice model 14 !! 'key_lim2' AND NOT 'key_lim2_vp' VP LIM-2 sea-ice model 13 15 !!---------------------------------------------------------------------- 14 16 !! lim_rhg : computes ice velocities 15 17 !!---------------------------------------------------------------------- 16 !! * Modules used 17 USE phycst 18 USE par_oce 19 USE dom_oce 20 USE dom_ice 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE sbc_ice ! Surface boundary condition: ice fields 23 USE ice 24 USE lbclnk 25 USE lib_mpp 26 USE in_out_manager ! I/O manager 27 USE limitd_me 28 USE prtctl ! Print control 29 18 USE phycst ! Physical constant 19 USE par_oce ! Ocean parameters 20 USE dom_oce ! Ocean domain 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE sbc_ice ! Surface boundary condition: ice fields 23 USE lbclnk ! Lateral Boundary Condition / MPP link 24 USE lib_mpp ! MPP library 25 USE in_out_manager ! I/O manager 26 USE prtctl ! Print control 27 #if defined key_lim3 28 USE ice ! LIM-3: ice variables 29 USE dom_ice ! LIM-3: ice domain 30 USE limitd_me ! LIM-3: 31 #else 32 USE ice_2 ! LIM2: ice variables 33 USE dom_ice_2 ! LIM2: ice domain 34 #endif 30 35 31 36 IMPLICIT NONE 32 37 PRIVATE 33 38 34 !! * Routine accessibility 35 PUBLIC lim_rhg ! routine called by lim_dyn 36 39 PUBLIC lim_rhg ! routine called by lim_dyn (or lim_dyn_2) 40 41 REAL(wp) :: rzero = 0._wp ! constant values 42 REAL(wp) :: rone = 1._wp ! constant values 43 37 44 !! * Substitutions 38 45 # include "vectopt_loop_substitute.h90" 39 40 !! * Module variables41 REAL(wp) :: & ! constant values42 rzero = 0.e0 , &43 rone = 1.e044 46 !!---------------------------------------------------------------------- 45 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)47 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 46 48 !! $Id$ 47 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 50 !!---------------------------------------------------------------------- 49 50 51 CONTAINS 51 52 52 53 SUBROUTINE lim_rhg( k_j1, k_jpj ) 53 54 54 !!------------------------------------------------------------------- 55 55 !! *** SUBROUTINE lim_rhg *** … … 98 98 !! e.g. in the Canadian Archipelago 99 99 !! 100 !! ** References : Hunke and Dukowicz, JPO97 101 !! Bouillon et al., 08, in prep (update this when 102 !! published) 103 !! Vancoppenolle et al., OM08 100 !! References : Hunke and Dukowicz, JPO97 101 !! Bouillon et al., Ocean Modelling 2009 102 !! Vancoppenolle et al., Ocean Modelling 2008 103 !!------------------------------------------------------------------- 104 INTEGER, INTENT(in) :: k_j1 ! southern j-index for ice computation 105 INTEGER, INTENT(in) :: k_jpj ! northern j-index for ice computation 104 106 !! 105 !!------------------------------------------------------------------- 106 ! * Arguments 107 ! 108 INTEGER, INTENT(in) :: & 109 k_j1 , & !: southern j-index for ice computation 110 k_jpj !: northern j-index for ice computation 111 112 ! * Local variables 113 INTEGER :: ji, jj !: dummy loop indices 114 115 INTEGER :: & 116 jter !: temporary integers 117 107 INTEGER :: ji, jj ! dummy loop indices 108 INTEGER :: jter ! local integers 118 109 CHARACTER (len=50) :: charout 119 120 REAL(wp) :: & 121 zt11, zt12, zt21, zt22, & !: temporary scalars 122 ztagnx, ztagny, & !: wind stress on U/V points 123 delta ! 124 125 REAL(wp) :: & 126 za, & !: 127 zstms, & !: temporary scalar for ice strength 128 zsang, & !: temporary scalar for coriolis term 129 zmask !: mask for the computation of ice mass 110 REAL(wp) :: zt11, zt12, zt21, zt22, ztagnx, ztagny, delta ! 111 REAL(wp) :: za, zstms, zsang, zmask ! local scalars 130 112 131 113 REAL(wp),DIMENSION(jpi,jpj) :: & … … 145 127 146 128 REAL(wp) :: & 147 dtevp, & !: time step for subcycling 148 dtotel, & !: 149 ecc2, & !: square of yield ellipse eccenticity 150 z0, & !: temporary scalar 151 zr, & !: temporary scalar 152 zcca, zccb, & !: temporary scalars 153 zu_ice2, & !: 154 zv_ice1, & !: 155 zddc, zdtc, & !: temporary array for delta on corners 156 zdst, & !: temporary array for delta on centre 157 zdsshx, zdsshy, & !: term for the gradient of ocean surface 158 sigma1, sigma2 !: internal ice stress 129 dtevp, & ! time step for subcycling 130 dtotel, & ! 131 ecc2, & ! square of yield ellipse eccenticity 132 z0, & ! temporary scalar 133 zr, & ! temporary scalar 134 zcca, zccb, & ! temporary scalars 135 zu_ice2, & ! 136 zv_ice1, & ! 137 zddc, zdtc, & ! temporary array for delta on corners 138 zdst, & ! temporary array for delta on centre 139 zdsshx, zdsshy, & ! term for the gradient of ocean surface 140 sigma1, sigma2 ! internal ice stress 141 142 REAL(wp),DIMENSION(jpi,jpj) :: zf1, zf2 ! arrays for internal stresses 159 143 160 144 REAL(wp),DIMENSION(jpi,jpj) :: & 161 zf1, zf2 !: arrays for internal stresses 162 163 REAL(wp),DIMENSION(jpi,jpj) :: & 164 zdd, zdt, & !: Divergence and tension at centre of grid cells 165 zds, & !: Shear on northeast corner of grid cells 166 deltat, & !: Delta at centre of grid cells 167 deltac, & !: Delta on corners 168 zs1, zs2, & !: Diagonal stress tensor components zs1 and zs2 169 zs12 !: Non-diagonal stress tensor component zs12 145 zdd, zdt, & ! Divergence and tension at centre of grid cells 146 zds, & ! Shear on northeast corner of grid cells 147 deltat, & ! Delta at centre of grid cells 148 deltac, & ! Delta on corners 149 zs1, zs2, & ! Diagonal stress tensor components zs1 and zs2 150 zs12 ! Non-diagonal stress tensor component zs12 170 151 171 152 REAL(wp) :: & 172 zresm , & !: Maximal error on ice velocity 173 zindb , & !: ice (1) or not (0) 174 zdummy !: dummy argument 175 176 REAL(wp),DIMENSION(jpi,jpj) :: & 177 zu_ice , & !: Ice velocity on previous time step 178 zv_ice , & 179 zresr !: Local error on velocity 180 153 zresm , & ! Maximal error on ice velocity 154 zindb , & ! ice (1) or not (0) 155 zdummy ! dummy argument 156 157 REAL(wp),DIMENSION(jpi,jpj) :: zu_ice, zv_ice, zresr ! Local error on velocity 158 !!------------------------------------------------------------------- 159 #if defined key_lim2 && ! defined key_lim2_vp 160 # if defined key_agrif 161 USE ice_2, vt_s => hsnm 162 USE ice_2, vt_i => hicm 163 # else 164 vt_s => hsnm 165 vt_i => hicm 166 # endif 167 at_i(:,:) = 1. - frld(:,:) 168 #endif 181 169 ! 182 170 !------------------------------------------------------------------------------! … … 185 173 ! 186 174 ! Put every vector to 0 187 zpresh (:,:) = 0.0 ; zc1(:,:) = 0.0188 zpreshc(:,:) = 0. 0189 u_ice2 (:,:) = 0.0 ; v_ice1(:,:) = 0.0190 zdd (:,:) = 0.0 ; zdt(:,:) = 0.0 ; zds(:,:) = 0.0191 192 ! Ice strength on T-points 193 CALL lim_itd_me_icestrength( ridge_scheme_swi)194 195 ! Ice mass and temp variables 196 !CDIR NOVERRCHK 197 DO jj = k_j1 , k_jpj 175 zpresh (:,:) = 0._wp ; zc1 (:,:) = 0._wp 176 zpreshc(:,:) = 0._wp 177 u_ice2 (:,:) = 0._wp ; v_ice1(:,:) = 0._wp 178 zdd (:,:) = 0._wp ; zdt (:,:) = 0._wp ; zds(:,:) = 0._wp 179 180 #if defined key_lim3 181 CALL lim_itd_me_icestrength( ridge_scheme_swi ) ! LIM-3: Ice strength on T-points 182 #endif 183 184 !CDIR NOVERRCHK 185 DO jj = k_j1 , k_jpj ! Ice mass and temp variables 198 186 !CDIR NOVERRCHK 199 187 DO ji = 1 , jpi 200 188 zc1(ji,jj) = tms(ji,jj) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 201 zpresh(ji,jj) = tms(ji,jj) * strength(ji,jj) / 2. 189 #if defined key_lim3 190 zpresh(ji,jj) = tms(ji,jj) * strength(ji,jj) * 0.5_wp 191 #endif 202 192 ! tmi = 1 where there is ice or on land 203 tmi(ji,jj) = 1.0 - ( 1.0 - MAX( 0.0 , SIGN ( 1.0 , vt_i(ji,jj) - & 204 epsd ) ) ) * tms(ji,jj) 193 tmi(ji,jj) = 1._wp - ( 1._wp - MAX( 0._wp , SIGN ( 1._wp , vt_i(ji,jj) - epsd ) ) ) * tms(ji,jj) 205 194 END DO 206 195 END DO … … 247 236 DO ji = fs_2, fs_jpim1 248 237 249 zt11 = tms(ji ,jj)*e1t(ji,jj)250 zt12 = tms(ji+1,jj) *e1t(ji+1,jj)251 zt21 = tms(ji,jj )*e2t(ji,jj)252 zt22 = tms(ji,jj+1) *e2t(ji,jj+1)238 zt11 = tms(ji ,jj) * e1t(ji ,jj) 239 zt12 = tms(ji+1,jj) * e1t(ji+1,jj) 240 zt21 = tms(ji,jj ) * e2t(ji,jj ) 241 zt22 = tms(ji,jj+1) * e2t(ji,jj+1) 253 242 254 243 ! Leads area. 255 zfrld1(ji,jj) = ( zt12 * ( 1.0 - at_i(ji,jj) ) + & 256 & zt11 * ( 1.0 - at_i(ji+1,jj) ) ) / ( zt11 + zt12 + epsd ) 257 zfrld2(ji,jj) = ( zt22 * ( 1.0 - at_i(ji,jj) ) + & 258 & zt21 * ( 1.0 - at_i(ji,jj+1) ) ) / ( zt21 + zt22 + epsd ) 244 zfrld1(ji,jj) = ( zt12 * ( 1.0 - at_i(ji,jj) ) + zt11 * ( 1.0 - at_i(ji+1,jj) ) ) / ( zt11 + zt12 + epsd ) 245 zfrld2(ji,jj) = ( zt22 * ( 1.0 - at_i(ji,jj) ) + zt21 * ( 1.0 - at_i(ji,jj+1) ) ) / ( zt21 + zt22 + epsd ) 259 246 260 247 ! Mass, coriolis coeff. and currents 261 248 zmass1(ji,jj) = ( zt12*zc1(ji,jj) + zt11*zc1(ji+1,jj) ) / (zt11+zt12+epsd) 262 249 zmass2(ji,jj) = ( zt22*zc1(ji,jj) + zt21*zc1(ji,jj+1) ) / (zt21+zt22+epsd) 263 zcorl1(ji,jj) = zmass1(ji,jj) * ( e1t(ji+1,jj)*fcor(ji,jj) + & 264 e1t(ji,jj)*fcor(ji+1,jj) ) & 265 / (e1t(ji,jj) + e1t(ji+1,jj) + epsd ) 266 zcorl2(ji,jj) = zmass2(ji,jj) * ( e2t(ji,jj+1)*fcor(ji,jj) + & 267 e2t(ji,jj)*fcor(ji,jj+1) ) & 268 / ( e2t(ji,jj+1) + e2t(ji,jj) + epsd ) 250 zcorl1(ji,jj) = zmass1(ji,jj) * ( e1t(ji+1,jj)*fcor(ji,jj) + e1t(ji,jj)*fcor(ji+1,jj) ) & 251 & / ( e1t(ji,jj) + e1t(ji+1,jj) + epsd ) 252 zcorl2(ji,jj) = zmass2(ji,jj) * ( e2t(ji,jj+1)*fcor(ji,jj) + e2t(ji,jj)*fcor(ji,jj+1) ) & 253 & / ( e2t(ji,jj+1) + e2t(ji,jj) + epsd ) 269 254 ! 270 255 u_oce1(ji,jj) = u_oce(ji,jj) … … 290 275 ! include it later 291 276 292 zdsshx = ( ssh_m(ji+1,jj) - ssh_m(ji,jj))/e1u(ji,jj)293 zdsshy = ( ssh_m(ji,jj+1) - ssh_m(ji,jj))/e2v(ji,jj)277 zdsshx = ( ssh_m(ji+1,jj) - ssh_m(ji,jj) ) / e1u(ji,jj) 278 zdsshy = ( ssh_m(ji,jj+1) - ssh_m(ji,jj) ) / e2v(ji,jj) 294 279 295 280 za1ct(ji,jj) = ztagnx - zmass1(ji,jj) * grav * zdsshx … … 306 291 ! Time step for subcycling 307 292 dtevp = rdt_ice / nevp 308 dtotel = dtevp / ( 2. 0* telast )293 dtotel = dtevp / ( 2._wp * telast ) 309 294 310 295 !-ecc2: square of yield ellipse eccenticrity (reminder: must become a namelist parameter) 311 ecc2 = ecc *ecc296 ecc2 = ecc * ecc 312 297 313 298 !-Initialise stress tensor 314 zs1 (:,:) = stress1_i(:,:)315 zs2 (:,:) = stress2_i(:,:)299 zs1 (:,:) = stress1_i (:,:) 300 zs2 (:,:) = stress2_i (:,:) 316 301 zs12(:,:) = stress12_i(:,:) 317 302 318 ! ----------------------!303 ! !----------------------! 319 304 DO jter = 1 , nevp ! loop over jter ! 320 ! ----------------------!305 ! !----------------------! 321 306 DO jj = k_j1, k_jpj-1 322 zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step307 zu_ice(:,jj) = u_ice(:,jj) ! velocity at previous time step 323 308 zv_ice(:,jj) = v_ice(:,jj) 324 309 END DO … … 385 370 END DO 386 371 END DO 387 CALL lbc_lnk( v_ice1(:,:), 'U', -1. ) 388 CALL lbc_lnk( u_ice2(:,:), 'V', -1. ) 372 CALL lbc_lnk( v_ice1, 'U', -1. ) ; CALL lbc_lnk( u_ice2, 'V', -1. ) ! lateral boundary cond. 389 373 390 374 !CDIR NOVERRCHK … … 394 378 395 379 !- Calculate Delta at centre of grid cells 396 zdst = ( e2u( ji , jj ) * v_ice1(ji,jj)&397 & - e2u( ji-1, jj) * v_ice1(ji-1,jj) &398 & + e1v( ji , jj ) * u_ice2(ji,jj)&399 & - e1v( ji , jj-1) * u_ice2(ji,jj-1) &400 & ) 380 zdst = ( e2u(ji , jj) * v_ice1(ji ,jj) & 381 & - e2u(ji-1, jj) * v_ice1(ji-1,jj) & 382 & + e1v(ji, jj ) * u_ice2(ji,jj ) & 383 & - e1v(ji, jj-1) * u_ice2(ji,jj-1) & 384 & ) & 401 385 & / area(ji,jj) 402 386 403 delta = SQRT( zdd(ji,jj)*zdd(ji,jj) + & 404 & ( zdt(ji,jj)*zdt(ji,jj) + zdst*zdst ) * usecc2 ) 405 deltat(ji,jj) = MAX( SQRT(zdd(ji,jj)**2 + & 406 (zdt(ji,jj)**2 + zdst**2)*usecc2), creepl ) 387 delta = SQRT( zdd(ji,jj)*zdd(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zdst*zdst ) * usecc2 ) 388 deltat(ji,jj) = MAX( SQRT(zdd(ji,jj)**2 + (zdt(ji,jj)**2 + zdst**2)*usecc2), creepl ) 407 389 408 390 !-Calculate stress tensor components zs1 and zs2 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r2477 r2528 4 4 !! Ice restart : write the ice restart file 5 5 !!====================================================================== 6 !! History: - ! 2005-04 (M. Vancoppenolle) Original code 7 !! 3.0 ! 2008-03 (C. Ethe) restart files in using IOM interface 8 !!---------------------------------------------------------------------- 6 9 #if defined key_lim3 7 10 !!---------------------------------------------------------------------- … … 12 15 !! lim_rst_read : read the restart file 13 16 !!---------------------------------------------------------------------- 14 !! * Modules used 15 USE ice 16 USE par_ice 17 USE in_out_manager 18 USE dom_oce 19 USE sbc_oce ! Surface boundary condition: ocean fields 20 USE sbc_ice ! Surface boundary condition: ice fields 21 USE iom 17 USE ice ! sea-ice variables 18 USE par_ice ! sea-ice parameters 19 USE dom_oce ! ocean domain 20 USE sbc_oce ! Surface boundary condition: ocean fields 21 USE sbc_ice ! Surface boundary condition: ice fields 22 USE in_out_manager ! I/O manager 23 USE iom ! I/O library 22 24 23 25 IMPLICIT NONE 24 26 PRIVATE 25 27 26 !! * Accessibility 27 PUBLIC lim_rst_opn ! routine called by icestep.F90 28 PUBLIC lim_rst_write ! routine called by icestep.F90 29 PUBLIC lim_rst_read ! routine called by iceinit.F90 28 PUBLIC lim_rst_opn ! routine called by icestep.F90 29 PUBLIC lim_rst_write ! routine called by icestep.F90 30 PUBLIC lim_rst_read ! routine called by iceini.F90 30 31 31 32 LOGICAL, PUBLIC :: lrst_ice !: logical to control the ice restart write … … 33 34 34 35 !!---------------------------------------------------------------------- 35 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)36 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 36 37 !! $Id$ 37 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 38 !!---------------------------------------------------------------------- 39 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 40 40 CONTAINS 41 41 … … 48 48 INTEGER, INTENT(in) :: kt ! number of iteration 49 49 ! 50 CHARACTER(LEN=20) :: clkt ! ocean time-step de ine as a character50 CHARACTER(LEN=20) :: clkt ! ocean time-step define as a character 51 51 CHARACTER(LEN=50) :: clname ! ice output restart file name 52 52 !!---------------------------------------------------------------------- … … 54 54 IF( kt == nit000 ) lrst_ice = .FALSE. ! default definition 55 55 56 ! to get better performances with NetCDF format: 57 ! we open and define the ice restart file one ice time step before writing the data (-> at nitrst - 2*nn_fsbc + 1) 58 ! except if we write ice restart files every ice time step or if an ice restart file was writen at nitend - 2*nn_fsbc + 1 59 IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nstock == nn_fsbc .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN 56 ! in order to get better performances with NetCDF format, we open and define the ice restart file 57 ! one ice time step before writing the data (-> at nitrst - 2*nn_fsbc + 1), except if we write ice 58 ! restart files every ice time step or if an ice restart file was writen at nitend - 2*nn_fsbc + 1 59 IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nstock == nn_fsbc & 60 & .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN 60 61 ! beware of the format used to write kt (default is i8.8, that should be large enough...) 61 62 IF( nitrst > 99999999 ) THEN ; WRITE(clkt, * ) nitrst … … 75 76 ENDIF 76 77 ENDIF 77 78 ! 78 79 CALL iom_open( clname, numriw, ldwrt = .TRUE., kiolib = jprstlib ) 79 80 lrst_ice = .TRUE. … … 82 83 END SUBROUTINE lim_rst_opn 83 84 85 84 86 SUBROUTINE lim_rst_write( kt ) 85 87 !!---------------------------------------------------------------------- … … 87 89 !! 88 90 !! ** purpose : output of sea-ice variable in a netcdf file 91 !!---------------------------------------------------------------------- 92 INTEGER, INTENT(in) :: kt ! number of iteration 89 93 !! 90 !!---------------------------------------------------------------------- 91 ! Arguments : 92 INTEGER, INTENT(in) :: kt ! number of iteration 93 94 ! Local variables : 94 INTEGER :: ji, jj, jk ,jl ! dummy loop indices 95 INTEGER :: iter 96 CHARACTER(len=15) :: znam 97 CHARACTER(len=1) :: zchar, zchar1 95 98 REAL(wp), DIMENSION(jpi,jpj) :: z2d 96 INTEGER :: ji, jj, jk ,jl97 INTEGER :: iter98 CHARACTER(len=15) :: znam99 CHARACTER(len=1) :: zchar, zchar1100 99 !!---------------------------------------------------------------------- 101 100 … … 111 110 ! ------------------ 112 111 ! ! calendar control 113 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step114 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp) )! date112 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step 113 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp ) ) ! date 115 114 116 115 ! Prognostic variables … … 288 287 ENDIF 289 288 ! 290 291 289 END SUBROUTINE lim_rst_write 290 292 291 293 292 SUBROUTINE lim_rst_read … … 297 296 !! ** purpose : read of sea-ice variable restart in a netcdf file 298 297 !!---------------------------------------------------------------------- 299 ! Local variables300 298 INTEGER :: ji, jj, jk, jl, indx 301 299 REAL(wp) :: zfice, ziter 302 REAL(wp) :: & !parameters for the salinity profile 303 zs_inf, z_slope_s, zsmax, zsmin, zalpha, zindb 304 REAL(wp), DIMENSION(nlay_i) :: zs_zero 305 REAL(wp), DIMENSION(jpi,jpj) :: z2d 306 CHARACTER(len=15) :: znam 307 CHARACTER(len=1) :: zchar, zchar1 308 INTEGER :: jlibalt = jprstlib 309 LOGICAL :: llok 300 REAL(wp) :: zs_inf, z_slope_s, zsmax, zsmin, zalpha, zindb ! local scalars used for the salinity profile 301 REAL(wp), DIMENSION(nlay_i) :: zs_zero 302 REAL(wp), DIMENSION(jpi,jpj) :: z2d 303 CHARACTER(len=15) :: znam 304 CHARACTER(len=1) :: zchar, zchar1 305 INTEGER :: jlibalt = jprstlib 306 LOGICAL :: llok 310 307 !!---------------------------------------------------------------------- 311 308 … … 384 381 END DO 385 382 386 ! Salinity profile 387 !----------------- 388 IF( num_sal == 2 ) THEN 389 ! CALL lim_var_salprof 383 IF( num_sal == 2 ) THEN ! Salinity profile 390 384 DO jl = 1, jpl 391 385 DO jk = 1, nlay_i … … 393 387 DO ji = 1, jpi 394 388 zs_inf = sm_i(ji,jj,jl) 395 z_slope_s = 2. 0*sm_i(ji,jj,jl)/MAX(0.01,ht_i(ji,jj,jl))389 z_slope_s = 2._wp * sm_i(ji,jj,jl) / MAX( 0.01_wp , ht_i(ji,jj,jl) ) 396 390 !- slope of the salinity profile 397 zs_zero(jk) = z_slope_s * ( FLOAT(jk)-1.0/2.0 ) * & 398 ht_i(ji,jj,jl) / FLOAT(nlay_i) 399 zsmax = 4.5 400 zsmin = 3.5 391 zs_zero(jk) = z_slope_s * ( REAL(jk,wp) - 0.5_wp ) * ht_i(ji,jj,jl) / REAL(nlay_i,wp) 392 zsmax = 4.5_wp 393 zsmin = 3.5_wp 401 394 IF( sm_i(ji,jj,jl) .LT. zsmin ) THEN 402 zalpha = 1. 0395 zalpha = 1._wp 403 396 ELSEIF( sm_i(ji,jj,jl) .LT.zsmax ) THEN 404 zalpha = sm_i(ji,jj,jl) / ( zsmin-zsmax) + zsmax / (zsmax-zsmin)397 zalpha = sm_i(ji,jj,jl) / ( zsmin - zsmax ) + zsmax / ( zsmax - zsmin ) 405 398 ELSE 406 zalpha = 0. 0399 zalpha = 0._wp 407 400 ENDIF 408 s_i(ji,jj,jk,jl) = zalpha *zs_zero(jk) + ( 1.0 - zalpha )*zs_inf401 s_i(ji,jj,jk,jl) = zalpha * zs_zero(jk) + ( 1._wp - zalpha ) * zs_inf 409 402 END DO 410 403 END DO … … 558 551 END DO 559 552 END DO 560 553 ! 561 554 CALL iom_close( numrir ) 562 555 ! 563 556 END SUBROUTINE lim_rst_read 564 565 557 566 558 #else -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r2477 r2528 4 4 !! computation of the flux at the sea ice/ocean interface 5 5 !!====================================================================== 6 !! History : - ! 2006-07 (M. Vancoppelle) LIM3 original code 7 !! 3.0 ! 2008-03 (C. Tallandier) surface module 8 !! - ! 2008-04 (C. Tallandier) split in 2 + new ice-ocean coupling 6 !! History : - ! 2006-07 (M. Vancoppelle) LIM3 original code 7 !! 3.0 ! 2008-03 (C. Tallandier) surface module 8 !! - ! 2008-04 (C. Tallandier) split in 2 + new ice-ocean coupling 9 !! 3.3 ! 2010-05 (G. Madec) decrease ocean & ice reference salinities in the Baltic sea 10 !! ! + simplification of the ice-ocean stress calculation 9 11 !!---------------------------------------------------------------------- 10 12 #if defined key_lim3 … … 12 14 !! 'key_lim3' LIM 3.0 sea-ice model 13 15 !!---------------------------------------------------------------------- 14 !! lim_sbc : flux at the ice / ocean interface15 !! ----------------------------------------------------------------------16 USE oce16 !! lim_sbc_flx : updates mass, heat and salt fluxes at the ocean surface 17 !! lim_sbc_tau : update i- and j-stresses, and its modulus at the ocean surface 18 !!---------------------------------------------------------------------- 17 19 USE par_oce ! ocean parameters 18 20 USE par_ice ! ice parameters … … 21 23 USE sbc_oce ! Surface boundary condition: ocean fields 22 24 USE phycst ! physical constants 25 USE albedo ! albedo parameters 23 26 USE ice ! LIM sea-ice variables 24 25 27 USE lbclnk ! ocean lateral boundary condition 26 28 USE in_out_manager ! I/O manager 27 USE albedo ! albedo parameters28 29 USE prtctl ! Print control 29 30 … … 34 35 PUBLIC lim_sbc_tau ! called by sbc_ice_lim 35 36 36 REAL(wp) :: epsi16 = 1.e-16 ! constant values 37 REAL(wp) :: rzero = 0.e0 38 REAL(wp) :: rone = 1.e0 39 40 REAL(wp), DIMENSION(jpi,jpj) :: utau_oce, vtau_oce !: air-ocean surface i- & j-stress [N/m2] 41 REAL(wp), DIMENSION(jpi,jpj) :: tmod_io !: modulus of the ice-ocean relative velocity [m/s] 42 REAL(wp), DIMENSION(jpi,jpj) :: ssu_mb , ssv_mb !: before mean ocean surface currents [m/s] 37 REAL(wp) :: r1_rdtice ! = 1. / rdt_ice 38 REAL(wp) :: epsi16 = 1.e-16_wp ! constant values 39 REAL(wp) :: rzero = 0._wp 40 REAL(wp) :: rone = 1._wp 41 42 REAL(wp), DIMENSION(jpi,jpj) :: utau_oce, vtau_oce ! air-ocean surface i- & j-stress [N/m2] 43 REAL(wp), DIMENSION(jpi,jpj) :: tmod_io ! modulus of the ice-ocean relative velocity [m/s] 44 45 REAL(wp), DIMENSION(jpi,jpj) :: soce_0, sice_0 ! constant SSS and ice salinity used in levitating sea-ice case 43 46 44 47 !! * Substitutions 45 48 # include "vectopt_loop_substitute.h90" 46 49 !!---------------------------------------------------------------------- 47 !! NEMO/LIM 3.2 , UCL-LOCEAN-IPSL (2009)50 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 48 51 !! $Id$ 49 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 50 !!---------------------------------------------------------------------- 51 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 53 !!---------------------------------------------------------------------- 52 54 CONTAINS 53 54 SUBROUTINE lim_sbc_tau( kt, kcpl )55 !!-------------------------------------------------------------------56 !! *** ROUTINE lim_sbc_tau ***57 !!58 !! ** Purpose : Update the ocean surface stresses due to the ice59 !!60 !! ** Action : - compute the ice-ocean stress depending on kcpl:61 !! fluxes at the ice-ocean interface.62 !! Case 0 : old LIM-3 way, computed at ice time-step only63 !! Case 1 : at each ocean time step the stresses are computed64 !! using the current ocean velocity (now)65 !! Case 2 : combination of half case 0 + half case 166 !!67 !! ** Outputs : - utau : sea surface i-stress (ocean referential)68 !! - vtau : sea surface j-stress (ocean referential)69 !!70 !! References : Goosse, H. et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90.71 !! Tartinville et al. 2001 Ocean Modelling, 3, 95-108.72 !!---------------------------------------------------------------------73 INTEGER :: kt ! number of ocean iteration74 INTEGER :: kcpl ! ice-ocean coupling indicator: =0 LIM-3 old case75 ! ! =1 stresses computed using now ocean velocity76 ! ! =2 combination of 0 and 1 cases77 !!78 INTEGER :: ji, jj ! dummy loop indices79 REAL(wp) :: zfrldu, zat_u, zu_ico, zutaui, zu_u, zu_ij, zu_im1j ! temporary scalar80 REAL(wp) :: zfrldv, zat_v, zv_ico, zvtaui, zv_v, zv_ij, zv_ijm1 ! - -81 REAL(wp) :: zsang, zztmp ! - -82 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice83 #if defined key_coupled84 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalb ! albedo of ice under overcast sky85 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zalbp ! albedo of ice under clear sky86 #endif87 !!---------------------------------------------------------------------88 89 IF( kt == nit000 ) THEN90 IF(lwp) WRITE(numout,*)91 IF(lwp) WRITE(numout,*) 'lim_sbc_tau : LIM 3.0 sea-ice - surface ocean momentum fluxes'92 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ '93 ENDIF94 95 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN96 !CDIR NOVERRCHK97 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity98 !CDIR NOVERRCHK99 DO ji = fs_2, fs_jpim1100 zu_ij = u_ice(ji ,jj) - ssu_m(ji ,jj) ! (i ,j)101 zu_im1j = u_ice(ji-1,jj) - ssu_m(ji-1,jj) ! (i-1,j)102 zv_ij = v_ice(ji,jj ) - ssv_m(ji,jj ) ! (i,j )103 zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1) ! (i,j-1)104 zztmp = 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j & ! mean of the square values instead105 & + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) ! of the square of the mean values...106 ! WARNING, here we make an approximation for case 1 and 2: taum is not computed at each time107 ! step but only every nn_fsbc time step. This avoid mutiple avarage to pass from T -> U,V grids108 ! and next from U,V grids to T grid. Taum is used in tke, which should not be too sensitive to109 ! this approximaton...110 taum(ji,jj) = ( 1. - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zztmp111 tmod_io(ji,jj) = SQRT( zztmp )112 END DO113 END DO114 CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. )115 ENDIF116 117 SELECT CASE( kcpl )118 ! !--------------------------------!119 CASE( 0 ) ! LIM 3 old stress computation ! (at ice timestep only)120 ! !--------------------------------!121 ! !* ice stress over ocean with a ice-ocean rotation angle122 DO jj = 1, jpjm1123 zsang = SIGN( 1.e0, gphif(1,jj) ) * sangvg ! change the sinus angle sign in the south hemisphere124 DO ji = 1, fs_jpim1125 zu_u = u_ice(ji,jj) - u_oce(ji,jj) ! ice velocity relative to the ocean126 zv_v = v_ice(ji,jj) - v_oce(ji,jj)127 ! ! quadratic drag formulation with rotation128 !!gm still an error in the rotation, but usually the angle is zero (zsang=0, cangvg=1)129 zutaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * rhoco * ( cangvg * zu_u - zsang * zv_v )130 zvtaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * rhoco * ( cangvg * zv_v + zsang * zu_u )131 ! ! bound for too large stress values132 ! IMPORTANT: the exponential below prevents numerical oscillations in the ice-ocean stress133 ! This is not physically based. A cleaner solution is offer in CASE kcpl=2134 ztio_u(ji,jj) = zutaui * EXP( - ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) )135 ztio_v(ji,jj) = zvtaui * EXP( - ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) )136 END DO137 END DO138 DO jj = 2, jpjm1 ! stress at the surface of the ocean139 DO ji = fs_2, fs_jpim1 ! vertor opt.140 zfrldu = 0.5 * ( ato_i(ji,jj) + ato_i(ji+1,jj ) ) ! open-ocean fraction at U- & V-points (from T-point values)141 zfrldv = 0.5 * ( ato_i(ji,jj) + ato_i(ji ,jj+1) )142 ! ! update surface ocean stress143 utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * ztio_u(ji,jj)144 vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * ztio_v(ji,jj)145 END DO146 END DO147 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition148 149 !150 ! !--------------------------------!151 CASE( 1 ) ! Use the now velocity ! (at each ocean timestep)152 ! !--------------------------------!153 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN154 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step155 vtau_oce(:,:) = vtau(:,:)156 ENDIF157 !158 DO jj = 2, jpjm1 !* ice stress over ocean with a ice-ocean rotation angle159 zsang = SIGN(1.e0, gphif(1,jj-1) ) * sangvg ! change the sinus angle sign in the south hemisphere160 DO ji = fs_2, fs_jpim1161 zat_u = ( at_i(ji,jj) + at_i(ji+1,jj) ) * 0.5 ! ice area at u and V-points162 zat_v = ( at_i(ji,jj) + at_i(ji,jj+1) ) * 0.5163 ! ! (u,v) ice-ocean velocity at (U,V)-point, resp.164 zu_u = u_ice(ji,jj) - ub(ji,jj,1)165 zv_v = v_ice(ji,jj) - vb(ji,jj,1)166 ! ! quadratic drag formulation with rotation167 !!gm still an error in the rotation, but usually the angle is zero (zsang=0, cangvg=1)168 zutaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * rhoco * ( cangvg * zu_u - zsang * zv_v )169 zvtaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * rhoco * ( cangvg * zv_v + zsang * zu_u )170 ! ! stress at the ocean surface171 utau(ji,jj) = ( 1.- zat_u ) * utau_oce(ji,jj) + zat_u * zutaui172 vtau(ji,jj) = ( 1.- zat_v ) * vtau_oce(ji,jj) + zat_v * zvtaui173 END DO174 END DO175 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition176 177 !178 ! !--------------------------------!179 CASE( 2 ) ! mixed 0 and 2 cases ! (at each ocean timestep)180 ! !--------------------------------!181 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN182 utau_oce(:,:) = utau (:,:) !* save the air-ocean stresses at ice time-step183 vtau_oce(:,:) = vtau (:,:)184 ssu_mb (:,:) = ssu_m(:,:) !* save the ice-ocean velocity at ice time-step185 ssv_mb (:,:) = ssv_m(:,:)186 ENDIF187 DO jj = 2, jpjm1 !* ice stress over ocean with a ice-ocean rotation angle188 zsang = SIGN(1.e0, gphif(1,jj-1) ) * sangvg189 DO ji = fs_2, fs_jpim1190 zat_u = ( at_i(ji,jj) + at_i(ji+1,jj) ) * 0.5 ! ice area at u and V-points191 zat_v = ( at_i(ji,jj) + at_i(ji,jj+1) ) * 0.5192 !193 zu_ico = u_ice(ji,jj) - 0.5 * ( ub(ji,jj,1) + ssu_mb(ji,jj) ) ! ice-oce velocity using ub and ssu_mb194 zv_ico = v_ice(ji,jj) - 0.5 * ( vb(ji,jj,1) + ssv_mb(ji,jj) )195 ! ! quadratic drag formulation with rotation196 !!gm still an error in the rotation, but usually the angle is zero (zsang=0, cangvg=1)197 zutaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * rhoco * ( cangvg * zu_ico - zsang * zv_ico )198 zvtaui = 0.5 * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * rhoco * ( cangvg * zv_ico + zsang * zu_ico )199 !200 utau(ji,jj) = ( 1.-zat_u ) * utau_oce(ji,jj) + zat_u * zutaui ! stress at the ocean surface201 vtau(ji,jj) = ( 1.-zat_v ) * vtau_oce(ji,jj) + zat_v * zvtaui202 END DO203 END DO204 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition205 !206 END SELECT207 208 IF(ln_ctl) CALL prt_ctl( tab2d_1=utau, clinfo1=' lim_sbc: utau : ', mask1=umask, &209 & tab2d_2=vtau, clinfo2=' vtau : ' , mask2=vmask )210 !211 END SUBROUTINE lim_sbc_tau212 213 55 214 56 SUBROUTINE lim_sbc_flx( kt ) … … 234 76 !! Tartinville et al. 2001 Ocean Modelling, 3, 95-108. 235 77 !!--------------------------------------------------------------------- 236 INTEGER :: kt ! number of iteration78 INTEGER, INTENT(in) :: kt ! number of iteration 237 79 !! 238 80 INTEGER :: ji, jj ! dummy loop indices … … 253 95 IF(lwp) WRITE(numout,*) 'lim_sbc_flx : LIM 3.0 sea-ice - heat salt and mass ocean surface fluxes' 254 96 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 97 ! 98 r1_rdtice = 1. / rdt_ice 99 ! 100 soce_0(:,:) = soce 101 sice_0(:,:) = sice 102 ! 103 IF( cp_cfg == "orca" ) THEN ! decrease ocean & ice reference salinities in the Baltic sea 104 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 105 & 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 106 soce_0(:,:) = 4._wp 107 sice_0(:,:) = 2._wp 108 END WHERE 109 ENDIF 110 ! 255 111 ENDIF 256 112 … … 297 153 ! fscmbq and ffltbif are obsolete 298 154 ! & + iflt * ffltbif(ji,jj) !!! only if one category is used 299 & + ifral * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) / rdt_ice &300 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) ) / rdt_ice&155 & + ifral * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) * r1_rdtice & 156 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) ) * r1_rdtice & 301 157 & + fhmec(ji,jj) & ! new contribution due to snow melt in ridging!! 302 158 & + fheat_rpo(ji,jj) & ! contribution from ridge formation … … 339 195 WRITE(numout,*) ' qcmif : ', qcmif(jiindx,jjindx) 340 196 WRITE(numout,*) ' qldif : ', qldif(jiindx,jjindx) 341 WRITE(numout,*) ' qcmif / dt: ', qcmif(jiindx,jjindx) / rdt_ice342 WRITE(numout,*) ' qldif / dt: ', qldif(jiindx,jjindx) / rdt_ice197 WRITE(numout,*) ' qcmif / dt: ', qcmif(jiindx,jjindx) * r1_rdtice 198 WRITE(numout,*) ' qldif / dt: ', qldif(jiindx,jjindx) * r1_rdtice 343 199 WRITE(numout,*) ' ifrdv : ', ifrdv 344 200 WRITE(numout,*) ' qfvbq : ', qfvbq(jiindx,jjindx) 345 201 WRITE(numout,*) ' qdtcn : ', qdtcn(jiindx,jjindx) 346 WRITE(numout,*) ' qfvbq / dt: ', qfvbq(jiindx,jjindx) / rdt_ice347 WRITE(numout,*) ' qdtcn / dt: ', qdtcn(jiindx,jjindx) / rdt_ice202 WRITE(numout,*) ' qfvbq / dt: ', qfvbq(jiindx,jjindx) * r1_rdtice 203 WRITE(numout,*) ' qdtcn / dt: ', qdtcn(jiindx,jjindx) * r1_rdtice 348 204 WRITE(numout,*) ' ' 349 205 WRITE(numout,*) ' fdtcn : ', fdtcn(jiindx,jjindx) … … 374 230 375 231 ! computing freshwater exchanges at the ice/ocean interface 376 zpme = - emp(ji,jj) * ( 1.0 - at_i(ji,jj) ) & ! evaporation over oceanic fraction 377 & + tprecip(ji,jj) * at_i(ji,jj) & ! total precipitation 378 ! old fashioned way 379 ! & - sprecip(ji,jj) * ( 1. - pfrld(ji,jj) ) & ! remov. snow precip over ice 380 & - sprecip(ji,jj) * ( 1. - (pfrld(ji,jj)**betas) ) & ! remov. snow precip over ice 381 & - rdmsnif(ji,jj) / rdt_ice & ! freshwaterflux due to snow melting 382 ! new contribution from snow falling when ridging 383 & + fmmec(ji,jj) 232 zpme = - emp(ji,jj) * ( 1.0 - at_i(ji,jj) ) & ! evaporation over oceanic fraction 233 & + tprecip(ji,jj) * at_i(ji,jj) & ! all precipitation reach the ocean 234 & - sprecip(ji,jj) * ( 1. - (pfrld(ji,jj)**betas) ) & ! except solid precip intercepted by sea-ice 235 & - rdmsnif(ji,jj) * r1_rdtice & ! freshwaterflux due to snow melting 236 & + fmmec(ji,jj) ! snow falling when ridging 237 384 238 385 239 ! computing salt exchanges at the ice/ocean interface 386 240 ! sice should be the same as computed with the ice model 387 zfons = ( soce - sice ) * ( rdmicif(ji,jj) / rdt_ice )241 zfons = ( soce_0(ji,jj) - sice_0(ji,jj) ) * rdmicif(ji,jj) * r1_rdtice 388 242 ! SOCE 389 zfons = ( sss_m (ji,jj) - sice ) * ( rdmicif(ji,jj) / rdt_ice )243 zfons = ( sss_m (ji,jj) - sice_0(ji,jj) ) * rdmicif(ji,jj) * r1_rdtice 390 244 391 245 !CT useless ! salt flux for constant salinity … … 445 299 END SUBROUTINE lim_sbc_flx 446 300 301 302 SUBROUTINE lim_sbc_tau( kt , pu_oce, pv_oce ) 303 !!------------------------------------------------------------------- 304 !! *** ROUTINE lim_sbc_tau *** 305 !! 306 !! ** Purpose : Update the ocean surface stresses due to the ice 307 !! 308 !! ** Action : * at each ice time step (every nn_fsbc time step): 309 !! - compute the modulus of ice-ocean relative velocity 310 !! (*rho*Cd) at T-point (C-grid) or I-point (B-grid) 311 !! tmod_io = rhoco * | U_ice-U_oce | 312 !! - update the modulus of stress at ocean surface 313 !! taum = frld * taum + (1-frld) * tmod_io * | U_ice-U_oce | 314 !! * at each ocean time step (every kt): 315 !! compute linearized ice-ocean stresses as 316 !! Utau = tmod_io * | U_ice - pU_oce | 317 !! using instantaneous current ocean velocity (usually before) 318 !! 319 !! NB: - ice-ocean rotation angle no more allowed 320 !! - here we make an approximation: taum is only computed every ice time step 321 !! This avoids mutiple average to pass from T -> U,V grids and next from U,V grids 322 !! to T grid. taum is used in TKE and GLS, which should not be too sensitive to this approximaton... 323 !! 324 !! ** Outputs : - utau, vtau : surface ocean i- and j-stress (u- & v-pts) updated with ice-ocean fluxes 325 !! - taum : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes 326 !!--------------------------------------------------------------------- 327 INTEGER , INTENT(in) :: kt ! ocean time-step index 328 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pu_oce, pv_oce ! surface ocean currents 329 !! 330 INTEGER :: ji, jj ! dummy loop indices 331 REAL(wp) :: zat_u, zutau_ice, zu_t, zmodt ! local scalar 332 REAL(wp) :: zat_v, zvtau_ice, zv_t ! - - 333 !!--------------------------------------------------------------------- 334 335 IF( kt == nit000 ) THEN 336 IF(lwp) WRITE(numout,*) 337 IF(lwp) WRITE(numout,*) 'lim_sbc_tau : LIM-3 sea-ice - surface ocean momentum fluxes' 338 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 339 ENDIF 340 341 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 342 !CDIR NOVERRCHK 343 DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point) 344 !CDIR NOVERRCHK 345 DO ji = fs_2, fs_jpim1 346 ! ! 2*(U_ice-U_oce) at T-point 347 zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj) 348 zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1) 349 ! ! |U_ice-U_oce|^2 350 zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t ) 351 ! ! update the ocean stress modulus 352 taum(ji,jj) = ( 1._wp - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zmodt 353 tmod_io(ji,jj) = rhoco * SQRT( zmodt ) ! rhoco * |U_ice-U_oce| at T-point 354 END DO 355 END DO 356 CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. ) 357 ! 358 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step 359 vtau_oce(:,:) = vtau(:,:) 360 ! 361 ENDIF 362 ! 363 ! !== every ocean time-step ==! 364 ! 365 DO jj = 2, jpjm1 !* update the stress WITHOUT a ice-ocean rotation angle 366 DO ji = fs_2, fs_jpim1 ! Vect. Opt. 367 zat_u = ( at_i(ji,jj) + at_i(ji+1,jj) ) * 0.5_wp ! ice area at u and V-points 368 zat_v = ( at_i(ji,jj) + at_i(ji,jj+1) ) * 0.5_wp 369 ! ! linearized quadratic drag formulation 370 zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) ) 371 zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) ) 372 ! ! stresses at the ocean surface 373 utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice 374 vtau(ji,jj) = ( 1._wp - zat_v ) * vtau_oce(ji,jj) + zat_v * zvtau_ice 375 END DO 376 END DO 377 CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition 378 ! 379 IF(ln_ctl) CALL prt_ctl( tab2d_1=utau, clinfo1=' lim_sbc: utau : ', mask1=umask, & 380 & tab2d_2=vtau, clinfo2=' vtau : ' , mask2=vmask ) 381 ! 382 END SUBROUTINE lim_sbc_tau 383 447 384 #else 448 385 !!---------------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limtab.F90
r1156 r2528 22 22 23 23 !!---------------------------------------------------------------------- 24 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008)24 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 25 25 !! $Id$ 26 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 27 !!---------------------------------------------------------------------- 28 28 CONTAINS -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r2477 r2528 7 7 !! 2.0 ! 2002-07 (C. Ethe, G. Madec) LIM-2 (F90 rewriting) 8 8 !! 3.0 ! 2005-11 (M. Vancoppenolle) LIM-3 : Multi-layer thermodynamics + salinity variations 9 !! - ! 2007-04 (M. Vancoppenolle) add lim_thd_glohec and lim_thd_con_dif9 !! - ! 2007-04 (M. Vancoppenolle) add lim_thd_glohec, lim_thd_con_dh and lim_thd_con_dif 10 10 !! 3.2 ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in rdmsnif 11 !! 3.3 ! 2010-11 (G. Madec) corrected snow melting heat (due to factor betas) 11 12 !!---------------------------------------------------------------------- 12 13 #if defined key_lim3 … … 14 15 !! 'key_lim3' LIM3 sea-ice model 15 16 !!---------------------------------------------------------------------- 16 !! lim_thd : thermodynamic of sea ice 17 !! lim_thd : thermodynamic of sea ice 18 !! lim_thd_init : initialisation of sea-ice thermodynamic 17 19 !!---------------------------------------------------------------------- 18 20 USE phycst ! physical constants 19 21 USE dom_oce ! ocean space and time domain variables 20 USE ice ! LIM sea-ice variables21 USE par_ice 22 USE ice ! LIM: sea-ice variables 23 USE par_ice ! LIM: sea-ice parameters 22 24 USE sbc_oce ! Surface boundary condition: ocean fields 23 25 USE sbc_ice ! Surface boundary condition: ice fields 24 26 USE thd_ice ! LIM thermodynamic sea-ice variables 25 27 USE dom_ice ! LIM sea-ice domain 26 USE domvvl 27 USE limthd_dif 28 USE limthd_dh 29 USE limthd_sal 30 USE limthd_ent 31 USE limtab 32 USE limvar 28 USE domvvl ! domain: variable volume level 29 USE limthd_dif ! LIM: thermodynamics, vertical diffusion 30 USE limthd_dh ! LIM: thermodynamics, ice and snow thickness variation 31 USE limthd_sal ! LIM: thermodynamics, ice salinity 32 USE limthd_ent ! LIM: thermodynamics, ice enthalpy redistribution 33 USE limtab ! LIM: 1D <==> 2D transformation 34 USE limvar ! LIM: sea-ice variables 35 USE lbclnk ! lateral boundary condition - MPP links 36 USE lib_mpp ! MPP library 33 37 USE in_out_manager ! I/O manager 34 38 USE prtctl ! Print control 35 USE lbclnk36 USE lib_mpp37 39 38 40 IMPLICIT NONE 39 41 PRIVATE 40 42 41 PUBLIC lim_thd ! called by lim_step 42 43 REAL(wp) :: epsi20 = 1e-20 ! constant values 44 REAL(wp) :: epsi16 = 1e-16 ! 45 REAL(wp) :: epsi06 = 1e-06 ! 46 REAL(wp) :: epsi04 = 1e-04 ! 47 REAL(wp) :: zzero = 0.e0 ! 48 REAL(wp) :: zone = 1.e0 ! 43 PUBLIC lim_thd ! called by limstp module 44 PUBLIC lim_thd_init ! called by iceini module 45 46 REAL(wp) :: epsi20 = 1e-20_wp ! constant values 47 REAL(wp) :: epsi16 = 1e-16_wp ! 48 REAL(wp) :: epsi06 = 1e-06_wp ! 49 REAL(wp) :: epsi04 = 1e-04_wp ! 50 REAL(wp) :: zzero = 0._wp ! 51 REAL(wp) :: zone = 1._wp ! 49 52 50 53 !! * Substitutions … … 52 55 # include "vectopt_loop_substitute.h90" 53 56 !!---------------------------------------------------------------------- 54 !! NEMO/LIM 3.2 , UCL-LOCEAN-IPSL (2009)57 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 55 58 !! $Id$ 56 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 60 !!---------------------------------------------------------------------- 58 59 61 CONTAINS 60 62 … … 84 86 REAL(wp) :: zfric_umax = 2e-02 ! upper bound for the friction velocity 85 87 REAL(wp) :: zinda, zindb, zthsnice, zfric_u ! temporary scalar 86 REAL(wp) :: zfntlat, zpareff 88 REAL(wp) :: zfntlat, zpareff ! - - 87 89 REAL(wp) :: zeps, zareamin, zcoef 88 90 REAL(wp), DIMENSION(jpi,jpj) :: zqlbsbq ! link with lead energy budget qldif 89 91 !!------------------------------------------------------------------- 90 91 92 92 93 !------------------------------------------------------------------------------! … … 99 100 !-------------------- 100 101 ! Change the units of heat content; from global units to J.m3 101 102 102 DO jl = 1, jpl 103 103 DO jk = 1, nlay_i … … 166 166 pfrld(ji,jj) = 1.0 - at_i(ji,jj) 167 167 zinda = 1.0 - MAX( zzero , SIGN( zone , - ( 1.0 - pfrld(ji,jj) ) ) ) 168 168 ! 169 169 ! ! solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 170 170 ! ! practically no "direct lateral ablation" … … 181 181 qdtcn(ji,jj) = zindb * fdtcn(ji,jj) * (1.0 - at_i(ji,jj)) * rdt_ice 182 182 ! 183 184 ! still need to be updated : fdtcn !!!! 185 ! !-- Lead heat budget (part 1, next one is in limthd_dh 186 ! !-- qldif -- (or qldif_1d in 1d routines) 187 qldif(ji,jj) = tms(ji,jj) * rdt_ice * ( & 188 & pfrld(ji,jj) * ( qsr(ji,jj) & ! solar heat 189 & + qns(ji,jj) & ! non solar heat 190 & + fdtcn(ji,jj) & ! turbulent ice-ocean heat 191 & + fsbbq(ji,jj) * ( 1.0 - zindb ) ) & ! residual heat from previous step 183 ! !-- Lead heat budget, qldif (part 1, next one is in limthd_dh) 184 ! ! caution: exponent betas used as more snow can fallinto leads 185 qldif(ji,jj) = tms(ji,jj) * rdt_ice * ( & 186 & pfrld(ji,jj) * ( qsr(ji,jj) & ! solar heat 187 & + qns(ji,jj) & ! non solar heat 188 & + fdtcn(ji,jj) & ! turbulent ice-ocean heat 189 & + fsbbq(ji,jj) * ( 1.0 - zindb ) ) & ! residual heat from previous step 192 190 & - pfrld(ji,jj)**betas * sprecip(ji,jj) * lfus ) ! latent heat of sprecip melting 193 191 ! 194 192 ! Positive heat budget is used for bottom ablation 195 193 zfntlat = 1.0 - MAX( zzero , SIGN( zone , - qldif(ji,jj) ) ) … … 198 196 != 0 if ice and positive heat budget and 1 if one of those two is false 199 197 zqlbsbq(ji,jj) = qldif(ji,jj) * ( 1.0 - zpareff ) / MAX( at_i(ji,jj) * rdt_ice , epsi16 ) 200 198 ! 201 199 ! Heat budget of the lead, energy transferred from ice to ocean 202 200 qldif (ji,jj) = zpareff * qldif(ji,jj) 203 201 qdtcn (ji,jj) = zpareff * qdtcn(ji,jj) 204 202 ! 205 203 ! Energy needed to bring ocean surface layer until its freezing (qcmif, limflx) 206 204 qcmif (ji,jj) = rau0 * rcp * fse3t(ji,jj,1) * ( t_bo(ji,jj) - (sst_m(ji,jj) + rt0) ) * ( 1. - zinda ) 207 205 ! 208 206 ! oceanic heat flux (limthd_dh) 209 207 fbif (ji,jj) = zindb * ( fsbbq(ji,jj) / MAX( at_i(ji,jj) , epsi20 ) + fdtcn(ji,jj) ) … … 223 221 ENDIF 224 222 225 zareamin = 1. 0e-10223 zareamin = 1.e-10 226 224 nbpb = 0 227 225 DO jj = 1, jpj … … 359 357 CALL tab_1d_2d( nbpb, rdvonif, npb, dvnbq_1d (1:nbpb), jpi, jpj ) 360 358 CALL tab_1d_2d( nbpb, fseqv , npb, fseqv_1d (1:nbpb), jpi, jpj ) 361 359 ! 362 360 IF( num_sal == 2 ) THEN 363 361 CALL tab_1d_2d( nbpb, fsbri, npb, fsbri_1d(1:nbpb), jpi, jpj ) 364 362 CALL tab_1d_2d( nbpb, fhbri, npb, fhbri_1d(1:nbpb), jpi, jpj ) 365 363 ENDIF 366 364 ! 367 365 !+++++ 368 366 !temporary stuff for a dummy version … … 375 373 CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qnsr_ice_1d(1:nbpb), jpi, jpj) 376 374 !+++++ 377 375 ! 378 376 IF( lk_mpp ) CALL mpp_comm_free( ncomm_ice ) !RB necessary ?? 379 377 ENDIF … … 388 386 ! 5.1) Ice heat content 389 387 !------------------------ 390 391 388 ! Enthalpies are global variables we have to readjust the units 392 389 zcoef = 1.e0 / ( unit_fac * REAL(nlay_i) ) … … 401 398 ! 5.2) Snow heat content 402 399 !------------------------ 403 404 400 ! Enthalpies are global variables we have to readjust the units 405 401 zcoef = 1.e0 / ( unit_fac * REAL(nlay_s) ) … … 424 420 IF( con_i ) fbif(:,:) = fbif(:,:) + zqlbsbq(:,:) 425 421 426 IF(ln_ctl) THEN ! Control print422 IF(ln_ctl) THEN ! Control print 427 423 CALL prt_ctl_info(' ') 428 424 CALL prt_ctl_info(' - Cell values : ') … … 454 450 END DO 455 451 END DO 456 457 452 ENDIF 458 453 ! 459 454 END SUBROUTINE lim_thd 460 455 … … 524 519 END DO 525 520 ! layer by layer 526 dq_i_layer(:,:) 521 dq_i_layer(:,:) = q_i_layer_fin(:,:) - q_i_layer_in(:,:) 527 522 528 523 !---------------------------------------- 529 524 ! Atmospheric heat flux, ice heat budget 530 525 !---------------------------------------- 531 532 DO ji = kideb, kiut 533 zji = MOD( npb(ji) - 1, jpi ) + 1 534 zjj = ( npb(ji) - 1 ) / jpi + 1 535 536 fatm(ji,jl) = qnsr_ice_1d(ji) + (1.0-i0(ji))*qsr_ice_1d(ji) 537 538 sum_fluxq(ji,jl) = fc_su(ji) - fc_bo_i(ji) + qsr_ice_1d(ji)*i0(ji) - fstroc(zji,zjj,jl) 526 DO ji = kideb, kiut 527 zji = MOD( npb(ji) - 1 , jpi ) + 1 528 zjj = ( npb(ji) - 1 ) / jpi + 1 529 fatm (ji,jl) = qnsr_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) 530 sum_fluxq(ji,jl) = fc_su(ji) - fc_bo_i(ji) + qsr_ice_1d(ji) * i0(ji) - fstroc(zji,zjj,jl) 539 531 END DO 540 532 … … 542 534 ! Conservation error 543 535 !-------------------- 544 545 536 DO ji = kideb, kiut 546 537 cons_error(ji,jl) = ABS( dq_i(ji,jl) / rdt_ice + sum_fluxq(ji,jl) ) 547 538 END DO 548 539 549 numce = 0540 numce = 0 550 541 meance = 0.0 551 542 DO ji = kideb, kiut … … 554 545 meance = meance + cons_error(ji,jl) 555 546 ENDIF 556 END DO557 IF (numce .GT. 0 ) meance = meance / numce547 END DO 548 IF( numce .GT. 0 ) meance = meance / numce 558 549 559 550 WRITE(numout,*) ' Maximum tolerated conservation error : ', max_cons_err … … 565 556 ! Surface error due to imbalance between Fatm and Fcsu 566 557 !------------------------------------------------------- 567 numce = 0 .0558 numce = 0 568 559 meance = 0.0 569 560 570 561 DO ji = kideb, kiut 571 562 surf_error(ji,jl) = ABS ( fatm(ji,jl) - fc_su(ji) ) 572 IF ( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. & 573 max_surf_err ) ) THEN 563 IF( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. max_surf_err ) ) THEN 574 564 numce = numce + 1 575 565 meance = meance + surf_error(ji,jl) 576 566 ENDIF 577 567 ENDDO 578 IF (numce .GT. 0 ) meance = meance / numce568 IF( numce .GT. 0 ) meance = meance / numce 579 569 580 570 WRITE(numout,*) ' Maximum tolerated surface error : ', max_surf_err … … 590 580 ! Write ice state in case of big errors 591 581 !--------------------------------------- 592 593 582 DO ji = kideb, kiut 594 583 IF ( ( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. max_surf_err ) ) .OR. & … … 596 585 zji = MOD( npb(ji) - 1, jpi ) + 1 597 586 zjj = ( npb(ji) - 1 ) / jpi + 1 598 587 ! 599 588 WRITE(numout,*) ' alerte 1 ' 600 589 WRITE(numout,*) ' Untolerated conservation / surface error after ' … … 612 601 ! WRITE(numout,*) ' qt_i_fin : ', qt_i_fin(ji,jl) 613 602 ! WRITE(numout,*) ' qt_s_fin : ', qt_s_fin(ji,jl) 614 ! WRITE(numout,*) ' qt : ', qt_i_fin(ji,jl) + & 615 ! qt_s_fin(ji,jl) 603 ! WRITE(numout,*) ' qt : ', qt_i_fin(ji,jl) + qt_s_fin(ji,jl) 616 604 WRITE(numout,*) ' ht_i : ', ht_i_b(ji) 617 605 WRITE(numout,*) ' ht_s : ', ht_s_b(ji) … … 640 628 WRITE(numout,*) 641 629 WRITE(numout,*) ' Layer by layer ... ' 642 WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - & 643 qt_s_in(ji,jl) ) & 644 / rdt_ice 645 WRITE(numout,*) ' dfc_snow : ', fc_s(ji,1) - & 646 fc_s(ji,0) 630 WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) / rdt_ice 631 WRITE(numout,*) ' dfc_snow : ', fc_s(ji,1) - fc_s(ji,0) 647 632 DO jk = 1, nlay_i 648 633 WRITE(numout,*) ' layer : ', jk 649 634 WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) / rdt_ice 650 635 WRITE(numout,*) ' radab : ', radab(ji,jk) 651 WRITE(numout,*) ' dfc_i : ', fc_i(ji,jk) - & 652 fc_i(ji,jk-1) 653 WRITE(numout,*) ' tot f : ', fc_i(ji,jk) - & 654 fc_i(ji,jk-1) - radab(ji,jk) 636 WRITE(numout,*) ' dfc_i : ', fc_i(ji,jk) - fc_i(ji,jk-1) 637 WRITE(numout,*) ' tot f : ', fc_i(ji,jk) - fc_i(ji,jk-1) - radab(ji,jk) 655 638 END DO 656 639 … … 662 645 663 646 664 SUBROUTINE lim_thd_con_dh( kideb,kiut,jl)647 SUBROUTINE lim_thd_con_dh( kideb, kiut, jl ) 665 648 !!----------------------------------------------------------------------- 666 649 !! *** ROUTINE lim_thd_con_dh *** 667 650 !! 668 651 !! ** Purpose : Test energy conservation after enthalpy redistr. 669 !!670 !! history :671 !! 9.9 ! 07-04 (M.Vancoppenolle) original code672 652 !!----------------------------------------------------------------------- 673 653 INTEGER, INTENT(in) :: & … … 745 725 ! Write ice state in case of big errors 746 726 !--------------------------------------- 747 748 727 DO ji = kideb, kiut 749 728 IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 750 729 zji = MOD( npb(ji) - 1, jpi ) + 1 751 730 zjj = ( npb(ji) - 1 ) / jpi + 1 752 731 ! 753 732 WRITE(numout,*) ' alerte 1 - category : ', jl 754 733 WRITE(numout,*) ' Untolerated conservation error after limthd_ent ' … … 771 750 WRITE(numout,*) ' qt_s_in : ', qt_s_in(ji,jl) / rdt_ice 772 751 WRITE(numout,*) ' qt_i_in : ', qt_i_in(ji,jl) / rdt_ice 773 WRITE(numout,*) ' qt_in : ', ( qt_i_in(ji,jl) + & 774 qt_s_in(ji,jl) ) / rdt_ice 752 WRITE(numout,*) ' qt_in : ', ( qt_i_in(ji,jl) + qt_s_in(ji,jl) ) / rdt_ice 775 753 WRITE(numout,*) ' qt_s_fin : ', qt_s_fin(ji,jl) / rdt_ice 776 754 WRITE(numout,*) ' qt_i_fin : ', qt_i_fin(ji,jl) / rdt_ice 777 WRITE(numout,*) ' qt_fin : ', ( qt_i_fin(ji,jl) + & 778 qt_s_fin(ji,jl) ) / rdt_ice 755 WRITE(numout,*) ' qt_fin : ', ( qt_i_fin(ji,jl) + qt_s_fin(ji,jl) ) / rdt_ice 779 756 WRITE(numout,*) ' * ' 780 757 WRITE(numout,*) ' Ice variables --- : ' … … 785 762 WRITE(numout,*) ' dh_i_surf : ', dh_i_surf(ji) 786 763 WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 787 788 764 ENDIF 789 765 ! … … 800 776 !! 801 777 !! ** Method : Formula (Bitz and Lipscomb, 1999) 802 !!803 778 !!------------------------------------------------------------------- 804 779 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop … … 827 802 828 803 SUBROUTINE lim_thd_init 829 830 804 !!----------------------------------------------------------------------- 831 805 !! *** ROUTINE lim_thd_init *** … … 838 812 !! 839 813 !! ** input : Namelist namicether 840 814 !!------------------------------------------------------------------- 841 815 NAMELIST/namicethd/ hmelt , hiccrit, fraz_swi, maxfrazb, vfrazb, Cfrazb, & 842 816 & hicmin, hiclim, amax , & … … 845 819 & kappa_i, nconv_i_thd, maxer_i_thd, thcon_i_swi 846 820 !!------------------------------------------------------------------- 847 821 ! 848 822 IF(lwp) THEN 849 823 WRITE(numout,*) … … 851 825 WRITE(numout,*) '~~~~~~~' 852 826 ENDIF 853 827 ! 854 828 REWIND( numnam_ice ) ! read Namelist numnam_ice 855 829 READ ( numnam_ice , namicethd ) 856 830 ! 857 831 IF(lwp) THEN ! control print 858 832 WRITE(numout,*) … … 892 866 #else 893 867 !!---------------------------------------------------------------------- 894 !! Default option 868 !! Default option Dummy module NO LIM3 sea-ice model 895 869 !!---------------------------------------------------------------------- 896 CONTAINS897 SUBROUTINE lim_thd ! Empty routine898 END SUBROUTINE lim_thd899 SUBROUTINE lim_thd_con_dif900 END SUBROUTINE lim_thd_con_dif901 870 #endif 902 871 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r2477 r2528 17 17 USE phycst ! physical constants (OCE directory) 18 18 USE sbc_oce ! Surface boundary condition: ocean fields 19 USE ice 20 USE par_ice 19 21 USE thd_ice 20 22 USE in_out_manager 21 USE ice22 USE par_ice23 23 USE lib_mpp 24 24 … … 35 35 36 36 !!---------------------------------------------------------------------- 37 !! NEMO/LIM 3.2, UCL-LOCEAN-IPSL (2009)37 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 38 38 !! $Id$ 39 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 40 40 !!---------------------------------------------------------------------- 41 41 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r2477 r2528 1 1 MODULE limthd_dif 2 #if defined key_lim33 !!----------------------------------------------------------------------4 !! 'key_lim3' LIM3 sea-ice model5 !!----------------------------------------------------------------------6 2 !!====================================================================== 7 3 !! *** MODULE limthd_dif *** … … 9 5 !! computation of surface and inner T 10 6 !!====================================================================== 11 12 7 !!---------------------------------------------------------------------- 13 !! * Modules used 8 #if defined key_lim3 9 !!---------------------------------------------------------------------- 10 !! 'key_lim3' LIM3 sea-ice model 11 !!---------------------------------------------------------------------- 14 12 USE par_oce ! ocean parameters 15 13 USE phycst ! physical constants (ocean directory) … … 23 21 PRIVATE 24 22 25 !! * Routine accessibility 26 PUBLIC lim_thd_dif ! called by lim_thd 27 28 !! * Module variables 23 PUBLIC lim_thd_dif ! called by lim_thd 24 29 25 REAL(wp) :: & ! constant values 30 26 epsi20 = 1e-20 , & … … 34 30 35 31 !!---------------------------------------------------------------------- 36 !! LIM 3.0, UCL-LOCEAN-IPSL (2005)32 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 37 33 !! $Id$ 38 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 35 !!---------------------------------------------------------------------- 40 41 36 CONTAINS 42 37 … … 870 865 END SUBROUTINE lim_thd_dif 871 866 #endif 867 !!====================================================================== 872 868 END MODULE limthd_dif -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r2477 r2528 1 1 MODULE limthd_ent 2 #if defined key_lim33 !!----------------------------------------------------------------------4 !! 'key_lim3' LIM3 sea-ice model5 !!----------------------------------------------------------------------6 2 !!====================================================================== 7 3 !! *** MODULE limthd_ent *** … … 10 6 !! after vertical growth/decay 11 7 !!====================================================================== 8 #if defined key_lim3 9 !!---------------------------------------------------------------------- 10 !! 'key_lim3' LIM3 sea-ice model 11 !!---------------------------------------------------------------------- 12 12 !! lim_thd_ent : ice redistribution of enthalpy 13 14 !! * Modules used 13 !!---------------------------------------------------------------------- 15 14 USE par_oce ! ocean parameters 16 15 USE dom_oce … … 27 26 PRIVATE 28 27 29 !! * Routine accessibility 30 PUBLIC lim_thd_ent ! called by lim_thd 31 32 !! * Module variables 28 PUBLIC lim_thd_ent ! called by lim_thd 29 33 30 REAL(wp) :: & ! constant values 34 31 epsi20 = 1.e-20 , & … … 37 34 zone = 1.e0 , & 38 35 epsi10 = 1.0e-10 39 40 36 !!---------------------------------------------------------------------- 41 !! LIM 3.0, UCL-LOCEAN-IPSL (2005)37 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 42 38 !! $Id$ 43 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 44 40 !!---------------------------------------------------------------------- 45 46 41 CONTAINS 47 42 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r2477 r2528 1 1 MODULE limthd_lac 2 !!----------------------------------------------------------------------3 !! 'key_lim3' LIM3 sea-ice model4 !!----------------------------------------------------------------------5 2 !!====================================================================== 6 3 !! *** MODULE limthd_lac *** … … 9 6 #if defined key_lim3 10 7 !!---------------------------------------------------------------------- 8 !! 'key_lim3' LIM3 sea-ice model 9 !!---------------------------------------------------------------------- 11 10 !! lim_lat_acr : lateral accretion of ice 12 !! * Modules used11 !!---------------------------------------------------------------------- 13 12 USE par_oce ! ocean parameters 14 13 USE dom_oce … … 42 41 43 42 !!---------------------------------------------------------------------- 44 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008)43 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 45 44 !! $Id$ 46 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 47 46 !!---------------------------------------------------------------------- 48 47 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r2477 r2528 1 1 MODULE limthd_sal 2 !!----------------------------------------------------------------------3 !! 'key_lim3' LIM3 sea-ice model4 !!----------------------------------------------------------------------5 2 !!====================================================================== 6 3 !! *** MODULE limthd_sal *** 7 !! computation salinity variations in 8 !! the ice 4 !! LIM-3 sea-ice : computation of salinity variations in the ice 9 5 !!====================================================================== 6 !! History : - ! 2003-05 (M. Vancoppenolle) UCL-ASTR first coding for LIM3-1D 7 !! 3.0 ! 2005-12 (M. Vancoppenolle) adapted to the 3-D version 8 !!--------------------------------------------------------------------- 10 9 #if defined key_lim3 11 10 !!---------------------------------------------------------------------- 11 !! 'key_lim3' LIM-3 sea-ice model 12 !!---------------------------------------------------------------------- 12 13 !! lim_thd_sal : salinity variations in the ice 13 !! * Modules used14 !!---------------------------------------------------------------------- 14 15 USE par_oce ! ocean parameters 15 16 USE phycst ! physical constants (ocean directory) 16 17 USE sbc_oce ! Surface boundary condition: ocean fields 17 USE thd_ice18 USE ice19 USE in_out_manager20 USE limvar 21 USE par_ice18 USE ice ! LIM: sea-ice variables 19 USE par_ice ! LIM: sea-ice parameters 20 USE thd_ice ! LIM: sea-ice thermodynamics 21 USE limvar ! LIM: sea-ice variables 22 USE in_out_manager ! I/O manager 22 23 23 24 IMPLICIT NONE 24 25 PRIVATE 25 26 26 !! * Routine accessibility 27 PUBLIC lim_thd_sal ! called by lim_thd 28 PUBLIC lim_thd_sal_init ! called by lim_thd 29 30 !! * Module variables 31 REAL(wp) :: & ! constant values 32 epsi20 = 1e-20 , & 33 epsi13 = 1e-13 , & 34 zzero = 0.e0 , & 35 zone = 1.e0 36 37 !!---------------------------------------------------------------------- 38 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008) 27 PUBLIC lim_thd_sal ! called by limthd module 28 PUBLIC lim_thd_sal_init ! called by iceini module 29 30 !!---------------------------------------------------------------------- 31 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 39 32 !! $Id$ 40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 42 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 43 35 CONTAINS 44 36 45 SUBROUTINE lim_thd_sal( kideb,kiut)37 SUBROUTINE lim_thd_sal( kideb, kiut ) 46 38 !!------------------------------------------------------------------- 47 !! *** ROUTINE lim_thd_sal *** 48 !! ** Purpose :49 !! This routinecomputes new salinities in the ice39 !! *** ROUTINE lim_thd_sal *** 40 !! 41 !! ** Purpose : computes new salinities in the ice 50 42 !! 51 43 !! ** Method : 4 possibilities … … 54 46 !! -> num_sal = 3 -> S = S(z) [multiyear ice] 55 47 !! -> num_sal = 4 -> S = S(h) [Cox and Weeks 74] 56 !!57 !! ** Steps58 !!59 !! ** Arguments60 !!61 !! ** Inputs / Outputs62 !!63 !! ** External64 !!65 !! ** References66 !!67 !! ** History :68 !!69 !! "Je ne suis pour l'instant qu'a 80% de ma condition, mais c'est70 !! les 30% qui restent qui seront les plus difficiles"71 !! E. Mpenza72 !!73 !!-------------------------------------------------------------------74 !! History :75 !! ori ! 03-05 M. Vancoppenolle UCL-ASTR first coding for LIM-1D76 !! 3.0 ! 05-12 Routine rewritten for the 3-D version77 48 !!--------------------------------------------------------------------- 78 !! 79 !! * Local variables 80 INTEGER, INTENT(in) :: & 81 kideb, kiut !: thickness category index 82 83 INTEGER :: & 84 ji, jk , & !: geographic and layer index 85 zji, zjj 86 87 REAL(wp) :: & 88 zsold, & !: old salinity 89 zeps=1.0e-06 , & !: very small 90 iflush , & !: flushing (1) or not (0) 91 iaccrbo , & !: bottom accretion (1) or not (0) 92 igravdr , & !: gravity drainage or not 93 isnowic , & !: gravity drainage or not 94 i_ice_switch , & !: ice thickness above a certain treshold or not 95 ztmelts , & !: freezing point of sea ice 96 zaaa , & !: dummy factor 97 zbbb , & !: dummy factor 98 zccc , & !: dummy factor 99 zdiscrim !: dummy factor 100 101 REAL(wp), DIMENSION(jpij) :: & 102 ze_init , & !initial total enthalpy 103 zhiold , & 104 zsiold 105 49 INTEGER, INTENT(in) :: kideb, kiut ! thickness category index 50 ! 51 INTEGER :: ji, jk ! dummy loop indices 52 INTEGER :: zji, zjj ! local integers 53 REAL(wp) :: zsold, zeps, iflush, iaccrbo, igravdr, isnowic, i_ice_switch, ztmelts ! local scalars 54 REAL(wp) :: zaaa, zbbb, zccc, zdiscrim ! local scalars 55 REAL(wp), DIMENSION(jpij) :: ze_init, zhiold, zsiold ! 1D workspace 106 56 !!--------------------------------------------------------------------- 107 57 58 zeps=1.0e-06_wp 59 108 60 !------------------------------------------------------------------------------| 109 61 ! 1) Constant salinity, constant in time | 110 62 !------------------------------------------------------------------------------| 111 63 112 IF (num_sal.eq.1) THEN 113 114 ! WRITE(numout,*) 115 ! WRITE(numout,*) 'lim_thd_sal : Ice salinity computation module ', & 116 ! num_sal 117 ! WRITE(numout,*) '~~~~~~~~~~~~' 118 64 IF( num_sal == 1 ) THEN 119 65 DO jk = 1, nlay_i 120 66 DO ji = kideb, kiut … … 122 68 END DO ! ji 123 69 END DO ! jk 124 70 ! 125 71 DO ji = kideb, kiut 126 72 sm_i_b(ji) = bulk_sal 127 73 END DO ! ji 128 129 ENDIF ! num_sal .EQ. 174 ! 75 ENDIF 130 76 131 77 !------------------------------------------------------------------------------| … … 174 120 ! isnowic : 1 if snow ice formation 175 121 i_ice_switch = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - ht_i_b(ji) + 1.0e-2 ) ) 176 isnowic = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - dh_snowice(ji) ) ) * & 177 i_ice_switch 122 isnowic = 1.0 - MAX ( 0.0 , SIGN ( 1.0 , - dh_snowice(ji) ) ) * i_ice_switch 178 123 179 124 !--------------------- … … 182 127 183 128 ! drainage by gravity drainage 184 dsm_i_gd_1d(ji) = - igravdr * & 185 MAX( sm_i_b(ji) - sal_G , 0.0 ) / & 186 time_G * rdt_ice 129 dsm_i_gd_1d(ji) = - igravdr * MAX( sm_i_b(ji) - sal_G , 0._wp ) / time_G * rdt_ice 187 130 188 131 ! drainage by flushing 189 dsm_i_fl_1d(ji) = - iflush * & 190 MAX( sm_i_b(ji) - sal_F , 0.0 ) / & 191 time_F * rdt_ice 132 dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_b(ji) - sal_F , 0._wp ) / time_F * rdt_ice 192 133 193 134 !----------------- … … 199 140 ! to conserve energy 200 141 zsiold(ji) = sm_i_b(ji) 201 sm_i_b(ji) = sm_i_b(ji) & 202 + dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji) ! & 142 sm_i_b(ji) = sm_i_b(ji) + dsm_i_fl_1d(ji) + dsm_i_gd_1d(ji) 203 143 204 144 ! if no ice, salinity eq 0.1 205 i_ice_switch = 1.0 - MAX ( 0.0, SIGN (1.0 , - ht_i_b(ji) ) ) 206 sm_i_b(ji) = i_ice_switch*sm_i_b(ji) + s_i_min * ( 1.0 - & 207 i_ice_switch ) 145 i_ice_switch = 1._wp - MAX ( 0._wp, SIGN( 1._wp , - ht_i_b(ji) ) ) 146 sm_i_b(ji) = i_ice_switch*sm_i_b(ji) + s_i_min * ( 1._wp - i_ice_switch ) 208 147 END DO ! ji 209 148 210 149 ! Salinity profile 211 CALL lim_var_salprof1d( kideb,kiut)150 CALL lim_var_salprof1d( kideb, kiut ) 212 151 213 152 !---------------------------- … … 217 156 DO ji = kideb, kiut 218 157 ! iflush : 1 if summer 219 iflush = MAX( 0.0 , SIGN ( 1.0, t_su_b(ji) - rtt ) )158 iflush = MAX( 0._wp , SIGN ( 1._wp , t_su_b(ji) - rtt ) ) 220 159 ! igravdr : 1 if t_su lt t_bo 221 igravdr = MAX( 0.0 , SIGN ( 1.0, t_bo_b(ji) - t_su_b(ji) ) )160 igravdr = MAX( 0._wp , SIGN ( 1._wp , t_bo_b(ji) - t_su_b(ji) ) ) 222 161 ! iaccrbo : 1 if bottom accretion 223 iaccrbo = MAX( 0.0 , SIGN ( 1.0, dh_i_bott(ji) ) )224 225 fhbri_1d(ji) = 0. 0162 iaccrbo = MAX( 0._wp , SIGN ( 1._wp , dh_i_bott(ji) ) ) 163 ! 164 fhbri_1d(ji) = 0._wp 226 165 END DO ! ji 227 166 … … 230 169 !---------------------------- 231 170 DO ji = kideb, kiut 232 i_ice_switch = 1.0 - MAX ( 0.0, SIGN (1.0 , - ht_i_b(ji) ) ) 233 fsbri_1d(ji) = fsbri_1d(ji) - & 234 i_ice_switch * rhoic * a_i_b(ji) * ht_i_b(ji) * & 235 ( MAX(dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji), & 236 sm_i_b(ji) - zsiold(ji) ) ) / rdt_ice 237 IF ( num_sal .EQ. 4 ) fsbri_1d(ji) = 0.0 238 171 i_ice_switch = 1._wp - MAX ( 0._wp, SIGN( 1._wp , - ht_i_b(ji) ) ) 172 fsbri_1d(ji) = fsbri_1d(ji) - i_ice_switch * rhoic * a_i_b(ji) * ht_i_b(ji) & 173 & * ( MAX(dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji), sm_i_b(ji) - zsiold(ji) ) ) / rdt_ice 174 IF( num_sal == 4 ) fsbri_1d(ji) = 0._wp 239 175 END DO ! ji 240 176 … … 244 180 !-------------------- 245 181 DO jk = 1, nlay_i 246 247 182 DO ji = kideb, kiut 248 249 183 ztmelts = -tmut*s_i_b(ji,jk) + rtt 250 184 !Conversion q(S,T) -> T (second order equation) 251 185 zaaa = cpic 252 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + & 253 q_i_b(ji,jk) / rhoic - lfus 186 zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + q_i_b(ji,jk) / rhoic - lfus 254 187 zccc = lfus * ( ztmelts - rtt ) 255 188 zdiscrim = SQRT( MAX(zbbb*zbbb - 4.0*zaaa*zccc,0.0) ) 256 t_i_b(ji,jk) = rtt - ( zbbb + zdiscrim ) / & 257 ( 2.0 *zaaa ) 189 t_i_b(ji,jk) = rtt - ( zbbb + zdiscrim ) / ( 2.0 *zaaa ) 258 190 END DO !ji 259 260 191 END DO !jk 261 192 ! 262 193 ENDIF ! num_sal .EQ. 2 263 194 … … 266 197 !------------------------------------------------------------------------------| 267 198 268 IF 199 IF( num_sal .EQ. 3 ) THEN 269 200 270 201 WRITE(numout,*) … … 320 251 zji = MOD( npb(ji) - 1, jpi ) + 1 321 252 zjj = ( npb(ji) - 1 ) / jpi + 1 322 fseqv_1d(ji) = fseqv_1d(ji) + & 323 ( sss_m(zji,zjj) - bulk_sal ) * & 324 rhoic * a_i_b(ji) * & 325 MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 253 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - bulk_sal ) & 254 & * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 326 255 END DO 327 256 ELSE … … 329 258 zji = MOD( npb(ji) - 1, jpi ) + 1 330 259 zjj = ( npb(ji) - 1 ) / jpi + 1 331 fseqv_1d(ji) = fseqv_1d(ji) + & 332 ( sss_m(zji,zjj) - s_i_new(ji) ) * & 333 rhoic * a_i_b(ji) * & 334 MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 260 fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - s_i_new(ji) ) & 261 & * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 335 262 END DO ! ji 336 263 ENDIF 337 338 !-- End of salinity computations 264 ! 339 265 END SUBROUTINE lim_thd_sal 340 !============================================================================== 266 341 267 342 268 SUBROUTINE lim_thd_sal_init … … 346 272 !! ** Purpose : initialization of ice salinity parameters 347 273 !! 348 !! ** Method : Read the namicesal namelist and check the parameter349 !! values called at the first timestep (nit000)274 !! ** Method : Read the namicesal namelist and check the parameter 275 !! values called at the first timestep (nit000) 350 276 !! 351 277 !! ** input : Namelist namicesal 352 !!353 !! history :354 !! 3.0 ! July 2005 M. Vancoppenolle Original code355 278 !!------------------------------------------------------------------- 356 NAMELIST/namicesal/ num_sal, bulk_sal, sal_G, time_G, sal_F, time_F, &357 s_i_max, s_i_min, s_i_0, s_i_1279 NAMELIST/namicesal/ num_sal, bulk_sal, sal_G, time_G, sal_F, time_F, & 280 & s_i_max, s_i_min, s_i_0, s_i_1 358 281 !!------------------------------------------------------------------- 359 360 ! Read Namelist namicesal361 RE WIND ( numnam_ice)362 READ ( numnam_ice , namicesal )363 IF(lwp) THEN 282 ! 283 REWIND( numnam_ice ) ! Read Namelist namicesal 284 READ ( numnam_ice , namicesal ) 285 ! 286 IF(lwp) THEN ! control print 364 287 WRITE(numout,*) 365 288 WRITE(numout,*) 'lim_thd_sal_init : Ice parameters for salinity ' … … 376 299 WRITE(numout,*) ' 2nd salinity for salinity profile : ', s_i_1 377 300 ENDIF 378 301 ! 379 302 END SUBROUTINE lim_thd_sal_init 380 303 381 304 #else 382 305 !!---------------------------------------------------------------------- 383 !! Default option Empty Module No sea-ice model 384 !!---------------------------------------------------------------------- 385 CONTAINS 386 SUBROUTINE lim_thd_sal ! Empty routine 387 END SUBROUTINE lim_thd_sal 306 !! Default option Dummy Module No LIM-3 sea-ice model 307 !!---------------------------------------------------------------------- 388 308 #endif 389 309 !!====================================================================== -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r2477 r2528 11 11 !! lim_trp_init : initialization and namelist read 12 12 !!---------------------------------------------------------------------- 13 !! * Modules used14 13 USE phycst 15 14 USE dom_oce … … 47 46 # include "vectopt_loop_substitute.h90" 48 47 !!---------------------------------------------------------------------- 49 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008)48 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 50 49 !! $Id$ 51 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 51 !!---------------------------------------------------------------------- 53 52 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limupdate.F90
r2477 r2528 13 13 !! 'key_lim3' LIM3 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! lim_update : computes update of sea-ice global variables 16 !! from trend terms 15 !! lim_update : computes update of sea-ice global variables from trend terms 17 16 !!---------------------------------------------------------------------- 18 !! * Modules used19 USE limistate20 17 USE limrhg ! ice rheology 21 18 USE lbclnk … … 54 51 55 52 !!---------------------------------------------------------------------- 56 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008)53 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 57 54 !! $Id$ 58 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 59 56 !!---------------------------------------------------------------------- 60 57 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r1465 r2528 63 63 64 64 !!---------------------------------------------------------------------- 65 !! LIM 3.0, UCL-ASTR-LOCEAN-IPSL (2008)65 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 66 66 !! $Id$ 67 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)67 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 68 68 !!---------------------------------------------------------------------- 69 69 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r2477 r2528 1 1 MODULE limwri 2 !!----------------------------------------------------------------------3 !! 'key_lim3' LIM3 sea-ice model4 !!----------------------------------------------------------------------5 2 !!====================================================================== 6 3 !! *** MODULE limwri *** … … 9 6 #if defined key_lim3 10 7 !!---------------------------------------------------------------------- 11 !! LIM 3.0, UCL-LOCEAN-IPSL (2008) 12 !! $Id$ 13 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 8 !! 'key_lim3' LIM3 sea-ice model 14 9 !!---------------------------------------------------------------------- 15 10 !! lim_wri : write of the diagnostics variables in ouput file 16 11 !! lim_wri_init : initialization and namelist read 17 12 !!---------------------------------------------------------------------- 18 !! * Modules used19 13 USE ioipsl 20 14 USE dianam ! build name of file (routine) … … 63 57 zzero = 0.e0 , & 64 58 zone = 1.e0 65 59 60 !!---------------------------------------------------------------------- 61 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 62 !! $Id$ 63 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 64 !!---------------------------------------------------------------------- 66 65 CONTAINS 66 67 67 #if defined key_dimgout 68 69 68 # include "limwri_dimg.h90" 70 71 69 #else 72 70 … … 145 143 CALL dia_nam ( clhstnam, nwrite, 'icemod' ) 146 144 CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit, 1, jpi, 1, jpj, niter, zjulian, rdt_ice, & 147 & nhorid, nice, domain_id=nidom )145 & nhorid, nice, domain_id=nidom, snc4chunks=snc4set ) 148 146 CALL histvert( nice, "deptht", "Vertical T levels", "m", 1, zdept, ndepid, "down") 149 147 CALL wheneq ( jpij , tmask(:,:,1), 1, 1., ndex51, ndim) … … 159 157 END DO 160 158 161 CALL histend(nice )159 CALL histend(nice, snc4set) 162 160 163 161 !----------------- … … 174 172 niter, zjulian, rdt_ice, & ! time 175 173 nhorida, & ! ? linked with horizontal ... 176 nicea , domain_id=nidom ) ! file174 nicea , domain_id=nidom, snc4chunks=snc4set) ! file 177 175 CALL histvert( nicea, "icethi", "L levels", & 178 176 "m", ipl , hi_mean , nz ) … … 194 192 CALL histdef( nicea, "iice_etd", "Brine volume distr. " , "%" , & 195 193 jpi, jpj, nhorida, jpl, 1, jpl, nz, 15, clop, zsto, zout ) 196 CALL histend(nicea )194 CALL histend(nicea, snc4set) 197 195 ENDIF 198 196 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limwri_dimg.h90
r1694 r2528 1 1 SUBROUTINE lim_wri 2 2 !!---------------------------------------------------------------------- 3 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)3 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 4 4 !! $Id$ 5 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt5 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 6 6 !!---------------------------------------------------------------------- 7 7 !!------------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/LIM_SRC_3/par_ice.F90
r1608 r2528 20 20 21 21 !!---------------------------------------------------------------------- 22 !! NEMO/LIM 3.2, UCL-ASTR-LOCEAN-IPSL (2009)22 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 23 23 !! $Id$ 24 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)24 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 25 25 !!====================================================================== 26 26 END MODULE par_ice -
trunk/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r1465 r2528 7 7 !! 2.0 ! 02-11 (C. Ethe) F90: Free form and module 8 8 !!---------------------------------------------------------------------- 9 !! LIM 3.0, UCL-LOCEAN-IPSL (2008)9 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 10 10 !! $Id$ 11 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)11 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 12 12 !!---------------------------------------------------------------------- 13 13 !! * Modules used
Note: See TracChangeset
for help on using the changeset viewer.