Changeset 2155 for palm/trunk/SOURCE/prognostic_equations.f90
- Timestamp:
- Feb 21, 2017 9:57:40 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/prognostic_equations.f90
r2119 r2155 20 20 ! Current revisions: 21 21 ! ------------------ 22 ! 23 ! 22 ! Bugfix in the calculation of microphysical quantities on ghost points. 23 ! 24 24 ! Former revisions: 25 25 ! ----------------- … … 28 28 ! 2118 2017-01-17 16:38:49Z raasch 29 29 ! OpenACC version of subroutine removed 30 ! 30 ! 31 31 ! 2031 2016-10-21 15:11:58Z knoop 32 32 ! renamed variable rho to rho_ocean 33 ! 33 ! 34 34 ! 2011 2016-09-19 17:29:57Z kanani 35 35 ! Flag urban_surface is now defined in module control_parameters. 36 ! 36 ! 37 37 ! 2007 2016-08-24 15:47:17Z kanani 38 38 ! Added pt tendency calculation based on energy balance at urban surfaces 39 39 ! (new urban surface model) 40 ! 40 ! 41 41 ! 2000 2016-08-20 18:09:15Z knoop 42 42 ! Forced header and separation lines into 80 columns 43 ! 43 ! 44 44 ! 1976 2016-07-27 13:28:04Z maronga 45 45 ! Simplied calls to radiation model 46 ! 46 ! 47 47 ! 1960 2016-07-12 16:34:24Z suehring 48 48 ! Separate humidity and passive scalar 49 ! 49 ! 50 50 ! 1914 2016-05-26 14:44:07Z witha 51 51 ! Added calls for wind turbine model … … 53 53 ! 1873 2016-04-18 14:50:06Z maronga 54 54 ! Module renamed (removed _mod) 55 ! 55 ! 56 56 ! 1850 2016-04-08 13:29:27Z maronga 57 57 ! Module renamed 58 ! 58 ! 59 59 ! 1826 2016-04-07 12:01:39Z maronga 60 60 ! Renamed canopy model calls. 61 ! 61 ! 62 62 ! 1822 2016-04-07 07:49:42Z hoffmann 63 63 ! Kessler microphysics scheme moved to microphysics. 64 64 ! 65 65 ! 1757 2016-02-22 15:49:32Z maronga 66 ! 66 ! 67 67 ! 1691 2015-10-26 16:17:44Z maronga 68 68 ! Added optional model spin-up without radiation / land surface model calls. 69 69 ! Formatting corrections. 70 ! 70 ! 71 71 ! 1682 2015-10-07 23:56:08Z knoop 72 ! Code annotations made doxygen readable 73 ! 72 ! Code annotations made doxygen readable 73 ! 74 74 ! 1585 2015-04-30 07:05:52Z maronga 75 75 ! Added call for temperature tendency calculation due to radiative flux divergence 76 ! 76 ! 77 77 ! 1517 2015-01-07 19:12:25Z hoffmann 78 78 ! advec_s_bc_mod addded, since advec_s_bc is now a module … … 80 80 ! 1496 2014-12-02 17:25:50Z maronga 81 81 ! Renamed "radiation" -> "cloud_top_radiation" 82 ! 82 ! 83 83 ! 1484 2014-10-21 10:53:05Z kanani 84 84 ! Changes due to new module structure of the plant canopy model: … … 86 86 ! Removed double-listing of use_upstream_for_tke in ONLY-list of module 87 87 ! control_parameters 88 ! 88 ! 89 89 ! 1409 2014-05-23 12:11:32Z suehring 90 ! Bugfix: i_omp_start changed for advec_u_ws at left inflow and outflow boundary. 90 ! Bugfix: i_omp_start changed for advec_u_ws at left inflow and outflow boundary. 91 91 ! This ensures that left-hand side fluxes are also calculated for nxl in that 92 ! case, even though the solution at nxl is overwritten in boundary_conds() 93 ! 92 ! case, even though the solution at nxl is overwritten in boundary_conds() 93 ! 94 94 ! 1398 2014-05-07 11:15:00Z heinze 95 95 ! Rayleigh-damping for horizontal velocity components changed: instead of damping 96 ! against ug and vg, damping against u_init and v_init is used to allow for a 96 ! against ug and vg, damping against u_init and v_init is used to allow for a 97 97 ! homogenized treatment in case of nudging 98 ! 98 ! 99 99 ! 1380 2014-04-28 12:40:45Z heinze 100 ! Change order of calls for scalar prognostic quantities: 101 ! ls_advec -> nudging -> subsidence since initial profiles 102 ! 100 ! Change order of calls for scalar prognostic quantities: 101 ! ls_advec -> nudging -> subsidence since initial profiles 102 ! 103 103 ! 1374 2014-04-25 12:55:07Z raasch 104 104 ! missing variables added to ONLY lists 105 ! 105 ! 106 106 ! 1365 2014-04-22 15:03:56Z boeske 107 ! Calls of ls_advec for large scale advection added, 107 ! Calls of ls_advec for large scale advection added, 108 108 ! subroutine subsidence is only called if use_subsidence_tendencies = .F., 109 109 ! new argument ls_index added to the calls of subsidence 110 110 ! +ls_index 111 ! 111 ! 112 112 ! 1361 2014-04-16 15:17:48Z hoffmann 113 113 ! Two-moment microphysics moved to the start of prognostic equations. This makes … … 117 117 ! 118 118 ! Two-moment cloud physics added for vector and accelerator optimization. 119 ! 119 ! 120 120 ! 1353 2014-04-08 15:21:23Z heinze 121 121 ! REAL constants provided with KIND-attribute 122 ! 122 ! 123 123 ! 1337 2014-03-25 15:11:48Z heinze 124 124 ! Bugfix: REAL constants provided with KIND-attribute 125 ! 125 ! 126 126 ! 1332 2014-03-25 11:59:43Z suehring 127 ! Bugfix: call advec_ws or advec_pw for TKE only if NOT use_upstream_for_tke 128 ! 127 ! Bugfix: call advec_ws or advec_pw for TKE only if NOT use_upstream_for_tke 128 ! 129 129 ! 1330 2014-03-24 17:29:32Z suehring 130 ! In case of SGS-particle velocity advection of TKE is also allowed with 130 ! In case of SGS-particle velocity advection of TKE is also allowed with 131 131 ! dissipative 5th-order scheme. 132 132 ! … … 161 161 ! 162 162 ! 1115 2013-03-26 18:16:16Z hoffmann 163 ! optimized cloud physics: calculation of microphysical tendencies transfered 163 ! optimized cloud physics: calculation of microphysical tendencies transfered 164 164 ! to microphysics.f90; qr and nr are only calculated if precipitation is required 165 165 ! … … 211 211 MODULE prognostic_equations_mod 212 212 213 213 214 214 215 215 USE arrays_3d, & … … 225 225 te_m, tnr_m, tpt_m, tq_m, tqr_m, ts_m, tsa_m, tswst, tu_m, tv_m,& 226 226 tw_m, u, ug, u_init, u_p, v, vg, vpt, v_init, v_p, w, w_p 227 227 228 228 USE control_parameters, & 229 229 ONLY: call_microphysics_at_all_substeps, cloud_physics, & … … 249 249 250 250 USE indices, & 251 ONLY: nxl, nxl u, nxr, nyn, nys, nysv, nzb_s_inner, nzb_u_inner,&252 nzb_ v_inner, nzb_w_inner, nzt251 ONLY: nxl, nxlg, nxlu, nxr, nxrg, nyn, nyng, nys, nysg, nysv, & 252 nzb_s_inner, nzb_u_inner, nzb_v_inner, nzb_w_inner, nzt 253 253 254 254 USE advec_ws, & … … 287 287 USE calc_radiation_mod, & 288 288 ONLY: calc_radiation 289 289 290 290 USE coriolis_mod, & 291 291 ONLY: coriolis … … 370 370 !> (Optimized to avoid cache missings, i.e. for Power4/5-architectures.) 371 371 !------------------------------------------------------------------------------! 372 372 373 373 SUBROUTINE prognostic_equations_cache 374 374 … … 382 382 INTEGER(iwp) :: omp_get_thread_num !< 383 383 INTEGER(iwp) :: tn = 0 !< 384 384 385 385 LOGICAL :: loop_start !< 386 386 … … 394 394 !$OMP PARALLEL private (i,i_omp_start,j,k,loop_start,tn) 395 395 396 !$ tn = omp_get_thread_num() 396 !$ tn = omp_get_thread_num() 397 397 loop_start = .TRUE. 398 398 !$OMP DO 399 400 ! 401 !-- If required, calculate cloud microphysics 402 IF ( cloud_physics .AND. .NOT. microphysics_sat_adjust .AND. & 403 ( intermediate_timestep_count == 1 .OR. & 404 call_microphysics_at_all_substeps ) & 405 ) THEN 406 DO i = nxlg, nxrg 407 DO j = nysg, nyng 408 CALL microphysics_control( i, j ) 409 END DO 410 END DO 411 ENDIF 412 399 413 DO i = nxl, nxr 400 414 … … 404 418 IF ( loop_start ) THEN 405 419 loop_start = .FALSE. 406 i_omp_start = i 420 i_omp_start = i 407 421 ENDIF 408 422 409 423 DO j = nys, nyn 410 !411 !-- If required, calculate cloud microphysics412 IF ( cloud_physics .AND. .NOT. microphysics_sat_adjust .AND. &413 ( intermediate_timestep_count == 1 .OR. &414 call_microphysics_at_all_substeps ) &415 ) THEN416 CALL microphysics_control( i, j )417 ENDIF418 424 ! 419 425 !-- Tendency terms for u-velocity component … … 424 430 IF ( ws_scheme_mom ) THEN 425 431 CALL advec_u_ws( i, j, i_omp_start, tn ) 426 ELSE 432 ELSE 427 433 CALL advec_u_pw( i, j ) 428 ENDIF 434 ENDIF 429 435 ELSE 430 436 CALL advec_u_up( i, j ) … … 490 496 IF ( ws_scheme_mom ) THEN 491 497 CALL advec_v_ws( i, j, i_omp_start, tn ) 492 ELSE 498 ELSE 493 499 CALL advec_v_pw( i, j ) 494 500 ENDIF … … 501 507 ! 502 508 !-- Drag by plant canopy 503 IF ( plant_canopy ) CALL pcm_tendency( i, j, 2 ) 509 IF ( plant_canopy ) CALL pcm_tendency( i, j, 2 ) 504 510 505 511 ! … … 551 557 IF ( ws_scheme_mom ) THEN 552 558 CALL advec_w_ws( i, j, i_omp_start, tn ) 553 ELSE 559 ELSE 554 560 CALL advec_w_pw( i, j ) 555 561 END IF … … 646 652 IF ( large_scale_forcing ) THEN 647 653 CALL ls_advec( i, j, simulated_time, 'pt' ) 648 ENDIF 654 ENDIF 649 655 650 656 ! 651 657 !-- Nudging 652 IF ( nudging ) CALL nudge( i, j, simulated_time, 'pt' ) 658 IF ( nudging ) CALL nudge( i, j, simulated_time, 'pt' ) 653 659 654 660 ! … … 708 714 CALL advec_s_ws( i, j, sa, 'sa', flux_s_sa, & 709 715 diss_s_sa, flux_l_sa, diss_l_sa, i_omp_start, tn ) 710 ELSE 716 ELSE 711 717 CALL advec_s_pw( i, j, sa ) 712 718 ENDIF … … 760 766 THEN 761 767 IF ( ws_scheme_sca ) THEN 762 CALL advec_s_ws( i, j, q, 'q', flux_s_q, & 768 CALL advec_s_ws( i, j, q, 'q', flux_s_q, & 763 769 diss_s_q, flux_l_q, diss_l_q, i_omp_start, tn ) 764 ELSE 770 ELSE 765 771 CALL advec_s_pw( i, j, q ) 766 772 ENDIF … … 782 788 ! 783 789 !-- Nudging 784 IF ( nudging ) CALL nudge( i, j, simulated_time, 'q' ) 790 IF ( nudging ) CALL nudge( i, j, simulated_time, 'q' ) 785 791 786 792 ! … … 820 826 821 827 ! 822 !-- If required, calculate prognostic equations for rain water content 828 !-- If required, calculate prognostic equations for rain water content 823 829 !-- and rain drop concentration 824 830 IF ( cloud_physics .AND. microphysics_seifert ) THEN … … 829 835 THEN 830 836 IF ( ws_scheme_sca ) THEN 831 CALL advec_s_ws( i, j, qr, 'qr', flux_s_qr, & 837 CALL advec_s_ws( i, j, qr, 'qr', flux_s_qr, & 832 838 diss_s_qr, flux_l_qr, diss_l_qr, & 833 839 i_omp_start, tn ) 834 ELSE 840 ELSE 835 841 CALL advec_s_pw( i, j, qr ) 836 842 ENDIF … … 869 875 IF ( timestep_scheme(1:5) == 'runge' ) THEN 870 876 IF ( ws_scheme_sca ) THEN 871 CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr, & 877 CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr, & 872 878 diss_s_nr, flux_l_nr, diss_l_nr, & 873 879 i_omp_start, tn ) 874 ELSE 880 ELSE 875 881 CALL advec_s_pw( i, j, nr ) 876 882 ENDIF … … 907 913 908 914 ENDIF 909 915 910 916 ! 911 917 !-- If required, compute prognostic equation for scalar … … 917 923 THEN 918 924 IF ( ws_scheme_sca ) THEN 919 CALL advec_s_ws( i, j, s, 's', flux_s_s, & 925 CALL advec_s_ws( i, j, s, 's', flux_s_s, & 920 926 diss_s_s, flux_l_s, diss_l_s, i_omp_start, tn ) 921 ELSE 927 ELSE 922 928 CALL advec_s_pw( i, j, s ) 923 929 ENDIF … … 939 945 ! 940 946 !-- Nudging, still need to be extended for scalars 941 ! IF ( nudging ) CALL nudge( i, j, simulated_time, 's' ) 947 ! IF ( nudging ) CALL nudge( i, j, simulated_time, 's' ) 942 948 943 949 ! 944 950 !-- If required compute influence of large-scale subsidence/ascent. 945 !-- Note, the last argument is of no meaning in this case, as it is 946 !-- only used in conjunction with large_scale_forcing, which is to 951 !-- Note, the last argument is of no meaning in this case, as it is 952 !-- only used in conjunction with large_scale_forcing, which is to 947 953 !-- date not implemented for scalars. 948 954 IF ( large_scale_subsidence .AND. & … … 980 986 ENDIF 981 987 982 ENDIF 983 ! 984 !-- If required, compute prognostic equation for turbulent kinetic 988 ENDIF 989 ! 990 !-- If required, compute prognostic equation for turbulent kinetic 985 991 !-- energy (TKE) 986 992 IF ( .NOT. constant_diffusion ) THEN … … 990 996 tend(:,j,i) = 0.0_wp 991 997 IF ( timestep_scheme(1:5) == 'runge' & 992 .AND. .NOT. use_upstream_for_tke ) THEN 998 .AND. .NOT. use_upstream_for_tke ) THEN 993 999 IF ( ws_scheme_sca ) THEN 994 1000 CALL advec_s_ws( i, j, e, 'e', flux_s_e, diss_s_e, & … … 1013 1019 ! 1014 1020 !-- Additional sink term for flows through plant canopies 1015 IF ( plant_canopy ) CALL pcm_tendency( i, j, 6 ) 1021 IF ( plant_canopy ) CALL pcm_tendency( i, j, 6 ) 1016 1022 1017 1023 CALL user_actions( i, j, 'e-tendency' ) … … 1061 1067 !> Version for vector machines 1062 1068 !------------------------------------------------------------------------------! 1063 1069 1064 1070 SUBROUTINE prognostic_equations_vector 1065 1071 … … 1176 1182 IF ( ws_scheme_mom ) THEN 1177 1183 CALL advec_v_ws 1178 ELSE 1184 ELSE 1179 1185 CALL advec_v_pw 1180 1186 END IF … … 1389 1395 ! 1390 1396 !-- Nudging 1391 IF ( nudging ) CALL nudge( simulated_time, 'pt' ) 1397 IF ( nudging ) CALL nudge( simulated_time, 'pt' ) 1392 1398 1393 1399 ! … … 1485 1491 1486 1492 CALL diffusion_s( sa, saswsb, saswst, wall_salinityflux ) 1487 1493 1488 1494 CALL user_actions( 'sa-tendency' ) 1489 1495 … … 1573 1579 1574 1580 CALL diffusion_s( q, qsws, qswst, wall_qflux ) 1575 1581 1576 1582 ! 1577 1583 !-- Sink or source of humidity due to canopy elements … … 1586 1592 ! 1587 1593 !-- Nudging 1588 IF ( nudging ) CALL nudge( simulated_time, 'q' ) 1594 IF ( nudging ) CALL nudge( simulated_time, 'q' ) 1589 1595 1590 1596 ! … … 1637 1643 1638 1644 ! 1639 !-- If required, calculate prognostic equations for rain water content 1645 !-- If required, calculate prognostic equations for rain water content 1640 1646 !-- and rain drop concentration 1641 1647 IF ( cloud_physics .AND. microphysics_seifert ) THEN … … 1675 1681 CALL diffusion_s( qr, qrsws, qrswst, wall_qrflux ) 1676 1682 1677 CALL user_actions( 'qr-tendency' )1678 1679 1683 ! 1680 1684 !-- Prognostic equation for rain water content … … 1828 1832 1829 1833 CALL diffusion_s( s, ssws, sswst, wall_sflux ) 1830 1834 1831 1835 ! 1832 1836 !-- Sink or source of humidity due to canopy elements … … 1841 1845 ! 1842 1846 !-- Nudging. Not implemented for scalars so far. 1843 ! IF ( nudging ) CALL nudge( simulated_time, 'q' ) 1847 ! IF ( nudging ) CALL nudge( simulated_time, 'q' ) 1844 1848 1845 1849 ! … … 1895 1899 ENDIF 1896 1900 ! 1897 !-- If required, compute prognostic equation for turbulent kinetic 1901 !-- If required, compute prognostic equation for turbulent kinetic 1898 1902 !-- energy (TKE) 1899 1903 IF ( .NOT. constant_diffusion ) THEN … … 1927 1931 IF ( ws_scheme_sca ) THEN 1928 1932 CALL advec_s_ws( e, 'e' ) 1929 ELSE 1933 ELSE 1930 1934 CALL advec_s_pw( e ) 1931 1935 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.