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-2012 Leibniz University Hannover !--------------------------------------------------------------------------------! ! ! Current revisions: ! ----------------- ! ! ! Former revisions: ! ----------------- ! $Id: header.f90 1116 2013-03-26 18:49:55Z suehring $ ! ! 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 Aajustment 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 ! ! 767 2011-10-14 06:39:12Z raasch ! Output of given initial u,v-profiles ! ! 759 2011-09-15 13:58:31Z raasch ! output of maximum number of parallel io streams ! ! 707 2011-03-29 11:39:40Z raasch ! bc_lr/ns replaced by bc_lr/ns_cyc ! ! 667 2010-12-23 12:06:00Z suehring/gryschka ! Output of advection scheme. ! Modified output of Prandtl-layer height. ! ! 580 2010-10-05 13:59:11Z heinze ! Renaming of ws_vertical_gradient to subs_vertical_gradient, ! ws_vertical_gradient_level to subs_vertical_gradient_level and ! ws_vertical_gradient_level_ind to subs_vertical_gradient_level_i ! ! 493 2010-03-01 08:30:24Z raasch ! NetCDF data output format extendend for NetCDF4/HDF5 ! ! 449 2010-02-02 11:23:59Z raasch ! +large scale vertical motion (subsidence/ascent) ! Bugfix: index problem concerning gradient_level indices removed ! ! 410 2009-12-04 17:05:40Z letzel ! Masked data output: + dt_domask, mask_01~20_x|y|z, mask_01~20_x|y|z_loop, ! mask_scale|_x|y|z, masks, skip_time_domask ! ! 346 2009-07-06 10:13:41Z raasch ! initializing_actions='read_data_for_recycling' renamed to 'cyclic_fill' ! Coupling with independent precursor runs. ! Output of messages replaced by message handling routine. ! Output of several additional dvr parameters ! +canyon_height, canyon_width_x, canyon_width_y, canyon_wall_left, ! canyon_wall_south, conserve_volume_flow_mode, dp_external, dp_level_b, ! dp_smooth, dpdxy, u_bulk, v_bulk ! topography_grid_convention moved from user_header ! small bugfix concerning 3d 64bit netcdf output format ! ! 206 2008-10-13 14:59:11Z raasch ! Bugfix: error in zu index in case of section_xy = -1 ! ! 198 2008-09-17 08:55:28Z raasch ! Format adjustments allowing output of larger revision numbers ! ! 197 2008-09-16 15:29:03Z raasch ! allow 100 spectra levels instead of 10 for consistency with ! define_netcdf_header, ! bugfix in the output of the characteristic levels of potential temperature, ! geostrophic wind, scalar concentration, humidity and leaf area density, ! output of turbulence recycling informations ! ! 138 2007-11-28 10:03:58Z letzel ! Allow new case bc_uv_t = 'dirichlet_0' for channel flow. ! Allow two instead of one digit to specify isosurface and slicer variables. ! Output of sorting frequency of particles ! ! 108 2007-08-24 15:10:38Z letzel ! Output of informations for coupled model runs (boundary conditions etc.) ! + output of momentumfluxes at the top boundary ! Rayleigh damping for ocean, e_init ! ! 97 2007-06-21 08:23:15Z raasch ! Adjustments for the ocean version. ! use_pt_reference renamed use_reference ! ! 87 2007-05-22 15:46:47Z raasch ! Bugfix: output of use_upstream_for_tke ! ! 82 2007-04-16 15:40:52Z raasch ! Preprocessor strings for different linux clusters changed to "lc", ! routine local_flush is used for buffer flushing ! ! 76 2007-03-29 00:58:32Z raasch ! Output of netcdf_64bit_3d, particles-package is now part of the default code, ! output of the loop optimization method, moisture renamed humidity, ! output of subversion revision number ! ! 19 2007-02-23 04:53:48Z raasch ! Output of scalar flux applied at top boundary ! ! RCS Log replace by Id keyword, revision history cleaned up ! ! Revision 1.63 2006/08/22 13:53:13 raasch ! Output of dz_max ! ! Revision 1.1 1997/08/11 06:17:20 raasch ! Initial revision ! ! ! Description: ! ------------ ! Writing a header with all important informations 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 USE control_parameters USE cloud_parameters USE cpulog USE dvrp_variables USE grid_variables USE indices USE model_1d USE particle_attributes USE pegrid USE subsidence_mod USE spectrum IMPLICIT NONE CHARACTER (LEN=1) :: prec CHARACTER (LEN=2) :: do2d_mode CHARACTER (LEN=5) :: section_chr CHARACTER (LEN=10) :: coor_chr, host_chr CHARACTER (LEN=16) :: begin_chr CHARACTER (LEN=26) :: ver_rev CHARACTER (LEN=40) :: output_format CHARACTER (LEN=70) :: char1, char2, dopr_chr, & do2d_xy, do2d_xz, do2d_yz, do3d_chr, & domask_chr, run_classification CHARACTER (LEN=86) :: coordinates, gradients, learde, slices, & temperatures, ugcomponent, vgcomponent CHARACTER (LEN=85) :: roben, runten CHARACTER (LEN=1), DIMENSION(1:3) :: dir = (/ 'x', 'y', 'z' /) INTEGER :: av, bh, blx, bly, bxl, bxr, byn, bys, ch, count, cwx, cwy, & cxl, cxr, cyn, cys, dim, i, io, j, l, ll, mpi_type REAL :: 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 informations 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 ) THEN IF ( coupling_start_time > simulated_time_at_begin ) THEN WRITE ( io, 109 ) ELSE WRITE ( io, 114 ) ENDIF ENDIF #endif WRITE ( io, 102 ) run_date, run_identifier, run_time, runnr, & ADJUSTR( host_chr ) #if defined( __parallel ) IF ( npex == -1 .AND. pdims(2) /= 1 ) THEN char1 = 'calculated' ELSEIF ( ( host(1:3) == 'ibm' .OR. host(1:3) == 'nec' .OR. & host(1:2) == 'lc' ) .AND. & npex == -1 .AND. pdims(2) == 1 ) THEN char1 = 'forced' 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 ( psolver == 'poisfft_hybrid' ) WRITE ( io, 138 ) ELSEIF ( psolver == 'sor' ) THEN WRITE ( io, 112 ) nsor_ini, nsor, omega_sor ELSEIF ( psolver == 'multigrid' ) THEN WRITE ( io, 135 ) 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 ) 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, advected_distance_y/1000.0 ENDIF WRITE ( io, 122 ) timestep_scheme IF ( use_upstream_for_tke ) WRITE ( io, 143 ) IF ( rayleigh_damping_factor /= 0.0 ) 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 IF ( large_scale_subsidence ) THEN WRITE ( io, 153 ) WRITE ( io, 154 ) ENDIF WRITE ( io, 99 ) ! !-- Runtime and timestep informations 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 .AND. & simulated_time_at_begin == simulated_time ) THEN IF ( dt_restart == 9999999.9 ) 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 ) THEN cpuseconds_per_simulated_second = 0.0 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 ), & cpuseconds_per_simulated_second IF ( time_restart /= 9999999.9 .AND. time_restart < end_time ) THEN IF ( dt_restart == 9999999.9 ) 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 ) 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 ! !-- 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 ) THEN building_wall_left = ( nx + 1 - blx ) / 2 * dx ENDIF bxl = INT ( building_wall_left / dx + 0.5 ) bxr = bxl + blx IF ( building_wall_south == 9999999.9 ) THEN building_wall_south = ( ny + 1 - bly ) / 2 * dy ENDIF bys = INT ( building_wall_south / dy + 0.5 ) 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 ) THEN ! !-- Street canyon in y direction cwx = NINT( canyon_width_x / dx ) IF ( canyon_wall_left == 9999999.9 ) 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 ) THEN ! !-- Street canyon in x direction cwy = NINT( canyon_width_y / dy ) IF ( canyon_wall_south == 9999999.9 ) 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 WRITE ( io, 280 ) canopy_mode, pch_index, drag_coefficient IF ( passive_scalar ) THEN WRITE ( io, 281 ) scalar_exchange_coefficient, & leaf_surface_concentration ENDIF ! !-- Heat flux at the top of vegetation WRITE ( io, 282 ) cthf ! !-- Leaf area density profile !-- Building output strings, starting with surface value WRITE ( learde, '(F6.4)' ) lad_surface gradients = '------' slices = ' 0' coordinates = ' 0.0' i = 1 DO WHILE ( lad_vertical_gradient_level_ind(i) /= -9999 ) WRITE (coor_chr,'(F7.2)') lad(lad_vertical_gradient_level_ind(i)) learde = TRIM( learde ) // ' ' // 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( learde ), & TRIM( gradients ), TRIM( slices ) 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 runten = TRIM( runten ) // ' pt(0) = pt_surface' 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 runten = 'q(0) = q_surface' 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 WRITE ( io, 306 ) surface_heatflux IF ( random_heatflux ) WRITE ( io, 307 ) ENDIF IF ( humidity .AND. constant_waterflux ) THEN WRITE ( io, 311 ) surface_waterflux 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 ) pt_damping_width, pt_damping_factor IF ( turbulent_inflow ) THEN WRITE ( io, 319 ) recycling_width, recycling_plane, & inflow_damping_height, inflow_damping_width ENDIF ENDIF ! !-- Listing of 1D-profiles WRITE ( io, 325 ) dt_dopr_listing IF ( averaging_interval_pr /= 0.0 ) THEN WRITE ( io, 326 ) averaging_interval_pr, dt_averaging_input_pr ENDIF ! !-- DATA output WRITE ( io, 330 ) IF ( averaging_interval_pr /= 0.0 ) 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 = '' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF 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 ) 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 ) ) .AND. & ( netcdf_output .OR. iso2d_output ) ) 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 = '' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF IF ( iso2d_output ) THEN IF ( netcdf_output ) THEN output_format = TRIM( output_format_netcdf ) // ' and iso2d' ELSE output_format = 'iso2d' ENDIF ENDIF WRITE ( io, 344 ) output_format IF ( do2d_xy /= '' .AND. section(1,1) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate informations 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 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 ) 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 ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF ENDIF IF ( do2d_xz /= '' .AND. section(1,2) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate informations 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 ) 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 ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF ENDIF IF ( do2d_yz /= '' .AND. section(1,3) /= -9999 ) THEN i = 1 slices = '/' coordinates = '/' ! !-- Building strings with index and coordinate informations 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 ) 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 ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF 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 = '' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF IF ( avs_output ) THEN IF ( netcdf_output ) THEN output_format = TRIM( output_format_netcdf ) // ' and avs' ELSE output_format = 'avs' ENDIF ENDIF 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 ( do3d_compress ) THEN do3d_chr = '' i = 1 DO WHILE ( do3d(av,i) /= ' ' ) SELECT CASE ( do3d(av,i) ) CASE ( 'u' ) j = 1 CASE ( 'v' ) j = 2 CASE ( 'w' ) j = 3 CASE ( 'p' ) j = 4 CASE ( 'pt' ) j = 5 END SELECT WRITE ( prec, '(I1)' ) plot_3d_precision(j)%precision do3d_chr = TRIM( do3d_chr ) // ' ' // TRIM( do3d(av,i) ) // & ':' // prec // ',' i = i + 1 ENDDO WRITE ( io, 338 ) do3d_chr ENDIF IF ( av == 0 ) THEN IF ( skip_time_do3d /= 0.0 ) THEN WRITE ( io, 339 ) skip_time_do3d ENDIF ELSE IF ( skip_time_data_output_av /= 0.0 ) 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 = ' ' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF 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 ) THEN WRITE ( io, 339 ) skip_time_domask(mid) ENDIF ELSE IF ( skip_time_data_output_av /= 0.0 ) THEN WRITE ( io, 339 ) skip_time_data_output_av ENDIF ENDIF ! !-- output locations DO dim = 1, 3 IF ( mask(mid,dim,1) >= 0.0 ) THEN count = 0 DO WHILE ( mask(mid,dim,count+1) >= 0.0 ) 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 .AND. & mask_loop(mid,dim,2) < 0.0 .AND. & mask_loop(mid,dim,3) == 0.0 ) THEN WRITE ( io, 350 ) dir(dim), dir(dim) ELSEIF ( mask_loop(mid,dim,3) == 0.0 ) 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 ) THEN WRITE ( io, 340 ) output_format = '' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF WRITE ( io, 344 ) output_format WRITE ( io, 341 ) dt_dots ENDIF #if defined( __dvrp_graphics ) ! !-- Dvrp-output IF ( dt_dvrp /= 9999999.9 ) 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 ) THEN WRITE ( io, 370 ) output_format = ' ' IF ( netcdf_output ) THEN output_format = output_format_netcdf ENDIF WRITE ( io, 344 ) output_format WRITE ( io, 371 ) dt_dosp IF ( skip_time_dosp /= 0.0 ) 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 WRITE ( io, 410 ) omega, phi, f, fs ! !-- Other quantities WRITE ( io, 411 ) g IF ( use_reference ) THEN IF ( ocean ) THEN WRITE ( io, 412 ) prho_reference ELSE WRITE ( io, 413 ) 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 * nc_const IF ( precipitation ) WRITE ( io, 511 ) c_sedimentation 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 WRITE ( io, 423 ) TRIM( coordinates ), TRIM( ugcomponent ), & TRIM( gradients ), TRIM( slices ) !-- 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 WRITE ( io, 424 ) TRIM( coordinates ), TRIM( vgcomponent ), & TRIM( gradients ), TRIM( slices ) ! !-- Initial wind profiles IF ( u_profile(1) /= 9999999.9 ) 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 WRITE ( io, 420 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) ! !-- 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 WRITE ( io, 421 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) 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 ! !-- 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 WRITE ( io, 426 ) TRIM( coordinates ), TRIM( temperatures ), & TRIM( gradients ), TRIM( slices ) 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 ( 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 ) WRITE ( io, 455 ) e_init IF ( e_min > 0.0 ) 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 ) THEN WRITE ( io, 475 ) pt_surface_initial_change ENDIF IF ( humidity .AND. q_surface_initial_change /= 0.0 ) THEN WRITE ( io, 476 ) q_surface_initial_change ENDIF IF ( passive_scalar .AND. q_surface_initial_change /= 0.0 ) 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, dt_sort_particles IF ( use_sgs_for_particles ) WRITE ( io, 488 ) dt_min_part IF ( random_start_position ) WRITE ( io, 481 ) 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 ) THEN WRITE ( io, 485 ) dt_write_particle_data output_format = ' ' IF ( netcdf_output ) THEN IF ( netcdf_data_format > 1 ) THEN output_format = 'netcdf (64 bit offset) and binary' ELSE output_format = 'netcdf and binary' ENDIF ELSE output_format = 'binary' ENDIF WRITE ( io, 344 ) output_format ENDIF IF ( dt_dopts /= 9999999.9 ) 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 ) THEN WRITE ( io, 490 ) i, 0.0 WRITE ( io, 492 ) ELSE WRITE ( io, 490 ) i, radius(i) IF ( density_ratio(i) /= 0.0 ) 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 informations 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,'******************************',6X,42('-')/ & 1X,'* ',A,' *',6X,A/ & 1X,'******************************',6X,42('-')) 101 FORMAT (37X,'coupled run using MPI-',I1,': ',A/ & 37X,42('-')) 102 FORMAT (/' Date: ',A8,6X,'Run: ',A20/ & ' Time: ',A8,6X,'Run-No.: ',I2.2/ & ' Run on host: ',A10) #if defined( __parallel ) 103 FORMAT (' Number of PEs:',10X,I6,6X,'Processor grid (x,y): (',I3,',',I3, & ')',1X,A) 104 FORMAT (' Number of PEs:',8X,I5,9X,'Tasks:',I4,' threads per task:',I4/ & 37X,'Processor grid (x,y): (',I3,',',I3,')',1X,A) 105 FORMAT (37X,'One additional PE is used to handle'/37X,'the dvrp output!') 106 FORMAT (37X,'A 1d-decomposition along x is forced'/ & 37X,'because the job is running on an SMP-cluster') 107 FORMAT (37X,'A 1d-decomposition along ',A,' is used') 108 FORMAT (37X,'Max. # of parallel I/O streams is ',I5) 109 FORMAT (37X,'Precursor run for coupled atmos-ocean run'/ & 37X,42('-')) 114 FORMAT (37X,'Coupled atmosphere-ocean run following'/ & 37X,'independent precursor runs'/ & 37X,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') 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 multigrid 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,')') 138 FORMAT (' Using hybrid version for 1d-domain-decomposition') 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 /) 153 FORMAT (' --> Large-scale vertical motion is used in the ', & 'prognostic equation for') 154 FORMAT (' the potential temperature') 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 informations:'/ & ' -----------------------'// & 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 top: ',I4 / & ' 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) 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 (/' pt damping layer width = ',F7.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') 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,')'/) 338 FORMAT (' Compressed data output'/ & ' Decimal precision: ',A/) 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 ) #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 (' Angular velocity : omega = ',E9.3,' rad/s'/ & ' Geograph. latitude : phi = ',F4.1,' degr'/ & ' Coriolis parameter : f = ',F9.6,' 1/s'/ & ' f* = ',F9.6,' 1/s') 411 FORMAT (/' Gravity : g = ',F4.1,' m/s**2') 412 FORMAT (/' Reference density in buoyancy terms: ',F8.3,' kg/m**3') 413 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') 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') 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') 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') 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'/ & ' Particles are sorted every ',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/) 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,' ') END SUBROUTINE header