Changeset 4400 for palm/trunk/SOURCE/netcdf_data_input_mod.f90
- Timestamp:
- Feb 10, 2020 8:32:41 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/netcdf_data_input_mod.f90
r4392 r4400 25 25 ! ----------------- 26 26 ! $Id$ 27 ! - Routine to inquire default fill values added 28 ! - netcdf_data_input_att and netcdf_data_input_var routines removed 29 ! 30 ! 4392 2020-01-31 16:14:57Z pavelkrc 27 31 ! (resler) Decrease length of reading buffer (fix problem of ifort/icc compilers) 28 32 ! … … 542 546 INTEGER(iwp) :: version !< version of data set 543 547 548 REAL(wp) :: fillvalue = -9999.0 !< default fill value 544 549 REAL(wp) :: origin_lat !< latitude of lower left corner 545 550 REAL(wp) :: origin_lon !< longitude of lower left corner … … 652 657 LOGICAL :: collective_read = .FALSE. !< Enable NetCDF collective read 653 658 659 REAL(wp), DIMENSION(8) :: crs_list !< list of coord_ref_sys values 660 654 661 TYPE(global_atts_type) :: input_file_atts !< global attributes of input file 655 662 … … 666 673 END INTERFACE netcdf_data_input_check_static 667 674 668 INTERFACE netcdf_data_input_chemistry_data 675 INTERFACE netcdf_data_input_chemistry_data 669 676 MODULE PROCEDURE netcdf_data_input_chemistry_data 670 677 END INTERFACE netcdf_data_input_chemistry_data 671 672 INTERFACE get_dimension_length 678 679 INTERFACE get_dimension_length 673 680 MODULE PROCEDURE get_dimension_length 674 681 END INTERFACE get_dimension_length 682 683 INTERFACE inquire_fill_value 684 MODULE PROCEDURE inquire_fill_value_int 685 MODULE PROCEDURE inquire_fill_value_real 686 END INTERFACE inquire_fill_value 675 687 676 688 INTERFACE netcdf_data_input_inquire_file … … 681 693 MODULE PROCEDURE netcdf_data_input_init 682 694 END INTERFACE netcdf_data_input_init 683 684 INTERFACE netcdf_data_input_att685 MODULE PROCEDURE netcdf_data_input_att_int8686 MODULE PROCEDURE netcdf_data_input_att_int32687 MODULE PROCEDURE netcdf_data_input_att_real688 MODULE PROCEDURE netcdf_data_input_att_string689 END INTERFACE netcdf_data_input_att690 695 691 696 INTERFACE netcdf_data_input_init_3d … … 696 701 MODULE PROCEDURE netcdf_data_input_surface_data 697 702 END INTERFACE netcdf_data_input_surface_data 698 699 INTERFACE netcdf_data_input_var700 MODULE PROCEDURE netcdf_data_input_var_char701 MODULE PROCEDURE netcdf_data_input_var_real_1d702 MODULE PROCEDURE netcdf_data_input_var_real_2d703 END INTERFACE netcdf_data_input_var704 703 705 704 INTERFACE netcdf_data_input_uvem … … 752 751 chem_emis, chem_emis_att, chem_emis_att_type, chem_emis_val_type, & 753 752 coord_ref_sys, & 753 crs_list, & 754 754 init_3d, init_model, input_file_atts, & 755 755 input_file_dynamic, & … … 781 781 netcdf_data_input_init, & 782 782 netcdf_data_input_init_3d, & 783 netcdf_data_input_att, &784 783 netcdf_data_input_surface_data, & 785 784 netcdf_data_input_topo, & 786 netcdf_data_input_var, &787 785 get_attribute, & 788 786 get_variable, & … … 790 788 open_read_file, & 791 789 check_existence, & 790 inquire_fill_value, & 792 791 inquire_num_variables, & 793 792 inquire_variable_names, & … … 817 816 INQUIRE( FILE = TRIM( input_file_chem ) // TRIM( coupling_char ), & 818 817 EXIST = input_pids_chem ) 819 INQUIRE( FILE = TRIM( input_file_uvem ) // TRIM( coupling_char ),&818 INQUIRE( FILE = TRIM( input_file_uvem ) // TRIM( coupling_char ), & 820 819 EXIST = input_pids_uvem ) 821 820 INQUIRE( FILE = TRIM( input_file_vm ) // TRIM( coupling_char ), & … … 962 961 init_model%origin_z = input_file_atts%origin_z 963 962 init_model%rotation_angle = input_file_atts%rotation_angle 964 963 964 ! 965 !-- Define list of crs attributes. This is required for coordinate 966 !-- transformation. 967 crs_list = (/ coord_ref_sys%semi_major_axis, & 968 coord_ref_sys%inverse_flattening, & 969 coord_ref_sys%longitude_of_prime_meridian, & 970 coord_ref_sys%longitude_of_central_meridian, & 971 coord_ref_sys%scale_factor_at_central_meridian, & 972 coord_ref_sys%latitude_of_projection_origin, & 973 coord_ref_sys%false_easting, & 974 coord_ref_sys%false_northing /) 965 975 ! 966 976 !-- In case of nested runs, each model domain might have different longitude … … 977 987 978 988 END SUBROUTINE netcdf_data_input_init 979 980 !------------------------------------------------------------------------------! 981 ! Description: 982 ! ------------ 983 !> Read an array of characters. 984 !------------------------------------------------------------------------------! 985 SUBROUTINE netcdf_data_input_var_char( val, search_string, id_mod ) 986 987 IMPLICIT NONE 988 989 CHARACTER(LEN=*) :: search_string !< name of the variable 990 CHARACTER(LEN=*), DIMENSION(:) :: val !< variable which should be read 991 992 INTEGER(iwp) :: id_mod !< NetCDF id of input file 993 994 #if defined ( __netcdf ) 995 ! 996 !-- Read variable 997 CALL get_variable( id_mod, search_string, val ) 998 #endif 999 1000 END SUBROUTINE netcdf_data_input_var_char 1001 1002 !------------------------------------------------------------------------------! 1003 ! Description: 1004 ! ------------ 1005 !> Read an 1D array of REAL values. 1006 !------------------------------------------------------------------------------! 1007 SUBROUTINE netcdf_data_input_var_real_1d( val, search_string, id_mod ) 1008 1009 IMPLICIT NONE 1010 1011 CHARACTER(LEN=*) :: search_string !< name of the variable 1012 1013 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1014 1015 REAL(wp), DIMENSION(:) :: val !< variable which should be read 1016 1017 #if defined ( __netcdf ) 1018 ! 1019 !-- Read variable 1020 CALL get_variable( id_mod, search_string, val ) 1021 #endif 1022 1023 END SUBROUTINE netcdf_data_input_var_real_1d 1024 1025 !------------------------------------------------------------------------------! 1026 ! Description: 1027 ! ------------ 1028 !> Read an 1D array of REAL values. 1029 !------------------------------------------------------------------------------! 1030 SUBROUTINE netcdf_data_input_var_real_2d( val, search_string, & 1031 id_mod, d1s, d1e, d2s, d2e ) 1032 1033 IMPLICIT NONE 1034 1035 CHARACTER(LEN=*) :: search_string !< name of the variable 1036 1037 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1038 INTEGER(iwp) :: d1e !< end index of first dimension to be read 1039 INTEGER(iwp) :: d2e !< end index of second dimension to be read 1040 INTEGER(iwp) :: d1s !< start index of first dimension to be read 1041 INTEGER(iwp) :: d2s !< start index of second dimension to be read 1042 1043 REAL(wp), DIMENSION(:,:) :: val !< variable which should be read 1044 1045 #if defined ( __netcdf ) 1046 ! 1047 !-- Read character variable 1048 CALL get_variable( id_mod, search_string, val, d1s, d1e, d2s, d2e ) 1049 #endif 1050 1051 END SUBROUTINE netcdf_data_input_var_real_2d 1052 1053 !------------------------------------------------------------------------------! 1054 ! Description: 1055 ! ------------ 1056 !> Read a global string attribute 1057 !------------------------------------------------------------------------------! 1058 SUBROUTINE netcdf_data_input_att_string( val, search_string, id_mod, & 1059 input_file, global, openclose, & 1060 variable_name ) 1061 1062 IMPLICIT NONE 1063 1064 CHARACTER(LEN=*) :: search_string !< name of the attribue 1065 CHARACTER(LEN=*) :: val !< attribute 1066 1067 CHARACTER(LEN=*) :: input_file !< name of input file 1068 CHARACTER(LEN=*) :: openclose !< string indicating whether NetCDF needs to be opend or closed 1069 CHARACTER(LEN=*) :: variable_name !< string indicating whether NetCDF needs to be opend or closed 1070 1071 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1072 1073 LOGICAL :: global !< flag indicating a global or a variable's attribute 1074 1075 #if defined ( __netcdf ) 1076 ! 1077 !-- Open file in read-only mode if necessary 1078 IF ( openclose == 'open' ) THEN 1079 CALL open_read_file( TRIM( input_file ) // TRIM( coupling_char ), & 1080 id_mod ) 1081 ENDIF 1082 ! 1083 !-- Read global attribute 1084 IF ( global ) THEN 1085 CALL get_attribute( id_mod, search_string, val, global ) 1086 ! 1087 !-- Read variable attribute 1088 ELSE 1089 CALL get_attribute( id_mod, search_string, val, global, variable_name ) 1090 ENDIF 1091 ! 1092 !-- Close input file 1093 IF ( openclose == 'close' ) CALL close_input_file( id_mod ) 1094 #endif 1095 1096 END SUBROUTINE netcdf_data_input_att_string 1097 1098 !------------------------------------------------------------------------------! 1099 ! Description: 1100 ! ------------ 1101 !> Read a global 8-bit integer attribute 1102 !------------------------------------------------------------------------------! 1103 SUBROUTINE netcdf_data_input_att_int8( val, search_string, id_mod, & 1104 input_file, global, openclose, & 1105 variable_name ) 1106 1107 IMPLICIT NONE 1108 1109 CHARACTER(LEN=*) :: search_string !< name of the attribue 1110 1111 CHARACTER(LEN=*) :: input_file !< name of input file 1112 CHARACTER(LEN=*) :: openclose !< string indicating whether NetCDF needs to be opend or closed 1113 CHARACTER(LEN=*) :: variable_name !< string indicating whether NetCDF needs to be opend or closed 1114 1115 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1116 INTEGER(KIND=1) :: val !< value of the attribute 1117 1118 LOGICAL :: global !< flag indicating a global or a variable's attribute 1119 1120 #if defined ( __netcdf ) 1121 ! 1122 !-- Open file in read-only mode 1123 IF ( openclose == 'open' ) THEN 1124 CALL open_read_file( TRIM( input_file ) // TRIM( coupling_char ), & 1125 id_mod ) 1126 ENDIF 1127 ! 1128 !-- Read global attribute 1129 IF ( global ) THEN 1130 CALL get_attribute( id_mod, search_string, val, global ) 1131 ! 1132 !-- Read variable attribute 1133 ELSE 1134 CALL get_attribute( id_mod, search_string, val, global, variable_name ) 1135 ENDIF 1136 ! 1137 !-- Finally, close input file 1138 IF ( openclose == 'close' ) CALL close_input_file( id_mod ) 1139 #endif 1140 1141 END SUBROUTINE netcdf_data_input_att_int8 1142 1143 !------------------------------------------------------------------------------! 1144 ! Description: 1145 ! ------------ 1146 !> Read a global 32-bit integer attribute 1147 !------------------------------------------------------------------------------! 1148 SUBROUTINE netcdf_data_input_att_int32( val, search_string, id_mod, & 1149 input_file, global, openclose, & 1150 variable_name ) 1151 1152 IMPLICIT NONE 1153 1154 CHARACTER(LEN=*) :: search_string !< name of the attribue 1155 1156 CHARACTER(LEN=*) :: input_file !< name of input file 1157 CHARACTER(LEN=*) :: openclose !< string indicating whether NetCDF needs to be opend or closed 1158 CHARACTER(LEN=*) :: variable_name !< string indicating whether NetCDF needs to be opend or closed 1159 1160 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1161 INTEGER(iwp) :: val !< value of the attribute 1162 1163 LOGICAL :: global !< flag indicating a global or a variable's attribute 1164 1165 #if defined ( __netcdf ) 1166 ! 1167 !-- Open file in read-only mode 1168 IF ( openclose == 'open' ) THEN 1169 CALL open_read_file( TRIM( input_file ) // TRIM( coupling_char ), & 1170 id_mod ) 1171 ENDIF 1172 ! 1173 !-- Read global attribute 1174 IF ( global ) THEN 1175 CALL get_attribute( id_mod, search_string, val, global ) 1176 ! 1177 !-- Read variable attribute 1178 ELSE 1179 CALL get_attribute( id_mod, search_string, val, global, variable_name ) 1180 ENDIF 1181 ! 1182 !-- Finally, close input file 1183 IF ( openclose == 'close' ) CALL close_input_file( id_mod ) 1184 #endif 1185 1186 END SUBROUTINE netcdf_data_input_att_int32 1187 1188 !------------------------------------------------------------------------------! 1189 ! Description: 1190 ! ------------ 1191 !> Read a global real attribute 1192 !------------------------------------------------------------------------------! 1193 SUBROUTINE netcdf_data_input_att_real( val, search_string, id_mod, & 1194 input_file, global, openclose, & 1195 variable_name ) 1196 1197 IMPLICIT NONE 1198 1199 CHARACTER(LEN=*) :: search_string !< name of the attribue 1200 1201 CHARACTER(LEN=*) :: input_file !< name of input file 1202 CHARACTER(LEN=*) :: openclose !< string indicating whether NetCDF needs to be opend or closed 1203 CHARACTER(LEN=*) :: variable_name !< string indicating whether NetCDF needs to be opend or closed 1204 1205 INTEGER(iwp) :: id_mod !< NetCDF id of input file 1206 1207 LOGICAL :: global !< flag indicating a global or a variable's attribute 1208 1209 REAL(wp) :: val !< value of the attribute 1210 1211 #if defined ( __netcdf ) 1212 ! 1213 !-- Open file in read-only mode 1214 IF ( openclose == 'open' ) THEN 1215 CALL open_read_file( TRIM( input_file ) // TRIM( coupling_char ), & 1216 id_mod ) 1217 ENDIF 1218 ! 1219 !-- Read global attribute 1220 IF ( global ) THEN 1221 CALL get_attribute( id_mod, search_string, val, global ) 1222 ! 1223 !-- Read variable attribute 1224 ELSE 1225 CALL get_attribute( id_mod, search_string, val, global, variable_name ) 1226 ENDIF 1227 ! 1228 !-- Finally, close input file 1229 IF ( openclose == 'close' ) CALL close_input_file( id_mod ) 1230 #endif 1231 1232 END SUBROUTINE netcdf_data_input_att_real 989 1233 990 1234 991 !------------------------------------------------------------------------------! … … 5823 5580 ! Description: 5824 5581 ! ------------ 5582 !> Inquires the _FillValue settings of an integer variable. 5583 !------------------------------------------------------------------------------! 5584 SUBROUTINE inquire_fill_value_int( id, var_name, nofill, fill_value ) 5585 #if defined( __netcdf ) 5586 CHARACTER(LEN=*), INTENT(IN) :: var_name !< variable name 5587 5588 INTEGER(iwp), INTENT(IN) :: id !< file id 5589 INTEGER(iwp) :: nofill !< flag indicating whether fill values are set or not 5590 INTEGER(iwp) :: fill_value !< fill value 5591 INTEGER(iwp) :: id_var !< netCDF variable id (varid) 5592 5593 nc_stat = NF90_INQ_VARID( id, TRIM( var_name ), id_var ) 5594 nc_stat = NF90_INQ_VAR_FILL(id, id_var, no_fill, fill_value ) 5595 #endif 5596 ! 5597 !-- Further line is just to avoid compiler warnings. nofill might be used 5598 !-- in future. 5599 IF ( nofill == 0 .OR. nofill /= 0 ) CONTINUE 5600 5601 END SUBROUTINE inquire_fill_value_int 5602 5603 !------------------------------------------------------------------------------! 5604 ! Description: 5605 ! ------------ 5606 !> Inquires the _FillValue settings of a real variable. 5607 !------------------------------------------------------------------------------! 5608 SUBROUTINE inquire_fill_value_real( id, var_name, nofill, fill_value ) 5609 #if defined( __netcdf ) 5610 CHARACTER(LEN=*), INTENT(IN) :: var_name !< variable name 5611 5612 INTEGER(iwp), INTENT(IN) :: id !< file id 5613 INTEGER(iwp) :: nofill !< flag indicating whether fill values are set or not 5614 INTEGER(iwp) :: id_var !< netCDF variable id (varid) 5615 5616 REAL(wp), INTENT(OUT) :: fill_value !< fill value 5617 5618 nc_stat = NF90_INQ_VARID( id, TRIM( var_name ), id_var ) 5619 nc_stat = NF90_INQ_VAR_FILL(id, id_var, no_fill, fill_value ) 5620 #endif 5621 ! 5622 !-- Further line is just to avoid compiler warnings. nofill might be used 5623 !-- in future. 5624 IF ( nofill == 0 .OR. nofill /= 0 ) CONTINUE 5625 5626 END SUBROUTINE inquire_fill_value_real 5627 5628 !------------------------------------------------------------------------------! 5629 ! Description: 5630 ! ------------ 5825 5631 !> Prints out a text message corresponding to the current status. 5826 5632 !------------------------------------------------------------------------------!
Note: See TracChangeset
for help on using the changeset viewer.