Changeset 8316 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM
- Timestamp:
- 2017-07-11T14:05:05+02:00 (7 years ago)
- Location:
- branches/2017/dev_r8183_ICEMODEL/NEMOGCM
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/CONFIG/SHARED/namelist_ref
r8313 r8316 198 198 ! = 2 Redistribute a single flux over categories (coupled mode only) 199 199 ! Sea-ice : 200 nn_ice = 3! =0 no ice boundary condition ,200 nn_ice = 2 ! =0 no ice boundary condition , 201 201 ! =1 use observed ice-cover , 202 ! = 3 to 4: ice-model used (LIM3 or CICE) ("key_lim3" or "key_cice")202 ! =2 & 3 : ice-model used (LIM3 or CICE) ("key_lim3" or "key_cice") 203 203 ln_ice_embd = .false. ! =F levitating ice with mass and salt exchange but no presure effect 204 204 ! =T embedded sea-ice (full salt and mass exchanges and pressure) … … 339 339 rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction 340 340 rn_si1 = 23.0 ! 2 bands: longest depth of extinction 341 ln_qsr_ice = .true. ! light penetration for ice-model LIM3342 341 / 343 342 !----------------------------------------------------------------------- -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limadv_umx.F90
r7753 r8316 15 15 USE phycst ! physical constant 16 16 USE dom_oce ! ocean domain 17 USE sbc_oce 17 USE sbc_oce, ONLY: nn_fsbc ! ocean surface boundary condition 18 18 USE ice ! ice variables 19 19 ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90
r7646 r8316 15 15 USE ice ! LIM-3: sea-ice variable 16 16 USE dom_oce ! ocean domain 17 USE sbc_oce ! surface boundary condition: ocean fields 18 USE sbc_ice ! Surface boundary condition: sea-ice fields 17 USE sbc_oce, ONLY: sfx ! surface boundary condition: ocean fields 19 18 USE daymod ! model calendar 20 19 USE phycst ! physical constant -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r8313 r8316 17 17 USE phycst ! physical constants 18 18 USE dom_oce ! ocean space and time domain 19 USE sbc_ice ! Surface boundary condition: ice fields20 19 USE ice ! LIM-3 variables 21 20 USE limrhg ! LIM-3 rheology -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r8291 r8316 15 15 !! lim_istate_init : initialization of ice state and namelist read 16 16 !!---------------------------------------------------------------------- 17 USE phycst 18 USE oce 19 USE dom_oce 20 USE sbc_oce ! Surface boundary condition: ocean fields21 USE sbc_ice ! Surface boundary condition: ice fields22 USE eosbn2 23 USE ice 24 USE par_oce 25 USE limvar 17 USE phycst ! physical constant 18 USE oce ! dynamics and tracers variables 19 USE dom_oce ! ocean domain 20 USE sbc_oce , ONLY : sst_m, sss_m 21 USE sbc_ice , ONLY : tn_ice 22 USE eosbn2 ! equation of state 23 USE ice ! sea-ice variables 24 USE par_oce ! ocean parameters 25 USE limvar ! lim_var_salprof 26 26 ! 27 USE in_out_manager 28 USE lib_mpp 29 USE lib_fortran 30 USE wrk_nemo 31 USE fldread 27 USE in_out_manager ! I/O manager 28 USE lib_mpp ! MPP library 29 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 30 USE wrk_nemo ! work arrays 31 USE fldread ! read input fields 32 32 USE iom 33 33 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r8239 r8316 15 15 USE dom_oce ! ocean domain 16 16 USE phycst ! physical constants (ocean directory) 17 USE sbc_oce ! surface boundary condition: ocean fields17 USE sbc_oce, ONLY: sss_m, sst_m ! surface boundary condition: ocean fields 18 18 USE thd_ice ! LIM thermodynamics 19 19 USE ice ! LIM variables -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r8313 r8316 22 22 USE par_oce ! Ocean parameters 23 23 USE dom_oce ! Ocean domain 24 USE sbc_oce ! Surface boundary condition: ocean fields25 USE sbc_ice ! Surface boundary condition: ice fields24 USE sbc_oce , ONLY : ln_ice_embd, nn_fsbc, ssh_m 25 USE sbc_ice , ONLY : utau_ice, vtau_ice 26 26 USE ice ! ice variables 27 27 USE limitd_me ! ice strength -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r8233 r8316 19 19 USE oce , ONLY : snwice_mass, snwice_mass_b 20 20 USE dom_oce ! ocean domain 21 USE sbc_oce ! Surface boundary condition: ocean fields 22 USE sbc_ice ! Surface boundary condition: ice fields 21 USE sbc_oce , ONLY : nn_fsbc 23 22 USE in_out_manager ! I/O manager 24 23 USE iom ! I/O library -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r8313 r8316 28 28 USE dom_oce ! ocean domain 29 29 USE ice ! LIM sea-ice variables 30 USE sbc_ice ! Surface boundary condition: sea-ice fields31 USE sbc_oce ! Surface boundary condition: ocean fields30 USE sbc_ice , ONLY : emp_oce, qns_oce, qsr_oce, qemp_oce, emp_ice, qsr_ice, qemp_ice, qevap_ice, alb_ice, tn_ice, cldf_ice 31 USE sbc_oce , ONLY : nn_fsbc, ln_ice_embd, sfx, fr_i, qsr_tot, qns, qsr, fmmflx, emp, taum, utau, vtau 32 32 USE sbccpl ! Surface boundary condition: coupled interface 33 33 USE albedo ! albedo parameters -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r8313 r8316 23 23 USE dom_oce ! ocean space and time domain variables 24 24 USE ice ! sea-ice variables 25 USE sbc_oce ! Surface boundary condition: ocean fields26 USE sbc_ice ! Surface boundary condition: ice fields25 USE sbc_oce , ONLY : sst_m, e3t_m, utau, vtau, ssu_m, ssv_m, frq_m, qns_tot, qsr_tot, sprecip 26 USE sbc_ice , ONLY : qsr_oce, qns_oce, qemp_oce, qsr_ice, qns_ice, dqns_ice, evap_ice, qprec_ice, qevap_ice, fr1_i0, fr2_i0 27 27 USE thd_ice ! thermodynamic sea-ice variables 28 28 USE limthd_dif ! vertical diffusion -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r8313 r8316 18 18 USE par_oce ! ocean parameters 19 19 USE phycst ! physical constants (OCE directory) 20 USE sbc_oce ! Surface boundary condition: ocean fields20 USE sbc_oce , ONLY : sst_m, sss_m 21 21 USE ice ! LIM variables 22 22 USE thd_ice ! LIM thermodynamics -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r5134 r8316 23 23 USE domain ! 24 24 USE phycst ! physical constants 25 USE sbc_oce ! Surface boundary condition: ocean fields26 25 USE ice ! LIM variables 27 26 USE thd_ice ! LIM thermodynamics -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r8313 r8316 18 18 USE dom_oce ! domain variables 19 19 USE phycst ! physical constants 20 USE sbc_oce ! Surface boundary condition: ocean fields21 USE sbc_ice ! Surface boundary condition: ice fields20 USE sbc_oce , ONLY : sss_m 21 USE sbc_ice , ONLY : utau_ice, vtau_ice 22 22 USE thd_ice ! LIM thermodynamics 23 23 USE ice ! LIM variables -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r7646 r8316 16 16 USE par_oce ! ocean parameters 17 17 USE phycst ! physical constants (ocean directory) 18 USE sbc_oce ! Surface boundary condition: ocean fields18 USE sbc_oce , ONLY : sss_m 19 19 USE ice ! LIM variables 20 20 USE thd_ice ! LIM thermodynamics -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r8312 r8316 16 16 USE phycst ! physical constant 17 17 USE dom_oce ! ocean domain 18 USE sbc_oce ! ocean surface boundary condition18 USE sbc_oce , ONLY : nn_fsbc 19 19 USE ice ! ice variables 20 20 USE limvar ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r8239 r8316 13 13 !! lim_update1 : computes update of sea-ice global variables from trend terms 14 14 !!---------------------------------------------------------------------- 15 USE sbc_oce ! Surface boundary condition: ocean fields16 USE sbc_ice ! Surface boundary condition: ice fields17 15 USE dom_oce 18 16 USE phycst ! physical constants -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r8239 r8316 13 13 !! lim_update2 : computes update of sea-ice global variables from trend terms 14 14 !!---------------------------------------------------------------------- 15 USE sbc_oce ! Surface boundary condition: ocean fields16 USE sbc_ice ! Surface boundary condition: ice fields17 15 USE dom_oce 18 16 USE phycst ! physical constants -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r8239 r8316 38 38 USE par_oce ! ocean parameters 39 39 USE phycst ! physical constants (ocean directory) 40 USE sbc_oce ! Surface boundary condition: ocean fields40 USE sbc_oce , ONLY : sss_m 41 41 USE ice ! ice variables 42 42 USE thd_ice ! ice variables (thermodynamics) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r8313 r8316 15 15 USE phycst 16 16 USE dom_oce 17 USE sbc_oce ! Surface boundary condition: ocean fields17 USE sbc_oce 18 18 USE sbc_ice ! Surface boundary condition: ice fields 19 19 USE ice -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/ASM/asmbkg.F90
r8313 r8316 146 146 CALL iom_rstput( kt, nitdin_r, inum, 'sshn' , sshn ) 147 147 #if defined key_lim3 148 IF( nn_ice == 3) THEN148 IF( nn_ice == 2 ) THEN 149 149 IF( ALLOCATED(at_i) ) THEN 150 150 CALL iom_rstput( kt, nitdin_r, inum, 'iceconc', at_i(:,:) ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r8306 r8316 996 996 997 997 #if defined key_lim3 998 IF( nn_ice == 3) THEN ! clem2017: condition in case agrif + lim but no-ice in child grid998 IF( nn_ice == 2 ) THEN ! clem2017: condition in case agrif + lim but no-ice in child grid 999 999 CALL lim_wri_state( kt, id_i, nh_i ) 1000 1000 ENDIF -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r8313 r8316 54 54 55 55 PUBLIC sbc_cpl_init ! routine called by sbcmod.F90 56 PUBLIC sbc_cpl_rcv ! routine called by sbc_ice_lim (_2).F9056 PUBLIC sbc_cpl_rcv ! routine called by sbc_ice_lim.F90 57 57 PUBLIC sbc_cpl_snd ! routine called by step.F90 58 PUBLIC sbc_cpl_ice_tau ! routine called by sbc_ice_lim (_2).F9059 PUBLIC sbc_cpl_ice_flx ! routine called by sbc_ice_lim (_2).F9058 PUBLIC sbc_cpl_ice_tau ! routine called by sbc_ice_lim.F90 59 PUBLIC sbc_cpl_ice_flx ! routine called by sbc_ice_lim.F90 60 60 PUBLIC sbc_cpl_alloc ! routine called in sbcice_cice.F90 61 61 … … 500 500 ! 501 501 ! non solar sensitivity mandatory for LIM ice model 502 IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 4.AND. nn_components /= jp_iam_sas ) &502 IF( TRIM( sn_rcv_dqnsdt%cldes ) == 'none' .AND. k_ice /= 0 .AND. k_ice /= 3 .AND. nn_components /= jp_iam_sas ) & 503 503 CALL ctl_stop( 'sbc_cpl_init: sn_rcv_dqnsdt%cldes must be coupled in namsbc_cpl namelist' ) 504 504 ! non solar sensitivity mandatory for mixed oce-ice solar radiation coupling technique … … 1524 1524 1525 1525 1526 SUBROUTINE sbc_cpl_ice_flx( p _frld, palbi, psst, pist )1526 SUBROUTINE sbc_cpl_ice_flx( picefr, palbi, psst, pist ) 1527 1527 !!---------------------------------------------------------------------- 1528 1528 !! *** ROUTINE sbc_cpl_ice_flx *** … … 1574 1574 !! sprecip solid precipitation over the ocean 1575 1575 !!---------------------------------------------------------------------- 1576 REAL(wp), INTENT(in ), DIMENSION(:,:) :: p_frld ! leadfraction [0 to 1]1576 REAL(wp), INTENT(in), DIMENSION(:,:) :: picefr ! ice fraction [0 to 1] 1577 1577 ! optional arguments, used only in 'mixed oce-ice' case 1578 REAL(wp), INTENT(in 1579 REAL(wp), INTENT(in 1580 REAL(wp), INTENT(in 1578 REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL :: palbi ! all skies ice albedo 1579 REAL(wp), INTENT(in), DIMENSION(:,: ), OPTIONAL :: psst ! sea surface temperature [Celsius] 1580 REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL :: pist ! ice surface temperature [Kelvin] 1581 1581 ! 1582 1582 INTEGER :: jl ! dummy loop index 1583 REAL(wp), POINTER, DIMENSION(:,: ) :: zcptn, zcptrain, zcptsnw, zice fr, zmsk, zsnw1583 REAL(wp), POINTER, DIMENSION(:,: ) :: zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw 1584 1584 REAL(wp), POINTER, DIMENSION(:,: ) :: zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice 1585 1585 REAL(wp), POINTER, DIMENSION(:,: ) :: zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice … … 1589 1589 IF( nn_timing == 1 ) CALL timing_start('sbc_cpl_ice_flx') 1590 1590 ! 1591 CALL wrk_alloc( jpi,jpj, zcptn, zcptrain, zcptsnw, zice fr, zmsk, zsnw )1591 CALL wrk_alloc( jpi,jpj, zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw ) 1592 1592 CALL wrk_alloc( jpi,jpj, zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 1593 1593 CALL wrk_alloc( jpi,jpj, zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) … … 1595 1595 1596 1596 IF( ln_mixcpl ) zmsk(:,:) = 1. - xcplmask(:,:,0) 1597 zice fr(:,:) = 1.- p_frld(:,:)1597 ziceld(:,:) = 1. - picefr(:,:) 1598 1598 zcptn(:,:) = rcp * sst_m(:,:) 1599 1599 ! … … 1611 1611 ztprecip(:,:) = frcv(jpr_rain)%z3(:,:,1) + zsprecip(:,:) ! May need to ensure positive here 1612 1612 zemp_tot(:,:) = frcv(jpr_tevp)%z3(:,:,1) - ztprecip(:,:) 1613 zemp_ice(:,:) = ( frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_snow)%z3(:,:,1) ) * zicefr(:,:)1613 zemp_ice(:,:) = ( frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_snow)%z3(:,:,1) ) * picefr(:,:) 1614 1614 CASE( 'oce and ice' ) ! received fields: jpr_sbpr, jpr_semp, jpr_oemp, jpr_ievp 1615 zemp_tot(:,:) = p_frld(:,:) * frcv(jpr_oemp)%z3(:,:,1) + zicefr(:,:) * frcv(jpr_sbpr)%z3(:,:,1)1616 zemp_ice(:,:) = frcv(jpr_semp)%z3(:,:,1) * zicefr(:,:)1615 zemp_tot(:,:) = ziceld(:,:) * frcv(jpr_oemp)%z3(:,:,1) + picefr(:,:) * frcv(jpr_sbpr)%z3(:,:,1) 1616 zemp_ice(:,:) = frcv(jpr_semp)%z3(:,:,1) * picefr(:,:) 1617 1617 zsprecip(:,:) = frcv(jpr_ievp)%z3(:,:,1) - frcv(jpr_semp)%z3(:,:,1) 1618 1618 ztprecip(:,:) = frcv(jpr_semp)%z3(:,:,1) - frcv(jpr_sbpr)%z3(:,:,1) + zsprecip(:,:) … … 1620 1620 1621 1621 #if defined key_lim3 1622 ! zsnw = snow fraction over ice after wind blowing (= zicefr if no blowing)1623 zsnw(:,:) = 0._wp ; CALL lim_thd_snwblow( p_frld, zsnw )1622 ! zsnw = snow fraction over ice after wind blowing (=picefr if no blowing) 1623 zsnw(:,:) = 0._wp ; CALL lim_thd_snwblow( ziceld, zsnw ) 1624 1624 1625 1625 ! --- evaporation minus precipitation corrected (because of wind blowing on snow) --- ! 1626 zemp_ice(:,:) = zemp_ice(:,:) + zsprecip(:,:) * ( zicefr(:,:) - zsnw(:,:) ) ! emp_ice = A * sublimation - zsnw * sprecip1626 zemp_ice(:,:) = zemp_ice(:,:) + zsprecip(:,:) * ( picefr(:,:) - zsnw(:,:) ) ! emp_ice = A * sublimation - zsnw * sprecip 1627 1627 zemp_oce(:,:) = zemp_tot(:,:) - zemp_ice(:,:) ! emp_oce = emp_tot - emp_ice 1628 1628 1629 1629 ! --- evaporation over ocean (used later for qemp) --- ! 1630 zevap_oce(:,:) = frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:)1630 zevap_oce(:,:) = frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) 1631 1631 1632 1632 ! --- evaporation over ice (kg/m2/s) --- ! … … 1675 1675 1676 1676 #else 1677 zsnw(:,:) = zicefr(:,:)1677 zsnw(:,:) = picefr(:,:) 1678 1678 ! --- Continental fluxes --- ! 1679 1679 IF( srcv(jpr_rnf)%laction ) THEN ! runoffs (included in emp later on) … … 1714 1714 IF( iom_use('snow_ao_cea') ) CALL iom_put( 'snow_ao_cea' , sprecip(:,:) * ( 1._wp - zsnw(:,:) ) ) ! Snow over ice-free ocean (cell average) 1715 1715 IF( iom_use('snow_ai_cea') ) CALL iom_put( 'snow_ai_cea' , sprecip(:,:) * zsnw(:,:) ) ! Snow over sea-ice (cell average) 1716 IF( iom_use('subl_ai_cea') ) CALL iom_put( 'subl_ai_cea' , frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) * tmask(:,:,1) ) ! Sublimation over sea-ice (cell average)1716 IF( iom_use('subl_ai_cea') ) CALL iom_put( 'subl_ai_cea' , frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) * tmask(:,:,1) ) ! Sublimation over sea-ice (cell average) 1717 1717 IF( iom_use('evap_ao_cea') ) CALL iom_put( 'evap_ao_cea' , ( frcv(jpr_tevp)%z3(:,:,1) & 1718 & - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) ) * tmask(:,:,1) ) ! ice-free oce evap (cell average)1718 & - frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) ) * tmask(:,:,1) ) ! ice-free oce evap (cell average) 1719 1719 ! note: runoff output is done in sbcrnf (which includes icebergs too) and iceshelf output is done in sbcisf 1720 1720 ! … … 1734 1734 ENDIF 1735 1735 CASE( 'oce and ice' ) ! the total flux is computed from ocean and ice fluxes 1736 zqns_tot(:,:) = p_frld(:,:) * frcv(jpr_qnsoce)%z3(:,:,1)1736 zqns_tot(:,:) = ziceld(:,:) * frcv(jpr_qnsoce)%z3(:,:,1) 1737 1737 IF ( TRIM(sn_rcv_qns%clcat) == 'yes' ) THEN 1738 1738 DO jl=1,jpl … … 1741 1741 ENDDO 1742 1742 ELSE 1743 qns_tot(:,:) = qns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1)1743 qns_tot(:,:) = qns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 1744 1744 DO jl=1,jpl 1745 zqns_tot(:,: ) = zqns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1)1745 zqns_tot(:,: ) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 1746 1746 zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 1747 1747 ENDDO … … 1751 1751 zqns_tot(:,: ) = frcv(jpr_qnsmix)%z3(:,:,1) 1752 1752 zqns_ice(:,:,1) = frcv(jpr_qnsmix)%z3(:,:,1) & 1753 & + frcv(jpr_dqnsdt)%z3(:,:,1) * ( pist(:,:,1) - ( (rt0 + psst(:,: ) ) * p_frld(:,:) &1754 & + pist(:,:,1) * zicefr(:,:) ) )1753 & + frcv(jpr_dqnsdt)%z3(:,:,1) * ( pist(:,:,1) - ( (rt0 + psst(:,: ) ) * ziceld(:,:) & 1754 & + pist(:,:,1) * picefr(:,:) ) ) 1755 1755 END SELECT 1756 1756 ! … … 1763 1763 #if defined key_lim3 1764 1764 ! --- non solar flux over ocean --- ! 1765 ! note: p_frld cannot be = 0 since we limit the ice concentration to amax1765 ! note: ziceld cannot be = 0 since we limit the ice concentration to amax 1766 1766 zqns_oce = 0._wp 1767 WHERE( p_frld /= 0._wp ) zqns_oce(:,:) = ( zqns_tot(:,:) - SUM( a_i * zqns_ice, dim=3 ) ) / p_frld(:,:)1767 WHERE( ziceld /= 0._wp ) zqns_oce(:,:) = ( zqns_tot(:,:) - SUM( a_i * zqns_ice, dim=3 ) ) / ziceld(:,:) 1768 1768 1769 1769 ! Heat content per unit mass of snow (J/kg) … … 1772 1772 ENDWHERE 1773 1773 ! Heat content per unit mass of rain (J/kg) 1774 zcptrain(:,:) = rcp * ( SUM( (tn_ice(:,:,:) - rt0) * a_i(:,:,:), dim=3 ) + sst_m(:,:) * p_frld(:,:) )1774 zcptrain(:,:) = rcp * ( SUM( (tn_ice(:,:,:) - rt0) * a_i(:,:,:), dim=3 ) + sst_m(:,:) * ziceld(:,:) ) 1775 1775 1776 1776 ! --- enthalpy of snow precip over ice in J/m3 (to be used in 1D-thermo) --- ! … … 1787 1787 & + zsprecip(:,:) * ( 1._wp - zsnw ) * ( zcptsnw (:,:) - lfus ) ! solid precip over ocean + snow melting 1788 1788 zqemp_ice(:,:) = zsprecip(:,:) * zsnw * ( zcptsnw (:,:) - lfus ) ! solid precip over ice (qevap_ice=0 since atm. does not take it into account) 1789 !! zqemp_ice(:,:) = - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) * zcptsnw (:,:) & ! ice evap1789 !! zqemp_ice(:,:) = - frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) * zcptsnw (:,:) & ! ice evap 1790 1790 !! & + zsprecip(:,:) * zsnw * zqprec_ice(:,:) * r1_rhosn ! solid precip over ice 1791 1791 … … 1820 1820 ! clem: this formulation is certainly wrong... but better than it was... 1821 1821 zqns_tot(:,:) = zqns_tot(:,:) & ! zqns_tot update over free ocean with: 1822 & - ( p_frld(:,:) * zsprecip(:,:) * lfus ) & ! remove the latent heat flux of solid precip. melting1822 & - ( ziceld(:,:) * zsprecip(:,:) * lfus ) & ! remove the latent heat flux of solid precip. melting 1823 1823 & - ( zemp_tot(:,:) & ! remove the heat content of mass flux (assumed to be at SST) 1824 1824 & - zemp_ice(:,:) ) * zcptn(:,:) 1825 1825 1826 1826 IF( ln_mixcpl ) THEN 1827 qns_tot(:,:) = qns(:,:) * p_frld(:,:) + SUM( qns_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk1827 qns_tot(:,:) = qns(:,:) * ziceld(:,:) + SUM( qns_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk 1828 1828 qns_tot(:,:) = qns_tot(:,:) * xcplmask(:,:,0) + zqns_tot(:,:)* zmsk(:,:) 1829 1829 DO jl=1,jpl … … 1841 1841 IF( iom_use('hflx_snow_cea') ) CALL iom_put('hflx_snow_cea', sprecip(:,:) * ( zcptsnw(:,:) - Lfus ) ) ! heat flux from snow (cell average) 1842 1842 IF( iom_use('hflx_rain_cea') ) CALL iom_put('hflx_rain_cea',( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) ) ! heat flux from rain (cell average) 1843 IF( iom_use('hflx_evap_cea') ) CALL iom_put('hflx_evap_cea',(frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) & ! heat flux from from evap (cell average)1843 IF( iom_use('hflx_evap_cea') ) CALL iom_put('hflx_evap_cea',(frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * picefr(:,:) & ! heat flux from from evap (cell average) 1844 1844 & ) * zcptn(:,:) * tmask(:,:,1) ) 1845 1845 IF( iom_use('hflx_snow_ao_cea') ) CALL iom_put('hflx_snow_ao_cea',sprecip(:,:) * (zcptsnw(:,:) - Lfus) * (1._wp - zsnw(:,:)) ) ! heat flux from snow (over ocean) … … 1865 1865 zqsr_ice(:,:,1) = frcv(jpr_qsrice)%z3(:,:,1) 1866 1866 CASE( 'oce and ice' ) 1867 zqsr_tot(:,: ) = p_frld(:,:) * frcv(jpr_qsroce)%z3(:,:,1)1867 zqsr_tot(:,: ) = ziceld(:,:) * frcv(jpr_qsroce)%z3(:,:,1) 1868 1868 IF ( TRIM(sn_rcv_qsr%clcat) == 'yes' ) THEN 1869 1869 DO jl=1,jpl … … 1872 1872 ENDDO 1873 1873 ELSE 1874 qsr_tot(:,: ) = qsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1)1874 qsr_tot(:,: ) = qsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 1875 1875 DO jl=1,jpl 1876 zqsr_tot(:,: ) = zqsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1)1876 zqsr_tot(:,: ) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 1877 1877 zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 1878 1878 ENDDO … … 1884 1884 ! ( see OASIS3 user guide, 5th edition, p39 ) 1885 1885 zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) ) & 1886 & / ( 1.- ( albedo_oce_mix(:,: ) * p_frld(:,:) &1887 & + palbi (:,:,1) * zicefr(:,:) ) )1886 & / ( 1.- ( albedo_oce_mix(:,: ) * ziceld(:,:) & 1887 & + palbi (:,:,1) * picefr(:,:) ) ) 1888 1888 END SELECT 1889 1889 IF( ln_dm2dc .AND. ln_cpl ) THEN ! modify qsr to include the diurnal cycle … … 1896 1896 #if defined key_lim3 1897 1897 ! --- solar flux over ocean --- ! 1898 ! note: p_frld cannot be = 0 since we limit the ice concentration to amax1898 ! note: ziceld cannot be = 0 since we limit the ice concentration to amax 1899 1899 zqsr_oce = 0._wp 1900 WHERE( p_frld /= 0._wp ) zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / p_frld(:,:)1900 WHERE( ziceld /= 0._wp ) zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / ziceld(:,:) 1901 1901 1902 1902 IF( ln_mixcpl ) THEN ; qsr_oce(:,:) = qsr_oce(:,:) * xcplmask(:,:,0) + zqsr_oce(:,:)* zmsk(:,:) … … 1905 1905 1906 1906 IF( ln_mixcpl ) THEN 1907 qsr_tot(:,:) = qsr(:,:) * p_frld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk1907 qsr_tot(:,:) = qsr(:,:) * ziceld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk 1908 1908 qsr_tot(:,:) = qsr_tot(:,:) * xcplmask(:,:,0) + zqsr_tot(:,:)* zmsk(:,:) 1909 1909 DO jl=1,jpl … … 1952 1952 fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 1953 1953 1954 CALL wrk_dealloc( jpi,jpj, zcptn, zcptrain, zcptsnw, zice fr, zmsk, zsnw )1954 CALL wrk_dealloc( jpi,jpj, zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw ) 1955 1955 CALL wrk_dealloc( jpi,jpj, zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 1956 1956 CALL wrk_dealloc( jpi,jpj, zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r8313 r8316 137 137 CALL cice_sbc_force(kt) 138 138 ELSE IF ( ksbc == jp_purecpl ) THEN 139 CALL sbc_cpl_ice_flx( 1.0-fr_i)139 CALL sbc_cpl_ice_flx( fr_i ) 140 140 ENDIF 141 141 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r8313 r8316 218 218 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 219 219 CALL blk_ice_flx( t_su, alb_ice ) 220 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p _frld=(1.-at_i_b), palbi=alb_ice, psst=sst_m, pist=t_su )220 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su ) 221 221 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 222 222 CASE ( jp_purecpl ) 223 223 ! albedo depends on cloud fraction because of non-linear spectral effects 224 224 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 225 CALL sbc_cpl_ice_flx( p _frld=(1.-at_i_b), palbi=alb_ice, psst=sst_m, pist=t_su )225 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su ) 226 226 IF( nn_limflx == 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 227 227 END SELECT -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r8313 r8316 116 116 #if defined key_agrif 117 117 IF( Agrif_Root() ) THEN ! AGRIF zoom (cf r1242: possibility to run without ice in fine grid) 118 IF( lk_lim3 ) nn_ice = 3119 IF( lk_cice ) nn_ice = 4118 IF( lk_lim3 ) nn_ice = 2 119 IF( lk_cice ) nn_ice = 3 120 120 ENDIF 121 121 #else 122 IF( lk_lim3 ) nn_ice = 3123 IF( lk_cice ) nn_ice = 4122 IF( lk_lim3 ) nn_ice = 2 123 IF( lk_cice ) nn_ice = 3 124 124 #endif 125 125 ! … … 139 139 WRITE(numout,*) ' Multicategory heat flux formulation (LIM3) nn_limflx = ', nn_limflx 140 140 WRITE(numout,*) ' Sea-ice : ' 141 WRITE(numout,*) ' ice management in the sbc (=0/1/ 3/4) nn_ice = ', nn_ice141 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 142 142 WRITE(numout,*) ' ice embedded into ocean ln_ice_embd = ', ln_ice_embd 143 143 WRITE(numout,*) ' Misc. options of sbc : ' … … 198 198 CASE( 0 ) !- no ice in the domain 199 199 CASE( 1 ) !- Ice-cover climatology ("Ice-if" model) 200 CASE( 3) !- LIM3 ice model201 CASE( 4) !- CICE ice model200 CASE( 2 ) !- LIM3 ice model 201 CASE( 3 ) !- CICE ice model 202 202 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : CICE sea-ice model requires ln_blk or ln_cpl = T' ) 203 203 IF( lk_agrif ) CALL ctl_stop( 'sbc_init : CICE sea-ice model not currently available with AGRIF' ) … … 205 205 END SELECT 206 206 ! 207 IF( nn_ice == 3) THEN !- LIM3 case: multi-category flux option207 IF( nn_ice == 2 ) THEN !- LIM3 case: multi-category flux option 208 208 IF(lwp) WRITE(numout,*) 209 209 SELECT CASE( nn_limflx ) ! LIM3 Multi-category heat flux formulation … … 327 327 IF ( lk_agrif .AND. nn_ice == 0 ) THEN 328 328 IF( sbc_ice_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_ice_alloc : unable to allocate arrays' ) ! clem2017: allocate ice arrays in case agrif + lim + no-ice in child grid 329 ELSEIF( nn_ice == 3) THEN ; CALL sbc_lim_init ! LIM3 initialization330 ELSEIF( nn_ice == 4) THEN ; CALL cice_sbc_init( nsbc ) ! CICE initialization329 ELSEIF( nn_ice == 2 ) THEN ; CALL sbc_lim_init ! LIM3 initialization 330 ELSEIF( nn_ice == 3 ) THEN ; CALL cice_sbc_init( nsbc ) ! CICE initialization 331 331 ENDIF 332 332 ! … … 421 421 SELECT CASE( nn_ice ) ! Update heat and freshwater fluxes over sea-ice areas 422 422 CASE( 1 ) ; CALL sbc_ice_if ( kt ) ! Ice-cover climatology ("Ice-if" model) 423 CASE( 3) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM-3 ice model424 CASE( 4) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model423 CASE( 2 ) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM-3 ice model 424 CASE( 3 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model 425 425 END SELECT 426 426 … … 530 530 !!--------------------------------------------------------------------- 531 531 ! 532 IF( nn_ice == 4) CALL cice_sbc_final532 IF( nn_ice == 3 ) CALL cice_sbc_final 533 533 ! 534 534 END SUBROUTINE sbc_final -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r8313 r8316 48 48 LOGICAL , PUBLIC :: ln_qsr_2bd !: 2 band light absorption flag 49 49 LOGICAL , PUBLIC :: ln_qsr_bio !: bio-model light absorption flag 50 LOGICAL , PUBLIC :: ln_qsr_ice !: light penetration for ice-model51 50 INTEGER , PUBLIC :: nn_chldta !: use Chlorophyll data (=1) or not (=0) 52 51 REAL(wp), PUBLIC :: rn_abs !: fraction absorbed in the very near surface (RGB & 2 bands) … … 269 268 END DO 270 269 ! 271 IF( ln_qsr_ice ) THEN ! sea-ice: store the 1st ocean level attenuation coefficient 272 DO jj = 2, jpjm1 273 DO ji = fs_2, fs_jpim1 ! vector opt. 274 IF( qsr(ji,jj) /= 0._wp ) THEN ; fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 275 ELSE ; fraqsr_1lev(ji,jj) = 1._wp 276 ENDIF 277 END DO 278 END DO 279 ! Update haloes since lim_thd needs fraqsr_1lev to be defined everywhere 280 CALL lbc_lnk( fraqsr_1lev(:,:), 'T', 1._wp ) 281 ENDIF 270 ! sea-ice: store the 1st ocean level attenuation coefficient 271 DO jj = 2, jpjm1 272 DO ji = fs_2, fs_jpim1 ! vector opt. 273 IF( qsr(ji,jj) /= 0._wp ) THEN ; fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rau0_rcp * qsr(ji,jj) ) 274 ELSE ; fraqsr_1lev(ji,jj) = 1._wp 275 ENDIF 276 END DO 277 END DO 278 CALL lbc_lnk( fraqsr_1lev(:,:), 'T', 1._wp ) 282 279 ! 283 280 IF( iom_use('qsr3d') ) THEN ! output the shortwave Radiation distribution … … 336 333 TYPE(FLD_N) :: sn_chl ! informations about the chlorofyl field to be read 337 334 !! 338 NAMELIST/namtra_qsr/ sn_chl, cn_dir, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, ln_qsr_ice,&335 NAMELIST/namtra_qsr/ sn_chl, cn_dir, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, & 339 336 & nn_chldta, rn_abs, rn_si0, rn_si1 340 337 !!---------------------------------------------------------------------- … … 359 356 WRITE(numout,*) ' 2 band light penetration ln_qsr_2bd = ', ln_qsr_2bd 360 357 WRITE(numout,*) ' bio-model light penetration ln_qsr_bio = ', ln_qsr_bio 361 WRITE(numout,*) ' light penetration for ice-model (LIM3) ln_qsr_ice = ', ln_qsr_ice362 358 WRITE(numout,*) ' RGB : Chl data (=1) or cst value (=0) nn_chldta = ', nn_chldta 363 359 WRITE(numout,*) ' RGB & 2 bands: fraction of light (rn_si1) rn_abs = ', rn_abs -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/SAS_SRC/diawri.F90
r8306 r8316 396 396 397 397 #if defined key_lim3 398 IF( nn_ice == 3) THEN ! clem2017: condition in case agrif + lim but no-ice in child grid398 IF( nn_ice == 2 ) THEN ! clem2017: condition in case agrif + lim but no-ice in child grid 399 399 CALL lim_wri_state( kt, id_i, nh_i ) 400 400 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.