Changeset 3593 for branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY
- Timestamp:
- 2012-11-19T12:48:28+01:00 (12 years ago)
- Location:
- branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn2d.F90
r3294 r3593 5 5 !!====================================================================== 6 6 !! History : 3.4 ! 2011 (D. Storkey) new module as part of BDY rewrite 7 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Optimization of BDY communications 7 8 !!---------------------------------------------------------------------- 8 9 #if defined key_bdy … … 51 52 CYCLE 52 53 CASE(jp_frs) 53 CALL bdy_dyn2d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy) )54 CALL bdy_dyn2d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 54 55 CASE(jp_flather) 55 CALL bdy_dyn2d_fla( idx_bdy(ib_bdy), dta_bdy(ib_bdy) )56 CALL bdy_dyn2d_fla( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 56 57 CASE DEFAULT 57 58 CALL ctl_stop( 'bdy_dyn2d : unrecognised option for open boundaries for barotropic variables' ) … … 61 62 END SUBROUTINE bdy_dyn2d 62 63 63 SUBROUTINE bdy_dyn2d_frs( idx, dta )64 SUBROUTINE bdy_dyn2d_frs( idx, dta, ib_bdy ) 64 65 !!---------------------------------------------------------------------- 65 66 !! *** SUBROUTINE bdy_dyn2d_frs *** … … 74 75 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 75 76 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 77 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 76 78 !! 77 79 INTEGER :: jb, jk ! dummy loop indices … … 97 99 pv2d(ii,ij) = ( pv2d(ii,ij) + zwgt * ( dta%v2d(jb) - pv2d(ii,ij) ) ) * vmask(ii,ij,1) 98 100 END DO 99 CALL lbc_ lnk( pu2d, 'U', -1.)100 CALL lbc_ lnk( pv2d, 'V', -1.) ! Boundary points should be updated101 CALL lbc_bdy_lnk( pu2d, 'U', -1., ib_bdy ) 102 CALL lbc_bdy_lnk( pv2d, 'V', -1., ib_bdy) ! Boundary points should be updated 101 103 ! 102 104 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_frs') … … 106 108 107 109 108 SUBROUTINE bdy_dyn2d_fla( idx, dta )110 SUBROUTINE bdy_dyn2d_fla( idx, dta, ib_bdy ) 109 111 !!---------------------------------------------------------------------- 110 112 !! *** SUBROUTINE bdy_dyn2d_fla *** … … 127 129 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 128 130 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 131 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 129 132 130 133 INTEGER :: jb, igrd ! dummy loop indices … … 177 180 pv2d(ii,ij) = zforc + zcorr * vmask(ii,ij,1) 178 181 END DO 179 CALL lbc_ lnk( pu2d, 'U', -1.) ! Boundary points should be updated180 CALL lbc_ lnk( pv2d, 'V', -1.) !182 CALL lbc_bdy_lnk( pu2d, 'U', -1., ib_bdy ) ! Boundary points should be updated 183 CALL lbc_bdy_lnk( pv2d, 'V', -1., ib_bdy ) ! 181 184 ! 182 185 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_fla') -
branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90
r3294 r3593 5 5 !!====================================================================== 6 6 !! History : 3.4 ! 2011 (D. Storkey) new module as part of BDY rewrite 7 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Optimization of BDY communications 7 8 !!---------------------------------------------------------------------- 8 9 #if defined key_bdy … … 54 55 CYCLE 55 56 CASE(jp_frs) 56 CALL bdy_dyn3d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt )57 CALL bdy_dyn3d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 57 58 CASE DEFAULT 58 59 CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' ) … … 62 63 END SUBROUTINE bdy_dyn3d 63 64 64 SUBROUTINE bdy_dyn3d_frs( idx, dta, kt )65 SUBROUTINE bdy_dyn3d_frs( idx, dta, kt, ib_bdy ) 65 66 !!---------------------------------------------------------------------- 66 67 !! *** SUBROUTINE bdy_dyn3d_frs *** … … 76 77 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 77 78 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 79 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 78 80 !! 79 81 INTEGER :: jb, jk ! dummy loop indices … … 103 105 END DO 104 106 END DO 105 CALL lbc_ lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1.) ! Boundary points should be updated107 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ; CALL lbc_bdy_lnk( va, 'V', -1.,ib_bdy ) ! Boundary points should be updated 106 108 ! 107 109 IF( kt .eq. nit000 ) CLOSE( unit = 102 ) -
branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim2.F90
r3347 r3593 6 6 !! History : 3.3 ! 2010-09 (D. Storkey) Original code 7 7 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 8 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Optimization of BDY communications 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy && defined key_lim2 … … 53 54 CYCLE 54 55 CASE(jp_frs) 55 CALL bdy_ice_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy) )56 CALL bdy_ice_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 56 57 CASE DEFAULT 57 58 CALL ctl_stop( 'bdy_ice_lim_2 : unrecognised option for open boundaries for ice fields' ) … … 61 62 END SUBROUTINE bdy_ice_lim_2 62 63 63 SUBROUTINE bdy_ice_frs( idx, dta )64 SUBROUTINE bdy_ice_frs( idx, dta, ib_bdy ) 64 65 !!------------------------------------------------------------------------------ 65 66 !! *** SUBROUTINE bdy_ice_frs *** … … 73 74 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 74 75 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 76 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 75 77 !! 76 78 INTEGER :: jb, jk, jgrd ! dummy loop indices … … 94 96 END DO 95 97 END DO 96 CALL lbc_ lnk( frld, 'T', 1.) ! lateral boundary conditions97 CALL lbc_ lnk( hicif, 'T', 1. ) ; CALL lbc_lnk( hsnif, 'T', 1.)98 CALL lbc_bdy_lnk( frld, 'T', 1., ib_bdy ) ! lateral boundary conditions 99 CALL lbc_bdy_lnk( hicif, 'T', 1., ib_bdy ) ; CALL lbc_bdy_lnk( hsnif, 'T', 1., ib_bdy ) 98 100 ! 99 101 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') -
branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r3424 r3593 11 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 12 12 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 13 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Updates for the 14 !! optimization of BDY communications 13 15 !!---------------------------------------------------------------------- 14 16 #if defined key_bdy … … 76 78 CHARACTER(LEN=80),DIMENSION(jpbgrd) :: clfile 77 79 CHARACTER(LEN=1),DIMENSION(jpbgrd) :: cgrid 80 INTEGER :: com_east, com_west, com_south, com_north ! Flags for boundaries sending 81 INTEGER :: com_east_b, com_west_b, com_south_b, com_north_b ! Flags for boundaries receiving 82 INTEGER :: iw_b(4), ie_b(4), is_b(4), in_b(4) ! Arrays for neighbours coordinates 83 78 84 !! 79 85 NAMELIST/nambdy/ nb_bdy, ln_coords_file, cn_coords_file, & … … 543 549 in = mjg(1) + nlcj-1 - 1 ! if monotasking and no zoom, in=jpjm1 544 550 551 ALLOCATE( nbondi_bdy(nb_bdy)) 552 ALLOCATE( nbondj_bdy(nb_bdy)) 553 nbondi_bdy(:)=2 554 nbondj_bdy(:)=2 555 ALLOCATE( nbondi_bdy_b(nb_bdy)) 556 ALLOCATE( nbondj_bdy_b(nb_bdy)) 557 nbondi_bdy_b(:)=2 558 nbondj_bdy_b(:)=2 559 560 ! Work out dimensions of boundary data on each neighbour process 561 IF(nbondi .eq. 0) THEN 562 iw_b(1) = jpizoom + nimppt(nowe+1) 563 ie_b(1) = jpizoom + nimppt(nowe+1)+nlcit(nowe+1)-3 564 is_b(1) = jpjzoom + njmppt(nowe+1) 565 in_b(1) = jpjzoom + njmppt(nowe+1)+nlcjt(nowe+1)-3 566 567 iw_b(2) = jpizoom + nimppt(noea+1) 568 ie_b(2) = jpizoom + nimppt(noea+1)+nlcit(noea+1)-3 569 is_b(2) = jpjzoom + njmppt(noea+1) 570 in_b(2) = jpjzoom + njmppt(noea+1)+nlcjt(noea+1)-3 571 ELSEIF(nbondi .eq. 1) THEN 572 iw_b(1) = jpizoom + nimppt(nowe+1) 573 ie_b(1) = jpizoom + nimppt(nowe+1)+nlcit(nowe+1)-3 574 is_b(1) = jpjzoom + njmppt(nowe+1) 575 in_b(1) = jpjzoom + njmppt(nowe+1)+nlcjt(nowe+1)-3 576 ELSEIF(nbondi .eq. -1) THEN 577 iw_b(2) = jpizoom + nimppt(noea+1) 578 ie_b(2) = jpizoom + nimppt(noea+1)+nlcit(noea+1)-3 579 is_b(2) = jpjzoom + njmppt(noea+1) 580 in_b(2) = jpjzoom + njmppt(noea+1)+nlcjt(noea+1)-3 581 ENDIF 582 583 IF(nbondj .eq. 0) THEN 584 iw_b(3) = jpizoom + nimppt(noso+1) 585 ie_b(3) = jpizoom + nimppt(noso+1)+nlcit(noso+1)-3 586 is_b(3) = jpjzoom + njmppt(noso+1) 587 in_b(3) = jpjzoom + njmppt(noso+1)+nlcjt(noso+1)-3 588 589 iw_b(4) = jpizoom + nimppt(nono+1) 590 ie_b(4) = jpizoom + nimppt(nono+1)+nlcit(nono+1)-3 591 is_b(4) = jpjzoom + njmppt(nono+1) 592 in_b(4) = jpjzoom + njmppt(nono+1)+nlcjt(nono+1)-3 593 ELSEIF(nbondj .eq. 1) THEN 594 iw_b(3) = jpizoom + nimppt(noso+1) 595 ie_b(3) = jpizoom + nimppt(noso+1)+nlcit(noso+1)-3 596 is_b(3) = jpjzoom + njmppt(noso+1) 597 in_b(3) = jpjzoom + njmppt(noso+1)+nlcjt(noso+1)-3 598 ELSEIF(nbondj .eq. -1) THEN 599 iw_b(4) = jpizoom + nimppt(nono+1) 600 ie_b(4) = jpizoom + nimppt(nono+1)+nlcit(nono+1)-3 601 is_b(4) = jpjzoom + njmppt(nono+1) 602 in_b(4) = jpjzoom + njmppt(nono+1)+nlcjt(nono+1)-3 603 ENDIF 604 545 605 DO ib_bdy = 1, nb_bdy 546 606 DO igrd = 1, jpbgrd … … 585 645 ! ----------------------------------------------------------------- 586 646 647 com_east = 0 648 com_west = 0 649 com_south = 0 650 com_north = 0 651 652 com_east_b = 0 653 com_west_b = 0 654 com_south_b = 0 655 com_north_b = 0 587 656 DO igrd = 1, jpbgrd 588 657 icount = 0 … … 598 667 idx_bdy(ib_bdy)%nbi(icount,igrd) = nbidta(ib,igrd,ib_bdy)- mig(1)+1 599 668 idx_bdy(ib_bdy)%nbj(icount,igrd) = nbjdta(ib,igrd,ib_bdy)- mjg(1)+1 669 ! check if point has to be sent 670 ii = idx_bdy(ib_bdy)%nbi(icount,igrd) 671 ij = idx_bdy(ib_bdy)%nbj(icount,igrd) 672 if((com_east .ne. 1) .and. (ii .eq. (nlci-1)) .and. (nbondi .le. 0)) then 673 com_east = 1 674 elseif((com_west .ne. 1) .and. (ii .eq. 2) .and. (nbondi .ge. 0) .and. (nbondi .ne. 2)) then 675 com_west = 1 676 endif 677 if((com_south .ne. 1) .and. (ij .eq. 2) .and. (nbondj .ge. 0) .and. (nbondj .ne. 2)) then 678 com_south = 1 679 elseif((com_north .ne. 1) .and. (ij .eq. (nlcj-1)) .and. (nbondj .le. 0)) then 680 com_north = 1 681 endif 600 682 idx_bdy(ib_bdy)%nbr(icount,igrd) = nbrdta(ib,igrd,ib_bdy) 601 683 idx_bdy(ib_bdy)%nbmap(icount,igrd) = ib 602 684 ENDIF 685 ! check if point has to be received from a neighbour 686 IF(nbondi .eq. 0) THEN 687 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND. & 688 & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND. & 689 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 690 ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 691 if((com_west_b .ne. 1) .and. (ii .eq. (nlcit(nowe+1)-1))) then 692 ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 693 if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 694 com_south = 1 695 elseif((ij .eq. nlcjt(nowe+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 696 com_north = 1 697 endif 698 com_west_b = 1 699 endif 700 ENDIF 701 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND. & 702 & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND. & 703 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 704 ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 705 if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 706 ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 707 if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 708 com_south = 1 709 elseif((ij .eq. nlcjt(noea+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 710 com_north = 1 711 endif 712 com_east_b = 1 713 endif 714 ENDIF 715 ELSEIF(nbondi .eq. 1) THEN 716 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(1) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(1) .AND. & 717 & nbjdta(ib,igrd,ib_bdy) >= is_b(1) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(1) .AND. & 718 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 719 ii = nbidta(ib,igrd,ib_bdy)- iw_b(1)+2 720 if((com_west_b .ne. 1) .and. (ii .eq. (nlcit(nowe+1)-1))) then 721 ij = nbjdta(ib,igrd,ib_bdy) - is_b(1)+2 722 if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 723 com_south = 1 724 elseif((ij .eq. nlcjt(nowe+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 725 com_north = 1 726 endif 727 com_west_b = 1 728 endif 729 ENDIF 730 ELSEIF(nbondi .eq. -1) THEN 731 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(2) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(2) .AND. & 732 & nbjdta(ib,igrd,ib_bdy) >= is_b(2) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(2) .AND. & 733 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 734 ii = nbidta(ib,igrd,ib_bdy)- iw_b(2)+2 735 if((com_east_b .ne. 1) .and. (ii .eq. 2)) then 736 ij = nbjdta(ib,igrd,ib_bdy) - is_b(2)+2 737 if((ij .eq. 2) .and. (nbondj .eq. 0 .or. nbondj .eq. 1)) then 738 com_south = 1 739 elseif((ij .eq. nlcjt(noea+1)-1) .and. (nbondj .eq. 0 .or. nbondj .eq. -1)) then 740 com_north = 1 741 endif 742 com_east_b = 1 743 endif 744 ENDIF 745 ENDIF 746 IF(nbondj .eq. 0) THEN 747 IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1 .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 748 & nbjdta(ib,igrd,ib_bdy) == is_b(4) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 749 com_north_b = 1 750 ENDIF 751 IF(com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1 .OR. nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 752 & nbjdta(ib,igrd,ib_bdy) == in_b(3) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 753 com_south_b = 1 754 ENDIF 755 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(3) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(3) .AND. & 756 & nbjdta(ib,igrd,ib_bdy) >= is_b(3) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(3) .AND. & 757 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 758 ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 759 if((com_south_b .ne. 1) .and. (ij .eq. (nlcjt(noso+1)-1))) then 760 com_south_b = 1 761 endif 762 ENDIF 763 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(4) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(4) .AND. & 764 & nbjdta(ib,igrd,ib_bdy) >= is_b(4) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(4) .AND. & 765 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 766 ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 767 if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 768 com_north_b = 1 769 endif 770 ENDIF 771 ELSEIF(nbondj .eq. 1) THEN 772 IF(com_south_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(3)-1 .OR. nbidta(ib,igrd,ib_bdy) == ie_b(3)+1) .AND. & 773 & nbjdta(ib,igrd,ib_bdy) == in_b(3) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 774 com_south_b = 1 775 ENDIF 776 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(3) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(3) .AND. & 777 & nbjdta(ib,igrd,ib_bdy) >= is_b(3) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(3) .AND. & 778 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 779 ij = nbjdta(ib,igrd,ib_bdy)- is_b(3)+2 780 if((com_south_b .ne. 1) .and. (ij .eq. (nlcjt(noso+1)-1))) then 781 com_south_b = 1 782 endif 783 ENDIF 784 ELSEIF(nbondj .eq. -1) THEN 785 IF(com_north_b .ne. 1 .AND. (nbidta(ib,igrd,ib_bdy) == iw_b(4)-1 .OR. nbidta(ib,igrd,ib_bdy) == ie_b(4)+1) .AND. & 786 & nbjdta(ib,igrd,ib_bdy) == is_b(4) .AND. nbrdta(ib,igrd,ib_bdy) == ir) THEN 787 com_north_b = 1 788 ENDIF 789 IF( nbidta(ib,igrd,ib_bdy) >= iw_b(4) .AND. nbidta(ib,igrd,ib_bdy) <= ie_b(4) .AND. & 790 & nbjdta(ib,igrd,ib_bdy) >= is_b(4) .AND. nbjdta(ib,igrd,ib_bdy) <= in_b(4) .AND. & 791 & nbrdta(ib,igrd,ib_bdy) == ir ) THEN 792 ij = nbjdta(ib,igrd,ib_bdy)- is_b(4)+2 793 if((com_north_b .ne. 1) .and. (ij .eq. 2)) then 794 com_north_b = 1 795 endif 796 ENDIF 797 ENDIF 603 798 ENDDO 604 799 ENDDO 605 800 ENDDO 801 ! definition of the i- and j- direction local boundaries arrays 802 ! used for sending the boudaries 803 IF((com_east .eq. 1) .and. (com_west .eq. 1)) THEN 804 nbondi_bdy(ib_bdy) = 0 805 ELSEIF ((com_east .eq. 1) .and. (com_west .eq. 0)) THEN 806 nbondi_bdy(ib_bdy) = -1 807 ELSEIF ((com_east .eq. 0) .and. (com_west .eq. 1)) THEN 808 nbondi_bdy(ib_bdy) = 1 809 ENDIF 810 811 IF((com_north .eq. 1) .and. (com_south .eq. 1)) THEN 812 nbondj_bdy(ib_bdy) = 0 813 ELSEIF ((com_north .eq. 1) .and. (com_south .eq. 0)) THEN 814 nbondj_bdy(ib_bdy) = -1 815 ELSEIF ((com_north .eq. 0) .and. (com_south .eq. 1)) THEN 816 nbondj_bdy(ib_bdy) = 1 817 ENDIF 818 819 ! definition of the i- and j- direction local boundaries arrays 820 ! used for receiving the boudaries 821 IF((com_east_b .eq. 1) .and. (com_west_b .eq. 1)) THEN 822 nbondi_bdy_b(ib_bdy) = 0 823 ELSEIF ((com_east_b .eq. 1) .and. (com_west_b .eq. 0)) THEN 824 nbondi_bdy_b(ib_bdy) = -1 825 ELSEIF ((com_east_b .eq. 0) .and. (com_west_b .eq. 1)) THEN 826 nbondi_bdy_b(ib_bdy) = 1 827 ENDIF 828 829 IF((com_north_b .eq. 1) .and. (com_south_b .eq. 1)) THEN 830 nbondj_bdy_b(ib_bdy) = 0 831 ELSEIF ((com_north_b .eq. 1) .and. (com_south_b .eq. 0)) THEN 832 nbondj_bdy_b(ib_bdy) = -1 833 ELSEIF ((com_north_b .eq. 0) .and. (com_south_b .eq. 1)) THEN 834 nbondj_bdy_b(ib_bdy) = 1 835 ENDIF 606 836 607 837 ! Compute rim weights for FRS scheme -
branches/2012/dev_CMCC_2012/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90
r3294 r3593 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 8 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 9 !! 3.5 ! 2012 (S. Mocavero, I. Epicoco) Optimization of BDY communications 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_bdy … … 52 53 CYCLE 53 54 CASE(jp_frs) 54 CALL bdy_tra_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt )55 CALL bdy_tra_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 55 56 CASE DEFAULT 56 57 CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) … … 60 61 END SUBROUTINE bdy_tra 61 62 62 SUBROUTINE bdy_tra_frs( idx, dta, kt )63 SUBROUTINE bdy_tra_frs( idx, dta, kt, ib_bdy ) 63 64 !!---------------------------------------------------------------------- 64 65 !! *** SUBROUTINE bdy_tra_frs *** … … 71 72 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 72 73 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 74 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 73 75 !! 74 76 REAL(wp) :: zwgt ! boundary weight … … 89 91 END DO 90 92 END DO 91 ! 92 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. ) ; CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. ) ! Boundary points should be updated 93 CALL lbc_bdy_lnk( tsa(:,:,:,jp_tem), 'T', 1., ib_bdy ) ; CALL lbc_bdy_lnk( tsa(:,:,:,jp_sal), 'T', 1., ib_bdy ) ! Boundary points should be updated 93 94 ! 94 95 IF( kt .eq. nit000 ) CLOSE( unit = 102 )
Note: See TracChangeset
for help on using the changeset viewer.