Changeset 11507 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydta.F90
- Timestamp:
- 2019-09-06T17:19:33+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydta.F90
r11352 r11507 43 43 PUBLIC bdy_dta_init ! routine called by nemogcm.F90 44 44 45 INTEGER , PARAMETER :: jpbdyfld = 1 0! maximum number of files to read45 INTEGER , PARAMETER :: jpbdyfld = 14 ! maximum number of files to read 46 46 INTEGER , PARAMETER :: jp_bdyssh = 1 ! 47 47 INTEGER , PARAMETER :: jp_bdyu2d = 2 ! … … 53 53 INTEGER , PARAMETER :: jp_bdya_i = 8 ! 54 54 INTEGER , PARAMETER :: jp_bdyh_i = 9 ! 55 INTEGER , PARAMETER :: jp_bdyh_S = 10 ! 55 INTEGER , PARAMETER :: jp_bdyh_s = 10 ! 56 INTEGER , PARAMETER :: jp_bdyt_i = 11 ! 57 INTEGER , PARAMETER :: jp_bdyt_s = 12 ! 58 INTEGER , PARAMETER :: jp_bdytsu = 13 ! 59 INTEGER , PARAMETER :: jp_bdys_i = 14 ! 56 60 #if ! defined key_si3 57 61 INTEGER , PARAMETER :: jpl = 1 58 62 #endif 59 ! =F => baroclinic velocities in 3D boundary conditions 63 60 64 !$AGRIF_DO_NOT_TREAT 61 65 TYPE(FLD), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: bf ! structure of input fields (file informations, fields read) … … 181 185 ii = idx_bdy(jbdy)%nbi(ib,igrd) 182 186 ij = idx_bdy(jbdy)%nbj(ib,igrd) 183 dta_bdy(jbdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1) 184 dta_bdy(jbdy)%h_i (ib,jl) = h_i(ii,ij,jl) * tmask(ii,ij,1) 185 dta_bdy(jbdy)%h_s (ib,jl) = h_s(ii,ij,jl) * tmask(ii,ij,1) 187 dta_bdy(jbdy)%a_i(ib,jl) = a_i (ii,ij,jl) * tmask(ii,ij,1) 188 dta_bdy(jbdy)%h_i(ib,jl) = h_i (ii,ij,jl) * tmask(ii,ij,1) 189 dta_bdy(jbdy)%h_s(ib,jl) = h_s (ii,ij,jl) * tmask(ii,ij,1) 190 dta_bdy(jbdy)%t_i(ib,jl) = SUM(t_i (ii,ij,:,jl)) * r1_nlay_i * tmask(ii,ij,1) 191 dta_bdy(jbdy)%t_s(ib,jl) = SUM(t_s (ii,ij,:,jl)) * r1_nlay_s * tmask(ii,ij,1) 192 dta_bdy(jbdy)%tsu(ib,jl) = t_su(ii,ij,jl) * tmask(ii,ij,1) 193 dta_bdy(jbdy)%s_i(ib,jl) = s_i (ii,ij,jl) * tmask(ii,ij,1) 186 194 END DO 187 195 END DO … … 280 288 281 289 #if defined key_si3 282 ! ice: convert N-cat fields (input) into jpl-cat (output)283 290 IF( dta_alias%lneed_ice ) THEN 284 ipl = SIZE(bf_alias(jp_bdya_i)%fnow, 3) 291 ! fill temperature and salinity arrays 292 IF( TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) bf_alias(jp_bdyt_i)%fnow(:,1,:) = rice_tem(jbdy) 293 IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) bf_alias(jp_bdyt_s)%fnow(:,1,:) = rice_tem(jbdy) 294 IF( TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) bf_alias(jp_bdytsu)%fnow(:,1,:) = rice_tem(jbdy) 295 IF( TRIM(bf_alias(jp_bdys_i)%clrootname) == 'NOT USED' ) bf_alias(jp_bdys_i)%fnow(:,1,:) = rice_sal(jbdy) 296 ! if T_su is read and not T_i, set T_i = (T_su + T_freeze)/2 297 IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) & 298 & bf_alias(jp_bdyt_i)%fnow(:,1,:) = 0.5_wp * ( bf_alias(jp_bdytsu)%fnow(:,1,:) + 271.15 ) 299 ! if T_su is read and not T_s, set T_s = T_su 300 IF( TRIM(bf_alias(jp_bdytsu)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_s)%clrootname) == 'NOT USED' ) & 301 & bf_alias(jp_bdyt_s)%fnow(:,1,:) = bf_alias(jp_bdytsu)%fnow(:,1,:) 302 ! if T_s is read and not T_su, set T_su = T_s 303 IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdytsu)%clrootname) == 'NOT USED' ) & 304 & bf_alias(jp_bdytsu)%fnow(:,1,:) = bf_alias(jp_bdyt_s)%fnow(:,1,:) 305 ! if T_s is read and not T_i, set T_i = (T_s + T_freeze)/2 306 IF( TRIM(bf_alias(jp_bdyt_s)%clrootname) /= 'NOT USED' .AND. TRIM(bf_alias(jp_bdyt_i)%clrootname) == 'NOT USED' ) & 307 & bf_alias(jp_bdyt_i)%fnow(:,1,:) = 0.5_wp * ( bf_alias(jp_bdyt_s)%fnow(:,1,:) + 271.15 ) 308 309 ! convert N-cat fields (input) into jpl-cat (output) 310 ipl = SIZE(bf_alias(jp_bdya_i)%fnow, 3) 285 311 IF( ipl /= jpl ) THEN ! ice: convert N-cat fields (input) into jpl-cat (output) 286 CALL ice_var_itd(bf_alias(jp_bdyh_i)%fnow(:,1,:), bf_alias(jp_bdyh_s)%fnow(:,1,:), bf_alias(jp_bdya_i)%fnow(:,1,:), & 287 & dta_alias%h_i , dta_alias%h_s , dta_alias%a_i ) 312 CALL ice_var_itd( bf_alias(jp_bdyh_i)%fnow(:,1,:), bf_alias(jp_bdyh_s)%fnow(:,1,:), bf_alias(jp_bdya_i)%fnow(:,1,:), & 313 & dta_alias%h_i , dta_alias%h_s , dta_alias%a_i , & 314 & bf_alias(jp_bdyt_i)%fnow(:,1,:), bf_alias(jp_bdyt_s)%fnow(:,1,:), & 315 & bf_alias(jp_bdytsu)%fnow(:,1,:), bf_alias(jp_bdys_i)%fnow(:,1,:), & 316 & dta_alias%t_i , dta_alias%t_s , & 317 & dta_alias%tsu , dta_alias%s_i ) 288 318 ENDIF 289 319 ENDIF … … 332 362 ! ! =F => baroclinic velocities in 3D boundary data 333 363 LOGICAL :: ln_zinterp ! =T => requires a vertical interpolation of the bdydta 364 REAL(wp) :: rn_ice_tem, rn_ice_sal, rn_ice_age 334 365 INTEGER :: ipk,ipl ! 335 366 INTEGER :: idvar ! variable ID … … 341 372 LOGICAL :: llneed ! 342 373 LOGICAL :: llread ! 343 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_tem, bn_sal, bn_u3d, bn_v3d ! must be an array to be used with fld_fill344 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_ssh, bn_u2d, bn_v2d ! informations about the fields to be read345 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_a_i, bn_h_i, bn_h_s374 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_tem, bn_sal, bn_u3d, bn_v3d ! must be an array to be used with fld_fill 375 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_ssh, bn_u2d, bn_v2d ! informations about the fields to be read 376 TYPE(FLD_N), DIMENSION(1), TARGET :: bn_a_i, bn_h_i, bn_h_s, bn_t_i, bn_t_s, bn_tsu, bn_s_i 346 377 TYPE(FLD_N), DIMENSION(:), POINTER :: bn_alias ! must be an array to be used with fld_fill 347 378 TYPE(FLD ), DIMENSION(:), POINTER :: bf_alias 348 379 ! 349 380 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 350 NAMELIST/nambdy_dta/ bn_a_i, bn_h_i, bn_h_s 381 NAMELIST/nambdy_dta/ bn_a_i, bn_h_i, bn_h_s, bn_t_i, bn_t_s, bn_tsu, bn_s_i 382 NAMELIST/nambdy_dta/ rn_ice_tem, rn_ice_sal, rn_ice_age 351 383 NAMELIST/nambdy_dta/ ln_full_vel, ln_zinterp 352 384 !!--------------------------------------------------------------------------- … … 402 434 ENDIF 403 435 436 ! temp, sal and age of incoming ice 437 rice_tem(jbdy) = rn_ice_tem 438 rice_sal(jbdy) = rn_ice_sal 439 rice_age(jbdy) = rn_ice_age 440 441 404 442 DO jfld = 1, jpbdyfld 405 443 … … 497 535 ! ice 498 536 ! ===================== 537 IF( jfld == jp_bdya_i .OR. jfld == jp_bdyh_i .OR. jfld == jp_bdyh_s .OR. & 538 & jfld == jp_bdyt_i .OR. jfld == jp_bdyt_s .OR. jfld == jp_bdytsu .OR. jfld == jp_bdys_i ) THEN 539 igrd = 1 ! T point 540 ipk = ipl ! jpl-cat data 541 llneed = dta_bdy(jbdy)%lneed_ice ! ice will be needed 542 llread = nn_ice_dta(jbdy) == 1 ! get data from NetCDF file 543 iszdim = idx_bdy(jbdy)%nblen(igrd) ! length of this bdy on this MPI processus 544 ENDIF 499 545 IF( jfld == jp_bdya_i ) THEN 500 546 cl3 = 'a_i' 501 igrd = 1 ! T point 502 ipk = ipl ! 503 llneed = dta_bdy(jbdy)%lneed_ice ! dta_bdy(jbdy)%a_i will be needed 504 llread = nn_ice_dta(jbdy) == 1 ! get data from NetCDF file 505 bf_alias => bf(jp_bdya_i,jbdy:jbdy) ! alias for ssh structure of bdy number jbdy 506 bn_alias => bn_a_i ! alias for ssh structure of nambdy_dta 507 iszdim = idx_bdy(jbdy)%nblen(igrd) ! length of this bdy on this MPI processus 508 ENDIF 547 bf_alias => bf(jp_bdya_i,jbdy:jbdy) ! alias for a_i structure of bdy number jbdy 548 bn_alias => bn_a_i ! alias for a_i structure of nambdy_dta 549 ENDIF 509 550 IF( jfld == jp_bdyh_i ) THEN 510 551 cl3 = 'h_i' 511 igrd = 1 ! T point 512 ipk = ipl ! 513 llneed = dta_bdy(jbdy)%lneed_ice ! dta_bdy(jbdy)%h_i will be needed 514 llread = nn_ice_dta(jbdy) == 1 ! get data from NetCDF file 515 bf_alias => bf(jp_bdyh_i,jbdy:jbdy) ! alias for ssh structure of bdy number jbdy 516 bn_alias => bn_h_i ! alias for ssh structure of nambdy_dta 517 iszdim = idx_bdy(jbdy)%nblen(igrd) ! length of this bdy on this MPI processus 552 bf_alias => bf(jp_bdyh_i,jbdy:jbdy) ! alias for h_i structure of bdy number jbdy 553 bn_alias => bn_h_i ! alias for h_i structure of nambdy_dta 518 554 ENDIF 519 555 IF( jfld == jp_bdyh_s ) THEN 520 556 cl3 = 'h_s' 521 igrd = 1 ! T point 522 ipk = ipl ! 523 llneed = dta_bdy(jbdy)%lneed_ice ! dta_bdy(jbdy)%h_s will be needed 524 llread = nn_ice_dta(jbdy) == 1 ! get data from NetCDF file 525 bf_alias => bf(jp_bdyh_s,jbdy:jbdy) ! alias for ssh structure of bdy number jbdy 526 bn_alias => bn_h_s ! alias for ssh structure of nambdy_dta 527 iszdim = idx_bdy(jbdy)%nblen(igrd) ! length of this bdy on this MPI processus 557 bf_alias => bf(jp_bdyh_s,jbdy:jbdy) ! alias for h_s structure of bdy number jbdy 558 bn_alias => bn_h_s ! alias for h_s structure of nambdy_dta 559 ENDIF 560 IF( jfld == jp_bdyt_i ) THEN 561 cl3 = 't_i' 562 bf_alias => bf(jp_bdyt_i,jbdy:jbdy) ! alias for t_i structure of bdy number jbdy 563 bn_alias => bn_t_i ! alias for t_i structure of nambdy_dta 564 ENDIF 565 IF( jfld == jp_bdyt_s ) THEN 566 cl3 = 't_s' 567 bf_alias => bf(jp_bdyt_s,jbdy:jbdy) ! alias for t_s structure of bdy number jbdy 568 bn_alias => bn_t_s ! alias for t_s structure of nambdy_dta 569 ENDIF 570 IF( jfld == jp_bdytsu ) THEN 571 cl3 = 'tsu' 572 bf_alias => bf(jp_bdytsu,jbdy:jbdy) ! alias for tsu structure of bdy number jbdy 573 bn_alias => bn_tsu ! alias for tsu structure of nambdy_dta 574 ENDIF 575 IF( jfld == jp_bdys_i ) THEN 576 cl3 = 's_i' 577 bf_alias => bf(jp_bdys_i,jbdy:jbdy) ! alias for s_i structure of bdy number jbdy 578 bn_alias => bn_s_i ! alias for s_i structure of nambdy_dta 528 579 ENDIF 529 580 … … 542 593 543 594 ! associate the pointer and get rid of the dimensions with a size equal to 1 544 IF( jfld == jp_bdyssh )dta_bdy(jbdy)%ssh => bf_alias(1)%fnow(:,1,1)545 IF( jfld == jp_bdyu2d )dta_bdy(jbdy)%u2d => bf_alias(1)%fnow(:,1,1)546 IF( jfld == jp_bdyv2d )dta_bdy(jbdy)%v2d => bf_alias(1)%fnow(:,1,1)547 IF( jfld == jp_bdyu3d )dta_bdy(jbdy)%u3d => bf_alias(1)%fnow(:,1,:)548 IF( jfld == jp_bdyv3d )dta_bdy(jbdy)%v3d => bf_alias(1)%fnow(:,1,:)549 IF( jfld == jp_bdytem )dta_bdy(jbdy)%tem => bf_alias(1)%fnow(:,1,:)550 IF( jfld == jp_bdysal )dta_bdy(jbdy)%sal => bf_alias(1)%fnow(:,1,:)595 IF( jfld == jp_bdyssh ) dta_bdy(jbdy)%ssh => bf_alias(1)%fnow(:,1,1) 596 IF( jfld == jp_bdyu2d ) dta_bdy(jbdy)%u2d => bf_alias(1)%fnow(:,1,1) 597 IF( jfld == jp_bdyv2d ) dta_bdy(jbdy)%v2d => bf_alias(1)%fnow(:,1,1) 598 IF( jfld == jp_bdyu3d ) dta_bdy(jbdy)%u3d => bf_alias(1)%fnow(:,1,:) 599 IF( jfld == jp_bdyv3d ) dta_bdy(jbdy)%v3d => bf_alias(1)%fnow(:,1,:) 600 IF( jfld == jp_bdytem ) dta_bdy(jbdy)%tem => bf_alias(1)%fnow(:,1,:) 601 IF( jfld == jp_bdysal ) dta_bdy(jbdy)%sal => bf_alias(1)%fnow(:,1,:) 551 602 IF( jfld == jp_bdya_i ) THEN 552 603 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%a_i => bf_alias(1)%fnow(:,1,:) … … 562 613 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%h_s => bf_alias(1)%fnow(:,1,:) 563 614 ELSE ; ALLOCATE( dta_bdy(jbdy)%h_s(iszdim,jpl) ) 615 ENDIF 616 ENDIF 617 IF( jfld == jp_bdyt_i ) THEN 618 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%t_i => bf_alias(1)%fnow(:,1,:) 619 ELSE ; ALLOCATE( dta_bdy(jbdy)%t_i(iszdim,jpl) ) 620 ENDIF 621 ENDIF 622 IF( jfld == jp_bdyt_s ) THEN 623 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%t_s => bf_alias(1)%fnow(:,1,:) 624 ELSE ; ALLOCATE( dta_bdy(jbdy)%t_s(iszdim,jpl) ) 625 ENDIF 626 ENDIF 627 IF( jfld == jp_bdytsu ) THEN 628 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%tsu => bf_alias(1)%fnow(:,1,:) 629 ELSE ; ALLOCATE( dta_bdy(jbdy)%tsu(iszdim,jpl) ) 630 ENDIF 631 ENDIF 632 IF( jfld == jp_bdys_i ) THEN 633 IF( ipk == jpl ) THEN ; dta_bdy(jbdy)%s_i => bf_alias(1)%fnow(:,1,:) 634 ELSE ; ALLOCATE( dta_bdy(jbdy)%s_i(iszdim,jpl) ) 564 635 ENDIF 565 636 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.