Changeset 7753 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
- Timestamp:
- 2017-03-03T12:46:59+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r7698 r7753 86 86 REAL(wp), POINTER, DIMENSION(:,:) :: zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini !data from namelist or nc file 87 87 REAL(wp), POINTER, DIMENSION(:,:,:) :: zh_i_ini, za_i_ini !data by cattegories to fill 88 INTEGER , DIMENSION(4) :: itest88 INTEGER , POINTER, DIMENSION(:) :: itest 89 89 !-------------------------------------------------------------------- 90 90 … … 92 92 CALL wrk_alloc( jpi, jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 93 93 CALL wrk_alloc( jpi, jpj, zswitch ) 94 Call wrk_alloc( 4, itest ) 94 95 95 96 IF(lwp) WRITE(numout,*) … … 105 106 ! init surface temperature 106 107 DO jl = 1, jpl 107 !$OMP PARALLEL DO schedule(static) private(jj,ji) 108 DO jj = 1, jpj 109 DO ji = 1, jpi 110 t_su (ji,jj,jl) = rt0 * tmask(ji,jj,1) 111 tn_ice(ji,jj,jl) = rt0 * tmask(ji,jj,1) 112 END DO 113 END DO 108 t_su (:,:,jl) = rt0 * tmask(:,:,1) 109 tn_ice(:,:,jl) = rt0 * tmask(:,:,1) 114 110 END DO 115 111 116 112 ! init basal temperature (considered at freezing point) 117 113 CALL eos_fzp( sss_m(:,:), t_bo(:,:) ) 118 !$OMP PARALLEL DO schedule(static) private(jj,ji) 119 DO jj = 1, jpj 120 DO ji = 1, jpi 121 t_bo(ji,jj) = ( t_bo(ji,jj) + rt0 ) * tmask(ji,jj,1) 122 END DO 123 END DO 114 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) 124 115 125 116 … … 131 122 IF( ln_limini_file )THEN 132 123 ! 133 !$OMP PARALLEL DO schedule(static) private(jj,ji) 134 DO jj = 1, jpj 135 DO ji = 1, jpi 136 zht_i_ini(ji,jj) = si(jp_hti)%fnow(ji,jj,1) 137 zht_s_ini(ji,jj) = si(jp_hts)%fnow(ji,jj,1) 138 zat_i_ini(ji,jj) = si(jp_ati)%fnow(ji,jj,1) 139 zts_u_ini(ji,jj) = si(jp_tsu)%fnow(ji,jj,1) 140 ztm_i_ini(ji,jj) = si(jp_tmi)%fnow(ji,jj,1) 141 zsm_i_ini(ji,jj) = si(jp_smi)%fnow(ji,jj,1) 142 ! 143 IF ( zat_i_ini(ji,jj) > 0._wp ) THEN ; zswitch(ji,jj) = tmask(ji,jj,1) 144 ELSE ; zswitch(ji,jj) = 0._wp 145 END IF 146 END DO 147 END DO 148 ! 124 zht_i_ini(:,:) = si(jp_hti)%fnow(:,:,1) 125 zht_s_ini(:,:) = si(jp_hts)%fnow(:,:,1) 126 zat_i_ini(:,:) = si(jp_ati)%fnow(:,:,1) 127 zts_u_ini(:,:) = si(jp_tsu)%fnow(:,:,1) 128 ztm_i_ini(:,:) = si(jp_tmi)%fnow(:,:,1) 129 zsm_i_ini(:,:) = si(jp_smi)%fnow(:,:,1) 130 ! 131 WHERE( zat_i_ini(:,:) > 0._wp ) ; zswitch(:,:) = tmask(:,:,1) 132 ELSEWHERE ; zswitch(:,:) = 0._wp 133 END WHERE 134 ! 149 135 ELSE ! ln_limini_file = F 150 136 … … 153 139 !-------------------------------------------------------------------- 154 140 ! no ice if sst <= t-freez + ttest 155 !$OMP PARALLEL 156 !$OMP DO schedule(static) private(jj,ji) 157 DO jj = 1, jpj 158 DO ji = 1, jpi 159 IF ( ( sst_m(ji,jj) - (t_bo(ji,jj) - rt0) ) * tmask(ji,jj,1) >= rn_thres_sst ) THEN 160 zswitch(ji,jj) = 0._wp 161 ELSE 162 zswitch(ji,jj) = tmask(ji,jj,1) 163 END IF 164 END DO 165 END DO 141 WHERE( ( sst_m(:,:) - (t_bo(:,:) - rt0) ) * tmask(:,:,1) >= rn_thres_sst ) ; zswitch(:,:) = 0._wp 142 ELSEWHERE ; zswitch(:,:) = tmask(:,:,1) 143 END WHERE 166 144 167 145 !----------------------------- … … 169 147 !----------------------------- 170 148 ! assign initial thickness, concentration, snow depth and salinity to an hemisphere-dependent array 171 !$OMP DO schedule(static) private(jj,ji)172 149 DO jj = 1, jpj 173 150 DO ji = 1, jpi … … 189 166 END DO 190 167 END DO 191 !$OMP END PARALLEL192 168 ! 193 169 ENDIF ! ln_limini_file 194 170 195 !$OMP PARALLEL 196 !$OMP DO schedule(static) private(jj,ji) 197 DO jj = 1, jpj 198 DO ji = 1, jpi 199 zvt_i_ini(ji,jj) = zht_i_ini(ji,jj) * zat_i_ini(ji,jj) ! ice volume 200 END DO 201 END DO 171 zvt_i_ini(:,:) = zht_i_ini(:,:) * zat_i_ini(:,:) ! ice volume 202 172 !--------------------------------------------------------------------- 203 173 ! 3.2) Distribute ice concentration and thickness into the categories … … 206 176 ! then we check whether the distribution fullfills 207 177 ! volume and area conservation, positivity and ice categories bounds 208 DO jl = 1, jpl 209 !$OMP DO schedule(static) private(jj,ji) 210 DO jj = 1, jpj 211 DO ji = 1, jpi 212 zh_i_ini(ji,jj,jl) = 0._wp 213 za_i_ini(ji,jj,jl) = 0._wp 214 END DO 215 END DO 216 END DO 178 zh_i_ini(:,:,:) = 0._wp 179 za_i_ini(:,:,:) = 0._wp 217 180 ! 218 !$OMP DO schedule(static) private(jj,ji,jl0,jl,i_fill,zarg,zV,zdv,zconv,itest)219 181 DO jj = 1, jpj 220 182 DO ji = 1, jpi … … 327 289 END DO 328 290 END DO 329 !$OMP END PARALLEL330 291 331 292 !--------------------------------------------------------------------- … … 335 296 ! Ice concentration, thickness and volume, ice salinity, ice age, surface temperature 336 297 DO jl = 1, jpl ! loop over categories 337 !$OMP PARALLEL DO schedule(static) private(jj,ji)338 298 DO jj = 1, jpj 339 299 DO ji = 1, jpi … … 373 333 ENDIF 374 334 375 !$OMP PARALLEL376 335 ! Snow temperature and heat content 377 336 DO jk = 1, nlay_s 378 337 DO jl = 1, jpl ! loop over categories 379 !$OMP DO schedule(static) private(jj,ji)380 338 DO jj = 1, jpj 381 339 DO ji = 1, jpi … … 394 352 DO jk = 1, nlay_i 395 353 DO jl = 1, jpl ! loop over categories 396 !$OMP DO schedule(static) private(jj,ji)397 354 DO jj = 1, jpj 398 355 DO ji = 1, jpi … … 413 370 END DO 414 371 372 tn_ice (:,:,:) = t_su (:,:,:) 373 374 ELSE ! if ln_limini=false 375 a_i (:,:,:) = 0._wp 376 v_i (:,:,:) = 0._wp 377 v_s (:,:,:) = 0._wp 378 smv_i(:,:,:) = 0._wp 379 oa_i (:,:,:) = 0._wp 380 ht_i (:,:,:) = 0._wp 381 ht_s (:,:,:) = 0._wp 382 sm_i (:,:,:) = 0._wp 383 o_i (:,:,:) = 0._wp 384 385 e_i(:,:,:,:) = 0._wp 386 e_s(:,:,:,:) = 0._wp 387 415 388 DO jl = 1, jpl 416 !$OMP DO schedule(static) private(jj,ji) 417 DO jj = 1, jpj418 DO ji = 1, jpi419 tn_ice (ji,jj,jl) = t_su (ji,jj,jl)420 END DO389 DO jk = 1, nlay_i 390 t_i(:,:,jk,jl) = rt0 * tmask(:,:,1) 391 END DO 392 DO jk = 1, nlay_s 393 t_s(:,:,jk,jl) = rt0 * tmask(:,:,1) 421 394 END DO 422 395 END DO 423 !$OMP END PARALLEL424 425 ELSE ! if ln_limini=false426 !$OMP PARALLEL427 DO jl = 1, jpl428 !$OMP DO schedule(static) private(jj,ji)429 DO jj = 1, jpj430 DO ji = 1, jpi431 a_i (ji,jj,jl) = 0._wp432 v_i (ji,jj,jl) = 0._wp433 v_s (ji,jj,jl) = 0._wp434 smv_i(ji,jj,jl) = 0._wp435 oa_i (ji,jj,jl) = 0._wp436 ht_i (ji,jj,jl) = 0._wp437 ht_s (ji,jj,jl) = 0._wp438 sm_i (ji,jj,jl) = 0._wp439 o_i (ji,jj,jl) = 0._wp440 END DO441 END DO442 END DO443 444 DO jk = 1, nlay_i445 DO jl = 1, jpl446 !$OMP DO schedule(static) private(jj,ji)447 DO jj = 1, jpj448 DO ji = 1, jpi449 e_i(ji,jj,jl,jk) = 0._wp450 END DO451 END DO452 END DO453 END DO454 DO jk = 1, nlay_s455 DO jl = 1, jpl456 !$OMP DO schedule(static) private(jj,ji)457 DO jj = 1, jpj458 DO ji = 1, jpi459 e_s(ji,jj,jl,jk) = 0._wp460 END DO461 END DO462 END DO463 END DO464 465 DO jl = 1, jpl466 DO jk = 1, nlay_i467 !$OMP DO schedule(static) private(jj,ji)468 DO jj = 1, jpj469 DO ji = 1, jpi470 t_i(ji,jj,jk,jl) = rt0 * tmask(ji,jj,1)471 END DO472 END DO473 END DO474 DO jk = 1, nlay_s475 !$OMP DO schedule(static) private(jj,ji)476 DO jj = 1, jpj477 DO ji = 1, jpi478 t_s(ji,jj,jk,jl) = rt0 * tmask(ji,jj,1)479 END DO480 END DO481 END DO482 END DO483 !$OMP END PARALLEL484 396 485 397 ENDIF ! ln_limini 486 398 487 !$OMP PARALLEL 488 !$OMP DO schedule(static) private(jj,ji) 489 DO jj = 1, jpj 490 DO ji = 1, jpi 491 at_i (ji,jj) = 0.0_wp 492 END DO 493 END DO 399 at_i (:,:) = 0.0_wp 494 400 DO jl = 1, jpl 495 !$OMP DO schedule(static) private(jj,ji) 496 DO jj = 1, jpj 497 DO ji = 1, jpi 498 at_i (ji,jj) = at_i (ji,jj) + a_i (ji,jj,jl) 499 END DO 500 END DO 401 at_i (:,:) = at_i (:,:) + a_i (:,:,jl) 501 402 END DO 502 403 ! 503 !$OMP DO schedule(static) private(jj,ji) 504 DO jj = 1, jpj 505 DO ji = 1, jpi 506 !-------------------------------------------------------------------- 507 ! 4) Global ice variables for output diagnostics | 508 !-------------------------------------------------------------------- 509 u_ice (ji,jj) = 0._wp 510 v_ice (ji,jj) = 0._wp 511 stress1_i(ji,jj) = 0._wp 512 stress2_i(ji,jj) = 0._wp 513 stress12_i(ji,jj) = 0._wp 514 515 !-------------------------------------------------------------------- 516 ! 5) Moments for advection 517 !-------------------------------------------------------------------- 518 519 sxopw (ji,jj) = 0._wp 520 syopw (ji,jj) = 0._wp 521 sxxopw(ji,jj) = 0._wp 522 syyopw(ji,jj) = 0._wp 523 sxyopw(ji,jj) = 0._wp 524 END DO 525 END DO 526 527 DO jl = 1, jpl 528 !$OMP DO schedule(static) private(jj,ji) 529 DO jj = 1, jpj 530 DO ji = 1, jpi 531 sxice (ji,jj,jl) = 0._wp ; sxsn (ji,jj,jl) = 0._wp ; sxa (ji,jj,jl) = 0._wp 532 syice (ji,jj,jl) = 0._wp ; sysn (ji,jj,jl) = 0._wp ; sya (ji,jj,jl) = 0._wp 533 sxxice(ji,jj,jl) = 0._wp ; sxxsn(ji,jj,jl) = 0._wp ; sxxa (ji,jj,jl) = 0._wp 534 syyice(ji,jj,jl) = 0._wp ; syysn(ji,jj,jl) = 0._wp ; syya (ji,jj,jl) = 0._wp 535 sxyice(ji,jj,jl) = 0._wp ; sxysn(ji,jj,jl) = 0._wp ; sxya (ji,jj,jl) = 0._wp 536 537 sxc0 (ji,jj,jl) = 0._wp 538 syc0 (ji,jj,jl) = 0._wp 539 sxxc0 (ji,jj,jl) = 0._wp 540 syyc0 (ji,jj,jl) = 0._wp 541 sxyc0 (ji,jj,jl) = 0._wp 542 543 sxsal (ji,jj,jl) = 0._wp 544 sysal (ji,jj,jl) = 0._wp 545 sxxsal (ji,jj,jl) = 0._wp 546 syysal (ji,jj,jl) = 0._wp 547 sxysal (ji,jj,jl) = 0._wp 548 549 sxage (ji,jj,jl) = 0._wp 550 syage (ji,jj,jl) = 0._wp 551 sxxage (ji,jj,jl) = 0._wp 552 syyage (ji,jj,jl) = 0._wp 553 sxyage (ji,jj,jl) = 0._wp 554 END DO 555 END DO 556 END DO 557 558 DO jl = 1, jpl 559 DO jk = 1, nlay_i 560 !$OMP DO schedule(static) private(jj,ji) 561 DO jj = 1, jpj 562 DO ji = 1, jpi 563 sxe (ji,jj,jk,jl)= 0._wp 564 sye (ji,jj,jk,jl)= 0._wp 565 sxxe (ji,jj,jk,jl)= 0._wp 566 syye (ji,jj,jk,jl)= 0._wp 567 sxye (ji,jj,jk,jl)= 0._wp 568 END DO 569 END DO 570 END DO 571 END DO 572 !$OMP END PARALLEL 573 404 !-------------------------------------------------------------------- 405 ! 4) Global ice variables for output diagnostics | 406 !-------------------------------------------------------------------- 407 u_ice (:,:) = 0._wp 408 v_ice (:,:) = 0._wp 409 stress1_i(:,:) = 0._wp 410 stress2_i(:,:) = 0._wp 411 stress12_i(:,:) = 0._wp 412 413 !-------------------------------------------------------------------- 414 ! 5) Moments for advection 415 !-------------------------------------------------------------------- 416 417 sxopw (:,:) = 0._wp 418 syopw (:,:) = 0._wp 419 sxxopw(:,:) = 0._wp 420 syyopw(:,:) = 0._wp 421 sxyopw(:,:) = 0._wp 422 423 sxice (:,:,:) = 0._wp ; sxsn (:,:,:) = 0._wp ; sxa (:,:,:) = 0._wp 424 syice (:,:,:) = 0._wp ; sysn (:,:,:) = 0._wp ; sya (:,:,:) = 0._wp 425 sxxice(:,:,:) = 0._wp ; sxxsn(:,:,:) = 0._wp ; sxxa (:,:,:) = 0._wp 426 syyice(:,:,:) = 0._wp ; syysn(:,:,:) = 0._wp ; syya (:,:,:) = 0._wp 427 sxyice(:,:,:) = 0._wp ; sxysn(:,:,:) = 0._wp ; sxya (:,:,:) = 0._wp 428 429 sxc0 (:,:,:) = 0._wp ; sxe (:,:,:,:)= 0._wp 430 syc0 (:,:,:) = 0._wp ; sye (:,:,:,:)= 0._wp 431 sxxc0 (:,:,:) = 0._wp ; sxxe (:,:,:,:)= 0._wp 432 syyc0 (:,:,:) = 0._wp ; syye (:,:,:,:)= 0._wp 433 sxyc0 (:,:,:) = 0._wp ; sxye (:,:,:,:)= 0._wp 434 435 sxsal (:,:,:) = 0._wp 436 sysal (:,:,:) = 0._wp 437 sxxsal (:,:,:) = 0._wp 438 syysal (:,:,:) = 0._wp 439 sxysal (:,:,:) = 0._wp 440 441 sxage (:,:,:) = 0._wp 442 syage (:,:,:) = 0._wp 443 sxxage (:,:,:) = 0._wp 444 syyage (:,:,:) = 0._wp 445 sxyage (:,:,:) = 0._wp 574 446 575 447 !!!clem … … 581 453 CALL wrk_dealloc( jpi, jpj, zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 582 454 CALL wrk_dealloc( jpi, jpj, zswitch ) 455 Call wrk_dealloc( 4, itest ) 583 456 584 457 END SUBROUTINE lim_istate
Note: See TracChangeset
for help on using the changeset viewer.