Changeset 7788
- Timestamp:
- 2017-03-11T10:40:59+01:00 (7 years ago)
- Location:
- trunk/NEMOGCM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/CONFIG/SHARED/field_def_nemo-opa.xml
r7767 r7788 237 237 <field id="icealb_cea" long_name="Ice albedo (cell average)" standard_name="sea_ice_albedo" unit="1" /> 238 238 <field id="calving_cea" long_name="Calving" standard_name="water_flux_into_sea_water_from_icebergs" unit="kg/m2/s" /> 239 <field id="iceberg_cea" long_name="Iceberg" standard_name="water_flux_into_sea_water_from_icebergs" unit="kg/m2/s" /> 240 <field id="iceshelf_cea" long_name="Iceshelf" standard_name="water_flux_into_sea_water_from_iceshelf" unit="kg/m2/s" /> 239 241 240 242 <!-- available if key_oasis3 + conservative method --> -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r7646 r7788 110 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rnf , rnf_b !: river runoff [Kg/m2/s] 111 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf , fwfisf_b !: ice shelf melting [Kg/m2/s] 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwficb , fwficb_b !: iceberg melting [Kg/m2/s] 113 112 114 !! 113 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sbc_tsc, sbc_tsc_b !: sbc content trend [K.m/s] jpi,jpj,jpts … … 158 160 & sfx (jpi,jpj) , sfx_b(jpi,jpj) , emp_tot(jpi,jpj), fmmflx(jpi,jpj), STAT=ierr(2) ) 159 161 ! 160 ALLOCATE( fwfisf (jpi,jpj), rnf (jpi,jpj) , sbc_tsc (jpi,jpj,jpts) , qsr_hc (jpi,jpj,jpk) , & 161 & fwfisf_b(jpi,jpj), rnf_b(jpi,jpj) , sbc_tsc_b(jpi,jpj,jpts) , qsr_hc_b(jpi,jpj,jpk) , STAT=ierr(3) ) 162 ALLOCATE( fwfisf (jpi,jpj), rnf (jpi,jpj) , sbc_tsc (jpi,jpj,jpts) , qsr_hc (jpi,jpj,jpk) , & 163 & fwfisf_b(jpi,jpj), rnf_b(jpi,jpj) , sbc_tsc_b(jpi,jpj,jpts) , qsr_hc_b(jpi,jpj,jpk) , & 164 & fwficb (jpi,jpj), fwficb_b(jpi,jpj), STAT=ierr(3) ) 162 165 ! 163 166 ALLOCATE( tprecip(jpi,jpj) , sprecip(jpi,jpj) , fr_i(jpi,jpj) , & -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r7761 r7788 39 39 USE eosbn2 ! 40 40 USE sbcrnf, ONLY : l_rnfcpl 41 USE sbcisf , ONLY : l_isfcpl 41 42 #if defined key_cice 42 43 USE ice_domain_size, only: ncat … … 114 115 INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves 115 116 INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient 116 INTEGER, PARAMETER :: jprcv = 51 ! total number of fields received 117 INTEGER, PARAMETER :: jpr_isf = 52 118 INTEGER, PARAMETER :: jpr_icb = 53 119 120 INTEGER, PARAMETER :: jprcv = 53 ! total number of fields received 117 121 118 122 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 162 166 ! ! Received from the atmosphere 163 167 TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 164 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp 168 TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf 165 169 ! Send to waves 166 170 TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev … … 240 244 & sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper , sn_rcv_wnum , sn_rcv_wstrf , & 241 245 & sn_rcv_wdrag, sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 242 & sn_rcv_iceflx,sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp 246 & sn_rcv_iceflx,sn_rcv_co2 , nn_cplmodel , ln_usecplmask, sn_rcv_mslp , & 247 & sn_rcv_icb , sn_rcv_isf 248 243 249 !!--------------------------------------------------------------------- 244 250 ! … … 279 285 WRITE(numout,*)' runoffs = ', TRIM(sn_rcv_rnf%cldes ), ' (', TRIM(sn_rcv_rnf%clcat ), ')' 280 286 WRITE(numout,*)' calving = ', TRIM(sn_rcv_cal%cldes ), ' (', TRIM(sn_rcv_cal%clcat ), ')' 287 WRITE(numout,*)' iceberg = ', TRIM(sn_rcv_icb%cldes ), ' (', TRIM(sn_rcv_icb%clcat ), ')' 288 WRITE(numout,*)' ice shelf = ', TRIM(sn_rcv_isf%cldes ), ' (', TRIM(sn_rcv_isf%clcat ), ')' 281 289 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 282 290 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' … … 447 455 ENDIF 448 456 ! 449 srcv(jpr_cal )%clname = 'OCalving' ; IF( TRIM( sn_rcv_cal%cldes ) == 'coupled' ) srcv(jpr_cal)%laction = .TRUE. 457 srcv(jpr_cal)%clname = 'OCalving' ; IF( TRIM( sn_rcv_cal%cldes) == 'coupled' ) srcv(jpr_cal)%laction = .TRUE. 458 srcv(jpr_isf)%clname = 'OIcshelf' ; IF( TRIM( sn_rcv_isf%cldes) == 'coupled' ) srcv(jpr_isf)%laction = .TRUE. 459 srcv(jpr_icb)%clname = 'OIceberg' ; IF( TRIM( sn_rcv_icb%cldes) == 'coupled' ) srcv(jpr_icb)%laction = .TRUE. 460 461 IF( srcv(jpr_isf)%laction .AND. ln_isf ) THEN 462 l_isfcpl = .TRUE. ! -> no need to read isf in sbcisf 463 IF(lwp) WRITE(numout,*) 464 IF(lwp) WRITE(numout,*) ' iceshelf received from oasis ' 465 ENDIF 450 466 ! 451 467 ! ! ------------------------- ! … … 1248 1264 IF( srcv(jpr_rnf)%laction ) rnf(:,:) = frcv(jpr_rnf)%z3(:,:,1) 1249 1265 IF( srcv(jpr_cal)%laction ) zemp(:,:) = zemp(:,:) - frcv(jpr_cal)%z3(:,:,1) 1250 1266 1267 IF( srcv(jpr_icb)%laction ) THEN 1268 fwficb(:,:) = frcv(jpr_icb)%z3(:,:,1) 1269 rnf(:,:) = rnf(:,:) + fwficb(:,:) ! iceberg added to runfofs 1270 ENDIF 1271 IF( srcv(jpr_isf)%laction ) fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) 1272 1251 1273 IF( ln_mixcpl ) THEN ; emp(:,:) = emp(:,:) * xcplmask(:,:,0) + zemp(:,:) * zmsk(:,:) 1252 1274 ELSE ; emp(:,:) = zemp(:,:) … … 1265 1287 ENDIF 1266 1288 ENDIF 1289 ! 1290 IF( srcv(jpr_icb)%laction ) zqns(:,:) = zqns(:,:) - frcv(jpr_icb)%z3(:,:,1) * lfus ! remove heat content associated to iceberg melting 1291 ! 1267 1292 IF( ln_mixcpl ) THEN ; qns(:,:) = qns(:,:) * xcplmask(:,:,0) + zqns(:,:) * zmsk(:,:) 1268 1293 ELSE ; qns(:,:) = zqns(:,:) … … 1640 1665 ENDIF 1641 1666 1667 IF( srcv(jpr_icb)%laction ) THEN 1668 fwficb(:,:) = frcv(jpr_icb)%z3(:,:,1) 1669 rnf(:,:) = rnf(:,:) + fwficb(:,:) ! iceberg added to runoffs 1670 CALL iom_put( 'iceberg_cea', frcv(jpr_icb)%z3(:,:,1) ) 1671 ENDIF 1672 IF( srcv(jpr_isf)%laction ) THEN 1673 fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) 1674 CALL iom_put( 'iceshelf_cea', frcv(jpr_isf)%z3(:,:,1) ) 1675 ENDIF 1676 1677 1642 1678 IF( ln_mixcpl ) THEN 1643 1679 emp_tot(:,:) = emp_tot(:,:) * xcplmask(:,:,0) + zemp_tot(:,:) * zmsk(:,:) … … 1676 1712 ENDIF 1677 1713 1714 1715 IF( srcv(jpr_icb)%laction ) THEN 1716 fwficb(:,:) = frcv(jpr_icb)%z3(:,:,1) 1717 rnf(:,:) = rnf(:,:) + fwficb(:,:) ! iceberg added to runoffs 1718 CALL iom_put( 'iceberg_cea', frcv(jpr_icb)%z3(:,:,1) ) 1719 ENDIF 1720 IF( srcv(jpr_isf)%laction ) THEN 1721 fwfisf(:,:) = - frcv(jpr_isf)%z3(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) 1722 CALL iom_put( 'iceshelf_cea', frcv(jpr_isf)%z3(:,:,1) ) 1723 ENDIF 1724 1725 1678 1726 IF( ln_mixcpl ) THEN 1679 1727 emp_tot(:,:) = emp_tot(:,:) * xcplmask(:,:,0) + zemp_tot(:,:) * zmsk(:,:) … … 1742 1790 IF( iom_use('hflx_cal_cea') ) CALL iom_put( 'hflx_cal_cea', - frcv(jpr_cal)%z3(:,:,1) * lfus ) ! heat flux from calving 1743 1791 ENDIF 1792 1793 !!chris 1794 !! The heat content associated to the ice shelf in removed in the routine sbcisf.F90 1795 ! 1796 IF( srcv(jpr_icb)%laction ) zqns_tot(:,:) = zqns_tot(:,:) - frcv(jpr_icb)%z3(:,:,1) * lfus ! remove heat content associated to iceberg melting 1797 1744 1798 1745 1799 #if defined key_lim3 -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r7646 r7788 51 51 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: ttbl, stbl, utbl, vtbl !:top boundary layer variable at T point 52 52 INTEGER, PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: misfkt, misfkb !:Level of ice shelf base 53 54 LOGICAL, PUBLIC :: l_isfcpl = .false. ! isf recieved from oasis 53 55 54 56 REAL(wp), PUBLIC, SAVE :: rcpi = 2000.0_wp ! specific heat of ice shelf [J/kg/K] … … 97 99 !!--------------------------------------------------------------------- 98 100 ! 99 ! ! ====================== !100 IF( kt == nit000 ) THEN ! First call kt=nit000 !101 ! ! ====================== !102 CALL sbc_isf_init103 ! ! ---------------------------------------- !104 ELSE ! Swap of forcing fields !105 ! ! ---------------------------------------- !106 fwfisf_b (:,: ) = fwfisf (:,: ) ! Swap the ocean forcing fields except at nit000107 risf_tsc_b(:,:,:) = risf_tsc(:,:,:) ! where before fields are set at the end of the routine108 !109 END IF110 111 101 IF( MOD( kt-1, nn_fsbc) == 0 ) THEN 112 102 ! allocation … … 127 117 CALL iom_put('vtbl',vtbl(:,:) * (1._wp - tmask(:,:,1)) * ssmask(:,:)) 128 118 ! compute fwf and heat flux 129 CALL sbc_isf_cav (kt) 119 ! compute fwf and heat flux 120 IF( .NOT.l_isfcpl ) THEN ; CALL sbc_isf_cav (kt) 121 ELSE ; qisf(:,:) = fwfisf(:,:) * rlfusisf ! heat flux 122 ENDIF 130 123 131 124 CASE ( 2 ) ! Beckmann and Goosse parametrisation … … 134 127 135 128 CASE ( 3 ) ! specified runoff in depth (Mathiot et al., XXXX in preparation) 136 CALL fld_read ( kt, nn_fsbc, sf_rnfisf ) 137 fwfisf(:,:) = - sf_rnfisf(1)%fnow(:,:,1) ! fwf flux from the isf (fwfisf <0 mean melting) 129 ! specified runoff in depth (Mathiot et al., XXXX in preparation) 130 IF( .NOT.l_isfcpl ) THEN 131 CALL fld_read ( kt, nn_fsbc, sf_rnfisf ) 132 fwfisf(:,:) = - sf_rnfisf(1)%fnow(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) 133 ENDIF 138 134 qisf(:,:) = fwfisf(:,:) * rlfusisf ! heat flux 139 135 stbl(:,:) = soce 140 136 141 137 CASE ( 4 ) ! specified fwf and heat flux forcing beneath the ice shelf 142 CALL fld_read ( kt, nn_fsbc, sf_fwfisf ) 143 fwfisf(:,:) = - sf_fwfisf(1)%fnow(:,:,1) ! fwf flux from the isf (fwfisf <0 mean melting) 138 ! specified fwf and heat flux forcing beneath the ice shelf 139 IF( .NOT.l_isfcpl ) THEN 140 CALL fld_read ( kt, nn_fsbc, sf_fwfisf ) 141 !CALL fld_read ( kt, nn_fsbc, sf_qisf ) 142 fwfisf(:,:) = -sf_fwfisf(1)%fnow(:,:,1) ! fwf 143 ENDIF 144 144 qisf(:,:) = fwfisf(:,:) * rlfusisf ! heat flux 145 145 stbl(:,:) = soce … … 167 167 CALL lbc_lnk(qisf(:,:) ,'T',1.) 168 168 169 !============================================================================================================================================= 170 IF ( iom_use('fwfisf3d') .OR. iom_use('qlatisf3d') .OR. iom_use('qhcisf3d') .OR. iom_use('qhcisf')) THEN 169 ! output 170 CALL iom_put('qlatisf' , qisf) 171 CALL iom_put('fwfisf' , fwfisf) 172 173 ! Diagnostics 174 IF ( iom_use('fwfisf3d') .OR. iom_use('qlatisf3d') .OR. iom_use('qhcisf3d') .OR. iom_use('qhcisf')) THEN 171 175 CALL wrk_alloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 172 176 CALL wrk_alloc( jpi,jpj, zqhcisf2d ) … … 199 203 CALL wrk_dealloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 200 204 CALL wrk_dealloc( jpi,jpj, zqhcisf2d ) 201 END IF 202 203 ! output 204 CALL iom_put('qlatisf' , qisf) 205 CALL iom_put('fwfisf', fwfisf) 206 !============================================================================================================================================= 207 208 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! 209 IF( ln_rstart .AND. & ! Restart: read in restart file 205 END IF 206 ! deallocation 207 CALL wrk_dealloc( jpi,jpj, zt_frz, zdep ) 208 ! 209 END IF 210 211 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! 212 IF( ln_rstart .AND. & ! Restart: read in restart file 210 213 & iom_varid( numror, 'fwf_isf_b', ldstop = .FALSE. ) > 0 ) THEN 211 214 IF(lwp) WRITE(numout,*) ' nit000-1 isf tracer content forcing fields read in the restart file' … … 213 216 CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal) ) ! before salt content isf_tsc trend 214 217 CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem) ) ! before salt content isf_tsc trend 215 218 ELSE 216 219 fwfisf_b(:,:) = fwfisf(:,:) 217 220 risf_tsc_b(:,:,:)= risf_tsc(:,:,:) 218 221 END IF 219 222 END IF 220 223 ! 221 ! deallocation 222 CALL wrk_dealloc( jpi,jpj, zt_frz, zdep ) 223 END IF 224 ! 224 IF( lrst_oce ) THEN 225 IF(lwp) WRITE(numout,*) 226 IF(lwp) WRITE(numout,*) 'sbc : isf surface tracer content forcing fields written in ocean restart file ', & 227 & 'at it= ', kt,' date= ', ndastp 228 IF(lwp) WRITE(numout,*) '~~~~' 229 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:) ) 230 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) ) 231 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) ) 232 ENDIF 233 ! 225 234 END SUBROUTINE sbc_isf 226 235 … … 306 315 307 316 CASE ( 2 , 3 ) 308 ALLOCATE( sf_rnfisf(1), STAT=ierror ) 309 ALLOCATE( sf_rnfisf(1)%fnow(jpi,jpj,1), sf_rnfisf(1)%fdta(jpi,jpj,1,2) ) 310 CALL fld_fill( sf_rnfisf, (/ sn_rnfisf /), cn_dirisf, 'sbc_isf_init', 'read fresh water flux isf data', 'namsbc_isf' ) 311 312 ! read effective lenght (BG03) 313 IF (nn_isf == 2) THEN 317 IF( .NOT.l_isfcpl ) THEN 318 ALLOCATE( sf_rnfisf(1), STAT=ierror ) 319 ALLOCATE( sf_rnfisf(1)%fnow(jpi,jpj,1), sf_rnfisf(1)%fdta(jpi,jpj,1,2) ) 320 CALL fld_fill( sf_rnfisf, (/ sn_rnfisf /), cn_dirisf, 'sbc_isf_init', 'read fresh water flux isf data', 'namsbc_isf' ) 321 ENDIF 322 ! read effective lenght (BG03) 323 IF (nn_isf == 2) THEN 314 324 CALL iom_open( sn_Leff_isf%clname, inum ) 315 325 cvarLeff = TRIM(sn_Leff_isf%clvar) … … 318 328 ! 319 329 risfLeff = risfLeff*1000.0_wp !: convertion in m 320 END IF 321 330 END IF 322 331 ! read depth of the top and bottom of the isf top boundary layer (in this case, isf front depth and grounding line depth) 323 332 CALL iom_open( sn_depmax_isf%clname, inum ) … … 348 357 349 358 ! load variable used in fldread (use for temporal interpolation of isf fwf forcing) 350 ALLOCATE( sf_fwfisf(1), STAT=ierror ) 351 ALLOCATE( sf_fwfisf(1)%fnow(jpi,jpj,1), sf_fwfisf(1)%fdta(jpi,jpj,1,2) ) 352 CALL fld_fill( sf_fwfisf, (/ sn_fwfisf /), cn_dirisf, 'sbc_isf_init', 'read fresh water flux isf data', 'namsbc_isf' ) 359 IF( .NOT.l_isfcpl ) THEN 360 ALLOCATE( sf_fwfisf(1), STAT=ierror ) 361 ALLOCATE( sf_fwfisf(1)%fnow(jpi,jpj,1), sf_fwfisf(1)%fdta(jpi,jpj,1,2) ) 362 CALL fld_fill( sf_fwfisf, (/ sn_fwfisf /), cn_dirisf, 'sbc_isf_init', 'read fresh water flux isf data', 'namsbc_isf' ) 363 ENDIF 353 364 354 365 END SELECT -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r7753 r7788 328 328 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialization 329 329 ! 330 IF( ln_isf ) CALL sbc_isf_init ! Compute iceshelves 331 ! 330 332 CALL sbc_rnf_init ! Runof initialization 331 333 ! … … 374 376 rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 375 377 ENDIF 378 IF( ln_isf ) THEN 379 fwfisf_b (:,: ) = fwfisf (:,: ) 380 risf_tsc_b(:,:,:) = risf_tsc(:,:,:) 381 ENDIF 382 ! 376 383 ENDIF 377 384 ! ! ---------------------------------------- ! -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r7753 r7788 182 182 END DO 183 183 END DO 184 IF( lrst_oce ) THEN185 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf (:,:) )186 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) )187 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) )188 ENDIF189 184 END IF 190 185 !
Note: See TracChangeset
for help on using the changeset viewer.