Changeset 4017 for palm/trunk
- Timestamp:
- Jun 6, 2019 12:16:46 PM (5 years ago)
- Location:
- palm/trunk/SOURCE
- Files:
-
- 1 added
- 26 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/Makefile
r4012 r4017 512 512 # by an include command for preprocessor and compiler options when the simple 513 513 # install process is used instead of mbuild/mrun, 514 # +set_particle_attributes , set_slicer_attributes_dvrp514 # +set_particle_attributes 515 515 # +subsidence 516 516 # … … 587 587 data_output_2d.f90 \ 588 588 data_output_3d.f90 \ 589 data_output_dvrp.f90 \590 589 data_output_flight.f90\ 591 590 data_output_mask.f90 \ 592 591 data_output_profiles.f90 \ 593 data_output_ptseries.f90 \594 592 data_output_spectra.f90 \ 595 593 data_output_tseries.f90 \ … … 614 612 init_advec.f90 \ 615 613 init_coupling.f90 \ 616 init_dvrp.f90 \617 614 init_grid.f90 \ 618 615 init_masks.f90 \ … … 623 620 init_vertical_profiles.f90 \ 624 621 interaction_droplets_ptq.f90 \ 622 lagrangian_particle_model_mod.f90 \ 625 623 land_surface_model_mod.f90 \ 626 624 large_scale_forcing_nudging_mod.f90 \ … … 629 627 local_tremain.f90 \ 630 628 local_tremain_ini.f90 \ 631 lpm_advec.f90 \632 lpm_boundary_conds.f90 \633 lpm_calc_liquid_water_content.f90 \634 lpm_collision_kernels.f90 \635 lpm_data_output_particles.f90 \636 lpm_droplet_collision.f90 \637 lpm_droplet_condensation.f90 \638 lpm_exchange_horiz.f90 \639 lpm.f90 \640 lpm_init.f90 \641 lpm_init_sgs_tke.f90 \642 lpm_merging.f90 \643 lpm_pack_arrays.f90 \644 lpm_read_restart_file.f90 \645 lpm_set_attributes.f90 \646 lpm_splitting.f90 \647 lpm_write_exchange_statistics.f90 \648 lpm_write_restart_file.f90 \649 629 message.f90 \ 650 630 bulk_cloud_model_mod.f90 \ … … 660 640 ocean_mod.f90 \ 661 641 outflow_turbulence.f90 \ 662 package_parin.f90 \663 642 palm.f90 \ 664 643 parin.f90 \ … … 686 665 run_control.f90 \ 687 666 salsa_mod.f90 \ 688 set_slicer_attributes_dvrp.f90 \689 667 singleton_mod.f90 \ 690 668 sor.f90 \ … … 708 686 turbulence_closure_mod.f90 \ 709 687 urban_surface_mod.f90 \ 710 user_data_output_dvrp.f90 \711 688 user_data_output_mask.f90 \ 712 user_dvrp_coltab.f90 \713 689 user_flight.f90\ 714 690 user_init_3d_model.f90 \ … … 721 697 user_lpm_advec.f90 \ 722 698 user_lpm_init.f90 \ 723 user_lpm_set_attributes.f90 \724 699 user_module.f90 \ 725 700 user_spectra.f90 \ … … 756 731 757 732 clean: 758 rm -f $(PROG) $(OBJS) *.mod *. i *.lst733 rm -f $(PROG) $(OBJS) *.mod *.smod *.i *.lst 759 734 760 735 .f90.o: … … 844 819 check_open.o: \ 845 820 mod_kinds.o \ 846 mod_particle_attributes.o \847 821 modules.o \ 848 822 netcdf_interface_mod.o \ … … 921 895 mod_kinds.o \ 922 896 modules.o 923 data_output_dvrp.o: \924 basic_constants_and_equations_mod.o \925 bulk_cloud_model_mod.o \926 cpulog_mod.o \927 mod_kinds.o \928 modules.o929 897 data_output_mask.o: \ 930 898 basic_constants_and_equations_mod.o \ … … 942 910 cpulog_mod.o \ 943 911 mod_kinds.o \ 944 modules.o \945 netcdf_interface_mod.o946 data_output_ptseries.o: \947 cpulog_mod.o \948 mod_kinds.o \949 mod_particle_attributes.o \950 912 modules.o \ 951 913 netcdf_interface_mod.o … … 1098 1060 disturb_heatflux.o \ 1099 1061 large_scale_forcing_nudging_mod.o \ 1100 lpm_init.o \1101 1062 model_1d_mod.o \ 1102 1063 mod_kinds.o \ 1103 mod_particle_attributes.o \1104 1064 modules.o \ 1105 1065 multi_agent_system_mod.o \ … … 1124 1084 modules.o \ 1125 1085 vertical_nesting_mod.o 1126 init_dvrp.o: \1127 mod_kinds.o \1128 modules.o1129 1086 init_grid.o: \ 1130 1087 advec_ws.o \ … … 1167 1124 mod_kinds.o \ 1168 1125 modules.o 1126 lagrangian_particle_model_mod.o: \ 1127 basic_constants_and_equations_mod.o \ 1128 cpulog_mod.o \ 1129 mod_kinds.o \ 1130 mod_particle_attributes.o \ 1131 modules.o \ 1132 pmc_interface_mod.o \ 1133 pmc_particle_interface.o \ 1134 netcdf_interface_mod.o \ 1135 random_function_mod.o \ 1136 random_generator_parallel_mod.o \ 1137 surface_mod.o 1169 1138 land_surface_model_mod.o: \ 1170 1139 basic_constants_and_equations_mod.o \ … … 1194 1163 cpulog_mod.o \ 1195 1164 mod_kinds.o \ 1196 modules.o1197 lpm.o: \1198 cpulog_mod.o \1199 lpm_exchange_horiz.o \1200 lpm_init.o \1201 lpm_merging.o \1202 lpm_pack_arrays.o \1203 lpm_splitting.o \1204 mod_kinds.o \1205 mod_particle_attributes.o \1206 modules.o \1207 pmc_interface_mod.o \1208 pmc_particle_interface.o1209 lpm_advec.o: \1210 basic_constants_and_equations_mod.o \1211 cpulog_mod.o \1212 mod_kinds.o \1213 mod_particle_attributes.o \1214 modules.o \1215 surface_mod.o1216 lpm_boundary_conds.o: \1217 cpulog_mod.o \1218 mod_kinds.o \1219 mod_particle_attributes.o \1220 modules.o \1221 surface_mod.o1222 lpm_calc_liquid_water_content.o: \1223 basic_constants_and_equations_mod.o \1224 cpulog_mod.o \1225 mod_kinds.o \1226 mod_particle_attributes.o \1227 modules.o1228 lpm_collision_kernels.o: \1229 basic_constants_and_equations_mod.o \1230 cpulog_mod.o \1231 mod_kinds.o \1232 mod_particle_attributes.o \1233 modules.o1234 lpm_data_output_particles.o: \1235 cpulog_mod.o \1236 mod_kinds.o \1237 mod_particle_attributes.o \1238 modules.o \1239 netcdf_interface_mod.o1240 lpm_droplet_collision.o: \1241 basic_constants_and_equations_mod.o \1242 cpulog_mod.o \1243 lpm_collision_kernels.o \1244 mod_kinds.o \1245 mod_particle_attributes.o \1246 modules.o1247 lpm_droplet_condensation.o: \1248 basic_constants_and_equations_mod.o \1249 cpulog_mod.o \1250 lpm_collision_kernels.o \1251 mod_kinds.o \1252 mod_particle_attributes.o \1253 modules.o1254 lpm_exchange_horiz.o: \1255 cpulog_mod.o \1256 lpm_pack_arrays.o \1257 mod_kinds.o \1258 mod_particle_attributes.o \1259 modules.o \1260 netcdf_interface_mod.o1261 lpm_init.o: \1262 basic_constants_and_equations_mod.o \1263 lpm_collision_kernels.o \1264 lpm_exchange_horiz.o \1265 lpm_pack_arrays.o \1266 mod_kinds.o \1267 mod_particle_attributes.o \1268 modules.o \1269 netcdf_interface_mod.o \1270 pmc_particle_interface.o \1271 random_function_mod.o \1272 random_generator_parallel_mod.o \1273 surface_mod.o1274 lpm_init_sgs_tke.o: \1275 mod_kinds.o \1276 mod_particle_attributes.o \1277 modules.o \1278 surface_mod.o1279 lpm_merging.o: \1280 cpulog_mod.o \1281 mod_kinds.o \1282 mod_particle_attributes.o \1283 modules.o1284 lpm_pack_arrays.o: \1285 cpulog_mod.o \1286 mod_kinds.o \1287 mod_particle_attributes.o \1288 modules.o1289 lpm_read_restart_file.o: \1290 lpm_pack_arrays.o \1291 mod_kinds.o \1292 mod_particle_attributes.o \1293 modules.o1294 lpm_set_attributes.o: \1295 cpulog_mod.o \1296 mod_kinds.o \1297 mod_particle_attributes.o \1298 modules.o1299 lpm_splitting.o: \1300 basic_constants_and_equations_mod.o \1301 cpulog_mod.o \1302 lpm_exchange_horiz.o \1303 mod_kinds.o \1304 mod_particle_attributes.o \1305 modules.o1306 lpm_write_exchange_statistics.o: \1307 mod_kinds.o \1308 mod_particle_attributes.o \1309 modules.o \1310 pmc_particle_interface.o1311 lpm_write_restart_file.o: \1312 mod_kinds.o \1313 mod_particle_attributes.o \1314 1165 modules.o 1315 1166 message.o: \ … … 1330 1181 gust_mod.o \ 1331 1182 indoor_model_mod.o \ 1183 lagrangian_particle_model_mod.o \ 1332 1184 land_surface_model_mod.o \ 1333 1185 large_scale_forcing_nudging_mod.o \ 1186 mod_particle_attributes.o \ 1334 1187 multi_agent_system_mod.o \ 1335 1188 nesting_offl_mod.o \ … … 1406 1259 mod_kinds.o \ 1407 1260 modules.o 1408 package_parin.o: \1409 mod_kinds.o \1410 mod_particle_attributes.o \1411 modules.o1412 1261 palm.o: \ 1413 1262 bulk_cloud_model_mod.o \ … … 1450 1299 surface_mod.o 1451 1300 pmc_particle_interface.o: \ 1452 lpm_exchange_horiz.o \1453 lpm_pack_arrays.o \1454 1301 mod_particle_attributes.o \ 1455 1302 modules.o \ … … 1608 1455 surface_mod.o \ 1609 1456 netcdf_data_input_mod.o 1610 set_slicer_attributes_dvrp.o: \1611 mod_kinds.o \1612 modules.o1613 1457 singleton_mod.o: \ 1614 1458 mod_kinds.o … … 1700 1544 land_surface_model_mod.o \ 1701 1545 large_scale_forcing_nudging_mod.o \ 1702 lpm.o \1703 1546 mod_kinds.o \ 1704 1547 modules.o \ … … 1783 1626 surface_mod.o \ 1784 1627 user_module.o 1785 user_data_output_dvrp.o: \1786 mod_kinds.o \1787 modules.o \1788 user_module.o1789 user_dvrp_coltab.o: \1790 mod_kinds.o \1791 modules.o \1792 user_module.o1793 1628 user_flight.o: \ 1794 1629 mod_kinds.o \ … … 1835 1670 user_module.o 1836 1671 user_lpm_init.o: \ 1837 mod_kinds.o \1838 modules.o \1839 user_module.o1840 user_lpm_set_attributes.o: \1841 1672 mod_kinds.o \ 1842 1673 modules.o \ … … 1885 1716 diagnostic_output_quantities_mod.o \ 1886 1717 mod_kinds.o \ 1887 mod_particle_attributes.o \1888 1718 model_1d_mod.o \ 1889 1719 module_interface.o \ -
palm/trunk/SOURCE/check_parameters.f90
r3994 r4017 790 790 USE control_parameters 791 791 792 USE dvrp_variables793 794 792 USE grid_variables 795 793 … … 817 815 dots_max, dots_num, dots_label 818 816 819 USE particle_attributes 820 817 USE particle_attributes, & 818 ONLY: particle_advection, use_sgs_for_particles 819 821 820 USE pegrid 822 821 … … 1412 1411 CALL message( 'check_parameters', 'PA0442', 1, 2, 0, 6, 0 ) 1413 1412 ENDIF 1414 1415 !1416 !-- Collision kernels:1417 SELECT CASE ( TRIM( collision_kernel ) )1418 1419 CASE ( 'hall', 'hall_fast' )1420 hall_kernel = .TRUE.1421 1422 CASE ( 'wang', 'wang_fast' )1423 wang_kernel = .TRUE.1424 1425 CASE ( 'none' )1426 1427 1428 CASE DEFAULT1429 message_string = 'unknown collision kernel: collision_kernel = "' // &1430 TRIM( collision_kernel ) // '"'1431 CALL message( 'check_parameters', 'PA0350', 1, 2, 0, 6, 0 )1432 1433 END SELECT1434 IF ( collision_kernel(6:9) == 'fast' ) use_kernel_tables = .TRUE.1435 1413 1436 1414 ! … … 3787 3765 CALL message( 'check_parameters', 'PA0157', 1, 2, 0, 6, 0 ) 3788 3766 ENDIF 3789 3790 ! 3791 !-- Check particle attributes 3792 IF ( particle_color /= 'none' ) THEN 3793 IF ( particle_color /= 'absuv' .AND. particle_color /= 'pt*' .AND. & 3794 particle_color /= 'z' ) THEN 3795 message_string = 'illegal value for parameter particle_color: ' // & 3796 TRIM( particle_color) 3797 CALL message( 'check_parameters', 'PA0313', 1, 2, 0, 6, 0 ) 3798 ELSE 3799 IF ( color_interval(2) <= color_interval(1) ) THEN 3800 message_string = 'color_interval(2) <= color_interval(1)' 3801 CALL message( 'check_parameters', 'PA0315', 1, 2, 0, 6, 0 ) 3802 ENDIF 3803 ENDIF 3804 ENDIF 3805 3806 IF ( particle_dvrpsize /= 'none' ) THEN 3807 IF ( particle_dvrpsize /= 'absw' ) THEN 3808 message_string = 'illegal value for parameter particle_dvrpsize:' // & 3809 ' ' // TRIM( particle_dvrpsize) 3810 CALL message( 'check_parameters', 'PA0314', 1, 2, 0, 6, 0 ) 3811 ELSE 3812 IF ( dvrpsize_interval(2) <= dvrpsize_interval(1) ) THEN 3813 message_string = 'dvrpsize_interval(2) <= dvrpsize_interval(1)' 3814 CALL message( 'check_parameters', 'PA0316', 1, 2, 0, 6, 0 ) 3815 ENDIF 3816 ENDIF 3817 ENDIF 3818 3767 3819 3768 ! 3820 3769 !-- Prevent empty time records in volume, cross-section and masked data in case -
palm/trunk/SOURCE/header.f90
r3761 r4017 1 ! > @file header.f901 ! !> @file header.f90 2 2 !------------------------------------------------------------------------------! 3 3 ! This file is part of the PALM model system. … … 437 437 ONLY: day_of_year_init, time_utc_init 438 438 439 USE dvrp_variables, &440 ONLY: use_seperate_pe_for_dvrp_output441 442 439 USE grid_variables, & 443 440 ONLY: dx, dy … … 462 459 sa_vertical_gradient, sa_vertical_gradient_level, & 463 460 sa_vertical_gradient_level_ind 464 465 USE particle_attributes, &466 ONLY: bc_par_b, bc_par_lr, bc_par_ns, bc_par_t, collision_kernel, &467 curvature_solution_effects, &468 density_ratio, dissipation_classes, dt_min_part, dt_prel, &469 dt_write_particle_data, end_time_prel, &470 number_of_particle_groups, particle_advection, &471 particle_advection_start, &472 particles_per_point, pdx, pdy, pdz, psb, psl, psn, psr, pss, &473 pst, radius, radius_classes, random_start_position, &474 seed_follows_topography, &475 total_number_of_particles, use_sgs_for_particles, &476 vertical_particle_advection, write_particle_statistics477 461 478 462 USE pegrid … … 509 493 510 494 CHARACTER (LEN=40) :: output_format !< netcdf format 511 495 512 496 CHARACTER (LEN=70) :: char1 !< dummy varialbe used for various strings 513 497 CHARACTER (LEN=70) :: char2 !< string containing informating about the advected distance in case of Galilei transformation … … 651 635 WRITE ( io, 107 ) 'y' 652 636 ENDIF 653 IF ( use_seperate_pe_for_dvrp_output ) WRITE ( io, 105 )654 637 IF ( numprocs /= maximum_parallel_io_streams ) THEN 655 638 WRITE ( io, 108 ) maximum_parallel_io_streams … … 1836 1819 ENDIF 1837 1820 1838 #if defined( __dvrp_graphics )1839 !1840 !-- Dvrp-output1841 IF ( dt_dvrp /= 9999999.9_wp ) THEN1842 WRITE ( io, 360 ) dt_dvrp, TRIM( dvrp_output ), TRIM( dvrp_host ), &1843 TRIM( dvrp_username ), TRIM( dvrp_directory )1844 i = 11845 l = 01846 m = 01847 DO WHILE ( mode_dvrp(i) /= ' ' )1848 IF ( mode_dvrp(i)(1:10) == 'isosurface' ) THEN1849 READ ( mode_dvrp(i), '(10X,I2)' ) j1850 l = l + 11851 IF ( do3d(0,j) /= ' ' ) THEN1852 WRITE ( io, 361 ) TRIM( do3d(0,j) ), threshold(l), &1853 isosurface_color(:,l)1854 ENDIF1855 ELSEIF ( mode_dvrp(i)(1:6) == 'slicer' ) THEN1856 READ ( mode_dvrp(i), '(6X,I2)' ) j1857 m = m + 11858 IF ( do2d(0,j) /= ' ' ) THEN1859 WRITE ( io, 362 ) TRIM( do2d(0,j) ), &1860 slicer_range_limits_dvrp(:,m)1861 ENDIF1862 ENDIF1863 i = i + 11864 ENDDO1865 1866 WRITE ( io, 365 ) groundplate_color, superelevation_x, &1867 superelevation_y, superelevation, clip_dvrp_l, &1868 clip_dvrp_r, clip_dvrp_s, clip_dvrp_n1869 1870 IF ( TRIM( topography ) /= 'flat' ) THEN1871 WRITE ( io, 366 ) topography_color1872 IF ( cluster_size > 1 ) THEN1873 WRITE ( io, 367 ) cluster_size1874 ENDIF1875 ENDIF1876 1877 ENDIF1878 #endif1879 1880 1881 1821 WRITE ( io, 99 ) 1882 1822 … … 1912 1852 WRITE ( io, 431 ) 1913 1853 ENDIF 1914 IF ( humidity .AND. cloud_droplets ) THEN1915 WRITE ( io, 433 )1916 IF ( curvature_solution_effects ) WRITE ( io, 434 )1917 IF ( collision_kernel /= 'none' ) THEN1918 WRITE ( io, 435 ) TRIM( collision_kernel )1919 IF ( collision_kernel(6:9) == 'fast' ) THEN1920 WRITE ( io, 436 ) radius_classes, dissipation_classes1921 ENDIF1922 ELSE1923 WRITE ( io, 437 )1924 ENDIF1925 ENDIF1926 1927 1854 ! 1928 1855 !-- LES / turbulence parameters … … 1967 1894 WRITE ( io, 477 ) q_surface_initial_change 1968 1895 ENDIF 1969 1970 IF ( particle_advection ) THEN1971 !1972 !-- Particle attributes1973 WRITE ( io, 480 ) particle_advection_start, dt_prel, bc_par_lr, &1974 bc_par_ns, bc_par_b, bc_par_t, particle_maximum_age, &1975 end_time_prel1976 IF ( use_sgs_for_particles ) WRITE ( io, 488 ) dt_min_part1977 IF ( random_start_position ) WRITE ( io, 481 )1978 IF ( seed_follows_topography ) WRITE ( io, 496 )1979 IF ( particles_per_point > 1 ) WRITE ( io, 489 ) particles_per_point1980 WRITE ( io, 495 ) total_number_of_particles1981 IF ( dt_write_particle_data /= 9999999.9_wp ) THEN1982 WRITE ( io, 485 ) dt_write_particle_data1983 IF ( netcdf_data_format > 1 ) THEN1984 output_format = 'netcdf (64 bit offset) and binary'1985 ELSE1986 output_format = 'netcdf and binary'1987 ENDIF1988 IF ( netcdf_deflate == 0 ) THEN1989 WRITE ( io, 344 ) output_format1990 ELSE1991 WRITE ( io, 354 ) TRIM( output_format ), netcdf_deflate1992 ENDIF1993 ENDIF1994 IF ( dt_dopts /= 9999999.9_wp ) WRITE ( io, 494 ) dt_dopts1995 IF ( write_particle_statistics ) WRITE ( io, 486 )1996 1997 WRITE ( io, 487 ) number_of_particle_groups1998 1999 DO i = 1, number_of_particle_groups2000 IF ( i == 1 .AND. density_ratio(i) == 9999999.9_wp ) THEN2001 WRITE ( io, 490 ) i, 0.0_wp2002 WRITE ( io, 492 )2003 ELSE2004 WRITE ( io, 490 ) i, radius(i)2005 IF ( density_ratio(i) /= 0.0_wp ) THEN2006 WRITE ( io, 491 ) density_ratio(i)2007 ELSE2008 WRITE ( io, 492 )2009 ENDIF2010 ENDIF2011 WRITE ( io, 493 ) psl(i), psr(i), pss(i), psn(i), psb(i), pst(i), &2012 pdx(i), pdy(i), pdz(i)2013 IF ( .NOT. vertical_particle_advection(i) ) WRITE ( io, 482 )2014 ENDDO2015 2016 ENDIF2017 2018 1896 2019 1897 ! … … 2055 1933 104 FORMAT (' Number of PEs:',10X,I6,4X,'Tasks:',I4,' threads per task:',I4/ & 2056 1934 35X,'Processor grid (x,y): (',I4,',',I4,')',1X,A) 2057 105 FORMAT (35X,'One additional PE is used to handle'/37X,'the dvrp output!')2058 1935 107 FORMAT (35X,'A 1d-decomposition along ',A,' is used') 2059 1936 108 FORMAT (35X,'Max. # of parallel I/O streams is ',I5) … … 2278 2155 353 FORMAT (/' Number of output time levels allowed: unlimited' /) 2279 2156 354 FORMAT (' Output format: ',A, ' compressed with level: ',I1/) 2280 #if defined( __dvrp_graphics )2281 360 FORMAT (' Plot-Sequence with dvrp-software:'/ &2282 ' Output every ',F7.1,' s'/ &2283 ' Output mode: ',A/ &2284 ' Host / User: ',A,' / ',A/ &2285 ' Directory: ',A// &2286 ' The sequence contains:')2287 361 FORMAT (/' Isosurface of "',A,'" Threshold value: ', E12.3/ &2288 ' Isosurface color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)')2289 362 FORMAT (/' Slicer plane ',A/ &2290 ' Slicer limits: [',F6.2,',',F6.2,']')2291 365 FORMAT (/' Groundplate color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)'/ &2292 ' Superelevation along (x,y,z): (',F4.1,',',F4.1,',',F4.1, &2293 ')'/ &2294 ' Clipping limits: from x = ',F9.1,' m to x = ',F9.1,' m'/ &2295 ' from y = ',F9.1,' m to y = ',F9.1,' m')2296 366 FORMAT (/' Topography color: (',F4.2,',',F4.2,',',F4.2,') (R,G,B)')2297 367 FORMAT (' Polygon reduction for topography: cluster_size = ', I1)2298 #endif2299 2157 400 FORMAT (//' Physical quantities:'/ & 2300 2158 ' -------------------'/) … … 2350 2208 ' ----------------------------------'/) 2351 2209 431 FORMAT (' Humidity is considered, bu no condensation') 2352 433 FORMAT (' Cloud droplets treated explicitly using the Lagrangian part', &2353 'icle model')2354 434 FORMAT (' Curvature and solution effecs are considered for growth of', &2355 ' droplets < 1.0E-6 m')2356 435 FORMAT (' Droplet collision is handled by ',A,'-kernel')2357 436 FORMAT (' Fast kernel with fixed radius- and dissipation classes ', &2358 'are used'/ &2359 ' number of radius classes: ',I3,' interval ', &2360 '[1.0E-6,2.0E-4] m'/ &2361 ' number of dissipation classes: ',I2,' interval ', &2362 '[0,1000] cm**2/s**3')2363 437 FORMAT (' Droplet collision is switched off')2364 2210 450 FORMAT (//' LES / Turbulence quantities:'/ & 2365 2211 ' ---------------------------'/) … … 2401 2247 ' value is negative) by ',E8.1,' kg/m**3 at the beginning of', & 2402 2248 ' the 3D-simulation'/) 2403 480 FORMAT (' Particles:'/ &2404 ' ---------'// &2405 ' Particle advection is active (switched on at t = ', F7.1, &2406 ' s)'/ &2407 ' Start of new particle generations every ',F6.1,' s'/ &2408 ' Boundary conditions: left/right: ', A, ' north/south: ', A/&2409 ' bottom: ', A, ' top: ', A/&2410 ' Maximum particle age: ',F9.1,' s'/ &2411 ' Advection stopped at t = ',F9.1,' s'/)2412 481 FORMAT (' Particles have random start positions'/)2413 482 FORMAT (' Particles are advected only horizontally'/)2414 485 FORMAT (' Particle data are written on file every ', F9.1, ' s')2415 486 FORMAT (' Particle statistics are written on file'/)2416 487 FORMAT (' Number of particle groups: ',I2/)2417 488 FORMAT (' SGS velocity components are used for particle advection'/ &2418 ' minimum timestep for advection:', F8.5/)2419 489 FORMAT (' Number of particles simultaneously released at each ', &2420 'point: ', I5/)2421 490 FORMAT (' Particle group ',I2,':'/ &2422 ' Particle radius: ',E10.3, 'm')2423 491 FORMAT (' Particle inertia is activated'/ &2424 ' density_ratio (rho_fluid/rho_particle) =',F6.3/)2425 492 FORMAT (' Particles are advected only passively (no inertia)'/)2426 493 FORMAT (' Boundaries of particle source: x:',F8.1,' - ',F8.1,' m'/&2427 ' y:',F8.1,' - ',F8.1,' m'/&2428 ' z:',F8.1,' - ',F8.1,' m'/&2429 ' Particle distances: dx = ',F8.1,' m dy = ',F8.1, &2430 ' m dz = ',F8.1,' m'/)2431 494 FORMAT (' Output of particle time series in NetCDF format every ', &2432 F8.2,' s'/)2433 495 FORMAT (' Number of particles in total domain: ',I10/)2434 496 FORMAT (' Initial vertical particle positions are interpreted ', &2435 'as relative to the given topography')2436 2249 500 FORMAT (//' 1D-Model parameters:'/ & 2437 2250 ' -------------------'// & -
palm/trunk/SOURCE/init_3d_model.f90
r3987 r4017 625 625 626 626 USE kinds 627 628 USE lpm_init_mod, &629 ONLY: lpm_init630 627 631 628 USE lsf_nudging_mod, & … … 652 649 USE nesting_offl_mod, & 653 650 ONLY: nesting_offl_init 654 655 USE particle_attributes, &656 ONLY: particle_advection657 651 658 652 USE pegrid … … 2271 2265 ENDIF 2272 2266 2273 !2274 !-- If required, initialize dvrp-software2275 IF ( dt_dvrp /= 9999999.9_wp ) CALL init_dvrp2276 2277 !2278 !-- Initialize quantities for handling cloud physics.2279 !-- This routine must be called before lpm_init, becaus otherwise,2280 !-- array d_exner, needed in data_output_dvrp (called by lpm_init) is not defined.2281 2267 IF ( .NOT. ocean_mode ) THEN 2282 2268 … … 2307 2293 ENDIF 2308 2294 2309 !2310 !-- If required, initialize particles2311 IF ( particle_advection ) CALL lpm_init2312 2295 ! 2313 2296 !-- If required, initialize particles -
palm/trunk/SOURCE/mod_particle_attributes.f90
r3786 r4017 115 115 USE kinds 116 116 117 CHARACTER(LEN=15) :: aero_species = 'nacl' !< aerosol species118 CHARACTER(LEN=15) :: aero_type = 'maritime' !< aerosol type119 CHARACTER(LEN=15) :: bc_par_lr = 'cyclic' !< left/right boundary condition120 CHARACTER(LEN=15) :: bc_par_ns = 'cyclic' !< north/south boundary condition121 CHARACTER(LEN=15) :: bc_par_b = 'reflect' !< bottom boundary condition122 CHARACTER(LEN=15) :: bc_par_t = 'absorb' !< top boundary condition123 CHARACTER(LEN=15) :: collision_kernel = 'none' !< collision kernel124 CHARACTER(LEN=5) :: splitting_function = 'gamma' !< function for calculation critical weighting factor125 CHARACTER(LEN=5) :: splitting_mode = 'const' !< splitting mode126 127 INTEGER(iwp) :: deleted_particles = 0 !< number of deleted particles per time step128 117 INTEGER(iwp) :: dissipation_classes = 10 !< namelist parameter (see documentation) 129 118 INTEGER(iwp) :: ibc_par_b !< particle bottom boundary condition dummy … … 131 120 INTEGER(iwp) :: ibc_par_ns !< particle north/south boundary condition dummy 132 121 INTEGER(iwp) :: ibc_par_t !< particle top boundary condition dummy 133 INTEGER(iwp) :: iran_part = -1234567 !< number for random generator134 INTEGER(iwp) :: isf !< dummy for splitting function135 INTEGER(iwp) :: i_splitting_mode !< dummy for splitting mode136 INTEGER(iwp) :: max_number_particles_per_gridbox = 100 !< namelist parameter (see documentation)137 INTEGER(iwp) :: merge_drp = 0 !< number of merged droplets138 122 INTEGER(iwp) :: min_nr_particle = 50 !< namelist parameter (see documentation) 139 INTEGER(iwp) :: new_particles = 0 !< number of new particles140 INTEGER(iwp) :: n_max = 100 !< number of radii bin for splitting functions141 123 INTEGER(iwp) :: number_of_particles = 0 !< number of particles for each grid box (3d array is saved on prt_count) 142 124 INTEGER(iwp) :: number_of_particle_groups = 1 !< namelist parameter (see documentation) 143 INTEGER(iwp) :: number_of_sublayers = 20 !< number of sublayers for particle velocities betwenn surface and first grid level144 INTEGER(iwp) :: number_particles_per_gridbox = -1 !< namelist parameter (see documentation)145 INTEGER(iwp) :: offset_ocean_nzt = 0 !< in case of oceans runs, the vertical index calculations need an offset146 INTEGER(iwp) :: offset_ocean_nzt_m1 = 0 !< in case of oceans runs, the vertical index calculations need an offset147 INTEGER(iwp) :: particles_per_point = 1 !< namelist parameter (see documentation)148 INTEGER(iwp) :: radius_classes = 20 !< namelist parameter (see documentation)149 INTEGER(iwp) :: sort_count = 0 !< counter for sorting particles150 INTEGER(iwp) :: splitting_factor = 2 !< namelist parameter (see documentation)151 INTEGER(iwp) :: splitting_factor_max = 5 !< namelist parameter (see documentation)152 INTEGER(iwp) :: step_dealloc = 100 !< namelist parameter (see documentation)153 INTEGER(iwp) :: sum_merge_drp = 0 !< sum of merged super droplets154 INTEGER(iwp) :: sum_new_particles = 0 !< sum of created particles (in splitting algorithm)155 INTEGER(iwp) :: total_number_of_particles !< total number of particles in the whole model domain156 INTEGER(iwp) :: trlp_count_sum !< parameter for particle exchange of PEs157 INTEGER(iwp) :: trlp_count_recv_sum !< parameter for particle exchange of PEs158 INTEGER(iwp) :: trrp_count_sum !< parameter for particle exchange of PEs159 INTEGER(iwp) :: trrp_count_recv_sum !< parameter for particle exchange of PEs160 INTEGER(iwp) :: trsp_count_sum !< parameter for particle exchange of PEs161 INTEGER(iwp) :: trsp_count_recv_sum !< parameter for particle exchange of PEs162 INTEGER(iwp) :: trnp_count_sum !< parameter for particle exchange of PEs163 INTEGER(iwp) :: trnp_count_recv_sum !< parameter for particle exchange of PEs164 125 165 126 INTEGER(iwp), PARAMETER :: max_number_of_particle_groups = 10 !< maximum allowed number of particle groups 166 127 167 128 INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE :: prt_count !< 3d array of number of particles of every grid box 168 169 LOGICAL :: curvature_solution_effects = .FALSE. !< namelist parameter (see documentation) 170 LOGICAL :: deallocate_memory = .TRUE. !< namelist parameter (see documentation) 171 LOGICAL :: hall_kernel = .FALSE. !< flag for collision kernel 172 LOGICAL :: merging = .FALSE. !< namelist parameter (see documentation) 129 173 130 LOGICAL :: particle_advection = .FALSE. !< parameter to steer the advection of particles 174 LOGICAL :: random_start_position = .FALSE. !< namelist parameter (see documentation) 175 LOGICAL :: read_particles_from_restartfile = .TRUE. !< namelist parameter (see documentation) 176 LOGICAL :: seed_follows_topography = .FALSE. !< namelist parameter (see documentation) 177 LOGICAL :: splitting = .FALSE. !< namelist parameter (see documentation) 178 LOGICAL :: use_kernel_tables = .FALSE. !< parameter, which turns on the use of precalculated collision kernels 179 LOGICAL :: use_sgs_for_particles = .FALSE. !< namelist parameter (see documentation) 131 LOGICAL :: use_sgs_for_particles = .FALSE. !< namelist parameter (see documentation) 180 132 LOGICAL :: wang_kernel = .FALSE. !< flag for collision kernel 181 LOGICAL :: write_particle_statistics = .FALSE. !< namelist parameter (see documentation) 182 183 LOGICAL, DIMENSION(max_number_of_particle_groups) :: & 184 vertical_particle_advection = .TRUE. !< Switch on/off vertical particle transport 185 186 REAL(wp) :: aero_weight = 1.0_wp !< namelist parameter (see documentation) 133 187 134 REAL(wp) :: alloc_factor = 20.0_wp !< namelist parameter (see documentation) 188 REAL(wp) :: c_0 = 3.0_wp !< parameter for lagrangian timescale189 REAL(wp) :: dt_min_part = 0.0002_wp !< minimum particle time step when SGS velocities are used (s)190 REAL(wp) :: dt_prel = 9999999.9_wp !< namelist parameter (see documentation)191 REAL(wp) :: dt_write_particle_data = 9999999.9_wp !< namelist parameter (see documentation)192 REAL(wp) :: end_time_prel = 9999999.9_wp !< namelist parameter (see documentation)193 REAL(wp) :: initial_weighting_factor = 1.0_wp !< namelist parameter (see documentation)194 REAL(wp) :: last_particle_release_time = 0.0_wp !< last time of particle release195 REAL(wp) :: log_sigma(3) = 1.0_wp !< namelist parameter (see documentation)196 REAL(wp) :: na(3) = 0.0_wp !< namelist parameter (see documentation)197 REAL(wp) :: number_concentration = -1.0_wp !< namelist parameter (see documentation)198 135 REAL(wp) :: particle_advection_start = 0.0_wp !< namelist parameter (see documentation) 199 REAL(wp) :: radius_merge = 1.0E-7_wp !< namelist parameter (see documentation)200 REAL(wp) :: radius_split = 40.0E-6_wp !< namelist parameter (see documentation)201 REAL(wp) :: rm(3) = 1.0E-6_wp !< namelist parameter (see documentation)202 REAL(wp) :: sgs_wf_part !< parameter for sgs203 REAL(wp) :: time_write_particle_data = 0.0_wp !< write particle data at current time on file204 REAL(wp) :: weight_factor_merge = -1.0_wp !< namelist parameter (see documentation)205 REAL(wp) :: weight_factor_split = -1.0_wp !< namelist parameter (see documentation)206 REAL(wp) :: z0_av_global !< horizontal mean value of z0207 208 REAL(wp), DIMENSION(max_number_of_particle_groups) :: density_ratio = 9999999.9_wp !< namelist parameter (see documentation)209 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdx = 9999999.9_wp !< namelist parameter (see documentation)210 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdy = 9999999.9_wp !< namelist parameter (see documentation)211 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdz = 9999999.9_wp !< namelist parameter (see documentation)212 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psb = 9999999.9_wp !< namelist parameter (see documentation)213 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psl = 9999999.9_wp !< namelist parameter (see documentation)214 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psn = 9999999.9_wp !< namelist parameter (see documentation)215 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psr = 9999999.9_wp !< namelist parameter (see documentation)216 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pss = 9999999.9_wp !< namelist parameter (see documentation)217 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pst = 9999999.9_wp !< namelist parameter (see documentation).218 REAL(wp), DIMENSION(max_number_of_particle_groups) :: radius = 9999999.9_wp !< namelist parameter (see documentation)219 220 REAL(wp), DIMENSION(:), ALLOCATABLE :: log_z_z0 !< Precalculate LOG(z/z0)221 136 222 137 ! -
palm/trunk/SOURCE/module_interface.f90
r4008 r4017 242 242 im_data_output_3d, & 243 243 im_init 244 244 245 USE lagrangian_particle_model_mod, & 246 ONLY: lpm_parin, & 247 lpm_header, & 248 lpm_check_parameters, & 249 lpm_init, & 250 lpm_actions, & 251 lpm_rrd_global, & 252 lpm_rrd_local, & 253 lpm_wrd_local, & 254 lpm_wrd_global 255 245 256 USE land_surface_model_mod, & 246 257 ONLY: lsm_parin, & … … 290 301 ocean_rrd_local, & 291 302 ocean_wrd_local 303 304 USE particle_attributes, & 305 ONLY: particle_advection 292 306 293 307 USE plant_canopy_model_mod, & … … 558 572 CALL gust_parin 559 573 CALL im_parin 574 CALL lpm_parin 560 575 CALL lsm_parin 561 576 ! ToDo: create parin routine for large_scale_forcing and nudging (should be seperate modules or new module switch) … … 574 589 CALL wtm_parin 575 590 576 CALL package_parin ! ToDo: deprecated, needs to be dissolved577 578 591 IF ( debug_output ) CALL debug_message( 'reading module-specific parameters', 'end' ) 579 592 … … 596 609 IF ( gust_module_enabled ) CALL gust_check_parameters 597 610 IF ( indoor_model ) CALL im_check_parameters 611 IF ( particle_advection ) CALL lpm_check_parameters 598 612 IF ( land_surface ) CALL lsm_check_parameters 599 613 IF ( large_scale_forcing .OR. nudging ) CALL lsf_nudging_check_parameters ! ToDo: create single module switch … … 896 910 IF ( gust_module_enabled ) CALL gust_init 897 911 IF ( indoor_model ) CALL im_init 912 IF ( particle_advection ) CALL lpm_init 898 913 IF ( large_scale_forcing ) CALL lsf_init 899 914 IF ( land_surface ) CALL lsm_init … … 950 965 IF ( virtual_flight ) CALL flight_header( io ) 951 966 IF ( gust_module_enabled ) CALL gust_header( io ) 967 IF ( particle_advection ) CALL lpm_header( io ) 952 968 IF ( land_surface ) CALL lsm_header( io ) 953 969 IF ( large_scale_forcing ) CALL lsf_nudging_header( io ) … … 981 997 IF ( air_chemistry ) CALL chem_actions( location ) 982 998 IF ( gust_module_enabled ) CALL gust_actions( location ) 999 IF ( particle_advection ) CALL lpm_actions( location ) 983 1000 IF ( ocean_mode ) CALL ocean_actions( location ) 984 1001 IF ( salsa ) CALL salsa_actions( location ) … … 1377 1394 IF ( .NOT. found ) CALL flight_rrd_global( found ) ! ToDo: change interface to pass variable 1378 1395 IF ( .NOT. found ) CALL gust_rrd_global( found ) ! ToDo: change interface to pass variable 1396 IF ( .NOT. found ) CALL lpm_rrd_global( found ) ! ToDo: change interface to pass variable 1379 1397 IF ( .NOT. found ) CALL ocean_rrd_global( found ) ! ToDo: change interface to pass variable 1380 1398 IF ( .NOT. found ) CALL stg_rrd_global ( found ) ! ToDo: change interface to pass variable … … 1480 1498 ) ! ToDo: change interface to pass variable 1481 1499 1500 IF ( .NOT. found ) CALL lpm_rrd_local( & 1501 map_index, & 1502 nxlf, nxlc, nxl_on_file, & 1503 nxrf, nxrc, nxr_on_file, & 1504 nynf, nync, nyn_on_file, & 1505 nysf, nysc, nys_on_file, & 1506 tmp_3d, found & 1507 ) ! ToDo: change interface to pass variable 1508 1482 1509 IF ( .NOT. found ) CALL lsm_rrd_local( & 1483 1510 map_index, & … … 1557 1584 IF ( air_chemistry ) CALL chem_wrd_local 1558 1585 IF ( gust_module_enabled ) CALL gust_wrd_local 1586 IF ( particle_advection ) CALL lpm_wrd_local 1559 1587 IF ( land_surface ) CALL lsm_wrd_local 1560 1588 IF ( ocean_mode ) CALL ocean_wrd_local -
palm/trunk/SOURCE/modules.f90
r3990 r4017 1195 1195 INTEGER(iwp) :: dots_time_count = 0 !< number of output intervals for timeseries output 1196 1196 INTEGER(iwp) :: dp_level_ind_b = 0 !< lowest grid index for external pressure gradient forcing 1197 INTEGER(iwp) :: dvrp_filecount = 0 !< parameter for dvr visualization software1198 1197 INTEGER(iwp) :: ensemble_member_nr = 0 !< namelist parameter 1199 1198 INTEGER(iwp) :: gamma_mg !< switch for steering the multigrid cycle: 1: v-cycle, 2: w-cycle … … 1460 1459 REAL(wp) :: dt_do2d_yz = 9999999.9_wp !< namelist parameter 1461 1460 REAL(wp) :: dt_do3d = 9999999.9_wp !< namelist parameter 1462 REAL(wp) :: dt_dvrp = 9999999.9_wp !< namelist parameter1463 1461 REAL(wp) :: dt_max = 20.0_wp !< namelist parameter 1464 1462 REAL(wp) :: dt_restart = 9999999.9_wp !< namelist parameter … … 1545 1543 REAL(wp) :: time_do_av = 0.0_wp !< time since last averaged-data output 1546 1544 REAL(wp) :: time_do_sla = 0.0_wp !< time since last 1547 REAL(wp) :: time_dvrp = 0.0_wp !< time since last dvrp output1548 1545 REAL(wp) :: time_restart = 9999999.9_wp !< time at which run shall be terminated and restarted 1549 1546 REAL(wp) :: time_run_control = 0.0_wp !< time since last RUN_CONTROL output … … 1627 1624 1628 1625 END MODULE control_parameters 1629 1630 1631 !------------------------------------------------------------------------------!1632 ! Description:1633 ! ------------1634 !> Definition of variables used with dvrp-software.1635 !------------------------------------------------------------------------------!1636 MODULE dvrp_variables1637 1638 USE kinds1639 1640 CHARACTER (LEN=10) :: dvrp_output = 'rtsp' !< dvr namelist parameter1641 CHARACTER (LEN=10) :: particle_color = 'none' !< dvr namelist parameter1642 CHARACTER (LEN=10) :: particle_dvrpsize = 'none' !< dvr namelist parameter1643 1644 CHARACTER (LEN=20), DIMENSION(10) :: mode_dvrp = & !< dvr namelist parameter1645 (/ ( ' ', i9 = 1,10 ) /)1646 1647 CHARACTER (LEN=80) :: dvrp_directory = 'default' !< dvr namelist parameter1648 CHARACTER (LEN=80) :: dvrp_file = 'default' !< dvr namelist parameter1649 CHARACTER (LEN=80) :: dvrp_host = 'origin.rvs.uni-hannover.de' !< dvr namelist parameter1650 CHARACTER (LEN=80) :: dvrp_password = '********' !< dvr namelist parameter1651 CHARACTER (LEN=80) :: dvrp_username = ' ' !< dvr namelist parameter1652 1653 INTEGER(iwp) :: cluster_size = 1 !< dvr namelist parameter1654 INTEGER(iwp) :: dvrp_colortable_entries = 4 !< internal dvr software variable1655 INTEGER(iwp) :: dvrp_colortable_entries_prt = 22 !< internal dvr software variable1656 INTEGER(iwp) :: islice_dvrp !< internal dvr software variable1657 INTEGER(iwp) :: nx_dvrp !< internal dvr software variable1658 INTEGER(iwp) :: nxl_dvrp !< internal dvr software variable1659 INTEGER(iwp) :: nxr_dvrp !< internal dvr software variable1660 INTEGER(iwp) :: ny_dvrp !< internal dvr software variable1661 INTEGER(iwp) :: nyn_dvrp !< internal dvr software variable1662 INTEGER(iwp) :: nys_dvrp !< internal dvr software variable1663 INTEGER(iwp) :: nz_dvrp !< internal dvr software variable1664 INTEGER(iwp) :: pathlines_fadeintime = 5 !< dvr namelist parameter1665 INTEGER(iwp) :: pathlines_fadeouttime = 5 !< dvr namelist parameter1666 INTEGER(iwp) :: pathlines_linecount = 1000 !< dvr namelist parameter1667 INTEGER(iwp) :: pathlines_maxhistory = 40 !< dvr namelist parameter1668 INTEGER(iwp) :: pathlines_wavecount = 10 !< dvr namelist parameter1669 INTEGER(iwp) :: pathlines_wavetime = 50 !< dvr namelist parameter1670 INTEGER(iwp) :: vc_gradient_normals = 0 !< dvr namelist parameter1671 INTEGER(iwp) :: vc_mode = 0 !< dvr namelist parameter1672 INTEGER(iwp) :: vc_size_x = 2 !< dvr namelist parameter1673 INTEGER(iwp) :: vc_size_y = 2 !< dvr namelist parameter1674 INTEGER(iwp) :: vc_size_z = 2 !< dvr namelist parameter1675 1676 INTEGER(iwp), DIMENSION(10) :: slicer_position_dvrp !< internal dvr software variable1677 1678 LOGICAL :: cyclic_dvrp = .FALSE. !< internal dvr software variable1679 LOGICAL :: dvrp_overlap !< internal dvr software variable1680 LOGICAL :: dvrp_total_overlap !< internal dvr software variable1681 LOGICAL :: local_dvrserver_running !< namelist parameter (ENVPAR namelist provided by palmrun)1682 LOGICAL :: lock_steering_update = .FALSE. !< internal dvr software variable1683 LOGICAL :: use_seperate_pe_for_dvrp_output = .FALSE. !< internal dvr software variable1684 1685 REAL(wp) :: clip_dvrp_l = 9999999.9_wp !< dvr namelist parameter1686 REAL(wp) :: clip_dvrp_n = 9999999.9_wp !< dvr namelist parameter1687 REAL(wp) :: clip_dvrp_r = 9999999.9_wp !< dvr namelist parameter1688 REAL(wp) :: clip_dvrp_s = 9999999.9_wp !< dvr namelist parameter1689 REAL(wp) :: superelevation = 1.0_wp !< dvr namelist parameter1690 REAL(wp) :: superelevation_x = 1.0_wp !< dvr namelist parameter1691 REAL(wp) :: superelevation_y = 1.0_wp !< dvr namelist parameter1692 REAL(wp) :: vc_alpha = 38.0_wp !< dvr namelist parameter1693 1694 REAL(wp), DIMENSION(2) :: color_interval = (/ 0.0_wp, 1.0_wp /) !< dvr namelist parameter1695 REAL(wp), DIMENSION(2) :: dvrpsize_interval = (/ 0.0_wp, 1.0_wp /) !< dvr namelist parameter1696 1697 REAL(wp), DIMENSION(3) :: groundplate_color = (/ 0.0_wp, 0.6_wp, 0.0_wp /) !< dvr namelist parameter1698 REAL(wp), DIMENSION(3) :: topography_color = (/ 0.8_wp, 0.7_wp, 0.6_wp /) !< dvr namelist parameter1699 1700 REAL(wp), DIMENSION(2,10) :: slicer_range_limits_dvrp !< dvr namelist parameter1701 1702 REAL(wp), DIMENSION(3,10) :: isosurface_color !< dvr namelist parameter1703 1704 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp !< internal dvr software variable1705 REAL(sp), DIMENSION(2,100) :: interval_values_dvrp_prt !< internal dvr software variable1706 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp !< internal dvr software variable1707 REAL(sp), DIMENSION(2,100) :: interval_h_dvrp_prt !< internal dvr software variable1708 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp = 0.5_sp !< internal dvr software variable1709 REAL(sp), DIMENSION(2,100) :: interval_l_dvrp_prt = 0.5_sp !< internal dvr software variable1710 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp = 1.0_sp !< internal dvr software variable1711 REAL(sp), DIMENSION(2,100) :: interval_s_dvrp_prt = 1.0_sp !< internal dvr software variable1712 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp = 0.0_sp !< internal dvr software variable1713 REAL(sp), DIMENSION(2,100) :: interval_a_dvrp_prt = 0.0_sp !< internal dvr software variable1714 1715 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 variable1716 -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &1717 -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, -1.0_wp, 1.0_wp, &1718 -1.0_wp, 1.0_wp /1719 1720 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 variable1721 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, &1722 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, &1723 0.1_wp, 0.4_wp, 0.1_wp /1724 1725 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 variable1726 25.0_wp, -25.0_wp, 192 * 0.0_wp /1727 1728 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 variable1729 25.0_wp, -25.0_wp, 192 * 0.0_wp /1730 1731 REAL(sp), DIMENSION(:), ALLOCATABLE :: xcoor_dvrp !< internal dvr software variable1732 REAL(sp), DIMENSION(:), ALLOCATABLE :: ycoor_dvrp !< internal dvr software variable1733 REAL(sp), DIMENSION(:), ALLOCATABLE :: zcoor_dvrp !< internal dvr software variable1734 1735 TYPE steering1736 CHARACTER (LEN=24) :: name !< internal dvr software variable1737 REAL(sp) :: min !< internal dvr software variable1738 REAL(sp) :: max !< internal dvr software variable1739 INTEGER(iwp) :: imin !< internal dvr software variable1740 INTEGER(iwp) :: imax !< internal dvr software variable1741 END TYPE steering1742 1743 TYPE(steering), DIMENSION(:), ALLOCATABLE :: steering_dvrp !< internal dvr software variable1744 1745 SAVE1746 1747 END MODULE dvrp_variables1748 1626 1749 1627 -
palm/trunk/SOURCE/palm.f90
r3995 r4017 1 ! > @file palm.f901 ! !> @file palm.f90 2 2 !------------------------------------------------------------------------------! 3 3 ! This file is part of the PALM model system. … … 321 321 ONLY: netcdf_data_input_inquire_file, netcdf_data_input_init, & 322 322 netcdf_data_input_surface_data, netcdf_data_input_topo 323 324 USE particle_attributes, &325 ONLY: particle_advection326 323 327 324 USE pegrid … … 452 449 CALL MPI_COMM_RANK( comm_palm, myid, ierr ) 453 450 #endif 454 455 CALL init_dvrp_logging456 451 457 452 ! … … 614 609 615 610 CALL cpu_log( log_point(22), 'wrd_local', 'stop' ) 616 617 !618 !-- If required, write particle data in own restart files619 IF ( particle_advection ) CALL lpm_write_restart_file620 611 621 612 ENDIF … … 641 632 !-- Close files 642 633 CALL close_file( 0 ) 643 CALL close_dvrp644 634 645 635 ! -
palm/trunk/SOURCE/parin.f90
r3987 r4017 503 503 USE date_and_time_mod, & 504 504 ONLY: date_init, day_of_year_init, time_utc_init 505 506 USE dvrp_variables, &507 ONLY: local_dvrserver_running508 505 509 506 USE grid_variables, & … … 744 741 termination_time_needed, vnest_start_time 745 742 746 NAMELIST /envpar/ progress_bar_disabled, host, local_dvrserver_running,&743 NAMELIST /envpar/ progress_bar_disabled, host, & 747 744 maximum_cpu_time_allowed, maximum_parallel_io_streams, & 748 745 read_svf, revision, run_identifier, tasks_per_node, & -
palm/trunk/SOURCE/pmc_particle_interface.f90
r3948 r4017 90 90 ONLY: prt_count, particles, grid_particles, & 91 91 particle_type, number_of_particles, zero_particle, & 92 ibc_par_t, ibc_par_lr, ibc_par_ns, alloc_factor 93 94 USE lpm_pack_and_sort_mod 95 96 USE lpm_exchange_horiz_mod, & 97 ONLY: realloc_particles_array 92 ibc_par_t, ibc_par_lr, ibc_par_ns, alloc_factor, min_nr_particle 93 94 ! USE lpm_pack_and_sort_mod 98 95 99 96 #if defined( __parallel ) … … 956 953 prt_count(kp,jp,ip) = prt_count(kp,jp,ip) + 1 957 954 IF ( prt_count(kp,jp,ip) > SIZE( grid_particles(kp,jp,ip)%particles ) ) THEN 958 CALL realloc_particles_array( ip, jp, kp )955 CALL pmc_realloc_particles_array( ip, jp, kp ) 959 956 ENDIF 960 957 coarse_particles(jc,ic)%parent_particles(n)%x = xc ! Adjust coordinates to child grid … … 1082 1079 !- Pack particles (eliminate those marked for deletion), 1083 1080 !- determine new number of particles 1084 CALL lpm_sort_in_subboxes1081 ! CALL lpm_sort_in_subboxes 1085 1082 1086 1083 #endif … … 1137 1134 prt_count(k,j,i) = prt_count(k,j,i) + 1 1138 1135 IF ( prt_count(k,j,i) > SIZE( grid_particles(k,j,i)%particles ) ) THEN 1139 CALL realloc_particles_array( i, j, k )1136 CALL pmc_realloc_particles_array( i, j, k ) 1140 1137 ENDIF 1141 1138 grid_particles(k,j,i)%particles(prt_count(k,j,i)) = particle_in_win(pindex) … … 1155 1152 #endif 1156 1153 END SUBROUTINE p_copy_particle_to_org_grid 1157 1154 1155 !------------------------------------------------------------------------------! 1156 ! Description: 1157 ! ------------ 1158 !> If the allocated memory for the particle array do not suffice to add arriving 1159 !> particles from neighbour grid cells, this subrouting reallocates the 1160 !> particle array to assure enough memory is available. 1161 !------------------------------------------------------------------------------! 1162 SUBROUTINE pmc_realloc_particles_array ( i, j, k, size_in ) 1163 1164 INTEGER(iwp), INTENT(IN) :: i !< 1165 INTEGER(iwp), INTENT(IN) :: j !< 1166 INTEGER(iwp), INTENT(IN) :: k !< 1167 INTEGER(iwp), INTENT(IN), OPTIONAL :: size_in !< 1168 1169 INTEGER(iwp) :: old_size !< 1170 INTEGER(iwp) :: new_size !< 1171 TYPE(particle_type), DIMENSION(:), ALLOCATABLE :: tmp_particles_d !< 1172 TYPE(particle_type), DIMENSION(500) :: tmp_particles_s !< 1173 1174 old_size = SIZE(grid_particles(k,j,i)%particles) 1175 1176 IF ( PRESENT(size_in) ) THEN 1177 new_size = size_in 1178 ELSE 1179 new_size = old_size * ( 1.0_wp + alloc_factor / 100.0_wp ) 1180 ENDIF 1181 1182 new_size = MAX( new_size, min_nr_particle, old_size + 1 ) 1183 1184 IF ( old_size <= 500 ) THEN 1185 1186 tmp_particles_s(1:old_size) = grid_particles(k,j,i)%particles(1:old_size) 1187 1188 DEALLOCATE(grid_particles(k,j,i)%particles) 1189 ALLOCATE(grid_particles(k,j,i)%particles(new_size)) 1190 1191 grid_particles(k,j,i)%particles(1:old_size) = tmp_particles_s(1:old_size) 1192 grid_particles(k,j,i)%particles(old_size+1:new_size) = zero_particle 1193 1194 ELSE 1195 1196 ALLOCATE(tmp_particles_d(new_size)) 1197 tmp_particles_d(1:old_size) = grid_particles(k,j,i)%particles 1198 1199 DEALLOCATE(grid_particles(k,j,i)%particles) 1200 ALLOCATE(grid_particles(k,j,i)%particles(new_size)) 1201 1202 grid_particles(k,j,i)%particles(1:old_size) = tmp_particles_d(1:old_size) 1203 grid_particles(k,j,i)%particles(old_size+1:new_size) = zero_particle 1204 1205 DEALLOCATE(tmp_particles_d) 1206 1207 ENDIF 1208 particles => grid_particles(k,j,i)%particles(1:new_size) 1209 1210 RETURN 1211 1212 END SUBROUTINE pmc_realloc_particles_array 1158 1213 1159 1214 END MODULE pmc_particle_interface -
palm/trunk/SOURCE/read_restart_data_mod.f90
r4009 r4017 155 155 USE netcdf_interface, & 156 156 ONLY: netcdf_precision, output_for_t0 157 158 USE particle_attributes, &159 ONLY: curvature_solution_effects, iran_part160 157 161 158 USE pegrid … … 410 407 CASE ( 'current_timestep_number' ) 411 408 READ ( 13 ) current_timestep_number 412 CASE ( 'curvature_solution_effects' )413 READ ( 13 ) curvature_solution_effects414 409 CASE ( 'cycle_mg' ) 415 410 READ ( 13 ) cycle_mg … … 442 437 CASE ( 'dt_run_control_1d' ) 443 438 READ ( 13 ) dt_run_control_1d 444 CASE ( 'dvrp_filecount' )445 READ ( 13 ) dvrp_filecount446 439 CASE ( 'dx' ) 447 440 READ ( 13 ) dx … … 676 669 CASE ( 'time_dots' ) 677 670 READ ( 13 ) time_dots 678 CASE ( 'time_dvrp' )679 READ ( 13 ) time_dvrp680 671 CASE ( 'time_radiation' ) 681 672 READ ( 13 ) time_radiation … … 1349 1340 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 1350 1341 1351 CASE ( 'iran' ) ! matching random numbers is still unresolved issue1352 IF ( k == 1 ) READ ( 13 ) iran, iran_part1353 1354 1342 CASE ( 'kh' ) 1355 1343 IF ( k == 1 ) READ ( 13 ) tmp_3d … … 1407 1395 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 1408 1396 1409 CASE ( 'pc_av' )1410 IF ( .NOT. ALLOCATED( pc_av ) ) THEN1411 ALLOCATE( pc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )1412 ENDIF1413 IF ( k == 1 ) READ ( 13 ) tmp_3d1414 pc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &1415 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)1416 1417 CASE ( 'pr_av' )1418 IF ( .NOT. ALLOCATED( pr_av ) ) THEN1419 ALLOCATE( pr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )1420 ENDIF1421 IF ( k == 1 ) READ ( 13 ) tmp_3d1422 pr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &1423 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)1424 1425 1397 CASE ( 'pt' ) 1426 1398 IF ( k == 1 ) READ ( 13 ) tmp_3d … … 1468 1440 IF ( k == 1 ) READ ( 13 ) tmp_3d 1469 1441 ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = & 1470 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)1471 1472 CASE ( 'ql_c_av' )1473 IF ( .NOT. ALLOCATED( ql_c_av ) ) THEN1474 ALLOCATE( ql_c_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )1475 ENDIF1476 IF ( k == 1 ) READ ( 13 ) tmp_3d1477 ql_c_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &1478 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)1479 1480 CASE ( 'ql_v_av' )1481 IF ( .NOT. ALLOCATED( ql_v_av ) ) THEN1482 ALLOCATE( ql_v_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )1483 ENDIF1484 IF ( k == 1 ) READ ( 13 ) tmp_3d1485 ql_v_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &1486 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)1487 1488 CASE ( 'ql_vp_av' )1489 IF ( .NOT. ALLOCATED( ql_vp_av ) ) THEN1490 ALLOCATE( ql_vp_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )1491 ENDIF1492 IF ( k == 1 ) READ ( 13 ) tmp_3d1493 ql_vp_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &1494 1442 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp) 1495 1443 -
palm/trunk/SOURCE/time_integration.f90
r4010 r4017 544 544 do_sum, dt_3d, dt_averaging_input, dt_averaging_input_pr, dt_coupling, & 545 545 dt_data_output_av, dt_disturb, dt_do2d_xy, dt_do2d_xz, dt_do2d_yz, dt_do3d, & 546 dt_domask,dt_dopts, dt_dopr, dt_dopr_listing, dt_dots, dt_ dvrp, dt_run_control,&546 dt_domask,dt_dopts, dt_dopr, dt_dopr_listing, dt_dots, dt_run_control, & 547 547 end_time, first_call_lpm, first_call_mas, galilei_transformation, humidity, & 548 548 indoor_model, intermediate_timestep_count, intermediate_timestep_count_max, & … … 557 557 time_do2d_xz, time_do2d_yz, time_do3d, time_domask, time_dopr, time_dopr_av, & 558 558 time_dopr_listing, time_dopts, time_dosp, time_dosp_av, time_dots, time_do_av, & 559 time_do_sla, time_disturb, time_ dvrp, time_run_control, time_since_reference_point,&559 time_do_sla, time_disturb, time_run_control, time_since_reference_point, & 560 560 turbulent_inflow, turbulent_outflow, urban_surface, & 561 561 use_initial_profile_as_reference, use_single_reference_value, u_gtrans, v_gtrans, & … … 591 591 ONLY: lsm_boundary_condition, lsm_energy_balance, lsm_soil_model, skip_time_do_lsm 592 592 593 USE l pm_mod,&594 ONLY: lpm 593 USE lagrangian_particle_model_mod, & 594 ONLY: lpm_data_output_ptseries 595 595 596 596 USE lsf_nudging_mod, & … … 846 846 ENDIF 847 847 ENDIF 848 849 #if defined( __dvrp_graphics )850 !851 !-- Time measurement with dvrp software852 CALL DVRP_LOG_EVENT( 2, current_timestep_number )853 #endif854 848 855 849 CALL location_message( 'atmosphere (and/or ocean) time-stepping', 'start' ) … … 1003 997 .AND. intermediate_timestep_count == 1 ) & 1004 998 THEN 1005 CALL lpm999 CALL module_interface_actions( 'after_prognostic_equations' ) 1006 1000 first_call_lpm = .FALSE. 1007 1001 ENDIF … … 1541 1535 ENDIF 1542 1536 ENDDO 1543 time_dvrp = time_dvrp + dt_3d1544 1537 IF ( time_since_reference_point >= skip_time_dosp ) THEN 1545 1538 time_dosp = time_dosp + dt_3d … … 1838 1831 ( time_since_reference_point >= particle_advection_start .AND. & 1839 1832 first_call_lpm ) ) THEN 1840 CALL data_output_ptseries1833 CALL lpm_data_output_ptseries 1841 1834 time_dopts = MOD( time_dopts, MAX( dt_dopts, dt_3d ) ) 1842 1835 ENDIF 1843 1836 ENDIF 1844 1845 !1846 !-- Output of dvrp-graphics (isosurface, particles, slicer)1847 #if defined( __dvrp_graphics )1848 CALL DVRP_LOG_EVENT( -2, current_timestep_number-1 )1849 #endif1850 IF ( time_dvrp >= dt_dvrp ) THEN1851 CALL data_output_dvrp1852 time_dvrp = MOD( time_dvrp, MAX( dt_dvrp, dt_3d ) )1853 ENDIF1854 #if defined( __dvrp_graphics )1855 CALL DVRP_LOG_EVENT( 2, current_timestep_number )1856 #endif1857 1837 1858 1838 ! … … 1934 1914 IF ( myid == 0 ) CALL finish_progress_bar 1935 1915 1936 #if defined( __dvrp_graphics )1937 CALL DVRP_LOG_EVENT( -2, current_timestep_number )1938 #endif1939 1940 1916 CALL location_message( 'atmosphere (and/or ocean) time-stepping', 'finished' ) 1941 1917 -
palm/trunk/SOURCE/write_restart_data_mod.f90
r3994 r4017 116 116 ONLY: netcdf_precision, output_for_t0 117 117 118 USE particle_attributes, &119 ONLY: curvature_solution_effects, iran_part120 121 118 USE pegrid, & 122 119 ONLY: collective_wait, hor_index_bounds, myid, numprocs … … 324 321 WRITE ( 14 ) current_timestep_number 325 322 326 CALL wrd_write_string( 'curvature_solution_effects' )327 WRITE ( 14 ) curvature_solution_effects328 329 323 CALL wrd_write_string( 'cycle_mg' ) 330 324 WRITE ( 14 ) cycle_mg … … 371 365 CALL wrd_write_string( 'dt_run_control_1d' ) 372 366 WRITE ( 14 ) dt_run_control_1d 373 374 CALL wrd_write_string( 'dvrp_filecount' )375 WRITE ( 14 ) dvrp_filecount376 367 377 368 CALL wrd_write_string( 'dx' ) … … 707 698 WRITE ( 14 ) time_dots 708 699 709 CALL wrd_write_string( 'time_dvrp' )710 WRITE ( 14 ) time_dvrp711 712 700 CALL wrd_write_string( 'time_radiation' ) 713 701 WRITE ( 14 ) time_radiation … … 935 923 ENDIF 936 924 937 CALL wrd_write_string( 'iran' )938 WRITE ( 14 ) iran, iran_part939 940 925 CALL wrd_write_string( 'kh' ) 941 926 WRITE ( 14 ) kh
Note: See TracChangeset
for help on using the changeset viewer.