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/igridgroup_attr.F90

    r556 r567  
    1212   
    1313  SUBROUTINE xios(set_gridgroup_attr)  & 
    14     ( gridgroup_id, axisDomainOrder, description, group_ref, mask, name ) 
     14    ( gridgroup_id, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    1515     
    1616    IMPLICIT NONE 
     
    2121      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description 
    2222      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    23       LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:,:,:) 
    24       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     23      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1(:) 
     24      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     25      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2(:,:) 
     26      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     27      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3(:,:,:) 
     28      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    2529      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    2630       
    2731      CALL xios(get_gridgroup_handle)(gridgroup_id,gridgroup_hdl) 
    2832      CALL xios(set_gridgroup_attr_hdl_)   & 
    29       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     33      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    3034     
    3135  END SUBROUTINE xios(set_gridgroup_attr) 
    3236   
    3337  SUBROUTINE xios(set_gridgroup_attr_hdl)  & 
    34     ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     38    ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    3539     
    3640    IMPLICIT NONE 
     
    4044      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description 
    4145      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref 
    42       LOGICAL  , OPTIONAL, INTENT(IN) :: mask(:,:,:) 
    43       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     46      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1(:) 
     47      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     48      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2(:,:) 
     49      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     50      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3(:,:,:) 
     51      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    4452      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name 
    4553       
    4654      CALL xios(set_gridgroup_attr_hdl_)  & 
    47       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     55      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    4856     
    4957  END SUBROUTINE xios(set_gridgroup_attr_hdl) 
    5058   
    5159  SUBROUTINE xios(set_gridgroup_attr_hdl_)   & 
    52     ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask_, name_ ) 
     60    ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask1_, mask2_, mask3_, name_ ) 
    5361     
    5462    IMPLICIT NONE 
     
    5866      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: description_ 
    5967      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_ 
    60       LOGICAL  , OPTIONAL, INTENT(IN) :: mask_(:,:,:) 
    61       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask__tmp(:,:,:) 
     68      LOGICAL  , OPTIONAL, INTENT(IN) :: mask1_(:) 
     69      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1__tmp(:) 
     70      LOGICAL  , OPTIONAL, INTENT(IN) :: mask2_(:,:) 
     71      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2__tmp(:,:) 
     72      LOGICAL  , OPTIONAL, INTENT(IN) :: mask3_(:,:,:) 
     73      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3__tmp(:,:,:) 
    6274      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: name_ 
    6375       
     
    7688      ENDIF 
    7789       
    78       IF (PRESENT(mask_)) THEN 
    79         ALLOCATE(mask__tmp(size(mask_,1),size(mask_,2),size(mask_,3))) 
    80         mask__tmp=mask_ 
    81         CALL cxios_set_gridgroup_mask(gridgroup_hdl%daddr, mask__tmp,size(mask_,1),size(mask_,2),size(mask_,3)) 
     90      IF (PRESENT(mask1_)) THEN 
     91        ALLOCATE(mask1__tmp(size(mask1_,1))) 
     92        mask1__tmp=mask1_ 
     93        CALL cxios_set_gridgroup_mask1(gridgroup_hdl%daddr, mask1__tmp,size(mask1_,1)) 
     94      ENDIF 
     95       
     96      IF (PRESENT(mask2_)) THEN 
     97        ALLOCATE(mask2__tmp(size(mask2_,1),size(mask2_,2))) 
     98        mask2__tmp=mask2_ 
     99        CALL cxios_set_gridgroup_mask2(gridgroup_hdl%daddr, mask2__tmp,size(mask2_,1),size(mask2_,2)) 
     100      ENDIF 
     101       
     102      IF (PRESENT(mask3_)) THEN 
     103        ALLOCATE(mask3__tmp(size(mask3_,1),size(mask3_,2),size(mask3_,3))) 
     104        mask3__tmp=mask3_ 
     105        CALL cxios_set_gridgroup_mask3(gridgroup_hdl%daddr, mask3__tmp,size(mask3_,1),size(mask3_,2),size(mask3_,3)) 
    82106      ENDIF 
    83107       
     
    91115   
    92116  SUBROUTINE xios(get_gridgroup_attr)  & 
    93     ( gridgroup_id, axisDomainOrder, description, group_ref, mask, name ) 
     117    ( gridgroup_id, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    94118     
    95119    IMPLICIT NONE 
     
    100124      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description 
    101125      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    102       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:,:,:) 
    103       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     126      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1(:) 
     127      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     128      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2(:,:) 
     129      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     130      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3(:,:,:) 
     131      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    104132      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    105133       
    106134      CALL xios(get_gridgroup_handle)(gridgroup_id,gridgroup_hdl) 
    107135      CALL xios(get_gridgroup_attr_hdl_)   & 
    108       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     136      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    109137     
    110138  END SUBROUTINE xios(get_gridgroup_attr) 
    111139   
    112140  SUBROUTINE xios(get_gridgroup_attr_hdl)  & 
    113     ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     141    ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    114142     
    115143    IMPLICIT NONE 
     
    119147      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description 
    120148      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref 
    121       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask(:,:,:) 
    122       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask_tmp(:,:,:) 
     149      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1(:) 
     150      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1_tmp(:) 
     151      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2(:,:) 
     152      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2_tmp(:,:) 
     153      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3(:,:,:) 
     154      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3_tmp(:,:,:) 
    123155      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name 
    124156       
    125157      CALL xios(get_gridgroup_attr_hdl_)  & 
    126       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     158      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    127159     
    128160  END SUBROUTINE xios(get_gridgroup_attr_hdl) 
    129161   
    130162  SUBROUTINE xios(get_gridgroup_attr_hdl_)   & 
    131     ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask_, name_ ) 
     163    ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask1_, mask2_, mask3_, name_ ) 
    132164     
    133165    IMPLICIT NONE 
     
    137169      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: description_ 
    138170      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_ 
    139       LOGICAL  , OPTIONAL, INTENT(OUT) :: mask_(:,:,:) 
    140       LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask__tmp(:,:,:) 
     171      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask1_(:) 
     172      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask1__tmp(:) 
     173      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask2_(:,:) 
     174      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask2__tmp(:,:) 
     175      LOGICAL  , OPTIONAL, INTENT(OUT) :: mask3_(:,:,:) 
     176      LOGICAL (KIND=C_BOOL) , ALLOCATABLE :: mask3__tmp(:,:,:) 
    141177      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: name_ 
    142178       
     
    155191      ENDIF 
    156192       
    157       IF (PRESENT(mask_)) THEN 
    158         ALLOCATE(mask__tmp(size(mask_,1),size(mask_,2),size(mask_,3))) 
    159         CALL cxios_get_gridgroup_mask(gridgroup_hdl%daddr, mask__tmp,size(mask_,1),size(mask_,2),size(mask_,3)) 
    160         mask_=mask__tmp 
     193      IF (PRESENT(mask1_)) THEN 
     194        ALLOCATE(mask1__tmp(size(mask1_,1))) 
     195        CALL cxios_get_gridgroup_mask1(gridgroup_hdl%daddr, mask1__tmp,size(mask1_,1)) 
     196        mask1_=mask1__tmp 
     197      ENDIF 
     198       
     199      IF (PRESENT(mask2_)) THEN 
     200        ALLOCATE(mask2__tmp(size(mask2_,1),size(mask2_,2))) 
     201        CALL cxios_get_gridgroup_mask2(gridgroup_hdl%daddr, mask2__tmp,size(mask2_,1),size(mask2_,2)) 
     202        mask2_=mask2__tmp 
     203      ENDIF 
     204       
     205      IF (PRESENT(mask3_)) THEN 
     206        ALLOCATE(mask3__tmp(size(mask3_,1),size(mask3_,2),size(mask3_,3))) 
     207        CALL cxios_get_gridgroup_mask3(gridgroup_hdl%daddr, mask3__tmp,size(mask3_,1),size(mask3_,2),size(mask3_,3)) 
     208        mask3_=mask3__tmp 
    161209      ENDIF 
    162210       
     
    170218   
    171219  SUBROUTINE xios(is_defined_gridgroup_attr)  & 
    172     ( gridgroup_id, axisDomainOrder, description, group_ref, mask, name ) 
     220    ( gridgroup_id, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    173221     
    174222    IMPLICIT NONE 
     
    181229      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    182230      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
    183       LOGICAL, OPTIONAL, INTENT(OUT) :: mask 
    184       LOGICAL(KIND=C_BOOL) :: mask_tmp 
     231      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1 
     232      LOGICAL(KIND=C_BOOL) :: mask1_tmp 
     233      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2 
     234      LOGICAL(KIND=C_BOOL) :: mask2_tmp 
     235      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3 
     236      LOGICAL(KIND=C_BOOL) :: mask3_tmp 
    185237      LOGICAL, OPTIONAL, INTENT(OUT) :: name 
    186238      LOGICAL(KIND=C_BOOL) :: name_tmp 
     
    188240      CALL xios(get_gridgroup_handle)(gridgroup_id,gridgroup_hdl) 
    189241      CALL xios(is_defined_gridgroup_attr_hdl_)   & 
    190       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     242      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    191243     
    192244  END SUBROUTINE xios(is_defined_gridgroup_attr) 
    193245   
    194246  SUBROUTINE xios(is_defined_gridgroup_attr_hdl)  & 
    195     ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     247    ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    196248     
    197249    IMPLICIT NONE 
     
    203255      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref 
    204256      LOGICAL(KIND=C_BOOL) :: group_ref_tmp 
    205       LOGICAL, OPTIONAL, INTENT(OUT) :: mask 
    206       LOGICAL(KIND=C_BOOL) :: mask_tmp 
     257      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1 
     258      LOGICAL(KIND=C_BOOL) :: mask1_tmp 
     259      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2 
     260      LOGICAL(KIND=C_BOOL) :: mask2_tmp 
     261      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3 
     262      LOGICAL(KIND=C_BOOL) :: mask3_tmp 
    207263      LOGICAL, OPTIONAL, INTENT(OUT) :: name 
    208264      LOGICAL(KIND=C_BOOL) :: name_tmp 
    209265       
    210266      CALL xios(is_defined_gridgroup_attr_hdl_)  & 
    211       ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask, name ) 
     267      ( gridgroup_hdl, axisDomainOrder, description, group_ref, mask1, mask2, mask3, name ) 
    212268     
    213269  END SUBROUTINE xios(is_defined_gridgroup_attr_hdl) 
    214270   
    215271  SUBROUTINE xios(is_defined_gridgroup_attr_hdl_)   & 
    216     ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask_, name_ ) 
     272    ( gridgroup_hdl, axisDomainOrder_, description_, group_ref_, mask1_, mask2_, mask3_, name_ ) 
    217273     
    218274    IMPLICIT NONE 
     
    224280      LOGICAL, OPTIONAL, INTENT(OUT) :: group_ref_ 
    225281      LOGICAL(KIND=C_BOOL) :: group_ref__tmp 
    226       LOGICAL, OPTIONAL, INTENT(OUT) :: mask_ 
    227       LOGICAL(KIND=C_BOOL) :: mask__tmp 
     282      LOGICAL, OPTIONAL, INTENT(OUT) :: mask1_ 
     283      LOGICAL(KIND=C_BOOL) :: mask1__tmp 
     284      LOGICAL, OPTIONAL, INTENT(OUT) :: mask2_ 
     285      LOGICAL(KIND=C_BOOL) :: mask2__tmp 
     286      LOGICAL, OPTIONAL, INTENT(OUT) :: mask3_ 
     287      LOGICAL(KIND=C_BOOL) :: mask3__tmp 
    228288      LOGICAL, OPTIONAL, INTENT(OUT) :: name_ 
    229289      LOGICAL(KIND=C_BOOL) :: name__tmp 
     
    244304      ENDIF 
    245305       
    246       IF (PRESENT(mask_)) THEN 
    247         mask__tmp=cxios_is_defined_gridgroup_mask(gridgroup_hdl%daddr) 
    248         mask_=mask__tmp 
     306      IF (PRESENT(mask1_)) THEN 
     307        mask1__tmp=cxios_is_defined_gridgroup_mask1(gridgroup_hdl%daddr) 
     308        mask1_=mask1__tmp 
     309      ENDIF 
     310       
     311      IF (PRESENT(mask2_)) THEN 
     312        mask2__tmp=cxios_is_defined_gridgroup_mask2(gridgroup_hdl%daddr) 
     313        mask2_=mask2__tmp 
     314      ENDIF 
     315       
     316      IF (PRESENT(mask3_)) THEN 
     317        mask3__tmp=cxios_is_defined_gridgroup_mask3(gridgroup_hdl%daddr) 
     318        mask3_=mask3__tmp 
    249319      ENDIF 
    250320       
Note: See TracChangeset for help on using the changeset viewer.