- Timestamp:
- Jun 29, 2017 9:28:18 AM (7 years ago)
- Location:
- palm/trunk
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SCRIPTS/mrun
r2297 r2298 27 27 # ----------------- 28 28 # $Id$ 29 # write_binary in ENVPAR has type LOGICAL now, 30 # MPI2 coupling removed 31 # 32 # 2297 2017-06-28 14:35:57Z scharf 29 33 # adjustments for using lcgeohu (cirrus @ HUB) 30 34 # cpp_opts removed … … 281 285 config_file=.mrun.config 282 286 coupled_dist="" 283 coupled_mode="mpi1"284 287 cpp_options="" 285 288 cpumax=0 … … 686 689 687 690 688 # EVALUATE MODEL COUPLING FEATURES (OPTION -Y) AND DETERMINE coupled_mode691 # EVALUATE MODEL COUPLING FEATURES (OPTION -Y) 689 692 if [[ $run_coupled_model = true ]] 690 693 then … … 703 706 704 707 fi 705 706 707 # GET coupled_mode FROM THE CONFIG FILE708 line=""709 grep "%cpp_options.*-D__mpi2.*$host" $config_file > tmp_mrun710 while read line711 do712 echo line=\"$line\"713 if [[ "$line" != "" && $(echo $line | cut -c1) != "#" && $(echo $line | cut -d" " -s -f4) = $cond1 && $(echo $line | cut -d" " -s -f5) = $cond2 ]]714 then715 coupled_mode="mpi2"716 fi717 done < tmp_mrun718 708 719 709 fi … … 2667 2657 cat > ENVPAR << EOF 2668 2658 &envpar run_identifier = '$fname', host = '$localhost', 2669 write_binary = '$write_binary', tasks_per_node = $tasks_per_node,2659 write_binary = .${write_binary}., tasks_per_node = $tasks_per_node, 2670 2660 maximum_parallel_io_streams = $maximum_parallel_io_streams, 2671 2661 maximum_cpu_time_allowed = ${cpumax}., … … 2811 2801 (( iio = $numprocs_ocean / $threads_per_task )) 2812 2802 printf "\n coupled run ($iia atmosphere, $iio ocean)" 2813 printf "\n using $coupled_mode coupling"2814 2803 printf "\n\n" 2815 2804 echo "coupled_run $iia $iio" > runfile_atmos … … 2847 2836 (( iio = $numprocs_ocean / $threads_per_task )) 2848 2837 printf "\n coupled run ($iia atmosphere, $iio ocean)" 2849 printf "\n using $coupled_mode coupling"2850 2838 printf "\n\n" 2851 2839 echo "coupled_run $iia $iio" > runfile_atmos … … 2969 2957 else 2970 2958 2971 # C URRENTLY THERE IS NO FULL MPI-2 SUPPORT ON ICE AND XT42959 # COUPLED RUN 2972 2960 (( iia = $numprocs_atmos / $threads_per_task )) 2973 2961 (( iio = $numprocs_ocean / $threads_per_task )) 2974 2962 printf "\n coupled run ($iia atmosphere, $iio ocean)" 2975 printf "\n using $coupled_mode coupling"2976 2963 printf "\n\n" 2977 2964 2978 if [[ $coupled_mode = "mpi2" ]] 2965 echo "coupled_run $iia $iio" > runfile_atmos 2966 2967 if [[ $host = lccrayf || $host = lcxe6 || $host = lcxt5m ]] 2979 2968 then 2980 echo "atmosphere_to_ocean $iia $iio" > runfile_atmos 2981 echo "ocean_to_atmosphere $iia $iio" > runfile_ocean 2982 2983 if [[ $host = lccrayf || $host = lcxe6 || $host = lcxt5m ]] 2984 then 2985 2986 aprun -n $iia -N $tasks_per_node a.out < runfile_atmos & 2987 aprun -n $iio -N $tasks_per_node a.out < runfile_ocean & 2988 2989 else 2990 # WORKAROUND BECAUSE mpiexec WITH -env option IS NOT AVAILABLE ON SOME SYSTEMS 2991 mpiexec -machinefile hostfile -n $iia a.out < runfile_atmos & 2992 mpiexec -machinefile hostfile -n $iio a.out < runfile_ocean & 2993 # mpiexec -machinefile hostfile -n $iia -env coupling_mode atmosphere_to_ocean a.out & 2994 # mpiexec -machinefile hostfile -n $iio -env coupling_mode ocean_to_atmosphere a.out & 2995 fi 2996 wait 2997 2998 else 2999 3000 echo "coupled_run $iia $iio" > runfile_atmos 3001 3002 if [[ $host = lccrayf || $host = lcxe6 || $host = lcxt5m ]] 3003 then 3004 3005 aprun -n $ii -N $tasks_per_node a.out < runfile_atmos 3006 3007 elif [[ $host = lck || $host = lckordi ]] 3008 then 3009 3010 mpiexec -n $ii ./a.out < runfile_atmos & 3011 3012 elif [[ $host = lckyu* ]] 3013 then 3014 3015 mpiexec -n $ii --stdin runfile_atmos ./a.out 3016 3017 elif [[ $host = lcmuk ]] 3018 then 3019 3020 mpiexec -machinefile hostfile -n $ii a.out < runfile_atmos 3021 3022 fi 3023 wait 2969 2970 aprun -n $ii -N $tasks_per_node a.out < runfile_atmos 2971 2972 elif [[ $host = lck || $host = lckordi ]] 2973 then 2974 2975 mpiexec -n $ii ./a.out < runfile_atmos & 2976 2977 elif [[ $host = lckyu* ]] 2978 then 2979 2980 mpiexec -n $ii --stdin runfile_atmos ./a.out 2981 2982 elif [[ $host = lcmuk ]] 2983 then 2984 2985 mpiexec -machinefile hostfile -n $ii a.out < runfile_atmos 2986 3024 2987 fi 2988 wait 3025 2989 3026 2990 fi -
palm/trunk/SOURCE/check_for_restart.f90
r2101 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! type of write_binary changed from CHARACTER to LOGICAL 28 ! 29 ! 2101 2017-01-05 16:42:31Z suehring 27 30 ! 28 31 ! 2000 2016-08-20 18:09:15Z knoop … … 103 106 !-- If necessary set a flag to stop the model run 104 107 terminate_run_l = .FALSE. 105 IF ( remaining_time <= termination_time_needed .AND. & 106 write_binary(1:4) == 'true' ) THEN 108 IF ( remaining_time <= termination_time_needed .AND. write_binary ) THEN 107 109 108 110 terminate_run_l = .TRUE. … … 174 176 175 177 WRITE( message_string, * ) 'run will be terminated because user ', & 176 'forced a job fin ialization using a flag',&178 'forced a job finalization using a flag', & 177 179 'file:', & 178 180 '&DO_STOP_NOW: ', do_stop_now, & -
palm/trunk/SOURCE/check_open.f90
r2101 r2298 21 21 ! ----------------- 22 22 ! 23 ! 23 ! 24 24 ! Former revisions: 25 25 ! ----------------- 26 26 ! $Id$ 27 ! -return_addres, return_username, avs_coor_file_..., avs_data_file_..., 28 ! cross_ts_numbers, cross_ts_number_count 29 ! 30 ! 2101 2017-01-05 16:42:31Z suehring 27 31 ! 28 32 ! 2063 2016-11-10 17:14:35Z raasch … … 135 139 136 140 USE control_parameters, & 137 ONLY: avs_data_file, coupling_char, data_output_2d_on_each_pe, host,&138 m ax_masks, message_string, mid, nz_do3d, openfile,&139 r eturn_addres, return_username, run_description_header, runnr141 ONLY: coupling_char, data_output_2d_on_each_pe, host, max_masks, & 142 message_string, mid, nz_do3d, openfile, run_description_header, & 143 runnr 140 144 141 145 USE grid_variables, & … … 166 170 ONLY: fortran_sleep 167 171 168 USE profil_parameter, &169 ONLY: cross_ts_numbers, cross_ts_number_count170 171 172 172 173 IMPLICIT NONE … … 176 177 CHARACTER (LEN=20) :: xtext = 'time in s' !< 177 178 CHARACTER (LEN=30) :: filename !< 178 CHARACTER (LEN=40) :: avs_coor_file !<179 CHARACTER (LEN=40) :: avs_coor_file_localname !<180 CHARACTER (LEN=40) :: avs_data_file_localname !<181 179 CHARACTER (LEN=80) :: rtext !< 182 CHARACTER (LEN=100) :: avs_coor_file_catalog !<183 CHARACTER (LEN=100) :: avs_data_file_catalog !<184 180 CHARACTER (LEN=100) :: batch_scp !< 185 181 CHARACTER (LEN=100) :: line !< … … 201 197 INTEGER(iwp), DIMENSION(10) :: klist !< 202 198 203 LOGICAL :: avs_coor_file_found = .FALSE. !<204 LOGICAL :: avs_data_file_found = .FALSE. !<205 199 LOGICAL :: datleg = .TRUE. !< 206 200 LOGICAL :: get_filenames !< -
palm/trunk/SOURCE/exchange_horiz.f90
r2119 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! sendrecv_in_background related parts removed 28 ! 29 ! 2119 2017-01-17 16:51:50Z raasch 27 30 ! 28 31 ! 2118 2017-01-17 16:38:49Z raasch … … 148 151 149 152 ! 150 !-- In case of background communication switched on, exchange is done 151 !-- either along x or along y 153 !-- Asynchroneous exchange 152 154 IF ( send_receive == 'lr' .OR. send_receive == 'al' ) THEN 153 155 154 IF ( .NOT. sendrecv_in_background ) THEN 155 req(1:4) = 0 156 req_count = 0 157 ENDIF 156 req(1:4) = 0 157 req_count = 0 158 158 ! 159 159 !-- Send left boundary, receive right one (asynchronous) … … 171 171 req(req_count+4), ierr ) 172 172 173 IF ( .NOT. sendrecv_in_background ) THEN 174 CALL MPI_WAITALL( 4, req, wait_stat, ierr ) 175 ELSE 176 req_count = req_count + 4 177 ENDIF 173 CALL MPI_WAITALL( 4, req, wait_stat, ierr ) 178 174 179 175 ENDIF … … 213 209 214 210 ! 215 !-- In case of background communication switched on, exchange is done 216 !-- either along x or along y 211 !-- Asynchroneous exchange 217 212 IF ( send_receive == 'ns' .OR. send_receive == 'al' ) THEN 218 213 219 IF ( .NOT. sendrecv_in_background ) THEN 220 req(1:4) = 0 221 req_count = 0 222 ENDIF 214 req(1:4) = 0 215 req_count = 0 223 216 224 217 ! … … 237 230 req(req_count+4), ierr ) 238 231 239 IF ( .NOT. sendrecv_in_background ) THEN 240 CALL MPI_WAITALL( 4, req, wait_stat, ierr ) 241 ELSE 242 req_count = req_count + 4 243 ENDIF 232 CALL MPI_WAITALL( 4, req, wait_stat, ierr ) 244 233 245 234 ENDIF -
palm/trunk/SOURCE/header.f90
r2270 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! MPI2 related parts removed 28 ! 29 ! 2270 2017-06-09 12:18:47Z maronga 27 30 ! Renamed Prandtl layer to constant flux layer 28 31 ! … … 446 449 INTEGER(iwp) :: l !< 447 450 INTEGER(iwp) :: ll !< 448 INTEGER(iwp) :: mpi_type !<449 451 INTEGER(iwp) :: my_cpl_id !< 450 452 INTEGER(iwp) :: n !< … … 502 504 WRITE ( io, 100 ) ver_rev, TRIM( run_classification ) 503 505 IF ( TRIM( coupling_mode ) /= 'uncoupled' ) THEN 504 #if defined( __mpi2 ) 505 mpi_type = 2 506 #else 507 mpi_type = 1 508 #endif 509 WRITE ( io, 101 ) mpi_type, coupling_mode 506 WRITE ( io, 101 ) coupling_mode 510 507 ENDIF 511 508 #if defined( __parallel ) … … 1942 1939 1X,'* ',A,' *',4X,A/ & 1943 1940 1X,'******************************',4X,44('-')) 1944 101 FORMAT (35X,'coupled run using MPI-',I1,': ',A/ &1941 101 FORMAT (35X,'coupled run: ',A/ & 1945 1942 35X,42('-')) 1946 1943 102 FORMAT (/' Date: ',A8,4X,'Run: ',A20/ & -
palm/trunk/SOURCE/init_coupling.f90
r2101 r2298 25 25 ! ------------------ 26 26 ! $Id$ 27 ! MPI2 coupling removed 28 ! 29 ! 2101 2017-01-05 16:42:31Z suehring 27 30 ! 28 31 ! 2000 2016-08-20 18:09:15Z knoop … … 84 87 ! 85 88 !-- Get information about the coupling mode from standard input (PE0 only) and 86 !-- distribute it to the other PEs. If __mpi2 was defined, suggest a 87 !-- coupling via MPI-2. Otherwise initate a coupling using MPI-1 only. 88 !-- In this case, distribute PEs to 2 new communicators. 89 !-- distribute it to the other PEs. Distribute PEs to 2 new communicators. 89 90 !-- ATTENTION: numprocs will be reset according to the new communicators 90 91 #if defined ( __parallel ) 91 92 92 !myid_absolut = myid93 93 IF ( myid == 0 ) THEN 94 94 READ (*,*,ERR=10,END=10) coupling_mode, bc_data(1), bc_data(2) 95 95 10 CONTINUE 96 #if defined( __mpi2 )97 IF ( TRIM( coupling_mode ) == 'atmosphere_to_ocean' ) THEN98 i = 199 ELSEIF ( TRIM( coupling_mode ) == 'ocean_to_atmosphere' ) THEN100 i = 2101 ELSE102 i = 0103 ENDIF104 #else105 96 IF ( TRIM( coupling_mode ) == 'coupled_run' ) THEN 106 97 i = 1 … … 108 99 i = 0 109 100 ENDIF 110 #endif111 101 bc_data(0) = i 112 102 … … 121 111 i = bc_data(0) 122 112 123 #if defined ( __mpi2 )124 IF ( i == 0 ) THEN125 coupling_mode = 'uncoupled'126 ELSEIF ( i == 1 ) THEN127 coupling_mode = 'atmosphere_to_ocean'128 ELSEIF ( i == 2 ) THEN129 coupling_mode = 'ocean_to_atmosphere'130 ENDIF131 target_id = myid132 #else133 113 IF ( i == 0 ) THEN 134 114 coupling_mode = 'uncoupled' … … 165 145 ENDIF 166 146 #endif 167 #endif168 147 169 148 ! -
palm/trunk/SOURCE/init_dvrp.f90
r2101 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! MPI2 related part removed 28 ! 29 ! 2101 2017-01-05 16:42:31Z suehring 27 30 ! 28 31 ! 2000 2016-08-20 18:09:15Z knoop … … 798 801 ! 799 802 !-- Adjustment for new MPI-1 coupling. This might be unnecessary. 800 #if defined( __mpi2 )801 CALL DVRP_SPLIT( MPI_COMM_WORLD, comm_palm )802 #else803 803 IF ( coupling_mode /= 'uncoupled' ) THEN 804 804 message_string = 'split of communicator not realized with' // & … … 810 810 CALL DVRP_SPLIT( MPI_COMM_WORLD, comm_palm ) 811 811 ENDIF 812 #endif813 812 814 813 CALL MPI_COMM_SIZE( comm_palm, numprocs, ierr ) -
palm/trunk/SOURCE/init_pegrid.f90
r2271 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! MPI2 related parts removed 28 ! 29 ! 2271 2017-06-09 12:34:55Z sward 27 30 ! Error message changed 28 31 ! … … 261 264 INTEGER(iwp), DIMENSION(2) :: pdims_remote !< 262 265 263 #if defined( __mpi2 )264 LOGICAL :: found !<265 #endif266 267 266 ! 268 267 !-- Get the number of OpenMP threads … … 627 626 628 627 #if defined( __parallel ) 629 #if defined( __mpi2 )630 !631 !-- In case of coupled runs, get the port name on PE0 of the atmosphere model632 !-- and pass it to PE0 of the ocean model633 IF ( myid == 0 ) THEN634 635 IF ( coupling_mode == 'atmosphere_to_ocean' ) THEN636 637 CALL MPI_OPEN_PORT( MPI_INFO_NULL, port_name, ierr )638 639 CALL MPI_PUBLISH_NAME( 'palm_coupler', MPI_INFO_NULL, port_name, &640 ierr )641 642 !643 !-- Write a flag file for the ocean model and the other atmosphere644 !-- processes.645 !-- There seems to be a bug in MPICH2 which causes hanging processes646 !-- in case that execution of LOOKUP_NAME is continued too early647 !-- (i.e. before the port has been created)648 OPEN( 90, FILE='COUPLING_PORT_OPENED', FORM='FORMATTED' )649 WRITE ( 90, '(''TRUE'')' )650 CLOSE ( 90 )651 652 ELSEIF ( coupling_mode == 'ocean_to_atmosphere' ) THEN653 654 !655 !-- Continue only if the atmosphere model has created the port.656 !-- There seems to be a bug in MPICH2 which causes hanging processes657 !-- in case that execution of LOOKUP_NAME is continued too early658 !-- (i.e. before the port has been created)659 INQUIRE( FILE='COUPLING_PORT_OPENED', EXIST=found )660 DO WHILE ( .NOT. found )661 INQUIRE( FILE='COUPLING_PORT_OPENED', EXIST=found )662 ENDDO663 664 CALL MPI_LOOKUP_NAME( 'palm_coupler', MPI_INFO_NULL, port_name, ierr )665 666 ENDIF667 668 ENDIF669 670 !671 !-- In case of coupled runs, establish the connection between the atmosphere672 !-- and the ocean model and define the intercommunicator (comm_inter)673 CALL MPI_BARRIER( comm2d, ierr )674 IF ( coupling_mode == 'atmosphere_to_ocean' ) THEN675 676 CALL MPI_COMM_ACCEPT( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &677 comm_inter, ierr )678 coupling_mode_remote = 'ocean_to_atmosphere'679 680 ELSEIF ( coupling_mode == 'ocean_to_atmosphere' ) THEN681 682 CALL MPI_COMM_CONNECT( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &683 comm_inter, ierr )684 coupling_mode_remote = 'atmosphere_to_ocean'685 686 ENDIF687 #endif688 628 689 629 ! -
palm/trunk/SOURCE/land_surface_model_mod.f90
r2296 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! type of write_binary changed from CHARACTER to LOGICAL 28 ! 29 ! 2296 2017-06-28 07:53:56Z maronga 27 30 ! Bugfix in calculation of bare soil heat capacity. 28 31 ! Bugfix in calculation of shf … … 4022 4025 IMPLICIT NONE 4023 4026 4024 IF ( write_binary (1:4) == 'true') THEN4027 IF ( write_binary ) THEN 4025 4028 IF ( ALLOCATED( c_liq_av ) ) THEN 4026 4029 WRITE ( 14 ) 'c_liq_av '; WRITE ( 14 ) c_liq_av -
palm/trunk/SOURCE/modules.f90
r2296 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! missing variable descriptions have been added, 28 ! type of write_binary changed from CHARACTER to LOGICAL 29 ! -plot_precision, plot_3d_precision, return_addres, return_username, 30 ! avs_data_file, exchange_mg, sendrecvcound_yxd, sendrecv_in_background, 31 ! port_name, profile_number, cross_ts_numbers, cross_ts_number_count, 32 ! dots_crossindex, dots_index, cross_ts_uymax, cross_ts_uymax_computed, 33 ! cross_ts_uymin, cross_ts_uymin_computed 34 ! 35 ! 2296 2017-06-28 07:53:56Z maronga 27 36 ! Added parameters for model spinup 28 37 ! … … 470 479 ! Description: 471 480 ! ------------ 472 !> Definition of all variables 473 !> 474 !> @todo Add missing variable descriptions (Siggi) 481 !> Definition of global variables 475 482 !------------------------------------------------------------------------------! 476 483 … … 485 492 USE kinds 486 493 487 REAL(wp), DIMENSION(:), ALLOCATABLE :: aex !< Siggi488 REAL(wp), DIMENSION(:), ALLOCATABLE :: bex !< Siggi489 REAL(wp), DIMENSION(:), ALLOCATABLE :: dex !< Siggi490 REAL(wp), DIMENSION(:), ALLOCATABLE :: eex !< Siggi494 REAL(wp), DIMENSION(:), ALLOCATABLE :: aex !< exponential coefficient for the Bott-Chlond advection scheme 495 REAL(wp), DIMENSION(:), ALLOCATABLE :: bex !< exponential coefficient for the Bott-Chlond advection scheme 496 REAL(wp), DIMENSION(:), ALLOCATABLE :: dex !< exponential coefficient for the Bott-Chlond advection scheme 497 REAL(wp), DIMENSION(:), ALLOCATABLE :: eex !< exponential coefficient for the Bott-Chlond advection scheme 491 498 492 499 SAVE … … 504 511 USE kinds 505 512 506 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_u_m !< Siggi507 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_u_m_l !< Siggi508 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_v_m !< Siggi509 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_v_m_l !< Siggi510 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_w_m !< Siggi511 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_w_m_l !< Siggi513 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_u_m !< mean phase velocity at outflow for u-component used in radiation boundary condition 514 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_u_m_l !< mean phase velocity at outflow for u-component used in radiation boundary condition (local subdomain value) 515 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_v_m !< mean phase velocity at outflow for v-component used in radiation boundary condition 516 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_v_m_l !< mean phase velocity at outflow for v-component used in radiation boundary condition (local subdomain value) 517 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_w_m !< mean phase velocity at outflow for w-component used in radiation boundary condition 518 REAL(wp), DIMENSION(:), ALLOCATABLE :: c_w_m_l !< mean phase velocity at outflow for w-component used in radiation boundary condition (local subdomain value) 512 519 REAL(wp), DIMENSION(:), ALLOCATABLE :: ddzu !< 1/dzu 513 520 REAL(wp), DIMENSION(:), ALLOCATABLE :: ddzu_pres !< modified ddzu for pressure solver … … 576 583 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: flux_s_v !< 6th-order advective flux at south face of grid box - v-component 577 584 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: flux_s_w !< 6th-order advective flux at south face of grid box - w-component 578 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f1_mg !< Siggi579 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f2_mg !< Siggi580 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f3_mg !< Siggi585 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f1_mg !< grid factor used in right hand side of Gauss-Seidel equation (multigrid) 586 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f2_mg !< grid factor used in right hand side of Gauss-Seidel equation (multigrid) 587 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: f3_mg !< grid factor used in right hand side of Gauss-Seidel equation (multigrid) 581 588 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: mean_inflow_profiles !< used for turbulent inflow (non-cyclic boundary conditions) 582 589 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: precipitation_amount !< precipitation amount due to gravitational settling (bulk microphysics) … … 591 598 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: td_sub_lpt !< temperature tendency due to subsidence/ascent (large scale forcing) 592 599 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: td_sub_q !< specific humidity tendency due to subsidence/ascent (large scale forcing) 593 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: total_2d_a !< Siggi594 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: total_2d_o !< Siggi600 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: total_2d_a !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (atmosphere data) 601 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: total_2d_o !< horizontal array to store the total domain data, used for atmosphere-ocean coupling (ocean data) 595 602 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ug_vert !< vertical profile of geostrophic wind component in x-direction interpolated to vertical grid (large scale forcing) 596 603 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: unudge !< vertical profile of wind component in x-direction interpolated to vertical grid (nudging) … … 633 640 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: l_wall !< near-wall mixing length 634 641 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: prr !< rain rate 635 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: p_loc !< Siggi642 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: p_loc !< local array in multigrid/sor solver containing the pressure which is iteratively advanced in each iteration step 636 643 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tend !< tendency field (time integration) 637 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tric !< Siggi638 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_l !< Siggi639 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_n !< Siggi640 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_r !< Siggi641 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_s !< Siggi642 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_l !< Siggi643 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_n !< Siggi644 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_r !< Siggi645 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_s !< Siggi646 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_l !< Siggi647 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_n !< Siggi648 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_r !< Siggi649 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_s !< Siggi644 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tric !< coefficients of the tridiagonal matrix for solution of the Poisson equation in Fourier space 645 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_l !< velocity data (u at left boundary) from time level t-dt required for radiation boundary condition 646 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_n !< velocity data (u at north boundary) from time level t-dt required for radiation boundary condition 647 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_r !< velocity data (u at right boundary) from time level t-dt required for radiation boundary condition 648 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: u_m_s !< velocity data (u at south boundary) from time level t-dt required for radiation boundary condition 649 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_l !< velocity data (v at left boundary) from time level t-dt required for radiation boundary condition 650 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_n !< velocity data (v at north boundary) from time level t-dt required for radiation boundary condition 651 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_r !< velocity data (v at right boundary) from time level t-dt required for radiation boundary condition 652 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: v_m_s !< velocity data (v at south boundary) from time level t-dt required for radiation boundary condition 653 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_l !< velocity data (w at left boundary) from time level t-dt required for radiation boundary condition 654 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_n !< velocity data (w at north boundary) from time level t-dt required for radiation boundary condition 655 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_r !< velocity data (w at right boundary) from time level t-dt required for radiation boundary condition 656 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: w_m_s !< velocity data (w at south boundary) from time level t-dt required for radiation boundary condition 650 657 651 658 #if defined( __nopointer ) … … 786 793 #endif 787 794 788 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tri !< Siggi795 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: tri !< array to hold the tridiagonal matrix for solution of the Poisson equation in Fourier space (4th dimension for threads) 789 796 790 797 REAL(wp), DIMENSION(:), ALLOCATABLE :: rho_air !< air density profile on the uv grid … … 918 925 USE kinds 919 926 920 TYPE plot_precision921 CHARACTER (LEN=8) :: variable !< Siggi922 INTEGER(iwp) :: precision !< Siggi923 END TYPE plot_precision924 925 TYPE(plot_precision), DIMENSION(100) :: plot_3d_precision = & !< Siggi926 (/ plot_precision( 'u', 2 ), plot_precision( 'v', 2 ), &927 plot_precision( 'w', 2 ), plot_precision( 'p', 5 ), &928 plot_precision( 'pt', 2 ), &929 ( plot_precision( ' ', 1 ), i9 = 1,95 ) /)930 931 927 TYPE file_status 932 LOGICAL :: opened !< Siggi933 LOGICAL :: opened_before !< Siggi928 LOGICAL :: opened !< file is currently open 929 LOGICAL :: opened_before !< file is currently closed, but has been openend before 934 930 END TYPE file_status 935 931 … … 938 934 INTEGER(iwp), PARAMETER :: varnamelength = 30 !< length of output variable names 939 935 940 TYPE(file_status), DIMENSION(200+2*max_masks) :: & !< Siggi936 TYPE(file_status), DIMENSION(200+2*max_masks) :: & !< indicates if file is open or if it has been opened before 941 937 openfile = file_status(.FALSE.,.FALSE.) 942 938 943 939 CHARACTER (LEN=1) :: cycle_mg = 'w' !< namelist parameter (see documentation) 944 940 CHARACTER (LEN=1) :: timestep_reason = ' ' !< 'A'dvection or 'D'iffusion criterion, written to RUN_CONTROL file 945 CHARACTER (LEN=3) :: coupling_char = '' !< Siggi 946 CHARACTER (LEN=5) :: write_binary = 'false' !< internal namelist parameter Siggi--> Why is this not a flag? 941 CHARACTER (LEN=3) :: coupling_char = '' !< appended to filenames in coupled ocean-atmosphere runs ('_O': ocean PE, '_A': atmosphere PE) 947 942 CHARACTER (LEN=8) :: most_method = 'newton' !< namelist parameter 948 943 CHARACTER (LEN=8) :: run_date !< date of simulation run, printed to HEADER file … … 952 947 CHARACTER (LEN=12) :: version = ' ' !< PALM version number 953 948 CHARACTER (LEN=12) :: revision = ' ' !< PALM revision number 954 CHARACTER (LEN=12) :: user_interface_current_revision = ' ' !< Siggi955 CHARACTER (LEN=12) :: user_interface_required_revision = ' ' !< Siggi949 CHARACTER (LEN=12) :: user_interface_current_revision = ' ' !< revision number of the currently used user-interface (must match user_interface_required_revision) 950 CHARACTER (LEN=12) :: user_interface_required_revision = ' ' !< required user-interface revision number 956 951 CHARACTER (LEN=16) :: conserve_volume_flow_mode = 'default' !< namelist parameter 957 952 CHARACTER (LEN=16) :: loop_optimization = 'default' !< namelist parameter … … 978 973 CHARACTER (LEN=20) :: cloud_scheme = 'saturation_adjust' !< namelist parameter 979 974 CHARACTER (LEN=20) :: coupling_mode = 'uncoupled' !< coupling mode for atmosphere-ocean coupling 980 CHARACTER (LEN=20) :: coupling_mode_remote = 'uncoupled' !< Siggi975 CHARACTER (LEN=20) :: coupling_mode_remote = 'uncoupled' !< coupling mode of the remote process in case of coupled atmosphere-ocean runs 981 976 CHARACTER (LEN=20) :: dissipation_1d = 'detering' !< namelist parameter 982 977 CHARACTER (LEN=20) :: fft_method = 'system-specific' !< namelist parameter … … 984 979 CHARACTER (LEN=20) :: random_generator = 'random-parallel' !< namelist parameter 985 980 CHARACTER (LEN=20) :: reference_state = 'initial_profile' !< namelist parameter 986 CHARACTER (LEN=20) :: return_addres !< Siggi987 CHARACTER (LEN=20) :: return_username !< Siggi988 981 CHARACTER (LEN=20) :: timestep_scheme = 'runge-kutta-3' !< namelist parameter 989 CHARACTER (LEN=40) :: avs_data_file !< Siggi990 982 CHARACTER (LEN=40) :: topography = 'flat' !< namelist parameter 991 CHARACTER (LEN=64) :: host = ' ' !< Siggi992 CHARACTER (LEN=80) :: log_message !< Siggi993 CHARACTER (LEN=80) :: run_identifier !< Siggi983 CHARACTER (LEN=64) :: host = ' ' !< hostname on which PALM is running, ENVPAR namelist parameter provided by mrun 984 CHARACTER (LEN=80) :: log_message !< user-defined message for debugging (sse data_log.f90) 985 CHARACTER (LEN=80) :: run_identifier !< run identifier as given by mrun option -d, ENVPAR namelist parameter provided by mrun 994 986 CHARACTER (LEN=100) :: initializing_actions = ' ' !< namelist parameter 995 CHARACTER (LEN=210) :: run_description_header !< Siggi987 CHARACTER (LEN=210) :: run_description_header !< string containing diverse run informations as run identifier, coupling mode, host, ensemble number, run date and time 996 988 CHARACTER (LEN=1000) :: message_string = ' ' !< dynamic string for error message output 997 989 … … 1021 1013 INTEGER(iwp) :: average_count_3d = 0 !< number of samples in 3d output 1022 1014 INTEGER(iwp) :: current_timestep_number = 0 !< current timestep number, printed to RUN_CONTROL file 1023 INTEGER(iwp) :: coupling_topology = 0 !< processor topology for atmosphere-ocean coupling Siggi1024 INTEGER(iwp) :: dist_range = 0 !< Siggi1015 INTEGER(iwp) :: coupling_topology = 0 !< switch for atmosphere-ocean-coupling: 0: same number of grid points and PEs along x and y in atmosphere and ocean, otherwise 1 1016 INTEGER(iwp) :: dist_range = 0 !< switch for steering the horizontal disturbance range, 1: inflow disturbances in case of non-cyclic horizontal BC, 0: otherwise 1025 1017 INTEGER(iwp) :: disturbance_level_ind_b !< lowest grid index where flow disturbance is applied 1026 1018 INTEGER(iwp) :: disturbance_level_ind_t !< highest grid index where flow disturbance is applied … … 1031 1023 INTEGER(iwp) :: dots_time_count = 0 !< number of output intervals for timeseries output 1032 1024 INTEGER(iwp) :: dp_level_ind_b = 0 !< lowest grid index for external pressure gradient forcing 1033 INTEGER(iwp) :: dvrp_filecount = 0 !< Siggi1034 INTEGER(iwp) :: dz_stretch_level_index !< Siggi1025 INTEGER(iwp) :: dvrp_filecount = 0 !< parameter for dvr visualization software 1026 INTEGER(iwp) :: dz_stretch_level_index !< vertical grid level index above which the vertical grid spacing is stretched 1035 1027 INTEGER(iwp) :: ensemble_member_nr = 0 !< namelist parameter 1036 INTEGER(iwp) :: gamma_mg !< Siggi1037 INTEGER(iwp) :: gathered_size !< Siggi1038 INTEGER(iwp) :: grid_level !< Siggi1028 INTEGER(iwp) :: gamma_mg !< switch for steering the multigrid cycle: 1: v-cycle, 2: w-cycle 1029 INTEGER(iwp) :: gathered_size !< number of total domain grid points of the grid level which is gathered on PE0 (multigrid solver) 1030 INTEGER(iwp) :: grid_level !< current grid level handled in the multigrid solver 1039 1031 INTEGER(iwp) :: ibc_e_b !< integer flag for bc_e_b 1040 1032 INTEGER(iwp) :: ibc_p_b !< integer flag for bc_p_b … … 1053 1045 INTEGER(iwp) :: intermediate_timestep_count !< number of current Runge-Kutta substep 1054 1046 INTEGER(iwp) :: intermediate_timestep_count_max !< maximum number of Runge-Kutta substeps 1055 INTEGER(iwp) :: io_group = 0 !< Siggi1056 INTEGER(iwp) :: io_blocks = 1 !< Siggi1047 INTEGER(iwp) :: io_group = 0 !< I/O group to which the PE belongs (= #PE / io_blocks) 1048 INTEGER(iwp) :: io_blocks = 1 !< number of blocks for which I/O is done in sequence (total number of PEs / maximum_parallel_io_streams) 1057 1049 INTEGER(iwp) :: iran = -1234567 !< integer random number used for flow disturbances 1058 1050 INTEGER(iwp) :: lod = 1 !< level of detail, topography input parameter 1059 1051 INTEGER(iwp) :: masks = 0 !< counter for number of masked output quantities 1060 INTEGER(iwp) :: maximum_grid_level !< Siggi1061 INTEGER(iwp) :: maximum_parallel_io_streams = -1 !< Siggi1052 INTEGER(iwp) :: maximum_grid_level !< number of grid levels that the multigrid solver is using 1053 INTEGER(iwp) :: maximum_parallel_io_streams = -1 !< maximum number of parallel io streams that the underlying parallel file system allows, set with mrun option -w, ENVPAR namelist parameter, provided by mrun 1062 1054 INTEGER(iwp) :: max_pr_user = 0 !< number of user-defined profiles (must not change within a job chain) 1063 INTEGER(iwp) :: mgcycles = 0 !< Siggi1055 INTEGER(iwp) :: mgcycles = 0 !< number of multigrid cycles that the multigrid solver has actually carried out 1064 1056 INTEGER(iwp) :: mg_cycles = -1 !< namelist parameter 1065 1057 INTEGER(iwp) :: mg_switch_to_pe0_level = -1 !< namelist parameter … … 1081 1073 INTEGER(iwp) :: runnr = 0 !< number of run in job chain 1082 1074 INTEGER(iwp) :: subdomain_size !< number of grid points in (3d) subdomain including ghost points 1083 INTEGER(iwp) :: terminate_coupled = 0 !< Siggi1084 INTEGER(iwp) :: terminate_coupled_remote = 0 !< Siggi1085 INTEGER(iwp) :: timestep_count = 0 !< Siggi --> is it not analogue to intermediate_timestep_count1075 INTEGER(iwp) :: terminate_coupled = 0 !< switch for steering termination in case of coupled runs 1076 INTEGER(iwp) :: terminate_coupled_remote = 0 !< switch for steering termination in case of coupled runs (condition of the remote model) 1077 INTEGER(iwp) :: timestep_count = 0 !< number of timesteps carried out since the beginning of the initial run 1086 1078 INTEGER(iwp) :: dist_nxl(0:1) !< left boundary of disturbance region 1087 1079 INTEGER(iwp) :: dist_nxr(0:1) !< right boundary of disturbance region … … 1116 1108 INTEGER(iwp), DIMENSION(0:1) :: ntdim_3d !< number of output intervals for 3d data 1117 1109 1118 INTEGER(iwp), DIMENSION(:), ALLOCATABLE :: grid_level_count !< Siggi1110 INTEGER(iwp), DIMENSION(:), ALLOCATABLE :: grid_level_count !< internal switch for steering the multigrid v- and w-cycles 1119 1111 1120 1112 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: mask_i !< subdomain grid index of masked output point on x-dimension … … 1158 1150 LOGICAL :: dt_3d_reached !< internal timestep for particle advection 1159 1151 LOGICAL :: dt_3d_reached_l !< internal timestep for particle advection 1160 LOGICAL :: exchange_mg = .FALSE. !< (Siggi add short description)1161 1152 LOGICAL :: first_call_lpm = .TRUE. !< call lpm only once per timestep? 1162 1153 LOGICAL :: force_print_header = .FALSE. !< namelist parameter 1163 1154 LOGICAL :: galilei_transformation = .FALSE. !< namelist parameter 1164 1155 LOGICAL :: humidity = .FALSE. !< namelist parameter 1165 LOGICAL :: humidity_remote = .FALSE. !< (Siggi add short description)1156 LOGICAL :: humidity_remote = .FALSE. !< switch for receiving near-surface humidity flux (atmosphere-ocean coupling) 1166 1157 LOGICAL :: inflow_l = .FALSE. !< left domain boundary has non-cyclic inflow? 1167 1158 LOGICAL :: inflow_n = .FALSE. !< north domain boundary has non-cyclic inflow? … … 1179 1170 LOGICAL :: microphysics_morrison = .FALSE. !< use 2-moment Morrison (add. prog. eq. for nc and qc) 1180 1171 LOGICAL :: microphysics_seifert = .FALSE. !< use 2-moment Seifert and Beheng scheme 1181 LOGICAL :: mg_switch_to_pe0 = .FALSE. !< (Siggi add short description)1172 LOGICAL :: mg_switch_to_pe0 = .FALSE. !< internal multigrid switch for steering the ghost point exchange in case that data has been collected on PE0 1182 1173 LOGICAL :: nest_bound_l = .FALSE. !< nested boundary on left side? 1183 1174 LOGICAL :: nest_bound_n = .FALSE. !< nested boundary on north side? … … 1197 1188 LOGICAL :: recycling_yshift = .FALSE. !< namelist parameter 1198 1189 LOGICAL :: run_control_header = .FALSE. !< onetime output of RUN_CONTROL header 1199 LOGICAL :: run_coupled = .TRUE. !< (Siggi add short description)1190 LOGICAL :: run_coupled = .TRUE. !< internal switch telling PALM to run in coupled mode (i.e. to exchange surface data) in case of atmosphere-ocean coupling 1200 1191 LOGICAL :: scalar_rayleigh_damping = .TRUE. !< namelist parameter 1201 LOGICAL :: sloping_surface = .FALSE. !< use sloped surface? 1202 !< (namelist parameter alpha_surface) 1192 LOGICAL :: sloping_surface = .FALSE. !< use sloped surface? (namelist parameter alpha_surface) 1203 1193 LOGICAL :: spinup = .FALSE. !< perform model spinup without atmosphere code? 1204 LOGICAL :: stop_dt = .FALSE. !< (Siggi add short description)1194 LOGICAL :: stop_dt = .FALSE. !< internal switch to stop the time stepping 1205 1195 LOGICAL :: synchronous_exchange = .FALSE. !< namelist parameter 1206 1196 LOGICAL :: synthetic_turbulence_generator = .FALSE. !< flag for synthetic turbulence generator module … … 1222 1212 LOGICAL :: virtual_flight = .FALSE. !< use virtual flight model? 1223 1213 LOGICAL :: wall_adjustment = .TRUE. !< namelist parameter 1214 LOGICAL :: write_binary = .FALSE. !< ENVPAR namelist parameter to steer restart I/O (ENVPAR is created by mrun) 1224 1215 LOGICAL :: ws_scheme_sca = .FALSE. !< use Wicker-Skamarock scheme (scalar advection)? 1225 1216 LOGICAL :: ws_scheme_mom = .FALSE. !< use Wicker-Skamarock scheme (momentum advection)? 1217 1226 1218 LOGICAL :: data_output_xy(0:1) = .FALSE. !< output of xy cross-section data? 1227 1219 LOGICAL :: data_output_xz(0:1) = .FALSE. !< output of xz cross-section data? … … 1364 1356 REAL(wp) :: time_restart = 9999999.9_wp !< time at which run shall be terminated and restarted 1365 1357 REAL(wp) :: time_run_control = 0.0_wp !< time since last RUN_CONTROL output 1366 REAL(wp) :: time_since_reference_point !< Siggi1358 REAL(wp) :: time_since_reference_point !< time after atmosphere-ocean coupling has been activated, or time after spinup phase of LSM has been finished 1367 1359 REAL(wp) :: top_heatflux = 9999999.9_wp !< namelist parameter 1368 1360 REAL(wp) :: top_momentumflux_u = 9999999.9_wp !< namelist parameter … … 1414 1406 REAL(wp) :: vg_vertical_gradient(10) = 0.0_wp !< namelist parameter 1415 1407 REAL(wp) :: vg_vertical_gradient_level(10) = -9999999.9_wp !< namelist parameter 1416 REAL(wp) :: volume_flow(1:3) = 0.0_wp !< Siggi1417 REAL(wp) :: volume_flow_area(1:3) = 0.0_wp !< Siggi1418 REAL(wp) :: volume_flow_initial(1:3) = 0.0_wp !< Siggi1408 REAL(wp) :: volume_flow(1:3) = 0.0_wp !< volume flow through 1:yz-plane, 2: xz-plane, 3: xy-plane (nest childs only) 1409 REAL(wp) :: volume_flow_area(1:3) = 0.0_wp !< area of the respective volume flow planes 1410 REAL(wp) :: volume_flow_initial(1:3) = 0.0_wp !< initial volume flow (t=0) through the respective volume flow planes 1419 1411 REAL(wp) :: wall_heatflux(0:5) = 0.0_wp !< namelist parameter 1420 1412 REAL(wp) :: wall_humidityflux(0:5) = 0.0_wp !< namelist parameter … … 1453 1445 USE kinds 1454 1446 1455 CHARACTER (LEN=10) :: dvrp_output = 'rtsp' !< Siggi (entire MODULE)1456 CHARACTER (LEN=10) :: particle_color = 'none' !< 1457 CHARACTER (LEN=10) :: particle_dvrpsize = 'none' !< 1458 1459 CHARACTER (LEN=20), DIMENSION(10) :: mode_dvrp = & !< 1447 CHARACTER (LEN=10) :: dvrp_output = 'rtsp' !< dvr namelist parameter 1448 CHARACTER (LEN=10) :: particle_color = 'none' !< dvr namelist parameter 1449 CHARACTER (LEN=10) :: particle_dvrpsize = 'none' !< dvr namelist parameter 1450 1451 CHARACTER (LEN=20), DIMENSION(10) :: mode_dvrp = & !< dvr namelist parameter 1460 1452 (/ ( ' ', i9 = 1,10 ) /) 1461 1453 1462 CHARACTER (LEN=80) :: dvrp_directory = 'default' !< 1463 CHARACTER (LEN=80) :: dvrp_file = 'default' !< 1464 CHARACTER (LEN=80) :: dvrp_host = 'origin.rvs.uni-hannover.de' !< 1465 CHARACTER (LEN=80) :: dvrp_password = '********' !< 1466 CHARACTER (LEN=80) :: dvrp_username = ' ' !< 1467 1468 INTEGER(iwp) :: cluster_size = 1 !< 1469 INTEGER(iwp) :: dvrp_colortable_entries = 4 !< 1470 INTEGER(iwp) :: dvrp_colortable_entries_prt = 22 !< 1471 INTEGER(iwp) :: islice_dvrp !< 1472 INTEGER(iwp) :: nx_dvrp !< 1473 INTEGER(iwp) :: nxl_dvrp !< 1474 INTEGER(iwp) :: nxr_dvrp !< 1475 INTEGER(iwp) :: ny_dvrp !< 1476 INTEGER(iwp) :: nyn_dvrp !< 1477 INTEGER(iwp) :: nys_dvrp !< 1478 INTEGER(iwp) :: nz_dvrp, pathlines_fadeintime = 5 !< 1479 INTEGER(iwp) :: pathlines_fadeouttime = 5 !< 1480 INTEGER(iwp) :: pathlines_linecount = 1000 !< 1481 INTEGER(iwp) :: pathlines_maxhistory = 40 !< 1482 INTEGER(iwp) :: pathlines_wavecount = 10 !< 1483 INTEGER(iwp) :: pathlines_wavetime = 50 !< 1484 INTEGER(iwp) :: vc_gradient_normals = 0 !< 1485 INTEGER(iwp) :: vc_mode = 0 !< 1486 INTEGER(iwp) :: vc_size_x = 2 !< 1487 INTEGER(iwp) :: vc_size_y = 2 !< 1488 INTEGER(iwp) :: vc_size_z = 2 !< 1489 1490 INTEGER(iwp), DIMENSION(10) :: slicer_position_dvrp !< 1491 1492 LOGICAL :: cyclic_dvrp = .FALSE. !< 1493 LOGICAL :: dvrp_overlap !< 1494 LOGICAL :: dvrp_total_overlap !< 1495 LOGICAL :: local_dvrserver_running !< internally set namelist parameter 1496 LOGICAL :: lock_steering_update = .FALSE. !< 1497 LOGICAL :: use_seperate_pe_for_dvrp_output = .FALSE. !< 1498 1499 REAL(wp) :: clip_dvrp_l = 9999999.9_wp !< 1500 REAL(wp) :: clip_dvrp_n = 9999999.9_wp !< 1501 REAL(wp) :: clip_dvrp_r = 9999999.9_wp !< 1502 REAL(wp) :: clip_dvrp_s = 9999999.9_wp !< 1503 REAL(wp) :: superelevation = 1.0_wp !< 1504 REAL(wp) :: superelevation_x = 1.0_wp !< 1505 REAL(wp) :: superelevation_y = 1.0_wp !< 1506 REAL(wp) :: vc_alpha = 38.0_wp !< 1507 1508 REAL(wp), DIMENSION(2) :: color_interval = (/ 0.0_wp, 1.0_wp /) !< 1509 REAL(wp), DIMENSION(2) :: dvrpsize_interval = (/ 0.0_wp, 1.0_wp /) !< 1510 1511 REAL(wp), DIMENSION(3) :: groundplate_color = (/ 0.0_wp, 0.6_wp, 0.0_wp /) !< 1512 REAL(wp), DIMENSION(3) :: topography_color = (/ 0.8_wp, 0.7_wp, 0.6_wp /) !< 1513 1514 REAL(wp), DIMENSION(2,10) :: slicer_range_limits_dvrp !< 1515 1516 REAL(wp), DIMENSION(3,10) :: isosurface_color !< 1517 1518 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp !< 1519 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp_prt !< 1520 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp !< 1521 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp_prt !< 1522 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp = 0.5_sp !< 1523 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp_prt = 0.5_sp !< 1524 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp = 1.0_sp !< 1525 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp_prt = 1.0_sp !< 1526 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp = 0.0_sp !< 1527 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp_prt = 0.0_sp !< 1528 1529 DATA slicer_range_limits_dvrp / -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, & !< 1454 CHARACTER (LEN=80) :: dvrp_directory = 'default' !< dvr namelist parameter 1455 CHARACTER (LEN=80) :: dvrp_file = 'default' !< dvr namelist parameter 1456 CHARACTER (LEN=80) :: dvrp_host = 'origin.rvs.uni-hannover.de' !< dvr namelist parameter 1457 CHARACTER (LEN=80) :: dvrp_password = '********' !< dvr namelist parameter 1458 CHARACTER (LEN=80) :: dvrp_username = ' ' !< dvr namelist parameter 1459 1460 INTEGER(iwp) :: cluster_size = 1 !< dvr namelist parameter 1461 INTEGER(iwp) :: dvrp_colortable_entries = 4 !< internal dvr software variable 1462 INTEGER(iwp) :: dvrp_colortable_entries_prt = 22 !< internal dvr software variable 1463 INTEGER(iwp) :: islice_dvrp !< internal dvr software variable 1464 INTEGER(iwp) :: nx_dvrp !< internal dvr software variable 1465 INTEGER(iwp) :: nxl_dvrp !< internal dvr software variable 1466 INTEGER(iwp) :: nxr_dvrp !< internal dvr software variable 1467 INTEGER(iwp) :: ny_dvrp !< internal dvr software variable 1468 INTEGER(iwp) :: nyn_dvrp !< internal dvr software variable 1469 INTEGER(iwp) :: nys_dvrp !< internal dvr software variable 1470 INTEGER(iwp) :: nz_dvrp !< internal dvr software variable 1471 INTEGER(iwp) :: pathlines_fadeintime = 5 !< dvr namelist parameter 1472 INTEGER(iwp) :: pathlines_fadeouttime = 5 !< dvr namelist parameter 1473 INTEGER(iwp) :: pathlines_linecount = 1000 !< dvr namelist parameter 1474 INTEGER(iwp) :: pathlines_maxhistory = 40 !< dvr namelist parameter 1475 INTEGER(iwp) :: pathlines_wavecount = 10 !< dvr namelist parameter 1476 INTEGER(iwp) :: pathlines_wavetime = 50 !< dvr namelist parameter 1477 INTEGER(iwp) :: vc_gradient_normals = 0 !< dvr namelist parameter 1478 INTEGER(iwp) :: vc_mode = 0 !< dvr namelist parameter 1479 INTEGER(iwp) :: vc_size_x = 2 !< dvr namelist parameter 1480 INTEGER(iwp) :: vc_size_y = 2 !< dvr namelist parameter 1481 INTEGER(iwp) :: vc_size_z = 2 !< dvr namelist parameter 1482 1483 INTEGER(iwp), DIMENSION(10) :: slicer_position_dvrp !< internal dvr software variable 1484 1485 LOGICAL :: cyclic_dvrp = .FALSE. !< internal dvr software variable 1486 LOGICAL :: dvrp_overlap !< internal dvr software variable 1487 LOGICAL :: dvrp_total_overlap !< internal dvr software variable 1488 LOGICAL :: local_dvrserver_running !< namelist parameter (ENVPAR namelist provided by mrun) 1489 LOGICAL :: lock_steering_update = .FALSE. !< internal dvr software variable 1490 LOGICAL :: use_seperate_pe_for_dvrp_output = .FALSE. !< internal dvr software variable 1491 1492 REAL(wp) :: clip_dvrp_l = 9999999.9_wp !< dvr namelist parameter 1493 REAL(wp) :: clip_dvrp_n = 9999999.9_wp !< dvr namelist parameter 1494 REAL(wp) :: clip_dvrp_r = 9999999.9_wp !< dvr namelist parameter 1495 REAL(wp) :: clip_dvrp_s = 9999999.9_wp !< dvr namelist parameter 1496 REAL(wp) :: superelevation = 1.0_wp !< dvr namelist parameter 1497 REAL(wp) :: superelevation_x = 1.0_wp !< dvr namelist parameter 1498 REAL(wp) :: superelevation_y = 1.0_wp !< dvr namelist parameter 1499 REAL(wp) :: vc_alpha = 38.0_wp !< dvr namelist parameter 1500 1501 REAL(wp), DIMENSION(2) :: color_interval = (/ 0.0_wp, 1.0_wp /) !< dvr namelist parameter 1502 REAL(wp), DIMENSION(2) :: dvrpsize_interval = (/ 0.0_wp, 1.0_wp /) !< dvr namelist parameter 1503 1504 REAL(wp), DIMENSION(3) :: groundplate_color = (/ 0.0_wp, 0.6_wp, 0.0_wp /) !< dvr namelist parameter 1505 REAL(wp), DIMENSION(3) :: topography_color = (/ 0.8_wp, 0.7_wp, 0.6_wp /) !< dvr namelist parameter 1506 1507 REAL(wp), DIMENSION(2,10) :: slicer_range_limits_dvrp !< dvr namelist parameter 1508 1509 REAL(wp), DIMENSION(3,10) :: isosurface_color !< dvr namelist parameter 1510 1511 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp !< internal dvr software variable 1512 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp_prt !< internal dvr software variable 1513 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp !< internal dvr software variable 1514 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp_prt !< internal dvr software variable 1515 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp = 0.5_sp !< internal dvr software variable 1516 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp_prt = 0.5_sp !< internal dvr software variable 1517 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp = 1.0_sp !< internal dvr software variable 1518 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp_prt = 1.0_sp !< internal dvr software variable 1519 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp = 0.0_sp !< internal dvr software variable 1520 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp_prt = 0.0_sp !< internal dvr software variable 1521 1522 DATA slicer_range_limits_dvrp / -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, & !< internal dvr software variable 1530 1523 -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, & 1531 1524 -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, & 1532 1525 -1.0_wp, 1.0_wp / 1533 1526 1534 DATA isosurface_color / 0.9_wp, 0.9_wp, 0.9_wp, 0.8_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.8_wp, & !< 1527 DATA isosurface_color / 0.9_wp, 0.9_wp, 0.9_wp, 0.8_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.8_wp, & !< internal dvr software variable 1535 1528 0.1_wp, 0.8_wp, 0.1_wp, 0.6_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.6_wp, & 1536 1529 0.1_wp, 0.6_wp, 0.1_wp, 0.4_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.1_wp, 0.4_wp, & 1537 1530 0.1_wp, 0.4_wp, 0.1_wp / 1538 1531 1539 DATA interval_h_dvrp / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, & !< 1532 DATA interval_h_dvrp / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, & !< internal dvr software variable 1540 1533 25.0_wp, -25.0_wp, 192 * 0.0_wp / 1541 1534 1542 DATA interval_h_dvrp_prt / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, & !< 1535 DATA interval_h_dvrp_prt / 270.0_wp, 225.0_wp, 225.0_wp, 180.0_wp, 70.0_wp, 25.0_wp, & !< internal dvr software variable 1543 1536 25.0_wp, -25.0_wp, 192 * 0.0_wp / 1544 1537 1545 REAL(sp), DIMENSION(:), ALLOCATABLE :: xcoor_dvrp !< 1546 REAL(sp), DIMENSION(:), ALLOCATABLE :: ycoor_dvrp !< 1547 REAL(sp), DIMENSION(:), ALLOCATABLE :: zcoor_dvrp !< 1538 REAL(sp), DIMENSION(:), ALLOCATABLE :: xcoor_dvrp !< internal dvr software variable 1539 REAL(sp), DIMENSION(:), ALLOCATABLE :: ycoor_dvrp !< internal dvr software variable 1540 REAL(sp), DIMENSION(:), ALLOCATABLE :: zcoor_dvrp !< internal dvr software variable 1548 1541 1549 1542 TYPE steering 1550 CHARACTER (LEN=24) :: name !< 1551 REAL(sp) :: min !< 1552 REAL(sp) :: max !< 1553 INTEGER(iwp) :: imin !< 1554 INTEGER(iwp) :: imax !< 1543 CHARACTER (LEN=24) :: name !< internal dvr software variable 1544 REAL(sp) :: min !< internal dvr software variable 1545 REAL(sp) :: max !< internal dvr software variable 1546 INTEGER(iwp) :: imin !< internal dvr software variable 1547 INTEGER(iwp) :: imax !< internal dvr software variable 1555 1548 END TYPE steering 1556 1549 1557 TYPE(steering), DIMENSION(:), ALLOCATABLE :: steering_dvrp !< 1550 TYPE(steering), DIMENSION(:), ALLOCATABLE :: steering_dvrp !< internal dvr software variable 1558 1551 1559 1552 SAVE … … 1605 1598 INTEGER(iwp) :: nnx !< number of subdomain grid points in x-direction 1606 1599 INTEGER(iwp) :: nx = 0 !< nx+1 = total number of grid points in x-direction 1607 INTEGER(iwp) :: nx_a !< Siggi1608 INTEGER(iwp) :: nx_o !< Siggi1600 INTEGER(iwp) :: nx_a !< in coupled atmosphere-ocean runs: total number of grid points along x (atmosphere) 1601 INTEGER(iwp) :: nx_o !< in coupled atmosphere-ocean runs: total number of grid points along x (ocean) 1609 1602 INTEGER(iwp) :: nxl !< left-most grid index of subdomain (excluding ghost points) 1610 1603 INTEGER(iwp) :: nxlg !< left-most grid index of subdomain (including ghost points) 1611 INTEGER(iwp) :: nxlu !< =nxl+1 (at left domain boundary with inflow from left), else =nxl 1604 INTEGER(iwp) :: nxlu !< =nxl+1 (at left domain boundary with inflow from left), else =nxl (used for u-velocity component) 1612 1605 INTEGER(iwp) :: nxr !< right-most grid index of subdomain (excluding ghost points) 1613 1606 INTEGER(iwp) :: nxrg !< right-most grid index of subdomain (including ghost points) … … 1615 1608 INTEGER(iwp) :: nny !< number of subdomain grid points in y-direction 1616 1609 INTEGER(iwp) :: ny = 0 !< ny+1 = total number of grid points in y-direction 1617 INTEGER(iwp) :: ny_a !< Siggi1618 INTEGER(iwp) :: ny_o !< Siggi1610 INTEGER(iwp) :: ny_a !< in coupled atmosphere-ocean runs: total number of grid points along y (atmosphere) 1611 INTEGER(iwp) :: ny_o !< in coupled atmosphere-ocean runs: total number of grid points along y (ocean) 1619 1612 INTEGER(iwp) :: nyn !< north-most grid index of subdomain (excluding ghost points) 1620 1613 INTEGER(iwp) :: nyng !< north-most grid index of subdomain (including ghost points) 1621 1614 INTEGER(iwp) :: nys !< south-most grid index of subdomain (excluding ghost points) 1622 1615 INTEGER(iwp) :: nysg !< south-most grid index of subdomain (including ghost points) 1623 INTEGER(iwp) :: nysv !< =nys+1 (at south domain boundary with inflow from south), else =nys 1616 INTEGER(iwp) :: nysv !< =nys+1 (at south domain boundary with inflow from south), else =nys (used for v-velocity component) 1624 1617 INTEGER(iwp) :: ny_on_file !< ny of previous run in job chain 1625 1618 INTEGER(iwp) :: nnz !< number of subdomain grid points in z-direction … … 1643 1636 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: ngp_2dh_outer !< number of horizontal grid points which are non-topography and non-surface-bounded 1644 1637 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: ngp_2dh_s_inner !< number of horizontal grid points which are non-topography 1645 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: mg_loc_ind !< Siggi1638 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: mg_loc_ind !< internal array to store index bounds of all PEs of that multigrid level where data is collected to PE0 1646 1639 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: nzb_diff_s_inner !< will be removed 1647 1640 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: nzb_diff_s_outer !< will be removed … … 1693 1686 !> @todo Missing subroutine description. 1694 1687 !------------------------------------------------------------------------------! 1695 SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, feld, mode, offset, &1696 wert, wert_ijk, wert1, wert1_ijk )1688 SUBROUTINE global_min_max ( i1, i2, j1, j2, k1, k2, array, mode, offset, & 1689 result, result_ijk, result1, result1_ijk ) 1697 1690 1698 1691 USE kinds 1699 1692 1700 CHARACTER (LEN=*), INTENT(IN) :: mode !< Siggi (entire module, some variables are still in German)1701 INTEGER(iwp), INTENT(IN) :: i1 !<1702 INTEGER(iwp), INTENT(IN) :: i2 !<1703 INTEGER(iwp), INTENT(IN) :: j1 !<1704 INTEGER(iwp), INTENT(IN) :: j2 !<1705 INTEGER(iwp), INTENT(IN) :: k1 !<1706 INTEGER(iwp), INTENT(IN) :: k2 !<1707 INTEGER(iwp) :: wert_ijk(3) !<1708 INTEGER(iwp), OPTIONAL :: wert1_ijk(3) !<1709 REAL(wp) :: offset !<1710 REAL(wp) :: wert !<1711 REAL(wp), OPTIONAL :: wert1 !<1712 REAL(wp), INTENT(IN) :: feld(i1:i2,j1:j2,k1:k2) !<1693 CHARACTER (LEN=*), INTENT(IN) :: mode !< mode of global min/max function: can be 'min', 'max', 'minmax', 'abs', or 'absoff' 1694 INTEGER(iwp), INTENT(IN) :: i1 !< internal index of min/max function 1695 INTEGER(iwp), INTENT(IN) :: i2 !< internal index of min/max function 1696 INTEGER(iwp), INTENT(IN) :: j1 !< internal index of min/max function 1697 INTEGER(iwp), INTENT(IN) :: j2 !< internal index of min/max function 1698 INTEGER(iwp), INTENT(IN) :: k1 !< internal index of min/max function 1699 INTEGER(iwp), INTENT(IN) :: k2 !< internal index of min/max function 1700 INTEGER(iwp) :: result_ijk(3) !< grid index result of min/max function 1701 INTEGER(iwp), OPTIONAL :: result1_ijk(3) !< optional grid index result of min/max function 1702 REAL(wp) :: offset !< min/max function calculates absolute value with respect to an offset 1703 REAL(wp) :: result !< result of min/max function 1704 REAL(wp), OPTIONAL :: result1 !< optional result of min/max function 1705 REAL(wp), INTENT(IN) :: array(i1:i2,j1:j2,k1:k2) !< input array of min/max function 1713 1706 1714 1707 END SUBROUTINE global_min_max … … 1818 1811 ! ------------ 1819 1812 !> Definition of variables which define processor topology and the exchange of 1820 !> ghost point layers. This module s must be placed in all routines which contain1813 !> ghost point layers. This module must be placed in all routines containing 1821 1814 !> MPI-calls. 1822 1815 !------------------------------------------------------------------------------! … … 1832 1825 #endif 1833 1826 #endif 1834 CHARACTER(LEN=2) :: send_receive = 'al' !< Siggi1827 CHARACTER(LEN=2) :: send_receive = 'al' !< 1835 1828 CHARACTER(LEN=7) :: myid_char = '' !< character string containing processor id number 1836 1829 1837 INTEGER(iwp) :: comm1dx !< Siggi1838 INTEGER(iwp) :: comm1dy !< Siggi1839 INTEGER(iwp) :: comm2d !< Siggi1840 INTEGER(iwp) :: comm_inter !< Siggi1841 INTEGER(iwp) :: comm_palm !< Siggi1830 INTEGER(iwp) :: comm1dx !< communicator for domain decomposition along x 1831 INTEGER(iwp) :: comm1dy !< communicator for domain decomposition along y 1832 INTEGER(iwp) :: comm2d !< standard 2d (xy) communicator used in PALM for the process group the PE belongs to 1833 INTEGER(iwp) :: comm_inter !< intercommunicator that connects atmosphere/ocean process groups 1834 INTEGER(iwp) :: comm_palm !< internal communicator used during the MPI setup at the beginning of a run 1842 1835 INTEGER(iwp) :: id_inflow = 0 !< myidx of procs at inflow (turbulent inflow method) 1843 1836 INTEGER(iwp) :: id_outflow = 0 !< myidx of procs at outflow (turbulent outflow method) 1844 1837 INTEGER(iwp) :: id_outflow_source = 0 !< myidx of procs including ouflow source plane (turbulent outflow method) 1845 1838 INTEGER(iwp) :: id_recycling = 0 !< myidx of procs containing the recycling plane (turbulence recycling method) 1846 INTEGER(iwp) :: ierr !< Siggi1839 INTEGER(iwp) :: ierr !< standard error parameter in MPI calls 1847 1840 INTEGER(iwp) :: myid = 0 !< id number of processor element 1848 1841 INTEGER(iwp) :: myidx = 0 !< id number of processor elements with same position along x-direction 1849 1842 INTEGER(iwp) :: myidy = 0 !< id number of processor elements with same position along y-direction 1850 INTEGER(iwp) :: ndim = 2 !< Siggi1851 INTEGER(iwp) :: ngp_a !< number of grid points in atmosphere domain Siggi1852 INTEGER(iwp) :: ngp_o !< number of grid points in ocean domain Siggi1853 INTEGER(iwp) :: ngp_xy !< number of grid points at atmosphere-ocean interface Siggi1854 INTEGER(iwp) :: ngp_y !< Siggi1843 INTEGER(iwp) :: ndim = 2 !< dimension of the virtual PE grid 1844 INTEGER(iwp) :: ngp_a !< used in atmosphere/ocean coupling: total number of horizontal grid points (atmosphere) 1845 INTEGER(iwp) :: ngp_o !< used in atmosphere/ocean coupling: total number of horizontal grid points (ocean) 1846 INTEGER(iwp) :: ngp_xy !< used in atmosphere/ocean coupling: number of grid points of the subdomain 1847 INTEGER(iwp) :: ngp_y !< number of subdomain grid points along y including ghost points 1855 1848 INTEGER(iwp) :: npex = -1 !< number of processor elements in x-direction 1856 1849 INTEGER(iwp) :: npey = -1 !< number of processor elements in y-direction … … 1862 1855 INTEGER(iwp) :: psouth !< MPI-address of the processor south of the current one 1863 1856 INTEGER(iwp) :: req_count = 0 !< MPI return variable - checks if Send-Receive operation is already finished 1864 INTEGER(iwp) :: sendrecvcount_xy !< Siggi 1865 INTEGER(iwp) :: sendrecvcount_yz !< Siggi 1866 INTEGER(iwp) :: sendrecvcount_zx !< Siggi 1867 INTEGER(iwp) :: sendrecvcount_zyd !< Siggi 1868 INTEGER(iwp) :: sendrecvcount_yxd !< Siggi 1869 INTEGER(iwp) :: target_id !< Siggi 1870 INTEGER(iwp) :: tasks_per_node = -9999 !< MPI tasks per computing node 1871 INTEGER(iwp) :: threads_per_task = 1 !< OPENMP threads per MPI task 1857 INTEGER(iwp) :: sendrecvcount_xy !< number of subdomain gridpoints to be exchanged in direct transpositions (y --> x, or x --> y) or second (2d) transposition x --> y 1858 INTEGER(iwp) :: sendrecvcount_yz !< number of subdomain gridpoints to be exchanged in third (2d) transposition y --> z 1859 INTEGER(iwp) :: sendrecvcount_zx !< number of subdomain gridpoints to be exchanged in first (2d) transposition z --> x 1860 INTEGER(iwp) :: sendrecvcount_zyd !< number of subdomain gridpoints to be exchanged in direct transpositions z --> y (used for calculating spectra) 1861 INTEGER(iwp) :: target_id !< in atmosphere/ocean coupling: id of the ocean/atmosphere counterpart PE with whom the atmosphere/ocean PE exchanges data 1862 INTEGER(iwp) :: tasks_per_node = -9999 !< MPI tasks per compute node 1863 INTEGER(iwp) :: threads_per_task = 1 !< number of OPENMP threads per MPI task 1872 1864 INTEGER(iwp) :: type_x !< derived MPI datatype for 2-D ghost-point exchange - north / south 1873 1865 INTEGER(iwp) :: type_xy !< derived MPI datatype for 2-D ghost-point exchange - north / south … … 1880 1872 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: hor_index_bounds_previous_run !< horizontal index bounds of previous run 1881 1873 1882 LOGICAL :: collective_wait = .FALSE. !< Siggi 1883 LOGICAL :: sendrecv_in_background = .FALSE. !< Siggi 1874 LOGICAL :: collective_wait = .FALSE. !< switch to set an explicit MPI barrier in front of all collective MPI calls 1884 1875 1885 1876 #if defined( __parallel ) 1886 #if defined( __mpi2 ) 1887 CHARACTER (LEN=MPI_MAX_PORT_NAME) :: port_name !< Siggi 1888 #endif 1889 1890 INTEGER(iwp) :: ibuf(12) !< Siggi 1891 INTEGER(iwp) :: pcoord(2) !< Siggi 1892 INTEGER(iwp) :: status(MPI_STATUS_SIZE) !< Siggi 1877 INTEGER(iwp) :: ibuf(12) !< internal buffer for calculating MPI settings 1878 INTEGER(iwp) :: pcoord(2) !< PE coordinates along x and y 1879 INTEGER(iwp) :: status(MPI_STATUS_SIZE) !< MPI status variable used in various MPI calls 1893 1880 1894 INTEGER(iwp), DIMENSION(MPI_STATUS_SIZE,100) :: wait_stat !< Siggi1881 INTEGER(iwp), DIMENSION(MPI_STATUS_SIZE,100) :: wait_stat !< MPI status variable used in various MPI calls 1895 1882 1896 1883 INTEGER(iwp) :: ngp_yz_int !< number of ghost points in yz-plane … … 1907 1894 LOGICAL :: left_border_pe = .FALSE. !< = .TRUE. if PE is on left border of computational domain 1908 1895 LOGICAL :: north_border_pe = .FALSE. !< = .TRUE. if PE is on north border of computational domain 1909 LOGICAL :: reorder = .TRUE. !< Siggi1896 LOGICAL :: reorder = .TRUE. !< switch to allow MPI the reorder of ranking (e.g. row-major or column-major) 1910 1897 LOGICAL :: right_border_pe = .FALSE. !< = .TRUE. if PE is on right border of computational domain 1911 1898 LOGICAL :: south_border_pe = .FALSE. !< = .TRUE. if PE is on south border of computational domain 1912 1899 1913 LOGICAL, DIMENSION(2) :: cyclic = (/ .TRUE. , .TRUE. /) !< Siggi1914 LOGICAL, DIMENSION(2) :: remain_dims !< Siggi1900 LOGICAL, DIMENSION(2) :: cyclic = (/ .TRUE. , .TRUE. /) !< boundary conditions of the virtual PE grid 1901 LOGICAL, DIMENSION(2) :: remain_dims !< internal array used to determine sub-topologies for transpositions 1915 1902 #endif 1916 1903 … … 1929 1916 USE kinds 1930 1917 1931 INTEGER(iwp), PARAMETER :: crmax = 100 !< Siggi (entire module)1932 1933 CHARACTER (LEN=20), DIMENSION(20) :: cross_ts_profiles = & !< 1918 INTEGER(iwp), PARAMETER :: crmax = 100 !< maximum number of coordinate systems for profile output 1919 1920 CHARACTER (LEN=20), DIMENSION(20) :: cross_ts_profiles = & !< time series to be plotted into one coordinate system, respectively 1934 1921 (/ ' E E* ', ' dt ', & 1935 1922 ' u* w* ', ' th* ', & … … 1940 1927 ( ' ', i9 = 1, 9 ) /) 1941 1928 1942 CHARACTER (LEN=100), DIMENSION(crmax) :: cross_profiles = & !< 1929 CHARACTER (LEN=100), DIMENSION(crmax) :: cross_profiles = & !< quantities to be plotted into one coordinate system, respectively 1943 1930 (/ ' u v ', & 1944 1931 ' pt ', & … … 1949 1936 ( ' ', i9 = 1, 94 ) /) 1950 1937 1951 INTEGER(iwp) :: profile_columns = 2 !< 1952 INTEGER(iwp) :: profile_rows = 3 !< 1953 INTEGER(iwp) :: profile_number = 0 !< 1954 1955 INTEGER(iwp) :: cross_ts_numbers(crmax,crmax) = 0 !< 1956 INTEGER(iwp) :: cross_ts_number_count(crmax) = 0 !< 1957 INTEGER(iwp) :: dopr_index(300) = 0 !< 1958 INTEGER(iwp) :: dopr_initial_index(300) = 0 !< 1959 INTEGER(iwp) :: dots_crossindex(100) = 0 !< 1960 INTEGER(iwp) :: dots_index(100) = 0 !< 1938 INTEGER(iwp) :: profile_columns = 2 !< number of coordinate systems on a profile plot per column 1939 INTEGER(iwp) :: profile_rows = 3 !< number of coordinate systems on a profile plot per row 1940 1941 INTEGER(iwp) :: dopr_index(300) = 0 !< index number of respective profile quantity 1942 INTEGER(iwp) :: dopr_initial_index(300) = 0 !< index number of initial profiles to be output 1961 1943 1962 1963 REAL(wp) :: cross_ts_uymax(20) = & !<1964 (/ 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, &1965 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, &1966 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, &1967 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp /)1968 REAL(wp) :: cross_ts_uymax_computed(20) = 999.999_wp !<1969 REAL(wp) :: cross_ts_uymin(20) = & !<1970 (/ 999.999_wp, 999.999_wp, 999.999_wp, -5.000_wp, 999.999_wp, &1971 999.999_wp, 0.000_wp, 999.999_wp, 999.999_wp, 999.999_wp, &1972 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, &1973 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp, 999.999_wp /)1974 REAL(wp) :: cross_ts_uymin_computed(20) = 999.999_wp !<1975 1976 1944 SAVE 1977 1945 … … 2003 1971 REAL(wp) :: w_max !< maximum of absolute w-veloctiy in entire domain 2004 1972 2005 REAL(wp), DIMENSION(:), ALLOCATABLE :: mean_surface_level_height !< Siggi1973 REAL(wp), DIMENSION(:), ALLOCATABLE :: mean_surface_level_height !< mean surface level height for the different statistic regions 2006 1974 REAL(wp), DIMENSION(:), ALLOCATABLE :: sums_divnew_l !< subdomain sum (_l) of divergence after pressure 2007 1975 !< solver call (new) … … 2051 2019 USE kinds 2052 2020 2053 INTEGER(iwp) :: nxl_y !< Siggi (entire module)2054 INTEGER(iwp) :: nxl_yd !< 2055 INTEGER(iwp) :: nxl_z !< 2056 INTEGER(iwp) :: nxr_y !< 2057 INTEGER(iwp) :: nxr_yd !< 2058 INTEGER(iwp) :: nxr_z !< 2059 INTEGER(iwp) :: nyn_x !< 2060 INTEGER(iwp) :: nyn_z !< 2061 INTEGER(iwp) :: nys_x !< 2062 INTEGER(iwp) :: nys_z !< 2063 INTEGER(iwp) :: nzb_x !< 2064 INTEGER(iwp) :: nzb_y !< 2065 INTEGER(iwp) :: nzb_yd !< 2066 INTEGER(iwp) :: nzt_x !< 2067 INTEGER(iwp) :: nzt_y !< 2068 INTEGER(iwp) :: nzt_yd !< 2021 INTEGER(iwp) :: nxl_y !< internal index bound for transpositions 2022 INTEGER(iwp) :: nxl_yd !< internal index bound for transpositions 2023 INTEGER(iwp) :: nxl_z !< internal index bound for transpositions 2024 INTEGER(iwp) :: nxr_y !< internal index bound for transpositions 2025 INTEGER(iwp) :: nxr_yd !< internal index bound for transpositions 2026 INTEGER(iwp) :: nxr_z !< internal index bound for transpositions 2027 INTEGER(iwp) :: nyn_x !< internal index bound for transpositions 2028 INTEGER(iwp) :: nyn_z !< internal index bound for transpositions 2029 INTEGER(iwp) :: nys_x !< internal index bound for transpositions 2030 INTEGER(iwp) :: nys_z !< internal index bound for transpositions 2031 INTEGER(iwp) :: nzb_x !< internal index bound for transpositions 2032 INTEGER(iwp) :: nzb_y !< internal index bound for transpositions 2033 INTEGER(iwp) :: nzb_yd !< internal index bound for transpositions 2034 INTEGER(iwp) :: nzt_x !< internal index bound for transpositions 2035 INTEGER(iwp) :: nzt_y !< internal index bound for transpositions 2036 INTEGER(iwp) :: nzt_yd !< internal index bound for transpositions 2069 2037 2070 2038 SAVE -
palm/trunk/SOURCE/palm.f90
r2296 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! type of write_binary changed from CHARACTER to LOGICAL, 28 ! user interface required revision updated, MPI2 related part removed 29 ! 30 ! 2296 2017-06-28 07:53:56Z maronga 27 31 ! Added call to new spinup routine 28 32 ! … … 236 240 237 241 version = 'PALM 4.0' 238 user_interface_required_revision = 'r 1819'242 user_interface_required_revision = 'r2297' 239 243 240 244 #if defined( __parallel ) … … 425 429 ! 426 430 !-- If required, write binary data for restart runs 427 IF ( write_binary (1:4) == 'true') THEN431 IF ( write_binary ) THEN 428 432 429 433 CALL cpu_log( log_point(22), 'write_3d_binary', 'start' ) … … 475 479 ENDIF 476 480 CALL user_last_actions 477 IF ( write_binary (1:4) == 'true') CALL close_file( 14 )481 IF ( write_binary ) CALL close_file( 14 ) 478 482 ENDIF 479 483 #if defined( __parallel ) … … 485 489 CALL cpu_log( log_point(4), 'last actions', 'stop' ) 486 490 487 #if defined( __mpi2 )488 !489 !-- Test exchange via intercommunicator in case of a MPI-2 coupling490 IF ( coupling_mode == 'atmosphere_to_ocean' ) THEN491 i = 12345 + myid492 CALL MPI_SEND( i, 1, MPI_INTEGER, myid, 11, comm_inter, ierr )493 ELSEIF ( coupling_mode == 'ocean_to_atmosphere' ) THEN494 CALL MPI_RECV( i, 1, MPI_INTEGER, myid, 11, comm_inter, status, ierr )495 PRINT*, '### myid: ', myid, ' received from atmosphere: i = ', i496 ENDIF497 #endif498 499 491 ! 500 492 !-- Write run number to file (used by mrun to create unified cycle numbers for -
palm/trunk/SOURCE/parin.f90
r2296 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! -return_addres, return_username in ENVPAR, -cross_ts_uymax, cross_ts_uymin in 28 ! d3par 29 ! 30 ! 2296 2017-06-28 07:53:56Z maronga 27 31 ! Added parameters for model spinup 28 32 ! … … 315 319 316 320 USE profil_parameter, & 317 ONLY: cross_profiles, cross_ts_uymax, cross_ts_uymin, & 318 profile_columns, profile_rows 321 ONLY: cross_profiles, profile_columns, profile_rows 319 322 320 323 USE progress_bar, & … … 412 415 NAMELIST /d3par/ averaging_interval, averaging_interval_pr, & 413 416 cpu_log_barrierwait, create_disturbances, & 414 cross_profiles, cross_ts_uymax, cross_ts_uymin, & 415 data_output, data_output_masks, & 417 cross_profiles, data_output, data_output_masks, & 416 418 data_output_pr, data_output_2d_on_each_pe, disturbance_amplitude, & 417 419 disturbance_energy_limit, disturbance_level_b, & … … 435 437 NAMELIST /envpar/ batch_job, host, local_dvrserver_running, & 436 438 maximum_cpu_time_allowed, maximum_parallel_io_streams, & 437 revision, return_addres, return_username, & 438 run_identifier, tasks_per_node, write_binary 439 revision, run_identifier, tasks_per_node, write_binary 439 440 440 441 ! -
palm/trunk/SOURCE/poismg_mod.f90
r2232 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! sendrecv_in_background related parts removed 28 ! 29 ! 2232 2017-05-30 17:47:52Z suehring 27 30 ! 28 31 ! 2073 2016-11-30 14:34:05Z raasch … … 1850 1853 INTEGER(iwp) :: ixr !< index for upper local PE boundary along x 1851 1854 1852 LOGICAL :: sendrecv_in_background_save !< dummy to reset sendrecv_in_background to prescribed value1853 1855 LOGICAL :: synchronous_exchange_save !< dummy to reset synchronous_exchange to prescribed value 1854 1856 … … 1856 1858 1857 1859 #if defined ( __parallel ) 1858 sendrecv_in_background_save = sendrecv_in_background1859 sendrecv_in_background = .FALSE.1860 1860 synchronous_exchange_save = synchronous_exchange 1861 1861 synchronous_exchange = .FALSE. … … 2357 2357 ! 2358 2358 !-- Reset values to default PALM setup 2359 sendrecv_in_background = sendrecv_in_background_save2360 2359 synchronous_exchange = synchronous_exchange_save 2361 2360 send_receive = 'al' -
palm/trunk/SOURCE/pres.f90
r2233 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! comment changed + some formatting 28 ! 29 ! 2233 2017-05-30 18:08:54Z suehring 27 30 ! 28 31 ! 2232 2017-05-30 17:47:52Z suehring … … 537 540 !$OMP PARALLEL DO PRIVATE( i, j, k ) 538 541 DO m = 1, bc_h(0)%ns 539 i = bc_h(0)%i(m)540 j 541 k 542 i = bc_h(0)%i(m) 543 j = bc_h(0)%j(m) 544 k = bc_h(0)%k(m) 542 545 tend(k-1,j,i) = tend(k,j,i) 543 546 ENDDO … … 546 549 !$OMP PARALLEL DO PRIVATE( i, j, k ) 547 550 DO m = 1, bc_h(1)%ns 548 i = bc_h(1)%i(m)549 j 550 k 551 i = bc_h(1)%i(m) 552 j = bc_h(1)%j(m) 553 k = bc_h(1)%k(m) 551 554 tend(k+1,j,i) = tend(k,j,i) 552 555 ENDDO … … 559 562 !$OMP PARALLEL DO PRIVATE( i, j, k ) 560 563 DO m = 1, bc_h(0)%ns 561 i = bc_h(0)%i(m)562 j 563 k 564 i = bc_h(0)%i(m) 565 j = bc_h(0)%j(m) 566 k = bc_h(0)%k(m) 564 567 tend(k-1,j,i) = 0.0_wp 565 568 ENDDO … … 568 571 !$OMP PARALLEL DO PRIVATE( i, j, k ) 569 572 DO m = 1, bc_h(1)%ns 570 i = bc_h(1)%i(m)571 j 572 k 573 i = bc_h(1)%i(m) 574 j = bc_h(1)%j(m) 575 k = bc_h(1)%k(m) 573 576 tend(k+1,j,i) = 0.0_wp 574 577 ENDDO … … 616 619 ! 617 620 !-- Solve Poisson equation for perturbation pressure using Multigrid scheme, 618 !-- array tend is used to store the residuals, logical exchange_mg is used 619 !-- to discern data exchange in multigrid ( 1 ghostpoint ) and normal grid 620 !-- ( nbgp ghost points ). 621 !-- array tend is used to store the residuals. 621 622 622 623 !-- If the number of grid points of the gathered grid, which is collected -
palm/trunk/SOURCE/radiation_model_mod.f90
r2296 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! type of write_binary changed from CHARACTER to LOGICAL 28 ! 29 ! 2296 2017-06-28 07:53:56Z maronga 27 30 ! Added output of rad_sw_out for radiation_scheme = 'constant' 28 31 ! … … 3342 3345 IMPLICIT NONE 3343 3346 3344 IF ( write_binary (1:4) == 'true') THEN3347 IF ( write_binary ) THEN 3345 3348 IF ( ALLOCATED( rad_net ) ) THEN 3346 3349 WRITE ( 14 ) 'rad_net '; WRITE ( 14 ) rad_net -
palm/trunk/SOURCE/user_last_actions.f90
r2101 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! type of write_binary changed from CHARACTER to LOGICAL 28 ! 29 ! 2101 2017-01-05 16:42:31Z suehring 27 30 ! 28 31 ! 2000 2016-08-20 18:09:15Z knoop … … 59 62 !-- Here the user-defined actions at the end of a job follow. 60 63 !-- Sample for user-defined output: 61 IF ( write_binary (1:4) == 'true') THEN64 IF ( write_binary ) THEN 62 65 ! IF ( ALLOCATED( u2_av ) ) THEN 63 66 ! WRITE ( 14 ) 'u2_av '; WRITE ( 14 ) u2_av -
palm/trunk/SOURCE/user_parin.f90
r2101 r2298 25 25 ! ----------------- 26 26 ! $Id$ 27 ! user interface current revision updated 28 ! 29 ! 2101 2017-01-05 16:42:31Z suehring 27 30 ! 28 31 ! 2000 2016-08-20 18:09:15Z knoop … … 99 102 !-- current revision does not match with previous revisions (e.g. if routines 100 103 !-- have been added/deleted or if parameter lists in subroutines have been changed). 101 user_interface_current_revision = 'r 1819'104 user_interface_current_revision = 'r2297' 102 105 103 106 !
Note: See TracChangeset
for help on using the changeset viewer.