- Timestamp:
- 2012-11-21T14:19:18+01:00 (11 years ago)
- Location:
- branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/ice_2.F90
r2715 r3625 19 19 PUBLIC ice_alloc_2 ! Called in iceini_2.F90 20 20 21 INTEGER , PUBLIC :: numit !: ice iteration index22 REAL(wp), PUBLIC :: rdt_ice !: ice time step21 INTEGER , PUBLIC :: numit !: ice iteration index 22 REAL(wp), PUBLIC :: rdt_ice !: ice time step 23 23 24 24 ! !!* namicerun read in iceini * … … 98 98 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qstoif !: Energy stored in the brine pockets 99 99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbif !: Heat flux at the ice base 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdmsnif !: Variation of snow mass 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdmicif !: Variation of ice mass 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdm_snw !: Variation of snow mass over 1 time step [Kg/m2] 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdq_snw !: Heat content associated with rdm_snw [J/m2] 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdm_ice !: Variation of ice mass over 1 time step [Kg/m2] 103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdq_ice !: Heat content associated with rdm_ice [J/m2] 102 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qldif !: heat balance of the lead (or of the open ocean) 103 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qcmif !: Energy needed to freeze the ocean surface layer … … 153 155 154 156 ALLOCATE(phicif(jpi,jpj) , pfrld (jpi,jpj) , qstoif (jpi,jpj) , & 155 & fbif (jpi,jpj) , rdmsnif(jpi,jpj) , rdmicif(jpi,jpj) , & 157 & fbif (jpi,jpj) , rdm_snw(jpi,jpj) , rdq_snw(jpi,jpj) , & 158 & rdm_ice(jpi,jpj) , rdq_ice(jpi,jpj) , & 156 159 & qldif (jpi,jpj) , qcmif (jpi,jpj) , fdtcn (jpi,jpj) , & 157 160 & qdtcn (jpi,jpj) , thcm (jpi,jpj) , STAT=ierr(4) ) -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/iceini_2.F90
r3294 r3625 13 13 !! 'key_lim2' : LIM 2.0 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! ice_init_2 16 !! ice_run_2 15 !! ice_init_2 : sea-ice model initialization 16 !! ice_run_2 : Definition some run parameter for ice model 17 17 !!---------------------------------------------------------------------- 18 USE phycst ! physical constants 19 USE dom_oce ! ocean domain 20 USE sbc_oce ! surface boundary condition: ocean 21 USE sbc_ice ! LIM2 surface boundary condition 22 USE dom_ice_2 ! LIM2 ice domain 23 USE par_ice_2 ! LIM2 parameters 24 USE thd_ice_2 ! LIM2 thermodynamical variables 25 USE ice_2 ! LIM2 ice variable 26 USE limmsh_2 ! LIM2 mesh 27 USE limistate_2 ! LIM2 initial state 28 USE limrst_2 ! LIM2 restart 29 USE limsbc_2 ! LIM2 surface boundary condition 30 USE in_out_manager ! I/O manager 31 USE lib_mpp ! MPP library 18 USE phycst ! physical constants 19 USE dom_oce ! ocean domain 20 USE sbc_oce ! surface boundary condition: ocean 21 USE sbc_ice ! LIM2 surface boundary condition 22 USE dom_ice_2 ! LIM2 ice domain 23 USE par_ice_2 ! LIM2 parameters 24 USE thd_ice_2 ! LIM2 thermodynamical variables 25 USE ice_2 ! LIM2 ice variable 26 USE limmsh_2 ! LIM2 mesh 27 USE limistate_2 ! LIM2 initial state 28 USE limrst_2 ! LIM2 restart 29 USE limsbc_2 ! LIM2 surface boundary condition 30 USE in_out_manager ! I/O manager 31 USE lib_mpp ! MPP library 32 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 32 33 33 34 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limadv_2.F90
r3294 r3625 14 14 !! 'key_lim2' LIM 2.0 sea-ice model 15 15 !!---------------------------------------------------------------------- 16 !! lim_adv_x_2 : advection of sea ice on x axis17 !! lim_adv_y_2 : advection of sea ice on y axis16 !! lim_adv_x_2 : advection of sea ice on x axis 17 !! lim_adv_y_2 : advection of sea ice on y axis 18 18 !!---------------------------------------------------------------------- 19 19 USE dom_oce … … 21 21 USE ice_2 22 22 USE lbclnk 23 USE in_out_manager ! I/O manager 24 USE lib_mpp ! MPP library 25 USE wrk_nemo ! work arrays 26 USE prtctl ! Print control 23 USE in_out_manager ! I/O manager 24 USE lib_mpp ! MPP library 25 USE wrk_nemo ! work arrays 26 USE prtctl ! Print control 27 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 27 28 28 29 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limdia_2.F90
r2715 r3625 24 24 USE in_out_manager ! I/O manager 25 25 USE lib_mpp ! MPP library 26 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 26 27 27 28 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limdmp_2.F90
r2715 r3625 19 19 USE in_out_manager ! I/O manager 20 20 USE lib_mpp ! MPP library 21 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 21 22 22 23 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limdyn_2.F90
r3294 r3625 31 31 USE in_out_manager ! I/O manager 32 32 USE prtctl ! Print control 33 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 33 34 34 35 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limhdf_2.F90
r3294 r3625 21 21 USE prtctl ! Print control 22 22 USE in_out_manager ! I/O manager 23 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 23 24 24 25 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limistate_2.F90
r3294 r3625 27 27 USE iom 28 28 USE in_out_manager 29 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 29 30 30 31 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limmsh_2.F90
r3294 r3625 23 23 USE wrk_nemo ! work arrays 24 24 #endif 25 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 25 26 26 27 IMPLICIT NONE -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limrhg_2.F90
r3294 r3625 30 30 USE in_out_manager ! I/O manager 31 31 USE prtctl ! Print control 32 USE oce , ONLY : snwice_mass, snwice_mass_b 33 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 32 34 33 35 IMPLICIT NONE … … 80 82 REAL(wp) :: zs21_11, zs21_12, zs21_21, zs21_22 81 83 REAL(wp) :: zs22_11, zs22_12, zs22_21, zs22_22 84 REAL(wp) :: zintb, zintn 82 85 REAL(wp), POINTER, DIMENSION(:,:) :: zfrld, zmass, zcorl 83 86 REAL(wp), POINTER, DIMENSION(:,:) :: za1ct, za2ct, zresr 84 87 REAL(wp), POINTER, DIMENSION(:,:) :: zc1u, zc1v, zc2u, zc2v 85 REAL(wp), POINTER, DIMENSION(:,:) :: zsang 88 REAL(wp), POINTER, DIMENSION(:,:) :: zsang, zpice 86 89 REAL(wp), POINTER, DIMENSION(:,:) :: zu0, zv0 87 90 REAL(wp), POINTER, DIMENSION(:,:) :: zu_n, zv_n … … 93 96 94 97 CALL wrk_alloc( jpi,jpj, zfrld, zmass, zcorl, za1ct, za2ct, zresr ) 95 CALL wrk_alloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang )98 CALL wrk_alloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang, zpice ) 96 99 CALL wrk_alloc( jpi,jpj+2, zu0, zv0, zu_n, zv_n, zu_a, zv_a, zviszeta, zviseta, kjstart = 0 ) 97 100 CALL wrk_alloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kjstart = 0 ) … … 129 132 !i zviszeta(:,jpj+1) = 0._wp ; zviseta(:,jpj+1) = 0._wp 130 133 134 IF( nn_ice_embd == 2 ) THEN !== embedded sea ice: compute representative ice top surface ==! 135 ! 136 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} 137 ! = (1/nn_fsbc)^2 * {SUM[n], n=0,nn_fsbc-1} 138 zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp 139 ! 140 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1} 141 ! = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1}) 142 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 143 ! 144 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0 145 ! 146 ! 147 ELSE !== non-embedded sea ice: use ocean surface for slope calculation ==! 148 zpice(:,:) = ssh_m(:,:) 149 ENDIF 131 150 132 151 ! Ice mass, ice strength, and wind stress at the center | … … 196 215 197 216 ! Gradient of the sea surface height 198 zgsshx = ( ( ssh_m(ji ,jj ) - ssh_m(ji-1,jj ))/e1u(ji-1,jj ) &199 & + ( ssh_m(ji ,jj-1) - ssh_m(ji-1,jj-1))/e1u(ji-1,jj-1) ) * 0.5_wp200 zgsshy = ( ( ssh_m(ji ,jj ) - ssh_m(ji ,jj-1))/e2v(ji ,jj-1) &201 & + ( ssh_m(ji-1,jj ) - ssh_m(ji-1,jj-1))/e2v(ji-1,jj-1) ) * 0.5_wp217 zgsshx = ( (zpice(ji ,jj ) - zpice(ji-1,jj ))/e1u(ji-1,jj ) & 218 & + (zpice(ji ,jj-1) - zpice(ji-1,jj-1))/e1u(ji-1,jj-1) ) * 0.5_wp 219 zgsshy = ( (zpice(ji ,jj ) - zpice(ji ,jj-1))/e2v(ji ,jj-1) & 220 & + (zpice(ji-1,jj ) - zpice(ji-1,jj-1))/e2v(ji-1,jj-1) ) * 0.5_wp 202 221 203 222 ! Computation of the velocity field taking into account the ice-ice interaction. … … 575 594 576 595 CALL wrk_dealloc( jpi,jpj, zfrld, zmass, zcorl, za1ct, za2ct, zresr ) 577 CALL wrk_dealloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang )596 CALL wrk_dealloc( jpi,jpj, zc1u , zc1v , zc2u , zc2v , zsang, zpice ) 578 597 CALL wrk_dealloc( jpi,jpj+2, zu0, zv0, zu_n, zv_n, zu_a, zv_a, zviszeta, zviseta, kjstart = 0 ) 579 598 CALL wrk_dealloc( jpi,jpj+2, zzfrld, zztms, zi1, zi2, zmasst, zpresh, kjstart = 0 ) -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r3294 r3625 9 9 !! 3.3 ! 2009-05 (G. Garric, C. Bricaud) addition of the lim2_evp case 10 10 !! - ! 2010-11 (G. Madec) ice-ocean stress computed at each ocean time-step 11 !! 4.0 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 11 !! 3.3.1 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 12 !! 3.5 ! 2012-11 ((G. Madec, Y. Aksenov, A. Coward) salt and heat fluxes associated with e-p 12 13 !!---------------------------------------------------------------------- 13 14 #if defined key_lim2 … … 28 29 USE sbc_oce ! surface boundary condition: ocean 29 30 USE sbccpl 30 31 USE cpl_oasis3, ONLY : lk_cpl 32 USE oce , ONLY : sshn, sshb, snwice_mass, snwice_mass_b, snwice_fmass 31 33 USE albedo ! albedo parameters 32 34 USE lbclnk ! ocean lateral boundary condition - MPP exchanges … … 37 39 USE iom ! I/O library 38 40 USE prtctl ! Print control 39 USE cpl_oasis3, ONLY : lk_cpl41 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 40 42 41 43 IMPLICIT NONE … … 88 90 !! - Update the fluxes provided to the ocean 89 91 !! 90 !! ** Outputs : - qsr : sea heat flux :solar91 !! - qns : sea heat flux : non solar92 !! - emp : freshwater budget: volumeflux93 !! - emps : freshwater budget: concentration/dillution92 !! ** Outputs : - qsr : sea heat flux : solar 93 !! - qns : sea heat flux : non solar (including heat content of the mass flux) 94 !! - emp : freshwater budget: mass flux 95 !! - sfx : freshwater budget: salt flux due to Freezing/Melting 94 96 !! - utau : sea surface i-stress (ocean referential) 95 97 !! - vtau : sea surface j-stress (ocean referential) … … 107 109 INTEGER :: ifvt, i1mfr, idfr, iflt ! - - 108 110 INTEGER :: ial, iadv, ifral, ifrdv ! - - 109 REAL(wp) :: zqsr, zqns, zfm ! local scalars 110 REAL(wp) :: zinda, zfons, zemp ! - - 111 REAL(wp) :: zqsr, zqns, zfmm ! local scalars 112 REAL(wp) :: zinda, zfsalt, zemp ! - - 113 REAL(wp) :: zemp_snw, zqhc, zcd ! - - 114 REAL(wp) :: zswitch ! - - 111 115 REAL(wp), POINTER, DIMENSION(:,:) :: zqnsoce ! 2D workspace 112 116 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb, zalbp ! 2D/3D workspace … … 115 119 CALL wrk_alloc( jpi, jpj, zqnsoce ) 116 120 CALL wrk_alloc( jpi, jpj, 1, zalb, zalbp ) 121 122 SELECT CASE( nn_ice_embd ) ! levitating or embedded sea-ice option 123 CASE( 0 ) ; zswitch = 1 ! (0) standard levitating sea-ice : salt exchange only 124 CASE( 1, 2 ) ; zswitch = 0 ! (1) levitating sea-ice: salt and volume exchange but no pressure effect 125 ! (2) embedded sea-ice : salt and volume fluxes and pressure 126 END SELECT ! 117 127 118 128 !------------------------------------------! … … 133 143 ifrdv = ( 1 - ifral * ( 1 - ial ) ) * iadv 134 144 135 !!$ zinda = 1.0 - AINT( pfrld(ji,jj) ) ! = 0. if pure ocean else 1. (at previous time)136 !!$ 137 !!$ i1mfr = 1.0 - AINT( frld(ji,jj) ) ! = 0. if pure ocean else 1. (at current time)138 !!$ 139 !!$ IF( phicif(ji,jj) <= 0. ) THEN ; ifvt = zinda ! = 1. if (snow and no ice at previous time) else 0.???140 !!$ ELSE ; ifvt = 0. 145 !!$ attempt to explain the tricky flags set above.... 146 !!$ zinda = 1.0 - AINT( pfrld(ji,jj) ) ! = 0. if ice-free ocean else 1. (after ice adv, but before ice thermo) 147 !!$ i1mfr = 1.0 - AINT( frld(ji,jj) ) ! = 0. if ice-free ocean else 1. (after ice thermo) 148 !!$ 149 !!$ IF( phicif(ji,jj) <= 0. ) THEN ; ifvt = zinda ! = zinda if previous thermodynamic step overmelted the ice??? 150 !!$ ELSE ; ifvt = 0. ! 141 151 !!$ ENDIF 142 152 !!$ 143 !!$ IF( frld(ji,jj) >= pfrld(ji,jj) ) THEN ; idfr = 0. ! = 0. if lead fraction increases from previous to current153 !!$ IF( frld(ji,jj) >= pfrld(ji,jj) ) THEN ; idfr = 0. ! = 0. if lead fraction increases due to ice thermodynamics 144 154 !!$ ELSE ; idfr = 1. 145 155 !!$ ENDIF 146 156 !!$ 147 !!$ iflt = zinda * (1 - i1mfr) * (1 - ifvt ) ! = 1. if ice (not only snow) at previous and pure ocean at current157 !!$ iflt = zinda * (1 - i1mfr) * (1 - ifvt ) ! = 1. if ice (not only snow) at previous time and ice-free ocean currently 148 158 !!$ 149 159 !!$ ial = ifvt * i1mfr + ( 1 - ifvt ) * idfr 160 !!$ = i1mfr if ifvt = 1 i.e. 161 !!$ = idfr if ifvt = 0 150 162 !!$! snow no ice ice ice or nothing lead fraction increases 151 163 !!$! at previous now at previous 152 !!$! -> ice a era increases ??? -> ice aera decreases ???164 !!$! -> ice area increases ??? -> ice area decreases ??? 153 165 !!$ 154 166 !!$ iadv = ( 1 - i1mfr ) * zinda … … 174 186 #endif 175 187 ! computation the non solar heat flux at ocean surface 176 zqns = - ( 1. - thcm(ji,jj) ) * zqsr & ! part of the solar energy used in leads 177 & + iflt * ( fscmbq(ji,jj) + ffltbif(ji,jj) ) & 178 & + ifral * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) * r1_rdtice & 179 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) ) * r1_rdtice 180 181 fsbbq(ji,jj) = ( 1.0 - ( ifvt + iflt ) ) * fscmbq(ji,jj) ! ??? 182 ! 188 zqns = - ( 1. - thcm(ji,jj) ) * zqsr & ! part of the solar energy used in leads 189 & + iflt * ( fscmbq(ji,jj) + ffltbif(ji,jj) ) & 190 & + ifral * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) * r1_rdtice & 191 & + ifrdv * ( qfvbq(ji,jj) + qdtcn(ji,jj) ) * r1_rdtice 192 193 fsbbq(ji,jj) = ( 1.0 - ( ifvt + iflt ) ) * fscmbq(ji,jj) ! store residual heat flux (to put into the ocean at the next time-step) 194 zqhc = ( rdq_snw(ji,jj) & 195 & + rdq_ice(ji,jj) * ( 1.- zswitch) ) * r1_rdtice ! heat flux due to snow ( & ice heat content, 196 ! ! if ice/ocean mass exchange active) 183 197 qsr (ji,jj) = zqsr ! solar heat flux 184 qns (ji,jj) = zqns - fdtcn(ji,jj) ! non solar heat flux 198 qns (ji,jj) = zqns - fdtcn(ji,jj) + zqhc ! non solar heat flux 199 ! 200 ! !------------------------------------------! 201 ! ! mass and salt flux at the ocean surface ! 202 ! !------------------------------------------! 203 ! 204 ! mass flux at the ocean-atmosphere interface (open ocean fraction = leads area) 205 #if defined key_coupled 206 ! ! coupled mode: 207 zemp = + emp_tot(ji,jj) & ! net mass flux over the grid cell (ice+ocean area) 208 & - emp_ice(ji,jj) * ( 1. - pfrld(ji,jj) ) ! minus the mass flux intercepted by sea-ice 209 #else 210 ! ! forced mode: 211 zemp = + emp(ji,jj) * frld(ji,jj) & ! mass flux over open ocean fraction 212 & - tprecip(ji,jj) * ( 1. - frld(ji,jj) ) & ! liquid precip. over ice reaches directly the ocean 213 & + sprecip(ji,jj) * ( 1. - pfrld(ji,jj) ) ! snow is intercepted by sea-ice (previous frld) 214 #endif 215 ! 216 ! mass flux at the ocean/ice interface (sea ice fraction) 217 zemp_snw = rdm_snw(ji,jj) * r1_rdtice ! snow melting = pure water that enters the ocean 218 zfmm = rdm_ice(ji,jj) * r1_rdtice ! Freezing minus Melting (F-M) 219 220 ! salt flux at the ice/ocean interface (sea ice fraction) [PSU*kg/m2/s] 221 zfsalt = - sice_0(ji,jj) * zfmm ! F-M salt exchange 222 zcd = soce_0(ji,jj) * zfmm ! concentration/dilution term due to F-M 223 ! 224 ! salt flux only : add concentration dilution term in salt flux and no F-M term in volume flux 225 ! salt and mass fluxes : non concentration dilution term in salt flux and add F-M term in volume flux 226 sfx (ji,jj) = zfsalt + zswitch * zcd ! salt flux (+ C/D if no ice/ocean mass exchange) 227 emp (ji,jj) = zemp + zemp_snw + ( 1.- zswitch) * zfmm ! mass flux (+ F/M mass flux if ice/ocean mass exchange) 228 ! 185 229 END DO 186 230 END DO 231 ! !------------------------------------------! 232 ! ! mass of snow and ice per unit area ! 233 ! !------------------------------------------! 234 IF( nn_ice_embd /= 0 ) THEN ! embedded sea-ice (mass required) 235 snwice_mass_b(:,:) = snwice_mass(:,:) ! save mass from the previous ice time step 236 ! ! new mass per unit area 237 snwice_mass (:,:) = tms(:,:) * ( rhosn * hsnif(:,:) + rhoic * hicif(:,:) ) * ( 1.0 - frld(:,:) ) 238 ! ! time evolution of snow+ice mass 239 snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) / rdt_ice 240 ENDIF 187 241 188 242 CALL iom_put( 'hflx_ice_cea', - fdtcn(:,:) ) … … 190 244 CALL iom_put( 'qsr_io_cea', fstric(:,:) * (1.e0 - pfrld(:,:)) ) 191 245 192 !------------------------------------------!193 ! mass flux at the ocean surface !194 !------------------------------------------!195 DO jj = 1, jpj196 DO ji = 1, jpi197 !198 #if defined key_coupled199 ! freshwater exchanges at the ice-atmosphere / ocean interface (coupled mode)200 zemp = emp_tot(ji,jj) - emp_ice(ji,jj) * ( 1. - pfrld(ji,jj) ) & !201 & + rdmsnif(ji,jj) * r1_rdtice ! freshwaterflux due to snow melting202 #else203 ! computing freshwater exchanges at the ice/ocean interface204 zemp = + emp(ji,jj) * frld(ji,jj) & ! e-p budget over open ocean fraction205 & - tprecip(ji,jj) * ( 1. - frld(ji,jj) ) & ! liquid precipitation reaches directly the ocean206 & + sprecip(ji,jj) * ( 1. - pfrld(ji,jj) ) & ! change in ice cover within the time step207 & + rdmsnif(ji,jj) * r1_rdtice ! freshwater flux due to snow melting208 #endif209 !210 ! computing salt exchanges at the ice/ocean interface211 zfons = ( soce_0(ji,jj) - sice_0(ji,jj) ) * ( rdmicif(ji,jj) * r1_rdtice )212 !213 ! converting the salt flux from ice to a freshwater flux from ocean214 zfm = zfons / ( sss_m(ji,jj) + epsi16 )215 !216 emps(ji,jj) = zemp + zfm ! surface ocean concentration/dilution effect (use on SSS evolution)217 emp (ji,jj) = zemp ! surface ocean volume flux (use on sea-surface height evolution)218 !219 END DO220 END DO221 222 246 IF( lk_diaar5 ) THEN ! AR5 diagnostics 223 CALL iom_put( 'isnwmlt_cea' , rdm snif(:,:) * r1_rdtice )224 CALL iom_put( 'fsal_virt_cea', soce_0(:,:) * rdm icif(:,:) * r1_rdtice )225 CALL iom_put( 'fsal_real_cea', - sice_0(:,:) * rdm icif(:,:) * r1_rdtice )247 CALL iom_put( 'isnwmlt_cea' , rdm_snw(:,:) * r1_rdtice ) 248 CALL iom_put( 'fsal_virt_cea', soce_0(:,:) * rdm_ice(:,:) * r1_rdtice ) 249 CALL iom_put( 'fsal_real_cea', - sice_0(:,:) * rdm_ice(:,:) * r1_rdtice ) 226 250 ENDIF 227 251 … … 243 267 IF(ln_ctl) THEN ! control print 244 268 CALL prt_ctl(tab2d_1=qsr , clinfo1=' lim_sbc: qsr : ', tab2d_2=qns , clinfo2=' qns : ') 245 CALL prt_ctl(tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2= emps , clinfo2=' emps: ')269 CALL prt_ctl(tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2=sfx , clinfo2=' sfx : ') 246 270 CALL prt_ctl(tab2d_1=utau , clinfo1=' lim_sbc: utau : ', mask1=umask, & 247 271 & tab2d_2=vtau , clinfo2=' vtau : ' , mask2=vmask ) … … 439 463 END WHERE 440 464 ENDIF 465 ! ! embedded sea ice 466 IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass 467 snwice_mass (:,:) = tms(:,:) * ( rhosn * hsnif(:,:) + rhoic * hicif(:,:) ) * ( 1.0 - frld(:,:) ) 468 snwice_mass_b(:,:) = snwice_mass(:,:) 469 ELSE 470 snwice_mass (:,:) = 0.e0 ! no mass exchanges 471 snwice_mass_b(:,:) = 0.e0 ! no mass exchanges 472 ENDIF 473 IF( nn_ice_embd == 2 .AND. & ! full embedment (case 2) & no restart : 474 & .NOT.ln_rstart ) THEN ! deplete the initial ssh below sea-ice area 475 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 476 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 477 ENDIF 441 478 ! 442 479 END SUBROUTINE lim_sbc_init_2 -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r3294 r3625 13 13 !! 'key_lim2' : LIM 2.0 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! lim_thd_2 : thermodynamic of sea ice16 !! lim_thd_init_2 : initialisation of sea-ice thermodynamic15 !! lim_thd_2 : thermodynamic of sea ice 16 !! lim_thd_init_2 : initialisation of sea-ice thermodynamic 17 17 !!---------------------------------------------------------------------- 18 USE phycst ! physical constants19 USE dom_oce ! ocean space and time domain variables18 USE phycst ! physical constants 19 USE dom_oce ! ocean space and time domain variables 20 20 USE domvvl 21 21 USE lbclnk 22 USE in_out_manager ! I/O manager22 USE in_out_manager ! I/O manager 23 23 USE lib_mpp 24 USE wrk_nemo ! work arrays25 USE iom ! IOM library26 USE ice_2 ! LIM sea-ice variables27 USE sbc_oce !28 USE sbc_ice !29 USE thd_ice_2 ! LIM thermodynamic sea-ice variables30 USE dom_ice_2 ! LIM sea-ice domain24 USE wrk_nemo ! work arrays 25 USE iom ! IOM library 26 USE ice_2 ! LIM sea-ice variables 27 USE sbc_oce ! 28 USE sbc_ice ! 29 USE thd_ice_2 ! LIM thermodynamic sea-ice variables 30 USE dom_ice_2 ! LIM sea-ice domain 31 31 USE limthd_zdf_2 32 32 USE limthd_lac_2 33 33 USE limtab_2 34 USE prtctl ! Print control 35 USE cpl_oasis3, ONLY : lk_cpl 36 USE diaar5, ONLY : lk_diaar5 37 34 USE prtctl ! Print control 35 USE cpl_oasis3, ONLY : lk_cpl 36 USE diaar5 , ONLY : lk_diaar5 37 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 38 38 39 IMPLICIT NONE 39 40 PRIVATE … … 55 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 57 !!---------------------------------------------------------------------- 57 58 58 CONTAINS 59 59 … … 89 89 REAL(wp) :: za , zh, zthsnice ! 90 90 REAL(wp) :: zfric_u ! friction velocity 91 REAL(wp) :: zfnsol ! total non solar heat92 REAL(wp) :: zfontn ! heat flux from snow thickness93 91 REAL(wp) :: zfntlat, zpareff ! test. the val. of lead heat budget 94 92 … … 129 127 zdvolif(:,:) = 0.e0 ! total variation of ice volume 130 128 zdvonif(:,:) = 0.e0 ! transformation of snow to sea-ice volume 131 ! zdvonif(:,:) = 0.e0 ! lateral variation of ice volume132 129 zlicegr(:,:) = 0.e0 ! lateral variation of ice volume 133 130 zdvomif(:,:) = 0.e0 ! variation of ice volume at bottom due to melting only … … 137 134 ffltbif(:,:) = 0.e0 ! linked with fstric 138 135 qfvbq (:,:) = 0.e0 ! linked with fstric 139 rdmsnif(:,:) = 0.e0 ! variation of snow mass per unit area 140 rdmicif(:,:) = 0.e0 ! variation of ice mass per unit area 136 rdm_snw(:,:) = 0.e0 ! variation of snow mass over 1 time step 137 rdq_snw(:,:) = 0.e0 ! heat content associated with rdm_snw 138 rdm_ice(:,:) = 0.e0 ! variation of ice mass over 1 time step 139 rdq_ice(:,:) = 0.e0 ! heat content associated with rdm_ice 141 140 zmsk (:,:,:) = 0.e0 142 141 … … 199 198 !-------------------------------------------------------------------------- 200 199 201 sst_m(:,:) = sst_m(:,:) + rt0 202 203 !CDIR NOVERRCHK 204 DO jj = 1, jpj 205 !CDIR NOVERRCHK 200 !CDIR NOVERRCHK 201 DO jj = 1, jpj 202 !CDIR NOVERRCHK 206 203 DO ji = 1, jpi 207 204 zthsnice = hsnif(ji,jj) + hicif(ji,jj) … … 217 214 ! temperature and turbulent mixing (McPhee, 1992) 218 215 zfric_u = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin ) ! friction velocity 219 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) - tfu(ji,jj) )216 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) + rt0 - tfu(ji,jj) ) 220 217 qdtcn(ji,jj) = zindb * fdtcn(ji,jj) * frld(ji,jj) * rdt_ice 221 218 222 219 ! partial computation of the lead energy budget (qldif) 223 220 #if defined key_coupled 224 qldif(ji,jj) = tms(ji,jj) * rdt_ice &221 qldif(ji,jj) = tms(ji,jj) * rdt_ice & 225 222 & * ( ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) ) & 226 223 & + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp ) & 227 224 & + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) ) ) 228 225 #else 229 zfontn = ( sprecip(ji,jj) / rhosn ) * xlsn ! energy for melting solid precipitation 230 zfnsol = qns(ji,jj) ! total non solar flux over the ocean 231 qldif(ji,jj) = tms(ji,jj) * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 232 & + zfnsol + fdtcn(ji,jj) - zfontn & 233 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 234 & * frld(ji,jj) * rdt_ice 235 !!$ qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) 236 !!$ & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 237 !!$ & + qns(ji,jj) + fdtcn(ji,jj) - zfontn & 238 !!$ & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 226 qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) & 227 & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 228 & + qns(ji,jj) + fdtcn(ji,jj) & 229 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) 239 230 #endif 240 231 ! parlat : percentage of energy used for lateral ablation (0.0) … … 246 237 247 238 ! energy needed to bring ocean surface layer until its freezing 248 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) & 249 & * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 239 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) - rt0 ) * ( 1 - zinda ) 250 240 251 241 ! calculate oceanic heat flux. … … 257 247 END DO 258 248 259 sst_m(:,:) = sst_m(:,:) - rt0260 261 249 ! Select icy points and fulfill arrays for the vectorial grid. 262 250 !---------------------------------------------------------------------- … … 312 300 CALL tab_2d_1d_2( nbpb, qldif_1d (1:nbpb) , qldif , jpi, jpj, npb(1:nbpb) ) 313 301 CALL tab_2d_1d_2( nbpb, qstbif_1d (1:nbpb) , qstoif , jpi, jpj, npb(1:nbpb) ) 314 CALL tab_2d_1d_2( nbpb, rdmicif_1d (1:nbpb) , rdmicif , jpi, jpj, npb(1:nbpb) ) 302 CALL tab_2d_1d_2( nbpb, rdm_ice_1d (1:nbpb) , rdm_ice , jpi, jpj, npb(1:nbpb) ) 303 CALL tab_2d_1d_2( nbpb, rdq_ice_1d (1:nbpb) , rdq_ice , jpi, jpj, npb(1:nbpb) ) 315 304 CALL tab_2d_1d_2( nbpb, dmgwi_1d (1:nbpb) , dmgwi , jpi, jpj, npb(1:nbpb) ) 305 CALL tab_2d_1d_2( nbpb, rdm_snw_1d (1:nbpb) , rdm_snw , jpi, jpj, npb(1:nbpb) ) 306 CALL tab_2d_1d_2( nbpb, rdq_snw_1d (1:nbpb) , rdq_snw , jpi, jpj, npb(1:nbpb) ) 316 307 CALL tab_2d_1d_2( nbpb, qlbbq_1d (1:nbpb) , zqlbsbq , jpi, jpj, npb(1:nbpb) ) 317 308 ! … … 332 323 CALL tab_1d_2d_2( nbpb, qfvbq , npb, qfvbq_1d (1:nbpb) , jpi, jpj ) 333 324 CALL tab_1d_2d_2( nbpb, qstoif , npb, qstbif_1d (1:nbpb) , jpi, jpj ) 334 CALL tab_1d_2d_2( nbpb, rdmicif , npb, rdmicif_1d(1:nbpb) , jpi, jpj ) 325 CALL tab_1d_2d_2( nbpb, rdm_ice , npb, rdm_ice_1d(1:nbpb) , jpi, jpj ) 326 CALL tab_1d_2d_2( nbpb, rdq_ice , npb, rdq_ice_1d(1:nbpb) , jpi, jpj ) 335 327 CALL tab_1d_2d_2( nbpb, dmgwi , npb, dmgwi_1d (1:nbpb) , jpi, jpj ) 336 CALL tab_1d_2d_2( nbpb, rdmsnif , npb, rdmsnif_1d(1:nbpb) , jpi, jpj ) 328 CALL tab_1d_2d_2( nbpb, rdm_snw , npb, rdm_snw_1d(1:nbpb) , jpi, jpj ) 329 CALL tab_1d_2d_2( nbpb, rdq_snw , npb, rdq_snw_1d(1:nbpb) , jpi, jpj ) 337 330 CALL tab_1d_2d_2( nbpb, zdvosif , npb, dvsbq_1d (1:nbpb) , jpi, jpj ) 338 331 CALL tab_1d_2d_2( nbpb, zdvobif , npb, dvbbq_1d (1:nbpb) , jpi, jpj ) … … 393 386 IF( nbpac > 0 ) THEN 394 387 ! 395 zlicegr(:,:) = rdm icif(:,:) ! to output the lateral sea-ice growth388 zlicegr(:,:) = rdm_ice(:,:) ! to output the lateral sea-ice growth 396 389 !...Put the variable in a 1-D array for lateral accretion 397 390 CALL tab_2d_1d_2( nbpac, frld_1d (1:nbpac) , frld , jpi, jpj, npac(1:nbpac) ) … … 404 397 CALL tab_2d_1d_2( nbpac, qcmif_1d (1:nbpac) , qcmif , jpi, jpj, npac(1:nbpac) ) 405 398 CALL tab_2d_1d_2( nbpac, qstbif_1d (1:nbpac) , qstoif , jpi, jpj, npac(1:nbpac) ) 406 CALL tab_2d_1d_2( nbpac, rdmicif_1d(1:nbpac) , rdmicif , jpi, jpj, npac(1:nbpac) ) 399 CALL tab_2d_1d_2( nbpac, rdm_ice_1d(1:nbpac) , rdm_ice , jpi, jpj, npac(1:nbpac) ) 400 CALL tab_2d_1d_2( nbpac, rdq_ice_1d(1:nbpac) , rdq_ice , jpi, jpj, npac(1:nbpac) ) 407 401 CALL tab_2d_1d_2( nbpac, dvlbq_1d (1:nbpac) , zdvolif , jpi, jpj, npac(1:nbpac) ) 408 402 CALL tab_2d_1d_2( nbpac, tfu_1d (1:nbpac) , tfu , jpi, jpj, npac(1:nbpac) ) … … 418 412 CALL tab_1d_2d_2( nbpac, tbif(:,:,3), npac(1:nbpac), tbif_1d (1:nbpac , 3 ), jpi, jpj ) 419 413 CALL tab_1d_2d_2( nbpac, qstoif , npac(1:nbpac), qstbif_1d (1:nbpac) , jpi, jpj ) 420 CALL tab_1d_2d_2( nbpac, rdmicif , npac(1:nbpac), rdmicif_1d(1:nbpac) , jpi, jpj ) 414 CALL tab_1d_2d_2( nbpac, rdm_ice , npac(1:nbpac), rdm_ice_1d(1:nbpac) , jpi, jpj ) 415 CALL tab_1d_2d_2( nbpac, rdq_ice , npac(1:nbpac), rdq_ice_1d(1:nbpac) , jpi, jpj ) 421 416 CALL tab_1d_2d_2( nbpac, zdvolif , npac(1:nbpac), dvlbq_1d (1:nbpac) , jpi, jpj ) 422 417 ! … … 449 444 CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp ) ! Ice produced [m/s] 450 445 IF( lk_diaar5 ) THEN 451 CALL iom_put( 'snowmel_cea' , rdm snif(:,:) * zztmp ) ! Snow melt [kg/m2/s]446 CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp ) ! Snow melt [kg/m2/s] 452 447 zztmp = rhoic / rdt_ice 453 448 CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp ) ! Snow to Ice transformation [kg/m2/s] 454 449 CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp ) ! Melt at Sea Ice top [kg/m2/s] 455 450 CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp ) ! Melt at Sea Ice bottom [kg/m2/s] 456 zlicegr(:,:) = MAX( 0.e0, rdm icif(:,:)-zlicegr(:,:) )457 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Later eal sea ice growth[kg/m2/s]451 zlicegr(:,:) = MAX( 0.e0, rdm_ice(:,:)-zlicegr(:,:) ) 452 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Lateral sea ice growth [kg/m2/s] 458 453 ENDIF 459 454 ! -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_lac_2.F90
r3294 r3625 7 7 8 8 !!---------------------------------------------------------------------- 9 !! lim_lat_acr_2 10 !!---------------------------------------------------------------------- 11 USE par_oce 9 !! lim_lat_acr_2 : lateral accretion of ice 10 !!---------------------------------------------------------------------- 11 USE par_oce ! ocean parameters 12 12 USE phycst 13 13 USE thd_ice_2 14 14 USE ice_2 15 15 USE limistate_2 16 USE lib_mpp ! MPP library 17 USE wrk_nemo ! work arrays 16 USE lib_mpp ! MPP library 17 USE wrk_nemo ! work arrays 18 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 18 19 19 20 IMPLICIT NONE … … 145 146 frld_1d (ji) = MAX( zfrlnew , zfrlmin(ji) ) 146 147 !--computation of the remaining part of ice thickness which has been already used 147 zdhicbot(ji) = ( frld_1d(ji) - zfrlnew ) * zhice0(ji) / ( 1.0 - zfrlmin(ji) ) &148 148 zdhicbot(ji) = ( frld_1d(ji) - zfrlnew ) * zhice0(ji) / ( 1.0 - zfrlmin(ji) ) & 149 & - ( ( 1.0 - zfrrate ) / ( 1.0 - frld_1d(ji) ) ) * ( zqbgow(ji) / xlic ) 149 150 END DO 150 151 … … 196 197 & ) / zah 197 198 198 tbif_1d(ji,3) = ( iiceform * ( zhnews2 - zdh3 )* zta1 &199 tbif_1d(ji,3) = ( iiceform * ( zhnews2 - zdh3 ) * zta1 & 199 200 & + ( iiceform * zdh3 + ( 1 - iiceform ) * zdh1 ) * zta2 & 200 201 & + ( iiceform * ( zhnews2 - zdh5 ) + ( 1 - iiceform ) * ( zhnews2 - zdh1 ) ) * zta3 & … … 217 218 DO ji = kideb , kiut 218 219 dvlbq_1d (ji) = ( 1. - frld_1d(ji) ) * h_ice_1d(ji) - ( 1. - zfrl_old(ji) ) * zhice_old(ji) 219 rdmicif_1d(ji) = rdmicif_1d(ji) + rhoic * dvlbq_1d(ji) 220 rdm_ice_1d(ji) = rdm_ice_1d(ji) + rhoic * dvlbq_1d(ji) 221 rdq_ice_1d(ji) = rdq_ice_1d(ji) + rcpic * dvlbq_1d(ji) * ( tfu_1d(ji) - rt0 ) ! heat content relative to rt0 220 222 END DO 221 223 -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_zdf_2.F90
r3294 r3625 18 18 USE ice_2 19 19 USE limistate_2 20 USE cpl_oasis3, ONLY : lk_cpl 20 21 USE in_out_manager 21 22 USE lib_mpp ! MPP library 22 23 USE wrk_nemo ! work arrays 23 USE cpl_oasis3, ONLY : lk_cpl24 24 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 25 25 26 IMPLICIT NONE 26 27 PRIVATE … … 86 87 REAL(wp), POINTER, DIMENSION(:) :: zrcpdt ! h_su*rho_su*cp_su/dt(h_su being the thick. of surf. layer) 87 88 REAL(wp), POINTER, DIMENSION(:) :: zts_old ! previous surface temperature 88 REAL(wp), POINTER, DIMENSION(:) :: zidsn , z1midsn , zidsnic ! tempor y variables89 REAL(wp), POINTER, DIMENSION(:) :: zidsn , z1midsn , zidsnic ! temporary variables 89 90 REAL(wp), POINTER, DIMENSION(:) :: zfnet ! net heat flux at the top surface( incl. conductive heat flux) 90 91 REAL(wp), POINTER, DIMENSION(:) :: zsprecip ! snow accumulation … … 98 99 REAL(wp), POINTER, DIMENSION(:) :: zep ! internal temperature of the 2nd layer of the snow/ice system 99 100 REAL(wp), DIMENSION(3) :: & 100 zplediag & ! principle diagonal, subdiag. and supdiag. of the101 zplediag & ! principle diagonal, subdiag. and supdiag. of the 101 102 , zsubdiag & ! tri-diagonal matrix coming from the computation 102 103 , zsupdiag & ! of the temperatures inside the snow-ice system 103 104 , zsmbr ! second member 104 REAL(wp) :: & 105 zhsu & ! thickness of surface layer 106 , zhe & ! effective thickness for compu. of equ. thermal conductivity 107 , zheshth & ! = zhe / thth 108 , zghe & ! correction factor of the thermal conductivity 109 , zumsb & ! parameter for numerical method to solve heat-diffusion eq. 110 , zkhsn & ! conductivity at the snow layer 111 , zkhic & ! conductivity at the ice layers 112 , zkint & ! equivalent conductivity at the snow-ice interface 113 , zkhsnint & ! = zkint*dt / (hsn*rhosn*cpsn) 114 , zkhicint & ! = 2*zkint*dt / (hic*rhoic*cpic) 115 , zpiv1 , zpiv2 & ! tempory scalars used to solve the tri-diagonal system 116 , zb2 , zd2 , zb3 , zd3 & 105 REAL(wp) :: & 106 zhsu & ! thickness of surface layer 107 , zhe & ! effective thickness for compu. of equ. thermal conductivity 108 , zheshth & ! = zhe / thth 109 , zghe & ! correction factor of the thermal conductivity 110 , zumsb & ! parameter for numerical method to solve heat-diffusion eq. 111 , zkhsn & ! conductivity at the snow layer 112 , zkhic & ! conductivity at the ice layers 113 , zkint & ! equivalent conductivity at the snow-ice interface 114 , zkhsnint & ! = zkint*dt / (hsn*rhosn*cpsn) 115 , zkhicint & ! = 2*zkint*dt / (hic*rhoic*cpic) 116 , zpiv1, zpiv2 & ! temporary scalars used to solve the tri-diagonal system 117 , zb2, zd2 & ! temporary scalars used to solve the tri-diagonal system 118 , zb3, zd3 & ! temporary scalars used to solve the tri-diagonal system 117 119 , ztint ! equivalent temperature at the snow-ice interface 118 REAL(wp) :: &119 zexp &! exponential function of the ice thickness120 , zfsab & 121 , zfts & 122 , zdfts & 123 , zdts & 124 , zqsnw_mlt & 125 , zdhsmlt & 126 , zhsn & 127 , zqsn_mlt_rem & 128 , zqice_top_mlt & 129 , zdhssub &! change in snow thick. due to sublimation or evaporation130 , zdhisub &! change in ice thick. due to sublimation or evaporation131 , zdhsn &! snow ice thickness increment132 , zdtsn &! snow internal temp. increment133 , zdtic &! ice internal temp. increment120 REAL(wp) :: & 121 zexp & ! exponential function of the ice thickness 122 , zfsab & ! part of solar radiation stored in brine pockets 123 , zfts & ! value of energy balance function when the temp. equal surf. temp. 124 , zdfts & ! value of derivative of ztfs when the temp. equal surf. temp. 125 , zdts & ! surface temperature increment 126 , zqsnw_mlt & ! energy needed to melt snow 127 , zdhsmlt & ! change in snow thickness due to melt 128 , zhsn & ! snow thickness (previous+accumulation-melt) 129 , zqsn_mlt_rem & ! remaining heat coming from snow melting 130 , zqice_top_mlt &! energy used to melt ice at top surface 131 , zdhssub & ! change in snow thick. due to sublimation or evaporation 132 , zdhisub & ! change in ice thick. due to sublimation or evaporation 133 , zdhsn & ! snow ice thickness increment 134 , zdtsn & ! snow internal temp. increment 135 , zdtic & ! ice internal temp. increment 134 136 , zqnes ! conductive energy due to ice melting in the first ice layer 135 REAL(wp) :: & 136 ztbot & ! temperature at the bottom surface 137 , zfcbot & ! conductive heat flux at bottom surface 138 , zqice_bot & ! energy used for bottom melting/growing 139 , zqice_bot_mlt & ! energy used for bottom melting 140 , zqstbif_bot & ! part of energy stored in brine pockets used for bottom melting 141 , zqstbif_old & ! tempory var. for zqstbif_bot 142 , zdhicmlt & ! change in ice thickness due to bottom melting 143 , zdhicm & ! change in ice thickness var. 144 , zdhsnm & ! change in snow thickness var. 145 , zhsnfi & ! snow thickness var. 146 , zc1, zpc1, zc2, zpc2, zp1, zp2 & ! tempory variables 147 , ztb2, ztb3 148 REAL(wp) :: & 149 zdrmh & ! change in snow/ice thick. after snow-ice formation 150 , zhicnew & ! new ice thickness 151 , zhsnnew & ! new snow thickness 152 , zquot , ztneq & ! tempory temp. variables 153 , zqice, zqicetot & ! total heat inside the snow/ice system 154 , zdfrl & ! change in ice concentration 155 , zdvsnvol & ! change in snow volume 156 , zdrfrl1, zdrfrl2 & ! tempory scalars 157 , zihsn, zidhb, zihic, zihe, zihq, ziexp, ziqf, zihnf, zibmlt, ziqr, zihgnew, zind 137 REAL(wp) :: & 138 ztbot & ! temperature at the bottom surface 139 , zfcbot & ! conductive heat flux at bottom surface 140 , zqice_bot & ! energy used for bottom melting/growing 141 , zqice_bot_mlt &! energy used for bottom melting 142 , zqstbif_bot & ! part of energy stored in brine pockets used for bottom melting 143 , zqstbif_old & ! temporary var. for zqstbif_bot 144 , zdhicmlt & ! change in ice thickness due to bottom melting 145 , zdhicm & ! change in ice thickness var. 146 , zdhsnm & ! change in snow thickness var. 147 , zhsnfi & ! snow thickness var. 148 , zc1, zpc1 & ! temporary variables 149 , zc2, zpc2 & ! temporary variables 150 , zp1, zp2 & ! temporary variables 151 , ztb2, ztb3 ! temporary variables 152 REAL(wp) :: & 153 zdrmh & ! change in snow/ice thick. after snow-ice formation 154 , zhicnew & ! new ice thickness 155 , zhsnnew & ! new snow thickness 156 , zquot & 157 , ztneq & ! temporary temp. variables 158 , zqice & 159 , zqicetot & ! total heat inside the snow/ice system 160 , zdfrl & ! change in ice concentration 161 , zdvsnvol & ! change in snow volume 162 , zdrfrl1, zdrfrl2, zihsn, zidhb, zihic & ! temporary scalars 163 , zihe, zihq, ziexp, ziqf, zihnf & ! temporary scalars 164 , zibmlt, ziqr, zihgnew, zind, ztmp ! temporary scalars 158 165 !!---------------------------------------------------------------------- 159 166 CALL wrk_alloc( jpij, ztsmlt, ztbif , zksn , zkic , zksndh , zfcsu , zfcsudt , zi0 , z1mi0 , zqmax ) … … 169 176 170 177 DO ji = kideb , kiut 178 ! do nothing if the snow (ice) thickness falls below its minimum thickness 171 179 zihsn = MAX( zzero , SIGN( zone , hsndif - h_snow_1d(ji) ) ) 172 180 zihic = MAX( zzero , SIGN( zone , hicdif - h_ice_1d(ji) ) ) 173 !--computation of energy due to surface melting 174 zqcmlts(ji) = ( MAX ( zzero , & 175 & rcpsn * h_snow_1d(ji) * ( tbif_1d(ji,1) - rt0_snow ) ) ) * ( 1.0 - zihsn ) 176 !--computation of energy due to bottom melting 177 zqcmltb(ji) = ( MAX( zzero , & 178 & rcpic * ( tbif_1d(ji,2) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 179 & + MAX( zzero , & 180 & rcpic * ( tbif_1d(ji,3) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 181 & ) * ( 1.0 - zihic ) 182 !--limitation of snow/ice system internal temperature 181 !--energy required to bring snow to its melting point (rt0_snow) 182 zqcmlts(ji) = ( MAX ( zzero , rcpsn * h_snow_1d(ji) * ( tbif_1d(ji,1) - rt0_snow ) ) ) * ( 1.0 - zihsn ) 183 !--energy required to bring ice to its melting point (rt0_ice) 184 zqcmltb(ji) = ( MAX( zzero , rcpic * ( tbif_1d(ji,2) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 185 & + MAX( zzero , rcpic * ( tbif_1d(ji,3) - rt0_ice ) * ( h_ice_1d(ji) / 2. ) ) & 186 & ) * ( 1.0 - zihic ) 187 !--limitation of snow/ice system internal temperature 183 188 tbif_1d(ji,1) = MIN( rt0_snow, tbif_1d(ji,1) ) 184 189 tbif_1d(ji,2) = MIN( rt0_ice , tbif_1d(ji,2) ) … … 480 485 dvsbq_1d(ji) = ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsnw_old(ji) - zsprecip(ji) ) 481 486 dvsbq_1d(ji) = MIN( zzero , dvsbq_1d(ji) ) 482 rdmsnif_1d(ji) = rhosn * dvsbq_1d(ji) 487 ztmp = rhosn * dvsbq_1d(ji) 488 rdm_snw_1d(ji) = ztmp 489 !--heat content of the water provided to the ocean (referenced to rt0) 490 rdq_snw_1d(ji) = cpic * ztmp * ( rt0_snow - rt0 ) 483 491 !-- If the snow is completely melted the remaining heat is used to melt ice 484 492 zqsn_mlt_rem = MAX( zzero , -zhsn ) * xlsn … … 623 631 !---updating new ice thickness and computing the newly formed ice mass 624 632 zhicnew = zihgnew * zhicnew 625 rdmicif_1d(ji) = rdmicif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d(ji) ) * rhoic 633 ztmp = ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d(ji) ) * rhoic 634 rdm_ice_1d(ji) = rdm_ice_1d(ji) + ztmp 635 !---heat content of the water provided to the ocean (referenced to rt0) 636 ! use of rt0_ice is OK for melting ice; in the case of freezing, tfu_1d should be used. 637 ! This is done in 9.5 section (see below) 638 rdq_ice_1d(ji) = cpic * ztmp * ( rt0_ice - rt0 ) 626 639 !---updating new snow thickness and computing the newly formed snow mass 627 640 zhsnfi = zhsn + zdhsnm 628 641 h_snow_1d(ji) = MAX( zzero , zhsnfi ) 629 rdmsnif_1d(ji) = rdmsnif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsn ) * rhosn 642 ztmp = ( 1.0 - frld_1d(ji) ) * ( h_snow_1d(ji) - zhsn ) * rhosn 643 rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 644 !---updating the heat content of the water provided to the ocean (referenced to rt0) 645 rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( rt0_snow - rt0 ) 630 646 !--remaining energy in case of total ablation 631 647 zqocea(ji) = - ( zihsn * xlic * zdhicm + xlsn * ( zhsnfi - h_snow_1d(ji) ) ) * ( 1.0 - frld_1d(ji) ) … … 659 675 tbif_1d(ji,3) = zihgnew * ztb3 + ( 1.0 - zihgnew ) * tfu_1d(ji) 660 676 h_ice_1d(ji) = zhicnew 677 ! update the ice heat content given to the ocean in freezing case 678 ! (part due to difference between rt0_ice and tfu_1d) 679 ztmp = ( 1. - zidhb ) * rhoic * dvbbq_1d(ji) 680 rdq_ice_1d(ji) = rdq_ice_1d(ji) + cpic * ztmp * ( tfu_1d(ji) - rt0_ice ) 661 681 END DO 662 682 … … 700 720 dmgwi_1d(ji) = dmgwi_1d(ji) + ( 1.0 -frld_1d(ji) ) * ( h_snow_1d(ji) - zhsnnew ) * rhosn 701 721 !--- volume change of ice and snow (used for ocean-ice freshwater flux computation) 702 rdmicif_1d(ji) = rdmicif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d (ji) ) * rhoic 703 rdmsnif_1d(ji) = rdmsnif_1d(ji) + ( 1.0 - frld_1d(ji) ) * ( zhsnnew - h_snow_1d(ji) ) * rhosn 722 ztmp = ( 1.0 - frld_1d(ji) ) * ( zhicnew - h_ice_1d (ji) ) * rhoic 723 rdm_ice_1d(ji) = rdm_ice_1d(ji) + ztmp 724 rdq_ice_1d(ji) = rdq_ice_1d(ji) + cpic * ztmp * ( tfu_1d(ji) - rt0 ) 725 !!gm BUG ?? snow ==> only needed for nn_ice_embd == 0 (standard levitating sea-ice) 726 ztmp = ( 1.0 - frld_1d(ji) ) * ( zhsnnew - h_snow_1d(ji) ) * rhosn 727 rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 728 rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( rt0_snow - rt0 ) 704 729 705 730 !--- Actualize new snow and ice thickness. … … 748 773 !--variation of ice volume and ice mass 749 774 dvlbq_1d(ji) = zihic * ( zfrl_old(ji) - frld_1d(ji) ) * h_ice_1d(ji) 750 rdmicif_1d(ji) = rdmicif_1d(ji) + dvlbq_1d(ji) * rhoic 775 ztmp = dvlbq_1d(ji) * rhoic 776 rdm_ice_1d(ji) = rdm_ice_1d(ji) + ztmp 777 !!gm 778 !!gm This should be split in two parts: 779 !!gm 1- heat required to bring sea-ice to tfu : this part should be added to the heat flux taken from the ocean 780 !!gm cpic * ztmp * 0.5 * ( tbif_1d(ji,2) + tbif_1d(ji,3) - 2.* rt0_ice ) 781 !!gm 2- heat content of lateral ablation referenced to rt0 : this part only put in rdq_ice_1d 782 !!gm cpic * ztmp * ( rt0_ice - rt0 ) 783 !!gm Currently we put all the heat in rdq_ice_1d 784 rdq_ice_1d(ji) = rdq_ice_1d(ji) + cpic * ztmp * 0.5 * ( tbif_1d(ji,2) + tbif_1d(ji,3) - 2.* rt0 ) 785 ! 751 786 !--variation of snow volume and snow mass 752 zdvsnvol = zihsn * ( zfrl_old(ji) - frld_1d(ji) ) * h_snow_1d(ji) 753 rdmsnif_1d(ji) = rdmsnif_1d(ji) + zdvsnvol * rhosn 787 zdvsnvol = zihsn * ( zfrl_old(ji) - frld_1d(ji) ) * h_snow_1d(ji) 788 ztmp = zdvsnvol * rhosn 789 rdm_snw_1d(ji) = rdm_snw_1d(ji) + ztmp 790 !!gm 791 !!gm This should be split in two parts: 792 !!gm 1- heat required to bring snow to tfu : this part should be added to the heat flux taken from the ocean 793 !!gm cpic * ztmp * ( tbif_1d(ji,1) - rt0_snow ) 794 !!gm 2- heat content of lateral ablation referenced to rt0 : this part only put in rdq_snw_1d 795 !!gm cpic * ztmp * ( rt0_snow - rt0 ) 796 !!gm Currently we put all the heat in rdq_snw_1d 797 rdq_snw_1d(ji) = rdq_snw_1d(ji) + cpic * ztmp * ( tbif_1d(ji,1) - rt0 ) 798 754 799 h_snow_1d(ji) = ziqf * h_snow_1d(ji) 755 800 -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limwri_2.F90
r3294 r3625 13 13 !!---------------------------------------------------------------------- 14 14 !!---------------------------------------------------------------------- 15 !! lim_wri_2 : write of the diagnostics variables in ouput file16 !! lim_wri_init_2 : initialization and namelist read15 !! lim_wri_2 : write of the diagnostics variables in ouput file 16 !! lim_wri_init_2 : initialization and namelist read 17 17 !! lim_wri_state_2 : write for initial state or/and abandon: 18 18 !! > output.init.nc (if ninist = 1 in namelist) … … 26 26 USE ice_2 27 27 28 USE dianam ! build name of file (routine)28 USE dianam ! build name of file (routine) 29 29 USE lbclnk 30 30 USE in_out_manager 31 USE lib_mpp ! MPP library32 USE wrk_nemo ! work arrays31 USE lib_mpp ! MPP library 32 USE wrk_nemo ! work arrays 33 33 USE iom 34 34 USE ioipsl 35 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 35 36 36 37 IMPLICIT NONE … … 173 174 zcmo(ji,jj,13) = qns(ji,jj) 174 175 ! See thersf for the coefficient 175 zcmo(ji,jj,14) = - emps(ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce !!gm ???176 zcmo(ji,jj,14) = - sfx (ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce !!gm ??? 176 177 zcmo(ji,jj,15) = utau_ice(ji,jj) 177 178 zcmo(ji,jj,16) = vtau_ice(ji,jj) -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limwri_dimg_2.h90
r3294 r3625 118 118 zcmo(ji,jj,13) = qns(ji,jj) 119 119 ! See thersf for the coefficient 120 zcmo(ji,jj,14) = - emps(ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce120 zcmo(ji,jj,14) = - sfx (ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce 121 121 zcmo(ji,jj,15) = utau_ice(ji,jj) 122 122 zcmo(ji,jj,16) = vtau_ice(ji,jj) … … 161 161 rcmoy(ji,jj,13) = qns(ji,jj) 162 162 ! See thersf for the coefficient 163 rcmoy(ji,jj,14) = - emps(ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce163 rcmoy(ji,jj,14) = - sfx (ji,jj) * rday * ( sss_m(ji,jj) + epsi16 ) / soce 164 164 rcmoy(ji,jj,15) = utau_ice(ji,jj) 165 165 rcmoy(ji,jj,16) = vtau_ice(ji,jj) -
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/thd_ice_2.F90
r2715 r3625 68 68 qstbif_1d , & !: " " qstoif 69 69 fbif_1d , & !: " " fbif 70 rdmicif_1d , & !: " " rdmicif 71 rdmsnif_1d , & !: " " rdmsnif 70 rdm_ice_1d , & !: " " rdm_ice 71 rdq_ice_1d , & !: " " rdq_ice 72 rdm_snw_1d , & !: " " rdm_snw 73 rdq_snw_1d , & !: " " rdq_snw 72 74 qlbbq_1d , & !: " " qlbsbq 73 75 dmgwi_1d , & !: " " dmgwi … … 108 110 & qstbif_1d(jpij), fbif_1d(jpij), Stat=ierr(2)) 109 111 ! 110 ALLOCATE( rdmicif_1d(jpij), rdmsnif_1d(jpij), qlbbq_1d(jpij), & 112 ALLOCATE( rdm_ice_1d(jpij), rdq_ice_1d(jpij) , & 113 & rdm_snw_1d(jpij), rdq_snw_1d(jpij), qlbbq_1d(jpij) , & 111 114 & dmgwi_1d(jpij) , dvsbq_1d(jpij) , rdvomif_1d(jpij), & 112 115 & dvbbq_1d(jpij) , dvlbq_1d(jpij) , dvnbq_1d(jpij) , &
Note: See TracChangeset
for help on using the changeset viewer.