Ignore:
Timestamp:
03/10/15 10:49:02 (9 years ago)
Author:
mhnguyen
Message:

Implementing a grid formed by only one axis or group of axis

+) Add several new attributes to axis. From now on, each axis can be distributed on client side
+) Modify mask of grid to make it more flexible to different dimension
+) Fix some bugs relating to calculation of local data index on client
+) Clean some redundant codes

Test
+) On Curie, only test_new_features.f90
+) Test cases:

  • Grid composed of: 1 domain and 1 axis, 3 axis, 1 axis
  • Mode: Attached and connected
  • No of client-server: 6-2(Connected), 2 (Attached)

+) All tests passed and results are correct

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/fortran_attr/igrid_attr.F90

    r556 r567  
    1212   
    1313  SUBROUTINE xios(set_grid_attr)  & 
    14     ( grid_id, axisDomainOrder, description, mask, name ) 
     14    ( grid_id, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    1515     
    1616    IMPLICIT NONE 
     
    2020      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder_tmp(:) 
    2121      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description 
    22       LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:,:,:) 
    23       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     22      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1(:) 
     23      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     24      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2(:,:) 
     25      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     26      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3(:,:,:) 
     27      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    2428      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    2529       
    2630      CALL xios(get_grid_handle)(grid_id,grid_hdl) 
    2731      CALL xios(set_grid_attr_hdl_)   & 
    28       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     32      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    2933     
    3034  END SUBROUTINE xios(set_grid_attr) 
    3135   
    3236  SUBROUTINE xios(set_grid_attr_hdl)  & 
    33     ( grid_hdl, axisDomainOrder, description, mask, name ) 
     37    ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    3438     
    3539    IMPLICIT NONE 
     
    3842      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder_tmp(:) 
    3943      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description 
    40       LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:,:,:) 
    41       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     44      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1(:) 
     45      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     46      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2(:,:) 
     47      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     48      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3(:,:,:) 
     49      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    4250      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    4351       
    4452      CALL xios(set_grid_attr_hdl_)  & 
    45       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     53      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    4654     
    4755  END SUBROUTINE xios(set_grid_attr_hdl) 
    4856   
    4957  SUBROUTINE xios(set_grid_attr_hdl_)   & 
    50     ( grid_hdl, axisDomainOrder_, description_, mask_, name_ ) 
     58    ( grid_hdl, axisDomainOrder_, description_, mask1_, mask2_, mask3_, name_ ) 
    5159     
    5260    IMPLICIT NONE 
     
    5563      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder__tmp(:) 
    5664      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description_ 
    57       LOGICAL  , OPTIONAL, INTENT(IN) :: mask_(:,:,:) 
    58       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask__tmp(:,:,:) 
     65      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1_(:) 
     66      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1__tmp(:) 
     67      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2_(:,:) 
     68      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2__tmp(:,:) 
     69      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3_(:,:,:) 
     70      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3__tmp(:,:,:) 
    5971      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
    6072       
     
    6981      ENDIF 
    7082       
    71       IF (PRESENT(mask_)) THEN 
    72         ALLOCATE(mask__tmp(size(mask_,1),size(mask_,2),size(mask_,3))) 
    73         mask__tmp=mask_ 
    74         CALL cxios_set_grid_mask(grid_hdl%daddr, mask__tmp,size(mask_,1),size(mask_,2),size(mask_,3)) 
     83      IF (PRESENT(mask1_)) THEN 
     84        ALLOCATE(mask1__tmp(size(mask1_,1))) 
     85        mask1__tmp=mask1_ 
     86        CALL cxios_set_grid_mask1(grid_hdl%daddr, mask1__tmp,size(mask1_,1)) 
     87      ENDIF 
     88       
     89      IF (PRESENT(mask2_)) THEN 
     90        ALLOCATE(mask2__tmp(size(mask2_,1),size(mask2_,2))) 
     91        mask2__tmp=mask2_ 
     92        CALL cxios_set_grid_mask2(grid_hdl%daddr, mask2__tmp,size(mask2_,1),size(mask2_,2)) 
     93      ENDIF 
     94       
     95      IF (PRESENT(mask3_)) THEN 
     96        ALLOCATE(mask3__tmp(size(mask3_,1),size(mask3_,2),size(mask3_,3))) 
     97        mask3__tmp=mask3_ 
     98        CALL cxios_set_grid_mask3(grid_hdl%daddr, mask3__tmp,size(mask3_,1),size(mask3_,2),size(mask3_,3)) 
    7599      ENDIF 
    76100       
     
    84108   
    85109  SUBROUTINE xios(get_grid_attr)  & 
    86     ( grid_id, axisDomainOrder, description, mask, name ) 
     110    ( grid_id, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    87111     
    88112    IMPLICIT NONE 
     
    92116      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder_tmp(:) 
    93117      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description 
    94       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:,:,:) 
    95       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     118      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1(:) 
     119      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     120      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2(:,:) 
     121      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     122      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3(:,:,:) 
     123      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    96124      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    97125       
    98126      CALL xios(get_grid_handle)(grid_id,grid_hdl) 
    99127      CALL xios(get_grid_attr_hdl_)   & 
    100       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     128      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    101129     
    102130  END SUBROUTINE xios(get_grid_attr) 
    103131   
    104132  SUBROUTINE xios(get_grid_attr_hdl)  & 
    105     ( grid_hdl, axisDomainOrder, description, mask, name ) 
     133    ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    106134     
    107135    IMPLICIT NONE 
     
    110138      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder_tmp(:) 
    111139      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description 
    112       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:,:,:) 
    113       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     140      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1(:) 
     141      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     142      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2(:,:) 
     143      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     144      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3(:,:,:) 
     145      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    114146      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    115147       
    116148      CALL xios(get_grid_attr_hdl_)  & 
    117       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     149      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    118150     
    119151  END SUBROUTINE xios(get_grid_attr_hdl) 
    120152   
    121153  SUBROUTINE xios(get_grid_attr_hdl_)   & 
    122     ( grid_hdl, axisDomainOrder_, description_, mask_, name_ ) 
     154    ( grid_hdl, axisDomainOrder_, description_, mask1_, mask2_, mask3_, name_ ) 
    123155     
    124156    IMPLICIT NONE 
     
    127159      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: axisDomainOrder__tmp(:) 
    128160      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description_ 
    129       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask_(:,:,:) 
    130       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask__tmp(:,:,:) 
     161      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1_(:) 
     162      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1__tmp(:) 
     163      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2_(:,:) 
     164      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2__tmp(:,:) 
     165      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3_(:,:,:) 
     166      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3__tmp(:,:,:) 
    131167      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
    132168       
     
    141177      ENDIF 
    142178       
    143       IF (PRESENT(mask_)) THEN 
    144         ALLOCATE(mask__tmp(size(mask_,1),size(mask_,2),size(mask_,3))) 
    145         CALL cxios_get_grid_mask(grid_hdl%daddr, mask__tmp,size(mask_,1),size(mask_,2),size(mask_,3)) 
    146         mask_=mask__tmp 
     179      IF (PRESENT(mask1_)) THEN 
     180        ALLOCATE(mask1__tmp(size(mask1_,1))) 
     181        CALL cxios_get_grid_mask1(grid_hdl%daddr, mask1__tmp,size(mask1_,1)) 
     182        mask1_=mask1__tmp 
     183      ENDIF 
     184       
     185      IF (PRESENT(mask2_)) THEN 
     186        ALLOCATE(mask2__tmp(size(mask2_,1),size(mask2_,2))) 
     187        CALL cxios_get_grid_mask2(grid_hdl%daddr, mask2__tmp,size(mask2_,1),size(mask2_,2)) 
     188        mask2_=mask2__tmp 
     189      ENDIF 
     190       
     191      IF (PRESENT(mask3_)) THEN 
     192        ALLOCATE(mask3__tmp(size(mask3_,1),size(mask3_,2),size(mask3_,3))) 
     193        CALL cxios_get_grid_mask3(grid_hdl%daddr, mask3__tmp,size(mask3_,1),size(mask3_,2),size(mask3_,3)) 
     194        mask3_=mask3__tmp 
    147195      ENDIF 
    148196       
     
    156204   
    157205  SUBROUTINE xios(is_defined_grid_attr)  & 
    158     ( grid_id, axisDomainOrder, description, mask, name ) 
     206    ( grid_id, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    159207     
    160208    IMPLICIT NONE 
     
    165213      LOGICAL, OPTIONAL, INTENT(OUT) :: description 
    166214      LOGICAL(KIND=C_BOOL) :: description_tmp 
    167       LOGICAL, OPTIONAL, INTENT(OUT) :: mask 
    168       LOGICAL(KIND=C_BOOL) :: mask_tmp 
     215      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1 
     216      LOGICAL(KIND=C_BOOL) :: mask1_tmp 
     217      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2 
     218      LOGICAL(KIND=C_BOOL) :: mask2_tmp 
     219      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3 
     220      LOGICAL(KIND=C_BOOL) :: mask3_tmp 
    169221      LOGICAL, OPTIONAL, INTENT(OUT) :: name 
    170222      LOGICAL(KIND=C_BOOL) :: name_tmp 
     
    172224      CALL xios(get_grid_handle)(grid_id,grid_hdl) 
    173225      CALL xios(is_defined_grid_attr_hdl_)   & 
    174       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     226      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    175227     
    176228  END SUBROUTINE xios(is_defined_grid_attr) 
    177229   
    178230  SUBROUTINE xios(is_defined_grid_attr_hdl)  & 
    179     ( grid_hdl, axisDomainOrder, description, mask, name ) 
     231    ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    180232     
    181233    IMPLICIT NONE 
     
    185237      LOGICAL, OPTIONAL, INTENT(OUT) :: description 
    186238      LOGICAL(KIND=C_BOOL) :: description_tmp 
    187       LOGICAL, OPTIONAL, INTENT(OUT) :: mask 
    188       LOGICAL(KIND=C_BOOL) :: mask_tmp 
     239      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1 
     240      LOGICAL(KIND=C_BOOL) :: mask1_tmp 
     241      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2 
     242      LOGICAL(KIND=C_BOOL) :: mask2_tmp 
     243      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3 
     244      LOGICAL(KIND=C_BOOL) :: mask3_tmp 
    189245      LOGICAL, OPTIONAL, INTENT(OUT) :: name 
    190246      LOGICAL(KIND=C_BOOL) :: name_tmp 
    191247       
    192248      CALL xios(is_defined_grid_attr_hdl_)  & 
    193       ( grid_hdl, axisDomainOrder, description, mask, name ) 
     249      ( grid_hdl, axisDomainOrder, description, mask1, mask2, mask3, name ) 
    194250     
    195251  END SUBROUTINE xios(is_defined_grid_attr_hdl) 
    196252   
    197253  SUBROUTINE xios(is_defined_grid_attr_hdl_)   & 
    198     ( grid_hdl, axisDomainOrder_, description_, mask_, name_ ) 
     254    ( grid_hdl, axisDomainOrder_, description_, mask1_, mask2_, mask3_, name_ ) 
    199255     
    200256    IMPLICIT NONE 
     
    204260      LOGICAL, OPTIONAL, INTENT(OUT) :: description_ 
    205261      LOGICAL(KIND=C_BOOL) :: description__tmp 
    206       LOGICAL, OPTIONAL, INTENT(OUT) :: mask_ 
    207       LOGICAL(KIND=C_BOOL) :: mask__tmp 
     262      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1_ 
     263      LOGICAL(KIND=C_BOOL) :: mask1__tmp 
     264      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2_ 
     265      LOGICAL(KIND=C_BOOL) :: mask2__tmp 
     266      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3_ 
     267      LOGICAL(KIND=C_BOOL) :: mask3__tmp 
    208268      LOGICAL, OPTIONAL, INTENT(OUT) :: name_ 
    209269      LOGICAL(KIND=C_BOOL) :: name__tmp 
     
    219279      ENDIF 
    220280       
    221       IF (PRESENT(mask_)) THEN 
    222         mask__tmp=cxios_is_defined_grid_mask(grid_hdl%daddr) 
    223         mask_=mask__tmp 
     281      IF (PRESENT(mask1_)) THEN 
     282        mask1__tmp=cxios_is_defined_grid_mask1(grid_hdl%daddr) 
     283        mask1_=mask1__tmp 
     284      ENDIF 
     285       
     286      IF (PRESENT(mask2_)) THEN 
     287        mask2__tmp=cxios_is_defined_grid_mask2(grid_hdl%daddr) 
     288        mask2_=mask2__tmp 
     289      ENDIF 
     290       
     291      IF (PRESENT(mask3_)) THEN 
     292        mask3__tmp=cxios_is_defined_grid_mask3(grid_hdl%daddr) 
     293        mask3_=mask3__tmp 
    224294      ENDIF 
    225295       
Note: See TracChangeset for help on using the changeset viewer.