Ignore:
Timestamp:
01/22/21 12:00:29 (3 years ago)
Author:
yushan
Message:

Graph intermedia commit to a tmp branch

Location:
XIOS/dev/dev_trunk_graph/src/test
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90

    r1686 r2019  
    3333    CHARACTER(len_str)  :: init_field2D="" 
    3434    DOUBLE PRECISION    :: pressure_factor 
    35     LOGICAL :: domain_mask 
     35    LOGICAL             :: domain_mask  
     36    CHARACTER(len_str)  :: domain_mask_type="" 
     37    LOGICAL             :: scalar_mask 
     38    CHARACTER(len_str) :: scalar_mask_type="" 
    3639    LOGICAL :: axis_mask 
    3740    LOGICAL :: mask3d 
     
    102105 
    103106    IF (i_am_atm) CALL model("atm") 
    104    
     107    IF (i_am_oce) CALL model("oce") 
     108    IF (i_am_surf) CALL model("surf") 
    105109   
    106110    CALL xios_finalize() 
     
    109113  CALL MPI_FINALIZE(ierr) 
    110114   
     115  if(i_am_server) then 
     116    print*, "server ",rank, " finished" 
     117  else 
     118    print*, "client ",rank, " finished" 
     119  endif 
     120 
    111121CONTAINS 
    112122 
     
    130140    INTEGER, POINTER          :: domain_index(:) 
    131141    LOGICAL, POINTER          :: axis_mask(:) 
     142    LOGICAL                   :: scalar_mask 
    132143    INTEGER, POINTER          :: axis_index(:) 
    133144    DOUBLE PRECISION, POINTER :: ensemble_value(:) 
     
    149160 
    150161    DOUBLE PRECISION, POINTER :: field2D(:), other_field2D(:) 
     162    DOUBLE PRECISION          :: field0D, other_field0D 
    151163    DOUBLE PRECISION, POINTER :: field_X(:), other_field_X(:) 
    152164    DOUBLE PRECISION, POINTER :: field_Y(:), other_field_Y(:) 
     
    164176 
    165177    DOUBLE PRECISION, POINTER :: field2D_W(:,:), other_field2D_W(:,:) 
     178    DOUBLE PRECISION, POINTER :: field0D_W(:), other_field0D_W(:) 
    166179    DOUBLE PRECISION, POINTER :: field_XW(:,:), other_field_XW(:,:) 
    167180    DOUBLE PRECISION, POINTER :: field_YW(:,:), other_field_YW(:,:) 
     
    185198    INTEGER :: i,j,k,xy,x,y,z,w 
    186199    DOUBLE PRECISION :: scale,dist 
    187     LOGICAL :: ierr,ok       
    188  
    189     LOGICAL :: ok_field2D, ok_field3D, ok_pressure, ok_field2D_sub, ok_field3D_sub,ok_field3D_recv, ok_field3D_send 
     200    LOGICAL :: ok 
     201    INTEGER :: ierr       
     202 
     203    LOGICAL :: ok_field0D, ok_field2D, ok_field3D, ok_pressure, ok_field2D_sub, ok_field3D_sub,ok_field3D_recv, ok_field3D_send 
    190204    LOGICAL :: ok_field_X, ok_field_Y, ok_field_XY, ok_field_Z, ok_field_XYZ, ok_field_XZ, ok_field_YZ 
    191     LOGICAL :: ok_field2D_W, ok_field3D_W, ok_pressure_W, ok_field2D_sub_W, ok_field3D_sub_W,ok_field3D_recv_W, ok_field3D_send_W 
     205    LOGICAL :: ok_field0D_W, ok_field2D_W, ok_field3D_W, ok_pressure_W, ok_field2D_sub_W, ok_field3D_sub_W,ok_field3D_recv_W, ok_field3D_send_W 
    192206    LOGICAL :: ok_field_XW, ok_field_YW, ok_field_XYW, ok_field_ZW, ok_field_XYZW, ok_field_XZW, ok_field_YZW 
    193207 
    194     LOGICAL :: ok_other_field2D, ok_other_field3D, ok_other_pressure, ok_other_field2D_sub, ok_other_field3D_sub,ok_other_field3D_recv, ok_other_field3D_send 
     208    LOGICAL :: ok_other_field0D, ok_other_field2D, ok_other_field3D, ok_other_pressure, ok_other_field2D_sub, ok_other_field3D_sub,ok_other_field3D_recv, ok_other_field3D_send 
    195209    LOGICAL :: ok_other_field_X, ok_other_field_Y, ok_other_field_XY, ok_other_field_Z, ok_other_field_XYZ, ok_other_field_XZ, ok_other_field_YZ 
    196     LOGICAL :: ok_other_field2D_W, ok_other_field3D_W, ok_other_pressure_W, ok_other_field2D_sub_W, ok_other_field3D_sub_W,ok_other_field3D_recv_W, ok_other_field3D_send_W 
     210    LOGICAL :: ok_other_field0D_W, ok_other_field2D_W, ok_other_field3D_W, ok_other_pressure_W, ok_other_field2D_sub_W, ok_other_field3D_sub_W,ok_other_field3D_recv_W, ok_other_field3D_send_W 
    197211    LOGICAL :: ok_other_field_XW, ok_other_field_YW, ok_other_field_XYW, ok_other_field_ZW, ok_other_field_XYZW, ok_other_field_XZW, ok_other_field_YZW 
    198212     
     
    232246                                                      
    233247    CALL init_axis("axis", comm, params, axis_value, axis_mask, axis_index) 
     248    CALL init_scalar("scalar", comm, params,  scalar_mask) 
    234249    CALL init_ensemble("ensemble", comm, params, ensemble_value) 
    235250 
     
    257272     
    258273    ok_field3D_recv_W=xios_is_valid_field("field3D_recv_W").AND.xios_is_valid_field("field3D_resend_W") ; 
    259     IF (ok_field3D_recv) THEN 
     274    IF (ok_field3D_recv_W) THEN 
    260275      CALL xios_is_defined_field_attr("field3D_recv_W",freq_op=ok) 
    261276      IF (ok) THEN 
     
    308323    ALLOCATE(field_XZW(0:x-1,0:z-1,0:w-1)) 
    309324    ALLOCATE(field_YZW(0:y-1,0:z-1,0:w-1)) 
     325    ALLOCATE(field0D_W(0:w-1)) 
    310326     
    311327 
     
    364380    ENDDO 
    365381     
     382    field0D=1 
    366383 
    367384 
     
    376393    field_XZW(:,:,0) = field_XZ(:,:)*(1+0.1*ensemble_value(0)) 
    377394    field_YZW(:,:,0) = field_YZ(:,:)*(1+0.1*ensemble_value(0)) 
    378      
     395    field0D_W(0) = field0D*(1+0.1*ensemble_value(0)) 
    379396     
    380397    ok_field2D=xios_is_valid_field("field2D") ; 
     
    390407    ok_field_XZ=xios_is_valid_field("field_XZ") ; 
    391408    ok_field_YZ=xios_is_valid_field("field_YZ") ; 
     409    ok_field0D=xios_is_valid_field("field0D") ; 
    392410 
    393411    ok_field2D_W=xios_is_valid_field("field2D_W") ; 
     
    403421    ok_field_XZW=xios_is_valid_field("field_XZW") ; 
    404422    ok_field_YZW=xios_is_valid_field("field_YZW") ; 
     423    ok_field0D_W=xios_is_valid_field("field0D_W") ; 
    405424 
    406425 
     
    437456                                                      
    438457    CALL init_axis("other_axis", comm, other_params, axis_value, axis_mask, axis_index) 
     458    CALL init_scalar("other_scalar", comm, params, scalar_mask) 
    439459    CALL init_ensemble("other_ensemble", comm, other_params, ensemble_value) 
    440460 
     
    462482     
    463483    ok_other_field3D_recv_W=xios_is_valid_field("other_field3D_recv_W").AND.xios_is_valid_field("other_field3D_resend_W") ; 
    464     IF (ok_other_field3D_recv) THEN 
     484    IF (ok_other_field3D_recv_W) THEN 
    465485      CALL xios_is_defined_field_attr("other_field3D_recv_W",freq_op=ok) 
    466486      IF (ok) THEN 
     
    513533    ALLOCATE(other_field_XZW(0:x-1,0:z-1,0:w-1)) 
    514534    ALLOCATE(other_field_YZW(0:y-1,0:z-1,0:w-1)) 
     535    ALLOCATE(other_field0D_W(0:w-1)) 
    515536     
    516537 
     
    569590    ENDDO 
    570591     
     592    other_field0D = 1 
    571593 
    572594 
     
    581603    other_field_XZW(:,:,0) = other_field_XZ(:,:)*(1+0.1*ensemble_value(0)) 
    582604    other_field_YZW(:,:,0) = other_field_YZ(:,:)*(1+0.1*ensemble_value(0)) 
     605    other_field0D_W(0) = other_field0D*(1+0.1*ensemble_value(0)) 
    583606     
    584607     
     
    595618    ok_other_field_XZ=xios_is_valid_field("other_field_XZ") ; 
    596619    ok_other_field_YZ=xios_is_valid_field("other_field_YZ") ; 
     620    ok_other_field0D=xios_is_valid_field("other_field0D") ; 
    597621 
    598622    ok_other_field2D_W=xios_is_valid_field("other_field2D_W") ; 
     
    608632    ok_other_field_XZW=xios_is_valid_field("other_field_XZW") ; 
    609633    ok_other_field_YZW=xios_is_valid_field("other_field_YZW") ; 
     634    ok_other_field0D_W=xios_is_valid_field("other_field0D_W") ; 
    610635 
    611636 
     
    633658      IF (ok_field_XZ) CALL xios_send_field("field_XZ",field_XZ) 
    634659      IF (ok_field_YZ) CALL xios_send_field("field_YZ",field_YZ) 
     660      IF (ok_field0D)  CALL xios_send_field("field0D",field0D) 
    635661       
    636662      IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN 
     
    657683      IF (ok_field_XZW) CALL xios_send_field("field_XZW",field_XZW) 
    658684      IF (ok_field_YZW) CALL xios_send_field("field_YZW",field_YZW) 
     685      IF (ok_field0D_W) CALL xios_send_field("field0D_W",field0D_W) 
    659686       
    660687      IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN 
     
    672699      field2D=field2D+1 
    673700      field3D=field3D+1 
     701      field0D=field0D+1 
    674702 
    675703!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     
    688716      IF (ok_other_field_XY) CALL xios_send_field("other_field_XZ", other_field_XZ) 
    689717      IF (ok_other_field_XY) CALL xios_send_field("other_field_YZ", other_field_YZ) 
     718      IF (ok_other_field0D)  CALL xios_send_field("other_field0D", other_field0D) 
    690719       
    691720      IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN 
     
    705734      IF (ok_other_field3D_W) CALL xios_send_field("other_field3D_W",other_field3D_W) 
    706735      IF (ok_other_pressure_W) CALL xios_send_field("other_pressure_W",other_pressure_W) 
    707       IF (ok_other_field_XW) CALL xios_send_field("other_field_XW",other_field_XW) 
    708       IF (ok_other_field_YW) CALL xios_send_field("other_field_YW",other_field_YW) 
     736      IF (ok_other_field_XW)  CALL xios_send_field("other_field_XW",other_field_XW) 
     737      IF (ok_other_field_YW)  CALL xios_send_field("other_field_YW",other_field_YW) 
    709738      IF (ok_other_field_XYW) CALL xios_send_field("other_field_XYW",other_field_XYW) 
    710       IF (ok_other_field_ZW) CALL xios_send_field("other_field_ZW",other_field_ZW) 
     739      IF (ok_other_field_ZW)  CALL xios_send_field("other_field_ZW",other_field_ZW) 
    711740      IF (ok_other_field_XYW) CALL xios_send_field("other_field_XYZW",other_field_XYZW) 
    712741      IF (ok_other_field_XYW) CALL xios_send_field("other_field_XZW",other_field_XZW) 
    713742      IF (ok_other_field_XYW) CALL xios_send_field("other_field_YZW",other_field_YZW) 
     743      IF (ok_other_field0D_W)   CALL xios_send_field("other_field0D_W",other_field0D_W) 
    714744       
    715745      IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN 
     
    727757      other_field2D=other_field2D+1 
    728758      other_field3D=other_field3D+1 
     759      other_field0D=other_field0D+1 
    729760 
    730761 
     
    753784    IF (.NOT. xios_getvar(prefix//"domain", params%domain) )             params%domain="lmdz" 
    754785    IF (.NOT. xios_getvar(prefix//"domain_mask", params%domain_mask) )   params%domain_mask=.FALSE. 
     786    IF (.NOT. xios_getvar(prefix//"domain_mask_type", params%domain_mask_type) )   params%domain_mask_type="cross" 
     787    IF (.NOT. xios_getvar(prefix//"scalar_mask", params%scalar_mask) )   params%scalar_mask=.FALSE. 
     788    IF (.NOT. xios_getvar(prefix//"scalar_mask_type", params%scalar_mask_type) )   params%scalar_mask_type="none" 
    755789    IF (.NOT. xios_getvar(prefix//"axis", params%axis) )                 params%axis="pressure" 
    756790    IF (.NOT. xios_getvar(prefix//"axis_mask", params%axis_mask) )       params%axis_mask=.FALSE. 
     
    16031637        i_glo=i 
    16041638        j_glo=jbegin+j 
    1605         ij=j*ni+i 
     1639        ij=j_glo*ni_glo+i_glo 
    16061640        IF ( ij>=ij_begin .AND. ij<=ij_end) THEN 
    16071641           IF ((MOD(j_glo,3)==1 .OR. MOD(j_glo,3)==2) .AND. (MOD(i_glo,5)==3 .OR. MOD(i_glo,5)==4)) CYCLE 
     
    16181652        i_glo=i 
    16191653        j_glo=jbegin+j 
    1620         ij=j*ni+i 
     1654        ij=j_glo*ni_glo+i_glo 
    16211655        IF ( ij>=ij_begin .AND. ij<=ij_end) THEN 
    16221656           IF ((MOD(j_glo,3)==1 .OR. MOD(j_glo,3)==2) .AND. (MOD(i_glo,5)==3 .OR. MOD(i_glo,5)==4)) CYCLE 
     
    18591893        bounds_lon(3,i,j)=bounds_lon_glo(1,ibegin+i) 
    18601894        bounds_lon(4,i,j)=bounds_lon_glo(2,ibegin+i) 
    1861         bounds_lat(1,i,j)=bounds_lat_glo(1,ibegin+i) 
    1862         bounds_lat(2,i,j)=bounds_lat_glo(1,ibegin+i) 
    1863         bounds_lat(3,i,j)=bounds_lat_glo(2,ibegin+i) 
    1864         bounds_lat(4,i,j)=bounds_lat_glo(2,ibegin+i) 
     1895        bounds_lat(1,i,j)=bounds_lat_glo(1,jbegin+j) 
     1896        bounds_lat(2,i,j)=bounds_lat_glo(1,jbegin+j) 
     1897        bounds_lat(3,i,j)=bounds_lat_glo(2,jbegin+j) 
     1898        bounds_lat(4,i,j)=bounds_lat_glo(2,jbegin+j) 
    18651899 
    18661900        ij=(j+offset_j)*(ni+2*offset_i)+i+offset_i 
     
    19071941      CALL xios_set_domain_attr(TRIM(domain_id), nj_glo=nj_glo, jbegin=jbegin, nj=nj, data_jbegin=-offset_j, data_nj=nj+2*offset_j) 
    19081942      CALL xios_set_domain_attr(TRIM(domain_id), data_dim=2, lonvalue_2d=lon, latvalue_2d=lat, mask_1d=return_mask) 
     1943      CALL xios_set_domain_attr(TRIM(domain_id), bounds_lon_2d=bounds_lon, bounds_lat_2d=bounds_lat, nvertex=4) 
    19091944    ENDIF 
    19101945 
    19111946     
    19121947    IF (xios_is_valid_axis(TRIM(domain_id)//"_X")) THEN 
    1913       CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_begin=-offset_i, data_n=ni+2*offset_i, value=return_X_lon) 
     1948      CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_begin=-offset_i, data_n=ni+2*offset_i, value=return_X_lon, mask=return_X_mask) 
    19141949!      CALL xios_set_axis_attr(TRIM(domain_id)//"_X", n_glo=ni_glo, begin=ibegin, n=ni, data_index=return_X_index, data_n=ni+2*offset_i, value=return_X_lon) 
    19151950    ENDIF 
    19161951 
    19171952    IF (xios_is_valid_axis(TRIM(domain_id)//"_Y")) THEN     
    1918       CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_begin=-offset_j, data_n=nj+2*offset_j, value=return_Y_lat) 
    1919 !      CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_index=return_Y_index, data_n=nj+2*offset_j, value=return_Y_lat) 
     1953      CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_begin=-offset_j, data_n=nj+2*offset_j, value=return_Y_lat, mask=return_Y_mask) 
     1954!      CALL xios_set_axis_attr(TRIM(domain_id)//"_Y", n_glo=nj_glo, begin=jbegin, n=nj, data_index=return_Y_index, data_n=nj+2*offset_j, value=return_Y_lat, mask=return_Y_mask) 
    19201955    ENDIF 
    19211956 
     
    19341969     INTEGER :: i,x 
    19351970 
    1936      x=size(mask) 
    19371971     mask(:)=.TRUE. 
    19381972     IF (params%domain_mask) THEN 
    1939        DO i=0,x-1 
    1940          IF (lon(i)-2*lat(i)>-10 .AND. lon(i)-2*lat(i) <10) mask(i)=.FALSE. 
    1941          IF (2*lat(i)+lon(i)>-10 .AND. 2*lat(i)+lon(i)<10) mask(i)=.FALSE. 
    1942        ENDDO 
     1973       IF (params%domain_mask_type=="cross") THEN 
     1974         WHERE (lon(:)-2*lat(:)>-10 .AND. lon(:)-2*lat(:) <10) mask(:)=.FALSE.  
     1975         WHERE (2*lat(:)+lon(:)>-10 .AND. 2*lat(:)+lon(:)<10) mask(:)=.FALSE. 
     1976       ELSE IF (params%domain_mask_type=="latitude_band") THEN 
     1977         WHERE (lat(:)>-30 .AND. lat(:)<30) mask(:)=.FALSE. 
     1978      ENDIF  
    19431979     ENDIF 
    19441980 
     
    20612097     LOGICAL           :: mask(:) 
    20622098     INTEGER :: i,x 
    2063  
     2099      
     2100     mask(:)=.TRUE. 
    20642101     x=size(mask) 
    20652102     IF (params%axis_mask) THEN 
    20662103       DO i=0,x-1 
    2067          IF (MOD(i,3)==0) mask(i)=.FALSE. 
    2068          IF (MOD(i,4)==0) mask(i)=.FALSE. 
     2104         IF (MOD(i,3)==0) mask(i+1)=.FALSE. 
     2105         IF (MOD(i,4)==0) mask(i+1)=.FALSE. 
    20692106       ENDDO 
    20702107     ENDIF 
    20712108 
    20722109  END SUBROUTINE set_axis_mask   
     2110 
     2111  SUBROUTINE init_scalar(scalar_id, comm, params,  return_mask) 
     2112  IMPLICIT NONE  
     2113     CHARACTER(LEN=*) :: scalar_id 
     2114     TYPE(tmodel_params) :: params 
     2115     INTEGER             :: comm 
     2116     LOGICAL             :: return_mask 
     2117     DOUBLE PRECISION    :: value =10. 
     2118 
     2119    CALL set_scalar_mask(comm, params, return_mask)     
     2120    CALL xios_set_scalar_attr(scalar_id, value=value, mask=return_mask)  
     2121 
     2122  END SUBROUTINE init_scalar 
     2123 
     2124  SUBROUTINE set_scalar_mask(comm, params, mask) 
     2125   IMPLICIT NONE  
     2126     TYPE(tmodel_params) :: params 
     2127     INTEGER             :: comm 
     2128     LOGICAL             :: mask 
     2129     INTEGER             :: ierr,rank 
     2130 
     2131     mask=.TRUE. 
     2132     IF (params%scalar_mask) THEN 
     2133       IF (params%scalar_mask_type=="none") THEN 
     2134         mask=.TRUE. 
     2135       ELSE IF (params%scalar_mask_type=="full") THEN 
     2136         mask=.FALSE. 
     2137       ELSE IF (params%scalar_mask_type=="root") THEN 
     2138         CALL MPI_COMM_RANK(comm,rank,ierr) 
     2139         mask = (rank==0) 
     2140       ELSE IF (params%scalar_mask_type=="sparse") THEN 
     2141         CALL MPI_COMM_RANK(comm,rank,ierr) 
     2142         mask = (MOD(rank,2)==0) 
     2143      ENDIF  
     2144     ENDIF 
     2145 
     2146  END SUBROUTINE set_scalar_mask 
    20732147 
    20742148  SUBROUTINE init_field2D_academic(comm,params, lon, lat, mask, return_field,            & 
     
    21312205      IF (Y_mask(i)) THEN 
    21322206         return_fieldY(i)=(coef-SIN(dp_pi*(ACOS(COS(Y_lat(i)*dp_conv)*& 
    2133                             COS(Y_lon(X/2)*dp_conv))/dp_length))) 
     2207                            COS(Y_lon(i)*dp_conv))/dp_length))) 
    21342208      ENDIF 
    21352209    ENDDO 
  • XIOS/dev/dev_trunk_graph/src/test/test_client.f90

    r1686 r2019  
    132132  PRINT*,"field field_A is active ? ",xios_field_is_active("field_A") 
    133133  ! CALL xios_recv_field("field", scalar) 
    134   DO ts=1,24 
     134  DO ts=1,4 
    135135    CALL xios_update_calendar(ts) 
    136136    CALL xios_send_field("field_A",field_A) 
    137     CALL xios_send_field("field_B",field_A) 
    138     CALL xios_send_field("field_C",field_A) 
    139     ! CALL xios_send_field("field_Axis",axisValue) 
     137    CALL xios_send_field("field_Axis",axisValue) 
    140138    ! CALL xios_send_field("field_Axis",lval) 
    141     ! CALL xios_send_field("field_Domain",field_domain) 
    142     ! CALL xios_send_field("field_Scalar",scalar) 
     139    CALL xios_send_field("field_Domain",field_domain) 
     140    CALL xios_send_field("field_Scalar",scalar) 
    143141    CALL wait_us(5000) ; 
    144142  ENDDO 
Note: See TracChangeset for help on using the changeset viewer.