Changeset 2528 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
- Timestamp:
- 2010-12-27T18:33:53+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r1471 r2528 4 4 !! Initialisation of diagnostics ice variables 5 5 !!====================================================================== 6 !! History : 2.0 ! 2004-01 (C. Ethe, G. Madec) Original code 7 !!---------------------------------------------------------------------- 6 8 #if defined key_lim3 7 9 !!---------------------------------------------------------------------- … … 11 13 !! lim_istate_init : initialization of ice state and namelist read 12 14 !!---------------------------------------------------------------------- 13 !! * Modules used 14 USE phycst 15 USE oce ! dynamics and tracers variables 16 USE dom_oce 17 USE sbc_oce ! Surface boundary condition: ocean fields 18 USE par_ice ! ice parameters 19 USE eosbn2 ! equation of state 20 USE in_out_manager 21 USE dom_ice 22 USE ice 23 USE lbclnk 15 USE phycst ! physical constant 16 USE oce ! dynamics and tracers variables 17 USE dom_oce ! ocean domain 18 USE sbc_oce ! Surface boundary condition: ocean fields 19 USE eosbn2 ! equation of state 20 USE ice ! sea-ice variables 21 USE par_ice ! ice parameters 22 USE dom_ice ! sea-ice domain 23 USE in_out_manager ! I/O manager 24 USE lbclnk ! lateral boundary condition - MPP exchanges 24 25 25 26 IMPLICIT NONE 26 27 PRIVATE 27 28 28 !! * Accessibility 29 PUBLIC lim_istate ! routine called by lim_init.F90 30 31 !! * Module variables 32 REAL(wp) :: & !!! ** init namelist (namiceini) ** 33 ttest = 2.0 , & ! threshold water temperature for initial sea ice 34 hninn = 0.5 , & ! initial snow thickness in the north 35 hginn_u = 2.5 , & ! initial ice thickness in the north 36 aginn_u = 0.7 , & ! initial leads area in the north 37 hginn_d = 5.0 , & ! initial ice thickness in the north 38 aginn_d = 0.25 , & ! initial leads area in the north 39 hnins = 0.1 , & ! initial snow thickness in the south 40 hgins_u = 1.0 , & ! initial ice thickness in the south 41 agins_u = 0.7 , & ! initial leads area in the south 42 hgins_d = 2.0 , & ! initial ice thickness in the south 43 agins_d = 0.2 , & ! initial leads area in the south 44 sinn = 6.301 , & ! initial salinity 45 sins = 6.301 46 47 REAL(wp) :: & ! constant values 48 zzero = 0.0 , & 49 zone = 1.0 50 51 !!---------------------------------------------------------------------- 52 !! LIM 3.0, UCL-LOCEAN-IPSL (2008) 29 PUBLIC lim_istate ! routine called by lim_init.F90 30 31 ! !!** init namelist (namiceini) ** 32 REAL(wp) :: ttest = 2.0_wp ! threshold water temperature for initial sea ice 33 REAL(wp) :: hninn = 0.5_wp ! initial snow thickness in the north 34 REAL(wp) :: hginn_u = 2.5_wp ! initial ice thickness in the north 35 REAL(wp) :: aginn_u = 0.7_wp ! initial leads area in the north 36 REAL(wp) :: hginn_d = 5.0_wp ! initial ice thickness in the north 37 REAL(wp) :: aginn_d = 0.25_wp ! initial leads area in the north 38 REAL(wp) :: hnins = 0.1_wp ! initial snow thickness in the south 39 REAL(wp) :: hgins_u = 1.0_wp ! initial ice thickness in the south 40 REAL(wp) :: agins_u = 0.7_wp ! initial leads area in the south 41 REAL(wp) :: hgins_d = 2.0_wp ! initial ice thickness in the south 42 REAL(wp) :: agins_d = 0.2_wp ! initial leads area in the south 43 REAL(wp) :: sinn = 6.301_wp ! initial salinity 44 REAL(wp) :: sins = 6.301_wp ! 45 46 !!---------------------------------------------------------------------- 47 !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 53 48 !! $Id$ 54 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 55 !!---------------------------------------------------------------------- 56 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 !!---------------------------------------------------------------------- 57 51 CONTAINS 58 52 … … 65 59 !! ** Method : restart from a state defined in a binary file 66 60 !! or from arbitrary sea-ice conditions 67 !! 68 !! History : 69 !! 2.0 ! 01-04 (C. Ethe, G. Madec) Original code 70 !!-------------------------------------------------------------------- 71 72 !! * Local variables 61 !!------------------------------------------------------------------- 73 62 INTEGER :: ji, jj, jk, jl ! dummy loop indices 74 75 REAL(wp) :: & ! temporary scalar 76 zeps6, zeps, ztmelts, & 77 epsi06 78 REAL(wp), DIMENSION(jpm) :: & 79 zgfactorn, zhin, & 80 zgfactors, zhis 81 REAL(wp) :: & 82 zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs 83 REAL(wp), DIMENSION(jpi,jpj) :: zidto ! ice indicator 63 REAL(wp) :: zeps6, zeps, ztmelts, epsi06 ! local scalars 64 REAL(wp) :: zvol, zare, zh, zh1, zh2, zh3, zan, zbn, zas, zbs 65 REAL(wp), DIMENSION(jpm) :: zgfactorn, zhin 66 REAL(wp), DIMENSION(jpm) :: zgfactors, zhis 67 REAL(wp), DIMENSION(jpi,jpj) :: zidto ! ice indicator 84 68 !-------------------------------------------------------------------- 85 69 … … 87 71 ! 1) Preliminary things 88 72 !-------------------------------------------------------------------- 89 epsi06 = 1. 0e-673 epsi06 = 1.e-6_wp 90 74 91 75 CALL lim_istate_init ! reading the initials parameters of the ice … … 116 100 117 101 ! constants for heat contents 118 zeps = 1. 0d-20119 zeps6 = 1. 0d-06102 zeps = 1.e-20_wp 103 zeps6 = 1.e-06_wp 120 104 121 105 ! zgfactor for initial ice distribution 122 zgfactorn(:) = 0. 0123 zgfactors(:) = 0. 0106 zgfactorn(:) = 0._wp 107 zgfactors(:) = 0._wp 124 108 125 109 ! first ice type 126 110 DO jl = ice_cat_bounds(1,1), ice_cat_bounds(1,2) 127 zhin (1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0128 zgfactorn(1) = zgfactorn(1) + exp(-(zhin(1)-hginn_u)*(zhin(1)-hginn_u) /2.0)129 zhis (1) = ( hi_max(jl-1) + hi_max(jl) ) / 2.0130 zgfactors(1) = zgfactors(1) + exp(-(zhis(1)-hgins_u)*(zhis(1)-hgins_u) /2.0)111 zhin (1) = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 112 zgfactorn(1) = zgfactorn(1) + exp(-(zhin(1)-hginn_u)*(zhin(1)-hginn_u) * 0.5_wp ) 113 zhis (1) = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 114 zgfactors(1) = zgfactors(1) + exp(-(zhis(1)-hgins_u)*(zhis(1)-hgins_u) * 0.5_wp ) 131 115 END DO ! jl 132 116 zgfactorn(1) = aginn_u / zgfactorn(1) … … 135 119 ! ------------- 136 120 ! new distribution, polynom of second order, conserving area and volume 137 zh1 = 0. 0138 zh2 = 0. 0139 zh3 = 0. 0121 zh1 = 0._wp 122 zh2 = 0._wp 123 zh3 = 0._wp 140 124 DO jl = 1, jpl 141 zh = ( hi_max(jl-1) + hi_max(jl) ) / 2.0125 zh = ( hi_max(jl-1) + hi_max(jl) ) * 0.5_wp 142 126 zh1 = zh1 + zh 143 zh2 = zh2 + zh *zh144 zh3 = zh3 + zh *zh*zh127 zh2 = zh2 + zh * zh 128 zh3 = zh3 + zh * zh * zh 145 129 END DO 146 130 IF(lwp) WRITE(numout,*) ' zh1 : ', zh1 … … 148 132 IF(lwp) WRITE(numout,*) ' zh3 : ', zh3 149 133 150 zvol = aginn_u *hginn_u134 zvol = aginn_u * hginn_u 151 135 zare = aginn_u 152 IF ( jpl .GE.2 ) THEN136 IF( jpl >= 2 ) THEN 153 137 zbn = ( zvol*zh2 - zare*zh3 ) / ( zh2*zh2 - zh1*zh3) 154 138 zan = ( zare - zbn*zh1 ) / zh2 … … 160 144 IF(lwp) WRITE(numout,*) ' zan : ', zan 161 145 162 zvol = agins_u *hgins_u146 zvol = agins_u * hgins_u 163 147 zare = agins_u 164 IF ( jpl .GE.2 ) THEN148 IF( jpl >= 2 ) THEN 165 149 zbs = ( zvol*zh2 - zare*zh3 ) / ( zh2*zh2 - zh1*zh3) 166 150 zas = ( zare - zbs*zh1 ) / zh2 … … 205 189 !--- Northern hemisphere 206 190 !---------------------------------------------------------------- 207 IF( fcor(ji,jj) >= 0. e0) THEN191 IF( fcor(ji,jj) >= 0._wp ) THEN 208 192 209 193 !----------------------- … … 453 437 ENDIF ! on fcor 454 438 455 END DO456 END DO439 END DO 440 END DO 457 441 458 442 !-------------------------------------------------------------------- … … 494 478 495 479 DO jl = 1, jpl 496 497 480 CALL lbc_lnk( a_i(:,:,jl) , 'T', 1. ) 498 481 CALL lbc_lnk( v_i(:,:,jl) , 'T', 1. ) … … 500 483 CALL lbc_lnk( smv_i(:,:,jl), 'T', 1. ) 501 484 CALL lbc_lnk( oa_i(:,:,jl) , 'T', 1. ) 502 485 ! 503 486 CALL lbc_lnk( ht_i(:,:,jl) , 'T', 1. ) 504 487 CALL lbc_lnk( ht_s(:,:,jl) , 'T', 1. ) … … 514 497 CALL lbc_lnk(e_i(:,:,jk,jl), 'T', 1. ) 515 498 END DO 516 517 a_i (:,:,jl) = tms(:,:) * a_i(:,:,jl) 518 499 ! 500 a_i(:,:,jl) = tms(:,:) * a_i(:,:,jl) 519 501 END DO 520 502 521 503 CALL lbc_lnk( at_i , 'T', 1. ) 522 504 at_i(:,:) = tms(:,:) * at_i(:,:) ! put 0 over land 523 505 ! 524 506 CALL lbc_lnk( fsbbq , 'T', 1. ) 525 507 ! 526 508 END SUBROUTINE lim_istate 509 527 510 528 511 SUBROUTINE lim_istate_init … … 532 515 !! ** Purpose : Definition of initial state of the ice 533 516 !! 534 !! ** Method : Read the namiceini namelist and check the parameter535 !! values called at the first timestep (nit000)517 !! ** Method : Read the namiceini namelist and check the parameter 518 !! values called at the first timestep (nit000) 536 519 !! 537 !! ** input : 538 !! Namelist namiceini 539 !! 540 !! history : 541 !! 8.5 ! 03-08 (C. Ethe) original code 520 !! ** input : namelist namiceini 542 521 !!----------------------------------------------------------------------------- 543 NAMELIST/namiceini/ ttest, hninn, hginn_u, aginn_u, hginn_d, aginn_d, hnins, &544 hgins_u, agins_u, hgins_d, agins_d, sinn, sins522 NAMELIST/namiceini/ ttest, hninn, hginn_u, aginn_u, hginn_d, aginn_d, hnins, & 523 & hgins_u, agins_u, hgins_d, agins_d, sinn, sins 545 524 !!----------------------------------------------------------------------------- 546 547 ! Define the initial parameters 548 ! ------------------------- 549 550 ! Read Namelist namiceini 551 REWIND ( numnam_ice ) 525 ! 526 REWIND ( numnam_ice ) ! Read Namelist namiceini 552 527 READ ( numnam_ice , namiceini ) 553 IF(lwp) THEN 528 ! 529 IF(lwp) THEN ! control print 554 530 WRITE(numout,*) 555 531 WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' … … 569 545 WRITE(numout,*) ' initial ice salinity in the south sins = ', sins 570 546 ENDIF 571 547 ! 572 548 END SUBROUTINE lim_istate_init 573 549
Note: See TracChangeset
for help on using the changeset viewer.