Ignore:
Timestamp:
03/02/17 10:42:39 (7 years ago)
Author:
mhnguyen
Message:

Auto-distribution of unstructured grid read from a file.

+ Unstructured grid read from a file is now distributed automatically among clients if there is
no distribution information provided.
+ Attributes of grid can be setup: From model (highest priority), from file (reading), or auto-generation (lowest priority).
If an attribute can be setup by several ways, it will be setup by one with the higher priority.

Test
+ On Curie
+ Tests pass

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/test/test_remap.f90

    r1018 r1064  
    1616  TYPE(xios_context) :: ctx_hdl 
    1717 
    18   DOUBLE PRECISION,ALLOCATABLE :: src_lon(:), dst_lon(:) 
    19   DOUBLE PRECISION,ALLOCATABLE :: src_lat(:), dst_lat(:) 
     18  DOUBLE PRECISION,ALLOCATABLE :: src_lon(:), dst_lon(:), src_lon_tmp(:) 
     19  DOUBLE PRECISION,ALLOCATABLE :: src_lat(:), dst_lat(:), src_lat_tmp(:) 
    2020  DOUBLE PRECISION,ALLOCATABLE :: src_boundslon(:,:), dst_boundslon(:,:) 
    2121  DOUBLE PRECISION,ALLOCATABLE :: src_boundslat(:,:), dst_boundslat(:,:) 
    22   DOUBLE PRECISION,ALLOCATABLE :: src_field_2D(:) 
     22  DOUBLE PRECISION,ALLOCATABLE :: src_field_2D(:), src_field_2D_clone(:) 
    2323  DOUBLE PRECISION,ALLOCATABLE :: tmp_field_0(:), tmp_field_1(:), tmp_field_2(:) 
    2424  DOUBLE PRECISION,ALLOCATABLE :: src_field_3D(:,:), src_field_4D(:,:,:), lval(:), lval1(:), lval2(:), src_field_pression(:,:) 
     
    3636  INTEGER :: varid 
    3737  INTEGER :: ts 
    38   INTEGER :: i 
     38  INTEGER :: i,j 
    3939  INTEGER,PARAMETER :: llm=5, interpolatedLlm = 4, llm2 = 6 
     40  DOUBLE PRECISION, PARAMETER :: missing_value = 100000 
    4041 
    4142  CALL MPI_INIT(ierr) 
     
    6465  ENDIF 
    6566 
    66   ALLOCATE(src_lon(src_ni)) 
    67   ALLOCATE(src_lat(src_ni)) 
     67  ALLOCATE(src_lon(src_ni), src_lon_tmp(src_ni)) 
     68  ALLOCATE(src_lat(src_ni), src_lat_tmp(src_ni)) 
    6869  ALLOCATE(src_boundslon(src_nvertex,src_ni)) 
    6970  ALLOCATE(src_boundslat(src_nvertex,src_ni)) 
    70   ALLOCATE(src_field_2D(src_ni)) 
     71  ALLOCATE(src_field_2D(src_ni), src_field_2D_clone(src_ni)) 
    7172  ALLOCATE(src_field_3D(src_ni,llm)) 
    7273  ALLOCATE(src_field_4D(src_ni,llm,llm2)) 
     
    8990  DO i=1,src_ni 
    9091    src_field_3D(i,:) = src_field_2D(i) 
    91     IF (MOD(i,10)==0) THEN 
     92    IF ((23.5 < src_lat(i)) .AND. (src_lat(i) < 65.5) .AND. (0 < src_lon(i)) .AND. (src_lon(i) < 30)) THEN 
    9293      src_mask_2D(i)=.FALSE. 
    93       src_field_2D(i) = 100000 
     94      src_field_2D(i) = missing_value 
    9495    ELSE 
    9596      src_mask_2D(i)=.TRUE.       
    9697    ENDIF 
    97   ENDDO 
     98    src_lon_tmp(i) = src_lon(i) + 1000 
     99    src_lat_tmp(i) = src_lat(i) + 10000 
     100  ENDDO 
     101  src_field_2D_clone = src_field_2D 
    98102 
    99103  DO i=1,llm 
     
    101105    src_field_pression(:,i) = i * 100 
    102106    IF (MOD(i,3)==0) THEN 
    103       ! src_field_pression(:,i) = 100000 
    104       src_field_3D(:,i) = 100000 
     107      ! src_field_pression(:,i) = missing_value 
     108      src_field_3D(:,i) = missing_value 
    105109    ELSE 
    106110      ! src_field_pression(:,i) = i * 100 
     
    170174                            bounds_lon_1D=dst_boundslon, bounds_lat_1D=dst_boundslat, nvertex=dst_nvertex) 
    171175 
     176  CALL xios_set_domain_attr("src_domain_unstructured_read", ni_glo=src_ni_glo, ibegin=src_ibegin, ni=src_ni, type="unstructured") 
     177  CALL xios_set_domain_attr("src_domain_unstructured_read", lonvalue_1D=src_lon_tmp, latvalue_1D=src_lat_tmp, & 
     178                            bounds_lon_1D=src_boundslon, bounds_lat_1D=src_boundslat, nvertex=src_nvertex) 
     179 
     180 
    172181  dtime%second = 3600 
    173182  CALL xios_set_timestep(dtime) 
    174183 
    175184  CALL xios_close_context_definition() 
    176   ! CALL xios_get_domain_attr("src_domain_regular_read", ni=src_tmp_ni, nj=src_tmp_nj) 
    177   ! ALLOCATE(tmp_field_0(src_tmp_ni*src_tmp_nj)) 
    178  
    179   ! CALL xios_get_axis_attr("src_axis_curvilinear_read", n=src_tmp_n) 
    180   ! CALL xios_get_domain_attr("src_domain_curvilinear_read", ni=src_tmp_ni, nj=src_tmp_nj) 
    181   ! ALLOCATE(tmp_field_1(src_tmp_ni*src_tmp_nj*src_tmp_n)) 
    182  
    183   ! CALL xios_get_domain_attr("src_domain_unstructured_read", ni=src_tmp_ni, nj=src_tmp_nj) 
    184   ! ALLOCATE(tmp_field_2(src_tmp_ni*src_tmp_nj)) 
    185  
    186   DO ts=1,5 
    187     ! CALL xios_recv_field("src_field_regular", tmp_field_0) 
    188     ! CALL xios_recv_field("src_field_curvilinear", tmp_field_1) 
    189     ! CALL xios_recv_field("src_field_unstructured", tmp_field_2) 
     185  CALL xios_get_domain_attr("src_domain_regular_read", ni=src_tmp_ni, nj=src_tmp_nj) 
     186  ALLOCATE(tmp_field_0(src_tmp_ni*src_tmp_nj)) 
     187 
     188  CALL xios_get_axis_attr("src_axis_curvilinear_read", n=src_tmp_n) 
     189  CALL xios_get_domain_attr("src_domain_curvilinear_read", ni=src_tmp_ni, nj=src_tmp_nj) 
     190  ALLOCATE(tmp_field_1(src_tmp_ni*src_tmp_nj*src_tmp_n)) 
     191 
     192  CALL xios_get_domain_attr("src_domain_unstructured_read", ni=src_tmp_ni, nj=src_tmp_nj) 
     193  ALLOCATE(tmp_field_2(src_tmp_ni*src_tmp_nj)) 
     194 
     195  DO ts=1,1 
     196    CALL xios_recv_field("src_field_regular", tmp_field_0) 
     197    CALL xios_recv_field("src_field_curvilinear", tmp_field_1) 
     198    CALL xios_recv_field("src_field_unstructured", tmp_field_2) 
    190199    CALL xios_update_calendar(ts) 
    191200    CALL xios_send_field("src_field_2D",src_field_2D) 
    192     CALL xios_send_field("src_field_2D_clone",src_field_2D) 
     201     
     202    DO i=1,src_ni 
     203      src_field_2D_clone(i) = src_field_2D(i) 
     204      IF ((23.5 * ts < src_lat(i)) .AND. (src_lat(i) < 65.5 *ts) .AND. (0 < src_lon(i)) .AND. (src_lon(i) < 30*ts)) THEN       
     205        src_field_2D_clone(i) = missing_value     
     206      ENDIF 
     207    ENDDO 
     208 
     209    CALL xios_send_field("src_field_2D_clone",src_field_2D_clone) 
    193210    CALL xios_send_field("src_field_3D",src_field_3D) 
    194211    CALL xios_send_field("src_field_3D_clone",src_field_3D) 
    195212    CALL xios_send_field("src_field_4D",src_field_4D) 
    196213    CALL xios_send_field("src_field_3D_pression",src_field_pression) 
    197     ! CALL xios_send_field("tmp_field_0",tmp_field_0) 
    198     ! CALL xios_send_field("tmp_field_1",tmp_field_1) 
    199     ! CALL xios_send_field("tmp_field_2",tmp_field_2) 
     214    CALL xios_send_field("tmp_field_0",tmp_field_0) 
     215    CALL xios_send_field("tmp_field_1",tmp_field_1) 
     216    CALL xios_send_field("tmp_field_2",tmp_field_2) 
    200217    CALL wait_us(5000) ; 
    201218   ENDDO 
     
    205222  DEALLOCATE(src_lon, src_lat, src_boundslon,src_boundslat, src_field_2D) 
    206223  DEALLOCATE(dst_lon, dst_lat, dst_boundslon,dst_boundslat) 
    207   ! DEALLOCATE(tmp_field_0, tmp_field_1, tmp_field_2) 
     224  DEALLOCATE(tmp_field_0, tmp_field_1, tmp_field_2) 
    208225 
    209226  CALL MPI_COMM_FREE(comm, ierr) 
Note: See TracChangeset for help on using the changeset viewer.