304 type(model_state_type),
intent(inout),
target :: current_state
308 integer :: ncid, time_dim
309 integer :: number_input_humidities
312 current_state%use_surface_boundary_conditions= &
313 options_get_logical(current_state%options_database,
"use_surface_boundary_conditions")
315 if (current_state%use_surface_boundary_conditions)
then 316 current_state%type_of_surface_boundary_conditions=options_get_integer(current_state%options_database, &
317 "type_of_surface_boundary_conditions")
318 current_state%use_time_varying_surface_values=options_get_logical(current_state%options_database, &
319 "use_time_varying_surface_values")
321 current_state%saturated_surface = .true.
323 input_file=options_get_string(current_state%options_database,
"surface_conditions_file")
325 if (trim(input_file)==
'' .or. trim(input_file)==
'None')
then 326 if (current_state%use_time_varying_surface_values)
then 327 allocate(surface_boundary_input_times(max_surface_inputs))
328 surface_boundary_input_times=0.0
329 call options_get_real_array(current_state%options_database,
"surface_boundary_input_times", surface_boundary_input_times)
331 if (current_state%type_of_surface_boundary_conditions == prescribed_surface_fluxes)
then 332 allocate(surface_sensible_heat_flux(max_surface_inputs), &
333 surface_latent_heat_flux(max_surface_inputs) &
335 surface_sensible_heat_flux=0.0
336 surface_latent_heat_flux=0.0
337 call options_get_real_array(current_state%options_database,
"surface_sensible_heat_flux", surface_sensible_heat_flux)
338 call options_get_real_array(current_state%options_database,
"surface_latent_heat_flux", surface_latent_heat_flux)
339 number_input_humidities=0
340 else if (current_state%type_of_surface_boundary_conditions == prescribed_surface_values)
then 341 allocate(surface_temperatures(max_surface_inputs), &
342 surface_humidities(max_surface_inputs) &
344 surface_temperatures=0.0
345 surface_humidities=0.0
346 call options_get_real_array(current_state%options_database,
"surface_temperatures", surface_temperatures)
347 call options_get_real_array(current_state%options_database,
"surface_humidities", surface_humidities)
348 number_input_humidities=options_get_array_size(current_state%options_database,
"surface_humidities")
351 call check_status(nf90_open(path = trim(input_file), mode = nf90_nowrite, ncid = ncid))
352 if (log_get_logging_level() .ge. log_debug)
then 353 call log_master_log(log_debug,
"Reading in surface boundary conditions from:"//trim(input_file) )
355 call read_dimensions(ncid, time_dim)
356 call read_variables(trim(input_file), ncid, time_dim, &
357 surface_boundary_input_times, surface_temperatures, surface_humidities, &
358 surface_latent_heat_flux, surface_sensible_heat_flux)
359 if (.not.
allocated(surface_humidities))
then 360 number_input_humidities=0
362 number_input_humidities=
size(surface_humidities)
364 call check_status(nf90_close(ncid))
366 if (number_input_humidities>0)current_state%saturated_surface=.false.
368 max_change_buoyancy_flux=options_get_real(current_state%options_database,
"max_change_buoyancy_flux")
372 allocate(current_state%lookup_table_velocity(current_state%lookup_table_entries), &
373 current_state%lookup_table_ustr(current_state%lookup_table_entries))