00001
00002
00003
00004
00005 module ice_blocks
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 use ice_kinds_mod
00023 use ice_exit
00024 use ice_domain_size
00025
00026 implicit none
00027 private
00028 save
00029
00030
00031
00032 type, public :: block
00033 integer (int_kind) ::
00034 block_id ,
00035 local_id ,
00036 ilo, ihi, jlo, jhi ,
00037 iblock, jblock
00038
00039 logical (log_kind) ::
00040 tripole,
00041 tripoleTFlag
00042
00043 integer (int_kind), dimension(:), pointer ::
00044 i_glob, j_glob
00045 end type
00046
00047
00048
00049 public :: create_blocks ,&
00050 get_block ,&
00051 get_block_parameter ,&
00052 ice_blocksGetNbrID
00053
00054 public :: LocateTrouble,PrintTrouble
00055 interface PrintTrouble
00056 module procedure PrintTrouble_dbl, PrintTrouble_int
00057 end interface
00058
00059
00060
00061 integer (int_kind), parameter, public ::
00062 nghost = 1
00063
00064 integer (int_kind), parameter, public ::
00065 nx_block = block_size_x + 2*nghost,
00066 ny_block = block_size_y + 2*nghost
00067
00068
00069
00070
00071
00072
00073 integer (int_kind), parameter, public ::
00074 ice_blocksNorth = 1,
00075 ice_blocksSouth = 2,
00076 ice_blocksEast = 3,
00077 ice_blocksWest = 4,
00078 ice_blocksNorthEast = 5,
00079 ice_blocksNorthWest = 6,
00080 ice_blocksSouthEast = 7,
00081 ice_blocksSouthWest = 8
00082 integer (int_kind), parameter, public ::
00083
00084
00085 ice_blocksEast2 = 11, &
00086 ice_blocksWest2 = 12
00087
00088
00089
00090
00091 integer (int_kind), parameter, public ::
00092 ice_blocksEastNorthEast = 17,
00093
00094 ice_blocksWestNorthWest = 19
00095
00096
00097
00098
00099
00100
00101
00102
00103 integer (int_kind), public ::
00104 nblocks_tot ,
00105 nblocks_x ,
00106 nblocks_y
00107
00108 integer (int_kind), public, parameter ::
00109 trouble_ig = 2,
00110 trouble_jg = 2
00111
00112 integer (int_kind), public :: trouble_il,trouble_jl,trouble_ibl
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 type (block), dimension(:), allocatable ::
00123 all_blocks
00124
00125 integer (int_kind), dimension(:,:),allocatable ::
00126 all_blocks_ij
00127
00128
00129
00130 integer (int_kind), dimension(:,:), allocatable, target ::
00131 i_global,
00132 j_global
00133
00134
00135
00136
00137 contains
00138
00139 subroutine PrintTrouble_dbl(name,array)
00140
00141 use ice_fileunits, only: nu_diag
00142
00143 character(len=*), intent(in) :: name
00144 real(kind=dbl_kind), intent(in) :: array(nx_block,ny_block)
00145
00146 write(nu_diag,*) TRIM(name),'(i,j) =',array(trouble_il,trouble_jl)
00147
00148 end subroutine PrintTrouble_dbl
00149
00150 subroutine PrintTrouble_int(name,array)
00151
00152 use ice_fileunits, only: nu_diag
00153
00154 character(len=*), intent(in) :: name
00155 integer(int_kind), intent(in) :: array(nx_block,ny_block)
00156
00157 write(nu_diag,*) TRIM(name),'(i,j) =',array(trouble_il,trouble_jl)
00158
00159 end subroutine PrintTrouble_int
00160
00161 subroutine LocateTrouble
00162
00163 type (block) :: this_block
00164 integer(int_kind) :: n,gbid,ib,ie,jb,je,ig,jg,i,j
00165 integer(int_kind) :: j_save,i_save,ib_save
00166 logical :: foundi, foundj
00167
00168
00169 do n=1,nblocks_tot
00170 foundi=.false.;foundj=.false.
00171 gbid = all_blocks(n)%block_id
00172 ib = all_blocks(n)%ilo
00173 ie = all_blocks(n)%ihi
00174 jb = all_blocks(n)%jlo
00175 je = all_blocks(n)%jhi
00176 do i=ib,ie
00177 ig=all_blocks(n)%i_glob(i)
00178 if(ig == trouble_ig) then
00179 i_save=i
00180 foundi=.true.
00181 endif
00182 enddo
00183 do j=jb,je
00184 jg=all_blocks(n)%j_glob(j)
00185 if(jg == trouble_jg) then
00186 j_save=j;foundj=.true.
00187 endif
00188 enddo
00189 if(foundi .and. foundj) then
00190 ib_save = n
00191 endif
00192 enddo
00193 trouble_il = i_save
00194 trouble_jl = j_save
00195 trouble_ibl = ib_save
00196
00197
00198 end subroutine LocateTrouble
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208 subroutine create_blocks(nx_global, ny_global, ew_boundary_type, &
00209 ns_boundary_type)
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 use ice_fileunits, only: nu_diag
00221 use ice_communicate, only: my_task, master_task
00222
00223
00224
00225 integer (int_kind), intent(in) ::
00226 nx_global, ny_global
00227
00228 character (*), intent(in) ::
00229 ew_boundary_type,
00230 ns_boundary_type
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 integer (int_kind) ::
00241 i, ip1, j, jp1, n ,
00242 iblock, jblock ,
00243 is, ie, js, je
00244
00245 logical (log_kind) :: dbug
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 nblocks_x = (nx_global-1)/block_size_x + 1
00256 nblocks_y = (ny_global-1)/block_size_y + 1
00257 nblocks_tot = nblocks_x*nblocks_y
00258
00259
00260
00261
00262
00263
00264
00265 allocate(all_blocks(nblocks_tot))
00266 allocate(i_global(nx_block,nblocks_tot), &
00267 j_global(ny_block,nblocks_tot))
00268 allocate(all_blocks_ij(nblocks_x,nblocks_y))
00269
00270
00271
00272
00273
00274
00275
00276 n = 0
00277 do jblock=1,nblocks_y
00278 js = (jblock-1)*block_size_y + 1
00279 if (js > ny_global) call abort_ice(&
00280 'ice: create_blocks: Bad block decomp: ny_block too large?')
00281 je = js + block_size_y - 1
00282 if (je > ny_global) je = ny_global
00283
00284 do iblock=1,nblocks_x
00285 n = n + 1
00286
00287 is = (iblock-1)*block_size_x + 1
00288 if (is > nx_global) call abort_ice(&
00289 'ice: create_blocks: Bad block decomp: nx_block too large?')
00290 ie = is + block_size_x - 1
00291 if (ie > nx_global) ie = nx_global
00292
00293 all_blocks(n)%block_id = n
00294 all_blocks(n)%iblock = iblock
00295 all_blocks(n)%jblock = jblock
00296 all_blocks(n)%ilo = nghost + 1
00297 all_blocks(n)%jlo = nghost + 1
00298 all_blocks(n)%ihi = nx_block - nghost
00299 all_blocks(n)%jhi = ny_block - nghost
00300
00301 if (jblock == nblocks_y .and. &
00302 (ns_boundary_type == 'tripole' .or. &
00303 ns_boundary_type == 'tripoleT')) then
00304 all_blocks(n)%tripole = .true.
00305 else
00306 all_blocks(n)%tripole = .false.
00307 endif
00308 all_blocks(n)%tripoleTFlag = (ns_boundary_type == 'tripoleT')
00309
00310 all_blocks_ij(iblock,jblock) = n
00311
00312 do j=1,ny_block
00313 j_global(j,n) = js - nghost + j - 1
00314
00315
00316
00317 if (j_global(j,n) < 1) then
00318 select case (ns_boundary_type)
00319 case ('cyclic')
00320 j_global(j,n) = j_global(j,n) + ny_global
00321 case ('open')
00322 j_global(j,n) = nghost - j + 1
00323 case ('closed')
00324 j_global(j,n) = 0
00325 case ('tripole')
00326 j_global(j,n) = nghost - j + 1
00327 case ('tripoleT')
00328 j_global(j,n) = -j_global(j,n) + 1
00329 case default
00330 call abort_ice(&
00331 'ice: create_blocks: unknown n-s bndy type')
00332 end select
00333 endif
00334
00335
00336
00337 if (j_global(j,n) > ny_global + nghost) then
00338 j_global(j,n) = 0
00339
00340
00341
00342 else if (j_global(j,n) > ny_global) then
00343 select case (ns_boundary_type)
00344 case ('cyclic')
00345 j_global(j,n) = j_global(j,n) - ny_global
00346 case ('open')
00347 j_global(j,n) = 2*ny_global - j_global(j,n) + 1
00348 case ('closed')
00349 j_global(j,n) = 0
00350 case ('tripole')
00351 j_global(j,n) = -j_global(j,n)
00352 case ('tripoleT')
00353 j_global(j,n) = -j_global(j,n)
00354 case default
00355 call abort_ice(&
00356 'ice: create_blocks: unknown n-s bndy type')
00357 end select
00358
00359
00360
00361 else if (j_global(j,n) == ny_global .and. &
00362 j > all_blocks(n)%jlo .and. &
00363 j < all_blocks(n)%jhi) then
00364 all_blocks(n)%jhi = j
00365 endif
00366 end do
00367
00368 all_blocks(n)%j_glob => j_global(:,n)
00369
00370 do i=1,nx_block
00371 i_global(i,n) = is - nghost + i - 1
00372
00373
00374
00375 if (i_global(i,n) < 1) then
00376 select case (ew_boundary_type)
00377 case ('cyclic')
00378 i_global(i,n) = i_global(i,n) + nx_global
00379 case ('open')
00380 i_global(i,n) = nghost - i + 1
00381 case ('closed')
00382 i_global(i,n) = 0
00383 case default
00384 call abort_ice(&
00385 'ice: create_blocks: unknown e-w bndy type')
00386 end select
00387 endif
00388
00389
00390
00391 if (i_global(i,n) > nx_global + nghost) then
00392 i_global(i,n) = 0
00393
00394
00395
00396 else if (i_global(i,n) > nx_global) then
00397 select case (ew_boundary_type)
00398 case ('cyclic')
00399 i_global(i,n) = i_global(i,n) - nx_global
00400 case ('open')
00401 i_global(i,n) = 2*nx_global - i_global(i,n) + 1
00402 case ('closed')
00403 i_global(i,n) = 0
00404 case default
00405 call abort_ice(&
00406 'ice: create_blocks: unknown e-w bndy type')
00407 end select
00408
00409
00410
00411 else if (i_global(i,n) == nx_global .and. &
00412 i > all_blocks(n)%ilo .and. &
00413 i < all_blocks(n)%ihi) then
00414 all_blocks(n)%ihi = i
00415 endif
00416 end do
00417
00418 all_blocks(n)%i_glob => i_global(:,n)
00419
00420 end do
00421 end do
00422
00423
00424 dbug = .false.
00425 if (dbug) then
00426 if (my_task == master_task) then
00427 write(nu_diag,*) 'block i,j locations'
00428 do n = 1, nblocks_tot
00429 write(nu_diag,*) 'block id, iblock, jblock:', &
00430 all_blocks(n)%block_id, &
00431 all_blocks(n)%iblock, &
00432 all_blocks(n)%jblock
00433 enddo
00434 endif
00435 endif
00436
00437
00438
00439
00440 end subroutine create_blocks
00441
00442
00443
00444
00445
00446
00447 function ice_blocksGetNbrID(blockID, direction, iBoundary, jBoundary) &
00448 result (nbrID)
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481 integer (int_kind), intent(in) ::
00482 blockID,
00483 direction
00484
00485
00486
00487 character (*), intent(in) ::
00488 iBoundary,
00489 jBoundary
00490
00491
00492
00493 integer (int_kind) ::
00494 nbrID
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504 integer (int_kind) ::
00505 iBlock, jBlock,
00506 inbr, jnbr
00507
00508
00509
00510
00511
00512
00513
00514 call get_block_parameter(blockID, iblock=iBlock, jblock=jBlock)
00515
00516
00517
00518
00519
00520
00521
00522 select case(direction)
00523
00524 case (ice_blocksNorth)
00525
00526 inbr = iBlock
00527 jnbr = jBlock + 1
00528 if (jnbr > nblocks_y) then
00529 select case(jBoundary)
00530 case ('open')
00531 jnbr = 0
00532 case ('closed')
00533 jnbr = 0
00534 case ('cyclic')
00535 jnbr = 1
00536 case ('tripole':'tripoleT')
00537
00538
00539
00540
00541
00542
00543 inbr = nblocks_x - iBlock + 1
00544 jnbr = -jBlock
00545 case default
00546 call abort_ice( &
00547 'ice_blocksGetNbrID: unknown north boundary')
00548 end select
00549 endif
00550
00551 case (ice_blocksSouth)
00552
00553 inbr = iBlock
00554 jnbr = jBlock - 1
00555 if (jnbr < 1) then
00556 select case(jBoundary)
00557 case ('open')
00558 jnbr = 0
00559 case ('closed')
00560 jnbr = 0
00561 case ('cyclic')
00562 jnbr = nblocks_y
00563 case ('tripole')
00564 jnbr = 0
00565 case ('tripoleT')
00566 jnbr = 0
00567 case default
00568 call abort_ice( &
00569 'ice_blocksGetNbrID: unknown south boundary')
00570 end select
00571 endif
00572
00573 case (ice_blocksEast )
00574
00575 inbr = iBlock + 1
00576 jnbr = jBlock
00577 if (inbr > nblocks_x) then
00578 select case(iBoundary)
00579 case ('open')
00580 inbr = 0
00581 case ('closed')
00582 inbr = 0
00583 case ('cyclic')
00584 inbr = 1
00585 case default
00586 call abort_ice( &
00587 'ice_blocksGetNbrID: unknown east boundary')
00588 end select
00589 endif
00590
00591 case (ice_blocksWest )
00592
00593 jnbr = jBlock
00594 inbr = iBlock - 1
00595 if (inbr < 1) then
00596 select case(iBoundary)
00597 case ('open')
00598 inbr = 0
00599 case ('closed')
00600 inbr = 0
00601 case ('cyclic')
00602 inbr = nblocks_x
00603 case default
00604 call abort_ice( &
00605 'ice_blocksGetNbrID: unknown west boundary')
00606 end select
00607 endif
00608
00609 case (ice_blocksNorthEast)
00610
00611 inbr = iBlock + 1
00612 jnbr = jBlock + 1
00613 if (inbr > nblocks_x) then
00614 select case(iBoundary)
00615 case ('open')
00616 inbr = 0
00617 case ('closed')
00618 inbr = 0
00619 case ('cyclic')
00620 inbr = 1
00621 case default
00622 call abort_ice( &
00623 'ice_blocksGetNbrID: unknown east boundary')
00624 end select
00625 endif
00626 if (jnbr > nblocks_y) then
00627 select case(jBoundary)
00628 case ('open')
00629 jnbr = 0
00630 case ('closed')
00631 jnbr = 0
00632 case ('cyclic')
00633 jnbr = 1
00634 case ('tripole':'tripoleT')
00635
00636
00637
00638
00639
00640
00641 inbr = nblocks_x - iBlock
00642 if (inbr == 0) inbr = nblocks_x
00643 jnbr = -jBlock
00644 case default
00645 call abort_ice( &
00646 'ice_blocksGetNbrID: unknown north boundary')
00647 end select
00648 endif
00649
00650 case (ice_blocksNorthWest)
00651
00652 inbr = iBlock - 1
00653 jnbr = jBlock + 1
00654 if (inbr < 1) then
00655 select case(iBoundary)
00656 case ('open')
00657 inbr = 0
00658 case ('closed')
00659 inbr = 0
00660 case ('cyclic')
00661 inbr = nblocks_x
00662 case default
00663 call abort_ice( &
00664 'ice_blocksGetNbrID: unknown west boundary')
00665 end select
00666 endif
00667 if (jnbr > nblocks_y) then
00668 select case(jBoundary)
00669 case ('open')
00670 jnbr = 0
00671 case ('closed')
00672 jnbr = 0
00673 case ('cyclic')
00674 jnbr = 1
00675 case ('tripole':'tripoleT')
00676
00677
00678
00679
00680
00681
00682 inbr = nblocks_x - iBlock + 2
00683 if (inbr > nblocks_x) inbr = 1
00684 jnbr = -jBlock
00685 case default
00686 call abort_ice( &
00687 'ice_blocksGetNbrID: unknown north boundary')
00688 end select
00689 endif
00690
00691 case (ice_blocksSouthEast )
00692
00693 inbr = iBlock + 1
00694 jnbr = jBlock - 1
00695 if (inbr > nblocks_x) then
00696 select case(iBoundary)
00697 case ('open')
00698 inbr = 0
00699 case ('closed')
00700 inbr = 0
00701 case ('cyclic')
00702 inbr = 1
00703 case default
00704 call abort_ice( &
00705 'ice_blocksGetNbrID: unknown east boundary')
00706 end select
00707 endif
00708 if (jnbr < 1) then
00709 select case(jBoundary)
00710 case ('open')
00711 inbr = 0
00712 case ('closed')
00713 jnbr = 0
00714 case ('cyclic')
00715 jnbr = nblocks_y
00716 case ('tripole')
00717 jnbr = 0
00718 case ('tripoleT')
00719 jnbr = 0
00720 case default
00721 call abort_ice( &
00722 'ice_blocksGetNbrID: unknown south boundary')
00723 end select
00724 endif
00725
00726 case (ice_blocksSouthWest )
00727 inbr = iBlock - 1
00728 jnbr = jBlock - 1
00729 if (inbr < 1) then
00730 select case(iBoundary)
00731 case ('open')
00732 inbr = 0
00733 case ('closed')
00734 inbr = 0
00735 case ('cyclic')
00736 inbr = nblocks_x
00737 case default
00738 call abort_ice( &
00739 'ice_blocksGetNbrID: unknown west boundary')
00740 end select
00741 endif
00742 if (jnbr < 1) then
00743 select case(jBoundary)
00744 case ('open')
00745 jnbr = 0
00746 case ('closed')
00747 jnbr = 0
00748 case ('cyclic')
00749 jnbr = nblocks_y
00750 case ('tripole')
00751 jnbr = 0
00752 case ('tripoleT')
00753 jnbr = 0
00754 case default
00755 call abort_ice( &
00756 'ice_blocksGetNbrID: unknown south boundary')
00757 end select
00758 endif
00759
00760 case (ice_blocksEast2)
00761
00762 inbr = iBlock + 2
00763 jnbr = jBlock
00764 if (inbr > nblocks_x) then
00765 select case(iBoundary)
00766 case ('open')
00767 inbr = 0
00768 case ('closed')
00769 inbr = 0
00770 case ('cyclic')
00771 inbr = inbr - nblocks_x
00772 case default
00773 call abort_ice( &
00774 'ice_blocksGetNbrID: unknown east boundary')
00775 end select
00776 endif
00777
00778 case (ice_blocksWest2)
00779 jnbr = jBlock
00780 inbr = iBlock - 2
00781 if (inbr < 1) then
00782 select case(iBoundary)
00783 case ('open')
00784 inbr = 0
00785 case ('closed')
00786 inbr = 0
00787 case ('cyclic')
00788 inbr = nblocks_x + inbr
00789 case default
00790 call abort_ice( &
00791 'ice_blocksGetNbrID: unknown west boundary')
00792 end select
00793 endif
00794
00795 case (ice_blocksEastNorthEast)
00796
00797 inbr = iBlock + 2
00798 jnbr = jBlock + 1
00799 if (inbr > nblocks_x) then
00800 select case(iBoundary)
00801 case ('open')
00802 inbr = 0
00803 case ('closed')
00804 inbr = 0
00805 case ('cyclic')
00806 inbr = inbr - nblocks_x
00807 case default
00808 call abort_ice( &
00809 'ice_blocksGetNbrID: unknown east boundary')
00810 end select
00811 endif
00812 if (jnbr > nblocks_y) then
00813 select case(jBoundary)
00814 case ('open')
00815 jnbr = 0
00816 case ('closed')
00817 jnbr = 0
00818 case ('cyclic')
00819 jnbr = jnbr - nblocks_y
00820 case ('tripole':'tripoleT')
00821
00822
00823
00824
00825
00826
00827 inbr = nblocks_x - iBlock - 1
00828 if (inbr <= 0) inbr = inbr + nblocks_x
00829 jnbr = -jBlock
00830 case default
00831 call abort_ice( &
00832 'ice_blocksGetNbrID: unknown north boundary')
00833 end select
00834 endif
00835
00836 case (ice_blocksWestNorthWest)
00837
00838 inbr = iBlock - 2
00839 jnbr = jBlock + 1
00840 if (inbr < 1) then
00841 select case(iBoundary)
00842 case ('open')
00843 inbr = 0
00844 case ('closed')
00845 inbr = 0
00846 case ('cyclic')
00847 inbr = nblocks_x + inbr
00848 case default
00849 call abort_ice( &
00850 'ice_blocksGetNbrID: unknown west boundary')
00851 end select
00852 endif
00853 if (jnbr > nblocks_y) then
00854 select case(jBoundary)
00855 case ('open')
00856 jnbr = 0
00857 case ('closed')
00858 jnbr = 0
00859 case ('cyclic')
00860 jnbr = jnbr + nblocks_y
00861 case ('tripole':'tripoleT')
00862
00863
00864
00865
00866
00867
00868 inbr = nblocks_x - iBlock + 3
00869 if (inbr > nblocks_x) inbr = inbr - nblocks_x
00870 jnbr = -jBlock
00871 case default
00872 call abort_ice( &
00873 'ice_blocksGetNbrID: unknown north boundary')
00874 end select
00875 endif
00876
00877 case default
00878
00879 call abort_ice( &
00880 'ice_blocksGetNbrID: unknown direction')
00881 return
00882
00883 end select
00884
00885
00886
00887
00888
00889
00890
00891 if (inbr > 0 .and. jnbr > 0) then
00892 nbrID = all_blocks_ij(inbr,jnbr)
00893 else if (inbr > 0 .and. jnbr < 0) then
00894
00895 nbrID = -all_blocks_ij(inbr,abs(jnbr))
00896 else
00897 nbrID = 0
00898 endif
00899
00900
00901
00902
00903 end function ice_blocksGetNbrID
00904
00905
00906
00907
00908
00909
00910 function get_block(block_id,local_id)
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921 integer (int_kind), intent(in) ::
00922 block_id,
00923 local_id
00924
00925
00926
00927 type (block) ::
00928 get_block
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938 if (block_id < 1 .or. block_id > nblocks_tot) then
00939 call abort_ice('ice: get_block: invalid block_id')
00940 endif
00941
00942 get_block = all_blocks(block_id)
00943 get_block%local_id = local_id
00944
00945
00946
00947
00948 end function get_block
00949
00950
00951
00952
00953
00954
00955 subroutine get_block_parameter(block_id, local_id, &
00956 ilo, ihi, jlo, jhi, &
00957 iblock, jblock, tripole, &
00958 i_glob, j_glob)
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969 integer (int_kind), intent(in) ::
00970 block_id
00971
00972
00973
00974
00975
00976 integer (int_kind), intent(out), optional ::
00977 local_id ,
00978 ilo, ihi, jlo, jhi ,
00979 iblock, jblock
00980
00981 logical (log_kind), intent(out), optional ::
00982 tripole
00983
00984 integer (int_kind), dimension(:), pointer, optional ::
00985 i_glob, j_glob
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995 if (block_id < 1 .or. block_id > nblocks_tot) then
00996 call abort_ice('ice: get_block_parameter: invalid block_id')
00997 endif
00998
00999 if (present(local_id)) local_id = all_blocks(block_id)%local_id
01000 if (present(ilo )) ilo = all_blocks(block_id)%ilo
01001 if (present(ihi )) ihi = all_blocks(block_id)%ihi
01002 if (present(jlo )) jlo = all_blocks(block_id)%jlo
01003 if (present(jhi )) jhi = all_blocks(block_id)%jhi
01004 if (present(iblock )) iblock = all_blocks(block_id)%iblock
01005 if (present(jblock )) jblock = all_blocks(block_id)%jblock
01006 if (present(i_glob )) i_glob => all_blocks(block_id)%i_glob
01007 if (present(j_glob )) j_glob => all_blocks(block_id)%j_glob
01008 if (present(tripole )) tripole = all_blocks(block_id)%tripole
01009
01010
01011
01012
01013 end subroutine get_block_parameter
01014
01015
01016
01017 end module ice_blocks
01018
01019