Changeset 8342
- Timestamp:
- 2017-07-15T17:27:14+02:00 (6 years ago)
- Location:
- branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limtab.F90
r4161 r8342 12 12 !!---------------------------------------------------------------------- 13 13 USE par_kind 14 14 USE par_oce 15 15 16 IMPLICIT NONE 16 17 PRIVATE … … 26 27 CONTAINS 27 28 28 SUBROUTINE tab_2d_1d( ndim1d, tab 1d, tab2d, ndim2d_x, ndim2d_y, tab_ind )29 SUBROUTINE tab_2d_1d( ndim1d, tab_ind, tab1d, tab2d ) 29 30 !!---------------------------------------------------------------------- 30 31 !! *** ROUTINE tab_2d_1d *** 31 32 !!---------------------------------------------------------------------- 32 INTEGER , INTENT(in ) :: ndim1d, ndim2d_x, ndim2d_y ! 1d & 2D sizes33 REAL(wp), DIMENSION(ndim2d_x,ndim2d_y), INTENT(in ) :: tab2d ! input 2D field34 INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index35 REAL(wp), DIMENSION(ndim1d) , INTENT( out) :: tab1d! output 1D field33 INTEGER , INTENT(in ) :: ndim1d ! 1d size 34 INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index 35 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: tab2d ! input 2D field 36 REAL(wp), DIMENSION(ndim1d) , INTENT( out) :: tab1d ! output 1D field 36 37 ! 37 38 INTEGER :: jn , jid, jjd 38 39 !!---------------------------------------------------------------------- 39 40 DO jn = 1, ndim1d 40 jid = MOD( tab_ind(jn) - 1 , ndim2d_x) + 141 jjd = ( tab_ind(jn) - 1 ) / ndim2d_x+ 141 jid = MOD( tab_ind(jn) - 1 , jpi ) + 1 42 jjd = ( tab_ind(jn) - 1 ) / jpi + 1 42 43 tab1d( jn) = tab2d( jid, jjd) 43 44 END DO … … 45 46 46 47 47 SUBROUTINE tab_1d_2d( ndim1d, tab 2d, tab_ind, tab1d, ndim2d_x, ndim2d_y)48 SUBROUTINE tab_1d_2d( ndim1d, tab_ind, tab1d, tab2d ) 48 49 !!---------------------------------------------------------------------- 49 50 !! *** ROUTINE tab_2d_1d *** 50 51 !!---------------------------------------------------------------------- 51 INTEGER , INTENT(in ) :: ndim1d, ndim2d_x, ndim2d_y ! 1d & 2D sizes52 REAL(wp), DIMENSION(ndim1d) , INTENT(in ) :: tab1d ! input 1D field53 INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index54 REAL(wp), DIMENSION( ndim2d_x,ndim2d_y), INTENT( out) :: tab2d! output 2D field52 INTEGER , INTENT(in ) :: ndim1d ! 1D size 53 INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index 54 REAL(wp), DIMENSION(ndim1d) , INTENT(in ) :: tab1d ! input 1D field 55 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: tab2d ! output 2D field 55 56 ! 56 57 INTEGER :: jn , jid, jjd 57 58 !!---------------------------------------------------------------------- 58 59 DO jn = 1, ndim1d 59 jid = MOD( tab_ind(jn) - 1 , ndim2d_x) + 160 jjd = ( tab_ind(jn) - 1 ) / ndim2d_x+ 160 jid = MOD( tab_ind(jn) - 1 , jpi ) + 1 61 jjd = ( tab_ind(jn) - 1 ) / jpi + 1 61 62 tab2d(jid, jjd) = tab1d( jn) 62 63 END DO -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r8341 r8342 83 83 ! 84 84 INTEGER :: ji, jj, jk, jl ! dummy loop indices 85 INTEGER :: nidx ! nb of icy pts for vertical thermo calculations86 85 REAL(wp) :: zfric_u, zqld, zqfr, zqfr_neg 87 86 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b … … 242 241 dh_snowice(:) = 0._wp ; dh_i_sub (:) = 0._wp 243 242 244 CALL lim_thd_1d2d( nidx,jl, 1 ) ! --- Move to 1D arrays --- !243 CALL lim_thd_1d2d( jl, 1 ) ! --- Move to 1D arrays --- ! 245 244 ! 246 245 DO jk = 1, nlay_i ! --- Change units from J/m2 to J/m3 --- ! … … 251 250 ENDDO 252 251 ! 253 IF( ln_limdH ) CALL lim_thd_dif ( 1, nidx )! --- Ice/Snow Temperature profile --- !254 ! 255 IF( ln_limdH ) CALL lim_thd_dh ( 1, nidx )! --- Ice/Snow thickness --- !256 ! 257 IF( ln_limdH ) CALL lim_thd_ent( 1, nidx,e_i_1d(1:nidx,:) ) ! --- Ice enthalpy remapping --- !258 ! 259 CALL lim_thd_sal ( 1, nidx )! --- Ice salinity --- !260 ! 261 CALL lim_thd_temp ( 1, nidx )! --- temperature update --- !252 IF( ln_limdH ) CALL lim_thd_dif ! --- Ice/Snow Temperature profile --- ! 253 ! 254 IF( ln_limdH ) CALL lim_thd_dh ! --- Ice/Snow thickness --- ! 255 ! 256 IF( ln_limdH ) CALL lim_thd_ent( e_i_1d(1:nidx,:) ) ! --- Ice enthalpy remapping --- ! 257 ! 258 CALL lim_thd_sal ! --- Ice salinity --- ! 259 ! 260 CALL lim_thd_temp ! --- temperature update --- ! 262 261 ! 263 262 IF( ln_limdH ) THEN 264 263 IF ( ( nn_monocat == 1 .OR. nn_monocat == 4 ) .AND. jpl == 1 ) THEN 265 CALL lim_thd_lam ( 1, nidx )! --- extra lateral melting if monocat --- !264 CALL lim_thd_lam ! --- extra lateral melting if monocat --- ! 266 265 END IF 267 266 END IF … … 274 273 ENDDO 275 274 ! 276 CALL lim_thd_1d2d( nidx,jl, 2 ) ! --- Move to 2D arrays --- !275 CALL lim_thd_1d2d( jl, 2 ) ! --- Move to 2D arrays --- ! 277 276 ! 278 277 IF( lk_mpp ) CALL mpp_comm_free( ncomm_ice ) !RB necessary ?? … … 344 343 345 344 346 SUBROUTINE lim_thd_temp ( kideb, kiut )345 SUBROUTINE lim_thd_temp 347 346 !!----------------------------------------------------------------------- 348 347 !! *** ROUTINE lim_thd_temp *** … … 352 351 !! ** Method : Formula (Bitz and Lipscomb, 1999) 353 352 !!------------------------------------------------------------------- 354 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop355 !356 353 INTEGER :: ji, jk ! dummy loop indices 357 354 REAL(wp) :: ztmelts, zaaa, zbbb, zccc, zdiscrim ! local scalar … … 359 356 ! Recover ice temperature 360 357 DO jk = 1, nlay_i 361 DO ji = kideb, kiut358 DO ji = 1, nidx 362 359 ztmelts = -tmut * s_i_1d(ji,jk) + rt0 363 360 ! Conversion q(S,T) -> T (second order equation) … … 377 374 378 375 379 SUBROUTINE lim_thd_lam ( kideb, kiut )376 SUBROUTINE lim_thd_lam 380 377 !!----------------------------------------------------------------------- 381 378 !! *** ROUTINE lim_thd_lam *** … … 384 381 !! ( dA = A/2h dh ) 385 382 !!----------------------------------------------------------------------- 386 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop387 !388 383 INTEGER :: ji ! dummy loop indices 389 384 REAL(wp) :: zhi_bef ! ice thickness before thermo … … 392 387 !!----------------------------------------------------------------------- 393 388 ! 394 DO ji = kideb, kiut389 DO ji = 1, nidx 395 390 zdh_mel = MIN( 0._wp, dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji) + dh_i_sub(ji) ) 396 391 IF( zdh_mel < 0._wp .AND. a_i_1d(ji) > 0._wp ) THEN … … 413 408 414 409 415 SUBROUTINE lim_thd_1d2d( nidx,jl, kn )410 SUBROUTINE lim_thd_1d2d( jl, kn ) 416 411 !!----------------------------------------------------------------------- 417 412 !! *** ROUTINE lim_thd_1d2d *** … … 419 414 !! ** Purpose : move arrays from 1d to 2d and the reverse 420 415 !!----------------------------------------------------------------------- 416 INTEGER, INTENT(in) :: jl ! ice cat 421 417 INTEGER, INTENT(in) :: kn ! 1= from 2D to 1D ; 2= from 1D to 2D 422 INTEGER, INTENT(in) :: nidx ! size of 1D arrays423 INTEGER, INTENT(in) :: jl ! ice cat424 418 ! 425 419 INTEGER :: jk ! dummy loop indices … … 430 424 CASE( 1 ) ! from 2D to 1D 431 425 ! 432 CALL tab_2d_1d( nidx, at_i_1d (1:nidx), at_i , jpi, jpj, idxice(1:nidx) ) 433 CALL tab_2d_1d( nidx, a_i_1d (1:nidx), a_i(:,:,jl) , jpi, jpj, idxice(1:nidx) ) 434 CALL tab_2d_1d( nidx, ht_i_1d (1:nidx), ht_i(:,:,jl) , jpi, jpj, idxice(1:nidx) ) 435 CALL tab_2d_1d( nidx, ht_s_1d (1:nidx), ht_s(:,:,jl) , jpi, jpj, idxice(1:nidx) ) 436 ! 437 CALL tab_2d_1d( nidx, t_su_1d (1:nidx), t_su(:,:,jl) , jpi, jpj, idxice(1:nidx) ) 438 CALL tab_2d_1d( nidx, sm_i_1d (1:nidx), sm_i(:,:,jl) , jpi, jpj, idxice(1:nidx) ) 426 CALL tab_2d_1d( nidx, idxice(1:nidx), at_i_1d(1:nidx), at_i ) 427 CALL tab_2d_1d( nidx, idxice(1:nidx), a_i_1d (1:nidx), a_i(:,:,jl) ) 428 CALL tab_2d_1d( nidx, idxice(1:nidx), ht_i_1d(1:nidx), ht_i(:,:,jl) ) 429 CALL tab_2d_1d( nidx, idxice(1:nidx), ht_s_1d(1:nidx), ht_s(:,:,jl) ) 430 CALL tab_2d_1d( nidx, idxice(1:nidx), t_su_1d(1:nidx), t_su(:,:,jl) ) 431 CALL tab_2d_1d( nidx, idxice(1:nidx), sm_i_1d(1:nidx), sm_i(:,:,jl) ) 439 432 DO jk = 1, nlay_s 440 CALL tab_2d_1d( nidx, t_s_1d(1:nidx,jk), t_s(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))441 CALL tab_2d_1d( nidx, e_s_1d(1:nidx,jk), e_s(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))433 CALL tab_2d_1d( nidx, idxice(1:nidx), t_s_1d(1:nidx,jk), t_s(:,:,jk,jl) ) 434 CALL tab_2d_1d( nidx, idxice(1:nidx), e_s_1d(1:nidx,jk), e_s(:,:,jk,jl) ) 442 435 END DO 443 436 DO jk = 1, nlay_i 444 CALL tab_2d_1d( nidx, t_i_1d(1:nidx,jk), t_i(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))445 CALL tab_2d_1d( nidx, e_i_1d(1:nidx,jk), e_i(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))446 CALL tab_2d_1d( nidx, s_i_1d(1:nidx,jk), s_i(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))447 END DO 448 ! 449 CALL tab_2d_1d( nidx, qprec_ice_1d(1:nidx), qprec_ice(:,:) , jpi, jpj, idxice(1:nidx))450 CALL tab_2d_1d( nidx, qevap_ice_1d(1:nidx), qevap_ice(:,:,jl) , jpi, jpj, idxice(1:nidx))451 CALL tab_2d_1d( nidx, qsr_ice_1d (1:nidx), qsr_ice(:,:,jl) , jpi, jpj, idxice(1:nidx))452 CALL tab_2d_1d( nidx, fr1_i0_1d (1:nidx), fr1_i0 , jpi, jpj, idxice(1:nidx))453 CALL tab_2d_1d( nidx, fr2_i0_1d (1:nidx), fr2_i0 , jpi, jpj, idxice(1:nidx))454 CALL tab_2d_1d( nidx, qns_ice_1d (1:nidx), qns_ice(:,:,jl) , jpi, jpj, idxice(1:nidx))455 CALL tab_2d_1d( nidx, ftr_ice_1d (1:nidx), ftr_ice(:,:,jl) , jpi, jpj, idxice(1:nidx))456 CALL tab_2d_1d( nidx, evap_ice_1d (1:nidx), evap_ice(:,:,jl), jpi, jpj, idxice(1:nidx) )457 CALL tab_2d_1d( nidx, dqns_ice_1d(1:nidx), dqns_ice(:,:,jl), jpi, jpj, idxice(1:nidx) )458 CALL tab_2d_1d( nidx, t_bo_1d (1:nidx), t_bo , jpi, jpj, idxice(1:nidx))459 CALL tab_2d_1d( nidx, sprecip_1d (1:nidx), sprecip , jpi, jpj, idxice(1:nidx))460 CALL tab_2d_1d( nidx, fhtur_1d (1:nidx), fhtur , jpi, jpj, idxice(1:nidx))461 CALL tab_2d_1d( nidx, fhld_1d (1:nidx), fhld , jpi, jpj, idxice(1:nidx))462 ! 463 CALL tab_2d_1d( nidx, wfx_snw_sni_1d(1:nidx), wfx_snw_sni , jpi, jpj, idxice(1:nidx))464 CALL tab_2d_1d( nidx, wfx_snw_sum_1d(1:nidx), wfx_snw_sum , jpi, jpj, idxice(1:nidx))465 CALL tab_2d_1d( nidx, wfx_sub_1d (1:nidx), wfx_sub , jpi, jpj, idxice(1:nidx))466 CALL tab_2d_1d( nidx, wfx_snw_sub_1d(1:nidx), wfx_snw_sub , jpi, jpj, idxice(1:nidx))467 CALL tab_2d_1d( nidx, wfx_ice_sub_1d(1:nidx), wfx_ice_sub , jpi, jpj, idxice(1:nidx))468 CALL tab_2d_1d( nidx, wfx_err_sub_1d(1:nidx), wfx_err_sub , jpi, jpj, idxice(1:nidx))469 ! 470 CALL tab_2d_1d( nidx, wfx_bog_1d (1:nidx), wfx_bog , jpi, jpj, idxice(1:nidx))471 CALL tab_2d_1d( nidx, wfx_bom_1d (1:nidx), wfx_bom , jpi, jpj, idxice(1:nidx))472 CALL tab_2d_1d( nidx, wfx_sum_1d (1:nidx), wfx_sum , jpi, jpj, idxice(1:nidx))473 CALL tab_2d_1d( nidx, wfx_sni_1d (1:nidx), wfx_sni , jpi, jpj, idxice(1:nidx))474 CALL tab_2d_1d( nidx, wfx_res_1d (1:nidx), wfx_res , jpi, jpj, idxice(1:nidx))475 CALL tab_2d_1d( nidx, wfx_spr_1d (1:nidx), wfx_spr , jpi, jpj, idxice(1:nidx))476 ! 477 CALL tab_2d_1d( nidx, sfx_bog_1d (1:nidx), sfx_bog , jpi, jpj, idxice(1:nidx))478 CALL tab_2d_1d( nidx, sfx_bom_1d (1:nidx), sfx_bom , jpi, jpj, idxice(1:nidx))479 CALL tab_2d_1d( nidx, sfx_sum_1d (1:nidx), sfx_sum , jpi, jpj, idxice(1:nidx))480 CALL tab_2d_1d( nidx, sfx_sni_1d (1:nidx), sfx_sni , jpi, jpj, idxice(1:nidx))481 CALL tab_2d_1d( nidx, sfx_bri_1d (1:nidx), sfx_bri , jpi, jpj, idxice(1:nidx))482 CALL tab_2d_1d( nidx, sfx_res_1d (1:nidx), sfx_res , jpi, jpj, idxice(1:nidx))483 CALL tab_2d_1d( nidx, sfx_sub_1d (1:nidx), sfx_sub , jpi, jpj,idxice(1:nidx))484 ! 485 CALL tab_2d_1d( nidx, hfx_thd_1d (1:nidx), hfx_thd , jpi, jpj, idxice(1:nidx))486 CALL tab_2d_1d( nidx, hfx_spr_1d (1:nidx), hfx_spr , jpi, jpj, idxice(1:nidx))487 CALL tab_2d_1d( nidx, hfx_sum_1d (1:nidx), hfx_sum , jpi, jpj, idxice(1:nidx))488 CALL tab_2d_1d( nidx, hfx_bom_1d (1:nidx), hfx_bom , jpi, jpj, idxice(1:nidx))489 CALL tab_2d_1d( nidx, hfx_bog_1d (1:nidx), hfx_bog , jpi, jpj, idxice(1:nidx))490 CALL tab_2d_1d( nidx, hfx_dif_1d (1:nidx), hfx_dif , jpi, jpj, idxice(1:nidx))491 CALL tab_2d_1d( nidx, hfx_opw_1d (1:nidx), hfx_opw , jpi, jpj, idxice(1:nidx))492 CALL tab_2d_1d( nidx, hfx_snw_1d (1:nidx), hfx_snw , jpi, jpj, idxice(1:nidx))493 CALL tab_2d_1d( nidx, hfx_sub_1d (1:nidx), hfx_sub , jpi, jpj, idxice(1:nidx))494 CALL tab_2d_1d( nidx, hfx_err_1d (1:nidx), hfx_err , jpi, jpj, idxice(1:nidx))495 CALL tab_2d_1d( nidx, hfx_res_1d (1:nidx), hfx_res , jpi, jpj, idxice(1:nidx))496 CALL tab_2d_1d( nidx, hfx_err_dif_1d (1:nidx), hfx_err_dif , jpi, jpj, idxice(1:nidx))497 CALL tab_2d_1d( nidx, hfx_err_rem_1d (1:nidx), hfx_err_rem , jpi, jpj, idxice(1:nidx))498 CALL tab_2d_1d( nidx, hfx_out_1d (1:nidx), hfx_out , jpi, jpj, idxice(1:nidx))437 CALL tab_2d_1d( nidx, idxice(1:nidx), t_i_1d(1:nidx,jk), t_i(:,:,jk,jl) ) 438 CALL tab_2d_1d( nidx, idxice(1:nidx), e_i_1d(1:nidx,jk), e_i(:,:,jk,jl) ) 439 CALL tab_2d_1d( nidx, idxice(1:nidx), s_i_1d(1:nidx,jk), s_i(:,:,jk,jl) ) 440 END DO 441 ! 442 CALL tab_2d_1d( nidx, idxice(1:nidx), qprec_ice_1d(1:nidx), qprec_ice ) 443 CALL tab_2d_1d( nidx, idxice(1:nidx), qevap_ice_1d(1:nidx), qevap_ice(:,:,jl) ) 444 CALL tab_2d_1d( nidx, idxice(1:nidx), qsr_ice_1d (1:nidx), qsr_ice(:,:,jl) ) 445 CALL tab_2d_1d( nidx, idxice(1:nidx), fr1_i0_1d (1:nidx), fr1_i0 ) 446 CALL tab_2d_1d( nidx, idxice(1:nidx), fr2_i0_1d (1:nidx), fr2_i0 ) 447 CALL tab_2d_1d( nidx, idxice(1:nidx), qns_ice_1d (1:nidx), qns_ice(:,:,jl) ) 448 CALL tab_2d_1d( nidx, idxice(1:nidx), ftr_ice_1d (1:nidx), ftr_ice(:,:,jl) ) 449 CALL tab_2d_1d( nidx, idxice(1:nidx), evap_ice_1d (1:nidx), evap_ice(:,:,jl) ) 450 CALL tab_2d_1d( nidx, idxice(1:nidx), dqns_ice_1d (1:nidx), dqns_ice(:,:,jl) ) 451 CALL tab_2d_1d( nidx, idxice(1:nidx), t_bo_1d (1:nidx), t_bo ) 452 CALL tab_2d_1d( nidx, idxice(1:nidx), sprecip_1d (1:nidx), sprecip ) 453 CALL tab_2d_1d( nidx, idxice(1:nidx), fhtur_1d (1:nidx), fhtur ) 454 CALL tab_2d_1d( nidx, idxice(1:nidx), fhld_1d (1:nidx), fhld ) 455 ! 456 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_snw_sni_1d(1:nidx), wfx_snw_sni ) 457 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_snw_sum_1d(1:nidx), wfx_snw_sum ) 458 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_sub_1d (1:nidx), wfx_sub ) 459 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_snw_sub_1d(1:nidx), wfx_snw_sub ) 460 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_ice_sub_1d(1:nidx), wfx_ice_sub ) 461 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_err_sub_1d(1:nidx), wfx_err_sub ) 462 ! 463 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_bog_1d (1:nidx), wfx_bog ) 464 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_bom_1d (1:nidx), wfx_bom ) 465 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_sum_1d (1:nidx), wfx_sum ) 466 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_sni_1d (1:nidx), wfx_sni ) 467 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_res_1d (1:nidx), wfx_res ) 468 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_spr_1d (1:nidx), wfx_spr ) 469 ! 470 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_bog_1d (1:nidx), sfx_bog ) 471 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_bom_1d (1:nidx), sfx_bom ) 472 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_sum_1d (1:nidx), sfx_sum ) 473 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_sni_1d (1:nidx), sfx_sni ) 474 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_bri_1d (1:nidx), sfx_bri ) 475 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_res_1d (1:nidx), sfx_res ) 476 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_sub_1d (1:nidx), sfx_sub ) 477 ! 478 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_thd_1d (1:nidx), hfx_thd ) 479 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_spr_1d (1:nidx), hfx_spr ) 480 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_sum_1d (1:nidx), hfx_sum ) 481 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_bom_1d (1:nidx), hfx_bom ) 482 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_bog_1d (1:nidx), hfx_bog ) 483 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_dif_1d (1:nidx), hfx_dif ) 484 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_opw_1d (1:nidx), hfx_opw ) 485 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_snw_1d (1:nidx), hfx_snw ) 486 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_sub_1d (1:nidx), hfx_sub ) 487 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_err_1d (1:nidx), hfx_err ) 488 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_res_1d (1:nidx), hfx_res ) 489 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_err_dif_1d(1:nidx), hfx_err_dif ) 490 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_err_rem_1d(1:nidx), hfx_err_rem ) 491 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_out_1d (1:nidx), hfx_out ) 499 492 ! 500 493 ! SIMIP diagnostics 501 CALL tab_2d_1d( nidx, diag_fc_bo_1d (1:nidx), diag_fc_bo , jpi, jpj, idxice(1:nidx))502 CALL tab_2d_1d( nidx, diag_fc_su_1d (1:nidx), diag_fc_su , jpi, jpj, idxice(1:nidx))494 CALL tab_2d_1d( nidx, idxice(1:nidx), diag_fc_bo_1d(1:nidx), diag_fc_bo ) 495 CALL tab_2d_1d( nidx, idxice(1:nidx), diag_fc_su_1d(1:nidx), diag_fc_su ) 503 496 ! ocean surface fields 504 CALL tab_2d_1d( nidx, sst_1d(1:nidx), sst_m, jpi, jpj, idxice(1:nidx))505 CALL tab_2d_1d( nidx, sss_1d(1:nidx), sss_m, jpi, jpj, idxice(1:nidx))497 CALL tab_2d_1d( nidx, idxice(1:nidx), sst_1d(1:nidx), sst_m ) 498 CALL tab_2d_1d( nidx, idxice(1:nidx), sss_1d(1:nidx), sss_m ) 506 499 ! 507 500 CASE( 2 ) ! from 1D to 2D 508 501 ! 509 CALL tab_1d_2d( nidx, at_i , idxice, at_i_1d (1:nidx) , jpi, jpj)510 CALL tab_1d_2d( nidx, ht_i(:,:,jl) , idxice, ht_i_1d (1:nidx) , jpi, jpj)511 CALL tab_1d_2d( nidx, ht_s(:,:,jl) , idxice, ht_s_1d (1:nidx) , jpi, jpj)512 CALL tab_1d_2d( nidx, a_i (:,:,jl) , idxice, a_i_1d (1:nidx) , jpi, jpj)513 CALL tab_1d_2d( nidx, t_su(:,:,jl) , idxice, t_su_1d (1:nidx) , jpi, jpj)514 CALL tab_1d_2d( nidx, sm_i(:,:,jl) , idxice, sm_i_1d (1:nidx) , jpi, jpj)502 CALL tab_1d_2d( nidx, idxice(1:nidx), at_i_1d(1:nidx), at_i ) 503 CALL tab_1d_2d( nidx, idxice(1:nidx), a_i_1d (1:nidx), a_i(:,:,jl) ) 504 CALL tab_1d_2d( nidx, idxice(1:nidx), ht_i_1d(1:nidx), ht_i(:,:,jl) ) 505 CALL tab_1d_2d( nidx, idxice(1:nidx), ht_s_1d(1:nidx), ht_s(:,:,jl) ) 506 CALL tab_1d_2d( nidx, idxice(1:nidx), t_su_1d(1:nidx), t_su(:,:,jl) ) 507 CALL tab_1d_2d( nidx, idxice(1:nidx), sm_i_1d(1:nidx), sm_i(:,:,jl) ) 515 508 DO jk = 1, nlay_s 516 CALL tab_1d_2d( nidx, t_s(:,:,jk,jl), idxice, t_s_1d (1:nidx,jk), jpi, jpj)517 CALL tab_1d_2d( nidx, e_s(:,:,jk,jl), idxice, e_s_1d (1:nidx,jk), jpi, jpj)509 CALL tab_1d_2d( nidx, idxice(1:nidx), t_s_1d(1:nidx,jk), t_s(:,:,jk,jl) ) 510 CALL tab_1d_2d( nidx, idxice(1:nidx), e_s_1d(1:nidx,jk), e_s(:,:,jk,jl) ) 518 511 END DO 519 512 DO jk = 1, nlay_i 520 CALL tab_1d_2d( nidx, t_i(:,:,jk,jl), idxice, t_i_1d (1:nidx,jk), jpi, jpj) 521 CALL tab_1d_2d( nidx, e_i(:,:,jk,jl), idxice, e_i_1d (1:nidx,jk), jpi, jpj) 522 CALL tab_1d_2d( nidx, s_i(:,:,jk,jl), idxice, s_i_1d (1:nidx,jk), jpi, jpj) 523 END DO 524 ! 525 CALL tab_1d_2d( nidx, wfx_snw_sni , idxice, wfx_snw_sni_1d(1:nidx), jpi, jpj ) 526 CALL tab_1d_2d( nidx, wfx_snw_sum , idxice, wfx_snw_sum_1d(1:nidx),jpi, jpj ) 527 CALL tab_1d_2d( nidx, wfx_sub , idxice, wfx_sub_1d(1:nidx) , jpi, jpj ) 528 CALL tab_1d_2d( nidx, wfx_snw_sub , idxice, wfx_snw_sub_1d(1:nidx), jpi, jpj ) 529 CALL tab_1d_2d( nidx, wfx_ice_sub , idxice, wfx_ice_sub_1d(1:nidx), jpi, jpj ) 530 CALL tab_1d_2d( nidx, wfx_err_sub , idxice, wfx_err_sub_1d(1:nidx), jpi, jpj ) 531 ! 532 CALL tab_1d_2d( nidx, wfx_bog , idxice, wfx_bog_1d(1:nidx) , jpi, jpj ) 533 CALL tab_1d_2d( nidx, wfx_bom , idxice, wfx_bom_1d(1:nidx) , jpi, jpj ) 534 CALL tab_1d_2d( nidx, wfx_sum , idxice, wfx_sum_1d(1:nidx) , jpi, jpj ) 535 CALL tab_1d_2d( nidx, wfx_sni , idxice, wfx_sni_1d(1:nidx) , jpi, jpj ) 536 CALL tab_1d_2d( nidx, wfx_res , idxice, wfx_res_1d(1:nidx) , jpi, jpj ) 537 CALL tab_1d_2d( nidx, wfx_spr , idxice, wfx_spr_1d(1:nidx) , jpi, jpj ) 538 ! 539 CALL tab_1d_2d( nidx, sfx_bog , idxice, sfx_bog_1d(1:nidx) , jpi, jpj ) 540 CALL tab_1d_2d( nidx, sfx_bom , idxice, sfx_bom_1d(1:nidx) , jpi, jpj ) 541 CALL tab_1d_2d( nidx, sfx_sum , idxice, sfx_sum_1d(1:nidx) , jpi, jpj ) 542 CALL tab_1d_2d( nidx, sfx_sni , idxice, sfx_sni_1d(1:nidx) , jpi, jpj ) 543 CALL tab_1d_2d( nidx, sfx_res , idxice, sfx_res_1d(1:nidx) , jpi, jpj ) 544 CALL tab_1d_2d( nidx, sfx_bri , idxice, sfx_bri_1d(1:nidx) , jpi, jpj ) 545 CALL tab_1d_2d( nidx, sfx_sub , idxice, sfx_sub_1d(1:nidx) , jpi, jpj ) 546 ! 547 CALL tab_1d_2d( nidx, hfx_thd , idxice, hfx_thd_1d(1:nidx) , jpi, jpj ) 548 CALL tab_1d_2d( nidx, hfx_spr , idxice, hfx_spr_1d(1:nidx) , jpi, jpj ) 549 CALL tab_1d_2d( nidx, hfx_sum , idxice, hfx_sum_1d(1:nidx) , jpi, jpj ) 550 CALL tab_1d_2d( nidx, hfx_bom , idxice, hfx_bom_1d(1:nidx) , jpi, jpj ) 551 CALL tab_1d_2d( nidx, hfx_bog , idxice, hfx_bog_1d(1:nidx) , jpi, jpj ) 552 CALL tab_1d_2d( nidx, hfx_dif , idxice, hfx_dif_1d(1:nidx) , jpi, jpj ) 553 CALL tab_1d_2d( nidx, hfx_opw , idxice, hfx_opw_1d(1:nidx) , jpi, jpj ) 554 CALL tab_1d_2d( nidx, hfx_snw , idxice, hfx_snw_1d(1:nidx) , jpi, jpj ) 555 CALL tab_1d_2d( nidx, hfx_sub , idxice, hfx_sub_1d(1:nidx) , jpi, jpj ) 556 CALL tab_1d_2d( nidx, hfx_err , idxice, hfx_err_1d(1:nidx) , jpi, jpj ) 557 CALL tab_1d_2d( nidx, hfx_res , idxice, hfx_res_1d(1:nidx) , jpi, jpj ) 558 CALL tab_1d_2d( nidx, hfx_err_rem , idxice, hfx_err_rem_1d(1:nidx), jpi, jpj ) 559 CALL tab_1d_2d( nidx, hfx_err_dif , idxice, hfx_err_dif_1d(1:nidx), jpi, jpj ) 560 CALL tab_1d_2d( nidx, hfx_out , idxice, hfx_out_1d(1:nidx) , jpi, jpj ) 561 ! 562 CALL tab_1d_2d( nidx, qns_ice(:,:,jl), idxice, qns_ice_1d(1:nidx) , jpi, jpj) 563 CALL tab_1d_2d( nidx, ftr_ice(:,:,jl), idxice, ftr_ice_1d(1:nidx) , jpi, jpj ) 513 CALL tab_1d_2d( nidx, idxice(1:nidx), t_i_1d(1:nidx,jk), t_i(:,:,jk,jl) ) 514 CALL tab_1d_2d( nidx, idxice(1:nidx), e_i_1d(1:nidx,jk), e_i(:,:,jk,jl) ) 515 CALL tab_1d_2d( nidx, idxice(1:nidx), s_i_1d(1:nidx,jk), s_i(:,:,jk,jl) ) 516 END DO 517 ! 518 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_snw_sni_1d(1:nidx), wfx_snw_sni ) 519 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_snw_sum_1d(1:nidx), wfx_snw_sum ) 520 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_sub_1d (1:nidx), wfx_sub ) 521 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_snw_sub_1d(1:nidx), wfx_snw_sub ) 522 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_ice_sub_1d(1:nidx), wfx_ice_sub ) 523 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_err_sub_1d(1:nidx), wfx_err_sub ) 524 ! 525 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_bog_1d (1:nidx), wfx_bog ) 526 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_bom_1d (1:nidx), wfx_bom ) 527 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_sum_1d (1:nidx), wfx_sum ) 528 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_sni_1d (1:nidx), wfx_sni ) 529 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_res_1d (1:nidx), wfx_res ) 530 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_spr_1d (1:nidx), wfx_spr ) 531 ! 532 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_bog_1d (1:nidx), sfx_bog ) 533 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_bom_1d (1:nidx), sfx_bom ) 534 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_sum_1d (1:nidx), sfx_sum ) 535 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_sni_1d (1:nidx), sfx_sni ) 536 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_bri_1d (1:nidx), sfx_bri ) 537 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_res_1d (1:nidx), sfx_res ) 538 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_sub_1d (1:nidx), sfx_sub ) 539 540 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_thd_1d (1:nidx), hfx_thd ) 541 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_spr_1d (1:nidx), hfx_spr ) 542 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_sum_1d (1:nidx), hfx_sum ) 543 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_bom_1d (1:nidx), hfx_bom ) 544 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_bog_1d (1:nidx), hfx_bog ) 545 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_dif_1d (1:nidx), hfx_dif ) 546 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_opw_1d (1:nidx), hfx_opw ) 547 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_snw_1d (1:nidx), hfx_snw ) 548 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_sub_1d (1:nidx), hfx_sub ) 549 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_err_1d (1:nidx), hfx_err ) 550 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_res_1d (1:nidx), hfx_res ) 551 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_err_dif_1d(1:nidx), hfx_err_dif ) 552 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_err_rem_1d(1:nidx), hfx_err_rem ) 553 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_out_1d (1:nidx), hfx_out ) 554 555 CALL tab_1d_2d( nidx, idxice(1:nidx), qns_ice_1d (1:nidx), qns_ice(:,:,jl) ) 556 CALL tab_1d_2d( nidx, idxice(1:nidx), ftr_ice_1d (1:nidx), ftr_ice(:,:,jl) ) 557 ! 564 558 ! 565 559 ! SIMIP diagnostics 566 CALL tab_1d_2d( nidx, t_si(:,:,jl) , idxice, t_si_1d (1:nidx) , jpi, jpj)567 CALL tab_1d_2d( nidx, diag_fc_bo , idxice, diag_fc_bo_1d(1:nidx) , jpi, jpj)568 CALL tab_1d_2d( nidx, diag_fc_su , idxice, diag_fc_su_1d(1:nidx) , jpi, jpj)560 CALL tab_1d_2d( nidx, idxice(1:nidx), t_si_1d (1:nidx), t_si(:,:,jl) ) 561 CALL tab_1d_2d( nidx, idxice(1:nidx), diag_fc_bo_1d(1:nidx), diag_fc_bo ) 562 CALL tab_1d_2d( nidx, idxice(1:nidx), diag_fc_su_1d(1:nidx), diag_fc_su ) 569 563 END SELECT 570 564 ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_da.F90
r8341 r8342 101 101 !!--------------------------------------------------------------------- 102 102 INTEGER :: ji, jj, jk, jl ! dummy loop indices 103 INTEGER :: nidx104 103 REAL(wp) :: ztmelts ! local scalar 105 104 REAL(wp) :: zEi ! specific enthalpy of sea ice (J/kg) … … 131 130 zastar = 1._wp / ( 1._wp - (rn_dmin / zdmax)**(1._wp/rn_beta) ) 132 131 133 CALL tab_2d_1d( nidx, at_i_1d(1:nidx), at_i , jpi, jpj, idxice(1:nidx))134 CALL tab_2d_1d( nidx, t_bo_1d(1:nidx), t_bo , jpi, jpj, idxice(1:nidx))135 CALL tab_2d_1d( nidx, sst_1d (1:nidx), sst_m, jpi, jpj, idxice(1:nidx))132 CALL tab_2d_1d( nidx, idxice(1:nidx), at_i_1d(1:nidx), at_i ) 133 CALL tab_2d_1d( nidx, idxice(1:nidx), t_bo_1d(1:nidx), t_bo ) 134 CALL tab_2d_1d( nidx, idxice(1:nidx), sst_1d (1:nidx), sst_m ) 136 135 137 136 DO ji = 1, nidx … … 148 147 DO jl = 1, jpl 149 148 150 CALL tab_2d_1d( nidx, a_i_1d (1:nidx), a_i(:,:,jl) , jpi, jpj, idxice(1:nidx))151 CALL tab_2d_1d( nidx, ht_i_1d (1:nidx), ht_i(:,:,jl), jpi, jpj, idxice(1:nidx) )152 CALL tab_2d_1d( nidx, ht_s_1d (1:nidx), ht_s(:,:,jl), jpi, jpj, idxice(1:nidx) )153 CALL tab_2d_1d( nidx, sm_i_1d (1:nidx), sm_i(:,:,jl), jpi, jpj, idxice(1:nidx) )154 CALL tab_2d_1d( nidx, sfx_lam_1d(1:nidx), sfx_lam , jpi, jpj, idxice(1:nidx))155 CALL tab_2d_1d( nidx, hfx_thd_1d(1:nidx), hfx_thd , jpi, jpj, idxice(1:nidx))156 CALL tab_2d_1d( nidx, wfx_lam_1d(1:nidx), wfx_lam , jpi, jpj, idxice(1:nidx))149 CALL tab_2d_1d( nidx, idxice(1:nidx), a_i_1d (1:nidx), a_i(:,:,jl) ) 150 CALL tab_2d_1d( nidx, idxice(1:nidx), ht_i_1d (1:nidx), ht_i(:,:,jl) ) 151 CALL tab_2d_1d( nidx, idxice(1:nidx), ht_s_1d (1:nidx), ht_s(:,:,jl) ) 152 CALL tab_2d_1d( nidx, idxice(1:nidx), sm_i_1d (1:nidx), sm_i(:,:,jl) ) 153 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_lam_1d(1:nidx), sfx_lam ) 154 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_thd_1d(1:nidx), hfx_thd ) 155 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_lam_1d(1:nidx), wfx_lam ) 157 156 DO jk = 1, nlay_i 158 CALL tab_2d_1d( nidx, e_i_1d(1:nidx,jk), e_i(:,:,jk,jl), jpi, jpj, idxice(1:nidx) )157 CALL tab_2d_1d( nidx, idxice(1:nidx), e_i_1d(1:nidx,jk), e_i(:,:,jk,jl) ) 159 158 END DO 160 159 DO jk = 1, nlay_s 161 CALL tab_2d_1d( nidx, e_s_1d(1:nidx,jk), e_s(:,:,jk,jl), jpi, jpj, idxice(1:nidx) )160 CALL tab_2d_1d( nidx, idxice(1:nidx), e_s_1d(1:nidx,jk), e_s(:,:,jk,jl) ) 162 161 END DO 163 162 … … 196 195 !! je pense qu'il faut ajuster e_i mais je ne sais pas comment 197 196 DO jk = 1, nlay_s 198 CALL tab_1d_2d( nidx, e_s(:,:,jk,jl), idxice, e_s_1d(1:nidx,jk), jpi, jpj)197 CALL tab_1d_2d( nidx, idxice(1:nidx), e_s_1d(1:nidx,jk), e_s(:,:,jk,jl) ) 199 198 END DO 200 199 DO jk = 1, nlay_i 201 CALL tab_1d_2d( nidx, e_i(:,:,jk,jl), idxice, e_i_1d(1:nidx,jk), jpi, jpj)200 CALL tab_1d_2d( nidx, idxice(1:nidx), e_i_1d(1:nidx,jk), e_i(:,:,jk,jl) ) 202 201 END DO 203 202 204 CALL tab_1d_2d( nidx, a_i (:,:,jl), idxice, a_i_1d (1:nidx), jpi, jpj)205 CALL tab_1d_2d( nidx, ht_i(:,:,jl), idxice, ht_i_1d (1:nidx), jpi, jpj)206 CALL tab_1d_2d( nidx, ht_s(:,:,jl), idxice, ht_s_1d (1:nidx), jpi, jpj)207 CALL tab_1d_2d( nidx, sfx_lam , idxice, sfx_lam_1d(1:nidx), jpi, jpj)208 CALL tab_1d_2d( nidx, hfx_thd , idxice, hfx_thd_1d(1:nidx), jpi, jpj)209 CALL tab_1d_2d( nidx, wfx_lam , idxice, wfx_lam_1d(1:nidx), jpi, jpj)203 CALL tab_1d_2d( nidx, idxice(1:nidx), a_i_1d (1:nidx), a_i (:,:,jl) ) 204 CALL tab_1d_2d( nidx, idxice(1:nidx), ht_i_1d (1:nidx), ht_i(:,:,jl) ) 205 CALL tab_1d_2d( nidx, idxice(1:nidx), ht_s_1d (1:nidx), ht_s(:,:,jl) ) 206 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_lam_1d(1:nidx), sfx_lam ) 207 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_thd_1d(1:nidx), hfx_thd ) 208 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_lam_1d(1:nidx), wfx_lam ) 210 209 211 210 END DO -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r8341 r8342 42 42 CONTAINS 43 43 44 SUBROUTINE lim_thd_dh ( kideb, kiut )44 SUBROUTINE lim_thd_dh 45 45 !!------------------------------------------------------------------ 46 46 !! *** ROUTINE lim_thd_dh *** … … 66 66 !! Vancoppenolle et al.,2009, Ocean Modelling 67 67 !!------------------------------------------------------------------ 68 INTEGER , INTENT(in) :: kideb, kiut ! Start/End point on which the the computation is applied69 !!70 68 INTEGER :: ji , jk ! dummy loop indices 71 69 INTEGER :: iter … … 130 128 131 129 ! Initialize enthalpy at nlay_i+1 132 DO ji = kideb, kiut130 DO ji = 1, nidx 133 131 e_i_1d(ji,nlay_i+1) = 0._wp 134 132 END DO … … 138 136 eh_i_old(:,0:nlay_i+1) = 0._wp 139 137 DO jk = 1, nlay_i 140 DO ji = kideb, kiut138 DO ji = 1, nidx 141 139 h_i_old (ji,jk) = ht_i_1d(ji) * r1_nlay_i 142 140 eh_i_old(ji,jk) = e_i_1d(ji,jk) * h_i_old(ji,jk) … … 148 146 !------------------------------------------------------------------------------! 149 147 ! 150 DO ji = kideb, kiut148 DO ji = 1, nidx 151 149 zdum = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji) 152 150 zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji) … … 161 159 ! (should not happen but sometimes it does) 162 160 !------------------------------------------------------------------------------! 163 DO ji = kideb, kiut161 DO ji = 1, nidx 164 162 IF( t_s_1d(ji,1) > rt0 ) THEN !!! Internal melting 165 163 ! Contribution to heat flux to the ocean [W.m-2], < 0 … … 179 177 ! 180 178 DO jk = 1, nlay_i 181 DO ji = kideb, kiut179 DO ji = 1, nidx 182 180 zh_i(ji,jk) = ht_i_1d(ji) * r1_nlay_i 183 181 zeh_i(ji) = zeh_i(ji) + e_i_1d(ji,jk) * zh_i(ji,jk) … … 203 201 ! Martin Vancoppenolle, December 2006 204 202 205 CALL lim_thd_snwblow( 1. - at_i_1d( kideb:kiut), zsnw(kideb:kiut) ) ! snow distribution over ice after wind blowing203 CALL lim_thd_snwblow( 1. - at_i_1d(1:nidx), zsnw(1:nidx) ) ! snow distribution over ice after wind blowing 206 204 207 205 zdeltah(:,:) = 0._wp 208 DO ji = kideb, kiut206 DO ji = 1, nidx 209 207 !----------- 210 208 ! Snow fall … … 242 240 zdeltah(:,:) = 0._wp 243 241 DO jk = 1, nlay_s 244 DO ji = kideb, kiut242 DO ji = 1, nidx 245 243 ! thickness change 246 244 rswitch = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) … … 265 263 ! clem comment: not counted in mass/heat exchange in limsbc since this is an exchange with atm. (not ocean) 266 264 zdeltah(:,:) = 0._wp 267 DO ji = kideb, kiut265 DO ji = 1, nidx 268 266 zdh_s_sub(ji) = MAX( - ht_s_1d(ji) , - evap_ice_1d(ji) * r1_rhosn * rdt_ice ) 269 267 ! remaining evap in kg.m-2 (used for ice melting later on) … … 284 282 285 283 ! --- Update snow diags --- ! 286 DO ji = kideb, kiut284 DO ji = 1, nidx 287 285 dh_s_tot(ji) = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 288 286 END DO … … 293 291 ! new temp and enthalpy of the snow (remaining snow precip + remaining pre-existing snow) 294 292 DO jk = 1, nlay_s 295 DO ji = kideb,kiut293 DO ji = 1,nidx 296 294 rswitch = MAX( 0._wp , SIGN( 1._wp, ht_s_1d(ji) - epsi20 ) ) 297 295 e_s_1d(ji,jk) = rswitch / MAX( ht_s_1d(ji), epsi20 ) * & … … 306 304 zdeltah(:,:) = 0._wp ! important 307 305 DO jk = 1, nlay_i 308 DO ji = kideb, kiut306 DO ji = 1, nidx 309 307 ztmelts = - tmut * s_i_1d(ji,jk) + rt0 ! Melting point of layer k [K] 310 308 … … 394 392 END DO 395 393 ! update ice thickness 396 DO ji = kideb, kiut394 DO ji = 1, nidx 397 395 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_surf(ji) + dh_i_sub(ji) ) 398 396 END DO 399 397 400 398 ! remaining "potential" evap is sent to ocean 401 DO ji = kideb, kiut399 DO ji = 1, nidx 402 400 wfx_err_sub_1d(ji) = wfx_err_sub_1d(ji) - zevap_rema(ji) * a_i_1d(ji) * r1_rdtice ! <=0 (net evap for the ocean in kg.m-2.s-1) 403 401 END DO … … 426 424 427 425 ! Iterative procedure 428 DO ji = kideb, kiut426 DO ji = 1, nidx 429 427 IF( zf_tt(ji) < 0._wp ) THEN 430 428 DO iter = 1, num_iter_max … … 501 499 zdeltah(:,:) = 0._wp ! important 502 500 DO jk = nlay_i, 1, -1 503 DO ji = kideb, kiut501 DO ji = 1, nidx 504 502 IF( zf_tt(ji) > 0._wp .AND. jk > icount(ji,jk) ) THEN ! do not calculate where layer has already disappeared by surface melting 505 503 … … 575 573 ! Update temperature, energy 576 574 !------------------------------------------- 577 DO ji = kideb, kiut575 DO ji = 1, nidx 578 576 ht_i_1d(ji) = MAX( 0._wp , ht_i_1d(ji) + dh_i_bott(ji) ) 579 577 END DO … … 585 583 !------------------------------------------- 586 584 zdeltah(:,:) = 0._wp ! important 587 DO ji = kideb, kiut585 DO ji = 1, nidx 588 586 zq_rema(ji) = zq_su(ji) + zq_bo(ji) 589 587 rswitch = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) ) ! =1 if snow … … 612 610 ! When snow load excesses Archimede's limit, snow-ice interface goes down under sea-level, 613 611 ! flooding of seawater transforms snow into ice dh_snowice is positive for the ice 614 DO ji = kideb, kiut612 DO ji = 1, nidx 615 613 ! 616 614 dh_snowice(ji) = MAX( 0._wp , ( rhosn * ht_s_1d(ji) + (rhoic-rau0) * ht_i_1d(ji) ) / ( rhosn+rau0-rhoic ) ) … … 651 649 ! Update temperature, energy 652 650 !------------------------------------------- 653 DO ji = kideb, kiut651 DO ji = 1, nidx 654 652 rswitch = 1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) ) 655 653 t_su_1d(ji) = rswitch * t_su_1d(ji) + ( 1.0 - rswitch ) * rt0 … … 657 655 658 656 DO jk = 1, nlay_s 659 DO ji = kideb,kiut657 DO ji = 1,nidx 660 658 ! mask enthalpy 661 659 rswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp, - ht_s_1d(ji) ) ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r8325 r8342 37 37 CONTAINS 38 38 39 SUBROUTINE lim_thd_dif ( kideb , kiut )39 SUBROUTINE lim_thd_dif 40 40 !!------------------------------------------------------------------ 41 41 !! *** ROUTINE lim_thd_dif *** … … 67 67 !! of temperature 68 68 !! 69 !! ** Arguments :70 !! kideb , kiut : Starting and ending points on which the71 !! the computation is applied72 69 !! 73 70 !! ** Inputs / Ouputs : (global commons) … … 89 86 !! (04-2007) Energy conservation tested by M. Vancoppenolle 90 87 !!------------------------------------------------------------------ 91 INTEGER , INTENT(in) :: kideb, kiut ! Start/End point on which the the computation is applied92 93 88 !! * Local variables 94 89 INTEGER :: ji ! spatial loop index … … 180 175 ! --- diag error on heat diffusion - PART 1 --- ! 181 176 zdq(:) = 0._wp ; zq_ini(:) = 0._wp 182 DO ji = kideb, kiut177 DO ji = 1, nidx 183 178 zq_ini(ji) = ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i + & 184 179 & SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s ) … … 188 183 ! 1) Initialization ! 189 184 !------------------------------------------------------------------------------! 190 DO ji = kideb , kiut185 DO ji = 1 , nidx 191 186 isnow(ji)= 1._wp - MAX( 0._wp , SIGN(1._wp, - ht_s_1d(ji) ) ) ! is there snow or not 192 187 ! layer thickness … … 203 198 204 199 DO jk = 1, nlay_s ! vert. coord of the up. lim. of the layer-th snow layer 205 DO ji = kideb , kiut200 DO ji = 1 , nidx 206 201 z_s(ji,jk) = z_s(ji,jk-1) + ht_s_1d(ji) * r1_nlay_s 207 202 END DO … … 209 204 210 205 DO jk = 1, nlay_i ! vert. coord of the up. lim. of the layer-th ice layer 211 DO ji = kideb , kiut206 DO ji = 1 , nidx 212 207 z_i(ji,jk) = z_i(ji,jk-1) + ht_i_1d(ji) * r1_nlay_i 213 208 END DO … … 230 225 ! fr1_i0_1d = i0 for a thin ice cover, fr1_i0_2d = i0 for a thick ice cover 231 226 zhsu = 0.1_wp ! threshold for the computation of i0 232 DO ji = kideb , kiut227 DO ji = 1 , nidx 233 228 ! switches 234 229 isnow(ji) = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) … … 243 238 ! Derivative of the non solar flux 244 239 !------------------------------------------------------- 245 DO ji = kideb , kiut240 DO ji = 1 , nidx 246 241 zfsw (ji) = qsr_ice_1d(ji) * ( 1 - i0(ji) ) ! Shortwave radiation absorbed at surface 247 242 zftrice(ji) = qsr_ice_1d(ji) * i0(ji) ! Solar radiation transmitted below the surface layer … … 254 249 !--------------------------------------------------------- 255 250 256 DO ji = kideb, kiut! snow initialization251 DO ji = 1, nidx ! snow initialization 257 252 zradtr_s(ji,0) = zftrice(ji) ! radiation penetrating through snow 258 253 END DO 259 254 260 255 DO jk = 1, nlay_s ! Radiation through snow 261 DO ji = kideb, kiut256 DO ji = 1, nidx 262 257 ! ! radiation transmitted below the layer-th snow layer 263 258 zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * ( MAX ( 0._wp , z_s(ji,jk) ) ) ) … … 267 262 END DO 268 263 269 DO ji = kideb, kiut! ice initialization264 DO ji = 1, nidx ! ice initialization 270 265 zradtr_i(ji,0) = zradtr_s(ji,nlay_s) * isnow(ji) + zftrice(ji) * ( 1._wp - isnow(ji) ) 271 266 END DO 272 267 273 268 DO jk = 1, nlay_i ! Radiation through ice 274 DO ji = kideb, kiut269 DO ji = 1, nidx 275 270 ! ! radiation transmitted below the layer-th ice layer 276 271 zradtr_i(ji,jk) = zradtr_i(ji,0) * EXP( - rn_kappa_i * ( MAX ( 0._wp , z_i(ji,jk) ) ) ) … … 280 275 END DO 281 276 282 DO ji = kideb, kiut! Radiation transmitted below the ice277 DO ji = 1, nidx ! Radiation transmitted below the ice 283 278 ftr_ice_1d(ji) = zradtr_i(ji,nlay_i) 284 279 END DO … … 288 283 !------------------------------------------------------------------------------| 289 284 ! 290 DO ji = kideb, kiut! Old surface temperature285 DO ji = 1, nidx ! Old surface temperature 291 286 ztsub (ji) = t_su_1d(ji) ! temperature at the beg of iter pr. 292 287 ztsubit(ji) = t_su_1d(ji) ! temperature at the previous iter … … 296 291 297 292 DO jk = 1, nlay_s ! Old snow temperature 298 DO ji = kideb , kiut293 DO ji = 1 , nidx 299 294 ztsb(ji,jk) = t_s_1d(ji,jk) 300 295 END DO … … 302 297 303 298 DO jk = 1, nlay_i ! Old ice temperature 304 DO ji = kideb , kiut299 DO ji = 1 , nidx 305 300 ztib(ji,jk) = t_i_1d(ji,jk) 306 301 END DO … … 319 314 ! 320 315 IF( nn_ice_thcon == 0 ) THEN ! Untersteiner (1964) formula 321 DO ji = kideb , kiut316 DO ji = 1 , nidx 322 317 ztcond_i(ji,0) = rcdic + zbeta * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1) - rt0 ) 323 318 ztcond_i(ji,0) = MAX( ztcond_i(ji,0), zkimin ) 324 319 END DO 325 320 DO jk = 1, nlay_i-1 326 DO ji = kideb , kiut321 DO ji = 1 , nidx 327 322 ztcond_i(ji,jk) = rcdic + zbeta * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) / & 328 323 MIN(-2.0_wp * epsi10, t_i_1d(ji,jk) + t_i_1d(ji,jk+1) - 2.0_wp * rt0) … … 333 328 334 329 IF( nn_ice_thcon == 1 ) THEN ! Pringle et al formula included: 2.11 + 0.09 S/T - 0.011.T 335 DO ji = kideb , kiut330 DO ji = 1 , nidx 336 331 ztcond_i(ji,0) = rcdic + 0.090_wp * s_i_1d(ji,1) / MIN( -epsi10, t_i_1d(ji,1) - rt0 ) & 337 332 & - 0.011_wp * ( t_i_1d(ji,1) - rt0 ) … … 339 334 END DO 340 335 DO jk = 1, nlay_i-1 341 DO ji = kideb , kiut336 DO ji = 1 , nidx 342 337 ztcond_i(ji,jk) = rcdic + & 343 338 & 0.09_wp * ( s_i_1d(ji,jk) + s_i_1d(ji,jk+1) ) & … … 347 342 END DO 348 343 END DO 349 DO ji = kideb , kiut344 DO ji = 1 , nidx 350 345 ztcond_i(ji,nlay_i) = rcdic + 0.090_wp * s_i_1d(ji,nlay_i) / MIN( -epsi10, t_bo_1d(ji) - rt0 ) & 351 346 & - 0.011_wp * ( t_bo_1d(ji) - rt0 ) … … 372 367 zh_thres = EXP( 1._wp ) * zepsilon * 0.5_wp 373 368 374 DO ji = kideb, kiut369 DO ji = 1, nidx 375 370 376 371 ! Mean sea ice thermal conductivity … … 400 395 ! 401 396 !--- Snow 402 DO ji = kideb, kiut397 DO ji = 1, nidx 403 398 zfac = 1. / MAX( epsi10 , zh_s(ji) ) 404 399 zkappa_s(ji,0) = zghe(ji) * rn_cdsn * zfac … … 407 402 408 403 DO jk = 1, nlay_s-1 409 DO ji = kideb , kiut404 DO ji = 1 , nidx 410 405 zkappa_s(ji,jk) = zghe(ji) * 2.0 * rn_cdsn / MAX( epsi10, 2.0 * zh_s(ji) ) 411 406 END DO … … 414 409 !--- Ice 415 410 DO jk = 1, nlay_i-1 416 DO ji = kideb , kiut411 DO ji = 1 , nidx 417 412 zkappa_i(ji,jk) = zghe(ji) * 2.0 * ztcond_i(ji,jk) / MAX( epsi10 , 2.0 * zh_i(ji) ) 418 413 END DO … … 420 415 421 416 !--- Snow-ice interface 422 DO ji = kideb , kiut417 DO ji = 1 , nidx 423 418 zfac = 1./ MAX( epsi10 , zh_i(ji) ) 424 419 zkappa_i(ji,0) = zghe(ji) * ztcond_i(ji,0) * zfac … … 435 430 ! 436 431 DO jk = 1, nlay_i 437 DO ji = kideb , kiut432 DO ji = 1 , nidx 438 433 ztitemp(ji,jk) = t_i_1d(ji,jk) 439 434 zspeche_i(ji,jk) = cpic + zgamma * s_i_1d(ji,jk) / MAX( ( t_i_1d(ji,jk) - rt0 ) * ( ztib(ji,jk) - rt0 ), epsi10 ) … … 443 438 444 439 DO jk = 1, nlay_s 445 DO ji = kideb , kiut440 DO ji = 1 , nidx 446 441 ztstemp(ji,jk) = t_s_1d(ji,jk) 447 442 zeta_s(ji,jk) = rdt_ice / MAX( rhosn * cpic * zh_s(ji), epsi10 ) … … 455 450 ! 456 451 IF ( ln_dqnsice ) THEN 457 DO ji = kideb , kiut452 DO ji = 1 , nidx 458 453 ! update of the non solar flux according to the update in T_su 459 454 qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsubit(ji) ) … … 462 457 463 458 ! Update incoming flux 464 DO ji = kideb , kiut459 DO ji = 1 , nidx 465 460 ! update incoming flux 466 461 zf(ji) = zfsw(ji) & ! net absorbed solar radiation … … 481 476 482 477 DO numeq=1,nlay_i+3 483 DO ji = kideb , kiut478 DO ji = 1 , nidx 484 479 ztrid(ji,numeq,1) = 0. 485 480 ztrid(ji,numeq,2) = 0. … … 492 487 493 488 DO numeq = nlay_s + 2, nlay_s + nlay_i 494 DO ji = kideb , kiut489 DO ji = 1 , nidx 495 490 jk = numeq - nlay_s - 1 496 491 ztrid(ji,numeq,1) = - zeta_i(ji,jk) * zkappa_i(ji,jk-1) … … 502 497 503 498 numeq = nlay_s + nlay_i + 1 504 DO ji = kideb , kiut499 DO ji = 1 , nidx 505 500 !!ice bottom term 506 501 ztrid(ji,numeq,1) = - zeta_i(ji,nlay_i)*zkappa_i(ji,nlay_i-1) … … 512 507 513 508 514 DO ji = kideb , kiut509 DO ji = 1 , nidx 515 510 IF ( ht_s_1d(ji) > 0.0 ) THEN 516 511 ! … … 659 654 minnumeqmin = nlay_i+5 660 655 661 DO ji = kideb , kiut656 DO ji = 1 , nidx 662 657 zindtbis(ji,numeqmin(ji)) = zindterm(ji,numeqmin(ji)) 663 658 zdiagbis(ji,numeqmin(ji)) = ztrid(ji,numeqmin(ji),2) … … 667 662 668 663 DO jk = minnumeqmin+1, maxnumeqmax 669 DO ji = kideb , kiut664 DO ji = 1 , nidx 670 665 numeq = min(max(numeqmin(ji)+1,jk),numeqmax(ji)) 671 666 zdiagbis(ji,numeq) = ztrid(ji,numeq,2) - ztrid(ji,numeq,1) * ztrid(ji,numeq-1,3) / zdiagbis(ji,numeq-1) … … 674 669 END DO 675 670 676 DO ji = kideb , kiut671 DO ji = 1 , nidx 677 672 ! ice temperatures 678 673 t_i_1d(ji,nlay_i) = zindtbis(ji,numeqmax(ji)) / zdiagbis(ji,numeqmax(ji)) … … 680 675 681 676 DO numeq = nlay_i + nlay_s, nlay_s + 2, -1 682 DO ji = kideb , kiut677 DO ji = 1 , nidx 683 678 jk = numeq - nlay_s - 1 684 679 t_i_1d(ji,jk) = ( zindtbis(ji,numeq) - ztrid(ji,numeq,3) * t_i_1d(ji,jk+1) ) / zdiagbis(ji,numeq) … … 686 681 END DO 687 682 688 DO ji = kideb , kiut683 DO ji = 1 , nidx 689 684 ! snow temperatures 690 685 IF (ht_s_1d(ji) > 0._wp) & … … 706 701 ! check that nowhere it has started to melt 707 702 ! zdti(ji) is a measure of error, it has to be under zdti_bnd 708 DO ji = kideb , kiut703 DO ji = 1 , nidx 709 704 t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , rt0 ) , 190._wp ) 710 705 zdti (ji) = ABS( t_su_1d(ji) - ztsubit(ji) ) … … 712 707 713 708 DO jk = 1, nlay_s 714 DO ji = kideb , kiut709 DO ji = 1 , nidx 715 710 t_s_1d(ji,jk) = MAX( MIN( t_s_1d(ji,jk), rt0 ), 190._wp ) 716 711 zdti (ji) = MAX( zdti(ji), ABS( t_s_1d(ji,jk) - ztstemp(ji,jk) ) ) … … 719 714 720 715 DO jk = 1, nlay_i 721 DO ji = kideb , kiut716 DO ji = 1 , nidx 722 717 ztmelt_i = -tmut * s_i_1d(ji,jk) + rt0 723 718 t_i_1d(ji,jk) = MAX( MIN( t_i_1d(ji,jk), ztmelt_i ), 190._wp ) … … 729 724 ! note that this could be optimized substantially by iterating only the non-converging points 730 725 zdti_max = 0._wp 731 DO ji = kideb, kiut726 DO ji = 1, nidx 732 727 zdti_max = MAX( zdti_max, zdti(ji) ) 733 728 END DO … … 738 733 ! MV SIMIP 2016 739 734 !--- Snow-ice interfacial temperature (diagnostic SIMIP) 740 DO ji = kideb, kiut735 DO ji = 1, nidx 741 736 zfac = 1. / MAX( epsi10 , rn_cdsn * zh_i(ji) + ztcond_i(ji,1) * zh_s(ji) ) 742 737 t_si_1d(ji) = ( rn_cdsn * zh_i(ji) * t_s_1d(ji,1) + & … … 755 750 ! 12) Fluxes at the interfaces ! 756 751 !-------------------------------------------------------------------------! 757 DO ji = kideb, kiut752 DO ji = 1, nidx 758 753 ! ! surface ice conduction flux 759 754 isnow(ji) = 1._wp - MAX( 0._wp, SIGN( 1._wp, -ht_s_1d(ji) ) ) … … 771 766 772 767 ! --- computes sea ice energy of melting compulsory for limthd_dh --- ! 773 CALL lim_thd_enmelt ( kideb, kiut )768 CALL lim_thd_enmelt 774 769 775 770 ! --- diagnose the change in non-solar flux due to surface temperature change --- ! 776 771 IF ( ln_dqnsice ) THEN 777 DO ji = kideb, kiut772 DO ji = 1, nidx 778 773 hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji) - zqns_ice_b(ji) ) * a_i_1d(ji) 779 774 END DO … … 781 776 782 777 ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 783 DO ji = kideb, kiut778 DO ji = 1, nidx 784 779 zdq(ji) = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * ht_i_1d(ji) * r1_nlay_i + & 785 780 & SUM( e_s_1d(ji,1:nlay_s) ) * ht_s_1d(ji) * r1_nlay_s ) … … 798 793 ! Heat flux used to warm/cool ice in W.m-2 799 794 !----------------------------------------- 800 DO ji = kideb, kiut795 DO ji = 1, nidx 801 796 IF( t_su_1d(ji) < rt0 ) THEN ! case T_su < 0degC 802 797 hfx_dif_1d(ji) = hfx_dif_1d(ji) + & … … 821 816 END SUBROUTINE lim_thd_dif 822 817 823 SUBROUTINE lim_thd_enmelt ( kideb, kiut )818 SUBROUTINE lim_thd_enmelt 824 819 !!----------------------------------------------------------------------- 825 820 !! *** ROUTINE lim_thd_enmelt *** … … 829 824 !! ** Method : Formula (Bitz and Lipscomb, 1999) 830 825 !!------------------------------------------------------------------- 831 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop832 !833 826 INTEGER :: ji, jk ! dummy loop indices 834 827 REAL(wp) :: ztmelts ! local scalar … … 836 829 ! 837 830 DO jk = 1, nlay_i ! Sea ice energy of melting 838 DO ji = kideb, kiut831 DO ji = 1, nidx 839 832 ztmelts = - tmut * s_i_1d(ji,jk) + rt0 840 833 t_i_1d(ji,jk) = MIN( t_i_1d(ji,jk), ztmelts ) ! Force t_i_1d to be lower than melting point … … 846 839 END DO 847 840 DO jk = 1, nlay_s ! Snow energy of melting 848 DO ji = kideb, kiut841 DO ji = 1, nidx 849 842 e_s_1d(ji,jk) = rhosn * ( cpic * ( rt0 - t_s_1d(ji,jk) ) + lfus ) 850 843 END DO -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90
r8325 r8342 43 43 CONTAINS 44 44 45 SUBROUTINE lim_thd_ent( kideb, kiut,qnew )45 SUBROUTINE lim_thd_ent( qnew ) 46 46 !!------------------------------------------------------------------- 47 47 !! *** ROUTINE lim_thd_ent *** … … 68 68 !! References : Bitz & Lipscomb, JGR 99; Vancoppenolle et al., GRL, 2005 69 69 !!------------------------------------------------------------------- 70 INTEGER , INTENT(in) :: kideb, kiut ! Start/End point on which the the computation is applied71 72 70 REAL(wp), INTENT(inout), DIMENSION(:,:) :: qnew ! new enthlapies (J.m-3, remapped) 73 71 … … 90 88 zh_cum0 (:,0:nlay_i+2) = 0._wp 91 89 DO jk0 = 1, nlay_i+2 92 DO ji = kideb, kiut90 DO ji = 1, nidx 93 91 zeh_cum0(ji,jk0) = zeh_cum0(ji,jk0-1) + eh_i_old(ji,jk0-1) 94 92 zh_cum0 (ji,jk0) = zh_cum0 (ji,jk0-1) + h_i_old (ji,jk0-1) … … 100 98 !------------------------------------ 101 99 ! new layer thickesses 102 DO ji = kideb, kiut100 DO ji = 1, nidx 103 101 zhnew(ji) = SUM( h_i_old(ji,0:nlay_i+1) ) * r1_nlay_i 104 102 ENDDO … … 107 105 zh_cum1(:,0:nlay_i) = 0._wp 108 106 DO jk1 = 1, nlay_i 109 DO ji = kideb, kiut107 DO ji = 1, nidx 110 108 zh_cum1(ji,jk1) = zh_cum1(ji,jk1-1) + zhnew(ji) 111 109 ENDDO … … 116 114 DO jk0 = 1, nlay_i+1 117 115 DO jk1 = 1, nlay_i-1 118 DO ji = kideb, kiut116 DO ji = 1, nidx 119 117 IF( zh_cum1(ji,jk1) <= zh_cum0(ji,jk0) .AND. zh_cum1(ji,jk1) > zh_cum0(ji,jk0-1) ) THEN 120 118 zeh_cum1(ji,jk1) = ( zeh_cum0(ji,jk0-1) * ( zh_cum0(ji,jk0) - zh_cum1(ji,jk1 ) ) + & … … 130 128 ! new enthalpies 131 129 DO jk1 = 1, nlay_i 132 DO ji = kideb, kiut130 DO ji = 1, nidx 133 131 rswitch = MAX( 0._wp , SIGN( 1._wp , zhnew(ji) - epsi20 ) ) 134 132 qnew(ji,jk1) = rswitch * ( zeh_cum1(ji,jk1) - zeh_cum1(ji,jk1-1) ) / MAX( zhnew(ji), epsi20 ) … … 139 137 ! comment: if input h_i_old and eh_i_old are already multiplied by a_i (as in limthd_lac), 140 138 ! then we should not (* a_i) again but not important since this is just to check that remap error is ~0 141 DO ji = kideb, kiut139 DO ji = 1, nidx 142 140 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_rdtice * & 143 141 & ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( eh_i_old(ji,0:nlay_i+1) ) ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r8332 r8342 71 71 !!------------------------------------------------------------------------ 72 72 INTEGER :: ji,jj,jk,jl ! dummy loop indices 73 INTEGER :: nidx ! local integers74 73 INTEGER :: iter ! - - 75 74 REAL(wp) :: ztmelts, zdv, zfrazb, zweight, zde ! local scalars … … 256 255 IF ( nidx > 0 ) THEN 257 256 258 CALL tab_2d_1d( nidx, zat_i_1d (1:nidx) , at_i , jpi, jpj, idxice(1:nidx))259 DO jl = 1, jpl 260 CALL tab_2d_1d( nidx, za_i_1d (1:nidx,jl), a_i (:,:,jl), jpi, jpj, idxice(1:nidx))261 CALL tab_2d_1d( nidx, zv_i_1d (1:nidx,jl), v_i (:,:,jl), jpi, jpj, idxice(1:nidx))262 CALL tab_2d_1d( nidx, zsmv_i_1d(1:nidx,jl), smv_i(:,:,jl), jpi, jpj, idxice(1:nidx))257 CALL tab_2d_1d( nidx, idxice(1:nidx), zat_i_1d (1:nidx) , at_i ) 258 DO jl = 1, jpl 259 CALL tab_2d_1d( nidx, idxice(1:nidx), za_i_1d (1:nidx,jl), a_i (:,:,jl) ) 260 CALL tab_2d_1d( nidx, idxice(1:nidx), zv_i_1d (1:nidx,jl), v_i (:,:,jl) ) 261 CALL tab_2d_1d( nidx, idxice(1:nidx), zsmv_i_1d(1:nidx,jl), smv_i(:,:,jl) ) 263 262 DO jk = 1, nlay_i 264 CALL tab_2d_1d( nidx, ze_i_1d(1:nidx,jk,jl), e_i(:,:,jk,jl) , jpi, jpj, idxice(1:nidx))265 END DO 266 END DO 267 268 CALL tab_2d_1d( nidx, qlead_1d (1:nidx) , qlead , jpi, jpj, idxice(1:nidx))269 CALL tab_2d_1d( nidx, t_bo_1d (1:nidx) , t_bo , jpi, jpj, idxice(1:nidx))270 CALL tab_2d_1d( nidx, sfx_opw_1d(1:nidx) , sfx_opw , jpi, jpj, idxice(1:nidx))271 CALL tab_2d_1d( nidx, wfx_opw_1d(1:nidx) , wfx_opw , jpi, jpj, idxice(1:nidx))272 CALL tab_2d_1d( nidx, hicol_1d (1:nidx) , hicol , jpi, jpj, idxice(1:nidx))273 CALL tab_2d_1d( nidx, zvrel_1d (1:nidx) , zvrel , jpi, jpj, idxice(1:nidx))274 275 CALL tab_2d_1d( nidx, hfx_thd_1d(1:nidx) , hfx_thd , jpi, jpj, idxice(1:nidx))276 CALL tab_2d_1d( nidx, hfx_opw_1d(1:nidx) , hfx_opw , jpi, jpj, idxice(1:nidx))277 CALL tab_2d_1d( nidx, rn_amax_1d(1:nidx) , rn_amax_2d, jpi, jpj, idxice(1:nidx))278 CALL tab_2d_1d( nidx, sss_1d (1:nidx) , sss_m , jpi, jpj, idxice(1:nidx))263 CALL tab_2d_1d( nidx, idxice(1:nidx), ze_i_1d(1:nidx,jk,jl), e_i(:,:,jk,jl) ) 264 END DO 265 END DO 266 267 CALL tab_2d_1d( nidx, idxice(1:nidx), qlead_1d (1:nidx) , qlead ) 268 CALL tab_2d_1d( nidx, idxice(1:nidx), t_bo_1d (1:nidx) , t_bo ) 269 CALL tab_2d_1d( nidx, idxice(1:nidx), sfx_opw_1d(1:nidx) , sfx_opw ) 270 CALL tab_2d_1d( nidx, idxice(1:nidx), wfx_opw_1d(1:nidx) , wfx_opw ) 271 CALL tab_2d_1d( nidx, idxice(1:nidx), hicol_1d (1:nidx) , hicol ) 272 CALL tab_2d_1d( nidx, idxice(1:nidx), zvrel_1d (1:nidx) , zvrel ) 273 274 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_thd_1d(1:nidx) , hfx_thd ) 275 CALL tab_2d_1d( nidx, idxice(1:nidx), hfx_opw_1d(1:nidx) , hfx_opw ) 276 CALL tab_2d_1d( nidx, idxice(1:nidx), rn_amax_1d(1:nidx) , rn_amax_2d ) 277 CALL tab_2d_1d( nidx, idxice(1:nidx), sss_1d (1:nidx) , sss_m ) 279 278 280 279 !------------------------------------------------------------------------------| … … 457 456 ENDDO 458 457 ! --- Ice enthalpy remapping --- ! 459 CALL lim_thd_ent( 1, nidx,ze_i_1d(1:nidx,:,jl) )458 CALL lim_thd_ent( ze_i_1d(1:nidx,:,jl) ) 460 459 ENDDO 461 460 … … 484 483 !------------------------------------------------------------------------------! 485 484 DO jl = 1, jpl 486 CALL tab_1d_2d( nidx, a_i (:,:,jl), idxice(1:nidx), za_i_1d (1:nidx,jl), jpi, jpj)487 CALL tab_1d_2d( nidx, v_i (:,:,jl), idxice(1:nidx), zv_i_1d (1:nidx,jl), jpi, jpj)488 CALL tab_1d_2d( nidx, smv_i (:,:,jl), idxice(1:nidx), zsmv_i_1d(1:nidx,jl) , jpi, jpj)485 CALL tab_1d_2d( nidx, idxice(1:nidx), za_i_1d (1:nidx,jl), a_i (:,:,jl) ) 486 CALL tab_1d_2d( nidx, idxice(1:nidx), zv_i_1d (1:nidx,jl), v_i (:,:,jl) ) 487 CALL tab_1d_2d( nidx, idxice(1:nidx), zsmv_i_1d(1:nidx,jl), smv_i (:,:,jl) ) 489 488 DO jk = 1, nlay_i 490 CALL tab_1d_2d( nidx, e_i(:,:,jk,jl), idxice(1:nidx), ze_i_1d(1:nidx,jk,jl), jpi, jpj)491 END DO 492 END DO 493 CALL tab_1d_2d( nidx, sfx_opw, idxice(1:nidx), sfx_opw_1d(1:nidx), jpi, jpj)494 CALL tab_1d_2d( nidx, wfx_opw, idxice(1:nidx), wfx_opw_1d(1:nidx), jpi, jpj)495 CALL tab_1d_2d( nidx, hfx_thd, idxice(1:nidx), hfx_thd_1d(1:nidx), jpi, jpj)496 CALL tab_1d_2d( nidx, hfx_opw, idxice(1:nidx), hfx_opw_1d(1:nidx), jpi, jpj)489 CALL tab_1d_2d( nidx, idxice(1:nidx), ze_i_1d(1:nidx,jk,jl), e_i(:,:,jk,jl) ) 490 END DO 491 END DO 492 CALL tab_1d_2d( nidx, idxice(1:nidx), sfx_opw_1d(1:nidx), sfx_opw ) 493 CALL tab_1d_2d( nidx, idxice(1:nidx), wfx_opw_1d(1:nidx), wfx_opw ) 494 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_thd_1d(1:nidx), hfx_thd ) 495 CALL tab_1d_2d( nidx, idxice(1:nidx), hfx_opw_1d(1:nidx), hfx_opw ) 497 496 ! 498 497 ENDIF ! nidx > 0 -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r8326 r8342 37 37 CONTAINS 38 38 39 SUBROUTINE lim_thd_sal ( kideb, kiut )39 SUBROUTINE lim_thd_sal 40 40 !!------------------------------------------------------------------- 41 41 !! *** ROUTINE lim_thd_sal *** … … 48 48 !! -> nn_icesal = 3 -> Sice = S(z) [multiyear ice] 49 49 !!--------------------------------------------------------------------- 50 INTEGER, INTENT(in) :: kideb, kiut ! thickness category index51 !52 50 INTEGER :: ji, jk ! dummy loop indices 53 51 REAL(wp) :: iflush, igravdr ! local scalars … … 65 63 IF( nn_icesal == 2 ) THEN 66 64 67 DO ji = kideb, kiut65 DO ji = 1, nidx 68 66 69 67 !--------------------------------------------------------- … … 96 94 97 95 ! Salinity profile 98 CALL lim_var_salprof1d ( kideb, kiut )96 CALL lim_var_salprof1d 99 97 ! 100 98 ENDIF … … 103 101 ! 3) vertical profile of salinity, constant in time | 104 102 !------------------------------------------------------------------------------| 105 IF( nn_icesal == 3 ) CALL lim_var_salprof1d ( kideb, kiut )103 IF( nn_icesal == 3 ) CALL lim_var_salprof1d 106 104 107 105 ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r8341 r8342 433 433 434 434 435 SUBROUTINE lim_var_salprof1d ( kideb, kiut )435 SUBROUTINE lim_var_salprof1d 436 436 !!------------------------------------------------------------------- 437 437 !! *** ROUTINE lim_thd_salprof1d *** … … 440 440 !! Works with 1d vectors and is used by thermodynamic modules 441 441 !!------------------------------------------------------------------- 442 INTEGER, INTENT(in) :: kideb, kiut ! thickness category index443 !444 442 INTEGER :: ji, jk ! dummy loop indices 445 443 INTEGER :: ii, ij ! local integers … … 465 463 IF( nn_icesal == 2 ) THEN 466 464 ! 467 DO ji = kideb, kiut! Slope of the linear profile zs_zero465 DO ji = 1, nidx ! Slope of the linear profile zs_zero 468 466 rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi20 ) ) 469 467 z_slope_s(ji) = rswitch * 2._wp * sm_i_1d(ji) / MAX( epsi20 , ht_i_1d(ji) ) … … 475 473 zfac1 = zsi1 / ( zsi1 - zsi0 ) 476 474 DO jk = 1, nlay_i 477 DO ji = kideb, kiut475 DO ji = 1, nidx 478 476 ii = MOD( idxice(ji) - 1 , jpi ) + 1 479 477 ij = ( idxice(ji) - 1 ) / jpi + 1 … … 509 507 zargtemp = ( REAL(jk,wp) - 0.5_wp ) * r1_nlay_i 510 508 zsal = 1.6_wp * ( 1._wp - COS( rpi * zargtemp**( 0.407_wp / ( 0.573_wp + zargtemp ) ) ) ) 511 DO ji = kideb, kiut509 DO ji = 1, nidx 512 510 s_i_1d(ji,jk) = zsal 513 511 END DO -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r8341 r8342 27 27 28 28 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: idxice !: selected points for ice thermo 29 INTEGER , PUBLIC :: nidx ! number of selected points 29 30 30 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: qlead_1d
Note: See TracChangeset
for help on using the changeset viewer.