Loading bindings/Fortran/f2c/adios2_f2c_attribute.cpp +33 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ #include "adios2_f2c_common.h" #include "adios2/core/Attribute.h" #include <string.h> //strcpy #ifdef __cplusplus extern "C" { #endif Loading Loading @@ -67,12 +70,37 @@ void FC_GLOBAL(adios2_attribute_data_f2c, const adios2_attribute **attribute, int *ierr) { *size = -1; try { int type; FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C) (&type, attribute, ierr); if (type == adios2_type_string) { const adios2::core::Attribute<std::string> *attributeCpp = reinterpret_cast<const adios2::core::Attribute<std::string> *>( *attribute); char *dataT = reinterpret_cast<char *>(data); for (auto e = 0; e < *size; ++e) { attributeCpp->m_DataArray[e].copy( &dataT[e * adios2_string_array_element_max_size], attributeCpp->m_DataArray[e].size()); } } else { size_t sizeC; *ierr = static_cast<int>(adios2_attribute_data(data, &sizeC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) *ierr = static_cast<int>( adios2_attribute_data(data, &sizeC, *attribute)); } } catch (...) { *size = static_cast<int>(sizeC); *ierr = adios2_error_exception; } } Loading bindings/Fortran/modules/adios2_attribute_data_mod.f90 +23 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ module adios2_attribute_data_mod module procedure adios2_attribute_data_integer8 ! 1D Array !module procedure adios2_attribute_data_string_1d module procedure adios2_attribute_data_string_1d module procedure adios2_attribute_data_real_1d module procedure adios2_attribute_data_dp_1d module procedure adios2_attribute_data_integer1_1d Loading Loading @@ -130,6 +130,28 @@ contains end subroutine ! 1D Array subroutine adios2_attribute_data_string_1D(data, attribute, ierr) character*(*), dimension(:), intent(out):: data type(adios2_attribute), intent(in):: attribute integer, intent(out):: ierr ! local integer:: i character(len=adios2_string_array_element_max_size), & dimension(attribute%length):: dataMax call adios2_attribute_check_type(attribute, adios2_type_string, & 'attribute_data', ierr) if (ierr == 0) then call adios2_attribute_data_f2c(dataMax, attribute%length, & attribute%f2c, ierr) end if do i=1, attribute%length data(i) = trim(dataMax(i)) end do end subroutine subroutine adios2_attribute_data_real_1d(data, attribute, ierr) real, dimension(:), intent(out):: data type(adios2_attribute), intent(in):: attribute Loading testing/adios2/bindings/fortran/SmallTestData_mod.f90 +1 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ module small_test_data implicit none character(len=16), parameter, dimension(3) :: data_Strings = & (/'Attribute one ', 'Attribute two ', 'Attribute three'/) (/'Attribute oneXX', 'Attribute twoXX', 'Attribute three'/) integer(kind=1), parameter, dimension(10) :: data_I8 = & (/0, 1, -2, 3, -4, 5, -6, 7, -8, 9/) Loading testing/adios2/bindings/fortran/TestBPWriteReadAttributes.f90 +24 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ program TestBPWriteAttributes real :: r32_value real(kind=8):: r64_value character(len=15), dimension(3):: iString_array integer(kind=1), dimension(3):: i8_array integer(kind=2), dimension(3):: i16_array integer(kind=4), dimension(3):: i32_array Loading Loading @@ -110,54 +111,55 @@ program TestBPWriteAttributes if(attributes_in(1)%valid .eqv. .false.) stop 'attribute iString not found' if(attributes_in(1)%type /= adios2_type_string) stop 'attribute iString wrong type' if(attributes_in(1)%length /= 1) stop 'attribute iString lenght is not 1' if(attributes_in(1)%length /= 1) stop 'attribute iString length is not 1' if(attributes_in(1)%is_value .eqv. .false.) stop 'attribute iString must be value' call adios2_attribute_data( iString_value, attributes_in(1), ierr) if( iString_value /= 'ADIOS2 String attribute' ) stop 'attribute iString data error' if(attributes_in(2)%valid .eqv. .false.) stop 'attribute i8 not found' if(attributes_in(2)%type /= adios2_type_integer1) stop 'attribute i8 wrong type' if(attributes_in(2)%length /= 1) stop 'attribute i8 lenght is not 1' if(attributes_in(2)%length /= 1) stop 'attribute i8 length is not 1' if(attributes_in(2)%is_value .eqv. .false.) stop 'attribute i8 must be value' call adios2_attribute_data( i8_value, attributes_in(2), ierr) if( i8_value /= data_I8(1) ) stop 'attribute i8 data error' if(attributes_in(3)%valid .eqv. .false.) stop 'attribute i16 not found' if(attributes_in(3)%type /= adios2_type_integer2) stop 'attribute i16 wrong type' if(attributes_in(3)%length /= 1) stop 'attribute i16 lenght is not 1' if(attributes_in(3)%length /= 1) stop 'attribute i16 length is not 1' if(attributes_in(3)%is_value .eqv. .false.) stop 'attribute i16 must be value' call adios2_attribute_data( i16_value, attributes_in(3), ierr) if( i16_value /= data_I16(1) ) stop 'attribute i16 data error' if(attributes_in(4)%valid .eqv. .false.) stop 'attribute i32 not found' if(attributes_in(4)%type /= adios2_type_integer4) stop 'attribute i32 wrong type' if(attributes_in(4)%length /= 1) stop 'attribute i32 lenght is not 1' if(attributes_in(4)%length /= 1) stop 'attribute i32 length is not 1' if(attributes_in(4)%is_value .eqv. .false.) stop 'attribute i32 must be value' call adios2_attribute_data( i32_value, attributes_in(4), ierr) if( i32_value /= data_I32(1) ) stop 'attribute i32 data error' if(attributes_in(5)%valid .eqv. .false.) stop 'attribute i64 not found' if(attributes_in(5)%type /= adios2_type_integer8) stop 'attribute i64 wrong type' if(attributes_in(5)%length /= 1) stop 'attribute i64 lenght is not 1' if(attributes_in(5)%length /= 1) stop 'attribute i64 length is not 1' if(attributes_in(5)%is_value .eqv. .false.) stop 'attribute i64 must be value' call adios2_attribute_data( i64_value, attributes_in(5), ierr) if( i64_value /= data_I64(1) ) stop 'attribute i64 data error' if(attributes_in(6)%valid .eqv. .false.) stop 'attribute r32 not found' if(attributes_in(6)%type /= adios2_type_real) stop 'attribute r32 wrong type' if(attributes_in(6)%length /= 1) stop 'attribute r32 lenght is not 1' if(attributes_in(6)%length /= 1) stop 'attribute r32 length is not 1' if(attributes_in(6)%is_value .eqv. .false.) stop 'attribute r32 must be value' call adios2_attribute_data( r32_value, attributes_in(6), ierr) if( r32_value /= data_R32(1) ) stop 'attribute r32 data error' if(attributes_in(7)%valid .eqv. .false.) stop 'attribute r64 not found' if(attributes_in(7)%type /= adios2_type_dp) stop 'attribute r64 wrong type' if(attributes_in(7)%length /= 1) stop 'attribute r64 lenght is not 1' if(attributes_in(7)%length /= 1) stop 'attribute r64 length is not 1' if(attributes_in(7)%is_value .eqv. .false.) stop 'attribute r64 must be value' call adios2_attribute_data( r64_value, attributes_in(7), ierr) if( r64_value /= data_R64(1) ) stop 'attribute r64 data error' ! Array call adios2_inquire_attribute(attributes_in(8), ioRead, 'att_Strings_array', ierr) call adios2_inquire_attribute(attributes_in(9), ioRead, 'att_i8_array', ierr) call adios2_inquire_attribute(attributes_in(10), ioRead, 'att_i16_array', ierr) call adios2_inquire_attribute(attributes_in(11), ioRead, 'att_i32_array', ierr) Loading @@ -165,9 +167,18 @@ program TestBPWriteAttributes call adios2_inquire_attribute(attributes_in(13), ioRead, 'att_r32_array', ierr) call adios2_inquire_attribute(attributes_in(14), ioRead, 'att_r64_array', ierr) if(attributes_in(8)%valid .eqv. .false.) stop 'attribute string array not found' if(attributes_in(8)%type /= adios2_type_string) stop 'attribute string array wrong type' if(attributes_in(8)%length /= 3) stop 'attribute string array length is not 3' if(attributes_in(8)%is_value .eqv. .true.) stop 'attribute string array must be array' call adios2_attribute_data( iString_array, attributes_in(8), ierr) do i=1,3 if( iString_array(i) /= data_Strings(i) ) stop 'attribute string array data error' end do if(attributes_in(9)%valid .eqv. .false.) stop 'attribute i8 array not found' if(attributes_in(9)%type /= adios2_type_integer1) stop 'attribute i8 array wrong type' if(attributes_in(9)%length /= 3) stop 'attribute i8 array lenght is not 1' if(attributes_in(9)%length /= 3) stop 'attribute i8 array length is not 3' if(attributes_in(9)%is_value .eqv. .true.) stop 'attribute i8 array must be array' call adios2_attribute_data( i8_array, attributes_in(9), ierr) do i=1,3 Loading @@ -176,7 +187,7 @@ program TestBPWriteAttributes if(attributes_in(10)%valid .eqv. .false.) stop 'attribute i16 array not found' if(attributes_in(10)%type /= adios2_type_integer2) stop 'attribute i16 array wrong type' if(attributes_in(10)%length /= 3) stop 'attribute i16 array lenght is not 1' if(attributes_in(10)%length /= 3) stop 'attribute i16 array length is not 3' if(attributes_in(10)%is_value .eqv. .true.) stop 'attribute i16 array must be array' call adios2_attribute_data( i16_array, attributes_in(10), ierr) do i=1,3 Loading @@ -185,7 +196,7 @@ program TestBPWriteAttributes if(attributes_in(11)%valid .eqv. .false.) stop 'attribute i32 array not found' if(attributes_in(11)%type /= adios2_type_integer4) stop 'attribute i32 array wrong type' if(attributes_in(11)%length /= 3) stop 'attribute i32 array lenght is not 1' if(attributes_in(11)%length /= 3) stop 'attribute i32 array length is not 3' if(attributes_in(11)%is_value .eqv. .true.) stop 'attribute i32 array must be array' call adios2_attribute_data( i32_array, attributes_in(11), ierr) do i=1,3 Loading @@ -194,7 +205,7 @@ program TestBPWriteAttributes if(attributes_in(12)%valid .eqv. .false.) stop 'attribute i64 array not found' if(attributes_in(12)%type /= adios2_type_integer8) stop 'attribute i64 array wrong type' if(attributes_in(12)%length /= 3) stop 'attribute i64 array lenght is not 1' if(attributes_in(12)%length /= 3) stop 'attribute i64 array length is not 3' if(attributes_in(12)%is_value .eqv. .true.) stop 'attribute i64 array must be array' call adios2_attribute_data( i64_array, attributes_in(12), ierr) do i=1,3 Loading @@ -203,7 +214,7 @@ program TestBPWriteAttributes if(attributes_in(13)%valid .eqv. .false.) stop 'attribute r32 array not found' if(attributes_in(13)%type /= adios2_type_real) stop 'attribute r32 array wrong type' if(attributes_in(13)%length /= 3) stop 'attribute r32 array lenght is not 1' if(attributes_in(13)%length /= 3) stop 'attribute r32 array length is not 3' if(attributes_in(13)%is_value .eqv. .true.) stop 'attribute r32 array must be array' call adios2_attribute_data( r32_array, attributes_in(13), ierr) do i=1,3 Loading @@ -212,21 +223,17 @@ program TestBPWriteAttributes if(attributes_in(14)%valid .eqv. .false.) stop 'attribute r64 array not found' if(attributes_in(14)%type /= adios2_type_dp) stop 'attribute r64 array wrong type' if(attributes_in(14)%length /= 3) stop 'attribute r64 array lenght is not 1' if(attributes_in(14)%length /= 3) stop 'attribute r64 array length is not 3' if(attributes_in(14)%is_value .eqv. .true.) stop 'attribute r64 array must be array' call adios2_attribute_data( r64_array, attributes_in(14), ierr) do i=1,3 if( r64_array(i) /= data_R64(i) ) stop 'attribute r64 array data error' end do call adios2_close(bpReader, ierr) call adios2_finalize(adios, ierr) call MPI_Finalize(ierr) Loading Loading
bindings/Fortran/f2c/adios2_f2c_attribute.cpp +33 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ #include "adios2_f2c_common.h" #include "adios2/core/Attribute.h" #include <string.h> //strcpy #ifdef __cplusplus extern "C" { #endif Loading Loading @@ -67,12 +70,37 @@ void FC_GLOBAL(adios2_attribute_data_f2c, const adios2_attribute **attribute, int *ierr) { *size = -1; try { int type; FC_GLOBAL(adios2_attribute_type_f2c, ADIOS2_ATTRIBUTE_TYPE_F2C) (&type, attribute, ierr); if (type == adios2_type_string) { const adios2::core::Attribute<std::string> *attributeCpp = reinterpret_cast<const adios2::core::Attribute<std::string> *>( *attribute); char *dataT = reinterpret_cast<char *>(data); for (auto e = 0; e < *size; ++e) { attributeCpp->m_DataArray[e].copy( &dataT[e * adios2_string_array_element_max_size], attributeCpp->m_DataArray[e].size()); } } else { size_t sizeC; *ierr = static_cast<int>(adios2_attribute_data(data, &sizeC, *attribute)); if (*ierr == static_cast<int>(adios2_error_none)) *ierr = static_cast<int>( adios2_attribute_data(data, &sizeC, *attribute)); } } catch (...) { *size = static_cast<int>(sizeC); *ierr = adios2_error_exception; } } Loading
bindings/Fortran/modules/adios2_attribute_data_mod.f90 +23 −1 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ module adios2_attribute_data_mod module procedure adios2_attribute_data_integer8 ! 1D Array !module procedure adios2_attribute_data_string_1d module procedure adios2_attribute_data_string_1d module procedure adios2_attribute_data_real_1d module procedure adios2_attribute_data_dp_1d module procedure adios2_attribute_data_integer1_1d Loading Loading @@ -130,6 +130,28 @@ contains end subroutine ! 1D Array subroutine adios2_attribute_data_string_1D(data, attribute, ierr) character*(*), dimension(:), intent(out):: data type(adios2_attribute), intent(in):: attribute integer, intent(out):: ierr ! local integer:: i character(len=adios2_string_array_element_max_size), & dimension(attribute%length):: dataMax call adios2_attribute_check_type(attribute, adios2_type_string, & 'attribute_data', ierr) if (ierr == 0) then call adios2_attribute_data_f2c(dataMax, attribute%length, & attribute%f2c, ierr) end if do i=1, attribute%length data(i) = trim(dataMax(i)) end do end subroutine subroutine adios2_attribute_data_real_1d(data, attribute, ierr) real, dimension(:), intent(out):: data type(adios2_attribute), intent(in):: attribute Loading
testing/adios2/bindings/fortran/SmallTestData_mod.f90 +1 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ module small_test_data implicit none character(len=16), parameter, dimension(3) :: data_Strings = & (/'Attribute one ', 'Attribute two ', 'Attribute three'/) (/'Attribute oneXX', 'Attribute twoXX', 'Attribute three'/) integer(kind=1), parameter, dimension(10) :: data_I8 = & (/0, 1, -2, 3, -4, 5, -6, 7, -8, 9/) Loading
testing/adios2/bindings/fortran/TestBPWriteReadAttributes.f90 +24 −17 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ program TestBPWriteAttributes real :: r32_value real(kind=8):: r64_value character(len=15), dimension(3):: iString_array integer(kind=1), dimension(3):: i8_array integer(kind=2), dimension(3):: i16_array integer(kind=4), dimension(3):: i32_array Loading Loading @@ -110,54 +111,55 @@ program TestBPWriteAttributes if(attributes_in(1)%valid .eqv. .false.) stop 'attribute iString not found' if(attributes_in(1)%type /= adios2_type_string) stop 'attribute iString wrong type' if(attributes_in(1)%length /= 1) stop 'attribute iString lenght is not 1' if(attributes_in(1)%length /= 1) stop 'attribute iString length is not 1' if(attributes_in(1)%is_value .eqv. .false.) stop 'attribute iString must be value' call adios2_attribute_data( iString_value, attributes_in(1), ierr) if( iString_value /= 'ADIOS2 String attribute' ) stop 'attribute iString data error' if(attributes_in(2)%valid .eqv. .false.) stop 'attribute i8 not found' if(attributes_in(2)%type /= adios2_type_integer1) stop 'attribute i8 wrong type' if(attributes_in(2)%length /= 1) stop 'attribute i8 lenght is not 1' if(attributes_in(2)%length /= 1) stop 'attribute i8 length is not 1' if(attributes_in(2)%is_value .eqv. .false.) stop 'attribute i8 must be value' call adios2_attribute_data( i8_value, attributes_in(2), ierr) if( i8_value /= data_I8(1) ) stop 'attribute i8 data error' if(attributes_in(3)%valid .eqv. .false.) stop 'attribute i16 not found' if(attributes_in(3)%type /= adios2_type_integer2) stop 'attribute i16 wrong type' if(attributes_in(3)%length /= 1) stop 'attribute i16 lenght is not 1' if(attributes_in(3)%length /= 1) stop 'attribute i16 length is not 1' if(attributes_in(3)%is_value .eqv. .false.) stop 'attribute i16 must be value' call adios2_attribute_data( i16_value, attributes_in(3), ierr) if( i16_value /= data_I16(1) ) stop 'attribute i16 data error' if(attributes_in(4)%valid .eqv. .false.) stop 'attribute i32 not found' if(attributes_in(4)%type /= adios2_type_integer4) stop 'attribute i32 wrong type' if(attributes_in(4)%length /= 1) stop 'attribute i32 lenght is not 1' if(attributes_in(4)%length /= 1) stop 'attribute i32 length is not 1' if(attributes_in(4)%is_value .eqv. .false.) stop 'attribute i32 must be value' call adios2_attribute_data( i32_value, attributes_in(4), ierr) if( i32_value /= data_I32(1) ) stop 'attribute i32 data error' if(attributes_in(5)%valid .eqv. .false.) stop 'attribute i64 not found' if(attributes_in(5)%type /= adios2_type_integer8) stop 'attribute i64 wrong type' if(attributes_in(5)%length /= 1) stop 'attribute i64 lenght is not 1' if(attributes_in(5)%length /= 1) stop 'attribute i64 length is not 1' if(attributes_in(5)%is_value .eqv. .false.) stop 'attribute i64 must be value' call adios2_attribute_data( i64_value, attributes_in(5), ierr) if( i64_value /= data_I64(1) ) stop 'attribute i64 data error' if(attributes_in(6)%valid .eqv. .false.) stop 'attribute r32 not found' if(attributes_in(6)%type /= adios2_type_real) stop 'attribute r32 wrong type' if(attributes_in(6)%length /= 1) stop 'attribute r32 lenght is not 1' if(attributes_in(6)%length /= 1) stop 'attribute r32 length is not 1' if(attributes_in(6)%is_value .eqv. .false.) stop 'attribute r32 must be value' call adios2_attribute_data( r32_value, attributes_in(6), ierr) if( r32_value /= data_R32(1) ) stop 'attribute r32 data error' if(attributes_in(7)%valid .eqv. .false.) stop 'attribute r64 not found' if(attributes_in(7)%type /= adios2_type_dp) stop 'attribute r64 wrong type' if(attributes_in(7)%length /= 1) stop 'attribute r64 lenght is not 1' if(attributes_in(7)%length /= 1) stop 'attribute r64 length is not 1' if(attributes_in(7)%is_value .eqv. .false.) stop 'attribute r64 must be value' call adios2_attribute_data( r64_value, attributes_in(7), ierr) if( r64_value /= data_R64(1) ) stop 'attribute r64 data error' ! Array call adios2_inquire_attribute(attributes_in(8), ioRead, 'att_Strings_array', ierr) call adios2_inquire_attribute(attributes_in(9), ioRead, 'att_i8_array', ierr) call adios2_inquire_attribute(attributes_in(10), ioRead, 'att_i16_array', ierr) call adios2_inquire_attribute(attributes_in(11), ioRead, 'att_i32_array', ierr) Loading @@ -165,9 +167,18 @@ program TestBPWriteAttributes call adios2_inquire_attribute(attributes_in(13), ioRead, 'att_r32_array', ierr) call adios2_inquire_attribute(attributes_in(14), ioRead, 'att_r64_array', ierr) if(attributes_in(8)%valid .eqv. .false.) stop 'attribute string array not found' if(attributes_in(8)%type /= adios2_type_string) stop 'attribute string array wrong type' if(attributes_in(8)%length /= 3) stop 'attribute string array length is not 3' if(attributes_in(8)%is_value .eqv. .true.) stop 'attribute string array must be array' call adios2_attribute_data( iString_array, attributes_in(8), ierr) do i=1,3 if( iString_array(i) /= data_Strings(i) ) stop 'attribute string array data error' end do if(attributes_in(9)%valid .eqv. .false.) stop 'attribute i8 array not found' if(attributes_in(9)%type /= adios2_type_integer1) stop 'attribute i8 array wrong type' if(attributes_in(9)%length /= 3) stop 'attribute i8 array lenght is not 1' if(attributes_in(9)%length /= 3) stop 'attribute i8 array length is not 3' if(attributes_in(9)%is_value .eqv. .true.) stop 'attribute i8 array must be array' call adios2_attribute_data( i8_array, attributes_in(9), ierr) do i=1,3 Loading @@ -176,7 +187,7 @@ program TestBPWriteAttributes if(attributes_in(10)%valid .eqv. .false.) stop 'attribute i16 array not found' if(attributes_in(10)%type /= adios2_type_integer2) stop 'attribute i16 array wrong type' if(attributes_in(10)%length /= 3) stop 'attribute i16 array lenght is not 1' if(attributes_in(10)%length /= 3) stop 'attribute i16 array length is not 3' if(attributes_in(10)%is_value .eqv. .true.) stop 'attribute i16 array must be array' call adios2_attribute_data( i16_array, attributes_in(10), ierr) do i=1,3 Loading @@ -185,7 +196,7 @@ program TestBPWriteAttributes if(attributes_in(11)%valid .eqv. .false.) stop 'attribute i32 array not found' if(attributes_in(11)%type /= adios2_type_integer4) stop 'attribute i32 array wrong type' if(attributes_in(11)%length /= 3) stop 'attribute i32 array lenght is not 1' if(attributes_in(11)%length /= 3) stop 'attribute i32 array length is not 3' if(attributes_in(11)%is_value .eqv. .true.) stop 'attribute i32 array must be array' call adios2_attribute_data( i32_array, attributes_in(11), ierr) do i=1,3 Loading @@ -194,7 +205,7 @@ program TestBPWriteAttributes if(attributes_in(12)%valid .eqv. .false.) stop 'attribute i64 array not found' if(attributes_in(12)%type /= adios2_type_integer8) stop 'attribute i64 array wrong type' if(attributes_in(12)%length /= 3) stop 'attribute i64 array lenght is not 1' if(attributes_in(12)%length /= 3) stop 'attribute i64 array length is not 3' if(attributes_in(12)%is_value .eqv. .true.) stop 'attribute i64 array must be array' call adios2_attribute_data( i64_array, attributes_in(12), ierr) do i=1,3 Loading @@ -203,7 +214,7 @@ program TestBPWriteAttributes if(attributes_in(13)%valid .eqv. .false.) stop 'attribute r32 array not found' if(attributes_in(13)%type /= adios2_type_real) stop 'attribute r32 array wrong type' if(attributes_in(13)%length /= 3) stop 'attribute r32 array lenght is not 1' if(attributes_in(13)%length /= 3) stop 'attribute r32 array length is not 3' if(attributes_in(13)%is_value .eqv. .true.) stop 'attribute r32 array must be array' call adios2_attribute_data( r32_array, attributes_in(13), ierr) do i=1,3 Loading @@ -212,21 +223,17 @@ program TestBPWriteAttributes if(attributes_in(14)%valid .eqv. .false.) stop 'attribute r64 array not found' if(attributes_in(14)%type /= adios2_type_dp) stop 'attribute r64 array wrong type' if(attributes_in(14)%length /= 3) stop 'attribute r64 array lenght is not 1' if(attributes_in(14)%length /= 3) stop 'attribute r64 array length is not 3' if(attributes_in(14)%is_value .eqv. .true.) stop 'attribute r64 array must be array' call adios2_attribute_data( r64_array, attributes_in(14), ierr) do i=1,3 if( r64_array(i) /= data_R64(i) ) stop 'attribute r64 array data error' end do call adios2_close(bpReader, ierr) call adios2_finalize(adios, ierr) call MPI_Finalize(ierr) Loading