- Timestamp:
- 2015-02-02T18:31:34+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r5049 r5051 49 49 50 50 PUBLIC lim_thd ! called by limstp module 51 PUBLIC lim_thd_init ! called by iceini module51 PUBLIC lim_thd_init ! called by sbc_lim_init 52 52 53 53 !! * Substitutions … … 92 92 ! 93 93 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b 94 REAL(wp) :: zda95 94 ! 96 95 REAL(wp), POINTER, DIMENSION(:,:) :: zqsr, zqns … … 363 362 !-------------------------------- 364 363 364 !--------------------------------------! 365 ! --- Ice/Snow Temperature profile --- ! 366 !--------------------------------------! 367 CALL lim_thd_dif( 1, nbpb ) 368 365 369 !---------------------------------! 366 ! Ice/Snow Temperature profile ! 367 !---------------------------------! 368 CALL lim_thd_dif( 1, nbpb ) 369 370 !---------------------------------! 371 ! Ice/Snow thicnkess ! 370 ! --- Ice/Snow thickness --- ! 372 371 !---------------------------------! 373 372 CALL lim_thd_dh( 1, nbpb ) … … 377 376 378 377 !---------------------------------! 379 ! --- Ice salinity --- !378 ! --- Ice salinity --- ! 380 379 !---------------------------------! 381 380 CALL lim_thd_sal( 1, nbpb ) 382 381 383 382 !---------------------------------! 384 ! --- temperature update --- !383 ! --- temperature update --- ! 385 384 !---------------------------------! 386 385 CALL lim_thd_temp( 1, nbpb ) 386 387 !------------------------------------! 388 ! --- lateral melting if monocat --- ! 389 !------------------------------------! 390 IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN 391 CALL lim_thd_lam( 1, nbpb ) 392 END IF 387 393 388 394 !-------------------------------- … … 435 441 CALL tab_1d_2d( nbpb, hfx_err , npb, hfx_err_1d(1:nbpb) , jpi, jpj ) 436 442 CALL tab_1d_2d( nbpb, hfx_res , npb, hfx_res_1d(1:nbpb) , jpi, jpj ) 437 CALL tab_1d_2d( nbpb, hfx_err_rem , npb, hfx_err_rem_1d(1:nbpb) 438 439 IF ( ( ( nn_monocat .EQ. 1 ) .OR. ( nn_monocat .EQ.4 ) ) .AND. ( jpl == 1 ) ) THEN440 CALL tab_1d_2d( nbpb, dh_i_melt(:,:,jl) , npb, dh_i_melt_1d(1:nbpb) , jpi, jpj )441 ENDIF443 CALL tab_1d_2d( nbpb, hfx_err_rem , npb, hfx_err_rem_1d(1:nbpb), jpi, jpj ) 444 445 !clem IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN 446 !clem CALL tab_1d_2d( nbpb, dh_i_melt(:,:,jl) , npb, dh_i_melt_1d(1:nbpb) , jpi, jpj ) 447 !clem ENDIF 442 448 ! 443 449 CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) … … 477 483 !---------------------------------- 478 484 CALL lim_var_eqv2glo 479 480 !----------------------------------481 ! 5.X) Lateral melting482 !----------------------------------483 IF ( ( ( nn_monocat .EQ. 1 ) .OR. ( nn_monocat .EQ. 4 ) ) .AND. ( jpl == 1 ) ) THEN484 485 WRITE(numout,*) ' Lateral melting ON '486 487 ! select points where lateral melting occurs488 jl = 1489 490 nbplm = 0491 DO jj = 1, jpj492 DO ji = 1, jpi493 IF ( ( dh_i_melt(ji,jj,jl) .LT.-epsi10 ) .AND. &494 & ( ht_i(ji,jj,jl) - dh_i_melt(ji,jj,jl) .GT. epsi10 ) .AND. &495 & ( ht_i(ji,jj,jl) .GT. epsi10 ) ) THEN496 nbplm = nbplm + 1497 nplm(nbplm) = (jj - 1) * jpi + ji498 ENDIF499 END DO500 END DO501 502 IF( nbplm > 0 ) THEN ! If there is no net melting, do nothing503 504 ! Move to 1D arrays505 !-------------------------506 507 CALL tab_2d_1d( nbplm, a_i_1d (1:nbplm), a_i(:,:,jl) , jpi, jpj, nplm(1:nbplm) )508 CALL tab_2d_1d( nbplm, ht_i_1d (1:nbplm), ht_i(:,:,jl) , jpi, jpj, nplm(1:nbplm) )509 CALL tab_2d_1d( nbplm, dh_i_melt_1d(1:nbplm), dh_i_melt(:,:,jl) , jpi, jpj, nplm(1:nbplm) )510 511 ! Compute lateral melting (dA = A/2h dh )512 DO ji = 1, nbplm513 zda = a_i_1d(ji) * dh_i_melt_1d(ji) / ( 2._wp * ht_i_1d(ji) )514 a_i_1d(ji) = a_i_1d(ji) + zda515 END DO516 517 ! Move back to 2D arrays518 !-------------------------519 CALL tab_1d_2d( nbplm, a_i (:,:,jl) , nplm, a_i_1d (1:nbplm) , jpi, jpj )520 at_i(:,:) = a_i(:,:,jl)521 522 ENDIF523 524 ENDIF525 485 526 486 !-------------------------------------------- … … 602 562 END SUBROUTINE lim_thd_temp 603 563 564 SUBROUTINE lim_thd_lam( kideb, kiut ) 565 !!----------------------------------------------------------------------- 566 !! *** ROUTINE lim_thd_lam *** 567 !! 568 !! ** Purpose : Lateral melting in case monocategory 569 !! ( dA = A/2h dh ) 570 !!----------------------------------------------------------------------- 571 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop 572 INTEGER :: ji ! dummy loop indices 573 574 WRITE(numout,*) ' Lateral melting ON ' 575 DO ji = kideb, kiut 576 IF( ht_i_1d(ji) > epsi10 .AND. dh_i_melt_1d(ji) < 0._wp ) THEN 577 a_i_1d(ji) = MAX( 0._wp, a_i_1d(ji) + a_i_1d(ji) * dh_i_melt_1d(ji) / ( 2._wp * ht_i_1d(ji) ) ) 578 END IF 579 END DO 580 at_i_1d(:) = a_i_1d(:) 581 582 END SUBROUTINE lim_thd_lam 583 604 584 SUBROUTINE lim_thd_init 605 585 !!-----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.