Changeset 700 for trunk/NEMO/LIM_SRC
- Timestamp:
- 2007-10-09T14:24:27+02:00 (17 years ago)
- Location:
- trunk/NEMO/LIM_SRC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC/icestp.F90
r699 r700 21 21 USE flx_oce ! forcings variables 22 22 USE dom_ice 23 USE cpl_oce24 23 USE daymod 25 24 USE phycst ! Define parameters for the routines … … 48 47 !!----------------------------------------------------- 49 48 !! LIM 2.0, UCL-LOCEAN-IPSL (2005) 50 !! $ Id$49 !! $Header$ 51 50 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 52 51 !!----------------------------------------------------- … … 71 70 72 71 INTEGER :: ji, jj ! dummy loop indices 73 REAL(wp), DIMENSION(jpi,jpj) :: zsss_io, zsss2_io, zsss3_io ! tempory workspaces 72 REAL(wp), DIMENSION(jpi,jpj) :: zsss_io, zsss2_io, zsss3_io ! tempory workspaces 73 REAL(wp) :: zmult ! tempory workspaces 74 74 !!---------------------------------------------------------------------- 75 75 76 76 IF( kt == nit000 ) THEN 77 IF( lk_cpl ) THEN 78 IF(lwp) WRITE(numout,*) 79 IF(lwp) WRITE(numout,*) 'ice_stp : Louvain la Neuve Ice Model (LIM)' 80 IF(lwp) WRITE(numout,*) '~~~~~~~ coupled case' 81 ELSE 82 IF(lwp) WRITE(numout,*) 83 IF(lwp) WRITE(numout,*) 'ice_stp : Louvain la Neuve Ice Model (LIM)' 84 IF(lwp) WRITE(numout,*) '~~~~~~~ forced case using bulk formulea' 85 ENDIF 86 ! Initialize fluxes fields 77 IF(lwp) WRITE(numout,*) 78 IF(lwp) WRITE(numout,*) 'ice_stp : Louvain la Neuve Ice Model (LIM)' 79 ! Initialize fluxes fields 87 80 gtaux(:,:) = 0.e0 88 81 gtauy(:,:) = 0.e0 … … 97 90 ! cumulate fields 98 91 ! 99 sst_io(:,:) = sst_io(:,:) + tn(:,:,1) + rt092 sst_io(:,:) = sst_io(:,:) + tn(:,:,1) 100 93 sss_io(:,:) = sss_io(:,:) + sn(:,:,1) 101 94 102 95 103 ! vectors at F-point96 ! surface ocean current at I-point (from U-, V-points) 104 97 DO jj = 2, jpj 105 98 DO ji = fs_2, jpi ! vector opt. 106 u_io (ji,jj) = u_io(ji,jj) + 0.5 * ( un(ji-1,jj ,1) + un(ji-1,jj-1,1))107 v_io (ji,jj) = v_io(ji,jj) + 0.5 * ( vn(ji ,jj-1,1) + vn(ji-1,jj-1,1))99 u_io (ji,jj) = u_io(ji,jj) + un(ji-1,jj ,1) + un(ji-1,jj-1,1) 100 v_io (ji,jj) = v_io(ji,jj) + vn(ji ,jj-1,1) + vn(ji-1,jj-1,1) 108 101 END DO 109 102 END DO … … 113 106 114 107 ! The LIM model is going to be call 115 sst_io(:,:) = sst_io(:,:) / FLOAT( nfice ) * tmask(:,:,1) 116 sss_io(:,:) = sss_io(:,:) / FLOAT( nfice ) 108 zmult = 1. / REAL( nfice, wp ) 109 sst_io(:,:) = zmult * sst_io(:,:) * tmask(:,:,1) + rt0 110 sss_io(:,:) = zmult * sss_io(:,:) 117 111 118 112 ! stress from ocean U- and V-points to ice U,V point 113 zmult = 0.5 * zmult 119 114 DO jj = 2, jpj 120 115 DO ji = fs_2, jpi ! vector opt. 121 gtaux(ji,jj) = 0.5 * ( taux(ji-1,jj ) + taux(ji-1,jj-1) ) 122 gtauy(ji,jj) = 0.5 * ( tauy(ji ,jj-1) + tauy(ji-1,jj-1) ) 123 u_io (ji,jj) = u_io(ji,jj) / FLOAT( nfice ) 124 v_io (ji,jj) = v_io(ji,jj) / FLOAT( nfice ) 116 ! ice/atmosphere stress at I-point (from U-, V-points) 117 gtaux(ji,jj) = 0.5 * ( taux_ice(ji-1,jj ) + taux_ice(ji-1,jj-1) ) 118 gtauy(ji,jj) = 0.5 * ( tauy_ice(ji ,jj-1) + tauy_ice(ji-1,jj-1) ) 119 120 u_io (ji,jj) = zmult * u_io(ji,jj) 121 v_io (ji,jj) = zmult * v_io(ji,jj) 125 122 END DO 126 123 END DO … … 168 165 !!gm END DO 169 166 !!gm 170 zsss_io (:,:) = SQRT( sss_io(:,:) ) 171 zsss2_io(:,:) = sss_io(:,:) * sss_io(:,:) 172 zsss3_io(:,:) = zsss_io(:,:) * zsss_io(:,:) * zsss_io(:,:) 173 174 DO jj = 1, jpj 175 DO ji = 1, jpi 176 tfu(ji,jj) = ABS ( rt0 - 0.0575 * sss_io(ji,jj) & 177 & + 1.710523e-03 * zsss3_io(ji,jj) & 178 & - 2.154996e-04 * zsss2_io(ji,jj) ) * tms(ji,jj) 167 zsss_io (:,:) = SQRT( sss_io(:,:) ) 168 zsss2_io(:,:) = sss_io(:,:) * sss_io(:,:) 169 zsss3_io(:,:) = zsss_io(:,:) * zsss_io(:,:) * zsss_io(:,:) 170 171 DO jj = 1, jpj 172 DO ji = 1, jpi 173 tfu(ji,jj) = ABS ( rt0 - 0.0575 * sss_io(ji,jj) & 174 & + 1.710523e-03 * zsss3_io(ji,jj) & 175 & - 2.154996e-04 * zsss2_io(ji,jj) ) * tms(ji,jj) 176 END DO 179 177 END DO 180 END DO181 182 178 183 179 … … 196 192 197 193 ! !-----------------------! 198 CALL lim_rst_opn( kt ) ! Open Ice restart file !194 CALL lim_rst_opn( kt ) ! Open Ice restart file ! 199 195 ! !-----------------------! 200 196 … … 240 236 241 237 IF( MOD( kt + nfice -1, ninfo ) == 0 .OR. ntmoy == 1 ) THEN !-----------------! 242 CALL lim_dia( kt ) ! Ice Diagnostics !238 CALL lim_dia( kt ) ! Ice Diagnostics ! 243 239 ENDIF !-----------------! 244 240 … … 248 244 249 245 ! !------------------------! 250 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Write Ice restart file !246 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Write Ice restart file ! 251 247 ! !------------------------! 252 248 … … 262 258 fr2_i0 (:,:) = 0.e0 263 259 evap (:,:) = 0.e0 264 #if defined key_coupled 265 rrunoff (:,:) = 0.e0 266 calving (:,:) = 0.e0 267 #else 260 #if ! defined key_coupled 268 261 qla_ice (:,:) = 0.e0 269 262 dqla_ice(:,:) = 0.e0 -
trunk/NEMO/LIM_SRC/limflx.F90
r699 r700 39 39 !!---------------------------------------------------------------------- 40 40 !! LIM 2.0, UCL-LOCEAN-IPSL (2005) 41 !! $ Id$41 !! $Header$ 42 42 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 43 43 !!---------------------------------------------------------------------- … … 106 106 DO jj = 1, jpj 107 107 DO ji = 1, jpi 108 zinda = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 109 ifvt = zinda * MAX( rzero , SIGN( rone, -phicif(ji,jj) ) ) 110 i1mfr = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - frld(ji,jj) ) ) ) 111 idfr = 1.0 - MAX( rzero , SIGN( rone , frld(ji,jj) - pfrld(ji,jj) ) ) 112 iflt = zinda * (1 - i1mfr) * (1 - ifvt ) 113 ial = ifvt * i1mfr + ( 1 - ifvt ) * idfr 114 iadv = ( 1 - i1mfr ) * zinda 115 ifral = ( 1 - i1mfr * ( 1 - ial ) ) 108 !!sm zinda = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 109 !!sm ifvt = zinda * MAX( rzero , SIGN( rone, -phicif(ji,jj) ) ) 110 !!sm i1mfr = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - frld(ji,jj) ) ) ) 111 !!sm idfr = 1.0 - MAX( rzero , SIGN( rone , frld(ji,jj) - pfrld(ji,jj) ) ) 112 113 zinda = 1.0 - AINT( pfrld(ji,jj) ) ! = 0. if pure ocean else 1. (at previous time) 114 115 i1mfr = 1.0 - AINT( frld(ji,jj) ) ! = 0. if pure ocean else 1. (at current time) 116 117 IF( phicif(ji,jj) <= 0. ) THEN ; ifvt = zinda ! = 1. if (snow and no ice at previous time) else 0. ??? 118 ELSE ; ifvt = 0. 119 ENDIF 120 121 IF( frld(ji,jj) >= pfrld(ji,jj) ) THEN ; idfr = 0. ! = 0. if lead fraction increases from previous to current 122 ELSE ; idfr = 1. 123 ENDIF 124 125 iflt = zinda * (1 - i1mfr) * (1 - ifvt ) ! = 1. if ice (not only snow) at previous and pure ocean at current 126 127 ial = ifvt * i1mfr + ( 1 - ifvt ) * idfr 128 ! snow no ice ice ice or nothing lead fraction increases 129 ! at previous now at previous 130 ! -> ice aera increases ??? -> ice aera decreases ??? 131 132 iadv = ( 1 - i1mfr ) * zinda 133 ! pure ocean ice at 134 ! at current previous 135 ! -> = 1. if ice disapear between previous and current 136 137 ifral = ( 1 - i1mfr * ( 1 - ial ) ) 138 ! ice at ??? 139 ! current 140 ! -> ??? 141 116 142 ifrdv = ( 1 - ifral * ( 1 - ial ) ) * iadv 143 ! ice disapear 144 ! 145 ! 117 146 z1mthcm = 1. - thcm(ji,jj) 118 147 ! computation the solar flux at ocean surface … … 179 208 !-----------------------------------------------! 180 209 181 ftaux (:,:) = - tio_u(:,:) * rau0 ! taux ( ice: N/m2/rau0, ocean: N/m2 )182 ftauy (:,:) = - tio_v(:,:) * rau0 ! tauy ( ice: N/m2/rau0, ocean: N/m2 )183 210 freeze(:,:) = 1.0 - frld(:,:) ! Sea ice cover 184 211 tn_ice(:,:) = sist(:,:) ! Ice surface temperature … … 201 228 CALL prt_ctl(tab2d_1=fsolar, clinfo1=' lim_flx: fsolar : ', tab2d_2=fnsolar, clinfo2=' fnsolar : ') 202 229 CALL prt_ctl(tab2d_1=fmass , clinfo1=' lim_flx: fmass : ', tab2d_2=fsalt , clinfo2=' fsalt : ') 203 CALL prt_ctl(tab2d_1=ftaux , clinfo1=' lim_flx: ftaux : ', tab2d_2=ftauy , clinfo2=' ftauy : ')204 230 CALL prt_ctl(tab2d_1=freeze, clinfo1=' lim_flx: freeze : ', tab2d_2=tn_ice , clinfo2=' tn_ice : ') 205 231 ENDIF -
trunk/NEMO/LIM_SRC/limhdf.F90
r699 r700 34 34 !!---------------------------------------------------------------------- 35 35 !! LIM 2.0, UCL-LOCEAN-IPSL (2005) 36 !! $ Id$36 !! $Header$ 37 37 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 38 38 !!---------------------------------------------------------------------- -
trunk/NEMO/LIM_SRC/limrhg.F90
r699 r700 4 4 !! Ice rheology : performs sea ice rheology 5 5 !!====================================================================== 6 !! History : 0.0 ! 93-12 (M.A. Morales Maqueda.) Original code 7 !! 1.0 ! 94-12 (H. Goosse) 8 !! 2.0 ! 03-12 (C. Ethe, G. Madec) F90, mpp 9 !! 3.0 ! 07-06 (S. Masson, G. Madec) ice/atmosphere stress 10 !! provided at I-point in forced and coupled mode 11 !!---------------------------------------------------------------------- 6 12 #if defined key_ice_lim 7 13 !!---------------------------------------------------------------------- … … 33 39 !!---------------------------------------------------------------------- 34 40 !! LIM 2.0, UCL-LOCEAN-IPSL (2005) 35 !! $ Id$41 !! $Header$ 36 42 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 37 43 !!---------------------------------------------------------------------- … … 50 56 !! ** Action : - compute u_ice, v_ice the sea-ice velocity 51 57 !! 52 !! History :53 !! 0.0 ! 93-12 (M.A. Morales Maqueda.) Original code54 !! 1.0 ! 94-12 (H. Goosse)55 !! 2.0 ! 03-12 (C. Ethe, G. Madec) F90, mpp56 58 !!------------------------------------------------------------------- 57 ! * Arguments58 59 INTEGER, INTENT(in) :: k_j1 , & ! southern j-index for ice computation 59 60 & k_jpj ! northern j-index for ice computation 60 61 61 ! * Local variables62 62 INTEGER :: ji, jj ! dummy loop indices 63 63 … … 77 77 zresm, zunw, zvnw, zur, zvr, zmod, za, zac, & 78 78 zmpzas, zstms, zindu, zindu1, zusdtp, zmassdt, zcorlal, & 79 ztrace2, zdeter, zdelta, zsang, zmask, zdgp, zdgi, zdiag 79 ztrace2, zdeter, zdelta, zsang, zmask, zdgp, zdgi, zdiag, zic 80 80 REAL(wp),DIMENSION(jpi,jpj) :: & 81 81 zpresh, zfrld, zmass, zcorl, & … … 92 92 zv0(:,:) = v_ice(:,:) 93 93 94 ! Ice mass, ice strength, and wind stress at the center | 95 ! of the grid squares. | 94 ! masked Ice mass, ice strength, Ice-cover fraction and Lead faction at T-point 96 95 !------------------------------------------------------------------- 97 96 … … 100 99 za1(ji,jj) = tms(ji,jj) * ( rhosn * hsnm(ji,jj) + rhoic * hicm(ji,jj) ) 101 100 zpresh(ji,jj) = tms(ji,jj) * pstarh * hicm(ji,jj) * EXP( -c_rhg * frld(ji,jj) ) 102 #if defined key_lim_cp1 && defined key_coupled 103 zb1(ji,jj) = tms(ji,jj) * gtaux(ji,jj) * ( 1.0 - frld(ji,jj) ) 104 zb2(ji,jj) = tms(ji,jj) * gtauy(ji,jj) * ( 1.0 - frld(ji,jj) ) 105 #else 106 zb1(ji,jj) = tms(ji,jj) * ( 1.0 - frld(ji,jj) ) 107 zb2(ji,jj) = tms(ji,jj) * ( 1.0 - frld(ji,jj) ) 108 #endif 101 102 zb1(ji,jj) = tms(ji,jj) * ( 1.0 - frld(ji,jj) ) 103 zb2(ji,jj) = tms(ji,jj) * frld(ji,jj) 109 104 END DO 110 105 END DO 111 106 112 113 !--------------------------------------------------------------------------- 114 ! Wind stress, coriolis and mass terms at the corners of the grid squares | 115 ! Gradient of ice strenght. | 107 ! Wind stress, coriolis, mass and Gradient of ice strenght at I-point 116 108 !--------------------------------------------------------------------------- 117 109 … … 122 114 zusw = 1.0 / MAX( zstms, epsd ) 123 115 124 zt11 = tms(ji ,jj ) * frld(ji ,jj ) 125 zt12 = tms(ji-1,jj ) * frld(ji-1,jj ) 126 zt21 = tms(ji ,jj-1) * frld(ji ,jj-1) 127 zt22 = tms(ji-1,jj-1) * frld(ji-1,jj-1) 128 129 ! Leads area. 130 zfrld(ji,jj) = ( zt11 * wght(ji,jj,2,2) + zt12 * wght(ji,jj,1,2) & 131 & + zt21 * wght(ji,jj,2,1) + zt22 * wght(ji,jj,1,1) ) * zusw 116 ! Leads area at I-point 117 zfrld(ji,jj) = ( zb2(ji,jj ) * wght(ji,jj,2,2) + zb2(ji-1,jj ) * wght(ji,jj,1,2) & 118 & + zb2(ji,jj-1) * wght(ji,jj,2,1) + zb2(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw 119 120 ! Ice cover area at I-point 121 zic = ( zb1(ji,jj ) * wght(ji,jj,2,2) + zb1(ji-1,jj ) * wght(ji,jj,1,2) & 122 & + zb1(ji,jj-1) * wght(ji,jj,2,1) + zb1(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw 123 124 ! Wind stress. 125 ztagnx = zic * gtaux(ji,jj) 126 ztagny = zic * gtauy(ji,jj) 132 127 133 128 ! Mass and coriolis coeff. … … 135 130 & + za1(ji,jj-1) * wght(ji,jj,2,1) + za1(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw 136 131 zcorl(ji,jj) = zmass(ji,jj) * fcor(ji,jj) 137 138 ! Wind stress.139 #if defined key_lim_cp1 && defined key_coupled140 ztagnx = ( zb1(ji,jj ) * wght(ji,jj,2,2) + zb1(ji-1,jj ) * wght(ji,jj,1,2) &141 & + zb1(ji,jj-1) * wght(ji,jj,2,1) + zb1(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw142 ztagny = ( zb2(ji,jj ) * wght(ji,jj,2,2) + zb2(ji-1,jj ) * wght(ji,jj,1,2) &143 & + zb2(ji,jj-1) * wght(ji,jj,2,1) + zb2(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw144 #else145 ztagnx = ( zb1(ji,jj ) * wght(ji,jj,2,2) + zb1(ji-1,jj ) * wght(ji,jj,1,2) &146 & + zb1(ji,jj-1) * wght(ji,jj,2,1) + zb1(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw * gtaux(ji,jj)147 ztagny = ( zb2(ji,jj ) * wght(ji,jj,2,2) + zb2(ji-1,jj ) * wght(ji,jj,1,2) &148 & + zb2(ji,jj-1) * wght(ji,jj,2,1) + zb2(ji-1,jj-1) * wght(ji,jj,1,1) ) * zusw * gtauy(ji,jj)149 #endif150 132 151 133 ! Gradient of ice strength … … 162 144 ! Computation of the velocity field taking into account the ice-ice interaction. 163 145 ! Terms that are independent of the velocity field. 164 za1ct(ji,jj) = ztagnx - zcorl(ji,jj) * v_ oce(ji,jj) - zgphsx165 za2ct(ji,jj) = ztagny + zcorl(ji,jj) * u_ oce(ji,jj) - zgphsy146 za1ct(ji,jj) = ztagnx - zcorl(ji,jj) * v_io(ji,jj) - zgphsx 147 za2ct(ji,jj) = ztagny + zcorl(ji,jj) * u_io(ji,jj) - zgphsy 166 148 END DO 167 149 END DO … … 403 385 zsang = SIGN( 1.e0, fcor(1,jj) ) * sangvg ! only the sinus changes its sign with the hemisphere 404 386 DO ji = 2, jpim1 405 zur = u_ice(ji,jj) - u_ oce(ji,jj)406 zvr = v_ice(ji,jj) - v_ oce(ji,jj)387 zur = u_ice(ji,jj) - u_io(ji,jj) 388 zvr = v_ice(ji,jj) - v_io(ji,jj) 407 389 zmod = SQRT( zur * zur + zvr * zvr) * ( 1.0 - zfrld(ji,jj) ) 408 390 za = rhoco * zmod … … 413 395 414 396 za1(ji,jj) = zmassdt * zu0(ji,jj) + zcorlal * zv0(ji,jj) + za1ct(ji,jj) & 415 & + za * ( cangvg * u_ oce(ji,jj) - zsang * v_oce(ji,jj) )397 & + za * ( cangvg * u_io(ji,jj) - zsang * v_io(ji,jj) ) 416 398 417 399 za2(ji,jj) = zmassdt * zv0(ji,jj) - zcorlal * zu0(ji,jj) + za2ct(ji,jj) & 418 & + za * ( cangvg * v_ oce(ji,jj) + zsang * u_oce(ji,jj) )400 & + za * ( cangvg * v_io(ji,jj) + zsang * u_io(ji,jj) ) 419 401 420 402 zb1(ji,jj) = zmassdt + zac - zc1u(ji,jj)
Note: See TracChangeset
for help on using the changeset viewer.