@@ -792,6 +792,138 @@ subroutine test_pio_reader_int_get_var_file_not_opened_err()
792
792
793
793
end subroutine test_pio_reader_int_get_var_file_not_opened_err
794
794
795
+ !----------------------------------------
796
+
797
+ @test
798
+ subroutine test_pio_reader_char_get_var_file_not_opened_err()
799
+ ! Check that the PIO reader raises the correct error
800
+ ! when attempting to read a character variable from
801
+ ! a file that is not opened.
802
+
803
+ use funit
804
+
805
+ use ccpp_io_reader, only: abstract_netcdf_reader_t
806
+ use ccpp_io_reader, only: create_netcdf_reader_t
807
+
808
+ class(abstract_netcdf_reader_t), allocatable :: reader
809
+
810
+ integer :: errcode
811
+ character(len=256) :: errmsg
812
+
813
+ !Variable to be read:
814
+ character(len=:), pointer :: gas_names(:)
815
+
816
+ ! Expected error message:
817
+ character(len=*), parameter :: expected_err_msg = &
818
+ "File 'UNSET' is not open, need to call 'open_file' first."
819
+
820
+ ! Begin test:
821
+
822
+ reader = create_netcdf_reader_t()
823
+
824
+ ! Attempt to read variable without opening file:
825
+ call reader%get_var("gas_names", gas_names, errmsg, errcode)
826
+
827
+ ! Check that the correct error was raised:
828
+ @assertTrue(errcode /= 0)
829
+ @assertTrue(trim(errmsg) == expected_err_msg)
830
+
831
+ ! Perform test cleanup:
832
+ deallocate(reader)
833
+ end subroutine test_pio_reader_char_get_var_file_not_opened_err
834
+
835
+ !----------------------------------------
836
+
837
+ @test
838
+ subroutine test_pio_reader_real_get_var_file_not_opened_err()
839
+ ! Check that the PIO reader raises the correct error
840
+ ! when attempting to read a character variable from
841
+ ! a file that is not opened.
842
+
843
+ use funit
844
+
845
+ use ccpp_io_reader, only: abstract_netcdf_reader_t
846
+ use ccpp_io_reader, only: create_netcdf_reader_t
847
+
848
+ class(abstract_netcdf_reader_t), allocatable :: reader
849
+
850
+ integer :: errcode
851
+ character(len=256) :: errmsg
852
+
853
+ !Variable to be read:
854
+ real(kind_phys), pointer :: press_ref(:)
855
+
856
+ ! Expected error message:
857
+ character(len=*), parameter :: expected_err_msg = &
858
+ "File 'UNSET' is not open, need to call 'open_file' first."
859
+
860
+ ! Begin test:
861
+
862
+ reader = create_netcdf_reader_t()
863
+
864
+ ! Attempt to read variable without opening file:
865
+ call reader%get_var("press_ref", press_ref, errmsg, errcode)
866
+
867
+ ! Check that the correct error was raised:
868
+ @assertTrue(errcode /= 0)
869
+ @assertTrue(trim(errmsg) == expected_err_msg)
870
+
871
+ ! Perform test cleanup:
872
+ deallocate(reader)
873
+ end subroutine test_pio_reader_real_get_var_file_not_opened_err
874
+
875
+ !----------------------------------------
876
+
877
+ subroutine test_pio_reader_get_var_open_close_err()
878
+ ! Check that the PIO reader raises the correct error
879
+ ! when attempting to read a variable from a file
880
+ ! that is opened and closed before attempting to read
881
+ ! the variable.
882
+
883
+ ! NOTE: This behavior will be the same for all variable types,
884
+ ! so we only need to test it once.
885
+
886
+ use funit
887
+
888
+ use ccpp_io_reader, only: abstract_netcdf_reader_t
889
+ use ccpp_io_reader, only: create_netcdf_reader_t
890
+
891
+ class(abstract_netcdf_reader_t), allocatable :: reader
892
+
893
+ integer :: errcode
894
+ character(len=256) :: errmsg
895
+
896
+ !Variable to be read:
897
+ integer, pointer :: pressure(:)
898
+
899
+ character(len=*), parameter :: fname = &
900
+ "../../../rrtmgp-data/rrtmgp-gas-sw-g112.nc"
901
+
902
+ ! Expected error message:
903
+ character(len=*), parameter :: expected_err_msg = &
904
+ "File '"//fname//"' is not open, need to call 'open_file' first."
905
+
906
+ ! Begin test:
907
+
908
+ reader = create_netcdf_reader_t()
909
+
910
+ ! Open file:
911
+ call reader%open_file(fname, errmsg, errcode)
912
+
913
+ ! Close file:
914
+ call reader%close_file(errmsg, errcode)
915
+
916
+ ! Attempt to read variable after closing file:
917
+ call reader%get_var("pressure", pressure, errmsg, errcode)
918
+
919
+ ! Check that the correct error was raised:
920
+ @assertTrue(errcode /= 0)
921
+ @assertTrue(trim(errmsg) == expected_err_msg)
922
+
923
+ ! Perform test cleanup:
924
+ deallocate(reader)
925
+
926
+ end subroutine test_pio_reader_get_var_open_close_err
795
927
796
928
!-----------------------------------------
797
929
0 commit comments