Changeset 11029
- Timestamp:
- 2019-05-21T18:03:51+02:00 (6 years ago)
- Location:
- branches/UKMO/dev_r5518_GO6_fix_zemp_ice_10681/NEMOGCM/NEMO/OPA_SRC/SBC
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_fix_zemp_ice_10681/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r9975 r11029 124 124 #if defined key_lim2 || defined key_cice 125 125 ! already defined in ice.F90 for LIM3 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i ! Sea ice fraction on categories 127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i_last_couple ! Sea ice fraction on categories at the last coupling point 127 128 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ht_i, ht_s 128 129 #endif -
branches/UKMO/dev_r5518_GO6_fix_zemp_ice_10681/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r10269 r11029 55 55 USE lib_fortran, ONLY: glob_sum 56 56 57 #if defined key_oasis3 58 USE mod_oasis, ONLY : OASIS_Sent, OASIS_ToRest, OASIS_SentOut, OASIS_ToRestOut 59 #else 60 INTEGER :: OASIS_Sent = -1 61 INTEGER :: OASIS_SentOut = -1 62 INTEGER :: OASIS_ToRest = -1 63 INTEGER :: OASIS_ToRestOut = -1 64 #endif 65 57 66 IMPLICIT NONE 58 67 PRIVATE … … 177 186 LOGICAL :: ln_usecplmask ! use a coupling mask file to merge data received from several models 178 187 ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) 188 LOGICAL, PUBLIC :: ln_fix_sea_ice_fluxes ! Apply sea ice flux bug fixes (GMED#449) 179 189 180 190 TYPE :: DYNARR … … 203 213 !! *** FUNCTION sbc_cpl_alloc *** 204 214 !!---------------------------------------------------------------------- 205 INTEGER :: ierr( 3)215 INTEGER :: ierr(4) 206 216 !!---------------------------------------------------------------------- 207 217 ierr(:) = 0 … … 215 225 ! Hardwire only two models as nn_cplmodel has not been read in 216 226 ! from the namelist yet. 217 ALLOCATE( xcplmask(jpi,jpj,0:2) , STAT=ierr(3) ) 227 ALLOCATE( xcplmask(jpi,jpj,0:2) , STAT=ierr(3) ) 228 #if defined key_cice 229 ALLOCATE( a_i_last_couple(jpi,jpj,jpl) , STAT=ierr(4) ) 230 #endif 218 231 ! 219 232 sbc_cpl_alloc = MAXVAL( ierr ) … … 250 263 & ln_usecplmask, nn_coupled_iceshelf_fluxes, ln_iceshelf_init_atmos, & 251 264 & rn_greenland_total_fw_flux, rn_greenland_calving_fraction, & 252 & rn_antarctica_total_fw_flux, rn_antarctica_calving_fraction, rn_iceshelf_fluxes_tolerance 265 & rn_antarctica_total_fw_flux, rn_antarctica_calving_fraction, rn_iceshelf_fluxes_tolerance, & 266 & ln_fix_sea_ice_fluxes 253 267 !!--------------------------------------------------------------------- 254 268 … … 321 335 WRITE(numout,*)' nn_cplmodel = ', nn_cplmodel 322 336 WRITE(numout,*)' ln_usecplmask = ', ln_usecplmask 337 WRITE(numout,*)' ln_fix_sea_ice_fluxes = ', ln_fix_sea_ice_fluxes 323 338 WRITE(numout,*)' nn_coupled_iceshelf_fluxes = ', nn_coupled_iceshelf_fluxes 324 339 WRITE(numout,*)' ln_iceshelf_init_atmos = ', ln_iceshelf_init_atmos … … 1830 1845 IF ( TRIM(sn_rcv_emp%clcat) == 'yes' ) THEN 1831 1846 ! zemp_ice is the sum of frcv(jpr_ievp)%z3(:,:,1) over all layers - snow 1832 zemp_ice(:,:) = - frcv(jpr_snow)%z3(:,:,1) 1847 IF ( ln_fix_sea_ice_fluxes ) THEN 1848 zemp_ice(:,:) = - frcv(jpr_snow)%z3(:,:,1) * zicefr(:,:) 1849 ELSE 1850 zemp_ice(:,:) = - frcv(jpr_snow)%z3(:,:,1) 1851 ENDIF 1833 1852 DO jl=1,jpl 1834 zemp_ice(:,: ) = zemp_ice(:,:) + frcv(jpr_ievp)%z3(:,:,jl) 1853 IF ( ln_fix_sea_ice_fluxes ) THEN 1854 zemp_ice(:,: ) = zemp_ice(:,:) + frcv(jpr_ievp)%z3(:,:,jl) * a_i_last_couple(:,:,jl) 1855 ELSE 1856 zemp_ice(:,: ) = zemp_ice(:,:) + frcv(jpr_ievp)%z3(:,:,jl) 1857 ENDIF 1835 1858 ENDDO 1836 1859 ! latent heat coupled for each category in CICE … … 2343 2366 END SELECT 2344 2367 IF( ssnd(jps_fice)%laction ) CALL cpl_snd( jps_fice, isec, ztmp3, info ) 2368 2369 ! If this coupling was successful then save ice fraction for use between coupling points. 2370 ! This is needed for some calculations where the ice fraction at the last coupling point 2371 ! is needed. 2372 IF( info == OASIS_Sent .OR. info == OASIS_ToRest .OR. & 2373 & info == OASIS_SentOut .OR. info == OASIS_ToRestOut ) THEN 2374 IF ( sn_snd_thick%clcat == 'yes' ) THEN 2375 a_i_last_couple(:,:,:) = a_i(:,:,:) 2376 ENDIF 2377 ENDIF 2378 2345 2379 ENDIF 2346 2380 -
branches/UKMO/dev_r5518_GO6_fix_zemp_ice_10681/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r9975 r11029 395 395 ELSE IF (ksbc == jp_purecpl) THEN 396 396 DO jl=1,ncat 397 ztmpn(:,:,jl)=qla_ice(:,:,jl)*a_i(:,:,jl) 397 IF ( ln_fix_sea_ice_fluxes ) THEN 398 ztmpn(:,:,jl)=qla_ice(:,:,jl)*a_i_last_couple(:,:,jl) 399 ELSE 400 ztmpn(:,:,jl)=qla_ice(:,:,jl)*a_i(:,:,jl) 401 ENDIF 398 402 ENDDO 399 403 ELSE … … 408 412 ! Convert to GBM 409 413 IF (ksbc == jp_flx .OR. ksbc == jp_purecpl) THEN 410 ztmp(:,:) = botmelt(:,:,jl)*a_i(:,:,jl) 414 IF ( ln_fix_sea_ice_fluxes ) THEN 415 ztmp(:,:) = botmelt(:,:,jl)*a_i_last_couple(:,:,jl) 416 ELSE 417 ztmp(:,:) = botmelt(:,:,jl)*a_i(:,:,jl) 418 ENDIF 411 419 ELSE 412 420 ztmp(:,:) = botmelt(:,:,jl) … … 417 425 ! Convert to GBM 418 426 IF (ksbc == jp_flx .OR. ksbc == jp_purecpl) THEN 419 ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl))*a_i(:,:,jl) 427 IF ( ln_fix_sea_ice_fluxes ) THEN 428 ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl))*a_i_last_couple(:,:,jl) 429 ELSE 430 ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl))*a_i(:,:,jl) 431 ENDIF 420 432 ELSE 421 433 ztmp(:,:) = (topmelt(:,:,jl)+botmelt(:,:,jl))
Note: See TracChangeset
for help on using the changeset viewer.