- Timestamp:
- 2015-02-17T10:06:39+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO3_masked_damping/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r4624 r5086 33 33 USE limtab_2 34 34 USE prtctl ! Print control 35 USE cpl_oasis3, ONLY : lk_cpl36 USE diaar5 , ONLY : lk_diaar537 35 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 38 36 … … 219 217 220 218 ! partial computation of the lead energy budget (qldif) 221 #if defined key_coupled222 qldif(ji,jj) = tms(ji,jj) * rdt_ice &223 & * ( ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) ) &224 & + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp ) &225 & + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) ) )226 #else 227 qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) &228 & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) &229 & + qns(ji,jj) + fdtcn(ji,jj) &230 & + ( 1.0 - zindb ) * fsbbq(ji,jj) )231 #endif 219 IF( lk_cpl ) THEN 220 qldif(ji,jj) = tms(ji,jj) * rdt_ice & 221 & * ( ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) ) & 222 & + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp ) & 223 & + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) ) ) 224 ELSE 225 qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) & 226 & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 227 & + qns(ji,jj) + fdtcn(ji,jj) & 228 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) 229 ENDIF 232 230 ! parlat : percentage of energy used for lateral ablation (0.0) 233 231 zfntlat = 1.0 - MAX( rzero , SIGN( rone , - qldif(ji,jj) ) ) … … 440 438 !-------------------------------------------------------------------------------- 441 439 ztmp(:,:) = 1. - pfrld(:,:) ! fraction of ice after the dynamic, before the thermodynamic 442 CALL iom_put( 'ioceflxb', fbif ) ! Oceanic flux at the ice base [W/m2 ???]443 CALL iom_put( 'ist_cea', (sist(:,:) - rt0) * ztmp(:,:) ) ! Ice surface temperature [Celius]444 CALL iom_put( 'qsr_ai_cea', qsr_ice(:,:,1) * ztmp(:,:) ) ! Solar flux over the ice[W/m2]445 CALL iom_put( 'qns_ai_cea', qns_ice(:,:,1) * ztmp(:,:) ) ! Non-solar flux over the ice [W/m2]446 IF( .NOT. lk_cpl ) CALL iom_put( 'qla_ai_cea', qla_ice(:,:,1) * ztmp(:,:) ) ! Latent flux over the ice[W/m2]440 IF( iom_use('ist_cea' ) ) CALL iom_put( 'ist_cea', (sist(:,:) - rt0) * ztmp(:,:) ) ! Ice surface temperature [Celius] 441 IF( iom_use('qsr_ai_cea' ) ) CALL iom_put( 'qsr_ai_cea', qsr_ice(:,:,1) * ztmp(:,:) ) ! Solar flux over the ice [W/m2] 442 IF( iom_use('qns_ai_cea' ) ) CALL iom_put( 'qns_ai_cea', qns_ice(:,:,1) * ztmp(:,:) ) ! Non-solar flux over the ice [W/m2] 443 IF( iom_use('qla_ai_cea' ) .AND. .NOT. lk_cpl ) & 444 & CALL iom_put( 'qla_ai_cea', qla_ice(:,:,1) * ztmp(:,:) ) ! Latent flux over the ice [W/m2] 447 445 ! 448 CALL iom_put( 'snowthic_cea', hsnif (:,:) * fr_i(:,:) ) ! Snow thickness[m]449 CALL iom_put( 'icethic_cea' , hicif (:,:) * fr_i(:,:) ) ! Ice thickness[m]446 IF( iom_use('snowthic_cea')) CALL iom_put( 'snowthic_cea', hsnif (:,:) * fr_i(:,:) ) ! Snow thickness [m] 447 IF( iom_use('icethic_cea' )) CALL iom_put( 'icethic_cea' , hicif (:,:) * fr_i(:,:) ) ! Ice thickness [m] 450 448 zztmp = 1.0 / rdt_ice 451 CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp ) ! Ice produced [m/s] 452 IF( lk_diaar5 ) THEN 453 CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp ) ! Snow melt [kg/m2/s] 454 zztmp = rhoic / rdt_ice 455 CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp ) ! Snow to Ice transformation [kg/m2/s] 456 CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp ) ! Melt at Sea Ice top [kg/m2/s] 457 CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp ) ! Melt at Sea Ice bottom [kg/m2/s] 449 IF( iom_use('iceprod_cea') ) CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp ) ! Ice produced [m/s] 450 IF( iom_use('iiceconc' ) ) CALL iom_put( 'iiceconc' , fr_i(:,:) ) ! Ice concentration [-] 451 IF( iom_use('snowmel_cea') ) CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp ) ! Snow melt [kg/m2/s] 452 zztmp = rhoic / rdt_ice 453 IF( iom_use('sntoice_cea') ) CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp ) ! Snow to Ice transformation [kg/m2/s] 454 IF( iom_use('ticemel_cea') ) CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp ) ! Melt at Sea Ice top [kg/m2/s] 455 IF( iom_use('bicemel_cea') ) CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp ) ! Melt at Sea Ice bottom [kg/m2/s] 456 IF( iom_use('licepro_cea') ) THEN 458 457 zlicegr(:,:) = MAX( 0.e0, rdm_ice(:,:)-zlicegr(:,:) ) 459 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Lateral sea ice growth[kg/m2/s]458 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Lateral sea ice growth [kg/m2/s] 460 459 ENDIF 461 460 ! 462 461 ! Compute the Eastward & Northward sea-ice transport 463 zztmp = 0.25 * rhoic 464 DO jj = 1, jpjm1 465 DO ji = 1, jpim1 ! NO vector opt. 466 ! Ice velocities, volume & transport at U & V-points 467 zuice_m = u_ice(ji+1,jj+1) + u_ice(ji+1,jj ) 468 zvice_m = v_ice(ji+1,jj+1) + v_ice(ji ,jj+1) 469 zhice_u = hicif(ji,jj)*e2t(ji,jj)*fr_i(ji,jj) + hicif(ji+1,jj )*e2t(ji+1,jj )*fr_i(ji+1,jj ) 470 zhice_v = hicif(ji,jj)*e1t(ji,jj)*fr_i(ji,jj) + hicif(ji ,jj+1)*e1t(ji ,jj+1)*fr_i(ji ,jj+1) 471 zu_imasstr(ji,jj) = zztmp * zhice_u * zuice_m 472 zv_imasstr(ji,jj) = zztmp * zhice_v * zvice_m 473 END DO 474 END DO 475 CALL lbc_lnk( zu_imasstr, 'U', -1. ) ; CALL lbc_lnk( zv_imasstr, 'V', -1. ) 476 CALL iom_put( 'u_imasstr', zu_imasstr(:,:) ) ! Ice transport along i-axis at U-point [kg/s] 477 CALL iom_put( 'v_imasstr', zv_imasstr(:,:) ) ! Ice transport along j-axis at V-point [kg/s] 462 IF( iom_use('u_imasstr') ) THEN 463 zztmp = 0.25 * rhoic 464 DO jj = 1, jpjm1 465 DO ji = 1, jpim1 ! NO vector opt. 466 ! Ice velocities, volume & transport at U-points 467 zuice_m = u_ice(ji+1,jj+1) + u_ice(ji+1,jj ) 468 zhice_u = hicif(ji,jj)*e2t(ji,jj)*fr_i(ji,jj) + hicif(ji+1,jj )*e2t(ji+1,jj )*fr_i(ji+1,jj ) 469 zu_imasstr(ji,jj) = zztmp * zhice_u * zuice_m 470 END DO 471 END DO 472 CALL lbc_lnk( zu_imasstr, 'U', -1. ) 473 CALL iom_put( 'u_imasstr', zu_imasstr(:,:) ) ! Ice transport along i-axis at U-point [kg/s] 474 ENDIF 475 IF( iom_use('v_imasstr') ) THEN 476 zztmp = 0.25 * rhoic 477 DO jj = 1, jpjm1 478 DO ji = 1, jpim1 ! NO vector opt. 479 ! Ice velocities, volume & transport at V-points 480 zvice_m = v_ice(ji+1,jj+1) + v_ice(ji ,jj+1) 481 zhice_v = hicif(ji,jj)*e1t(ji,jj)*fr_i(ji,jj) + hicif(ji ,jj+1)*e1t(ji ,jj+1)*fr_i(ji ,jj+1) 482 zv_imasstr(ji,jj) = zztmp * zhice_v * zvice_m 483 END DO 484 END DO 485 CALL lbc_lnk( zv_imasstr, 'V', -1. ) 486 CALL iom_put( 'v_imasstr', zv_imasstr(:,:) ) ! Ice transport along j-axis at V-point [kg/s] 487 ENDIF 478 488 479 489 !! Fram Strait sea-ice transport (sea-ice + snow) (in ORCA2 = 5 points) 480 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2 configuration490 IF( iom_use('fram_trans') .and. cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2 configuration 481 491 DO jj = mj0(137), mj1(137) ! B grid 482 492 IF( mj0(jj-1) >= nldj ) THEN … … 492 502 ENDIF 493 503 504 IF( iom_use('ice_pres') .OR. iom_use('ist_ipa') .OR. iom_use('uice_ipa') .OR. iom_use('vice_ipa') ) THEN 494 505 !! ce ztmp(:,:) = 1. - AINT( frld(:,:), wp ) ! return 1 as soon as there is ice 495 506 !! ce A big warning because the model crashes on IDRIS/IBM SP6 with xlf 13.1.0.3, see ticket #761 496 !! ce We Unroll the loop and everything works fine 497 DO jj = 1, jpj 498 DO ji = 1, jpi 499 ztmp(ji,jj) = 1. - AINT( frld(ji,jj), wp ) ! return 1 as soon as there is ice 500 END DO 501 END DO 502 ! 503 CALL iom_put( 'ice_pres' , ztmp ) ! Ice presence [-] 504 CALL iom_put( 'ist_ipa' , ( sist(:,:) - rt0 ) * ztmp(:,:) ) ! Ice surface temperature [Celius] 505 CALL iom_put( 'uice_ipa' , u_ice(:,:) * ztmp(:,:) ) ! Ice velocity along i-axis at I-point [m/s] 506 CALL iom_put( 'vice_ipa' , v_ice(:,:) * ztmp(:,:) ) ! Ice velocity along j-axis at I-point [m/s] 507 !! ce We Unroll the loop and everything works fine 508 DO jj = 1, jpj 509 DO ji = 1, jpi 510 ztmp(ji,jj) = 1. - AINT( frld(ji,jj), wp ) ! return 1 as soon as there is ice 511 END DO 512 END DO 513 ! 514 IF( iom_use('ice_pres') ) CALL iom_put( 'ice_pres', ztmp ) ! Ice presence [-] 515 IF( iom_use('ist_ipa' ) ) CALL iom_put( 'ist_ipa' , ( sist(:,:) - rt0 ) * ztmp(:,:) ) ! Ice surface temperature [Celius] 516 IF( iom_use('uice_ipa') ) CALL iom_put( 'uice_ipa', u_ice(:,:) * ztmp(:,:) ) ! Ice velocity along i-axis at I-point [m/s] 517 IF( iom_use('vice_ipa') ) CALL iom_put( 'vice_ipa', v_ice(:,:) * ztmp(:,:) ) ! Ice velocity along j-axis at I-point [m/s] 518 ENDIF 507 519 508 520 IF(ln_ctl) THEN
Note: See TracChangeset
for help on using the changeset viewer.