SUBROUTINE header !--------------------------------------------------------------------------------! ! This file is part of PALM. ! ! PALM is free software: you can redistribute it and/or modify it under the terms ! of the GNU General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR ! A PARTICULAR PURPOSE. See the GNU General Public License for more details. ! ! You should have received a copy of the GNU General Public License along with ! PALM. If not, see . ! ! Copyright 1997-2014 Leibniz Universitaet Hannover !--------------------------------------------------------------------------------! ! ! Current revisions: ! ----------------- ! ! ! Former revisions: ! ----------------- ! $Id: header.f90 1592 2015-05-08 14:02:25Z suehring $ ! ! 1590 2015-05-08 13:56:27Z maronga ! Bugfix: Added TRIM statements for character strings for LSM and radiation code ! ! 1585 2015-04-30 07:05:52Z maronga ! Further output for radiation model(s). ! ! 1575 2015-03-27 09:56:27Z raasch ! adjustments for psolver-queries, output of seed_follows_topography ! ! 1560 2015-03-06 10:48:54Z keck ! output for recycling y shift ! ! 1557 2015-03-05 16:43:04Z suehring ! output for monotonic limiter ! ! 1551 2015-03-03 14:18:16Z maronga ! Added informal output for land surface model and radiation model. Removed typo. ! ! 1496 2014-12-02 17:25:50Z maronga ! Renamed: "radiation -> "cloud_top_radiation" ! ! 1484 2014-10-21 10:53:05Z kanani ! Changes due to new module structure of the plant canopy model: ! module plant_canopy_model_mod and output for new canopy model parameters ! (alpha_lad, beta_lad, lai_beta,...) added, ! drag_coefficient, leaf_surface_concentration and scalar_exchange_coefficient ! renamed to canopy_drag_coeff, leaf_surface_conc and leaf_scalar_exch_coeff, ! learde renamed leaf_area_density. ! Bugfix: DO-WHILE-loop for lad header information additionally restricted ! by maximum number of gradient levels (currently 10) ! ! 1482 2014-10-18 12:34:45Z raasch ! information about calculated or predefined virtual processor topology adjusted ! ! 1468 2014-09-24 14:06:57Z maronga ! Adapted for use on up to 6-digit processor cores ! ! 1429 2014-07-15 12:53:45Z knoop ! header exended to provide ensemble_member_nr if specified ! ! 1376 2014-04-26 11:21:22Z boeske ! Correction of typos ! ! 1365 2014-04-22 15:03:56Z boeske ! New section 'Large scale forcing and nudging': ! output of large scale forcing and nudging information, ! new section for initial profiles created ! ! 1359 2014-04-11 17:15:14Z hoffmann ! dt_sort_particles removed ! ! 1353 2014-04-08 15:21:23Z heinze ! REAL constants provided with KIND-attribute ! ! 1327 2014-03-21 11:00:16Z raasch ! parts concerning iso2d and avs output removed, ! -netcdf output queries ! ! 1324 2014-03-21 09:13:16Z suehring ! Bugfix: module spectrum added ! ! 1322 2014-03-20 16:38:49Z raasch ! REAL functions provided with KIND-attribute, ! some REAL constants defined as wp-kind ! ! 1320 2014-03-20 08:40:49Z raasch ! ONLY-attribute added to USE-statements, ! kind-parameters added to all INTEGER and REAL declaration statements, ! kinds are defined in new module kinds, ! revision history before 2012 removed, ! comment fields (!:) to be used for variable explanations added to ! all variable declaration statements ! ! 1308 2014-03-13 14:58:42Z fricke ! output of the fixed number of output time levels ! output_format adjusted for masked data if netcdf_data_format > 5 ! ! 1299 2014-03-06 13:15:21Z heinze ! output for using large_scale subsidence in combination ! with large_scale_forcing ! reformatting, more detailed explanations ! ! 1241 2013-10-30 11:36:58Z heinze ! output for nudging + large scale forcing from external file ! ! 1216 2013-08-26 09:31:42Z raasch ! output for transpose_compute_overlap ! ! 1212 2013-08-15 08:46:27Z raasch ! output for poisfft_hybrid removed ! ! 1179 2013-06-14 05:57:58Z raasch ! output of reference_state, use_reference renamed use_single_reference_value ! ! 1159 2013-05-21 11:58:22Z fricke ! +use_cmax ! ! 1115 2013-03-26 18:16:16Z hoffmann ! descriptions for Seifert-Beheng-cloud-physics-scheme added ! ! 1111 2013-03-08 23:54:10Z raasch ! output of accelerator board information ! ibc_p_b = 2 removed ! ! 1108 2013-03-05 07:03:32Z raasch ! bugfix for r1106 ! ! 1106 2013-03-04 05:31:38Z raasch ! some format changes for coupled runs ! ! 1092 2013-02-02 11:24:22Z raasch ! unused variables removed ! ! 1036 2012-10-22 13:43:42Z raasch ! code put under GPL (PALM 3.9) ! ! 1031 2012-10-19 14:35:30Z raasch ! output of netCDF data format modified ! ! 1015 2012-09-27 09:23:24Z raasch ! output of Adjustment of mixing length to the Prandtl mixing length at first ! grid point above ground removed ! ! 1003 2012-09-14 14:35:53Z raasch ! output of information about equal/unequal subdomain size removed ! ! 1001 2012-09-13 14:08:46Z raasch ! all actions concerning leapfrog- and upstream-spline-scheme removed ! ! 978 2012-08-09 08:28:32Z fricke ! -km_damp_max, outflow_damping_width ! +pt_damping_factor, pt_damping_width ! +z0h ! ! 964 2012-07-26 09:14:24Z raasch ! output of profil-related quantities removed ! ! 940 2012-07-09 14:31:00Z raasch ! Output in case of simulations for pure neutral stratification (no pt-equation ! solved) ! ! 927 2012-06-06 19:15:04Z raasch ! output of masking_method for mg-solver ! ! 868 2012-03-28 12:21:07Z raasch ! translation velocity in Galilean transformation changed to 0.6 * ug ! ! 833 2012-02-22 08:55:55Z maronga ! Adjusted format for leaf area density ! ! 828 2012-02-21 12:00:36Z raasch ! output of dissipation_classes + radius_classes ! ! 825 2012-02-19 03:03:44Z raasch ! Output of cloud physics parameters/quantities complemented and restructured ! ! Revision 1.1 1997/08/11 06:17:20 raasch ! Initial revision ! ! ! Description: ! ------------ ! Writing a header with all important information about the actual run. ! This subroutine is called three times, two times at the beginning ! (writing information on files RUN_CONTROL and HEADER) and one time at the ! end of the run, then writing additional information about CPU-usage on file ! header. !-----------------------------------------------------------------------------! USE arrays_3d, & ONLY: pt_init, qsws, q_init, sa_init, shf, ug, vg, w_subs, zu USE control_parameters USE cloud_parameters, & ONLY: cp, curvature_solution_effects, c_sedimentation, & limiter_sedimentation, l_v, nc_const, r_d, ventilation_effect USE cpulog, & ONLY: log_point_s USE dvrp_variables, & ONLY: use_seperate_pe_for_dvrp_output USE grid_variables, & ONLY: dx, dy USE indices, & ONLY: mg_loc_ind, nnx, nny, nnz, nx, ny, nxl_mg, nxr_mg, nyn_mg, & nys_mg, nzt, nzt_mg USE kinds USE land_surface_model_mod, & ONLY: conserve_water_content, dewfall, land_surface, nzb_soil, & nzt_soil, root_fraction, soil_moisture, soil_temperature, & soil_type, soil_type_name, veg_type, veg_type_name, zs USE model_1d, & ONLY: damp_level_ind_1d, dt_pr_1d, dt_run_control_1d, end_time_1d USE particle_attributes, & ONLY: bc_par_b, bc_par_lr, bc_par_ns, bc_par_t, collision_kernel, & density_ratio, dissipation_classes, dt_min_part, dt_prel, & dt_write_particle_data, end_time_prel, & maximum_number_of_tailpoints, maximum_tailpoint_age, & minimum_tailpoint_distance, number_of_particle_groups, & particle_advection, particle_advection_start, & particles_per_point, pdx, pdy, pdz, psb, psl, psn, psr, pss, & pst, radius, radius_classes, random_start_position, & seed_follows_topography, & total_number_of_particles, use_particle_tails, & use_sgs_for_particles, total_number_of_tails, & vertical_particle_advection, write_particle_statistics USE pegrid USE plant_canopy_model_mod, & ONLY: alpha_lad, beta_lad, calc_beta_lad_profile, canopy_drag_coeff, & canopy_mode, cthf, lad, lad_surface, lad_vertical_gradient, & lad_vertical_gradient_level, lad_vertical_gradient_level_ind, & lai_beta, leaf_scalar_exch_coeff, leaf_surface_conc, pch_index, & plant_canopy USE radiation_model_mod, & ONLY: albedo, albedo_type, albedo_type_name, constant_albedo, & day_init, dt_radiation, lambda, lw_radiation, net_radiation, & radiation, radiation_scheme, sw_radiation, time_utc_init USE spectrum, & ONLY: comp_spectra_level, data_output_sp, plot_spectra_level, & spectra_direction IMPLICIT NONE CHARACTER (LEN=1) :: prec !: CHARACTER (LEN=2) :: do2d_mode !: CHARACTER (LEN=5) :: section_chr !: CHARACTER (LEN=10) :: coor_chr !: CHARACTER (LEN=10) :: host_chr !: CHARACTER (LEN=16) :: begin_chr !: CHARACTER (LEN=26) :: ver_rev !: CHARACTER (LEN=40) :: output_format !: CHARACTER (LEN=70) :: char1 !: CHARACTER (LEN=70) :: char2 !: CHARACTER (LEN=70) :: dopr_chr !: CHARACTER (LEN=70) :: do2d_xy !: CHARACTER (LEN=70) :: do2d_xz !: CHARACTER (LEN=70) :: do2d_yz !: CHARACTER (LEN=70) :: do3d_chr !: CHARACTER (LEN=70) :: domask_chr !: CHARACTER (LEN=70) :: run_classification !: CHARACTER (LEN=85) :: roben !: CHARACTER (LEN=85) :: runten !: CHARACTER (LEN=86) :: coordinates !: CHARACTER (LEN=86) :: gradients !: CHARACTER (LEN=86) :: leaf_area_density !: CHARACTER (LEN=86) :: roots !: CHARACTER (LEN=86) :: slices !: CHARACTER (LEN=86) :: temperatures !: CHARACTER (LEN=86) :: ugcomponent !: CHARACTER (LEN=86) :: vgcomponent !: CHARACTER (LEN=1), DIMENSION(1:3) :: dir = (/ 'x', 'y', 'z' /) !: INTEGER(iwp) :: av !: INTEGER(iwp) :: bh !: INTEGER(iwp) :: blx !: INTEGER(iwp) :: bly !: INTEGER(iwp) :: bxl !: INTEGER(iwp) :: bxr !: INTEGER(iwp) :: byn !: INTEGER(iwp) :: bys !: INTEGER(iwp) :: ch !: INTEGER(iwp) :: count !: INTEGER(iwp) :: cwx !: INTEGER(iwp) :: cwy !: INTEGER(iwp) :: cxl !: INTEGER(iwp) :: cxr !: INTEGER(iwp) :: cyn !: INTEGER(iwp) :: cys !: INTEGER(iwp) :: dim !: INTEGER(iwp) :: i !: INTEGER(iwp) :: io !: INTEGER(iwp) :: j !: INTEGER(iwp) :: k !: INTEGER(iwp) :: l !: INTEGER(iwp) :: ll !: INTEGER(iwp) :: mpi_type !: REAL(wp) :: canopy_height !: canopy height (in m) REAL(wp) :: cpuseconds_per_simulated_second !: ! !-- Open the output file. At the end of the simulation, output is directed !-- to unit 19. IF ( ( runnr == 0 .OR. force_print_header ) .AND. & .NOT. simulated_time_at_begin /= simulated_time ) THEN io = 15 ! header output on file RUN_CONTROL ELSE io = 19 ! header output on file HEADER ENDIF CALL check_open( io ) ! !-- At the end of the run, output file (HEADER) will be rewritten with !-- new information IF ( io == 19 .AND. simulated_time_at_begin /= simulated_time ) REWIND( 19 ) ! !-- Determine kind of model run IF ( TRIM( initializing_actions ) == 'read_restart_data' ) THEN run_classification = '3D - restart run' ELSEIF ( TRIM( initializing_actions ) == 'cyclic_fill' ) THEN run_classification = '3D - run with cyclic fill of 3D - prerun data' ELSEIF ( INDEX( initializing_actions, 'set_constant_profiles' ) /= 0 ) THEN run_classification = '3D - run without 1D - prerun' ELSEIF ( INDEX( initializing_actions, 'set_1d-model_profiles' ) /= 0 ) THEN run_classification = '3D - run with 1D - prerun' ELSEIF ( INDEX( initializing_actions, 'by_user' ) /=0 ) THEN run_classification = '3D - run initialized by user' ELSE message_string = ' unknown action(s): ' // TRIM( initializing_actions ) CALL message( 'header', 'PA0191', 0, 0, 0, 6, 0 ) ENDIF IF ( ocean ) THEN run_classification = 'ocean - ' // run_classification ELSE run_classification = 'atmosphere - ' // run_classification ENDIF ! !-- Run-identification, date, time, host host_chr = host(1:10) ver_rev = TRIM( version ) // ' ' // TRIM( revision ) WRITE ( io, 100 ) ver_rev, TRIM( run_classification ) IF ( TRIM( coupling_mode ) /= 'uncoupled' ) THEN #if defined( __mpi2 ) mpi_type = 2 #else mpi_type = 1 #endif WRITE ( io, 101 ) mpi_type, coupling_mode ENDIF #if defined( __parallel ) IF ( coupling_start_time /= 0.0_wp ) THEN IF ( coupling_start_time > simulated_time_at_begin ) THEN WRITE ( io, 109 ) ELSE WRITE ( io, 114 ) ENDIF ENDIF #endif IF ( ensemble_member_nr /= 0 ) THEN WRITE ( io, 512 ) run_date, run_identifier, run_time, runnr, & ADJUSTR( host_chr ), ensemble_member_nr ELSE WRITE ( io, 102 ) run_date, run_identifier, run_time, runnr, & ADJUSTR( host_chr ) ENDIF #if defined( __parallel ) IF ( npex == -1 .AND. npey == -1 ) THEN char1 = 'calculated' ELSE char1 = 'predefined' ENDIF IF ( threads_per_task == 1 ) THEN WRITE ( io, 103 ) numprocs, pdims(1), pdims(2), TRIM( char1 ) ELSE WRITE ( io, 104 ) numprocs*threads_per_task, numprocs, & threads_per_task, pdims(1), pdims(2), TRIM( char1 ) ENDIF IF ( num_acc_per_node /= 0 ) WRITE ( io, 117 ) num_acc_per_node IF ( ( host(1:3) == 'ibm' .OR. host(1:3) == 'nec' .OR. & host(1:2) == 'lc' .OR. host(1:3) == 'dec' ) .AND. & npex == -1 .AND. pdims(2) == 1 ) & THEN WRITE ( io, 106 ) ELSEIF ( pdims(2) == 1 ) THEN WRITE ( io, 107 ) 'x' ELSEIF ( pdims(1) == 1 ) THEN WRITE ( io, 107 ) 'y' ENDIF IF ( use_seperate_pe_for_dvrp_output ) WRITE ( io, 105 ) IF ( numprocs /= maximum_parallel_io_streams ) THEN WRITE ( io, 108 ) maximum_parallel_io_streams ENDIF #else IF ( num_acc_per_node /= 0 ) WRITE ( io, 120 ) num_acc_per_node #endif WRITE ( io, 99 ) ! !-- Numerical schemes WRITE ( io, 110 ) IF ( psolver(1:7) == 'poisfft' ) THEN WRITE ( io, 111 ) TRIM( fft_method ) IF ( transpose_compute_overlap ) WRITE( io, 115 ) ELSEIF ( psolver == 'sor' ) THEN WRITE ( io, 112 ) nsor_ini, nsor, omega_sor ELSEIF ( psolver(1:9) == 'multigrid' ) THEN WRITE ( io, 135 ) TRIM(psolver), cycle_mg, maximum_grid_level, ngsrb IF ( mg_cycles == -1 ) THEN WRITE ( io, 140 ) residual_limit ELSE WRITE ( io, 141 ) mg_cycles ENDIF IF ( mg_switch_to_pe0_level == 0 ) THEN WRITE ( io, 136 ) nxr_mg(1)-nxl_mg(1)+1, nyn_mg(1)-nys_mg(1)+1, & nzt_mg(1) ELSEIF ( mg_switch_to_pe0_level /= -1 ) THEN WRITE ( io, 137 ) mg_switch_to_pe0_level, & mg_loc_ind(2,0)-mg_loc_ind(1,0)+1, & mg_loc_ind(4,0)-mg_loc_ind(3,0)+1, & nzt_mg(mg_switch_to_pe0_level), & nxr_mg(1)-nxl_mg(1)+1, nyn_mg(1)-nys_mg(1)+1, & nzt_mg(1) ENDIF IF ( masking_method ) WRITE ( io, 144 ) ENDIF IF ( call_psolver_at_all_substeps .AND. timestep_scheme(1:5) == 'runge' ) & THEN WRITE ( io, 142 ) ENDIF IF ( momentum_advec == 'pw-scheme' ) THEN WRITE ( io, 113 ) ELSEIF (momentum_advec == 'ws-scheme' ) THEN WRITE ( io, 503 ) ENDIF IF ( scalar_advec == 'pw-scheme' ) THEN WRITE ( io, 116 ) ELSEIF ( scalar_advec == 'ws-scheme' ) THEN WRITE ( io, 504 ) ELSEIF ( scalar_advec == 'ws-scheme-mono' ) THEN WRITE ( io, 513 ) ELSE WRITE ( io, 118 ) ENDIF WRITE ( io, 139 ) TRIM( loop_optimization ) IF ( galilei_transformation ) THEN IF ( use_ug_for_galilei_tr ) THEN char1 = '0.6 * geostrophic wind' ELSE char1 = 'mean wind in model domain' ENDIF IF ( simulated_time_at_begin == simulated_time ) THEN char2 = 'at the start of the run' ELSE char2 = 'at the end of the run' ENDIF WRITE ( io, 119 ) TRIM( char1 ), TRIM( char2 ), & advected_distance_x/1000.0_wp, & advected_distance_y/1000.0_wp ENDIF WRITE ( io, 122 ) timestep_scheme IF ( use_upstream_for_tke ) WRITE ( io, 143 ) IF ( rayleigh_damping_factor /= 0.0_wp ) THEN IF ( .NOT. ocean ) THEN WRITE ( io, 123 ) 'above', rayleigh_damping_height, & rayleigh_damping_factor ELSE WRITE ( io, 123 ) 'below', rayleigh_damping_height, & rayleigh_damping_factor ENDIF ENDIF IF ( neutral ) WRITE ( io, 131 ) pt_surface IF ( humidity ) THEN IF ( .NOT. cloud_physics ) THEN WRITE ( io, 129 ) ELSE WRITE ( io, 130 ) ENDIF ENDIF IF ( passive_scalar ) WRITE ( io, 134 ) IF ( conserve_volume_flow ) THEN WRITE ( io, 150 ) conserve_volume_flow_mode IF ( TRIM( conserve_volume_flow_mode ) == 'bulk_velocity' ) THEN WRITE ( io, 151 ) u_bulk, v_bulk ENDIF ELSEIF ( dp_external ) THEN IF ( dp_smooth ) THEN WRITE ( io, 152 ) dpdxy, dp_level_b, ', vertically smoothed.' ELSE WRITE ( io, 152 ) dpdxy, dp_level_b, '.' ENDIF ENDIF WRITE ( io, 99 ) ! !-- Runtime and timestep information WRITE ( io, 200 ) IF ( .NOT. dt_fixed ) THEN WRITE ( io, 201 ) dt_max, cfl_factor ELSE WRITE ( io, 202 ) dt ENDIF WRITE ( io, 203 ) simulated_time_at_begin, end_time IF ( time_restart /= 9999999.9_wp .AND. & simulated_time_at_begin == simulated_time ) THEN IF ( dt_restart == 9999999.9_wp ) THEN WRITE ( io, 204 ) ' Restart at: ',time_restart ELSE WRITE ( io, 205 ) ' Restart at: ',time_restart, dt_restart ENDIF ENDIF IF ( simulated_time_at_begin /= simulated_time ) THEN i = MAX ( log_point_s(10)%counts, 1 ) IF ( ( simulated_time - simulated_time_at_begin ) == 0.0_wp ) THEN cpuseconds_per_simulated_second = 0.0_wp ELSE cpuseconds_per_simulated_second = log_point_s(10)%sum / & ( simulated_time - & simulated_time_at_begin ) ENDIF WRITE ( io, 206 ) simulated_time, log_point_s(10)%sum, & log_point_s(10)%sum / REAL( i, KIND=wp ), & cpuseconds_per_simulated_second IF ( time_restart /= 9999999.9_wp .AND. time_restart < end_time ) THEN IF ( dt_restart == 9999999.9_wp ) THEN WRITE ( io, 204 ) ' Next restart at: ',time_restart ELSE WRITE ( io, 205 ) ' Next restart at: ',time_restart, dt_restart ENDIF ENDIF ENDIF ! !-- Start time for coupled runs, if independent precursor runs for atmosphere !-- and ocean are used or have been used. In this case, coupling_start_time !-- defines the time when the coupling is switched on. IF ( coupling_start_time /= 0.0_wp ) THEN WRITE ( io, 207 ) coupling_start_time ENDIF ! !-- Computational grid IF ( .NOT. ocean ) THEN WRITE ( io, 250 ) dx, dy, dz, (nx+1)*dx, (ny+1)*dy, zu(nzt+1) IF ( dz_stretch_level_index < nzt+1 ) THEN WRITE ( io, 252 ) dz_stretch_level, dz_stretch_level_index, & dz_stretch_factor, dz_max ENDIF ELSE WRITE ( io, 250 ) dx, dy, dz, (nx+1)*dx, (ny+1)*dy, zu(0) IF ( dz_stretch_level_index > 0 ) THEN WRITE ( io, 252 ) dz_stretch_level, dz_stretch_level_index, & dz_stretch_factor, dz_max ENDIF ENDIF WRITE ( io, 254 ) nx, ny, nzt+1, MIN( nnx, nx+1 ), MIN( nny, ny+1 ), & MIN( nnz+2, nzt+2 ) IF ( sloping_surface ) WRITE ( io, 260 ) alpha_surface ! !-- Large scale forcing and nudging WRITE ( io, 160 ) IF ( large_scale_forcing ) THEN WRITE ( io, 162 ) WRITE ( io, 163 ) IF ( large_scale_subsidence ) THEN IF ( .NOT. use_subsidence_tendencies ) THEN WRITE ( io, 164 ) ELSE WRITE ( io, 165 ) ENDIF ENDIF IF ( bc_pt_b == 'dirichlet' ) THEN WRITE ( io, 180 ) ELSEIF ( bc_pt_b == 'neumann' ) THEN WRITE ( io, 181 ) ENDIF IF ( bc_q_b == 'dirichlet' ) THEN WRITE ( io, 182 ) ELSEIF ( bc_q_b == 'neumann' ) THEN WRITE ( io, 183 ) ENDIF WRITE ( io, 167 ) IF ( nudging ) THEN WRITE ( io, 170 ) ENDIF ELSE WRITE ( io, 161 ) WRITE ( io, 171 ) ENDIF IF ( large_scale_subsidence ) THEN WRITE ( io, 168 ) WRITE ( io, 169 ) ENDIF ! !-- Profile for the large scale vertial velocity !-- Building output strings, starting with surface value IF ( large_scale_subsidence ) THEN temperatures = ' 0.0' gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( subs_vertical_gradient_level_i(i) /= -9999 ) WRITE (coor_chr,'(E10.2,7X)') & w_subs(subs_vertical_gradient_level_i(i)) temperatures = TRIM( temperatures ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(E10.2,7X)') subs_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I10,7X)') subs_vertical_gradient_level_i(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F10.2,7X)') subs_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO IF ( .NOT. large_scale_forcing ) THEN WRITE ( io, 426 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ENDIF ENDIF !-- Profile of the geostrophic wind (component ug) !-- Building output strings WRITE ( ugcomponent, '(F6.2)' ) ug_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( ug_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F6.2,1X)') ug(ug_vertical_gradient_level_ind(i)) ugcomponent = TRIM( ugcomponent ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F6.2,1X)') ug_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I6,1X)') ug_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F6.1,1X)') ug_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO IF ( .NOT. large_scale_forcing ) THEN WRITE ( io, 423 ) TRIM( coordinates ), TRIM( ugcomponent ), & TRIM( gradients ), TRIM( slices ) ENDIF !-- Profile of the geostrophic wind (component vg) !-- Building output strings WRITE ( vgcomponent, '(F6.2)' ) vg_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( vg_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F6.2,1X)') vg(vg_vertical_gradient_level_ind(i)) vgcomponent = TRIM( vgcomponent ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F6.2,1X)') vg_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I6,1X)') vg_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F6.1,1X)') vg_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO IF ( .NOT. large_scale_forcing ) THEN WRITE ( io, 424 ) TRIM( coordinates ), TRIM( vgcomponent ), & TRIM( gradients ), TRIM( slices ) ENDIF ! !-- Topography WRITE ( io, 270 ) topography SELECT CASE ( TRIM( topography ) ) CASE ( 'flat' ) ! no actions necessary CASE ( 'single_building' ) blx = INT( building_length_x / dx ) bly = INT( building_length_y / dy ) bh = INT( building_height / dz ) IF ( building_wall_left == 9999999.9_wp ) THEN building_wall_left = ( nx + 1 - blx ) / 2 * dx ENDIF bxl = INT ( building_wall_left / dx + 0.5_wp ) bxr = bxl + blx IF ( building_wall_south == 9999999.9_wp ) THEN building_wall_south = ( ny + 1 - bly ) / 2 * dy ENDIF bys = INT ( building_wall_south / dy + 0.5_wp ) byn = bys + bly WRITE ( io, 271 ) building_length_x, building_length_y, & building_height, bxl, bxr, bys, byn CASE ( 'single_street_canyon' ) ch = NINT( canyon_height / dz ) IF ( canyon_width_x /= 9999999.9_wp ) THEN ! !-- Street canyon in y direction cwx = NINT( canyon_width_x / dx ) IF ( canyon_wall_left == 9999999.9_wp ) THEN canyon_wall_left = ( nx + 1 - cwx ) / 2 * dx ENDIF cxl = NINT( canyon_wall_left / dx ) cxr = cxl + cwx WRITE ( io, 272 ) 'y', canyon_height, ch, 'u', cxl, cxr ELSEIF ( canyon_width_y /= 9999999.9_wp ) THEN ! !-- Street canyon in x direction cwy = NINT( canyon_width_y / dy ) IF ( canyon_wall_south == 9999999.9_wp ) THEN canyon_wall_south = ( ny + 1 - cwy ) / 2 * dy ENDIF cys = NINT( canyon_wall_south / dy ) cyn = cys + cwy WRITE ( io, 272 ) 'x', canyon_height, ch, 'v', cys, cyn ENDIF END SELECT IF ( TRIM( topography ) /= 'flat' ) THEN IF ( TRIM( topography_grid_convention ) == ' ' ) THEN IF ( TRIM( topography ) == 'single_building' .OR. & TRIM( topography ) == 'single_street_canyon' ) THEN WRITE ( io, 278 ) ELSEIF ( TRIM( topography ) == 'read_from_file' ) THEN WRITE ( io, 279 ) ENDIF ELSEIF ( TRIM( topography_grid_convention ) == 'cell_edge' ) THEN WRITE ( io, 278 ) ELSEIF ( TRIM( topography_grid_convention ) == 'cell_center' ) THEN WRITE ( io, 279 ) ENDIF ENDIF IF ( plant_canopy ) THEN canopy_height = pch_index * dz WRITE ( io, 280 ) canopy_mode, canopy_height, pch_index, & canopy_drag_coeff IF ( passive_scalar ) THEN WRITE ( io, 281 ) leaf_scalar_exch_coeff, & leaf_surface_conc ENDIF ! !-- Heat flux at the top of vegetation WRITE ( io, 282 ) cthf ! !-- Leaf area density profile, calculated either from given vertical !-- gradients or from beta probability density function. IF ( .NOT. calc_beta_lad_profile ) THEN !-- Building output strings, starting with surface value WRITE ( leaf_area_density, '(F6.4)' ) lad_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( i < 11 .AND. lad_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F7.2)') lad(lad_vertical_gradient_level_ind(i)) leaf_area_density = TRIM( leaf_area_density ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.2)') lad_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I7)') lad_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.1)') lad_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) i = i + 1 ENDDO WRITE ( io, 283 ) TRIM( coordinates ), TRIM( leaf_area_density ), & TRIM( gradients ), TRIM( slices ) ELSE WRITE ( leaf_area_density, '(F6.4)' ) lad_surface coordinates = ' 0.0' DO k = 1, pch_index WRITE (coor_chr,'(F7.2)') lad(k) leaf_area_density = TRIM( leaf_area_density ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.1)') zu(k) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) ENDDO WRITE ( io, 284 ) TRIM( coordinates ), TRIM( leaf_area_density ), alpha_lad, & beta_lad, lai_beta ENDIF ENDIF IF ( land_surface ) THEN temperatures = '' gradients = '' ! use for humidity here coordinates = '' ! use for height roots = '' ! use for root fraction slices = '' ! use for index i = 1 DO i = nzb_soil, nzt_soil WRITE (coor_chr,'(F10.2,7X)') soil_temperature(i) temperatures = TRIM( temperatures ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F10.2,7X)') soil_moisture(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F10.2,7X)') - zs(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F10.2,7X)') root_fraction(i) roots = TRIM( roots ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I10,7X)') i slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) ENDDO ! !-- Write land surface model header WRITE( io, 419 ) IF ( conserve_water_content ) THEN WRITE( io, 440 ) ELSE WRITE( io, 441 ) ENDIF IF ( dewfall ) THEN WRITE( io, 442 ) ELSE WRITE( io, 443 ) ENDIF WRITE( io, 438 ) TRIM( veg_type_name(veg_type) ), & TRIM (soil_type_name(soil_type) ) WRITE( io, 439 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( roots ), TRIM( slices ) ENDIF IF ( radiation ) THEN ! !-- Write radiation model header WRITE( io, 444 ) IF ( radiation_scheme == "constant" ) THEN WRITE( io, 445 ) net_radiation ELSEIF ( radiation_scheme == "clear-sky" ) THEN WRITE( io, 446 ) ELSEIF ( radiation_scheme == "rrtmg" ) THEN WRITE( io, 447 ) IF ( .NOT. lw_radiation ) WRITE( io, 458 ) IF ( .NOT. sw_radiation ) WRITE( io, 459 ) ENDIF IF ( albedo_type == 0 ) THEN WRITE( io, 448 ) albedo ELSE WRITE( io, 456 ) TRIM( albedo_type_name(albedo_type) ) ENDIF IF ( constant_albedo ) THEN WRITE( io, 457 ) ENDIF WRITE( io, 449 ) dt_radiation ENDIF ! !-- Boundary conditions IF ( ibc_p_b == 0 ) THEN runten = 'p(0) = 0 |' ELSEIF ( ibc_p_b == 1 ) THEN runten = 'p(0) = p(1) |' ENDIF IF ( ibc_p_t == 0 ) THEN roben = 'p(nzt+1) = 0 |' ELSE roben = 'p(nzt+1) = p(nzt) |' ENDIF IF ( ibc_uv_b == 0 ) THEN runten = TRIM( runten ) // ' uv(0) = -uv(1) |' ELSE runten = TRIM( runten ) // ' uv(0) = uv(1) |' ENDIF IF ( TRIM( bc_uv_t ) == 'dirichlet_0' ) THEN roben = TRIM( roben ) // ' uv(nzt+1) = 0 |' ELSEIF ( ibc_uv_t == 0 ) THEN roben = TRIM( roben ) // ' uv(nzt+1) = ug(nzt+1), vg(nzt+1) |' ELSE roben = TRIM( roben ) // ' uv(nzt+1) = uv(nzt) |' ENDIF IF ( ibc_pt_b == 0 ) THEN IF ( land_surface ) THEN runten = TRIM( runten ) // ' pt(0) = from soil model' ELSE runten = TRIM( runten ) // ' pt(0) = pt_surface' ENDIF ELSEIF ( ibc_pt_b == 1 ) THEN runten = TRIM( runten ) // ' pt(0) = pt(1)' ELSEIF ( ibc_pt_b == 2 ) THEN runten = TRIM( runten ) // ' pt(0) = from coupled model' ENDIF IF ( ibc_pt_t == 0 ) THEN roben = TRIM( roben ) // ' pt(nzt+1) = pt_top' ELSEIF( ibc_pt_t == 1 ) THEN roben = TRIM( roben ) // ' pt(nzt+1) = pt(nzt)' ELSEIF( ibc_pt_t == 2 ) THEN roben = TRIM( roben ) // ' pt(nzt+1) = pt(nzt) + dpt/dz_ini' ENDIF WRITE ( io, 300 ) runten, roben IF ( .NOT. constant_diffusion ) THEN IF ( ibc_e_b == 1 ) THEN runten = 'e(0) = e(1)' ELSE runten = 'e(0) = e(1) = (u*/0.1)**2' ENDIF roben = 'e(nzt+1) = e(nzt) = e(nzt-1)' WRITE ( io, 301 ) 'e', runten, roben ENDIF IF ( ocean ) THEN runten = 'sa(0) = sa(1)' IF ( ibc_sa_t == 0 ) THEN roben = 'sa(nzt+1) = sa_surface' ELSE roben = 'sa(nzt+1) = sa(nzt)' ENDIF WRITE ( io, 301 ) 'sa', runten, roben ENDIF IF ( humidity ) THEN IF ( ibc_q_b == 0 ) THEN IF ( land_surface ) THEN runten = 'q(0) = from soil model' ELSE runten = 'q(0) = q_surface' ENDIF ELSE runten = 'q(0) = q(1)' ENDIF IF ( ibc_q_t == 0 ) THEN roben = 'q(nzt) = q_top' ELSE roben = 'q(nzt) = q(nzt-1) + dq/dz' ENDIF WRITE ( io, 301 ) 'q', runten, roben ENDIF IF ( passive_scalar ) THEN IF ( ibc_q_b == 0 ) THEN runten = 's(0) = s_surface' ELSE runten = 's(0) = s(1)' ENDIF IF ( ibc_q_t == 0 ) THEN roben = 's(nzt) = s_top' ELSE roben = 's(nzt) = s(nzt-1) + ds/dz' ENDIF WRITE ( io, 301 ) 's', runten, roben ENDIF IF ( use_surface_fluxes ) THEN WRITE ( io, 303 ) IF ( constant_heatflux ) THEN IF ( large_scale_forcing .AND. lsf_surf ) THEN WRITE ( io, 306 ) shf(0,0) ELSE WRITE ( io, 306 ) surface_heatflux ENDIF IF ( random_heatflux ) WRITE ( io, 307 ) ENDIF IF ( humidity .AND. constant_waterflux ) THEN IF ( large_scale_forcing .AND. lsf_surf ) THEN WRITE ( io, 311 ) qsws(0,0) ELSE WRITE ( io, 311 ) surface_waterflux ENDIF ENDIF IF ( passive_scalar .AND. constant_waterflux ) THEN WRITE ( io, 313 ) surface_waterflux ENDIF ENDIF IF ( use_top_fluxes ) THEN WRITE ( io, 304 ) IF ( coupling_mode == 'uncoupled' ) THEN WRITE ( io, 320 ) top_momentumflux_u, top_momentumflux_v IF ( constant_top_heatflux ) THEN WRITE ( io, 306 ) top_heatflux ENDIF ELSEIF ( coupling_mode == 'ocean_to_atmosphere' ) THEN WRITE ( io, 316 ) ENDIF IF ( ocean .AND. constant_top_salinityflux ) THEN WRITE ( io, 309 ) top_salinityflux ENDIF IF ( humidity .OR. passive_scalar ) THEN WRITE ( io, 315 ) ENDIF ENDIF IF ( prandtl_layer ) THEN WRITE ( io, 305 ) (zu(1)-zu(0)), roughness_length, & z0h_factor*roughness_length, kappa, & rif_min, rif_max IF ( .NOT. constant_heatflux ) WRITE ( io, 308 ) IF ( humidity .AND. .NOT. constant_waterflux ) THEN WRITE ( io, 312 ) ENDIF IF ( passive_scalar .AND. .NOT. constant_waterflux ) THEN WRITE ( io, 314 ) ENDIF ELSE IF ( INDEX(initializing_actions, 'set_1d-model_profiles') /= 0 ) THEN WRITE ( io, 310 ) rif_min, rif_max ENDIF ENDIF WRITE ( io, 317 ) bc_lr, bc_ns IF ( .NOT. bc_lr_cyc .OR. .NOT. bc_ns_cyc ) THEN WRITE ( io, 318 ) use_cmax, pt_damping_width, pt_damping_factor IF ( turbulent_inflow ) THEN IF ( .NOT. recycling_yshift ) THEN WRITE ( io, 319 ) recycling_width, recycling_plane, & inflow_damping_height, inflow_damping_width ELSE WRITE ( io, 322 ) recycling_width, recycling_plane, & inflow_damping_height, inflow_damping_width END IF ENDIF ENDIF ! !-- Initial Profiles WRITE ( io, 321 ) ! !-- Initial wind profiles IF ( u_profile(1) /= 9999999.9_wp ) WRITE ( io, 427 ) ! !-- Initial temperature profile !-- Building output strings, starting with surface temperature WRITE ( temperatures, '(F6.2)' ) pt_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( pt_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F7.2)') pt_init(pt_vertical_gradient_level_ind(i)) temperatures = TRIM( temperatures ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.2)') pt_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I7)') pt_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.1)') pt_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO IF ( .NOT. nudging ) THEN WRITE ( io, 420 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ELSE WRITE ( io, 428 ) ENDIF ! !-- Initial humidity profile !-- Building output strings, starting with surface humidity IF ( humidity .OR. passive_scalar ) THEN WRITE ( temperatures, '(E8.1)' ) q_surface gradients = '--------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( q_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(E8.1,4X)') q_init(q_vertical_gradient_level_ind(i)) temperatures = TRIM( temperatures ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(E8.1,4X)') q_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I8,4X)') q_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F8.1,4X)') q_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO IF ( humidity ) THEN IF ( .NOT. nudging ) THEN WRITE ( io, 421 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ENDIF ELSE WRITE ( io, 422 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ENDIF ENDIF ! !-- Initial salinity profile !-- Building output strings, starting with surface salinity IF ( ocean ) THEN WRITE ( temperatures, '(F6.2)' ) sa_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( sa_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F7.2)') sa_init(sa_vertical_gradient_level_ind(i)) temperatures = TRIM( temperatures ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.2)') sa_vertical_gradient(i) gradients = TRIM( gradients ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(I7)') sa_vertical_gradient_level_ind(i) slices = TRIM( slices ) // ' ' // TRIM( coor_chr ) WRITE (coor_chr,'(F7.1)') sa_vertical_gradient_level(i) coordinates = TRIM( coordinates ) // ' ' // TRIM( coor_chr ) IF ( i == 10 ) THEN EXIT ELSE i = i + 1 ENDIF ENDDO WRITE ( io, 425 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ENDIF ! !-- Listing of 1D-profiles WRITE ( io, 325 ) dt_dopr_listing IF ( averaging_interval_pr /= 0.0_wp ) THEN WRITE ( io, 326 ) averaging_interval_pr, dt_averaging_input_pr ENDIF ! !-- DATA output WRITE ( io, 330 ) IF ( averaging_interval_pr /= 0.0_wp ) THEN WRITE ( io, 326 ) averaging_interval_pr, dt_averaging_input_pr ENDIF ! !-- 1D-profiles dopr_chr = 'Profile:' IF ( dopr_n /= 0 ) THEN WRITE ( io, 331 ) output_format = '' output_format = output_format_netcdf WRITE ( io, 344 ) output_format DO i = 1, dopr_n dopr_chr = TRIM( dopr_chr ) // ' ' // TRIM( data_output_pr(i) ) // ',' IF ( LEN_TRIM( dopr_chr ) >= 60 ) THEN WRITE ( io, 332 ) dopr_chr dopr_chr = ' :' ENDIF ENDDO IF ( dopr_chr /= '' ) THEN WRITE ( io, 332 ) dopr_chr ENDIF WRITE ( io, 333 ) dt_dopr, averaging_interval_pr, dt_averaging_input_pr IF ( skip_time_dopr /= 0.0_wp ) WRITE ( io, 339 ) skip_time_dopr ENDIF ! !-- 2D-arrays DO av = 0, 1 i = 1 do2d_xy = '' do2d_xz = '' do2d_yz = '' DO WHILE ( do2d(av,i) /= ' ' ) l = MAX( 2, LEN_TRIM( do2d(av,i) ) ) do2d_mode = do2d(av,i)(l-1:l) SELECT CASE ( do2d_mode ) CASE ( 'xy' ) ll = LEN_TRIM( do2d_xy ) do2d_xy = do2d_xy(1:ll) // ' ' // do2d(av,i)(1:l-3) // ',' CASE ( 'xz' ) ll = LEN_TRIM( do2d_xz ) do2d_xz = do2d_xz(1:ll) // ' ' // do2d(av,i)(1:l-3) // ',' CASE ( 'yz' ) ll = LEN_TRIM( do2d_yz ) do2d_yz = do2d_yz(1:ll) // ' ' // do2d(av,i)(1:l-3) // ',' END SELECT i = i + 1 ENDDO IF ( ( ( do2d_xy /= '' .AND. section(1,1) /= -9999 ) .OR. & ( do2d_xz /= '' .AND. section(1,2) /= -9999 ) .OR. & ( do2d_yz /= '' .AND. section(1,3) /= -9999 ) ) ) THEN IF ( av == 0 ) THEN WRITE ( io, 334 ) '' ELSE WRITE ( io, 334 ) '(time-averaged)' ENDIF IF ( do2d_at_begin ) THEN begin_chr = 'and at the start' ELSE begin_chr = '' ENDIF output_format = '' output_format = output_format_netcdf WRITE ( io, 344 ) output_format IF ( do2d_xy /= '' .AND. section(1,1) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate information of the !-- slices DO WHILE ( section(i,1) /= -9999 ) WRITE (section_chr,'(I5)') section(i,1) section_chr = ADJUSTL( section_chr ) slices = TRIM( slices ) // TRIM( section_chr ) // '/' IF ( section(i,1) == -1 ) THEN WRITE (coor_chr,'(F10.1)') -1.0_wp ELSE WRITE (coor_chr,'(F10.1)') zu(section(i,1)) ENDIF coor_chr = ADJUSTL( coor_chr ) coordinates = TRIM( coordinates ) // TRIM( coor_chr ) // '/' i = i + 1 ENDDO IF ( av == 0 ) THEN WRITE ( io, 335 ) 'XY', do2d_xy, dt_do2d_xy, & TRIM( begin_chr ), 'k', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_do2d_xy /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_do2d_xy ENDIF ELSE WRITE ( io, 342 ) 'XY', do2d_xy, dt_data_output_av, & TRIM( begin_chr ), averaging_interval, & dt_averaging_input, 'k', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_data_output_av /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF IF ( netcdf_data_format > 4 ) THEN WRITE ( io, 352 ) ntdim_2d_xy(av) ELSE WRITE ( io, 353 ) ENDIF ENDIF IF ( do2d_xz /= '' .AND. section(1,2) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate information of the !-- slices DO WHILE ( section(i,2) /= -9999 ) WRITE (section_chr,'(I5)') section(i,2) section_chr = ADJUSTL( section_chr ) slices = TRIM( slices ) // TRIM( section_chr ) // '/' WRITE (coor_chr,'(F10.1)') section(i,2) * dy coor_chr = ADJUSTL( coor_chr ) coordinates = TRIM( coordinates ) // TRIM( coor_chr ) // '/' i = i + 1 ENDDO IF ( av == 0 ) THEN WRITE ( io, 335 ) 'XZ', do2d_xz, dt_do2d_xz, & TRIM( begin_chr ), 'j', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_do2d_xz /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_do2d_xz ENDIF ELSE WRITE ( io, 342 ) 'XZ', do2d_xz, dt_data_output_av, & TRIM( begin_chr ), averaging_interval, & dt_averaging_input, 'j', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_data_output_av /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF IF ( netcdf_data_format > 4 ) THEN WRITE ( io, 352 ) ntdim_2d_xz(av) ELSE WRITE ( io, 353 ) ENDIF ENDIF IF ( do2d_yz /= '' .AND. section(1,3) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate information of the !-- slices DO WHILE ( section(i,3) /= -9999 ) WRITE (section_chr,'(I5)') section(i,3) section_chr = ADJUSTL( section_chr ) slices = TRIM( slices ) // TRIM( section_chr ) // '/' WRITE (coor_chr,'(F10.1)') section(i,3) * dx coor_chr = ADJUSTL( coor_chr ) coordinates = TRIM( coordinates ) // TRIM( coor_chr ) // '/' i = i + 1 ENDDO IF ( av == 0 ) THEN WRITE ( io, 335 ) 'YZ', do2d_yz, dt_do2d_yz, & TRIM( begin_chr ), 'i', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_do2d_yz /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_do2d_yz ENDIF ELSE WRITE ( io, 342 ) 'YZ', do2d_yz, dt_data_output_av, & TRIM( begin_chr ), averaging_interval, & dt_averaging_input, 'i', TRIM( slices ), & TRIM( coordinates ) IF ( skip_time_data_output_av /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF IF ( netcdf_data_format > 4 ) THEN WRITE ( io, 352 ) ntdim_2d_yz(av) ELSE WRITE ( io, 353 ) ENDIF ENDIF ENDIF ENDDO ! !-- 3d-arrays DO av = 0, 1 i = 1 do3d_chr = '' DO WHILE ( do3d(av,i) /= ' ' ) do3d_chr = TRIM( do3d_chr ) // ' ' // TRIM( do3d(av,i) ) // ',' i = i + 1 ENDDO IF ( do3d_chr /= '' ) THEN IF ( av == 0 ) THEN WRITE ( io, 336 ) '' ELSE WRITE ( io, 336 ) '(time-averaged)' ENDIF output_format = output_format_netcdf WRITE ( io, 344 ) output_format IF ( do3d_at_begin ) THEN begin_chr = 'and at the start' ELSE begin_chr = '' ENDIF IF ( av == 0 ) THEN WRITE ( io, 337 ) do3d_chr, dt_do3d, TRIM( begin_chr ), & zu(nz_do3d), nz_do3d ELSE WRITE ( io, 343 ) do3d_chr, dt_data_output_av, & TRIM( begin_chr ), averaging_interval, & dt_averaging_input, zu(nz_do3d), nz_do3d ENDIF IF ( netcdf_data_format > 4 ) THEN WRITE ( io, 352 ) ntdim_3d(av) ELSE WRITE ( io, 353 ) ENDIF IF ( av == 0 ) THEN IF ( skip_time_do3d /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_do3d ENDIF ELSE IF ( skip_time_data_output_av /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF ENDIF ENDDO ! !-- masked arrays IF ( masks > 0 ) WRITE ( io, 345 ) & mask_scale_x, mask_scale_y, mask_scale_z DO mid = 1, masks DO av = 0, 1 i = 1 domask_chr = '' DO WHILE ( domask(mid,av,i) /= ' ' ) domask_chr = TRIM( domask_chr ) // ' ' // & TRIM( domask(mid,av,i) ) // ',' i = i + 1 ENDDO IF ( domask_chr /= '' ) THEN IF ( av == 0 ) THEN WRITE ( io, 346 ) '', mid ELSE WRITE ( io, 346 ) ' (time-averaged)', mid ENDIF output_format = output_format_netcdf !-- Parallel output not implemented for mask data, hence !-- output_format must be adjusted. IF ( netcdf_data_format == 5 ) output_format = 'netCDF4/HDF5' IF ( netcdf_data_format == 6 ) output_format = 'netCDF4/HDF5 classic' WRITE ( io, 344 ) output_format IF ( av == 0 ) THEN WRITE ( io, 347 ) domask_chr, dt_domask(mid) ELSE WRITE ( io, 348 ) domask_chr, dt_data_output_av, & averaging_interval, dt_averaging_input ENDIF IF ( av == 0 ) THEN IF ( skip_time_domask(mid) /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_domask(mid) ENDIF ELSE IF ( skip_time_data_output_av /= 0.0_wp ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF ! !-- output locations DO dim = 1, 3 IF ( mask(mid,dim,1) >= 0.0_wp ) THEN count = 0 DO WHILE ( mask(mid,dim,count+1) >= 0.0_wp ) count = count + 1 ENDDO WRITE ( io, 349 ) dir(dim), dir(dim), mid, dir(dim), & mask(mid,dim,:count) ELSEIF ( mask_loop(mid,dim,1) < 0.0_wp .AND. & mask_loop(mid,dim,2) < 0.0_wp .AND. & mask_loop(mid,dim,3) == 0.0_wp ) THEN WRITE ( io, 350 ) dir(dim), dir(dim) ELSEIF ( mask_loop(mid,dim,3) == 0.0_wp ) THEN WRITE ( io, 351 ) dir(dim), dir(dim), mid, dir(dim), & mask_loop(mid,dim,1:2) ELSE WRITE ( io, 351 ) dir(dim), dir(dim), mid, dir(dim), & mask_loop(mid,dim,1:3) ENDIF ENDDO ENDIF ENDDO ENDDO ! !-- Timeseries IF ( dt_dots /= 9999999.9_wp ) THEN WRITE ( io, 340 ) output_format = output_format_netcdf WRITE ( io, 344 ) output_format WRITE ( io, 341 ) dt_dots ENDIF #if defined( __dvrp_graphics ) ! !-- Dvrp-output IF ( dt_dvrp /= 9999999.9_wp ) THEN WRITE ( io, 360 ) dt_dvrp, TRIM( dvrp_output ), TRIM( dvrp_host ), & TRIM( dvrp_username ), TRIM( dvrp_directory ) i = 1 l = 0 m = 0 DO WHILE ( mode_dvrp(i) /= ' ' ) IF ( mode_dvrp(i)(1:10) == 'isosurface' ) THEN READ ( mode_dvrp(i), '(10X,I2)' ) j l = l + 1 IF ( do3d(0,j) /= ' ' ) THEN WRITE ( io, 361 ) TRIM( do3d(0,j) ), threshold(l), & isosurface_color(:,l) ENDIF ELSEIF ( mode_dvrp(i)(1:6) == 'slicer' ) THEN READ ( mode_dvrp(i), '(6X,I2)' ) j m = m + 1 IF ( do2d(0,j) /= ' ' ) THEN WRITE ( io, 362 ) TRIM( do2d(0,j) ), & slicer_range_limits_dvrp(:,m) ENDIF ELSEIF ( mode_dvrp(i)(1:9) == 'particles' ) THEN WRITE ( io, 363 ) dvrp_psize IF ( particle_dvrpsize /= 'none' ) THEN WRITE ( io, 364 ) 'size', TRIM( particle_dvrpsize ), & dvrpsize_interval ENDIF IF ( particle_color /= 'none' ) THEN WRITE ( io, 364 ) 'color', TRIM( particle_color ), & color_interval ENDIF ENDIF i = i + 1 ENDDO WRITE ( io, 365 ) groundplate_color, superelevation_x, & superelevation_y, superelevation, clip_dvrp_l, & clip_dvrp_r, clip_dvrp_s, clip_dvrp_n IF ( TRIM( topography ) /= 'flat' ) THEN WRITE ( io, 366 ) topography_color IF ( cluster_size > 1 ) THEN WRITE ( io, 367 ) cluster_size ENDIF ENDIF ENDIF #endif #if defined( __spectra ) ! !-- Spectra output IF ( dt_dosp /= 9999999.9_wp ) THEN WRITE ( io, 370 ) output_format = output_format_netcdf WRITE ( io, 344 ) output_format WRITE ( io, 371 ) dt_dosp IF ( skip_time_dosp /= 0.0_wp ) WRITE ( io, 339 ) skip_time_dosp WRITE ( io, 372 ) ( data_output_sp(i), i = 1,10 ), & ( spectra_direction(i), i = 1,10 ), & ( comp_spectra_level(i), i = 1,100 ), & ( plot_spectra_level(i), i = 1,100 ), & averaging_interval_sp, dt_averaging_input_pr ENDIF #endif WRITE ( io, 99 ) ! !-- Physical quantities WRITE ( io, 400 ) ! !-- Geostrophic parameters IF ( radiation .AND. radiation_scheme /= 'constant' ) THEN WRITE ( io, 417 ) lambda ENDIF WRITE ( io, 410 ) phi, omega, f, fs ! !-- Other quantities WRITE ( io, 411 ) g IF ( radiation .AND. radiation_scheme /= 'constant' ) THEN WRITE ( io, 418 ) day_init, time_utc_init ENDIF WRITE ( io, 412 ) TRIM( reference_state ) IF ( use_single_reference_value ) THEN IF ( ocean ) THEN WRITE ( io, 413 ) prho_reference ELSE WRITE ( io, 414 ) pt_reference ENDIF ENDIF ! !-- Cloud physics parameters IF ( cloud_physics ) THEN WRITE ( io, 415 ) WRITE ( io, 416 ) surface_pressure, r_d, rho_surface, cp, l_v IF ( icloud_scheme == 0 ) THEN WRITE ( io, 510 ) 1.0E-6_wp * nc_const IF ( precipitation ) WRITE ( io, 511 ) c_sedimentation ENDIF ENDIF ! !-- Cloud physcis parameters / quantities / numerical methods WRITE ( io, 430 ) IF ( humidity .AND. .NOT. cloud_physics .AND. .NOT. cloud_droplets) THEN WRITE ( io, 431 ) ELSEIF ( humidity .AND. cloud_physics ) THEN WRITE ( io, 432 ) IF ( cloud_top_radiation ) WRITE ( io, 132 ) IF ( icloud_scheme == 1 ) THEN IF ( precipitation ) WRITE ( io, 133 ) ELSEIF ( icloud_scheme == 0 ) THEN IF ( drizzle ) WRITE ( io, 506 ) IF ( precipitation ) THEN WRITE ( io, 505 ) IF ( turbulence ) WRITE ( io, 507 ) IF ( ventilation_effect ) WRITE ( io, 508 ) IF ( limiter_sedimentation ) WRITE ( io, 509 ) ENDIF ENDIF ELSEIF ( humidity .AND. cloud_droplets ) THEN WRITE ( io, 433 ) IF ( curvature_solution_effects ) WRITE ( io, 434 ) IF ( collision_kernel /= 'none' ) THEN WRITE ( io, 435 ) TRIM( collision_kernel ) IF ( collision_kernel(6:9) == 'fast' ) THEN WRITE ( io, 436 ) radius_classes, dissipation_classes ENDIF ELSE WRITE ( io, 437 ) ENDIF ENDIF ! !-- LES / turbulence parameters WRITE ( io, 450 ) !-- ! ... LES-constants used must still be added here !-- IF ( constant_diffusion ) THEN WRITE ( io, 451 ) km_constant, km_constant/prandtl_number, & prandtl_number ENDIF IF ( .NOT. constant_diffusion) THEN IF ( e_init > 0.0_wp ) WRITE ( io, 455 ) e_init IF ( e_min > 0.0_wp ) WRITE ( io, 454 ) e_min IF ( wall_adjustment ) WRITE ( io, 453 ) wall_adjustment_factor ENDIF ! !-- Special actions during the run WRITE ( io, 470 ) IF ( create_disturbances ) THEN WRITE ( io, 471 ) dt_disturb, disturbance_amplitude, & zu(disturbance_level_ind_b), disturbance_level_ind_b,& zu(disturbance_level_ind_t), disturbance_level_ind_t IF ( .NOT. bc_lr_cyc .OR. .NOT. bc_ns_cyc ) THEN WRITE ( io, 472 ) inflow_disturbance_begin, inflow_disturbance_end ELSE WRITE ( io, 473 ) disturbance_energy_limit ENDIF WRITE ( io, 474 ) TRIM( random_generator ) ENDIF IF ( pt_surface_initial_change /= 0.0_wp ) THEN WRITE ( io, 475 ) pt_surface_initial_change ENDIF IF ( humidity .AND. q_surface_initial_change /= 0.0_wp ) THEN WRITE ( io, 476 ) q_surface_initial_change ENDIF IF ( passive_scalar .AND. q_surface_initial_change /= 0.0_wp ) THEN WRITE ( io, 477 ) q_surface_initial_change ENDIF IF ( particle_advection ) THEN ! !-- Particle attributes WRITE ( io, 480 ) particle_advection_start, dt_prel, bc_par_lr, & bc_par_ns, bc_par_b, bc_par_t, particle_maximum_age, & end_time_prel IF ( use_sgs_for_particles ) WRITE ( io, 488 ) dt_min_part IF ( random_start_position ) WRITE ( io, 481 ) IF ( seed_follows_topography ) WRITE ( io, 496 ) IF ( particles_per_point > 1 ) WRITE ( io, 489 ) particles_per_point WRITE ( io, 495 ) total_number_of_particles IF ( use_particle_tails .AND. maximum_number_of_tailpoints /= 0 ) THEN WRITE ( io, 483 ) maximum_number_of_tailpoints IF ( minimum_tailpoint_distance /= 0 ) THEN WRITE ( io, 484 ) total_number_of_tails, & minimum_tailpoint_distance, & maximum_tailpoint_age ENDIF ENDIF IF ( dt_write_particle_data /= 9999999.9_wp ) THEN WRITE ( io, 485 ) dt_write_particle_data IF ( netcdf_data_format > 1 ) THEN output_format = 'netcdf (64 bit offset) and binary' ELSE output_format = 'netcdf and binary' ENDIF WRITE ( io, 344 ) output_format ENDIF IF ( dt_dopts /= 9999999.9_wp ) WRITE ( io, 494 ) dt_dopts IF ( write_particle_statistics ) WRITE ( io, 486 ) WRITE ( io, 487 ) number_of_particle_groups DO i = 1, number_of_particle_groups IF ( i == 1 .AND. density_ratio(i) == 9999999.9_wp ) THEN WRITE ( io, 490 ) i, 0.0_wp WRITE ( io, 492 ) ELSE WRITE ( io, 490 ) i, radius(i) IF ( density_ratio(i) /= 0.0_wp ) THEN WRITE ( io, 491 ) density_ratio(i) ELSE WRITE ( io, 492 ) ENDIF ENDIF WRITE ( io, 493 ) psl(i), psr(i), pss(i), psn(i), psb(i), pst(i), & pdx(i), pdy(i), pdz(i) IF ( .NOT. vertical_particle_advection(i) ) WRITE ( io, 482 ) ENDDO ENDIF ! !-- Parameters of 1D-model IF ( INDEX( initializing_actions, 'set_1d-model_profiles' ) /= 0 ) THEN WRITE ( io, 500 ) end_time_1d, dt_run_control_1d, dt_pr_1d, & mixing_length_1d, dissipation_1d IF ( damp_level_ind_1d /= nzt+1 ) THEN WRITE ( io, 502 ) zu(damp_level_ind_1d), damp_level_ind_1d ENDIF ENDIF ! !-- User-defined information CALL user_header( io ) WRITE ( io, 99 ) ! !-- Write buffer contents to disc immediately CALL local_flush( io ) ! !-- Here the FORMATs start 99 FORMAT (1X,78('-')) 100 FORMAT (/1X,'******************************',4X,44('-')/ & 1X,'* ',A,' *',4X,A/ & 1X,'******************************',4X,44('-')) 101 FORMAT (35X,'coupled run using MPI-',I1,': ',A/ & 35X,42('-')) 102 FORMAT (/' Date: ',A8,4X,'Run: ',A20/ & ' Time: ',A8,4X,'Run-No.: ',I2.2/ & ' Run on host: ',A10) #if defined( __parallel ) 103 FORMAT (' Number of PEs:',10X,I6,4X,'Processor grid (x,y): (',I4,',',I4, & ')',1X,A) 104 FORMAT (' Number of PEs:',10X,I6,4X,'Tasks:',I4,' threads per task:',I4/ & 35X,'Processor grid (x,y): (',I4,',',I4,')',1X,A) 105 FORMAT (35X,'One additional PE is used to handle'/37X,'the dvrp output!') 106 FORMAT (35X,'A 1d-decomposition along x is forced'/ & 35X,'because the job is running on an SMP-cluster') 107 FORMAT (35X,'A 1d-decomposition along ',A,' is used') 108 FORMAT (35X,'Max. # of parallel I/O streams is ',I5) 109 FORMAT (35X,'Precursor run for coupled atmos-ocean run'/ & 35X,42('-')) 114 FORMAT (35X,'Coupled atmosphere-ocean run following'/ & 35X,'independent precursor runs'/ & 35X,42('-')) 117 FORMAT (' Accelerator boards / node: ',I2) #endif 110 FORMAT (/' Numerical Schemes:'/ & ' -----------------'/) 111 FORMAT (' --> Solve perturbation pressure via FFT using ',A,' routines') 112 FORMAT (' --> Solve perturbation pressure via SOR-Red/Black-Schema'/ & ' Iterations (initial/other): ',I3,'/',I3,' omega = ',F5.3) 113 FORMAT (' --> Momentum advection via Piascek-Williams-Scheme (Form C3)', & ' or Upstream') 115 FORMAT (' FFT and transpositions are overlapping') 116 FORMAT (' --> Scalar advection via Piascek-Williams-Scheme (Form C3)', & ' or Upstream') 118 FORMAT (' --> Scalar advection via Bott-Chlond-Scheme') 119 FORMAT (' --> Galilei-Transform applied to horizontal advection:'/ & ' translation velocity = ',A/ & ' distance advected ',A,': ',F8.3,' km(x) ',F8.3,' km(y)') 120 FORMAT (' Accelerator boards: ',8X,I2) 122 FORMAT (' --> Time differencing scheme: ',A) 123 FORMAT (' --> Rayleigh-Damping active, starts ',A,' z = ',F8.2,' m'/ & ' maximum damping coefficient: ',F5.3, ' 1/s') 129 FORMAT (' --> Additional prognostic equation for the specific humidity') 130 FORMAT (' --> Additional prognostic equation for the total water content') 131 FORMAT (' --> No pt-equation solved. Neutral stratification with pt = ', & F6.2, ' K assumed') 132 FORMAT (' Parameterization of long-wave radiation processes via'/ & ' effective emissivity scheme') 133 FORMAT (' Precipitation parameterization via Kessler-Scheme') 134 FORMAT (' --> Additional prognostic equation for a passive scalar') 135 FORMAT (' --> Solve perturbation pressure via ',A,' method (', & A,'-cycle)'/ & ' number of grid levels: ',I2/ & ' Gauss-Seidel red/black iterations: ',I2) 136 FORMAT (' gridpoints of coarsest subdomain (x,y,z): (',I3,',',I3,',', & I3,')') 137 FORMAT (' level data gathered on PE0 at level: ',I2/ & ' gridpoints of coarsest subdomain (x,y,z): (',I3,',',I3,',', & I3,')'/ & ' gridpoints of coarsest domain (x,y,z): (',I3,',',I3,',', & I3,')') 139 FORMAT (' --> Loop optimization method: ',A) 140 FORMAT (' maximum residual allowed: ',E10.3) 141 FORMAT (' fixed number of multigrid cycles: ',I4) 142 FORMAT (' perturbation pressure is calculated at every Runge-Kutta ', & 'step') 143 FORMAT (' Euler/upstream scheme is used for the SGS turbulent ', & 'kinetic energy') 144 FORMAT (' masking method is used') 150 FORMAT (' --> Volume flow at the right and north boundary will be ', & 'conserved'/ & ' using the ',A,' mode') 151 FORMAT (' with u_bulk = ',F7.3,' m/s and v_bulk = ',F7.3,' m/s') 152 FORMAT (' --> External pressure gradient directly prescribed by the user:',& /' ',2(1X,E12.5),'Pa/m in x/y direction', & /' starting from dp_level_b =', F8.3, 'm', A /) 160 FORMAT (//' Large scale forcing and nudging:'/ & ' -------------------------------'/) 161 FORMAT (' --> No large scale forcing from external is used (default) ') 162 FORMAT (' --> Large scale forcing from external file LSF_DATA is used: ') 163 FORMAT (' - large scale advection tendencies ') 164 FORMAT (' - large scale subsidence velocity w_subs ') 165 FORMAT (' - large scale subsidence tendencies ') 167 FORMAT (' - and geostrophic wind components ug and vg') 168 FORMAT (' --> Large-scale vertical motion is used in the ', & 'prognostic equation(s) for') 169 FORMAT (' the scalar(s) only') 170 FORMAT (' --> Nudging is used') 171 FORMAT (' --> No nudging is used (default) ') 180 FORMAT (' - prescribed surface values for temperature') 181 FORMAT (' - prescribed surface fluxes for temperature') 182 FORMAT (' - prescribed surface values for humidity') 183 FORMAT (' - prescribed surface fluxes for humidity') 200 FORMAT (//' Run time and time step information:'/ & ' ----------------------------------'/) 201 FORMAT ( ' Timestep: variable maximum value: ',F6.3,' s', & ' CFL-factor: ',F4.2) 202 FORMAT ( ' Timestep: dt = ',F6.3,' s'/) 203 FORMAT ( ' Start time: ',F9.3,' s'/ & ' End time: ',F9.3,' s') 204 FORMAT ( A,F9.3,' s') 205 FORMAT ( A,F9.3,' s',5X,'restart every',17X,F9.3,' s') 206 FORMAT (/' Time reached: ',F9.3,' s'/ & ' CPU-time used: ',F9.3,' s per timestep: ', & ' ',F9.3,' s'/ & ' per second of simulated tim', & 'e: ',F9.3,' s') 207 FORMAT ( ' Coupling start time: ',F9.3,' s') 250 FORMAT (//' Computational grid and domain size:'/ & ' ----------------------------------'// & ' Grid length: dx = ',F7.3,' m dy = ',F7.3, & ' m dz = ',F7.3,' m'/ & ' Domain size: x = ',F10.3,' m y = ',F10.3, & ' m z(u) = ',F10.3,' m'/) 252 FORMAT (' dz constant up to ',F10.3,' m (k=',I4,'), then stretched by', & ' factor: ',F5.3/ & ' maximum dz not to be exceeded is dz_max = ',F10.3,' m'/) 254 FORMAT (' Number of gridpoints (x,y,z): (0:',I4,', 0:',I4,', 0:',I4,')'/ & ' Subdomain size (x,y,z): ( ',I4,', ',I4,', ',I4,')'/) 260 FORMAT (/' The model has a slope in x-direction. Inclination angle: ',F6.2,& ' degrees') 270 FORMAT (//' Topography information:'/ & ' ----------------------'// & 1X,'Topography: ',A) 271 FORMAT ( ' Building size (x/y/z) in m: ',F5.1,' / ',F5.1,' / ',F5.1/ & ' Horizontal index bounds (l/r/s/n): ',I4,' / ',I4,' / ',I4, & ' / ',I4) 272 FORMAT ( ' Single quasi-2D street canyon of infinite length in ',A, & ' direction' / & ' Canyon height: ', F6.2, 'm, ch = ', I4, '.' / & ' Canyon position (',A,'-walls): cxl = ', I4,', cxr = ', I4, '.') 278 FORMAT (' Topography grid definition convention:'/ & ' cell edge (staggered grid points'/ & ' (u in x-direction, v in y-direction))' /) 279 FORMAT (' Topography grid definition convention:'/ & ' cell center (scalar grid points)' /) 280 FORMAT (//' Vegetation canopy (drag) model:'/ & ' ------------------------------'// & ' Canopy mode: ', A / & ' Canopy height: ',F6.2,'m (',I4,' grid points)' / & ' Leaf drag coefficient: ',F6.2 /) 281 FORMAT (/ ' Scalar exchange coefficient: ',F6.2 / & ' Scalar concentration at leaf surfaces in kg/m**3: ',F6.2 /) 282 FORMAT (' Predefined constant heatflux at the top of the vegetation: ',F6.2,' K m/s') 283 FORMAT (/ ' Characteristic levels of the leaf area density:'// & ' Height: ',A,' m'/ & ' Leaf area density: ',A,' m**2/m**3'/ & ' Gradient: ',A,' m**2/m**4'/ & ' Gridpoint: ',A) 284 FORMAT (//' Characteristic levels of the leaf area density and coefficients:'// & ' Height: ',A,' m'/ & ' Leaf area density: ',A,' m**2/m**3'/ & ' Coefficient alpha: ',F6.2 / & ' Coefficient beta: ',F6.2 / & ' Leaf area index: ',F6.2,' m**2/m**2' /) 300 FORMAT (//' Boundary conditions:'/ & ' -------------------'// & ' p uv ', & ' pt'// & ' B. bound.: ',A/ & ' T. bound.: ',A) 301 FORMAT (/' ',A// & ' B. bound.: ',A/ & ' T. bound.: ',A) 303 FORMAT (/' Bottom surface fluxes are used in diffusion terms at k=1') 304 FORMAT (/' Top surface fluxes are used in diffusion terms at k=nzt') 305 FORMAT (//' Prandtl-Layer between bottom surface and first ', & 'computational u,v-level:'// & ' zp = ',F6.2,' m z0 = ',F6.4,' m z0h = ',F7.5,& ' m kappa = ',F4.2/ & ' Rif value range: ',F6.2,' <= rif <=',F6.2) 306 FORMAT (' Predefined constant heatflux: ',F9.6,' K m/s') 307 FORMAT (' Heatflux has a random normal distribution') 308 FORMAT (' Predefined surface temperature') 309 FORMAT (' Predefined constant salinityflux: ',F9.6,' psu m/s') 310 FORMAT (//' 1D-Model:'// & ' Rif value range: ',F6.2,' <= rif <=',F6.2) 311 FORMAT (' Predefined constant humidity flux: ',E10.3,' m/s') 312 FORMAT (' Predefined surface humidity') 313 FORMAT (' Predefined constant scalar flux: ',E10.3,' kg/(m**2 s)') 314 FORMAT (' Predefined scalar value at the surface') 315 FORMAT (' Humidity / scalar flux at top surface is 0.0') 316 FORMAT (' Sensible heatflux and momentum flux from coupled ', & 'atmosphere model') 317 FORMAT (//' Lateral boundaries:'/ & ' left/right: ',A/ & ' north/south: ',A) 318 FORMAT (/' use_cmax: ',L1 / & ' pt damping layer width = ',F8.2,' m, pt ', & 'damping factor = ',F6.4) 319 FORMAT (' turbulence recycling at inflow switched on'/ & ' width of recycling domain: ',F7.1,' m grid index: ',I4/ & ' inflow damping height: ',F6.1,' m width: ',F6.1,' m') 320 FORMAT (' Predefined constant momentumflux: u: ',F9.6,' m**2/s**2'/ & ' v: ',F9.6,' m**2/s**2') 321 FORMAT (//' Initial profiles:'/ & ' ----------------') 322 FORMAT (' turbulence recycling at inflow switched on'/ & ' y shift of the recycled inflow turbulence switched on'/ & ' width of recycling domain: ',F7.1,' m grid index: ',I4/ & ' inflow damping height: ',F6.1,' m width: ',F6.1,' m'/) 325 FORMAT (//' List output:'/ & ' -----------'// & ' 1D-Profiles:'/ & ' Output every ',F8.2,' s') 326 FORMAT (' Time averaged over ',F8.2,' s'/ & ' Averaging input every ',F8.2,' s') 330 FORMAT (//' Data output:'/ & ' -----------'/) 331 FORMAT (/' 1D-Profiles:') 332 FORMAT (/' ',A) 333 FORMAT (' Output every ',F8.2,' s',/ & ' Time averaged over ',F8.2,' s'/ & ' Averaging input every ',F8.2,' s') 334 FORMAT (/' 2D-Arrays',A,':') 335 FORMAT (/' ',A2,'-cross-section Arrays: ',A/ & ' Output every ',F8.2,' s ',A/ & ' Cross sections at ',A1,' = ',A/ & ' scalar-coordinates: ',A,' m'/) 336 FORMAT (/' 3D-Arrays',A,':') 337 FORMAT (/' Arrays: ',A/ & ' Output every ',F8.2,' s ',A/ & ' Upper output limit at ',F8.2,' m (GP ',I4,')'/) 339 FORMAT (' No output during initial ',F8.2,' s') 340 FORMAT (/' Time series:') 341 FORMAT (' Output every ',F8.2,' s'/) 342 FORMAT (/' ',A2,'-cross-section Arrays: ',A/ & ' Output every ',F8.2,' s ',A/ & ' Time averaged over ',F8.2,' s'/ & ' Averaging input every ',F8.2,' s'/ & ' Cross sections at ',A1,' = ',A/ & ' scalar-coordinates: ',A,' m'/) 343 FORMAT (/' Arrays: ',A/ & ' Output every ',F8.2,' s ',A/ & ' Time averaged over ',F8.2,' s'/ & ' Averaging input every ',F8.2,' s'/ & ' Upper output limit at ',F8.2,' m (GP ',I4,')'/) 344 FORMAT (' Output format: ',A/) 345 FORMAT (/' Scaling lengths for output locations of all subsequent mask IDs:',/ & ' mask_scale_x (in x-direction): ',F9.3, ' m',/ & ' mask_scale_y (in y-direction): ',F9.3, ' m',/ & ' mask_scale_z (in z-direction): ',F9.3, ' m' ) 346 FORMAT (/' Masked data output',A,' for mask ID ',I2, ':') 347 FORMAT (' Variables: ',A/ & ' Output every ',F8.2,' s') 348 FORMAT (' Variables: ',A/ & ' Output every ',F8.2,' s'/ & ' Time averaged over ',F8.2,' s'/ & ' Averaging input every ',F8.2,' s') 349 FORMAT (/' Output locations in ',A,'-direction in multiples of ', & 'mask_scale_',A,' predefined by array mask_',I2.2,'_',A,':'/ & 13(' ',8(F8.2,',')/) ) 350 FORMAT (/' Output locations in ',A,'-direction: ', & 'all gridpoints along ',A,'-direction (default).' ) 351 FORMAT (/' Output locations in ',A,'-direction in multiples of ', & 'mask_scale_',A,' constructed from array mask_',I2.2,'_',A,'_loop:'/ & ' loop begin:',F8.2,', end:',F8.2,', stride:',F8.2 ) 352 FORMAT (/' Number of output time levels allowed: ',I3 /) 353 FORMAT (/' Number of output time levels allowed: unlimited' /) #if defined( __dvrp_graphics ) 360 FORMAT (' Plot-Sequence with dvrp-software:'/ & ' Output every ',F7.1,' s'/ & ' Output mode: ',A/ & ' Host / User: ',A,' / ',A/ & ' Directory: ',A// & ' The sequence contains:') 361 FORMAT (/' Isosurface of "',A,'" Threshold value: ', E12.3/ & ' Isosurface color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)') 362 FORMAT (/' Slicer plane ',A/ & ' Slicer limits: [',F6.2,',',F6.2,']') 363 FORMAT (/' Particles'/ & ' particle size: ',F7.2,' m') 364 FORMAT (' particle ',A,' controlled by "',A,'" with interval [', & F6.2,',',F6.2,']') 365 FORMAT (/' Groundplate color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)'/ & ' Superelevation along (x,y,z): (',F4.1,',',F4.1,',',F4.1, & ')'/ & ' Clipping limits: from x = ',F9.1,' m to x = ',F9.1,' m'/ & ' from y = ',F9.1,' m to y = ',F9.1,' m') 366 FORMAT (/' Topography color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)') 367 FORMAT (' Polygon reduction for topography: cluster_size = ', I1) #endif #if defined( __spectra ) 370 FORMAT (' Spectra:') 371 FORMAT (' Output every ',F7.1,' s'/) 372 FORMAT (' Arrays: ', 10(A5,',')/ & ' Directions: ', 10(A5,',')/ & ' height levels k = ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 19(I3,','),I3,'.'/ & ' height levels selected for standard plot:'/ & ' k = ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 20(I3,',')/ & ' ', 19(I3,','),I3,'.'/ & ' Time averaged over ', F7.1, ' s,' / & ' Profiles for the time averaging are taken every ', & F6.1,' s') #endif 400 FORMAT (//' Physical quantities:'/ & ' -------------------'/) 410 FORMAT (' Geograph. latitude : phi = ',F4.1,' degr'/ & ' Angular velocity : omega = ',E9.3,' rad/s'/ & ' Coriolis parameter : f = ',F9.6,' 1/s'/ & ' f* = ',F9.6,' 1/s') 411 FORMAT (/' Gravity : g = ',F4.1,' m/s**2') 412 FORMAT (/' Reference state used in buoyancy terms: ',A) 413 FORMAT (' Reference density in buoyancy terms: ',F8.3,' kg/m**3') 414 FORMAT (' Reference temperature in buoyancy terms: ',F8.4,' K') 415 FORMAT (/' Cloud physics parameters:'/ & ' ------------------------'/) 416 FORMAT (' Surface pressure : p_0 = ',F7.2,' hPa'/ & ' Gas constant : R = ',F5.1,' J/(kg K)'/ & ' Density of air : rho_0 = ',F5.3,' kg/m**3'/ & ' Specific heat cap. : c_p = ',F6.1,' J/(kg K)'/ & ' Vapourization heat : L_v = ',E8.2,' J/kg') 417 FORMAT (' Geograph. longitude : lambda = ',F4.1,' degr') 418 FORMAT (/' Day of the year at model start : day_init = ',I3 & /' UTC time at model start : time_utc_init = ',F7.1' s') 419 FORMAT (//' Land surface model information:'/ & ' ------------------------------'/) 420 FORMAT (/' Characteristic levels of the initial temperature profile:'// & ' Height: ',A,' m'/ & ' Temperature: ',A,' K'/ & ' Gradient: ',A,' K/100m'/ & ' Gridpoint: ',A) 421 FORMAT (/' Characteristic levels of the initial humidity profile:'// & ' Height: ',A,' m'/ & ' Humidity: ',A,' kg/kg'/ & ' Gradient: ',A,' (kg/kg)/100m'/ & ' Gridpoint: ',A) 422 FORMAT (/' Characteristic levels of the initial scalar profile:'// & ' Height: ',A,' m'/ & ' Scalar concentration: ',A,' kg/m**3'/ & ' Gradient: ',A,' (kg/m**3)/100m'/ & ' Gridpoint: ',A) 423 FORMAT (/' Characteristic levels of the geo. wind component ug:'// & ' Height: ',A,' m'/ & ' ug: ',A,' m/s'/ & ' Gradient: ',A,' 1/100s'/ & ' Gridpoint: ',A) 424 FORMAT (/' Characteristic levels of the geo. wind component vg:'// & ' Height: ',A,' m'/ & ' vg: ',A,' m/s'/ & ' Gradient: ',A,' 1/100s'/ & ' Gridpoint: ',A) 425 FORMAT (/' Characteristic levels of the initial salinity profile:'// & ' Height: ',A,' m'/ & ' Salinity: ',A,' psu'/ & ' Gradient: ',A,' psu/100m'/ & ' Gridpoint: ',A) 426 FORMAT (/' Characteristic levels of the subsidence/ascent profile:'// & ' Height: ',A,' m'/ & ' w_subs: ',A,' m/s'/ & ' Gradient: ',A,' (m/s)/100m'/ & ' Gridpoint: ',A) 427 FORMAT (/' Initial wind profiles (u,v) are interpolated from given'// & ' profiles') 428 FORMAT (/' Initial profiles (u, v, pt, q) are taken from file '/ & ' NUDGING_DATA') 430 FORMAT (//' Cloud physics quantities / methods:'/ & ' ----------------------------------'/) 431 FORMAT (' Humidity is treated as purely passive scalar (no condensati', & 'on)') 432 FORMAT (' Bulk scheme with liquid water potential temperature and'/ & ' total water content is used.'/ & ' Condensation is parameterized via 0% - or 100% scheme.') 433 FORMAT (' Cloud droplets treated explicitly using the Lagrangian part', & 'icle model') 434 FORMAT (' Curvature and solution effecs are considered for growth of', & ' droplets < 1.0E-6 m') 435 FORMAT (' Droplet collision is handled by ',A,'-kernel') 436 FORMAT (' Fast kernel with fixed radius- and dissipation classes ', & 'are used'/ & ' number of radius classes: ',I3,' interval ', & '[1.0E-6,2.0E-4] m'/ & ' number of dissipation classes: ',I2,' interval ', & '[0,1000] cm**2/s**3') 437 FORMAT (' Droplet collision is switched off') 438 FORMAT (' --> Land surface type : ',A,/ & ' --> Soil porosity type : ',A) 439 FORMAT (/' Initial soil temperature and moisture profile:'// & ' Height: ',A,' m'/ & ' Temperature: ',A,' K'/ & ' Moisture: ',A,' m**3/m**3'/ & ' Root fraction: ',A,' '/ & ' Gridpoint: ',A) 440 FORMAT (/' --> Dewfall is allowed (default)') 441 FORMAT (' --> Dewfall is inhibited') 442 FORMAT (' --> Soil bottom is closed (water content is conserved, default)') 443 FORMAT (' --> Soil bottom is open (water content is not conserved)') 444 FORMAT (//' Radiation model information:'/ & ' ----------------------------'/) 445 FORMAT (' --> Using constant net radiation: net_radiation = ', F6.2, ' W/m**2') 446 FORMAT (' --> Simple radiation scheme for clear sky is used (no clouds,', & ' default)') 447 FORMAT (' --> RRTMG scheme is used') 448 FORMAT (/' User-specific surface albedo: albedo = ', F5.3) 449 FORMAT (' Timestep: dt_radiation = ', F5.2, ' s') 450 FORMAT (//' LES / Turbulence quantities:'/ & ' ---------------------------'/) 451 FORMAT (' Diffusion coefficients are constant:'/ & ' Km = ',F6.2,' m**2/s Kh = ',F6.2,' m**2/s Pr = ',F5.2) 453 FORMAT (' Mixing length is limited to ',F4.2,' * z') 454 FORMAT (' TKE is not allowed to fall below ',E9.2,' (m/s)**2') 455 FORMAT (' initial TKE is prescribed as ',E9.2,' (m/s)**2') 456 FORMAT (/' Albedo is set for land surface type: ', A) 457 FORMAT (/' --> Albedo is fixed during the run') 458 FORMAT (/' --> Longwave radiation is disabled') 459 FORMAT (/' --> Shortwave radiation is disabled.') 470 FORMAT (//' Actions during the simulation:'/ & ' -----------------------------'/) 471 FORMAT (' Disturbance impulse (u,v) every : ',F6.2,' s'/ & ' Disturbance amplitude : ',F4.2, ' m/s'/ & ' Lower disturbance level : ',F8.2,' m (GP ',I4,')'/ & ' Upper disturbance level : ',F8.2,' m (GP ',I4,')') 472 FORMAT (' Disturbances continued during the run from i/j =',I4, & ' to i/j =',I4) 473 FORMAT (' Disturbances cease as soon as the disturbance energy exceeds',& 1X,F5.3, ' m**2/s**2') 474 FORMAT (' Random number generator used : ',A/) 475 FORMAT (' The surface temperature is increased (or decreased, ', & 'respectively, if'/ & ' the value is negative) by ',F5.2,' K at the beginning of the',& ' 3D-simulation'/) 476 FORMAT (' The surface humidity is increased (or decreased, ',& 'respectively, if the'/ & ' value is negative) by ',E8.1,' kg/kg at the beginning of', & ' the 3D-simulation'/) 477 FORMAT (' The scalar value is increased at the surface (or decreased, ',& 'respectively, if the'/ & ' value is negative) by ',E8.1,' kg/m**3 at the beginning of', & ' the 3D-simulation'/) 480 FORMAT (' Particles:'/ & ' ---------'// & ' Particle advection is active (switched on at t = ', F7.1, & ' s)'/ & ' Start of new particle generations every ',F6.1,' s'/ & ' Boundary conditions: left/right: ', A, ' north/south: ', A/& ' bottom: ', A, ' top: ', A/& ' Maximum particle age: ',F9.1,' s'/ & ' Advection stopped at t = ',F9.1,' s'/) 481 FORMAT (' Particles have random start positions'/) 482 FORMAT (' Particles are advected only horizontally'/) 483 FORMAT (' Particles have tails with a maximum of ',I3,' points') 484 FORMAT (' Number of tails of the total domain: ',I10/ & ' Minimum distance between tailpoints: ',F8.2,' m'/ & ' Maximum age of the end of the tail: ',F8.2,' s') 485 FORMAT (' Particle data are written on file every ', F9.1, ' s') 486 FORMAT (' Particle statistics are written on file'/) 487 FORMAT (' Number of particle groups: ',I2/) 488 FORMAT (' SGS velocity components are used for particle advection'/ & ' minimum timestep for advection: ', F7.5/) 489 FORMAT (' Number of particles simultaneously released at each ', & 'point: ', I5/) 490 FORMAT (' Particle group ',I2,':'/ & ' Particle radius: ',E10.3, 'm') 491 FORMAT (' Particle inertia is activated'/ & ' density_ratio (rho_fluid/rho_particle) = ',F5.3/) 492 FORMAT (' Particles are advected only passively (no inertia)'/) 493 FORMAT (' Boundaries of particle source: x:',F8.1,' - ',F8.1,' m'/& ' y:',F8.1,' - ',F8.1,' m'/& ' z:',F8.1,' - ',F8.1,' m'/& ' Particle distances: dx = ',F8.1,' m dy = ',F8.1, & ' m dz = ',F8.1,' m'/) 494 FORMAT (' Output of particle time series in NetCDF format every ', & F8.2,' s'/) 495 FORMAT (' Number of particles in total domain: ',I10/) 496 FORMAT (' Initial vertical particle positions are interpreted ', & 'as relative to the given topography') 500 FORMAT (//' 1D-Model parameters:'/ & ' -------------------'// & ' Simulation time: ',F8.1,' s'/ & ' Run-controll output every: ',F8.1,' s'/ & ' Vertical profile output every: ',F8.1,' s'/ & ' Mixing length calculation: ',A/ & ' Dissipation calculation: ',A/) 502 FORMAT (' Damping layer starts from ',F7.1,' m (GP ',I4,')'/) 503 FORMAT (' --> Momentum advection via Wicker-Skamarock-Scheme 5th order') 504 FORMAT (' --> Scalar advection via Wicker-Skamarock-Scheme 5th order') 505 FORMAT (' Precipitation parameterization via Seifert-Beheng-Scheme') 506 FORMAT (' Drizzle parameterization via Stokes law') 507 FORMAT (' Turbulence effects on precipitation process') 508 FORMAT (' Ventilation effects on evaporation of rain drops') 509 FORMAT (' Slope limiter used for sedimentation process') 510 FORMAT (' Droplet density : N_c = ',F6.1,' 1/cm**3') 511 FORMAT (' Sedimentation Courant number: '/& ' C_s = ',F3.1,' ') 512 FORMAT (/' Date: ',A8,6X,'Run: ',A20/ & ' Time: ',A8,6X,'Run-No.: ',I2.2/ & ' Run on host: ',A10,6X,'En-No.: ',I2.2) 513 FORMAT (' --> Scalar advection via Wicker-Skamarock-Scheme 5th order ' // & '+ monotonic adjustment') END SUBROUTINE header