Changeset 2019 for XIOS/dev/dev_trunk_graph/src/test
- Timestamp:
- 01/22/21 12:00:29 (3 years ago)
- 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 33 33 CHARACTER(len_str) :: init_field2D="" 34 34 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="" 36 39 LOGICAL :: axis_mask 37 40 LOGICAL :: mask3d … … 102 105 103 106 IF (i_am_atm) CALL model("atm") 104 107 IF (i_am_oce) CALL model("oce") 108 IF (i_am_surf) CALL model("surf") 105 109 106 110 CALL xios_finalize() … … 109 113 CALL MPI_FINALIZE(ierr) 110 114 115 if(i_am_server) then 116 print*, "server ",rank, " finished" 117 else 118 print*, "client ",rank, " finished" 119 endif 120 111 121 CONTAINS 112 122 … … 130 140 INTEGER, POINTER :: domain_index(:) 131 141 LOGICAL, POINTER :: axis_mask(:) 142 LOGICAL :: scalar_mask 132 143 INTEGER, POINTER :: axis_index(:) 133 144 DOUBLE PRECISION, POINTER :: ensemble_value(:) … … 149 160 150 161 DOUBLE PRECISION, POINTER :: field2D(:), other_field2D(:) 162 DOUBLE PRECISION :: field0D, other_field0D 151 163 DOUBLE PRECISION, POINTER :: field_X(:), other_field_X(:) 152 164 DOUBLE PRECISION, POINTER :: field_Y(:), other_field_Y(:) … … 164 176 165 177 DOUBLE PRECISION, POINTER :: field2D_W(:,:), other_field2D_W(:,:) 178 DOUBLE PRECISION, POINTER :: field0D_W(:), other_field0D_W(:) 166 179 DOUBLE PRECISION, POINTER :: field_XW(:,:), other_field_XW(:,:) 167 180 DOUBLE PRECISION, POINTER :: field_YW(:,:), other_field_YW(:,:) … … 185 198 INTEGER :: i,j,k,xy,x,y,z,w 186 199 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 190 204 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_field 2D_W, ok_field3D_W, ok_pressure_W, ok_field2D_sub_W, ok_field3D_sub_W,ok_field3D_recv_W, ok_field3D_send_W205 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 192 206 LOGICAL :: ok_field_XW, ok_field_YW, ok_field_XYW, ok_field_ZW, ok_field_XYZW, ok_field_XZW, ok_field_YZW 193 207 194 LOGICAL :: ok_other_field 2D, ok_other_field3D, ok_other_pressure, ok_other_field2D_sub, ok_other_field3D_sub,ok_other_field3D_recv, ok_other_field3D_send208 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 195 209 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_field 2D_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_W210 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 197 211 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 198 212 … … 232 246 233 247 CALL init_axis("axis", comm, params, axis_value, axis_mask, axis_index) 248 CALL init_scalar("scalar", comm, params, scalar_mask) 234 249 CALL init_ensemble("ensemble", comm, params, ensemble_value) 235 250 … … 257 272 258 273 ok_field3D_recv_W=xios_is_valid_field("field3D_recv_W").AND.xios_is_valid_field("field3D_resend_W") ; 259 IF (ok_field3D_recv ) THEN274 IF (ok_field3D_recv_W) THEN 260 275 CALL xios_is_defined_field_attr("field3D_recv_W",freq_op=ok) 261 276 IF (ok) THEN … … 308 323 ALLOCATE(field_XZW(0:x-1,0:z-1,0:w-1)) 309 324 ALLOCATE(field_YZW(0:y-1,0:z-1,0:w-1)) 325 ALLOCATE(field0D_W(0:w-1)) 310 326 311 327 … … 364 380 ENDDO 365 381 382 field0D=1 366 383 367 384 … … 376 393 field_XZW(:,:,0) = field_XZ(:,:)*(1+0.1*ensemble_value(0)) 377 394 field_YZW(:,:,0) = field_YZ(:,:)*(1+0.1*ensemble_value(0)) 378 395 field0D_W(0) = field0D*(1+0.1*ensemble_value(0)) 379 396 380 397 ok_field2D=xios_is_valid_field("field2D") ; … … 390 407 ok_field_XZ=xios_is_valid_field("field_XZ") ; 391 408 ok_field_YZ=xios_is_valid_field("field_YZ") ; 409 ok_field0D=xios_is_valid_field("field0D") ; 392 410 393 411 ok_field2D_W=xios_is_valid_field("field2D_W") ; … … 403 421 ok_field_XZW=xios_is_valid_field("field_XZW") ; 404 422 ok_field_YZW=xios_is_valid_field("field_YZW") ; 423 ok_field0D_W=xios_is_valid_field("field0D_W") ; 405 424 406 425 … … 437 456 438 457 CALL init_axis("other_axis", comm, other_params, axis_value, axis_mask, axis_index) 458 CALL init_scalar("other_scalar", comm, params, scalar_mask) 439 459 CALL init_ensemble("other_ensemble", comm, other_params, ensemble_value) 440 460 … … 462 482 463 483 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 ) THEN484 IF (ok_other_field3D_recv_W) THEN 465 485 CALL xios_is_defined_field_attr("other_field3D_recv_W",freq_op=ok) 466 486 IF (ok) THEN … … 513 533 ALLOCATE(other_field_XZW(0:x-1,0:z-1,0:w-1)) 514 534 ALLOCATE(other_field_YZW(0:y-1,0:z-1,0:w-1)) 535 ALLOCATE(other_field0D_W(0:w-1)) 515 536 516 537 … … 569 590 ENDDO 570 591 592 other_field0D = 1 571 593 572 594 … … 581 603 other_field_XZW(:,:,0) = other_field_XZ(:,:)*(1+0.1*ensemble_value(0)) 582 604 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)) 583 606 584 607 … … 595 618 ok_other_field_XZ=xios_is_valid_field("other_field_XZ") ; 596 619 ok_other_field_YZ=xios_is_valid_field("other_field_YZ") ; 620 ok_other_field0D=xios_is_valid_field("other_field0D") ; 597 621 598 622 ok_other_field2D_W=xios_is_valid_field("other_field2D_W") ; … … 608 632 ok_other_field_XZW=xios_is_valid_field("other_field_XZW") ; 609 633 ok_other_field_YZW=xios_is_valid_field("other_field_YZW") ; 634 ok_other_field0D_W=xios_is_valid_field("other_field0D_W") ; 610 635 611 636 … … 633 658 IF (ok_field_XZ) CALL xios_send_field("field_XZ",field_XZ) 634 659 IF (ok_field_YZ) CALL xios_send_field("field_YZ",field_YZ) 660 IF (ok_field0D) CALL xios_send_field("field0D",field0D) 635 661 636 662 IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN … … 657 683 IF (ok_field_XZW) CALL xios_send_field("field_XZW",field_XZW) 658 684 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) 659 686 660 687 IF ( MOD(params%field_sub_offset+ts-1,params%field_sub_freq)==0) THEN … … 672 699 field2D=field2D+1 673 700 field3D=field3D+1 701 field0D=field0D+1 674 702 675 703 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 688 716 IF (ok_other_field_XY) CALL xios_send_field("other_field_XZ", other_field_XZ) 689 717 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) 690 719 691 720 IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN … … 705 734 IF (ok_other_field3D_W) CALL xios_send_field("other_field3D_W",other_field3D_W) 706 735 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) 709 738 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) 711 740 IF (ok_other_field_XYW) CALL xios_send_field("other_field_XYZW",other_field_XYZW) 712 741 IF (ok_other_field_XYW) CALL xios_send_field("other_field_XZW",other_field_XZW) 713 742 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) 714 744 715 745 IF ( MOD(other_params%field_sub_offset+ts-1,other_params%field_sub_freq)==0) THEN … … 727 757 other_field2D=other_field2D+1 728 758 other_field3D=other_field3D+1 759 other_field0D=other_field0D+1 729 760 730 761 … … 753 784 IF (.NOT. xios_getvar(prefix//"domain", params%domain) ) params%domain="lmdz" 754 785 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" 755 789 IF (.NOT. xios_getvar(prefix//"axis", params%axis) ) params%axis="pressure" 756 790 IF (.NOT. xios_getvar(prefix//"axis_mask", params%axis_mask) ) params%axis_mask=.FALSE. … … 1603 1637 i_glo=i 1604 1638 j_glo=jbegin+j 1605 ij=j *ni+i1639 ij=j_glo*ni_glo+i_glo 1606 1640 IF ( ij>=ij_begin .AND. ij<=ij_end) THEN 1607 1641 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 … … 1618 1652 i_glo=i 1619 1653 j_glo=jbegin+j 1620 ij=j *ni+i1654 ij=j_glo*ni_glo+i_glo 1621 1655 IF ( ij>=ij_begin .AND. ij<=ij_end) THEN 1622 1656 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 … … 1859 1893 bounds_lon(3,i,j)=bounds_lon_glo(1,ibegin+i) 1860 1894 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) 1865 1899 1866 1900 ij=(j+offset_j)*(ni+2*offset_i)+i+offset_i … … 1907 1941 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) 1908 1942 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) 1909 1944 ENDIF 1910 1945 1911 1946 1912 1947 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) 1914 1949 ! 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) 1915 1950 ENDIF 1916 1951 1917 1952 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) 1920 1955 ENDIF 1921 1956 … … 1934 1969 INTEGER :: i,x 1935 1970 1936 x=size(mask)1937 1971 mask(:)=.TRUE. 1938 1972 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 1943 1979 ENDIF 1944 1980 … … 2061 2097 LOGICAL :: mask(:) 2062 2098 INTEGER :: i,x 2063 2099 2100 mask(:)=.TRUE. 2064 2101 x=size(mask) 2065 2102 IF (params%axis_mask) THEN 2066 2103 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. 2069 2106 ENDDO 2070 2107 ENDIF 2071 2108 2072 2109 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 2073 2147 2074 2148 SUBROUTINE init_field2D_academic(comm,params, lon, lat, mask, return_field, & … … 2131 2205 IF (Y_mask(i)) THEN 2132 2206 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))) 2134 2208 ENDIF 2135 2209 ENDDO -
XIOS/dev/dev_trunk_graph/src/test/test_client.f90
r1686 r2019 132 132 PRINT*,"field field_A is active ? ",xios_field_is_active("field_A") 133 133 ! CALL xios_recv_field("field", scalar) 134 DO ts=1, 24134 DO ts=1,4 135 135 CALL xios_update_calendar(ts) 136 136 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) 140 138 ! 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) 143 141 CALL wait_us(5000) ; 144 142 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.