Changeset 2894 for palm/trunk/SOURCE/radiation_model_mod.f90
- Timestamp:
- Mar 15, 2018 9:17:58 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/radiation_model_mod.f90
r2809 r2894 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Calculations of the index range of the subdomain on file which overlaps with 28 ! the current subdomain are already done in read_restart_data_mod 29 ! radiation_read_restart_data was renamed to radiation_rrd_local and 30 ! radiation_last_actions was renamed to radiation_wrd_local, variable named 31 ! found has been introduced for checking if restart data was found, reading 32 ! of restart strings has been moved completely to read_restart_data_mod, 33 ! radiation_rrd_local is already inside the overlap loop programmed in 34 ! read_restart_data_mod, the marker *** end rad *** is not necessary anymore, 35 ! strings and their respective lengths are written out and read now in case of 36 ! restart runs to get rid of prescribed character lengths (Giersch) 37 ! 38 ! 2809 2018-02-15 09:55:58Z suehring 27 39 ! Bugfix for gfortran: Replace the function C_SIZEOF with STORAGE_SIZE 28 40 ! … … 809 821 END INTERFACE radiation_tendency 810 822 811 INTERFACE radiation_r ead_restart_data812 MODULE PROCEDURE radiation_r ead_restart_data813 END INTERFACE radiation_r ead_restart_data814 815 INTERFACE radiation_ last_actions816 MODULE PROCEDURE radiation_ last_actions817 END INTERFACE radiation_ last_actions823 INTERFACE radiation_rrd_local 824 MODULE PROCEDURE radiation_rrd_local 825 END INTERFACE radiation_rrd_local 826 827 INTERFACE radiation_wrd_local 828 MODULE PROCEDURE radiation_wrd_local 829 END INTERFACE radiation_wrd_local 818 830 819 831 INTERFACE radiation_interaction … … 853 865 radiation_3d_data_averaging, radiation_tendency, & 854 866 radiation_data_output_2d, radiation_data_output_3d, & 855 radiation_define_netcdf_grid, radiation_ last_actions,&856 radiation_r ead_restart_data, radiation_data_output_mask,&867 radiation_define_netcdf_grid, radiation_wrd_local, & 868 radiation_rrd_local, radiation_data_output_mask, & 857 869 radiation_radflux_gridbox, radiation_calc_svf, radiation_write_svf, & 858 870 radiation_interaction, radiation_interaction_init, & … … 8030 8042 ! Description: 8031 8043 ! ------------ 8032 !> Subroutine defines masked output variables8044 !> Subroutine writes the respective restart data 8033 8045 !------------------------------------------------------------------------------! 8034 SUBROUTINE radiation_last_actions 8035 8036 8037 USE control_parameters 8038 8039 USE kinds 8046 SUBROUTINE radiation_wrd_local 8047 8040 8048 8041 8049 IMPLICIT NONE 8042 8050 8043 IF ( write_binary ) THEN 8044 IF ( ALLOCATED( rad_net_av ) ) THEN 8045 WRITE ( 14 ) 'rad_net_av '; WRITE ( 14 ) rad_net_av 8046 ENDIF 8047 IF ( ALLOCATED( rad_lw_in ) ) THEN 8048 WRITE ( 14 ) 'rad_lw_in '; WRITE ( 14 ) rad_lw_in 8049 ENDIF 8050 IF ( ALLOCATED( rad_lw_in_av ) ) THEN 8051 WRITE ( 14 ) 'rad_lw_in_av '; WRITE ( 14 ) rad_lw_in_av 8052 ENDIF 8053 IF ( ALLOCATED( rad_lw_out ) ) THEN 8054 WRITE ( 14 ) 'rad_lw_out '; WRITE ( 14 ) rad_lw_out 8055 ENDIF 8056 IF ( ALLOCATED( rad_lw_out_av ) ) THEN 8057 WRITE ( 14 ) 'rad_lw_out_av '; WRITE ( 14 ) rad_lw_out_av 8058 ENDIF 8059 IF ( ALLOCATED( rad_lw_cs_hr ) ) THEN 8060 WRITE ( 14 ) 'rad_lw_cs_hr '; WRITE ( 14 ) rad_lw_cs_hr 8061 ENDIF 8062 IF ( ALLOCATED( rad_lw_cs_hr_av ) ) THEN 8063 WRITE ( 14 ) 'rad_lw_cs_hr_av '; WRITE ( 14 ) rad_lw_cs_hr_av 8064 ENDIF 8065 IF ( ALLOCATED( rad_lw_hr ) ) THEN 8066 WRITE ( 14 ) 'rad_lw_hr '; WRITE ( 14 ) rad_lw_hr 8067 ENDIF 8068 IF ( ALLOCATED( rad_lw_hr_av ) ) THEN 8069 WRITE ( 14 ) 'rad_lw_hr_av '; WRITE ( 14 ) rad_lw_hr_av 8070 ENDIF 8071 IF ( ALLOCATED( rad_sw_in ) ) THEN 8072 WRITE ( 14 ) 'rad_sw_in '; WRITE ( 14 ) rad_sw_in 8073 ENDIF 8074 IF ( ALLOCATED( rad_sw_in_av ) ) THEN 8075 WRITE ( 14 ) 'rad_sw_in_av '; WRITE ( 14 ) rad_sw_in_av 8076 ENDIF 8077 IF ( ALLOCATED( rad_sw_out ) ) THEN 8078 WRITE ( 14 ) 'rad_sw_out '; WRITE ( 14 ) rad_sw_out 8079 ENDIF 8080 IF ( ALLOCATED( rad_sw_out_av ) ) THEN 8081 WRITE ( 14 ) 'rad_sw_out_av '; WRITE ( 14 ) rad_sw_out_av 8082 ENDIF 8083 IF ( ALLOCATED( rad_sw_cs_hr ) ) THEN 8084 WRITE ( 14 ) 'rad_sw_cs_hr '; WRITE ( 14 ) rad_sw_cs_hr 8085 ENDIF 8086 IF ( ALLOCATED( rad_sw_cs_hr_av ) ) THEN 8087 WRITE ( 14 ) 'rad_sw_cs_hr_av '; WRITE ( 14 ) rad_sw_cs_hr_av 8088 ENDIF 8089 IF ( ALLOCATED( rad_sw_hr ) ) THEN 8090 WRITE ( 14 ) 'rad_sw_hr '; WRITE ( 14 ) rad_sw_hr 8091 ENDIF 8092 IF ( ALLOCATED( rad_sw_hr_av ) ) THEN 8093 WRITE ( 14 ) 'rad_sw_hr_av '; WRITE ( 14 ) rad_sw_hr_av 8094 ENDIF 8095 8096 WRITE ( 14 ) '*** end rad *** ' 8097 8051 8052 IF ( ALLOCATED( rad_net_av ) ) THEN 8053 CALL wrd_write_string( 'rad_net_av' ) 8054 WRITE ( 14 ) rad_net_av 8098 8055 ENDIF 8099 8056 8100 END SUBROUTINE radiation_last_actions 8101 8102 8103 SUBROUTINE radiation_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, & 8104 nxr_on_file, nynfa, nyn_on_file, nysfa,& 8105 nys_on_file, offset_xa, offset_ya, & 8106 overlap_count, tmp_2d, tmp_3d ) 8057 IF ( ALLOCATED( rad_lw_in ) ) THEN 8058 CALL wrd_write_string( 'rad_lw_in' ) 8059 WRITE ( 14 ) rad_lw_in 8060 ENDIF 8061 8062 IF ( ALLOCATED( rad_lw_in_av ) ) THEN 8063 CALL wrd_write_string( 'rad_lw_in_av' ) 8064 WRITE ( 14 ) rad_lw_in_av 8065 ENDIF 8066 8067 IF ( ALLOCATED( rad_lw_out ) ) THEN 8068 CALL wrd_write_string( 'rad_lw_out' ) 8069 WRITE ( 14 ) rad_lw_out 8070 ENDIF 8071 8072 IF ( ALLOCATED( rad_lw_out_av) ) THEN 8073 CALL wrd_write_string( 'rad_lw_out_av' ) 8074 WRITE ( 14 ) rad_lw_out_av 8075 ENDIF 8076 8077 IF ( ALLOCATED( rad_lw_cs_hr) ) THEN 8078 CALL wrd_write_string( 'rad_lw_cs_hr' ) 8079 WRITE ( 14 ) rad_lw_cs_hr 8080 ENDIF 8081 8082 IF ( ALLOCATED( rad_lw_cs_hr_av) ) THEN 8083 CALL wrd_write_string( 'rad_lw_cs_hr_av' ) 8084 WRITE ( 14 ) rad_lw_cs_hr_av 8085 ENDIF 8086 8087 IF ( ALLOCATED( rad_lw_hr) ) THEN 8088 CALL wrd_write_string( 'rad_lw_hr' ) 8089 WRITE ( 14 ) rad_lw_hr 8090 ENDIF 8091 8092 IF ( ALLOCATED( rad_lw_hr_av) ) THEN 8093 CALL wrd_write_string( 'rad_lw_hr_av' ) 8094 WRITE ( 14 ) rad_lw_hr_av 8095 ENDIF 8096 8097 IF ( ALLOCATED( rad_sw_in) ) THEN 8098 CALL wrd_write_string( 'rad_sw_in' ) 8099 WRITE ( 14 ) rad_sw_in 8100 ENDIF 8101 8102 IF ( ALLOCATED( rad_sw_in_av) ) THEN 8103 CALL wrd_write_string( 'rad_sw_in_av' ) 8104 WRITE ( 14 ) rad_sw_in_av 8105 ENDIF 8106 8107 IF ( ALLOCATED( rad_sw_out) ) THEN 8108 CALL wrd_write_string( 'rad_sw_out' ) 8109 WRITE ( 14 ) rad_sw_out 8110 ENDIF 8111 8112 IF ( ALLOCATED( rad_sw_out_av) ) THEN 8113 CALL wrd_write_string( 'rad_sw_out_av' ) 8114 WRITE ( 14 ) rad_sw_out_av 8115 ENDIF 8116 8117 IF ( ALLOCATED( rad_sw_cs_hr) ) THEN 8118 CALL wrd_write_string( 'rad_sw_cs_hr' ) 8119 WRITE ( 14 ) rad_sw_cs_hr 8120 ENDIF 8121 8122 IF ( ALLOCATED( rad_sw_cs_hr_av) ) THEN 8123 CALL wrd_write_string( 'rad_sw_cs_hr_av' ) 8124 WRITE ( 14 ) rad_sw_cs_hr_av 8125 ENDIF 8126 8127 IF ( ALLOCATED( rad_sw_hr) ) THEN 8128 CALL wrd_write_string( 'rad_sw_hr' ) 8129 WRITE ( 14 ) rad_sw_hr 8130 ENDIF 8131 8132 IF ( ALLOCATED( rad_sw_hr_av) ) THEN 8133 CALL wrd_write_string( 'rad_sw_hr_av' ) 8134 WRITE ( 14 ) rad_sw_hr_av 8135 ENDIF 8136 8137 8138 END SUBROUTINE radiation_wrd_local 8139 8140 8141 SUBROUTINE radiation_rrd_local( i, k, nxlf, nxlc, nxl_on_file, nxrf, nxrc, & 8142 nxr_on_file, nynf, nync, nyn_on_file, nysf, & 8143 nysc, nys_on_file, tmp_2d, tmp_3d, found ) 8107 8144 8108 8145 … … 8115 8152 USE pegrid 8116 8153 8154 8117 8155 IMPLICIT NONE 8118 8119 CHARACTER (LEN=20) :: field_char !<8120 8156 8121 8157 INTEGER(iwp) :: i !< … … 8133 8169 INTEGER(iwp) :: nysf !< 8134 8170 INTEGER(iwp) :: nys_on_file !< 8135 INTEGER(iwp) :: overlap_count !< 8136 8137 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: nxlfa !< 8138 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: nxrfa !< 8139 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: nynfa !< 8140 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: nysfa !< 8141 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: offset_xa !< 8142 INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) :: offset_ya !< 8143 8144 REAL(wp), & 8145 DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) ::& 8146 tmp_2d !< 8147 8148 REAL(wp), & 8149 DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) ::& 8150 tmp_3d !< 8151 8152 REAL(wp), & 8153 DIMENSION(0:0,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) ::& 8154 tmp_3d2 !< 8155 8156 8157 8158 IF ( initializing_actions == 'read_restart_data' ) THEN 8159 READ ( 13 ) field_char 8160 8161 DO WHILE ( TRIM( field_char ) /= '*** end rad ***' ) 8162 8163 DO k = 1, overlap_count 8164 8165 nxlf = nxlfa(i,k) 8166 nxlc = nxlfa(i,k) + offset_xa(i,k) 8167 nxrf = nxrfa(i,k) 8168 nxrc = nxrfa(i,k) + offset_xa(i,k) 8169 nysf = nysfa(i,k) 8170 nysc = nysfa(i,k) + offset_ya(i,k) 8171 nynf = nynfa(i,k) 8172 nync = nynfa(i,k) + offset_ya(i,k) 8173 8174 8175 SELECT CASE ( TRIM( field_char ) ) 8176 8177 CASE ( 'rad_net_av' ) 8178 IF ( .NOT. ALLOCATED( rad_net_av ) ) THEN 8179 ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) ) 8180 ENDIF 8181 IF ( k == 1 ) READ ( 13 ) tmp_2d 8182 rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8183 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8184 CASE ( 'rad_lw_in' ) 8185 IF ( .NOT. ALLOCATED( rad_lw_in ) ) THEN 8186 IF ( radiation_scheme == 'clear-sky' .OR. & 8187 radiation_scheme == 'constant') THEN 8188 ALLOCATE( rad_lw_in(0:0,nysg:nyng,nxlg:nxrg) ) 8189 ELSE 8190 ALLOCATE( rad_lw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8191 ENDIF 8192 ENDIF 8193 IF ( k == 1 ) THEN 8194 IF ( radiation_scheme == 'clear-sky' .OR. & 8195 radiation_scheme == 'constant') THEN 8196 READ ( 13 ) tmp_3d2 8197 rad_lw_in(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8198 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8199 ELSE 8200 READ ( 13 ) tmp_3d 8201 rad_lw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8202 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8203 ENDIF 8204 ENDIF 8205 8206 CASE ( 'rad_lw_in_av' ) 8207 IF ( .NOT. ALLOCATED( rad_lw_in_av ) ) THEN 8208 IF ( radiation_scheme == 'clear-sky' .OR. & 8209 radiation_scheme == 'constant') THEN 8210 ALLOCATE( rad_lw_in_av(0:0,nysg:nyng,nxlg:nxrg) ) 8211 ELSE 8212 ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8213 ENDIF 8214 ENDIF 8215 IF ( k == 1 ) THEN 8216 IF ( radiation_scheme == 'clear-sky' .OR. & 8217 radiation_scheme == 'constant') THEN 8218 READ ( 13 ) tmp_3d2 8219 rad_lw_in_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8220 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8221 ELSE 8222 READ ( 13 ) tmp_3d 8223 rad_lw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8224 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8225 ENDIF 8226 ENDIF 8227 8228 CASE ( 'rad_lw_out' ) 8229 IF ( .NOT. ALLOCATED( rad_lw_out ) ) THEN 8230 IF ( radiation_scheme == 'clear-sky' .OR. & 8231 radiation_scheme == 'constant') THEN 8232 ALLOCATE( rad_lw_out(0:0,nysg:nyng,nxlg:nxrg) ) 8233 ELSE 8234 ALLOCATE( rad_lw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8235 ENDIF 8236 ENDIF 8237 IF ( k == 1 ) THEN 8238 IF ( radiation_scheme == 'clear-sky' .OR. & 8239 radiation_scheme == 'constant') THEN 8240 READ ( 13 ) tmp_3d2 8241 rad_lw_out(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8242 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8243 ELSE 8244 READ ( 13 ) tmp_3d 8245 rad_lw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8246 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8247 ENDIF 8248 ENDIF 8249 8250 CASE ( 'rad_lw_out_av' ) 8251 IF ( .NOT. ALLOCATED( rad_lw_out_av ) ) THEN 8252 IF ( radiation_scheme == 'clear-sky' .OR. & 8253 radiation_scheme == 'constant') THEN 8254 ALLOCATE( rad_lw_out_av(0:0,nysg:nyng,nxlg:nxrg) ) 8255 ELSE 8256 ALLOCATE( rad_lw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8257 ENDIF 8258 ENDIF 8259 IF ( k == 1 ) THEN 8260 IF ( radiation_scheme == 'clear-sky' .OR. & 8261 radiation_scheme == 'constant') THEN 8262 READ ( 13 ) tmp_3d2 8263 rad_lw_out_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8264 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8265 ELSE 8266 READ ( 13 ) tmp_3d 8267 rad_lw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8268 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8269 ENDIF 8270 ENDIF 8271 8272 CASE ( 'rad_lw_cs_hr' ) 8273 IF ( .NOT. ALLOCATED( rad_lw_cs_hr ) ) THEN 8274 ALLOCATE( rad_lw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8275 ENDIF 8276 IF ( k == 1 ) READ ( 13 ) tmp_3d 8277 rad_lw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8278 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8279 8280 CASE ( 'rad_lw_cs_hr_av' ) 8281 IF ( .NOT. ALLOCATED( rad_lw_cs_hr_av ) ) THEN 8282 ALLOCATE( rad_lw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8283 ENDIF 8284 IF ( k == 1 ) READ ( 13 ) tmp_3d 8285 rad_lw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8286 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8287 8288 CASE ( 'rad_lw_hr' ) 8289 IF ( .NOT. ALLOCATED( rad_lw_hr ) ) THEN 8290 ALLOCATE( rad_lw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8291 ENDIF 8292 IF ( k == 1 ) READ ( 13 ) tmp_3d 8293 rad_lw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8294 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8295 8296 CASE ( 'rad_lw_hr_av' ) 8297 IF ( .NOT. ALLOCATED( rad_lw_hr_av ) ) THEN 8298 ALLOCATE( rad_lw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8299 ENDIF 8300 IF ( k == 1 ) READ ( 13 ) tmp_3d 8301 rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8302 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8303 8304 CASE ( 'rad_sw_in' ) 8305 IF ( .NOT. ALLOCATED( rad_sw_in ) ) THEN 8306 IF ( radiation_scheme == 'clear-sky' .OR. & 8307 radiation_scheme == 'constant') THEN 8308 ALLOCATE( rad_sw_in(0:0,nysg:nyng,nxlg:nxrg) ) 8309 ELSE 8310 ALLOCATE( rad_sw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8311 ENDIF 8312 ENDIF 8313 IF ( k == 1 ) THEN 8314 IF ( radiation_scheme == 'clear-sky' .OR. & 8315 radiation_scheme == 'constant') THEN 8316 READ ( 13 ) tmp_3d2 8317 rad_sw_in(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8318 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8319 ELSE 8320 READ ( 13 ) tmp_3d 8321 rad_sw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8322 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8323 ENDIF 8324 ENDIF 8325 8326 CASE ( 'rad_sw_in_av' ) 8327 IF ( .NOT. ALLOCATED( rad_sw_in_av ) ) THEN 8328 IF ( radiation_scheme == 'clear-sky' .OR. & 8329 radiation_scheme == 'constant') THEN 8330 ALLOCATE( rad_sw_in_av(0:0,nysg:nyng,nxlg:nxrg) ) 8331 ELSE 8332 ALLOCATE( rad_sw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8333 ENDIF 8334 ENDIF 8335 IF ( k == 1 ) THEN 8336 IF ( radiation_scheme == 'clear-sky' .OR. & 8337 radiation_scheme == 'constant') THEN 8338 READ ( 13 ) tmp_3d2 8339 rad_sw_in_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8340 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8341 ELSE 8342 READ ( 13 ) tmp_3d 8343 rad_sw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8344 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8345 ENDIF 8346 ENDIF 8347 8348 CASE ( 'rad_sw_out' ) 8349 IF ( .NOT. ALLOCATED( rad_sw_out ) ) THEN 8350 IF ( radiation_scheme == 'clear-sky' .OR. & 8351 radiation_scheme == 'constant') THEN 8352 ALLOCATE( rad_sw_out(0:0,nysg:nyng,nxlg:nxrg) ) 8353 ELSE 8354 ALLOCATE( rad_sw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8355 ENDIF 8356 ENDIF 8357 IF ( k == 1 ) THEN 8358 IF ( radiation_scheme == 'clear-sky' .OR. & 8359 radiation_scheme == 'constant') THEN 8360 READ ( 13 ) tmp_3d2 8361 rad_sw_out(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8362 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8363 ELSE 8364 READ ( 13 ) tmp_3d 8365 rad_sw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8366 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8367 ENDIF 8368 ENDIF 8369 8370 CASE ( 'rad_sw_out_av' ) 8371 IF ( .NOT. ALLOCATED( rad_sw_out_av ) ) THEN 8372 IF ( radiation_scheme == 'clear-sky' .OR. & 8373 radiation_scheme == 'constant') THEN 8374 ALLOCATE( rad_sw_out_av(0:0,nysg:nyng,nxlg:nxrg) ) 8375 ELSE 8376 ALLOCATE( rad_sw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8377 ENDIF 8378 ENDIF 8379 IF ( k == 1 ) THEN 8380 IF ( radiation_scheme == 'clear-sky' .OR. & 8381 radiation_scheme == 'constant') THEN 8382 READ ( 13 ) tmp_3d2 8383 rad_sw_out_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8384 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8385 ELSE 8386 READ ( 13 ) tmp_3d 8387 rad_sw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8388 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8389 ENDIF 8390 ENDIF 8391 8392 CASE ( 'rad_sw_cs_hr' ) 8393 IF ( .NOT. ALLOCATED( rad_sw_cs_hr ) ) THEN 8394 ALLOCATE( rad_sw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8395 ENDIF 8396 IF ( k == 1 ) READ ( 13 ) tmp_3d 8397 rad_sw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8398 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8399 8400 CASE ( 'rad_sw_cs_hr_av' ) 8401 IF ( .NOT. ALLOCATED( rad_sw_cs_hr_av ) ) THEN 8402 ALLOCATE( rad_sw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8403 ENDIF 8404 IF ( k == 1 ) READ ( 13 ) tmp_3d 8405 rad_sw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8406 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8407 8408 CASE ( 'rad_sw_hr' ) 8409 IF ( .NOT. ALLOCATED( rad_sw_hr ) ) THEN 8410 ALLOCATE( rad_sw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8411 ENDIF 8412 IF ( k == 1 ) READ ( 13 ) tmp_3d 8413 rad_sw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8414 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8415 8416 CASE ( 'rad_sw_hr_av' ) 8417 IF ( .NOT. ALLOCATED( rad_sw_hr_av ) ) THEN 8418 ALLOCATE( rad_sw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8419 ENDIF 8420 IF ( k == 1 ) READ ( 13 ) tmp_3d 8421 rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8422 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8423 8424 CASE DEFAULT 8425 WRITE( message_string, * ) 'unknown variable named "', & 8426 TRIM( field_char ), '" found in', & 8427 '&data from prior run on PE ', myid 8428 CALL message( 'radiation_read_restart_data', 'PA0302', 1, 2, & 8429 0, 6, 0 ) 8430 8431 END SELECT 8432 8433 ENDDO 8434 8435 READ ( 13 ) field_char 8436 8437 ENDDO 8438 ENDIF 8439 8440 END SUBROUTINE radiation_read_restart_data 8171 8172 LOGICAL, INTENT(OUT) :: found 8173 8174 REAL(wp), DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_2d !< 8175 8176 REAL(wp), DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d !< 8177 8178 REAL(wp), DIMENSION(0:0,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) :: tmp_3d2 !< 8179 8180 8181 found = .TRUE. 8182 8183 8184 SELECT CASE ( restart_string(1:length) ) 8185 8186 CASE ( 'rad_net_av' ) 8187 IF ( .NOT. ALLOCATED( rad_net_av ) ) THEN 8188 ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) ) 8189 ENDIF 8190 IF ( k == 1 ) READ ( 13 ) tmp_2d 8191 rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8192 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8193 CASE ( 'rad_lw_in' ) 8194 IF ( .NOT. ALLOCATED( rad_lw_in ) ) THEN 8195 IF ( radiation_scheme == 'clear-sky' .OR. & 8196 radiation_scheme == 'constant') THEN 8197 ALLOCATE( rad_lw_in(0:0,nysg:nyng,nxlg:nxrg) ) 8198 ELSE 8199 ALLOCATE( rad_lw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8200 ENDIF 8201 ENDIF 8202 IF ( k == 1 ) THEN 8203 IF ( radiation_scheme == 'clear-sky' .OR. & 8204 radiation_scheme == 'constant') THEN 8205 READ ( 13 ) tmp_3d2 8206 rad_lw_in(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8207 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8208 ELSE 8209 READ ( 13 ) tmp_3d 8210 rad_lw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8211 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8212 ENDIF 8213 ENDIF 8214 8215 CASE ( 'rad_lw_in_av' ) 8216 IF ( .NOT. ALLOCATED( rad_lw_in_av ) ) THEN 8217 IF ( radiation_scheme == 'clear-sky' .OR. & 8218 radiation_scheme == 'constant') THEN 8219 ALLOCATE( rad_lw_in_av(0:0,nysg:nyng,nxlg:nxrg) ) 8220 ELSE 8221 ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8222 ENDIF 8223 ENDIF 8224 IF ( k == 1 ) THEN 8225 IF ( radiation_scheme == 'clear-sky' .OR. & 8226 radiation_scheme == 'constant') THEN 8227 READ ( 13 ) tmp_3d2 8228 rad_lw_in_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8229 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8230 ELSE 8231 READ ( 13 ) tmp_3d 8232 rad_lw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8233 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8234 ENDIF 8235 ENDIF 8236 8237 CASE ( 'rad_lw_out' ) 8238 IF ( .NOT. ALLOCATED( rad_lw_out ) ) THEN 8239 IF ( radiation_scheme == 'clear-sky' .OR. & 8240 radiation_scheme == 'constant') THEN 8241 ALLOCATE( rad_lw_out(0:0,nysg:nyng,nxlg:nxrg) ) 8242 ELSE 8243 ALLOCATE( rad_lw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8244 ENDIF 8245 ENDIF 8246 IF ( k == 1 ) THEN 8247 IF ( radiation_scheme == 'clear-sky' .OR. & 8248 radiation_scheme == 'constant') THEN 8249 READ ( 13 ) tmp_3d2 8250 rad_lw_out(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8251 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8252 ELSE 8253 READ ( 13 ) tmp_3d 8254 rad_lw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8255 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8256 ENDIF 8257 ENDIF 8258 8259 CASE ( 'rad_lw_out_av' ) 8260 IF ( .NOT. ALLOCATED( rad_lw_out_av ) ) THEN 8261 IF ( radiation_scheme == 'clear-sky' .OR. & 8262 radiation_scheme == 'constant') THEN 8263 ALLOCATE( rad_lw_out_av(0:0,nysg:nyng,nxlg:nxrg) ) 8264 ELSE 8265 ALLOCATE( rad_lw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8266 ENDIF 8267 ENDIF 8268 IF ( k == 1 ) THEN 8269 IF ( radiation_scheme == 'clear-sky' .OR. & 8270 radiation_scheme == 'constant') THEN 8271 READ ( 13 ) tmp_3d2 8272 rad_lw_out_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) & 8273 = tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8274 ELSE 8275 READ ( 13 ) tmp_3d 8276 rad_lw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8277 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8278 ENDIF 8279 ENDIF 8280 8281 CASE ( 'rad_lw_cs_hr' ) 8282 IF ( .NOT. ALLOCATED( rad_lw_cs_hr ) ) THEN 8283 ALLOCATE( rad_lw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8284 ENDIF 8285 IF ( k == 1 ) READ ( 13 ) tmp_3d 8286 rad_lw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8287 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8288 8289 CASE ( 'rad_lw_cs_hr_av' ) 8290 IF ( .NOT. ALLOCATED( rad_lw_cs_hr_av ) ) THEN 8291 ALLOCATE( rad_lw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8292 ENDIF 8293 IF ( k == 1 ) READ ( 13 ) tmp_3d 8294 rad_lw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8295 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8296 8297 CASE ( 'rad_lw_hr' ) 8298 IF ( .NOT. ALLOCATED( rad_lw_hr ) ) THEN 8299 ALLOCATE( rad_lw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8300 ENDIF 8301 IF ( k == 1 ) READ ( 13 ) tmp_3d 8302 rad_lw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8303 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8304 8305 CASE ( 'rad_lw_hr_av' ) 8306 IF ( .NOT. ALLOCATED( rad_lw_hr_av ) ) THEN 8307 ALLOCATE( rad_lw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8308 ENDIF 8309 IF ( k == 1 ) READ ( 13 ) tmp_3d 8310 rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8311 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8312 8313 CASE ( 'rad_sw_in' ) 8314 IF ( .NOT. ALLOCATED( rad_sw_in ) ) THEN 8315 IF ( radiation_scheme == 'clear-sky' .OR. & 8316 radiation_scheme == 'constant') THEN 8317 ALLOCATE( rad_sw_in(0:0,nysg:nyng,nxlg:nxrg) ) 8318 ELSE 8319 ALLOCATE( rad_sw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8320 ENDIF 8321 ENDIF 8322 IF ( k == 1 ) THEN 8323 IF ( radiation_scheme == 'clear-sky' .OR. & 8324 radiation_scheme == 'constant') THEN 8325 READ ( 13 ) tmp_3d2 8326 rad_sw_in(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8327 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8328 ELSE 8329 READ ( 13 ) tmp_3d 8330 rad_sw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8331 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8332 ENDIF 8333 ENDIF 8334 8335 CASE ( 'rad_sw_in_av' ) 8336 IF ( .NOT. ALLOCATED( rad_sw_in_av ) ) THEN 8337 IF ( radiation_scheme == 'clear-sky' .OR. & 8338 radiation_scheme == 'constant') THEN 8339 ALLOCATE( rad_sw_in_av(0:0,nysg:nyng,nxlg:nxrg) ) 8340 ELSE 8341 ALLOCATE( rad_sw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8342 ENDIF 8343 ENDIF 8344 IF ( k == 1 ) THEN 8345 IF ( radiation_scheme == 'clear-sky' .OR. & 8346 radiation_scheme == 'constant') THEN 8347 READ ( 13 ) tmp_3d2 8348 rad_sw_in_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =& 8349 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8350 ELSE 8351 READ ( 13 ) tmp_3d 8352 rad_sw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8353 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8354 ENDIF 8355 ENDIF 8356 8357 CASE ( 'rad_sw_out' ) 8358 IF ( .NOT. ALLOCATED( rad_sw_out ) ) THEN 8359 IF ( radiation_scheme == 'clear-sky' .OR. & 8360 radiation_scheme == 'constant') THEN 8361 ALLOCATE( rad_sw_out(0:0,nysg:nyng,nxlg:nxrg) ) 8362 ELSE 8363 ALLOCATE( rad_sw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8364 ENDIF 8365 ENDIF 8366 IF ( k == 1 ) THEN 8367 IF ( radiation_scheme == 'clear-sky' .OR. & 8368 radiation_scheme == 'constant') THEN 8369 READ ( 13 ) tmp_3d2 8370 rad_sw_out(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8371 tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8372 ELSE 8373 READ ( 13 ) tmp_3d 8374 rad_sw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8375 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8376 ENDIF 8377 ENDIF 8378 8379 CASE ( 'rad_sw_out_av' ) 8380 IF ( .NOT. ALLOCATED( rad_sw_out_av ) ) THEN 8381 IF ( radiation_scheme == 'clear-sky' .OR. & 8382 radiation_scheme == 'constant') THEN 8383 ALLOCATE( rad_sw_out_av(0:0,nysg:nyng,nxlg:nxrg) ) 8384 ELSE 8385 ALLOCATE( rad_sw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8386 ENDIF 8387 ENDIF 8388 IF ( k == 1 ) THEN 8389 IF ( radiation_scheme == 'clear-sky' .OR. & 8390 radiation_scheme == 'constant') THEN 8391 READ ( 13 ) tmp_3d2 8392 rad_sw_out_av(0:0,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) & 8393 = tmp_3d2(0:0,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8394 ELSE 8395 READ ( 13 ) tmp_3d 8396 rad_sw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8397 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8398 ENDIF 8399 ENDIF 8400 8401 CASE ( 'rad_sw_cs_hr' ) 8402 IF ( .NOT. ALLOCATED( rad_sw_cs_hr ) ) THEN 8403 ALLOCATE( rad_sw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8404 ENDIF 8405 IF ( k == 1 ) READ ( 13 ) tmp_3d 8406 rad_sw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8407 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8408 8409 CASE ( 'rad_sw_cs_hr_av' ) 8410 IF ( .NOT. ALLOCATED( rad_sw_cs_hr_av ) ) THEN 8411 ALLOCATE( rad_sw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8412 ENDIF 8413 IF ( k == 1 ) READ ( 13 ) tmp_3d 8414 rad_sw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8415 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8416 8417 CASE ( 'rad_sw_hr' ) 8418 IF ( .NOT. ALLOCATED( rad_sw_hr ) ) THEN 8419 ALLOCATE( rad_sw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8420 ENDIF 8421 IF ( k == 1 ) READ ( 13 ) tmp_3d 8422 rad_sw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8423 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8424 8425 CASE ( 'rad_sw_hr_av' ) 8426 IF ( .NOT. ALLOCATED( rad_sw_hr_av ) ) THEN 8427 ALLOCATE( rad_sw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 8428 ENDIF 8429 IF ( k == 1 ) READ ( 13 ) tmp_3d 8430 rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 8431 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 8432 8433 CASE DEFAULT 8434 8435 found = .FALSE. 8436 8437 END SELECT 8438 8439 8440 END SUBROUTINE radiation_rrd_local 8441 8441 8442 8442
Note: See TracChangeset
for help on using the changeset viewer.