Changeset 3274 for palm


Ignore:
Timestamp:
Sep 24, 2018 3:42:55 PM (7 years ago)
Author:
knoop
Message:

Modularization of all bulk cloud physics code components

Location:
palm/trunk/SOURCE
Files:
2 added
4 deleted
58 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r3235 r3274  
    461461        advec_w_up.f90 \
    462462        average_3d_data.f90 \
     463        basic_constants_and_equations_mod.f90 \
    463464        boundary_conds.f90 \
    464465        buoyancy.f90 \
    465         calc_liquid_water_content.f90 \
    466466        calc_mean_profile.f90 \
    467467        calc_radiation.f90 \
     
    488488        data_output_tseries.f90 \
    489489        date_and_time_mod.f90 \
    490         diagnostic_quantities_mod.f90 \
    491490        diffusion_s.f90 \
    492491        diffusion_u.f90 \
     
    506505        init_3d_model.f90 \
    507506        init_advec.f90 \
    508         init_cloud_physics.f90 \
    509507        init_coupling.f90 \
    510508        init_dvrp.f90 \
     
    542540        lpm_write_restart_file.f90 \
    543541        message.f90 \
    544         microphysics_mod.f90 \
     542        bulk_cloud_model_mod.f90 \
    545543        model_1d_mod.f90 \
    546544        mod_kinds.f90 \
     
    691689        modules.o
    692690advec_ws.o: \
     691        bulk_cloud_model_mod.o \
    693692        mod_kinds.o \
    694693        modules.o
     
    700699        modules.o
    701700average_3d_data.o: \
     701        bulk_cloud_model_mod.o \
    702702        chemistry_model_mod.o \
    703703        cpulog_mod.o \
     
    710710        turbulence_closure_mod.o \
    711711        urban_surface_mod.o
     712basic_constants_and_equations_mod.o: \
     713        mod_kinds.o
    712714boundary_conds.o: \
     715        basic_constants_and_equations_mod.o \
     716        bulk_cloud_model_mod.o \
    713717        chemistry_model_mod.o \
    714718        mod_kinds.o \
     
    717721        surface_mod.o \
    718722        turbulence_closure_mod.o
     723bulk_cloud_model_mod.o: \
     724        basic_constants_and_equations_mod.o \
     725        cpulog_mod.o \
     726        mod_kinds.o \
     727        modules.o \
     728        surface_mod.o
    719729buoyancy.o: \
     730        basic_constants_and_equations_mod.o \
    720731        mod_kinds.o \
    721732        modules.o
     
    723734        mod_kinds.o \
    724735        modules.o
    725 calc_liquid_water_content.o: \
    726         diagnostic_quantities_mod.o \
    727         mod_kinds.o \
    728         modules.o
    729736calc_radiation.o: \
     737        basic_constants_and_equations_mod.o \
    730738        mod_kinds.o \
    731739        modules.o
     
    741749        posix_calls_from_fortran.o
    742750check_parameters.o: \
     751        basic_constants_and_equations_mod.o \
     752        bulk_cloud_model_mod.o \
    743753        chemistry_model_mod.o \
    744754        gust_mod.o \
    745755        land_surface_model_mod.o \
    746756        large_scale_forcing_nudging_mod.o \
    747         microphysics_mod.o \
    748757        model_1d_mod.o \
    749758        mod_kinds.o \
     
    778787        modules.o
    779788chem_photolysis_mod.o: \
     789        basic_constants_and_equations_mod.o \
    780790        chem_gasphase_mod.o \
    781791        chemistry_model_mod.o \
     
    788798        netcdf_interface_mod.o
    789799compute_vpt.o: \
     800        basic_constants_and_equations_mod.o \
     801        bulk_cloud_model_mod.o \
    790802        mod_kinds.o \
    791803        modules.o
     
    803815        modules.o
    804816data_output_dvrp.o: \
     817        basic_constants_and_equations_mod.o \
     818        bulk_cloud_model_mod.o \
    805819        cpulog_mod.o \
    806820        mod_kinds.o \
    807821        modules.o
    808822data_output_mask.o: \
     823        basic_constants_and_equations_mod.o \
     824        bulk_cloud_model_mod.o \
    809825        cpulog_mod.o \
    810826        mod_kinds.o \
     
    824840        netcdf_interface_mod.o
    825841data_output_spectra.o: \
     842        basic_constants_and_equations_mod.o \
    826843        cpulog_mod.o \
    827844        mod_kinds.o \
     
    841858        virtual_flight_mod.o
    842859data_output_2d.o: \
     860        basic_constants_and_equations_mod.o \
     861        bulk_cloud_model_mod.o \
    843862        cpulog_mod.o \
    844863        gust_mod.o \
     
    853872        uv_exposure_model_mod.o
    854873data_output_3d.o: \
     874        basic_constants_and_equations_mod.o \
     875        bulk_cloud_model_mod.o \
    855876        chemistry_model_mod.o \
    856877        cpulog_mod.o \
     
    866887        mod_kinds.o \
    867888        modules.o
    868 diagnostic_quantities_mod.o: \
    869         mod_kinds.o \
    870         modules.o
    871889diffusion_s.o: \
    872890        mod_kinds.o \
     
    916934        temperton_fft_mod.o
    917935flow_statistics.o: \
     936        basic_constants_and_equations_mod.o \
     937        bulk_cloud_model_mod.o \
    918938        cpulog_mod.o \
    919939        gust_mod.o \
     
    932952        modules.o
    933953header.o: \
     954        basic_constants_and_equations_mod.o \
     955        bulk_cloud_model_mod.o \
    934956        cpulog_mod.o \
    935957        date_and_time_mod.o \
     
    937959        land_surface_model_mod.o \
    938960        large_scale_forcing_nudging_mod.o \
    939         microphysics_mod.o \
    940961        model_1d_mod.o \
    941962        mod_kinds.o \
     
    956977init_3d_model.o: \
    957978        advec_ws.o \
     979        basic_constants_and_equations_mod.o \
     980        bulk_cloud_model_mod.o \
    958981        chemistry_model_mod.o \
    959982        cpulog_mod.o \
     
    963986        large_scale_forcing_nudging_mod.o \
    964987        lpm_init.o \
    965         microphysics_mod.o \
    966988        model_1d_mod.o \
    967989        mod_kinds.o \
     
    9871009        mod_kinds.o \
    9881010        modules.o
    989 init_cloud_physics.o: \
    990         mod_kinds.o \
    991         modules.o
    9921011init_coupling.o: \
    9931012        mod_kinds.o \
     
    10071026        vertical_nesting_mod.o
    10081027init_masks.o: \
     1028        bulk_cloud_model_mod.o \
    10091029        mod_kinds.o \
    10101030        modules.o \
    10111031        netcdf_interface_mod.o
    10121032init_ocean.o: \
     1033        basic_constants_and_equations_mod.o \
    10131034        eqn_state_seawater.o \
    10141035        mod_kinds.o \
     
    10241045        modules.o
    10251046init_rankine.o: \
     1047        basic_constants_and_equations_mod.o \
    10261048        mod_kinds.o \
    10271049        modules.o
    10281050init_slope.o: \
     1051        basic_constants_and_equations_mod.o \
    10291052        mod_kinds.o \
    10301053        modules.o
    10311054interaction_droplets_ptq.o: \
     1055        basic_constants_and_equations_mod.o \
    10321056        mod_kinds.o \
    10331057        modules.o
    10341058land_surface_model_mod.o: \
     1059        basic_constants_and_equations_mod.o \
     1060        bulk_cloud_model_mod.o \
    10351061        calc_mean_profile.o \
    1036         diagnostic_quantities_mod.o \
    10371062        mod_kinds.o \
    10381063        modules.o \
     
    10731098        pmc_particle_interface.o
    10741099lpm_advec.o: \
     1100        basic_constants_and_equations_mod.o \
    10751101        cpulog_mod.o \
    10761102        mod_kinds.o \
     
    10851111        surface_mod.o
    10861112lpm_calc_liquid_water_content.o: \
     1113        basic_constants_and_equations_mod.o \
    10871114        cpulog_mod.o \
    10881115        mod_kinds.o \
     
    10901117        modules.o
    10911118lpm_collision_kernels.o: \
     1119        basic_constants_and_equations_mod.o \
    10921120        cpulog_mod.o \
    10931121        mod_kinds.o \
     
    11021130        netcdf_interface_mod.o
    11031131lpm_droplet_collision.o: \
     1132        basic_constants_and_equations_mod.o \
    11041133        cpulog_mod.o \
    11051134        lpm_collision_kernels.o \
     
    11081137        modules.o
    11091138lpm_droplet_condensation.o: \
    1110         cpulog_mod.o \
    1111         diagnostic_quantities_mod.o \
     1139        basic_constants_and_equations_mod.o \
     1140        cpulog_mod.o \
    11121141        lpm_collision_kernels.o \
    11131142        mod_kinds.o \
     
    11221151        netcdf_interface_mod.o
    11231152lpm_init.o: \
    1124         diagnostic_quantities_mod.o \
     1153        basic_constants_and_equations_mod.o \
    11251154        lpm_collision_kernels.o \
    11261155        lpm_exchange_horiz.o \
     
    11601189        modules.o
    11611190lpm_splitting.o: \
     1191        basic_constants_and_equations_mod.o \
    11621192        cpulog_mod.o \
    11631193        lpm_exchange_horiz.o \
     
    11781208        modules.o \
    11791209        pmc_interface_mod.o
    1180 microphysics_mod.o: \
    1181         cpulog_mod.o \
    1182         diagnostic_quantities_mod.o \
    1183         mod_kinds.o \
    1184         modules.o \
    1185         surface_mod.o
    11861210model_1d_mod.o: \
     1211        basic_constants_and_equations_mod.o \
    11871212        mod_kinds.o \
    11881213        modules.o
     
    11901215        mod_kinds.o
    11911216multi_agent_system_mod.o: \
     1217        basic_constants_and_equations_mod.o \
    11921218        chemistry_model_mod.o \
    11931219        cpulog_mod.o \
     
    12061232        surface_mod.o
    12071233netcdf_interface_mod.o: \
     1234        basic_constants_and_equations_mod.o \
    12081235        chemistry_model_mod.o \
    12091236        gust_mod.o \
     
    12251252        modules.o
    12261253palm.o: \
     1254        bulk_cloud_model_mod.o \
    12271255        chemistry_model_mod.o \
    12281256        chem_photolysis_mod.o \
     
    12381266        write_restart_data_mod.o
    12391267parin.o: \
     1268        bulk_cloud_model_mod.o \
    12401269        chemistry_model_mod.o \
    12411270        chem_modules.o \
     
    12441273        gust_mod.o \
    12451274        land_surface_model_mod.o \
    1246         microphysics_mod.o \
    12471275        model_1d_mod.o \
    12481276        mod_kinds.o \
     
    12631291        wind_turbine_model_mod.o
    12641292plant_canopy_model_mod.o: \
     1293        bulk_cloud_model_mod.o \
    12651294        mod_kinds.o \
    12661295        modules.o \
     
    12761305        pmc_parent_mod.o
    12771306pmc_interface_mod.o: \
     1307        bulk_cloud_model_mod.o \
    12781308        chemistry_model_mod.o \
    12791309        chem_modules.o \
     
    13441374        advec_ws.o \
    13451375        advec_w_up.o \
     1376        bulk_cloud_model_mod.o \
    13461377        buoyancy.o \
    13471378        calc_radiation.o \
     
    13581389        eqn_state_seawater.o \
    13591390        large_scale_forcing_nudging_mod.o \
    1360         microphysics_mod.o \
    13611391        mod_kinds.o \
    13621392        mod_kinds.o \
     
    13751405        modules.o
    13761406radiation_model_mod.o: \
     1407        basic_constants_and_equations_mod.o \
     1408        bulk_cloud_model_mod.o \
    13771409        calc_mean_profile.o \
    13781410        date_and_time_mod.o \
    1379         microphysics_mod.o \
    13801411        mod_particle_attributes.o \
    13811412        modules.o \
     
    13931424        modules.o
    13941425read_restart_data_mod.o: \
     1426        bulk_cloud_model_mod.o \
    13951427        chemistry_model_mod.o \
    13961428        cpulog_mod.o \
     
    13981430        gust_mod.o \
    13991431        land_surface_model_mod.o \
    1400         microphysics_mod.o \
    14011432        modules.o \
    14021433        mod_kinds.o \
     
    14351466        modules.o
    14361467sum_up_3d_data.o: \
     1468        basic_constants_and_equations_mod.o \
     1469        bulk_cloud_model_mod.o \
    14371470        chemistry_model_mod.o \
    14381471        cpulog_mod.o \
     
    14471480        uv_exposure_model_mod.o
    14481481surface_coupler.o: \
     1482        basic_constants_and_equations_mod.o \
    14491483        cpulog_mod.o \
    14501484        mod_kinds.o \
     
    14521486        surface_mod.o
    14531487surface_layer_fluxes_mod.o: \
     1488        basic_constants_and_equations_mod.o \
     1489        bulk_cloud_model_mod.o \
    14541490        chem_modules.o \
    14551491        exchange_horiz_2d.o \
     
    14651501        modules.o
    14661502swap_timelevel.o: \
     1503        bulk_cloud_model_mod.o \
    14671504        chemistry_model_mod.o \
    14681505        cpulog_mod.o \
     
    14751512        urban_surface_mod.o
    14761513synthetic_turbulence_generator_mod.o: \
     1514        basic_constants_and_equations_mod.o \
    14771515        cpulog_mod.o \
    14781516        mod_kinds.o \
     
    14841522time_integration.o: \
    14851523        advec_ws.o \
     1524        bulk_cloud_model_mod.o \
    14861525        buoyancy.o \
    14871526        calc_mean_profile.o \
     
    14961535        large_scale_forcing_nudging_mod.o \
    14971536        lpm.o \
    1498         microphysics_mod.o \
    14991537        mod_kinds.o \
    15001538        modules.o \
     
    15161554        wind_turbine_model_mod.o
    15171555time_integration_spinup.o: \
     1556        basic_constants_and_equations_mod.o \
    15181557        cpulog_mod.o \
    15191558        date_and_time_mod.o \
     
    15281567        mod_kinds.o
    15291568timestep.o: \
    1530         cpulog_mod.o \
    1531         microphysics_mod.o \
     1569        bulk_cloud_model_mod.o \
     1570        cpulog_mod.o \
    15321571        mod_kinds.o \
    15331572        modules.o \
     
    15421581        modules.o
    15431582tridia_solver_mod.o: \
     1583        basic_constants_and_equations_mod.o \
    15441584        mod_kinds.o \
    15451585        modules.o
     
    15491589        advec_s_up.o \
    15501590        advec_ws.o \
    1551         cpulog_mod.o \
    1552         microphysics_mod.o \
     1591        basic_constants_and_equations_mod.o \
     1592        bulk_cloud_model_mod.o \
     1593        cpulog_mod.o \
    15531594        mod_kinds.o \
    15541595        mod_particle_attributes.o \
     
    15601601        user_actions.o
    15611602urban_surface_mod.o: \
     1603        basic_constants_and_equations_mod.o \
    15621604        date_and_time_mod.o \
    15631605        mod_kinds.o \
     
    17061748        user_module.o
    17071749uv_exposure_model_mod.o: \
     1750        basic_constants_and_equations_mod.o \
    17081751        date_and_time_mod.o \
    17091752        mod_kinds.o \
     
    17161759        turbulence_closure_mod.o
    17171760virtual_flight_mod.o: \
     1761        basic_constants_and_equations_mod.o \
     1762        bulk_cloud_model_mod.o \
    17181763        cpulog_mod.o \
    17191764        mod_kinds.o \
     
    17231768        user_init_flight.o
    17241769wind_turbine_model_mod.o: \
     1770        basic_constants_and_equations_mod.o \
    17251771        cpulog_mod.o \
    17261772        mod_kinds.o \
     
    17291775        mod_kinds.o
    17301776write_restart_data_mod.o: \
     1777        bulk_cloud_model_mod.o \
    17311778        chemistry_model_mod.o \
    17321779        date_and_time_mod.o \
    17331780        gust_mod.o \
    17341781        land_surface_model_mod.o \
    1735         microphysics_mod.o \
    17361782        mod_kinds.o \
    17371783        mod_particle_attributes.o \
  • palm/trunk/SOURCE/advec_ws.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    219222 MODULE advec_ws
    220223
    221  
     224    USE kinds
     225
     226    IMPLICIT NONE
     227
     228    REAL(wp) ::  adv_mom_1            !< 1/4 - constant used in 5th-order advection scheme for momentum advection (1st-order part)
     229    REAL(wp) ::  adv_mom_3            !< 1/24 - constant used in 5th-order advection scheme for momentum advection (3rd-order part)
     230    REAL(wp) ::  adv_mom_5            !< 1/120 - constant used in 5th-order advection scheme for momentum advection (5th-order part)
     231    REAL(wp) ::  adv_sca_1            !< 1/2 - constant used in 5th-order advection scheme for scalar advection (1st-order part)
     232    REAL(wp) ::  adv_sca_3            !< 1/12 - constant used in 5th-order advection scheme for scalar advection (3rd-order part)
     233    REAL(wp) ::  adv_sca_5            !< 1/60 - constant used in 5th-order advection scheme for scalar advection (5th-order part)
    222234
    223235    PRIVATE
     
    280292                  flux_s_v, flux_s_w
    281293
    282        USE constants,                                                          &
    283            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5, adv_sca_1, adv_sca_3,       &
    284                   adv_sca_5
    285 
    286294       USE control_parameters,                                                 &
    287            ONLY:  cloud_physics, humidity, loop_optimization,                  &
    288                   passive_scalar, microphysics_morrison, microphysics_seifert, &
    289                   ocean, rans_tke_e, ws_scheme_mom, ws_scheme_sca
     295           ONLY:  humidity, loop_optimization, passive_scalar, ocean,          &
     296                  rans_tke_e, ws_scheme_mom, ws_scheme_sca
    290297
    291298       USE indices,                                                            &
     
    293300
    294301       USE kinds
    295        
     302
     303       USE bulk_cloud_model_mod,                                               &
     304           ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
     305
    296306       USE pegrid
    297307
     
    345355          ENDIF
    346356
    347           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     357          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    348358             ALLOCATE( sums_wsqcs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    349359             ALLOCATE( sums_wsncs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     
    352362          ENDIF
    353363
    354           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     364          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    355365             ALLOCATE( sums_wsqrs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    356366             ALLOCATE( sums_wsnrs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     
    422432             ENDIF
    423433
    424              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     434             IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    425435                ALLOCATE( flux_s_qc(nzb+1:nzt,0:threads_per_task-1),           &
    426436                          diss_s_qc(nzb+1:nzt,0:threads_per_task-1),           &
     
    433443             ENDIF                 
    434444
    435              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     445             IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    436446                ALLOCATE( flux_s_qr(nzb+1:nzt,0:threads_per_task-1),           &
    437447                          diss_s_qr(nzb+1:nzt,0:threads_per_task-1),           &
     
    10741084   
    10751085       USE control_parameters,                                                 &
    1076            ONLY:  cloud_physics, humidity, passive_scalar, ocean,              &
    1077                   microphysics_morrison, microphysics_seifert, ws_scheme_mom,  &
    1078                   ws_scheme_sca
     1086           ONLY:  humidity, passive_scalar, ocean, ws_scheme_mom, ws_scheme_sca
    10791087
    10801088       USE kinds
     1089
     1090       USE bulk_cloud_model_mod,                                               &
     1091           ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    10811092
    10821093       USE statistics,                                                         &
     
    11041115          IF ( humidity       )  sums_wsqs_ws_l = 0.0_wp
    11051116          IF ( passive_scalar )  sums_wsss_ws_l = 0.0_wp
    1106           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     1117          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    11071118             sums_wsqcs_ws_l = 0.0_wp
    11081119             sums_wsncs_ws_l = 0.0_wp
    11091120          ENDIF
    1110           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     1121          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    11111122             sums_wsqrs_ws_l = 0.0_wp
    11121123             sums_wsnrs_ws_l = 0.0_wp
     
    11301141       USE arrays_3d,                                                          &
    11311142           ONLY:  ddzw, drho_air, tend, u, v, w, rho_air_zw
    1132 
    1133        USE constants,                                                          &
    1134            ONLY:  adv_sca_1, adv_sca_3, adv_sca_5
    11351143
    11361144       USE control_parameters,                                                 &
     
    17041712                  drho_air, rho_air_zw
    17051713
    1706        USE constants,                                                         &
    1707            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    1708 
    17091714       USE control_parameters,                                                &
    17101715           ONLY:  intermediate_timestep_count, u_gtrans, v_gtrans
     
    22022207                  drho_air, rho_air_zw
    22032208
    2204        USE constants,                                                          &
    2205            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    2206 
    22072209       USE control_parameters,                                                 &
    22082210           ONLY:  intermediate_timestep_count, u_gtrans, v_gtrans
     
    27072709                  drho_air_zw, rho_air
    27082710
    2709        USE constants,                                                         &
    2710            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    2711 
    27122711       USE control_parameters,                                                &
    27132712           ONLY:  intermediate_timestep_count, u_gtrans, v_gtrans
     
    31843183       USE arrays_3d,                                                         &
    31853184           ONLY:  ddzw, drho_air, tend, u, v, w, rho_air_zw
    3186 
    3187        USE constants,                                                         &
    3188            ONLY:  adv_sca_1, adv_sca_3, adv_sca_5
    31893185
    31903186       USE control_parameters,                                                &
     
    37403736           ONLY:  ddzw, drho_air, tend, u, v, w, rho_air_zw
    37413737
    3742        USE constants,                                                          &
    3743            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    3744 
    37453738       USE control_parameters,                                                 &
    37463739           ONLY:  intermediate_timestep_count, u_gtrans, v_gtrans
     
    42344227           ONLY:  ddzw, drho_air, tend, u, v, w, rho_air_zw
    42354228
    4236        USE constants,                                                          &
    4237            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    4238 
    42394229       USE control_parameters,                                                 &
    42404230           ONLY:  intermediate_timestep_count, u_gtrans, v_gtrans
     
    47384728       USE arrays_3d,                                                          &
    47394729           ONLY:  ddzu, drho_air_zw, tend, u, v, w, rho_air
    4740 
    4741        USE constants,                                                          &
    4742            ONLY:  adv_mom_1, adv_mom_3, adv_mom_5
    47434730
    47444731       USE control_parameters,                                                 &
  • palm/trunk/SOURCE/average_3d_data.f90

    r3004 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3004 2018-04-27 12:33:25Z Giersch
    2730! Further allocation checks implemented, case z0q* added
    2831!
     
    138141    USE averaging
    139142
     143    USE bulk_cloud_model_mod,                                                  &
     144        ONLY:  bulk_cloud_model, bcm_3d_data_averaging
     145
    140146    USE chemistry_model_mod,                                                   &
    141147        ONLY:  chem_3d_data_averaging
     
    255261             ENDIF
    256262
    257           CASE ( 'nc' )
    258              IF ( ALLOCATED( nc_av ) ) THEN
    259                 DO  i = nxlg, nxrg
    260                    DO  j = nysg, nyng
    261                       DO  k = nzb, nzt+1
    262                          nc_av(k,j,i) = nc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    263                       ENDDO
    264                    ENDDO
    265                 ENDDO
    266              ENDIF
    267 
    268           CASE ( 'nr' )
    269              IF ( ALLOCATED( nr_av ) ) THEN
    270                 DO  i = nxlg, nxrg
    271                    DO  j = nysg, nyng
    272                       DO  k = nzb, nzt+1
    273                          nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    274                       ENDDO
    275                    ENDDO
    276                 ENDDO
    277              ENDIF
    278 
    279263         CASE ( 'ol*' )
    280264             IF ( ALLOCATED( ol_av ) ) THEN
     
    320304             ENDIF
    321305
    322           CASE ( 'prr' )
    323              IF ( ALLOCATED( prr_av ) ) THEN
    324                 DO  i = nxlg, nxrg
    325                    DO  j = nysg, nyng
    326                       DO  k = nzb, nzt+1
    327                          prr_av(k,j,i) = prr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    328                       ENDDO
    329                    ENDDO
    330                 ENDDO
    331              ENDIF
    332 
    333306          CASE ( 'pt' )
    334307             IF ( ALLOCATED( pt_av ) ) THEN
     
    353326             ENDIF
    354327
    355           CASE ( 'qc' )
    356              IF ( ALLOCATED( qc_av ) ) THEN
    357                 DO  i = nxlg, nxrg
    358                    DO  j = nysg, nyng
    359                       DO  k = nzb, nzt+1
    360                          qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    361                       ENDDO
    362                    ENDDO
    363                 ENDDO
    364              ENDIF
    365 
    366328          CASE ( 'ql' )
    367329             IF ( ALLOCATED( ql_av ) ) THEN
     
    404366                         ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
    405367                                           REAL( average_count_3d, KIND=wp )
    406                       ENDDO
    407                    ENDDO
    408                 ENDDO
    409              ENDIF
    410 
    411           CASE ( 'qr' )
    412              IF ( ALLOCATED( qr_av ) ) THEN
    413                 DO  i = nxlg, nxrg
    414                    DO  j = nysg, nyng
    415                       DO  k = nzb, nzt+1
    416                          qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    417368                      ENDDO
    418369                   ENDDO
     
    607558!--          Turbulence closure module
    608559             CALL tcm_3d_data_averaging( 'average', doav(ii) )
    609 
     560!
     561!--          microphysics module quantities
     562             IF ( bulk_cloud_model )  THEN
     563                CALL bcm_3d_data_averaging( 'average', doav(ii) )
     564             ENDIF
    610565!
    611566!--          Land surface quantity
  • palm/trunk/SOURCE/boundary_conds.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    197200               w, w_p, w_m_l, w_m_n, w_m_r, w_m_s
    198201
     202    USE basic_constants_and_equations_mod,                                     &
     203        ONLY:  kappa
     204
    199205    USE chemistry_model_mod,                                                   &
    200206        ONLY:  chem_boundary_conds
     
    204210               bc_dirichlet_s, bc_radiation_l, bc_radiation_n, bc_radiation_r, &
    205211               bc_radiation_s, bc_pt_t_val, bc_q_t_val, bc_s_t_val,            &
    206                child_domain, constant_diffusion, cloud_physics, coupling_mode, &
     212               child_domain, constant_diffusion, coupling_mode, &
    207213               dt_3d, humidity, ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, ibc_s_b, &
    208214               ibc_s_t,ibc_sa_t, ibc_uv_b, ibc_uv_t,                           &
    209                intermediate_timestep_count, kappa,                             &
    210                microphysics_morrison, microphysics_seifert,                    &
     215               intermediate_timestep_count,                                    &
    211216               nesting_offline, nudging,                                       &
    212217               ocean, passive_scalar, rans_mode, rans_tke_e, tsc, use_cmax
     
    220225
    221226    USE kinds
     227
     228    USE bulk_cloud_model_mod,                                                  &
     229        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    222230
    223231    USE pegrid
     
    597605       ENDIF
    598606
    599        IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     607       IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    600608!             
    601609!--       Surface conditions cloud water (Dirichlet)
     
    618626       ENDIF
    619627
    620        IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     628       IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    621629!             
    622630!--       Surface conditions rain water (Dirichlet)
     
    736744       IF ( humidity )  THEN
    737745          q_p(:,nys-1,:) = q_p(:,nys,:)
    738           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     746          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    739747             qc_p(:,nys-1,:) = qc_p(:,nys,:)
    740748             nc_p(:,nys-1,:) = nc_p(:,nys,:)
    741749          ENDIF
    742           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     750          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    743751             qr_p(:,nys-1,:) = qr_p(:,nys,:)
    744752             nr_p(:,nys-1,:) = nr_p(:,nys,:)
     
    752760       IF ( humidity )  THEN
    753761          q_p(:,nyn+1,:) = q_p(:,nyn,:)
    754           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     762          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    755763             qc_p(:,nyn+1,:) = qc_p(:,nyn,:)
    756764             nc_p(:,nyn+1,:) = nc_p(:,nyn,:)
    757765          ENDIF
    758           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     766          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    759767             qr_p(:,nyn+1,:) = qr_p(:,nyn,:)
    760768             nr_p(:,nyn+1,:) = nr_p(:,nyn,:)
     
    768776       IF ( humidity )  THEN
    769777          q_p(:,:,nxl-1) = q_p(:,:,nxl)
    770           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     778          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    771779             qc_p(:,:,nxl-1) = qc_p(:,:,nxl)
    772780             nc_p(:,:,nxl-1) = nc_p(:,:,nxl)
    773781          ENDIF
    774           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     782          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    775783             qr_p(:,:,nxl-1) = qr_p(:,:,nxl)
    776784             nr_p(:,:,nxl-1) = nr_p(:,:,nxl)
     
    784792       IF ( humidity )  THEN
    785793          q_p(:,:,nxr+1) = q_p(:,:,nxr)
    786           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     794          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    787795             qc_p(:,:,nxr+1) = qc_p(:,:,nxr)
    788796             nc_p(:,:,nxr+1) = nc_p(:,:,nxr)
    789797          ENDIF
    790           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     798          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    791799             qr_p(:,:,nxr+1) = qr_p(:,:,nxr)
    792800             nr_p(:,:,nxr+1) = nr_p(:,:,nxr)
  • palm/trunk/SOURCE/buoyancy.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused Variable removed
    2831!
     
    114117!------------------------------------------------------------------------------!
    115118 MODULE buoyancy_mod
    116  
     119
     120    USE basic_constants_and_equations_mod,                                     &
     121        ONLY:  g
    117122
    118123    PRIVATE
     
    138143
    139144       USE control_parameters,                                                 &
    140            ONLY:  atmos_ocean_sign, cos_alpha_surface, g, message_string,      &
     145           ONLY:  atmos_ocean_sign, cos_alpha_surface, message_string,         &
    141146                  pt_surface, sin_alpha_surface, sloping_surface
    142147
     
    244249
    245250       USE control_parameters,                                                 &
    246            ONLY:  atmos_ocean_sign, cos_alpha_surface, g, message_string,      &
     251           ONLY:  atmos_ocean_sign, cos_alpha_surface, message_string,         &
    247252                  pt_surface, sin_alpha_surface, sloping_surface
    248253
  • palm/trunk/SOURCE/calc_radiation.f90

    r2718 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    7780 MODULE calc_radiation_mod
    7881 
     82
     83    USE arrays_3d,                                                             &
     84        ONLY:  dzw, pt, ql, tend, d_exner, exner
     85
     86    USE basic_constants_and_equations_mod,                                     &
     87        ONLY:  c_p, lv_d_cp, sigma_sb
     88
     89    USE control_parameters,                                                    &
     90        ONLY:  rho_surface
     91
     92    USE indices,                                                               &
     93        ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
     94
    7995    USE kinds
    80    
     96
     97    USE pegrid
     98
    8199    PRIVATE
    82100    PUBLIC calc_radiation
    83    
     101
    84102    LOGICAL, SAVE ::  first_call = .TRUE. !<
    85     REAL(wp), SAVE ::  sigma = 5.67E-08_wp   !<
    86103
    87104    REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::  lwp_ground         !<
     
    103120!------------------------------------------------------------------------------!
    104121    SUBROUTINE calc_radiation
    105 
    106        USE arrays_3d,                                                          &
    107            ONLY:  dzw, pt, ql, tend
    108 
    109        USE cloud_parameters,                                                   &
    110            ONLY:  cp, l_d_cp, pt_d_t, t_d_pt
    111 
    112        USE control_parameters,                                                 &
    113            ONLY:  rho_surface
    114 
    115        USE indices,                                                            &
    116            ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
    117 
    118        USE kinds
    119 
    120        USE pegrid
    121 
    122122
    123123       IMPLICIT NONE
     
    159159             lwp_top(nzt+1)  = rho_surface * ql(nzt+1,j,i) * dzw(nzt+1)
    160160
    161              temperature     = pt(nzb,j,i) * t_d_pt(nzb) + l_d_cp * ql(nzb,j,i)
    162              blackbody_emission(nzb) = sigma * temperature**4
     161             temperature     = pt(nzb,j,i) * exner(nzb) + lv_d_cp * ql(nzb,j,i)
     162             blackbody_emission(nzb) = sigma_sb * temperature**4
    163163
    164164             DO  k = nzb+1, nzt
     
    171171                                  rho_surface * ql(k_help,j,i) * dzw(k_help)
    172172
    173                 temperature     = pt(k,j,i) * t_d_pt(k) + l_d_cp * ql(k,j,i)
    174                 blackbody_emission(k) = sigma * temperature**4                 &
     173                temperature     = pt(k,j,i) * exner(k) + lv_d_cp * ql(k,j,i)
     174                blackbody_emission(k) = sigma_sb * temperature**4              &
    175175                                      * MERGE( 1.0_wp, 0.0_wp,                 &
    176176                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     
    182182             lwp_top(nzb)      = lwp_top(nzb+1)
    183183
    184              temperature       = pt(nzt+1,j,i) * t_d_pt(nzt+1) + l_d_cp *      &
     184             temperature       = pt(nzt+1,j,i) * exner(nzt+1) + lv_d_cp *      &
    185185                                 ql(nzt+1,j,i)
    186              blackbody_emission(nzt+1) = sigma * temperature**4
     186             blackbody_emission(nzt+1) = sigma_sb * temperature**4
    187187
    188188!
     
    232232!--                Compute tendency term         
    233233                   tend(k,j,i) = tend(k,j,i) -                                 &
    234                                 ( pt_d_t(k) / ( rho_surface * cp ) *           &
     234                                ( d_exner(k) / ( rho_surface * c_p ) *         &
    235235                                  ( df_p - df_m ) / dzw(k) )                   &
    236236                                      * MERGE( 1.0_wp, 0.0_wp,                 &
     
    253253    SUBROUTINE calc_radiation_ij( i, j )
    254254
    255        USE arrays_3d,                                                          &
    256            ONLY:  dzw, pt, ql, tend
    257 
    258        USE cloud_parameters,                                                   &
    259            ONLY:  cp, l_d_cp, pt_d_t, t_d_pt
    260 
    261        USE control_parameters,                                                 &
    262            ONLY:  rho_surface
    263 
    264        USE indices,                                                            &
    265            ONLY:  nzb, nzt, wall_flags_0
    266 
    267        USE kinds
    268 
    269        USE pegrid
    270 
    271    
    272255       IMPLICIT NONE
    273256
     
    305288       lwp_top(nzt+1)  = rho_surface * ql(nzt+1,j,i) * dzw(nzt+1)
    306289
    307        temperature     = pt(nzb,j,i) * t_d_pt(nzb) + l_d_cp * ql(nzb,j,i)
    308        blackbody_emission(nzb) = sigma * temperature**4
     290       temperature     = pt(nzb,j,i) * exner(nzb) + lv_d_cp * ql(nzb,j,i)
     291       blackbody_emission(nzb) = sigma_sb * temperature**4
    309292
    310293       DO  k = nzb+1, nzt
     
    315298                            rho_surface * ql(k_help,j,i) * dzw(k_help)
    316299
    317           temperature     = pt(k,j,i) * t_d_pt(k) + l_d_cp * ql(k,j,i)
    318           blackbody_emission(k) = sigma * temperature**4                       &
     300          temperature     = pt(k,j,i) * exner(k) + lv_d_cp * ql(k,j,i)
     301          blackbody_emission(k) = sigma_sb * temperature**4                    &
    319302                                      * MERGE( 1.0_wp, 0.0_wp,                 &
    320303                                               BTEST( wall_flags_0(k,j,i), 0 ) )
     
    325308       lwp_top(nzb)      = lwp_top(nzb+1)
    326309
    327        temperature       = pt(nzt+1,j,i) * t_d_pt(nzt+1) + l_d_cp *            &
     310       temperature       = pt(nzt+1,j,i) * exner(nzt+1) + lv_d_cp *            &
    328311                           ql(nzt+1,j,i)
    329        blackbody_emission(nzt+1) = sigma * temperature**4
     312       blackbody_emission(nzt+1) = sigma_sb * temperature**4
    330313
    331314!
     
    370353!
    371354!--          Compute tendency term         
    372              tend(k,j,i) = tend(k,j,i) - ( pt_d_t(k) / ( rho_surface * cp ) *  &
    373                                          ( df_p - df_m ) / dzw(k) )            &
     355             tend(k,j,i) = tend(k,j,i) - ( d_exner(k) / ( rho_surface * c_p )  &
     356                                      *  ( df_p - df_m ) / dzw(k) )            &
    374357                                      * MERGE( 1.0_wp, 0.0_wp,                 &
    375358                                               BTEST( wall_flags_0(k,j,i), 0 ) )
  • palm/trunk/SOURCE/check_parameters.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id: check_parameters.f90 2520 2017-10-05 13:50:26Z gronemeier &
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2520 2017-10-05 13:50:26Z gronemeier
    2730! unused variables removed
    2831!
     
    298301!
    299302! 1994 2016-08-15 09:52:21Z suehring
    300 ! Add missing check for cloud_physics and cloud_droplets
     303! Add missing check for bulk_cloud_model and cloud_droplets
    301304!
    302305! 1992 2016-08-12 15:14:59Z suehring
     
    665668
    666669    USE arrays_3d
     670
     671    USE bulk_cloud_model_mod,                                                  &
     672        ONLY:  bulk_cloud_model, bcm_check_parameters, bcm_check_data_output,  &
     673               bcm_check_data_output_pr
     674
    667675    USE chemistry_model_mod,                                                   &
    668676        ONLY:  chem_boundary_conds, chem_check_data_output,                    &
    669                chem_check_data_output_pr, chem_species                 
     677               chem_check_data_output_pr, chem_species
    670678    USE chem_modules
    671     USE cloud_parameters
    672     USE constants
     679    USE basic_constants_and_equations_mod
    673680    USE control_parameters
    674681    USE dvrp_variables
     
    10581065          WRITE( action, '(A)' )  'galilei_transformation = .TRUE.'
    10591066       ENDIF
    1060        IF ( cloud_physics )  THEN
    1061           WRITE( action, '(A)' )  'cloud_physics = .TRUE.'
     1067       IF ( bulk_cloud_model )  THEN
     1068          WRITE( action, '(A)' )  'bulk_cloud_model = .TRUE.'
    10621069       ENDIF
    10631070       IF ( cloud_droplets )  THEN
     
    11861193
    11871194    ENDIF
    1188 !
    1189 !-- Check cloud scheme
    1190     IF ( cloud_scheme == 'saturation_adjust' )  THEN
    1191        microphysics_sat_adjust = .TRUE.
    1192        microphysics_seifert    = .FALSE.
    1193        microphysics_kessler    = .FALSE.
    1194        precipitation           = .FALSE.
    1195     ELSEIF ( cloud_scheme == 'seifert_beheng' )  THEN
    1196        microphysics_sat_adjust = .FALSE.
    1197        microphysics_seifert    = .TRUE.
    1198        microphysics_kessler    = .FALSE.
    1199        microphysics_morrison  = .FALSE.
    1200        precipitation           = .TRUE.
    1201     ELSEIF ( cloud_scheme == 'kessler' )  THEN
    1202        microphysics_sat_adjust = .FALSE.
    1203        microphysics_seifert    = .FALSE.
    1204        microphysics_kessler    = .TRUE.
    1205        microphysics_morrison   = .FALSE.
    1206        precipitation           = .TRUE.
    1207     ELSEIF ( cloud_scheme == 'morrison' )  THEN
    1208        microphysics_sat_adjust = .FALSE.
    1209        microphysics_seifert    = .TRUE.
    1210        microphysics_kessler    = .FALSE.
    1211        microphysics_morrison   = .TRUE.
    1212        precipitation           = .TRUE.
    1213     ELSE
    1214        message_string = 'unknown cloud microphysics scheme cloud_scheme ="' // &
    1215                         TRIM( cloud_scheme ) // '"'
    1216        CALL message( 'check_parameters', 'PA0357', 1, 2, 0, 6, 0 )
    1217     ENDIF
    1218 !
    1219 !-- Check aerosol
    1220     IF ( aerosol_bulk == 'nacl' )  THEN
    1221        aerosol_nacl   = .TRUE.
    1222        aerosol_c3h4o4 = .FALSE.
    1223        aerosol_nh4no3 = .FALSE.
    1224     ELSEIF ( aerosol_bulk == 'c3h4o4' )  THEN
    1225        aerosol_nacl   = .FALSE.
    1226        aerosol_c3h4o4 = .TRUE.
    1227        aerosol_nh4no3 = .FALSE.
    1228     ELSEIF ( aerosol_bulk == 'nh4no3' )  THEN
    1229        aerosol_nacl   = .FALSE.
    1230        aerosol_c3h4o4 = .FALSE.
    1231        aerosol_nh4no3 = .TRUE.
    1232     ELSE
    1233        message_string = 'unknown aerosol = "' // TRIM( aerosol_bulk ) // '"'
    1234        CALL message( 'check_parameters', 'PA0469', 1, 2, 0, 6, 0 )
    1235     ENDIF
    12361195
    12371196!
     
    13521311!
    13531312!-- Check for proper settings for microphysics
    1354     IF ( cloud_physics  .AND.  cloud_droplets )  THEN
    1355        message_string = 'cloud_physics = .TRUE. is not allowed with ' //       &
     1313    IF ( bulk_cloud_model  .AND.  cloud_droplets )  THEN
     1314       message_string = 'bulk_cloud_model = .TRUE. is not allowed with ' //    &
    13561315                        'cloud_droplets = .TRUE.'
    13571316       CALL message( 'check_parameters', 'PA0442', 1, 2, 0, 6, 0 )
     
    14581417    ENDIF
    14591418
    1460     IF ( cloud_physics  .AND.  .NOT.  humidity )  THEN
    1461        WRITE( message_string, * ) 'cloud_physics = ', cloud_physics, ' is ',   &
    1462               'not allowed with humidity = ', humidity
     1419    IF ( bulk_cloud_model  .AND.  .NOT.  humidity )  THEN
     1420       WRITE( message_string, * ) 'bulk_cloud_model = ', bulk_cloud_model,     &
     1421              ' is not allowed with humidity = ', humidity
    14631422       CALL message( 'check_parameters', 'PA0034', 1, 2, 0, 6, 0 )
    14641423    ENDIF
     
    14831442!-- When land surface model is used, perform additional checks
    14841443    IF ( land_surface )  CALL lsm_check_parameters
     1444!
     1445!-- When microphysics module is used, perform additional checks
     1446    IF ( bulk_cloud_model )  CALL bcm_check_parameters
    14851447
    14861448!
     
    23942356
    23952357!
    2396 !-- Set the default value for the integration interval of precipitation amount
    2397     IF ( microphysics_seifert  .OR.  microphysics_kessler )  THEN
    2398        IF ( precipitation_amount_interval == 9999999.9_wp )  THEN
    2399           precipitation_amount_interval = dt_do2d_xy
    2400        ELSE
    2401           IF ( precipitation_amount_interval > dt_do2d_xy )  THEN
    2402              WRITE( message_string, * )  'precipitation_amount_interval = ',   &
    2403                  precipitation_amount_interval, ' must not be larger than ',   &
    2404                  'dt_do2d_xy = ', dt_do2d_xy
    2405              CALL message( 'check_parameters', 'PA0090', 1, 2, 0, 6, 0 )
    2406           ENDIF
    2407        ENDIF
    2408     ENDIF
    2409 
    2410 !
    24112358!-- Determine the number of output profiles and check whether they are
    24122359!-- permissible
     
    24472394
    24482395          CASE ( 'pt', '#pt' )
    2449              IF ( .NOT. cloud_physics ) THEN
     2396             IF ( .NOT. bulk_cloud_model ) THEN
    24502397                dopr_index(i) = 4
    24512398                dopr_unit(i)  = 'K'
     
    26822629
    26832630          CASE ( 'qv', '#qv' )
    2684              IF ( .NOT. cloud_physics ) THEN
     2631             IF ( .NOT. bulk_cloud_model ) THEN
    26852632                dopr_index(i) = 41
    26862633                dopr_unit(i)  = 'kg/kg'
     
    27052652
    27062653          CASE ( 'lpt', '#lpt' )
    2707              IF ( .NOT. cloud_physics ) THEN
     2654             IF ( .NOT. bulk_cloud_model ) THEN
    27082655                message_string = 'data_output_pr = ' //                        &
    27092656                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
    2710                                  'lemented for cloud_physics = .FALSE.'
     2657                                 'lemented for bulk_cloud_model = .FALSE.'
    27112658                CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    27122659             ELSE
     
    28212768
    28222769          CASE ( 'w"qv"' )
    2823              IF ( humidity  .AND.  .NOT.  cloud_physics )  THEN
     2770             IF ( humidity  .AND.  .NOT.  bulk_cloud_model )  THEN
    28242771                dopr_index(i) = 48
    28252772                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    28262773                hom(:,2,48,:) = SPREAD( zw, 2, statistic_regions+1 )
    2827              ELSEIF ( humidity  .AND.  cloud_physics )  THEN
     2774             ELSEIF ( humidity  .AND.  bulk_cloud_model )  THEN
    28282775                dopr_index(i) = 51
    28292776                dopr_unit(i)  = TRIM ( waterflux_output_unit )
     
    28322779                message_string = 'data_output_pr = ' //                        &
    28332780                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
    2834                                  'lemented for cloud_physics = .FALSE. an' // &
    2835                                  'd humidity = .FALSE.'
     2781                                 'lemented for bulk_cloud_model = .FALSE. ' // &
     2782                                 'and humidity = .FALSE.'
    28362783                CALL message( 'check_parameters', 'PA0095', 1, 2, 0, 6, 0 )
    28372784             ENDIF
    28382785
    28392786          CASE ( 'w*qv*' )
    2840              IF ( humidity  .AND.  .NOT. cloud_physics )                       &
    2841              THEN
     2787             IF ( humidity  .AND.  .NOT. bulk_cloud_model )  THEN
    28422788                dopr_index(i) = 49
    28432789                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    28442790                hom(:,2,49,:) = SPREAD( zw, 2, statistic_regions+1 )
    2845              ELSEIF( humidity .AND. cloud_physics ) THEN
     2791             ELSEIF( humidity .AND. bulk_cloud_model ) THEN
    28462792                dopr_index(i) = 52
    28472793                dopr_unit(i)  = TRIM ( waterflux_output_unit )
     
    28502796                message_string = 'data_output_pr = ' //                        &
    28512797                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
    2852                                  'lemented for cloud_physics = .FALSE. an' // &
    2853                                  'd humidity = .FALSE.'
     2798                                 'lemented for bulk_cloud_model = .FALSE. ' // &
     2799                                 'and humidity = .FALSE.'
    28542800                CALL message( 'check_parameters', 'PA0095', 1, 2, 0, 6, 0 )
    28552801             ENDIF
    28562802
    28572803          CASE ( 'wqv' )
    2858              IF ( humidity  .AND.  .NOT.  cloud_physics )  THEN
     2804             IF ( humidity  .AND.  .NOT.  bulk_cloud_model )  THEN
    28592805                dopr_index(i) = 50
    28602806                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    28612807                hom(:,2,50,:) = SPREAD( zw, 2, statistic_regions+1 )
    2862              ELSEIF ( humidity  .AND.  cloud_physics )  THEN
     2808             ELSEIF ( humidity  .AND.  bulk_cloud_model )  THEN
    28632809                dopr_index(i) = 53
    28642810                dopr_unit(i)  = TRIM ( waterflux_output_unit )
     
    28672813                message_string = 'data_output_pr = ' //                        &
    28682814                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
    2869                                  'lemented for cloud_physics = .FALSE. an' // &
    2870                                  'd humidity = .FALSE.'
     2815                                 'lemented for bulk_cloud_model = .FALSE. ' // &
     2816                                 'and humidity = .FALSE.'
    28712817                CALL message( 'check_parameters', 'PA0095', 1, 2, 0, 6, 0 )
    28722818             ENDIF
    28732819
    28742820          CASE ( 'ql' )
    2875              IF (  .NOT.  cloud_physics  .AND.  .NOT.  cloud_droplets )  THEN
     2821             IF (  .NOT.  bulk_cloud_model  .AND.  .NOT.  cloud_droplets )  THEN
    28762822                message_string = 'data_output_pr = ' //                        &
    28772823                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
    2878                                  'lemented for cloud_physics = .FALSE. and' // &
    2879                                  'cloud_droplets = .FALSE.'
     2824                                 'lemented for bulk_cloud_model = .FALSE. ' // &
     2825                                 'and cloud_droplets = .FALSE.'
    28802826                CALL message( 'check_parameters', 'PA0096', 1, 2, 0, 6, 0 )
    28812827             ELSE
     
    30342980             hom(:,2,120,:) = SPREAD( zw, 2, statistic_regions+1 )
    30352981
    3036           CASE ( 'nc' )
    3037              IF (  .NOT.  cloud_physics )  THEN
    3038                 message_string = 'data_output_pr = ' //                        &
    3039                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3040                                  'lemented for cloud_physics = .FALSE.'
    3041                 CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    3042              ELSEIF ( .NOT.  microphysics_morrison )  THEN
    3043                 message_string = 'data_output_pr = ' //                        &
    3044                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3045                                  'lemented for cloud_scheme /= morrison'
    3046                 CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
    3047              ELSE
    3048                 dopr_index(i) = 89
    3049                 dopr_unit(i)  = '1/m3'
    3050                 hom(:,2,89,:)  = SPREAD( zu, 2, statistic_regions+1 )
    3051              ENDIF
    3052 
    3053           CASE ( 'nr' )
    3054              IF (  .NOT.  cloud_physics )  THEN
    3055                 message_string = 'data_output_pr = ' //                        &
    3056                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3057                                  'lemented for cloud_physics = .FALSE.'
    3058                 CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    3059              ELSEIF ( .NOT.  microphysics_seifert )  THEN
    3060                 message_string = 'data_output_pr = ' //                        &
    3061                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3062                                  'lemented for cloud_scheme /= seifert_beheng'
    3063                 CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
    3064              ELSE
    3065                 dopr_index(i) = 73
    3066                 dopr_unit(i)  = '1/m3'
    3067                 hom(:,2,73,:)  = SPREAD( zu, 2, statistic_regions+1 )
    3068              ENDIF
    3069 
    3070           CASE ( 'qr' )
    3071              IF (  .NOT.  cloud_physics )  THEN
    3072                 message_string = 'data_output_pr = ' //                        &
    3073                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3074                                  'lemented for cloud_physics = .FALSE.'
    3075                 CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    3076              ELSEIF ( .NOT.  microphysics_seifert )  THEN
    3077                 message_string = 'data_output_pr = ' //                        &
    3078                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3079                                  'lemented for cloud_scheme /= seifert_beheng'
    3080                 CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
    3081              ELSE
    3082                 dopr_index(i) = 74
    3083                 dopr_unit(i)  = 'kg/kg'
    3084                 hom(:,2,74,:)  = SPREAD( zu, 2, statistic_regions+1 )
    3085              ENDIF
    3086 
    3087           CASE ( 'qc' )
    3088              IF (  .NOT.  cloud_physics )  THEN
    3089                 message_string = 'data_output_pr = ' //                        &
    3090                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3091                                  'lemented for cloud_physics = .FALSE.'
    3092                 CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    3093              ELSE
    3094                 dopr_index(i) = 75
    3095                 dopr_unit(i)  = 'kg/kg'
    3096                 hom(:,2,75,:)  = SPREAD( zu, 2, statistic_regions+1 )
    3097              ENDIF
    3098 
    3099           CASE ( 'prr' )
    3100              IF (  .NOT.  cloud_physics )  THEN
    3101                 message_string = 'data_output_pr = ' //                        &
    3102                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    3103                                  'lemented for cloud_physics = .FALSE.'
    3104                 CALL message( 'check_parameters', 'PA0094', 1, 2, 0, 6, 0 )
    3105              ELSEIF ( microphysics_sat_adjust )  THEN
    3106                 message_string = 'data_output_pr = ' //                        &
    3107                                  TRIM( data_output_pr(i) ) // ' is not ava' // &
    3108                                  'ilable for cloud_scheme = saturation_adjust'
    3109                 CALL message( 'check_parameters', 'PA0422', 1, 2, 0, 6, 0 )
    3110              ELSE
    3111                 dopr_index(i) = 76
    3112                 dopr_unit(i)  = 'kg/kg m/s'
    3113                 hom(:,2,76,:)  = SPREAD( zu, 2, statistic_regions+1 )
    3114              ENDIF
    3115 
    31162982          CASE ( 'ug' )
    31172983             dopr_index(i) = 78
     
    31543020             CALL lsm_check_data_output_pr( data_output_pr(i), i, unit,        &
    31553021                                            dopr_unit(i) )
     3022!
     3023!--          Block of microphysics module profile outputs
     3024             IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
     3025                   CALL bcm_check_data_output_pr(data_output_pr(i), i, unit,   &
     3026                                                 dopr_unit(i) )
     3027             ENDIF
    31563028
    31573029             IF ( unit == 'illegal' )  THEN
     
    32603132
    32613133          CASE ( 'lpt' )
    3262              IF (  .NOT.  cloud_physics )  THEN
     3134             IF (  .NOT.  bulk_cloud_model )  THEN
    32633135                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3264                          'res cloud_physics = .TRUE.'
     3136                         'res bulk_cloud_model = .TRUE.'
    32653137                CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    32663138             ENDIF
    32673139             unit = 'K'
    3268 
    3269           CASE ( 'nc' )
    3270              IF (  .NOT.  cloud_physics )  THEN
    3271                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3272                          'res cloud_physics = .TRUE.'
    3273                 CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3274              ELSEIF ( .NOT.  microphysics_morrison )  THEN
    3275                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3276                          'res = morrison '
    3277                 CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
    3278              ENDIF
    3279              unit = '1/m3'
    3280 
    3281           CASE ( 'nr' )
    3282              IF (  .NOT.  cloud_physics )  THEN
    3283                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3284                          'res cloud_physics = .TRUE.'
    3285                 CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3286              ELSEIF ( .NOT.  microphysics_seifert )  THEN
    3287                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3288                          'res cloud_scheme = seifert_beheng'
    3289                 CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
    3290              ENDIF
    3291              unit = '1/m3'
    32923140
    32933141          CASE ( 'pc', 'pr' )
     
    33013149             IF ( TRIM( var ) == 'pr' )  unit = 'm'
    33023150
    3303           CASE ( 'prr' )
    3304              IF (  .NOT.  cloud_physics )  THEN
    3305                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3306                          'res cloud_physics = .TRUE.'
    3307                 CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3308              ELSEIF ( microphysics_sat_adjust )  THEN
    3309                 message_string = 'output of "' // TRIM( var ) // '" is ' //    &
    3310                          'not available for cloud_scheme = saturation_adjust'
    3311                 CALL message( 'check_parameters', 'PA0423', 1, 2, 0, 6, 0 )
    3312              ENDIF
    3313              unit = 'kg/kg m/s'
    3314 
    33153151          CASE ( 'q', 'vpt' )
    33163152             IF (  .NOT.  humidity )  THEN
     
    33223158             IF ( TRIM( var ) == 'vpt' )  unit = 'K'
    33233159
    3324           CASE ( 'qc' )
    3325              IF (  .NOT.  cloud_physics )  THEN
     3160          CASE ( 'ql' )
     3161             IF ( .NOT.  ( bulk_cloud_model  .OR.  cloud_droplets ) )  THEN
    33263162                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3327                          'res cloud_physics = .TRUE.'
    3328                 CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3329              ENDIF
    3330              unit = 'kg/kg'
    3331 
    3332           CASE ( 'ql' )
    3333              IF ( .NOT.  ( cloud_physics  .OR.  cloud_droplets ) )  THEN
    3334                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3335                          'res cloud_physics = .TRUE. or cloud_droplets = .TRUE.'
     3163                      'res bulk_cloud_model = .TRUE. or cloud_droplets = .TRUE.'
    33363164                CALL message( 'check_parameters', 'PA0106', 1, 2, 0, 6, 0 )
    33373165             ENDIF
     
    33483176             IF ( TRIM( var ) == 'ql_vp' )  unit = 'none'
    33493177
    3350           CASE ( 'qr' )
    3351              IF (  .NOT.  cloud_physics )  THEN
     3178          CASE ( 'qv' )
     3179             IF (  .NOT.  bulk_cloud_model )  THEN
    33523180                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3353                          'res cloud_physics = .TRUE.'
    3354                 CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3355              ELSEIF ( .NOT.  microphysics_seifert ) THEN
    3356                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3357                          'res cloud_scheme = seifert_beheng'
    3358                 CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
    3359              ENDIF
    3360              unit = 'kg/kg'
    3361 
    3362           CASE ( 'qv' )
    3363              IF (  .NOT.  cloud_physics )  THEN
    3364                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3365                                  'res cloud_physics = .TRUE.'
     3181                                 'res bulk_cloud_model = .TRUE.'
    33663182                CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    33673183             ENDIF
     
    34003216             CONTINUE
    34013217
    3402           CASE ( 'ghf*', 'lwp*', 'ol*', 'pra*', 'prr*', 'qsws*', 'r_a*',       &
     3218          CASE ( 'ghf*', 'lwp*', 'ol*', 'qsws*', 'r_a*',                       &
    34033219                 'shf*', 'ssws*', 't*', 'tsurf*', 'u*', 'z0*', 'z0h*', 'z0q*' )
    34043220             IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
     
    34093225             ENDIF
    34103226
    3411              IF ( TRIM( var ) == 'lwp*'  .AND.  .NOT. cloud_physics )  THEN
     3227             IF ( TRIM( var ) == 'lwp*'  .AND.  .NOT. bulk_cloud_model )  THEN
    34123228                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3413                                  'res cloud_physics = .TRUE.'
     3229                                 'res bulk_cloud_model = .TRUE.'
    34143230                CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    3415              ENDIF
    3416              IF ( TRIM( var ) == 'pra*'  .AND.                                 &
    3417                   .NOT. ( microphysics_kessler .OR. microphysics_seifert ) )  THEN
    3418                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3419                                  'res cloud_scheme = kessler or seifert_beheng'
    3420                 CALL message( 'check_parameters', 'PA0112', 1, 2, 0, 6, 0 )
    3421              ENDIF
    3422              IF ( TRIM( var ) == 'pra*'  .AND.  j == 1 )  THEN
    3423                 message_string = 'temporal averaging of precipitation ' //     &
    3424                           'amount "' // TRIM( var ) // '" is not possible'
    3425                 CALL message( 'check_parameters', 'PA0113', 1, 2, 0, 6, 0 )
    3426              ENDIF
    3427              IF ( TRIM( var ) == 'prr*'  .AND.                                 &
    3428                   .NOT. ( microphysics_kessler .OR. microphysics_seifert ) )  THEN
    3429                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3430                                  'res cloud_scheme = kessler or seifert_beheng'
    3431                 CALL message( 'check_parameters', 'PA0112', 1, 2, 0, 6, 0 )
    34323231             ENDIF
    34333232             IF ( TRIM( var ) == 'qsws*'  .AND.  .NOT.  humidity )  THEN
     
    34603259             IF ( TRIM( var ) == 'lwp*'   )  unit = 'kg/m2'
    34613260             IF ( TRIM( var ) == 'ol*'    )  unit = 'm'
    3462              IF ( TRIM( var ) == 'pra*'   )  unit = 'mm'
    3463              IF ( TRIM( var ) == 'prr*'   )  unit = 'mm/s'
    34643261             IF ( TRIM( var ) == 'qsws*'  )  unit = 'kgm/kgs'
    34653262             IF ( TRIM( var ) == 'r_a*'   )  unit = 's/m'     
     
    34833280
    34843281             CALL tcm_check_data_output ( var, unit )
     3282
     3283!
     3284!--          Block of microphysics module outputs
     3285             IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
     3286                CALL bcm_check_data_output ( var, unit )
     3287             ENDIF
    34853288
    34863289             IF ( unit == 'illegal' )  THEN
  • palm/trunk/SOURCE/chem_photolysis_mod.f90

    r3241 r3274  
    2626! -----------------
    2727! $Id$
     28! Modularization of all bulk cloud physics code components
     29!
     30! 3241 2018-09-12 15:02:00Z raasch
    2831! unused variables commented
    2932!
     
    5053        ONLY:  dzw, hyp, pt, q, ql, zu, zw
    5154
    52     USE constants,                                                             &
     55    USE basic_constants_and_equations_mod,                                     &
    5356        ONLY:  pi
    5457
     
    6871    USE control_parameters,                                                    &
    6972        ONLY:  initializing_actions           
    70 !       ONLY:  cloud_droplets, cloud_physics, g, initializing_actions,         &
     73!       ONLY:  cloud_droplets, initializing_actions,                           &
    7174!              large_scale_forcing, lsf_surf, phi, pt_surface, rho_surface,    &
    7275!              surface_pressure, time_since_reference_point
     
    271274!      INTEGER(iwp) :: i, j, k   !< loop indices
    272275       INTEGER(iwp) :: iphot,iav !< loop indix for photolysis reaction
    273 !      REAL(wp)     :: exn,   &  !< Exner functions at surface
     276!      REAL(wp)     :: exn,   &  !< Exner functions at surface (better use palms own exner array in arrays_3d)
    274277!                      pt1       !< potential temperature at first grid level
    275278
     
    304307!      INTEGER(iwp) :: i, j, k   !< loop indices
    305308       INTEGER(iwp) :: iphot,iav !< loop indix for photolysis reaction
    306 !      REAL(wp)     :: exn,   &  !< Exner functions at surface
     309!      REAL(wp)     :: exn,   &  !< Exner functions at surface (better use palms own exner array in arrays_3d)
    307310!                      pt1       !< potential temperature at first grid level
    308311       REAL(wp)     :: coszi     !< 1./cosine of zenith angle
  • palm/trunk/SOURCE/chemistry_model_mod.f90

    r3248 r3274  
    2727! -----------------
    2828! $Id$
     29! Modularization of all bulk cloud physics code components
     30!
     31! 3248 2018-09-14 09:42:06Z sward
    2932! Minor formating changes
    3033!
     
    144147                                 intermediate_timestep_count_max,              &
    145148                                 timestep_scheme, use_prescribed_profile_data 
    146    USE arrays_3d,          ONLY: hyp, pt, rdf_sc, tend, zu                     
     149   USE arrays_3d,          ONLY: hyp, pt, rdf_sc, tend, zu, exner
    147150   USE chem_gasphase_mod,  ONLY: nspec, spc_names, nkppctrl, nmaxfixsteps,     &
    148151                                 t_steps, fill_temp, chem_gasphase_integrate,  &
     
    939942    IF (chem_gasphase_on) THEN
    940943
    941        tmp_temp(:) = pt(:,j,i) * ( hyp(nzb+1:nzt) / 100000.0_wp )**0.286_wp
     944       tmp_temp(:) = pt(:,j,i) * exner(nzb+1:nzt)
    942945! ppm to molecules/cm**3
    943946!      tmp_fact = 1.e-6_wp*6.022e23_wp/(22.414_wp*1000._wp) * 273.15_wp * hyp(nzb+1:nzt)/( 101300.0_wp * tmp_temp )
  • palm/trunk/SOURCE/compute_vpt.f90

    r2718 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    6770
    6871    USE arrays_3d,                                                             &
    69         ONLY:  pt, q, ql, vpt
    70        
     72        ONLY:  pt, q, ql, vpt, d_exner
     73
     74    USE basic_constants_and_equations_mod,                                     &
     75        ONLY:  lv_d_cp
     76
     77    USE control_parameters,                                                    &
     78        ONLY:  cloud_droplets
     79
    7180    USE indices,                                                               &
    7281        ONLY:  nzb, nzt
    73        
    74     USE cloud_parameters,                                                      &
    75         ONLY:  l_d_cp, pt_d_t
    76        
    77     USE control_parameters,                                                    &
    78         ONLY:  cloud_droplets, cloud_physics
    79        
     82
    8083    USE kinds
     84
     85    USE bulk_cloud_model_mod,                                                  &
     86        ONLY:  bulk_cloud_model
    8187
    8288    IMPLICIT NONE
     
    8490    INTEGER(iwp) :: k   !<
    8591
    86     IF ( .NOT. cloud_physics  .AND.  .NOT. cloud_droplets )  THEN
     92    IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    8793       vpt = pt * ( 1.0_wp + 0.61_wp * q )
    88     ELSE IF (cloud_physics)  THEN
     94    ELSE IF (bulk_cloud_model)  THEN
    8995       DO  k = nzb, nzt+1
    90           vpt(k,:,:) = ( pt(k,:,:) + pt_d_t(k) * l_d_cp * ql(k,:,:) ) *        &
     96          vpt(k,:,:) = ( pt(k,:,:) + d_exner(k) * lv_d_cp * ql(k,:,:) ) *      &
    9197                       ( 1.0_wp + 0.61_wp * q(k,:,:) - 1.61_wp * ql(k,:,:) )
    9298       ENDDO
  • palm/trunk/SOURCE/data_output_2d.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    237240               precipitation_amount, prr, q, qc, ql, ql_c, ql_v, qr,           &
    238241               rho_ocean, s, sa, tend, u, v, vpt, w, zu, zw,                   &
    239                waterflux_output_conversion
    240        
     242               waterflux_output_conversion, hyrho, d_exner
     243
    241244    USE averaging
    242        
    243     USE cloud_parameters,                                                      &
    244         ONLY:  cp, hyrho, l_d_cp, l_v, pt_d_t
    245                
     245
     246    USE basic_constants_and_equations_mod,                                     &
     247        ONLY:  c_p, lv_d_cp, l_v
     248
     249    USE bulk_cloud_model_mod,                                                  &
     250        ONLY:  bulk_cloud_model, bcm_data_output_2d
     251
    246252    USE control_parameters,                                                    &
    247         ONLY:  cloud_physics, data_output_2d_on_each_pe, data_output_xy,       &
     253        ONLY:  data_output_2d_on_each_pe, data_output_xy,                      &
    248254               data_output_xz, data_output_yz, do2d,                           &
    249255               do2d_xy_last_time, do2d_xy_time_count,                          &
     
    254260               psolver, section, simulated_time,                               &
    255261               time_since_reference_point, uv_exposure
    256        
     262
    257263    USE cpulog,                                                                &
    258264        ONLY:  cpu_log, log_point
    259        
     265
    260266    USE gust_mod,                                                              &
    261267        ONLY:  gust_data_output_2d, gust_module_enabled
    262        
     268
    263269    USE indices,                                                               &
    264270        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,       &
    265271               nzb, nzt, wall_flags_0
    266                
     272
    267273    USE kinds
    268    
     274
    269275    USE land_surface_model_mod,                                                &
    270276        ONLY:  lsm_data_output_2d, zs
    271    
     277
    272278#if defined( __netcdf )
    273279    USE NETCDF
     
    579585                level_z(nzb+1) = zu(nzb+1)
    580586
    581              CASE ( 'nc_xy', 'nc_xz', 'nc_yz' )
    582                 IF ( av == 0 )  THEN
    583                    to_be_resorted => nc
    584                 ELSE
    585                    IF ( .NOT. ALLOCATED( nc_av ) ) THEN
    586                       ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    587                       nc_av = REAL( fill_value, KIND = wp )
    588                    ENDIF
    589                    to_be_resorted => nc_av
    590                 ENDIF
    591                 IF ( mode == 'xy' )  level_z = zu
    592 
    593              CASE ( 'nr_xy', 'nr_xz', 'nr_yz' )
    594                 IF ( av == 0 )  THEN
    595                    to_be_resorted => nr
    596                 ELSE
    597                    IF ( .NOT. ALLOCATED( nr_av ) ) THEN
    598                       ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    599                       nr_av = REAL( fill_value, KIND = wp )
    600                    ENDIF
    601                    to_be_resorted => nr_av
    602                 ENDIF
    603                 IF ( mode == 'xy' )  level_z = zu
    604 
    605587             CASE ( 'ghf*_xy' )        ! 2d-array
    606588                IF ( av == 0 )  THEN
     
    756738                ENDIF
    757739
    758              CASE ( 'pra*_xy' )        ! 2d-array / integral quantity => no av
    759 !                CALL exchange_horiz_2d( precipitation_amount )
    760                    DO  i = nxl, nxr
    761                       DO  j = nys, nyn
    762                       local_pf(i,j,nzb+1) =  precipitation_amount(j,i)
    763                    ENDDO
    764                 ENDDO
    765                 precipitation_amount = 0.0_wp   ! reset for next integ. interval
    766                 resorted = .TRUE.
    767                 two_d = .TRUE.
    768                 level_z(nzb+1) = zu(nzb+1)
    769 
    770              CASE ( 'prr_xy', 'prr_xz', 'prr_yz' )
    771                 IF ( av == 0 )  THEN
    772 !                   CALL exchange_horiz( prr, nbgp )
    773                    DO  i = nxl, nxr
    774                       DO  j = nys, nyn
    775                          DO  k = nzb, nzt+1
    776                             local_pf(i,j,k) = prr(k,j,i) * hyrho(nzb+1)
    777                          ENDDO
    778                       ENDDO
    779                    ENDDO
    780                 ELSE
    781                    IF ( .NOT. ALLOCATED( prr_av ) ) THEN
    782                       ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    783                       prr_av = REAL( fill_value, KIND = wp )
    784                    ENDIF
    785 !                   CALL exchange_horiz( prr_av, nbgp )
    786                    DO  i = nxl, nxr
    787                       DO  j = nys, nyn
    788                          DO  k = nzb, nzt+1
    789                             local_pf(i,j,k) = prr_av(k,j,i) * hyrho(nzb+1)
    790                          ENDDO
    791                       ENDDO
    792                    ENDDO
    793                 ENDIF
    794                 resorted = .TRUE.
    795                 IF ( mode == 'xy' )  level_z = zu
    796 
    797740             CASE ( 'pt_xy', 'pt_xz', 'pt_yz' )
    798741                IF ( av == 0 )  THEN
    799                    IF ( .NOT. cloud_physics ) THEN
     742                   IF ( .NOT. bulk_cloud_model ) THEN
    800743                      to_be_resorted => pt
    801744                   ELSE
     
    803746                      DO  j = nys, nyn
    804747                            DO  k = nzb, nzt+1
    805                                local_pf(i,j,k) = pt(k,j,i) + l_d_cp *          &
    806                                                              pt_d_t(k) *       &
     748                               local_pf(i,j,k) = pt(k,j,i) + lv_d_cp *         &
     749                                                             d_exner(k) *      &
    807750                                                             ql(k,j,i)
    808751                            ENDDO
     
    829772                   ENDIF
    830773                   to_be_resorted => q_av
    831                 ENDIF
    832                 IF ( mode == 'xy' )  level_z = zu
    833 
    834              CASE ( 'qc_xy', 'qc_xz', 'qc_yz' )
    835                 IF ( av == 0 )  THEN
    836                    to_be_resorted => qc
    837                 ELSE
    838                    IF ( .NOT. ALLOCATED( qc_av ) ) THEN
    839                       ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    840                       qc_av = REAL( fill_value, KIND = wp )
    841                    ENDIF
    842                    to_be_resorted => qc_av
    843774                ENDIF
    844775                IF ( mode == 'xy' )  level_z = zu
     
    921852                IF ( mode == 'xy' )  level_z = zu
    922853
    923              CASE ( 'qr_xy', 'qr_xz', 'qr_yz' )
    924                 IF ( av == 0 )  THEN
    925                    to_be_resorted => qr
    926                 ELSE
    927                    IF ( .NOT. ALLOCATED( qr_av ) ) THEN
    928                       ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    929                       qr_av = REAL( fill_value, KIND = wp )
    930                    ENDIF
    931                    to_be_resorted => qr_av
    932                 ENDIF
    933                 IF ( mode == 'xy' )  level_z = zu
    934 
    935854             CASE ( 'qsws*_xy' )        ! 2d-array
    936855                IF ( av == 0 ) THEN
     
    1071990                      j = surf_lsm_h%j(m)
    1072991                      k = surf_lsm_h%k(m)
    1073                       local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * cp
     992                      local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * c_p
    1074993                   ENDDO
    1075994                   DO  m = 1, surf_usm_h%ns
     
    1077996                      j = surf_usm_h%j(m)
    1078997                      k = surf_usm_h%k(m)
    1079                       local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * cp
     998                      local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * c_p
    1080999                   ENDDO
    10811000                ELSE
     
    13871306
    13881307!
    1389 !--             Land surface model quantity
    1390                 IF ( land_surface )  THEN
    1391                    CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
    1392                                             local_pf, two_d, nzb_do, nzt_do )
    1393                 ENDIF
    1394 
    1395 !
    13961308!--             Turbulence closure variables
    13971309                IF ( .NOT. found )  THEN
    13981310                   CALL tcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
    13991311                                             local_pf, nzb_do, nzt_do )
     1312                ENDIF
     1313
     1314!
     1315!--             Microphysics module quantities
     1316                IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
     1317                   CALL bcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1318                                            local_pf, two_d, nzb_do, nzt_do )
     1319                ENDIF
     1320
     1321!
     1322!--             Land surface model quantity
     1323                IF ( .NOT. found  .AND.  land_surface )  THEN
     1324                   CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1325                                            local_pf, two_d, nzb_do, nzt_do )
    14001326                ENDIF
    14011327
     
    14171343!
    14181344!--             UV exposure model quantity
    1419                 IF ( uv_exposure )  THEN
     1345                IF ( .NOT. found  .AND.  uv_exposure )  THEN
    14201346                   CALL uvem_data_output_2d( av, do2d(av,if), found, grid,     &
    14211347                                             local_pf, two_d, nzb_do, nzt_do )
  • palm/trunk/SOURCE/data_output_3d.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables and format statements removed
    2831!
     
    206209    USE arrays_3d,                                                             &
    207210        ONLY:  e, nc, nr, p, pt, prr, q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, &
    208                sa, tend, u, v, vpt, w
    209        
     211               sa, tend, u, v, vpt, w, d_exner
     212
    210213    USE averaging
    211        
     214
     215    USE basic_constants_and_equations_mod,                                     &
     216        ONLY:  lv_d_cp
     217
     218    USE bulk_cloud_model_mod,                                                  &
     219        ONLY:  bulk_cloud_model, bcm_data_output_3d
     220
    212221    USE chemistry_model_mod,                                                   &
    213222        ONLY:  chem_data_output_3d
    214223
    215     USE cloud_parameters,                                                      &
    216         ONLY:  l_d_cp, pt_d_t
    217        
    218224    USE control_parameters,                                                    &
    219         ONLY:  air_chemistry, cloud_physics, do3d, do3d_no, do3d_time_count,   &
     225        ONLY:  air_chemistry, do3d, do3d_no, do3d_time_count,                  &
    220226               io_blocks, io_group, land_surface, message_string,              &
    221227               ntdim_3d, nz_do3d,  plant_canopy,                               &
    222228               psolver, simulated_time, time_since_reference_point,            &
    223229               urban_surface, varnamelength
    224        
     230
    225231    USE cpulog,                                                                &
    226232        ONLY:  log_point, cpu_log
     
    228234    USE gust_mod,                                                              &
    229235        ONLY: gust_data_output_3d, gust_module_enabled
    230        
     236
    231237    USE indices,                                                               &
    232238        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,     &
    233239               wall_flags_0
    234        
     240
    235241    USE kinds
    236    
     242
    237243    USE land_surface_model_mod,                                                &
    238244        ONLY: lsm_data_output_3d, nzb_soil, nzt_soil
     
    399405                ENDIF
    400406                to_be_resorted => lpt_av
    401              ENDIF
    402 
    403           CASE ( 'nc' )
    404              IF ( av == 0 )  THEN
    405                 to_be_resorted => nc
    406              ELSE
    407                 IF ( .NOT. ALLOCATED( nc_av ) ) THEN
    408                    ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    409                    nc_av = REAL( fill_value, KIND = wp )
    410                 ENDIF
    411                 to_be_resorted => nc_av
    412              ENDIF
    413 
    414           CASE ( 'nr' )
    415              IF ( av == 0 )  THEN
    416                 to_be_resorted => nr
    417              ELSE
    418                 IF ( .NOT. ALLOCATED( nr_av ) ) THEN
    419                    ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    420                    nr_av = REAL( fill_value, KIND = wp )
    421                 ENDIF
    422                 to_be_resorted => nr_av
    423407             ENDIF
    424408
     
    506490             ENDIF
    507491
    508           CASE ( 'prr' )
    509              IF ( av == 0 )  THEN
    510                 DO  i = nxl, nxr
    511                    DO  j = nys, nyn
    512                       DO  k = nzb_do, nzt_do
    513                          local_pf(i,j,k) = prr(k,j,i)
    514                       ENDDO
    515                    ENDDO
    516                 ENDDO
    517              ELSE
    518                 IF ( .NOT. ALLOCATED( prr_av ) ) THEN
    519                    ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    520                    prr_av = REAL( fill_value, KIND = wp )
    521                 ENDIF
    522                 DO  i = nxl, nxr
    523                    DO  j = nys, nyn
    524                       DO  k = nzb_do, nzt_do
    525                          local_pf(i,j,k) = prr_av(k,j,i)
    526                       ENDDO
    527                    ENDDO
    528                 ENDDO
    529              ENDIF
    530              resorted = .TRUE.
    531 
    532492          CASE ( 'pt' )
    533493             IF ( av == 0 )  THEN
    534                 IF ( .NOT. cloud_physics ) THEN
     494                IF ( .NOT. bulk_cloud_model ) THEN
    535495                   to_be_resorted => pt
    536496                ELSE
     
    538498                      DO  j = nys, nyn
    539499                         DO  k = nzb_do, nzt_do
    540                             local_pf(i,j,k) = pt(k,j,i) + l_d_cp *             &
    541                                                           pt_d_t(k) *          &
     500                            local_pf(i,j,k) = pt(k,j,i) + lv_d_cp *            &
     501                                                          d_exner(k) *         &
    542502                                                          ql(k,j,i)
    543503                         ENDDO
     
    563523                ENDIF
    564524                to_be_resorted => q_av
    565              ENDIF
    566 
    567           CASE ( 'qc' )
    568              IF ( av == 0 )  THEN
    569                 to_be_resorted => qc
    570              ELSE
    571                 IF ( .NOT. ALLOCATED( qc_av ) ) THEN
    572                    ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    573                    qc_av = REAL( fill_value, KIND = wp )
    574                 ENDIF
    575                 to_be_resorted => qc_av
    576525             ENDIF
    577526
     
    647596             ENDIF
    648597
    649           CASE ( 'qr' )
    650              IF ( av == 0 )  THEN
    651                 to_be_resorted => qr
    652              ELSE
    653                 IF ( .NOT. ALLOCATED( qr_av ) ) THEN
    654                    ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    655                    qr_av = REAL( fill_value, KIND = wp )
    656                 ENDIF
    657                 to_be_resorted => qr_av
    658              ENDIF
    659 
    660598          CASE ( 'qv' )
    661599             IF ( av == 0 )  THEN
     
    758696!--       Block of urban surface model outputs   
    759697          CASE ( 'usm_output' )
    760              CALL usm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     698             CALL usm_data_output_3d( av, do3d(av,if), found, local_pf,        &
    761699                                         nzb_do, nzt_do )
    762700
    763701          CASE DEFAULT
    764702
     703             IF ( .NOT. found )  THEN
     704                CALL tcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     705                                         nzb_do, nzt_do )
     706                resorted = .TRUE.
     707             ENDIF
     708
     709!
     710!--          Microphysic module quantities
     711             IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
     712                CALL bcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     713                                         nzb_do, nzt_do )
     714                resorted = .TRUE.
     715             ENDIF
     716
    765717!
    766718!--          Land surface quantity
    767              IF ( land_surface )  THEN
     719             IF ( .NOT. found  .AND.  land_surface )  THEN
    768720!
    769721!--             For soil model quantities, it is required to re-allocate local_pf
     
    788740                ENDIF
    789741
    790              ENDIF
    791 
    792              IF ( .NOT. found )  THEN
    793                 CALL tcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
    794                                          nzb_do, nzt_do )
    795                 resorted = .TRUE.
    796742             ENDIF
    797743
  • palm/trunk/SOURCE/data_output_dvrp.f90

    r3045 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3045 2018-05-28 07:55:41Z Giersch
    2730! Code adjusted according to PALM coding standards
    2831!
     
    131134
    132135    USE arrays_3d,                                                             &
    133         ONLY:  p, pt, q, ql, s, ts, u, us, v, w, zu
    134        
    135     USE cloud_parameters,                                                      &
    136         ONLY:  l_d_cp, pt_d_t
    137        
    138     USE constants,                                                             &
    139         ONLY:  pi
    140        
     136        ONLY:  p, pt, q, ql, s, ts, u, us, v, w, zu, d_exner
     137
     138    USE basic_constants_and_equations_mod,                                     &
     139        ONLY:  pi, lv_d_cp
     140
    141141    USE control_parameters,                                                    &
    142         ONLY:  cloud_droplets, cloud_physics, do2d, do3d, humidity, ibc_uv_b,  &
     142        ONLY:  cloud_droplets, do2d, do3d, humidity, ibc_uv_b,                 &
    143143               message_string, nz_do3d, passive_scalar, simulated_time,        &
    144144               threshold
     
    160160       
    161161    USE kinds
     162
     163    USE bulk_cloud_model_mod,                                                  &
     164        ONLY:  bulk_cloud_model
    162165
    163166    USE pegrid
     
    335338
    336339                CASE ( 'pt', 'pt_xy', 'pt_xz', 'pt_yz' )
    337                    IF ( .NOT. cloud_physics ) THEN
     340                   IF ( .NOT. bulk_cloud_model ) THEN
    338341                      DO  i = nxl_dvrp, nxr_dvrp+1
    339342                         DO  j = nys_dvrp, nyn_dvrp+1
     
    347350                         DO  j = nys_dvrp, nyn_dvrp+1
    348351                            DO  k = nzb, nz_do3d
    349                                local_pf(i,j,k) = pt(k,j,i) + l_d_cp *          &
    350                                                  pt_d_t(k) * ql(k,j,i)
     352                               local_pf(i,j,k) = pt(k,j,i) + lv_d_cp *         &
     353                                                 d_exner(k) * ql(k,j,i)
    351354                            ENDDO
    352355                         ENDDO
     
    372375             
    373376                CASE ( 'ql', 'ql_xy', 'ql_xz', 'ql_yz' )
    374                    IF ( cloud_physics  .OR.  cloud_droplets )  THEN
     377                   IF ( bulk_cloud_model  .OR.  cloud_droplets )  THEN
    375378                      DO  i = nxl_dvrp, nxr_dvrp+1
    376379                         DO  j = nys_dvrp, nyn_dvrp+1
     
    381384                      ENDDO
    382385                   ELSE                     
    383                       message_string = 'if cloud_physics = .FALSE. and ' //    &
     386                      message_string = 'if bulk_cloud_model = .FALSE. and ' // &
    384387                                  'cloud_droplets = .FALSE. '
    385388                                  'output of ' // TRIM( output_variable) //    &
  • palm/trunk/SOURCE/data_output_mask.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variable removed
    2831!
     
    129132    USE arrays_3d,                                                             &
    130133        ONLY:  e, nc, nr, p, pt, q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, sa,  &
    131                tend, u, v, vpt, w
     134               tend, u, v, vpt, w, d_exner
    132135   
    133136    USE averaging,                                                             &
     
    135138               qc_av, ql_av, ql_c_av, ql_v_av, ql_vp_av, qv_av, qr_av,         &
    136139               rho_ocean_av, s_av, sa_av, u_av, v_av, vpt_av, w_av
    137    
    138     USE cloud_parameters,                                                      &
    139         ONLY:  l_d_cp, pt_d_t
     140
     141    USE basic_constants_and_equations_mod,                                     &
     142        ONLY:  lv_d_cp
    140143   
    141144    USE control_parameters,                                                    &
    142         ONLY:  cloud_physics, domask, domask_no, domask_time_count, mask_i,    &
     145        ONLY:  domask, domask_no, domask_time_count, mask_i,                   &
    143146               mask_j, mask_k, mask_size, mask_size_l, mask_start_l,           &
    144147               max_masks, message_string, mid, nz_do3d, simulated_time
     
    150153       
    151154    USE kinds
     155
     156    USE bulk_cloud_model_mod,                                                  &
     157        ONLY:  bulk_cloud_model
    152158   
    153159    USE NETCDF
     
    354360          CASE ( 'pt' )
    355361             IF ( av == 0 )  THEN
    356                 IF ( .NOT. cloud_physics ) THEN
     362                IF ( .NOT. bulk_cloud_model ) THEN
    357363                   to_be_resorted => pt
    358364                ELSE
     
    362368                            local_pf(i,j,k) =  &
    363369                                 pt(mask_k(mid,k),mask_j(mid,j),mask_i(mid,i)) &
    364                                  + l_d_cp * pt_d_t(mask_k(mid,k)) * &
     370                                 + lv_d_cp * d_exner(mask_k(mid,k)) *          &
    365371                                   ql(mask_k(mid,k),mask_j(mid,j),mask_i(mid,i))
    366372                         ENDDO
  • palm/trunk/SOURCE/data_output_spectra.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    238241#if defined( __netcdf )
    239242
    240     USE constants,                                                             &
     243    USE basic_constants_and_equations_mod,                                     &
    241244        ONLY:  pi
    242245
  • palm/trunk/SOURCE/flow_statistics.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    283286               momentumflux_output_conversion, nc, nr, p, prho, prr, pt, q,    &
    284287               qc, ql, qr, rho_air, rho_air_zw, rho_ocean, s,                  &
    285                sa, u, ug, v, vg, vpt, w, w_subs, waterflux_output_conversion, zw
     288               sa, u, ug, v, vg, vpt, w, w_subs, waterflux_output_conversion,  &
     289               zw, d_exner
    286290       
    287     USE cloud_parameters,                                                      &
    288         ONLY:   l_d_cp, pt_d_t
     291    USE basic_constants_and_equations_mod,                                     &
     292        ONLY:   g, lv_d_cp
    289293       
    290294    USE control_parameters,                                                    &
    291         ONLY:   average_count_pr, cloud_droplets, cloud_physics, do_sum,       &
    292                 dt_3d, g, humidity, initializing_actions, land_surface,        &
     295        ONLY:   average_count_pr, cloud_droplets, do_sum,                      &
     296                dt_3d, humidity, initializing_actions, land_surface,           &
    293297                large_scale_forcing, large_scale_subsidence, max_pr_user,      &
    294                 message_string, neutral, microphysics_morrison,                &
    295                 microphysics_seifert, ocean, passive_scalar, simulated_time,   &
    296                 simulated_time_at_begin, use_subsidence_tendencies,            &
     298                message_string, neutral, ocean, passive_scalar, simulated_time,&
     299                simulated_time_at_begin, use_subsidence_tendencies,            &
    297300                use_surface_fluxes, use_top_fluxes, ws_scheme_mom,             &
    298301                ws_scheme_sca
     
    313316       
    314317    USE kinds
     318
     319    USE bulk_cloud_model_mod,                                                  &
     320        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    315321   
    316322    USE land_surface_model_mod,                                                &
     
    515521             ENDDO
    516522          ENDDO
    517           IF ( cloud_physics )  THEN
     523          IF ( bulk_cloud_model )  THEN
    518524             !$OMP DO
    519525             DO  i = nxl, nxr
     
    525531                                                               * flag
    526532                      sums_l(k,43,tn) = sums_l(k,43,tn) + (                    &
    527                                       pt(k,j,i) + l_d_cp*pt_d_t(k) * ql(k,j,i) &
     533                                      pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i) &
    528534                                                          ) * rmask(j,i,sr)    &
    529535                                                            * flag
     
    563569                sums_l(:,41,0) = sums_l(:,41,0) + sums_l(:,41,i)
    564570                sums_l(:,44,0) = sums_l(:,44,0) + sums_l(:,44,i)
    565                 IF ( cloud_physics )  THEN
     571                IF ( bulk_cloud_model )  THEN
    566572                   sums_l(:,42,0) = sums_l(:,42,0) + sums_l(:,42,i)
    567573                   sums_l(:,43,0) = sums_l(:,43,0) + sums_l(:,43,i)
     
    598604          CALL MPI_ALLREDUCE( sums_l(nzb,41,0), sums(nzb,41), nzt+2-nzb,       &
    599605                              MPI_REAL, MPI_SUM, comm2d, ierr )
    600           IF ( cloud_physics ) THEN
     606          IF ( bulk_cloud_model ) THEN
    601607             IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    602608             CALL MPI_ALLREDUCE( sums_l(nzb,42,0), sums(nzb,42), nzt+2-nzb,    &
     
    621627          sums(:,44) = sums_l(:,44,0)
    622628          sums(:,41) = sums_l(:,41,0)
    623           IF ( cloud_physics ) THEN
     629          IF ( bulk_cloud_model ) THEN
    624630             sums(:,42) = sums_l(:,42,0)
    625631             sums(:,43) = sums_l(:,43,0)
     
    654660          hom(:,1,44,sr) = sums(:,44)             ! vpt
    655661          hom(:,1,41,sr) = sums(:,41)             ! qv (q)
    656           IF ( cloud_physics ) THEN
     662          IF ( bulk_cloud_model ) THEN
    657663             sums(:,42) = sums(:,42) / ngp_2dh_s_inner(:,sr)
    658664             sums(:,43) = sums(:,43) / ngp_2dh_s_inner(:,sr)
     
    948954                                               * ddzu(k+1) * rmask(j,i,sr) * flag
    949955
    950                    IF ( cloud_physics ) THEN
     956                   IF ( bulk_cloud_model ) THEN
    951957                      sums_l(k,51,tn) = sums_l(k,51,tn)                        &
    952958                                         - 0.5_wp * ( kh(k,j,i) + kh(k+1,j,i) )&
     
    10141020                                          * heatflux_output_conversion(k+ki)
    10151021                            ENDIF
    1016                             IF ( cloud_physics )  THEN
     1022                            IF ( bulk_cloud_model )  THEN
    10171023!
    10181024!--                            Formula does not work if ql(k+ki) /= 0.0
     
    10671073                                          * heatflux_output_conversion(nzb)
    10681074                      ENDIF
    1069                       IF ( cloud_physics )  THEN
     1075                      IF ( bulk_cloud_model )  THEN
    10701076!
    10711077!--                      Formula does not work if ql(nzb) /= 0.0
     
    11181124                                          * heatflux_output_conversion(nzb)
    11191125                      ENDIF
    1120                       IF ( cloud_physics )  THEN
     1126                      IF ( bulk_cloud_model )  THEN
    11211127!
    11221128!--                      Formula does not work if ql(nzb) /= 0.0
     
    12931299                                           * heatflux_output_conversion(nzt)
    12941300                   ENDIF
    1295                    IF ( cloud_physics )  THEN
     1301                   IF ( bulk_cloud_model )  THEN
    12961302!
    12971303!--                   Formula does not work if ql(nzb) /= 0.0
     
    13471353!--             content, rain drop concentration and rain water content
    13481354                IF ( humidity )  THEN
    1349                    IF ( cloud_physics .OR. cloud_droplets )  THEN
     1355                   IF ( bulk_cloud_model .OR. cloud_droplets )  THEN
    13501356                      pts = 0.5_wp * ( vpt(k,j,i)   - hom(k,1,44,sr) +         &
    13511357                                    vpt(k+1,j,i) - hom(k+1,1,44,sr) )
  • palm/trunk/SOURCE/header.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    378381    USE arrays_3d,                                                             &
    379382        ONLY:  pt_init, q_init, s_init, sa_init, ug, vg, w_subs, zu, zw
    380        
     383
     384    USE basic_constants_and_equations_mod,                                     &
     385        ONLY:  g, kappa, l_v, r_d
     386
     387    USE bulk_cloud_model_mod,                                                  &
     388        ONLY:  bulk_cloud_model, bcm_header
     389
    381390    USE control_parameters
    382        
    383     USE cloud_parameters,                                                      &
    384         ONLY:  cp, l_v, r_d
    385391
    386392    USE cpulog,                                                                &
     
    413419    USE lsf_nudging_mod,                                                       &
    414420        ONLY:  lsf_nudging_header
    415 
    416     USE microphysics_mod,                                                      &
    417         ONLY:  cloud_water_sedimentation, collision_turbulence,                &
    418                c_sedimentation, limiter_sedimentation, nc_const,               &
    419                ventilation_effect
    420421
    421422    USE model_1d_mod,                                                          &
     
    742743    IF ( neutral )  WRITE ( io, 131 )  pt_surface
    743744    IF ( humidity )  THEN
    744        IF ( .NOT. cloud_physics )  THEN
     745       IF ( .NOT. bulk_cloud_model )  THEN
    745746          WRITE ( io, 129 )
    746747       ELSE
     
    19021903
    19031904!
    1904 !-- Cloud physics parameters
    1905     IF ( cloud_physics )  THEN
    1906        WRITE ( io, 415 )
    1907        WRITE ( io, 416 ) surface_pressure, r_d, rho_surface, cp, l_v
    1908        IF ( microphysics_seifert )  THEN
    1909           WRITE ( io, 510 ) 1.0E-6_wp * nc_const
    1910           WRITE ( io, 511 ) c_sedimentation
    1911        ENDIF
    1912     ENDIF
     1905!-- Output of microphysics information
     1906    IF ( bulk_cloud_model )  CALL bcm_header( io )
    19131907
    19141908!
    19151909!-- Cloud physcis parameters / quantities / numerical methods
    19161910    WRITE ( io, 430 )
    1917     IF ( humidity .AND. .NOT. cloud_physics .AND. .NOT. cloud_droplets)  THEN
     1911    IF ( humidity .AND. .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets)  THEN
    19181912       WRITE ( io, 431 )
    1919     ELSEIF ( humidity  .AND.  cloud_physics )  THEN
    1920        WRITE ( io, 432 )
    1921        IF ( cloud_top_radiation )  WRITE ( io, 132 )
    1922        IF ( microphysics_kessler )  THEN
    1923           WRITE ( io, 133 )
    1924        ELSEIF ( microphysics_seifert )  THEN
    1925           IF ( cloud_water_sedimentation )  WRITE ( io, 506 )
    1926           WRITE ( io, 505 )
    1927           IF ( collision_turbulence )  WRITE ( io, 507 )
    1928           IF ( ventilation_effect )  WRITE ( io, 508 )
    1929           IF ( limiter_sedimentation )  WRITE ( io, 509 )
    1930        ENDIF
    1931     ELSEIF ( humidity  .AND.  cloud_droplets )  THEN
     1913    ENDIF
     1914    IF ( cloud_top_radiation )  WRITE ( io, 132 )
     1915    IF ( humidity  .AND.  cloud_droplets )  THEN
    19321916       WRITE ( io, 433 )
    19331917       IF ( curvature_solution_effects )  WRITE ( io, 434 )
     
    21052089132 FORMAT ('     Parameterization of long-wave radiation processes via'/ &
    21062090            '     effective emissivity scheme')
    2107 133 FORMAT ('     Precipitation parameterization via Kessler-Scheme')
    21082091134 FORMAT (' --> Additional prognostic equation for a passive scalar')
    21092092135 FORMAT (' --> Solve perturbation pressure via ',A,' method (', &
     
    23272310413 FORMAT ('       Reference density in buoyancy terms: ',F8.3,' kg/m**3')
    23282311414 FORMAT ('       Reference temperature in buoyancy terms: ',F8.4,' K')
    2329 415 FORMAT (/' Cloud physics parameters:'/ &
    2330              ' ------------------------'/)
    2331 416 FORMAT ('    Surface pressure   :   p_0   = ',F7.2,' hPa'/      &
    2332             '    Gas constant       :   R     = ',F5.1,' J/(kg K)'/ &
    2333             '    Density of air     :   rho_0 =',F6.3,' kg/m**3'/  &
    2334             '    Specific heat cap. :   c_p   = ',F6.1,' J/(kg K)'/ &
    2335             '    Vapourization heat :   L_v   =',E9.2,' J/kg')
    23362312420 FORMAT (/'    Characteristic levels of the initial temperature profile:'// &
    23372313            '       Height:        ',A,'  m'/ &
     
    23762352              ' ----------------------------------'/)
    23772353431 FORMAT ('    Humidity is considered, bu no condensation')
    2378 432 FORMAT ('    Bulk scheme with liquid water potential temperature and'/ &
    2379             '    total water content is used.'/ &
    2380             '    Condensation is parameterized via 0% - or 100% scheme.')
    23812354433 FORMAT ('    Cloud droplets treated explicitly using the Lagrangian part', &
    23822355                 'icle model')
     
    24732446503 FORMAT (' --> Momentum advection via Wicker-Skamarock-Scheme 5th order')
    24742447504 FORMAT (' --> Scalar advection via Wicker-Skamarock-Scheme 5th order')
    2475 505 FORMAT ('    Precipitation parameterization via Seifert-Beheng-Scheme')
    2476 506 FORMAT ('    Cloud water sedimentation parameterization via Stokes law')
    2477 507 FORMAT ('    Turbulence effects on precipitation process')
    2478 508 FORMAT ('    Ventilation effects on evaporation of rain drops')
    2479 509 FORMAT ('    Slope limiter used for sedimentation process')
    2480 510 FORMAT ('    Droplet density    :   N_c   = ',F6.1,' 1/cm**3')
    2481 511 FORMAT ('    Sedimentation Courant number:                  '/&
    2482             '                               C_s   =',F4.1,'        ')
    24832448512 FORMAT (/' Date:                 ',A8,6X,'Run:       ',A34/      &
    24842449            ' Time:                 ',A8,6X,'Run-No.:   ',I2.2/     &
  • palm/trunk/SOURCE/init_3d_model.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    255258! precipitation_amount, precipitation_rate, prr moved to arrays_3d.
    256259! Initialization of nc_1d, nr_1d, pt_1d, qc_1d, qr_1d, q_1d moved to
    257 ! microphysics_init.
     260! bcm_init.
    258261!
    259262! 1845 2016-04-08 08:29:13Z raasch
     
    498501    USE arrays_3d
    499502
     503    USE basic_constants_and_equations_mod,                                     &
     504        ONLY:  c_p, g, l_v, pi, r_d, exner_function, exner_function_invers,    &
     505               ideal_gas_law_rho, ideal_gas_law_rho_pt, barometric_formula
     506
     507    USE bulk_cloud_model_mod,                                                  &
     508        ONLY:  bulk_cloud_model, bcm_init, bcm_init_arrays
     509
    500510    USE chemistry_model_mod,                                                   &
    501511        ONLY:  chem_emissions
    502512
    503     USE cloud_parameters,                                                      &
    504         ONLY:  cp, l_v, r_d
    505 
    506     USE constants,                                                             &
    507         ONLY:  pi
    508    
    509513    USE control_parameters
    510514   
     
    530534    USE lsf_nudging_mod,                                                       &
    531535        ONLY:  lsf_init, ls_forcing_surf, nudge_init
    532 
    533     USE microphysics_mod,                                                      &
    534         ONLY:  microphysics_init
    535536
    536537    USE model_1d_mod,                                                          &
     
    738739#endif
    739740
    740        IF ( cloud_physics )  THEN
    741 !
    742 !--          Liquid water content
    743 #if defined( __nopointer )
    744           ALLOCATE ( ql(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    745 #else
    746           ALLOCATE ( ql_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    747 #endif
    748 
    749 !
    750 !--       3D-cloud water content
    751           IF ( .NOT. microphysics_morrison )  THEN
    752 #if defined( __nopointer )
    753              ALLOCATE( qc(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    754 #else
    755              ALLOCATE( qc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    756 #endif
    757           ENDIF
    758 !
    759 !--       Precipitation amount and rate (only needed if output is switched)
    760           ALLOCATE( precipitation_amount(nysg:nyng,nxlg:nxrg) )
    761 
    762 !
    763 !--       3d-precipitation rate
    764           ALLOCATE( prr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    765 
    766           IF ( microphysics_morrison )  THEN
    767 !
    768 !--          3D-cloud drop water content, cloud drop concentration arrays
    769 #if defined( __nopointer )
    770              ALLOCATE( nc(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                      &
    771                        nc_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    772                        qc(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                      &
    773                        qc_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    774                        tnc_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                   &
    775                        tqc_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    776 #else
    777              ALLOCATE( nc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    778                        nc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    779                        nc_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    780                        qc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    781                        qc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    782                        qc_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    783 #endif
    784           ENDIF
    785 
    786           IF ( microphysics_seifert )  THEN
    787 !
    788 !--          3D-rain water content, rain drop concentration arrays
    789 #if defined( __nopointer )
    790              ALLOCATE( nr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                      &
    791                        nr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    792                        qr(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                      &
    793                        qr_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    794                        tnr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                   &
    795                        tqr_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    796 #else
    797              ALLOCATE( nr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    798                        nr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    799                        nr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    800                        qr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    801                        qr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    802                        qr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    803 #endif
    804           ENDIF
    805 
    806        ENDIF
    807 
    808741       IF ( cloud_droplets )  THEN
    809742!
     
    868801!
    869802!-- Density profile calculation for anelastic approximation
    870     t_surface = pt_surface * ( surface_pressure / 1000.0_wp )**( r_d / cp )
     803    t_surface = pt_surface * ( surface_pressure / 1000.0_wp )**( r_d / c_p )
    871804    IF ( TRIM( approximation ) == 'anelastic' ) THEN
    872805       DO  k = nzb, nzt+1
    873806          p_hydrostatic(k)    = surface_pressure * 100.0_wp *                  &
    874                                 ( 1 - ( g * zu(k) ) / ( cp * t_surface )       &
    875                                 )**( cp / r_d )
     807                                ( 1 - ( g * zu(k) ) / ( c_p * t_surface )      &
     808                                )**( c_p / r_d )
    876809          rho_air(k)          = ( p_hydrostatic(k) *                           &
    877810                                  ( 100000.0_wp / p_hydrostatic(k)             &
    878                                   )**( r_d / cp )                              &
     811                                  )**( r_d / c_p )                             &
    879812                                ) / ( r_d * pt_init(k) )
    880813       ENDDO
     
    887820       DO  k = nzb, nzt+1
    888821          p_hydrostatic(k)    = surface_pressure * 100.0_wp *                  &
    889                                 ( 1 - ( g * zu(nzb) ) / ( cp * t_surface )       &
    890                                 )**( cp / r_d )
     822                                ( 1 - ( g * zu(nzb) ) / ( c_p * t_surface )    &
     823                                )**( c_p / r_d )
    891824          rho_air(k)          = ( p_hydrostatic(k) *                           &
    892825                                  ( 100000.0_wp / p_hydrostatic(k)             &
    893                                   )**( r_d / cp )                              &
     826                                  )**( r_d / c_p )                             &
    894827                                ) / ( r_d * pt_init(nzb) )
    895828       ENDDO
     
    923856            momentumflux_input_conversion(k)  = rho_air_zw(k)
    924857        ELSEIF ( TRIM( flux_input_mode ) == 'dynamic' ) THEN
    925             heatflux_input_conversion(k)      = 1.0_wp / cp
     858            heatflux_input_conversion(k)      = 1.0_wp / c_p
    926859            waterflux_input_conversion(k)     = 1.0_wp / l_v
    927860            momentumflux_input_conversion(k)  = 1.0_wp
     
    933866            momentumflux_output_conversion(k) = drho_air_zw(k)
    934867        ELSEIF ( TRIM( flux_output_mode ) == 'dynamic' ) THEN
    935             heatflux_output_conversion(k)     = cp
     868            heatflux_output_conversion(k)     = c_p
    936869            waterflux_output_conversion(k)    = l_v
    937870            momentumflux_output_conversion(k) = 1.0_wp
     
    1065998    IF ( humidity )  THEN
    1066999       q => q_1;  q_p => q_2;  tq_m => q_3
    1067        IF ( humidity )  THEN
    1068           vpt  => vpt_1   
    1069           IF ( cloud_physics )  THEN
    1070              ql => ql_1
    1071              IF ( .NOT. microphysics_morrison )  THEN
    1072                 qc => qc_1
    1073              ENDIF
    1074              IF ( microphysics_morrison )  THEN
    1075                 qc => qc_1;  qc_p  => qc_2;  tqc_m  => qc_3
    1076                 nc => nc_1;  nc_p  => nc_2;  tnc_m  => nc_3
    1077              ENDIF
    1078              IF ( microphysics_seifert )  THEN
    1079                 qr => qr_1;  qr_p  => qr_2;  tqr_m  => qr_3
    1080                 nr => nr_1;  nr_p  => nr_2;  tnr_m  => nr_3
    1081              ENDIF
    1082           ENDIF
    1083        ENDIF
     1000       vpt  => vpt_1
    10841001       IF ( cloud_droplets )  THEN
    10851002          ql   => ql_1
     
    11021019!-- Initialize surface arrays
    11031020    CALL init_surface_arrays
     1021!
     1022!-- Allocate microphysics module arrays
     1023    IF ( bulk_cloud_model )  THEN
     1024       CALL bcm_init_arrays
     1025    ENDIF
    11041026!
    11051027!-- Allocate land surface model arrays
     
    12971219!--       Set inital w to 0
    12981220          w = 0.0_wp
    1299 !
    1300 !--       Initialize the remaining quantities
    1301           IF ( humidity )  THEN
    1302              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1303                 DO  i = nxlg, nxrg
    1304                    DO  j = nysg, nyng
    1305                       qc(:,j,i) = 0.0_wp
    1306                       nc(:,j,i) = 0.0_wp
    1307                    ENDDO
    1308                 ENDDO
    1309              ENDIF
    1310 
    1311              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1312                 DO  i = nxlg, nxrg
    1313                    DO  j = nysg, nyng
    1314                       qr(:,j,i) = 0.0_wp
    1315                       nr(:,j,i) = 0.0_wp
    1316                    ENDDO
    1317                 ENDDO
    1318              ENDIF
    1319 
    1320           ENDIF
    13211221
    13221222          IF ( passive_scalar )  THEN
     
    13761276                ENDDO
    13771277             ENDDO
    1378              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1379                 DO  i = nxlg, nxrg
    1380                    DO  j = nysg, nyng
    1381                       qc(:,j,i) = 0.0_wp
    1382                       nc(:,j,i) = 0.0_wp
    1383                    ENDDO
    1384                 ENDDO
    1385              ENDIF
    1386              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1387                 DO  i = nxlg, nxrg
    1388                    DO  j = nysg, nyng
    1389                       qr(:,j,i) = 0.0_wp
    1390                       nr(:,j,i) = 0.0_wp
    1391                    ENDDO
    1392                 ENDDO
    1393              ENDIF
    13941278          ENDIF
    13951279
     
    14851369                ENDDO
    14861370             ENDDO
    1487              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1488                 DO  i = nxlg, nxrg
    1489                    DO  j = nysg, nyng
    1490                       qc(:,j,i) = 0.0_wp
    1491                       nc(:,j,i) = 0.0_wp
    1492                    ENDDO
    1493                 ENDDO
    1494              ENDIF
    1495 
    1496              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1497                 DO  i = nxlg, nxrg
    1498                    DO  j = nysg, nyng
    1499                       qr(:,j,i) = 0.0_wp
    1500                       nr(:,j,i) = 0.0_wp
    1501                    ENDDO
    1502                 ENDDO
    1503              ENDIF
    1504 
    15051371          ENDIF
    15061372         
     
    15981464!--       Store initial profile of mixing ratio and potential
    15991465!--       temperature
    1600           IF ( cloud_physics  .OR.  cloud_droplets ) THEN
     1466          IF ( bulk_cloud_model  .OR.  cloud_droplets ) THEN
    16011467             hom(:,1,27,:) = SPREAD(  q(:,nys,nxl), 2, statistic_regions+1 )
    16021468             hom(:,1,28,:) = SPREAD( pt(:,nys,nxl), 2, statistic_regions+1 )
     
    16451511!--    In case of iterative solvers, p must get an initial value
    16461512       IF ( psolver(1:9) == 'multigrid'  .OR.  psolver == 'sor' )  p = 0.0_wp
    1647 
    1648 !
    1649 !--    Treating cloud physics, liquid water content and precipitation amount
    1650 !--    are zero at beginning of the simulation
    1651        IF ( cloud_physics )  THEN
    1652           ql = 0.0_wp
    1653           qc = 0.0_wp
    1654 
    1655           precipitation_amount = 0.0_wp
    1656        ENDIF
    16571513!
    16581514!--    Impose vortex with vertical axis on the initial velocity profile
     
    16931549          tq_m = 0.0_wp
    16941550          q_p = q
    1695           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1696              tqc_m = 0.0_wp
    1697              qc_p  = qc
    1698              tnc_m = 0.0_wp
    1699              nc_p  = nc
    1700           ENDIF
    1701           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1702              tqr_m = 0.0_wp
    1703              qr_p  = qr
    1704              tnr_m = 0.0_wp
    1705              nr_p  = nr
    1706           ENDIF
    17071551       ENDIF
    17081552       
     
    19631807       IF ( humidity )  THEN
    19641808          q_p = q
    1965           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1966              qc_p = qc
    1967              nc_p = nc
    1968           ENDIF
    1969           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1970              qr_p = qr
    1971              nr_p = nr
    1972           ENDIF
    19731809       ENDIF
    19741810       IF ( passive_scalar )  s_p  = s
     
    19821818       IF ( humidity )  THEN
    19831819          tq_m = 0.0_wp
    1984           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    1985              tqc_m = 0.0_wp
    1986              tnc_m = 0.0_wp
    1987           ENDIF
    1988           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    1989              tqr_m = 0.0_wp
    1990              tnr_m = 0.0_wp
    1991           ENDIF
    19921820       ENDIF
    19931821       IF ( passive_scalar )  ts_m  = 0.0_wp
     
    24172245       CALL init_ocean
    24182246
    2419     ELSE
     2247    ENDIF
    24202248!
    24212249!--    Initialize quantities for handling cloud physics
    24222250!--    This routine must be called before lpm_init, because
    2423 !--    otherwise, array pt_d_t, needed in data_output_dvrp (called by
     2251!--    otherwise, array d_exner, needed in data_output_dvrp (called by
    24242252!--    lpm_init) is not defined.
    2425        CALL init_cloud_physics
    2426 !
    2427 !--    Initialize bulk cloud microphysics
    2428        CALL microphysics_init
     2253    IF ( .NOT. ocean )  THEN
     2254
     2255       ALLOCATE( hyp(nzb:nzt+1) )
     2256       ALLOCATE( d_exner(nzb:nzt+1) )
     2257       ALLOCATE( exner(nzb:nzt+1) )
     2258       ALLOCATE( hyrho(nzb:nzt+1) )
     2259!
     2260!--    Check temperature in case of too large domain height
     2261       DO  k = nzb, nzt+1
     2262          IF ( ( pt_surface * exner_function(surface_pressure * 100.0_wp) - g/c_p * zu(k) ) < 0.0_wp )  THEN
     2263             WRITE( message_string, * )  'absolute temperature < 0.0 at zu(', k, &
     2264                                         ') = ', zu(k)
     2265             CALL message( 'init_bulk_cloud_model', 'PA0142', 1, 2, 0, 6, 0 )
     2266          ENDIF
     2267       ENDDO
     2268
     2269!
     2270!--    Calculate vertical profile of the hydrostatic pressure (hyp)
     2271       hyp    = barometric_formula(zu, pt_surface * exner_function(surface_pressure * 100.0_wp), surface_pressure * 100.0_wp)
     2272       d_exner = exner_function_invers(hyp)
     2273       exner = 1.0_wp / exner_function_invers(hyp)
     2274       hyrho  = ideal_gas_law_rho_pt(hyp, pt_init)
     2275!
     2276!--    Compute reference density
     2277       rho_surface = ideal_gas_law_rho(surface_pressure * 100.0_wp, pt_surface * exner_function(surface_pressure * 100.0_wp))
     2278
     2279    ENDIF
     2280!
     2281!-- If required, initialize quantities needed for the microphysics module
     2282    IF ( bulk_cloud_model )  THEN
     2283       CALL bcm_init
    24292284    ENDIF
    24302285
  • palm/trunk/SOURCE/init_masks.f90

    r3065 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3065 2018-06-12 07:03:02Z Giersch
    2730! dz_stretch_level was replaced by dz_stretch_level_start
    2831!
     
    134137
    135138    USE control_parameters,                                                    &
    136         ONLY:  constant_diffusion, cloud_droplets, cloud_physics,              &
     139        ONLY:  constant_diffusion, cloud_droplets,                             &
    137140               data_output_masks, data_output_masks_user,                      &
    138141               doav, doav_n, domask, domask_no, dz, dz_stretch_level_start,    &
     
    142145               mask_x_loop, mask_xyz_dimension, mask_y, mask_y_loop, mask_z,   &
    143146               mask_z_loop, max_masks,  message_string, mid,                   &
    144                microphysics_morrison, microphysics_seifert, passive_scalar,    &
    145                ocean, varnamelength
    146                
     147               passive_scalar, ocean, varnamelength
     148
    147149
    148150    USE grid_variables,                                                        &
     
    153155
    154156    USE kinds
     157
     158    USE bulk_cloud_model_mod,                                                  &
     159        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    155160
    156161    USE netcdf_interface,                                                      &
     
    309314
    310315             CASE ( 'lpt' )
    311                 IF ( .NOT. cloud_physics )  THEN
    312                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    313                         '" requires cloud_physics = .TRUE.'
     316                IF ( .NOT. bulk_cloud_model )  THEN
     317                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     318                        '" requires bulk_cloud_model = .TRUE.'
    314319                   CALL message( 'init_masks', 'PA0108', 1, 2, 0, 6, 0 )
    315320                ENDIF
     
    317322
    318323             CASE ( 'nc' )
    319                 IF ( .NOT. cloud_physics )  THEN
    320                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    321                         '" requires cloud_physics = .TRUE.'
     324                IF ( .NOT. bulk_cloud_model )  THEN
     325                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     326                        '" requires bulk_cloud_model = .TRUE.'
    322327                   CALL message( 'init_masks', 'PA0108', 1, 2, 0, 6, 0 )
    323328                 ELSEIF ( .NOT. microphysics_morrison ) THEN
     
    329334
    330335             CASE ( 'nr' )
    331                 IF ( .NOT. cloud_physics )  THEN
    332                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    333                         '" requires cloud_physics = .TRUE.'
     336                IF ( .NOT. bulk_cloud_model )  THEN
     337                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     338                        '" requires bulk_cloud_model = .TRUE.'
    334339                   CALL message( 'init_masks', 'PA0108', 1, 2, 0, 6, 0 )
    335340                 ELSEIF ( .NOT. microphysics_seifert ) THEN
     
    360365
    361366             CASE ( 'qc' )
    362                 IF ( .NOT. cloud_physics )  THEN
     367                IF ( .NOT. bulk_cloud_model )  THEN
    363368                   message_string = 'output of "' // TRIM( var ) // '"' //     &
    364                             'requires cloud_physics = .TRUE.'
     369                            'requires bulk_cloud_model = .TRUE.'
    365370                   CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    366371                ENDIF
     
    368373
    369374             CASE ( 'ql' )
    370                 IF ( .NOT. ( cloud_physics  .OR.  cloud_droplets ) )  THEN
    371                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    372                         '" requires cloud_physics = .TRUE. or cloud_droplets', &
    373                         ' = .TRUE.'
     375                IF ( .NOT. ( bulk_cloud_model  .OR.  cloud_droplets ) )  THEN
     376                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     377                        '" requires bulk_cloud_model = .TRUE. or ',            &
     378                        'cloud_droplets = .TRUE.'
    374379                   CALL message( 'init_masks', 'PA0106', 1, 2, 0, 6, 0 )
    375380                ENDIF
     
    387392
    388393             CASE ( 'qv' )
    389                 IF ( .NOT. cloud_physics )  THEN
    390                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    391                         '" requires cloud_physics = .TRUE.'
     394                IF ( .NOT. bulk_cloud_model )  THEN
     395                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     396                        '" requires bulk_cloud_model = .TRUE.'
    392397                   CALL message( 'init_masks', 'PA0108', 1, 2, 0, 6, 0 )
    393398                ENDIF
     
    395400
    396401             CASE ( 'qr' )
    397                 IF ( .NOT. cloud_physics )  THEN
     402                IF ( .NOT. bulk_cloud_model )  THEN
    398403                   message_string = 'output of "' // TRIM( var ) // '" ' //    &
    399                             'requires cloud_physics = .TRUE.'
     404                            'requires bulk_cloud_model = .TRUE.'
    400405                   CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    401406                ELSEIF ( .NOT. microphysics_seifert ) THEN
  • palm/trunk/SOURCE/init_ocean.f90

    r3270 r3274  
    2525! ------------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3270 2018-09-24 06:28:20Z raasch
    2730! bugfix for r2502: wrong calculation of hyp(nzt) in second iterative step
    2831!
     
    9093        ONLY:  dzu, hyp, pt_init, ref_state, sa_init, zu, zw
    9194
     95    USE basic_constants_and_equations_mod,                                     &
     96        ONLY:  g
     97
    9298    USE control_parameters,                                                    &
    93         ONLY:  g, molecular_viscosity, prho_reference, rho_surface,            &
     99        ONLY:  molecular_viscosity, prho_reference, rho_surface,               &
    94100               rho_reference, surface_pressure, use_single_reference_value
    95101
  • palm/trunk/SOURCE/init_rankine.f90

    r2718 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    7376        ONLY:  initializing_actions, n_sor, nsor, nsor_ini   
    7477
    75     USE constants,                                                             &
     78    USE basic_constants_and_equations_mod,                                     &
    7679        ONLY:  pi
    7780
  • palm/trunk/SOURCE/init_slope.f90

    r2718 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    7275        ONLY:  pt, pt_init, pt_slope_ref, zu
    7376       
    74     USE constants,                                                             &
     77    USE basic_constants_and_equations_mod,                                     &
    7578        ONLY:  pi
    7679                   
  • palm/trunk/SOURCE/interaction_droplets_ptq.f90

    r3040 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3040 2018-05-25 10:22:08Z schwenkel
    2730! Changed the name specific humidity to mixing ratio
    2831!
     
    7477!
    7578! 799 2011-12-21 17:48:03Z franke
    76 ! Bugfix: pt_d_t(k) was missing in calculation of pt_p
     79! Bugfix: d_exner(k) was missing in calculation of pt_p
    7780!
    7881! RCS Log replace by Id keyword, revision history cleaned up
     
    8992 MODULE interaction_droplets_ptq_mod
    9093 
     94
     95    USE arrays_3d,                                                             &
     96        ONLY:  pt_p, ql_c, q_p, d_exner
     97
     98    USE basic_constants_and_equations_mod,                                     &
     99        ONLY:  lv_d_cp
     100
     101    USE indices,                                                               &
     102        ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
     103
     104    USE kinds
     105
     106    USE pegrid
    91107
    92108    PRIVATE
     
    111127    SUBROUTINE i_droplets_ptq
    112128
    113        USE arrays_3d,                                                          &
    114            ONLY:  pt_p, ql_c, q_p
    115            
    116        USE cloud_parameters,                                                   &
    117            ONLY:  l_d_cp, pt_d_t
    118            
    119        USE indices,                                                            &
    120            ONLY:  nxl, nxr, nyn, nys, nzb, nzt, wall_flags_0
    121            
    122        USE kinds
    123 
    124        USE pegrid
    125 
    126129       IMPLICIT NONE
    127130
     
    140143
    141144                q_p(k,j,i)  = q_p(k,j,i)  - ql_c(k,j,i) * flag
    142                 pt_p(k,j,i) = pt_p(k,j,i) + l_d_cp * ql_c(k,j,i) * pt_d_t(k)  &
     145                pt_p(k,j,i) = pt_p(k,j,i) + lv_d_cp * ql_c(k,j,i) * d_exner(k) &
    143146                                                        * flag
    144147             ENDDO
     
    155158!------------------------------------------------------------------------------!
    156159    SUBROUTINE i_droplets_ptq_ij( i, j )
    157 
    158        USE arrays_3d,                                                          &
    159            ONLY:  pt_p, ql_c, q_p
    160 
    161        USE cloud_parameters,                                                   &
    162            ONLY:  l_d_cp, pt_d_t
    163 
    164        USE indices,                                                            &
    165            ONLY:  nzb, nzt, wall_flags_0
    166 
    167        USE kinds,                                                              &
    168            ONLY:  iwp, wp
    169 
    170        USE pegrid
    171160
    172161       IMPLICIT NONE
     
    185174
    186175          q_p(k,j,i)  = q_p(k,j,i)  - ql_c(k,j,i) * flag
    187           pt_p(k,j,i) = pt_p(k,j,i) + l_d_cp * ql_c(k,j,i) * pt_d_t(k) * flag
     176          pt_p(k,j,i) = pt_p(k,j,i) + lv_d_cp * ql_c(k,j,i) * d_exner(k) * flag
    188177       ENDDO
    189178
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r3271 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3271 2018-09-24 08:20:34Z suehring
    2730! Several bugfixes:
    2831! - Initialization of pt_surface array with soil temperature in the uppermost
     
    474477 
    475478    USE arrays_3d,                                                             &
    476         ONLY:  hyp, pt, prr, q, q_p, ql, vpt, u, v, w
     479        ONLY:  hyp, pt, prr, q, q_p, ql, vpt, u, v, w, hyrho, exner, d_exner
     480
     481    USE basic_constants_and_equations_mod,                                     &
     482        ONLY:  c_p, g, lv_d_cp, l_v, magnus, rho_l, r_d, r_v
    477483
    478484    USE calc_mean_profile_mod,                                                 &
    479485        ONLY:  calc_mean_profile
    480486
    481     USE cloud_parameters,                                                      &
    482         ONLY:  cp, hyrho, l_d_cp, l_d_r, l_v, pt_d_t, rho_l, r_d, r_v
    483 
    484487    USE control_parameters,                                                    &
    485         ONLY:  cloud_droplets, cloud_physics, coupling_start_time, dt_3d,      &
     488        ONLY:  cloud_droplets, coupling_start_time, dt_3d,      &
    486489               end_time, humidity, intermediate_timestep_count,                &
    487490               initializing_actions, intermediate_timestep_count_max,          &
    488                land_surface, max_masks, precipitation, pt_surface,             &
     491               land_surface, max_masks, pt_surface,             &
    489492               rho_surface, spinup, spinup_pt_mean, spinup_time,               &
    490493               surface_pressure, timestep_scheme, tsc,                         &
     
    493496    USE indices,                                                               &
    494497        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb
     498
     499    USE bulk_cloud_model_mod,                                                  &
     500        ONLY: bulk_cloud_model, precipitation
    495501
    496502    USE netcdf_data_input_mod,                                                 &
     
    584590                deep_soil_temperature =  9999999.9_wp,  & !< Deep soil temperature (bottom boundary condition)
    585591                drho_l_lv,                              & !< (rho_l * l_v)**-1
    586                 exn,                                    & !< value of the Exner function
    587592                field_capacity = 9999999.9_wp,          & !< NAMELIST m_fc
    588593                f_shortwave_incoming = 9999999.9_wp,    & !< NAMELIST f_sw_in
     
    604609                rho_cp,                                 & !< rho_surface * cp
    605610                rho_lv,                                 & !< rho_ocean * l_v
    606                 rd_d_rv,                                & !< r_d / r_v
    607611                saturation_moisture = 9999999.9_wp,     & !< NAMELIST m_sat
    608612                skip_time_do_lsm = 0.0_wp,              & !< LSM is not called before this time
     
    17341738 SUBROUTINE lsm_energy_balance( horizontal, l )
    17351739
    1736     USE diagnostic_quantities_mod,                                             &
    1737         ONLY:  magnus
    1738 
    17391740    USE pegrid
    17401741
     
    18161817    j_off = surf%joff
    18171818    i_off = surf%ioff
    1818    
    1819 !
    1820 !-- Calculate the exner function for the current time step
    1821     exn = ( surface_pressure / 1000.0_wp )**0.286_wp
    18221819
    18231820    DO  m = 1, surf%ns
     
    18891886!--    time step is used here. Note that this formulation is the
    18901887!--    equivalent to the ECMWF formulation using drag coefficients
    1891 !        IF ( cloud_physics )  THEN
    1892 !           pt1 = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1888!        IF ( bulk_cloud_model )  THEN
     1889!           pt1 = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    18931890!           qv1 = q(k,j,i) - ql(k,j,i)
    18941891!        ELSEIF ( cloud_droplets ) THEN
    1895 !           pt1 = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1892!           pt1 = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    18961893!           qv1 = q(k,j,i)
    18971894!        ELSE
     
    20972094!--       Denominator of the prognostic equation
    20982095          coef_2 = surf%rad_lw_out_change_0(m) + f_qsws * dq_s_dt              &
    2099                    + lambda_surface + f_shf / exn
     2096                   + lambda_surface + f_shf / exner(nzb)
    21002097       ELSE
    21012098!
     
    21072104!
    21082105!--       Denominator of the prognostic equation
    2109           coef_2 = surf%rad_lw_out_change_0(m) + lambda_surface + f_shf / exn
     2106          coef_2 = surf%rad_lw_out_change_0(m) + lambda_surface + f_shf / exner(nzb)
    21102107
    21112108       ENDIF
     
    21602157
    21612158
    2162 !        pt(k+k_off,j+j_off,i+i_off) = surf_t_surface_p%var_1d(m) / exn  !is actually no air temperature
    2163        surf%pt_surface(m)          = surf_t_surface_p%var_1d(m) / exn
     2159!        pt(k+k_off,j+j_off,i+i_off) = surf_t_surface_p%var_1d(m) / exner(nzb)  !is actually no air temperature
     2160       surf%pt_surface(m)          = surf_t_surface_p%var_1d(m) / exner(nzb)
    21642161
    21652162!
     
    21772174                                             - surf_t_soil%var_2d(nzb_soil,m) )
    21782175
    2179        surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / cp
     2176       surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / c_p
    21802177
    21812178       IF ( humidity )  THEN
     
    23302327    SUBROUTINE calc_q_surface
    23312328
    2332        USE diagnostic_quantities_mod
    2333 
    23342329       IMPLICIT NONE
    23352330
    2336        REAL(wp) :: resistance    !< aerodynamic and soil resistance term
     2331       REAL(wp) ::  e_s           !< saturation water vapor pressure
     2332       REAL(wp) ::  q_s           !< saturation mixing ratio
     2333       REAL(wp) ::  resistance    !< aerodynamic and soil resistance term
    23372334
    23382335       DO  m = 1, surf%ns
     
    23532350!
    23542351!--       Calculate mixing ratio at surface
    2355           IF ( cloud_physics )  THEN
     2352          IF ( bulk_cloud_model )  THEN
    23562353             q(k+k_off,j+j_off,i+i_off) = resistance * q_s +                   &
    23572354                                        ( 1.0_wp - resistance ) *              &
     
    24712468!------------------------------------------------------------------------------!
    24722469    SUBROUTINE lsm_init
    2473    
     2470
    24742471       USE control_parameters,                                                 &
    24752472           ONLY:  message_string
     
    25012498       REAL(wp), DIMENSION(:), ALLOCATABLE ::  bound, bound_root_fr  !< temporary arrays for storing index bounds
    25022499       REAL(wp), DIMENSION(:), ALLOCATABLE ::  pr_soil_init !< temporary array used for averaging soil profiles
    2503 
    2504 !
    2505 !--    Calculate Exner function
    2506        exn = ( surface_pressure / 1000.0_wp )**0.286_wp
    25072500!
    25082501!--    If no cloud physics is used, rho_surface has not been calculated before
    2509        IF (  .NOT.  cloud_physics  .AND.  .NOT.  cloud_droplets )  THEN
     2502       IF (  .NOT.  bulk_cloud_model  .AND.  .NOT.  cloud_droplets )  THEN
    25102503          CALL calc_mean_profile( pt, 4 )
    2511           rho_surface = surface_pressure * 100.0_wp / ( r_d * hom(topo_min_level+1,1,4,0) * exn )
     2504          rho_surface = hyp(nzb) / ( r_d * hom(topo_min_level+1,1,4,0) * exner(nzb) )
    25122505       ENDIF
    25132506
    25142507!
    25152508!--    Calculate frequently used parameters
    2516        rho_cp    = cp * rho_surface
    2517        rd_d_rv   = r_d / r_v
     2509       rho_cp    = c_p * rho_surface
    25182510       rho_lv    = rho_surface * l_v
    25192511       drho_l_lv = 1.0_wp / (rho_l * l_v)
     
    44514443!--          uppermost layer
    44524444             t_surface_h%var_1d(m)    = t_soil_h%var_2d(nzb_soil,m)
    4453              surf_lsm_h%pt_surface(m) = t_soil_h%var_2d(nzb_soil,m) / exn
     4445             surf_lsm_h%pt_surface(m) = t_soil_h%var_2d(nzb_soil,m) / exner(nzb)
    44544446             
    4455              IF ( cloud_physics  .OR. cloud_droplets ) THEN
    4456                 surf_lsm_h%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     4447             IF ( bulk_cloud_model  .OR. cloud_droplets ) THEN
     4448                surf_lsm_h%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    44574449             ELSE
    44584450                surf_lsm_h%pt1(m) = pt(k,j,i)
     
    44804472!--             uppermost layer
    44814473                t_surface_v(l)%var_1d(m)      = t_soil_v(l)%var_2d(nzb_soil,m)
    4482                 surf_lsm_v(l)%pt_surface(m)   = t_soil_v(l)%var_2d(nzb_soil,m) / exn
    4483 
    4484                 IF ( cloud_physics  .OR. cloud_droplets ) THEN
    4485                    surf_lsm_v(l)%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     4474                surf_lsm_v(l)%pt_surface(m)   = t_soil_v(l)%var_2d(nzb_soil,m) / exner(nzb)
     4475
     4476                IF ( bulk_cloud_model  .OR. cloud_droplets ) THEN
     4477                   surf_lsm_v(l)%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    44864478                ELSE
    44874479                   surf_lsm_v(l)%pt1(m) = pt(k,j,i)
     
    70787070
    70797071       USE control_parameters,                                                 &
    7080            ONLY: g, message_string, molecular_viscosity
     7072           ONLY: message_string, molecular_viscosity
    70817073
    70827074       IMPLICIT NONE
  • palm/trunk/SOURCE/lpm_advec.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    173176        ONLY:  de_dx, de_dy, de_dz, diss, dzw, e, km, u, v, w, zu, zw
    174177
     178    USE basic_constants_and_equations_mod,                                     &
     179        ONLY:  g, kappa
     180
    175181    USE cpulog
    176182
     
    179185    USE control_parameters,                                                    &
    180186        ONLY:  cloud_droplets, constant_flux_layer, dt_3d, dt_3d_reached_l,    &
    181                dz, g, kappa, topography, u_gtrans, v_gtrans
     187               dz, topography, u_gtrans, v_gtrans
    182188
    183189    USE grid_variables,                                                        &
  • palm/trunk/SOURCE/lpm_calc_liquid_water_content.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    7578        ONLY:  dzw, ql, ql_v, ql_vp
    7679
    77     USE cloud_parameters,                                                      &
    78         ONLY:  rho_l
    79 
    80     USE constants,                                                             &
    81         ONLY:  pi
     80    USE basic_constants_and_equations_mod,                                     &
     81        ONLY:  pi, rho_l
    8282
    8383    USE control_parameters,                                                    &
  • palm/trunk/SOURCE/lpm_collision_kernels.f90

    r2718 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    135138 
    136139
    137     USE constants,                                                             &
    138         ONLY:  pi
     140    USE basic_constants_and_equations_mod,                                     &
     141        ONLY:  g, pi
    139142       
    140143    USE kinds
     
    404407
    405408       USE control_parameters,                                                 &
    406            ONLY:  g, molecular_viscosity
     409           ONLY:  molecular_viscosity
    407410   
    408411       USE particle_attributes,                                                &
  • palm/trunk/SOURCE/lpm_droplet_collision.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    122125        ONLY:  diss, dzw, ql_v, ql_vp
    123126
    124     USE cloud_parameters,                                                      &
    125         ONLY:  rho_l, rho_s
    126 
    127     USE constants,                                                             &
    128         ONLY:  pi
     127    USE basic_constants_and_equations_mod,                                     &
     128        ONLY:  pi, rho_l, rho_s
    129129
    130130    USE control_parameters,                                                    &
  • palm/trunk/SOURCE/lpm_droplet_condensation.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    136139
    137140    USE arrays_3d,                                                             &
    138         ONLY:  dzw, hyp, pt, q, ql_c, ql_v
    139 
    140     USE cloud_parameters,                                                      &
    141         ONLY:  l_v, molecular_weight_of_solute,                        &
    142                molecular_weight_of_water, rho_l, rho_s, r_v, vanthoff
    143 
    144     USE constants,                                                             &
    145         ONLY:  pi
     141        ONLY:  dzw, hyp, pt, q, ql_c, ql_v, exner
     142
     143    USE basic_constants_and_equations_mod,                                     &
     144        ONLY:  l_v, molecular_weight_of_solute, molecular_weight_of_water,     &
     145               magnus, pi, rho_l, rho_s, r_v, vanthoff
    146146
    147147    USE control_parameters,                                                    &
     
    150150    USE cpulog,                                                                &
    151151        ONLY:  cpu_log, log_point_s
    152 
    153     USE diagnostic_quantities_mod,                                             &
    154         ONLY:  magnus
    155152
    156153    USE grid_variables,                                                        &
     
    220217!
    221218!-- Absolute temperature
    222     t_int = pt(kp,jp,ip) * ( hyp(kp) / 100000.0_wp )**0.286_wp
     219    t_int = pt(kp,jp,ip) * exner(kp)
    223220!
    224221!-- Saturation vapor pressure (Eq. 10 in Bolton, 1980)
  • palm/trunk/SOURCE/lpm_init.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    10511054
    10521055    USE arrays_3d,                                                             &
    1053         ONLY: hyp, pt, q
    1054 
    1055     USE cloud_parameters,                                                      &
    1056         ONLY: molecular_weight_of_solute, molecular_weight_of_water, rho_l,    &
    1057               r_v, rho_s, vanthoff
    1058 
    1059     USE constants,                                                             &
    1060         ONLY: pi
    1061 
    1062     USE diagnostic_quantities_mod,                                             &
    1063         ONLY:  magnus
    1064 
     1056        ONLY: hyp, pt, q, exner
     1057
     1058    USE basic_constants_and_equations_mod,                                     &
     1059        ONLY: molecular_weight_of_solute, molecular_weight_of_water, magnus,   &
     1060              pi, rho_l, r_v, rho_s, vanthoff
    10651061
    10661062    USE kinds
     
    11991195!--          the sometimes lengthy growth toward their equilibrium radius within
    12001196!--          the simulation.
    1201              t_int  = pt(kp,jp,ip) * ( hyp(kp) / 100000.0_wp )**0.286_wp
     1197             t_int  = pt(kp,jp,ip) * exner(kp)
    12021198
    12031199             e_s = magnus( t_int )
  • palm/trunk/SOURCE/lpm_splitting.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    6164        ONLY:  ql
    6265
    63     USE cloud_parameters,                                                      &
    64         ONLY:  rho_l
    65 
    66     USE constants,                                                             &
    67         ONLY:  pi
     66    USE basic_constants_and_equations_mod,                                     &
     67        ONLY:  pi, rho_l
    6868
    6969    USE cpulog,                                                                &
  • palm/trunk/SOURCE/model_1d_mod.f90

    r3135 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3135 2018-07-16 14:43:04Z gronemeier
    2730! Bugfix: add +1 to c_3 according to Sogachev et al. (2012)
    2831!
     
    173176        ONLY:  dd2zu, ddzu, ddzw, dzu, dzw, pt_init, q_init, ug, u_init,       &
    174177               vg, v_init, zu
     178
     179    USE basic_constants_and_equations_mod,                                     &
     180        ONLY:  g, kappa, pi
    175181   
    176182    USE control_parameters,                                                    &
    177         ONLY:  constant_diffusion, constant_flux_layer, dissipation_1d, f, g,  &
     183        ONLY:  constant_diffusion, constant_flux_layer, dissipation_1d, f,     &
    178184               humidity, ibc_e_b, intermediate_timestep_count,                 &
    179                intermediate_timestep_count_max, kappa, km_constant,            &
     185               intermediate_timestep_count_max, km_constant,                   &
    180186               message_string, mixing_length_1d, prandtl_number,               &
    181187               roughness_length, run_description_header, simulated_time_chr,   &
     
    989995
    990996
    991     USE constants,                                                             &
    992         ONLY:  pi
    993 
    994997    IMPLICIT NONE
    995998
  • palm/trunk/SOURCE/modules.f90

    r3240 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3240 2018-09-12 12:04:40Z Giersch
    2730! max_pr_user_tmp has been defined as a control variable because it is not
    2831! local anymore
     
    985988    REAL(wp), DIMENSION(:), ALLOCATABLE ::  momentumflux_output_conversion  !< conversion factor array for momentumflux output
    986989
     990    REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyrho   !< density of air calculated with hydrostatic pressure
     991    REAL(wp), DIMENSION(:), ALLOCATABLE ::  exner   !< ratio of actual and potential temperature
     992    REAL(wp), DIMENSION(:), ALLOCATABLE ::  d_exner !< ratio of potential and actual temperature
     993
    987994    SAVE
    988995
     
    10441051 
    10451052 END MODULE averaging
    1046 
    1047 
    1048 !------------------------------------------------------------------------------!
    1049 ! Description:
    1050 ! ------------
    1051 !> Definition of variables and constants for cloud physics.
    1052 !------------------------------------------------------------------------------!
    1053  MODULE cloud_parameters
    1054  
    1055     USE kinds
    1056 
    1057     REAL(wp) ::  cp = 1005.0_wp                            !< heat capacity of dry air (J kg-1 K-1)
    1058     REAL(wp) ::  l_v = 2.5E+06_wp                          !< latent heat of vaporization (J kg-1)
    1059     REAL(wp) ::  l_d_cp                                    !< l_v / cp
    1060     REAL(wp) ::  l_d_r                                     !< l_v / r_d
    1061     REAL(wp) ::  l_d_rv                                    !< l_v / r_v   
    1062     REAL(wp) ::  molecular_weight_of_solute = 0.05844_wp   !< mol. m. NaCl (kg mol-1)
    1063     REAL(wp) ::  molecular_weight_of_water = 0.01801528_wp !< mol. m. H2O (kg mol-1)
    1064     REAL(wp) ::  rho_l = 1.0E3_wp                          !< density of water (kg m-3)
    1065     REAL(wp) ::  rho_s = 2165.0_wp                         !< density of NaCl (kg m-3)
    1066     REAL(wp) ::  r_d = 287.0_wp                            !< sp. gas const. dry air (J kg-1 K-1)
    1067     REAL(wp) ::  r_v = 461.51_wp                           !< sp. gas const. water vapor (J kg-1 K-1)
    1068     REAL(wp) ::  vanthoff = 2.0_wp                         !< van't Hoff factor for NaCl
    1069 
    1070 
    1071 
    1072     REAL(wp), DIMENSION(:), ALLOCATABLE ::  hyrho   !< density of air calculated with hydrostatic pressure
    1073     REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt_d_t  !< ratio of potential and actual temperature
    1074     REAL(wp), DIMENSION(:), ALLOCATABLE ::  t_d_pt  !< ratio of actual and potential temperature
    1075 
    1076     SAVE
    1077 
    1078  END MODULE cloud_parameters
    1079 
    1080 
    1081 !------------------------------------------------------------------------------!
    1082 ! Description:
    1083 ! ------------
    1084 !> Definition of general constants.
    1085 !------------------------------------------------------------------------------!
    1086  MODULE constants
    1087  
    1088     USE kinds
    1089 
    1090     REAL(wp) ::  pi = 3.141592654_wp  !< PI
    1091     REAL(wp) ::  adv_mom_1            !< 1/4 - constant used in 5th-order advection scheme for momentum advection (1st-order part)
    1092     REAL(wp) ::  adv_mom_3            !< 1/24 - constant used in 5th-order advection scheme for momentum advection (3rd-order part)
    1093     REAL(wp) ::  adv_mom_5            !< 1/120 - constant used in 5th-order advection scheme for momentum advection (5th-order part)
    1094     REAL(wp) ::  adv_sca_1            !< 1/2 - constant used in 5th-order advection scheme for scalar advection (1st-order part)
    1095     REAL(wp) ::  adv_sca_3            !< 1/12 - constant used in 5th-order advection scheme for scalar advection (3rd-order part)
    1096     REAL(wp) ::  adv_sca_5            !< 1/60 - constant used in 5th-order advection scheme for scalar advection (5th-order part)
    1097    
    1098     SAVE
    1099 
    1100  END MODULE constants
    11011053
    11021054 
     
    11571109    CHARACTER (LEN=20)   ::  bc_uv_b = 'dirichlet'                        !< namelist parameter
    11581110    CHARACTER (LEN=20)   ::  bc_uv_t = 'dirichlet'                        !< namelist parameter
    1159     CHARACTER (LEN=20)   ::  aerosol_bulk = 'nacl'                        !< namelist parameter
    1160     CHARACTER (LEN=20)   ::  cloud_scheme = 'saturation_adjust'           !< namelist parameter
    11611111    CHARACTER (LEN=20)   ::  coupling_mode = 'uncoupled'                  !< coupling mode for atmosphere-ocean coupling 
    11621112    CHARACTER (LEN=20)   ::  coupling_mode_remote = 'uncoupled'           !< coupling mode of the remote process in case of coupled atmosphere-ocean runs
     
    13111261    INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE ::  mask_k_global  !< global grid index of masked output point on z-dimension
    13121262
    1313     LOGICAL ::  aerosol_nacl =.TRUE.                             !< nacl aerosol for bulk scheme
    1314     LOGICAL ::  aerosol_c3h4o4 =.FALSE.                          !< malonic acid aerosol for bulk scheme
    1315     LOGICAL ::  aerosol_nh4no3 =.FALSE.                          !< malonic acid aerosol for bulk scheme
    13161263    LOGICAL ::  agent_time_unlimited = .FALSE.                   !< namelist parameter
    13171264    LOGICAL ::  air_chemistry = .FALSE.                          !< chemistry model switch
     
    13311278    LOGICAL ::  bc_radiation_s = .FALSE.                         !< radiation boundary condition for outflow at south domain boundary
    13321279    LOGICAL ::  calc_soil_moisture_during_spinup = .FALSE.       !< namelist parameter
    1333     LOGICAL ::  call_microphysics_at_all_substeps = .FALSE.      !< namelist parameter
    13341280    LOGICAL ::  call_psolver_at_all_substeps = .TRUE.            !< namelist parameter
    13351281    LOGICAL ::  child_domain  = .FALSE.                          !< flag indicating that model is nested in a parent domain
    13361282    LOGICAL ::  cloud_droplets = .FALSE.                         !< namelist parameter
    1337     LOGICAL ::  cloud_physics = .FALSE.                          !< namelist parameter
    13381283    LOGICAL ::  cloud_top_radiation = .FALSE.                    !< namelist parameter
    13391284    LOGICAL ::  complex_terrain = .FALSE.                        !< namelist parameter
     
    13751320    LOGICAL ::  lsf_vert = .TRUE.                                !< use atmospheric forcing (large scale forcing)?
    13761321    LOGICAL ::  masking_method = .FALSE.                         !< namelist parameter
    1377     LOGICAL ::  microphysics_sat_adjust = .FALSE.                !< use saturation adjust bulk scheme?
    1378     LOGICAL ::  microphysics_kessler = .FALSE.                   !< use kessler bulk scheme?
    1379     LOGICAL ::  microphysics_morrison = .FALSE.                  !< use 2-moment Morrison (add. prog. eq. for nc and qc)
    1380     LOGICAL ::  microphysics_seifert = .FALSE.                   !< use 2-moment Seifert and Beheng scheme
    13811322    LOGICAL ::  mg_switch_to_pe0 = .FALSE.                       !< internal multigrid switch for steering the ghost point exchange in case that data has been collected on PE0
    13821323    LOGICAL ::  nesting_offline = .FALSE.                        !< flag controlling offline nesting in COSMO model 
     
    13861327    LOGICAL ::  passive_scalar = .FALSE.                         !< namelist parameter
    13871328    LOGICAL ::  plant_canopy = .FALSE.                           !< switch for use of plant canopy model
    1388     LOGICAL ::  precipitation = .FALSE.                          !< namelist parameter
    13891329    LOGICAL ::  random_heatflux = .FALSE.                        !< namelist parameter
    13901330    LOGICAL ::  rans_mode = .FALSE.                              !< switch between RANS and LES mode
     
    14921432    REAL(wp) ::  f = 0.0_wp                                    !< Coriolis parameter
    14931433    REAL(wp) ::  fs = 0.0_wp                                   !< Coriolis parameter
    1494     REAL(wp) ::  g = 9.81_wp                                   !< gravitational acceleration
    14951434    REAL(wp) ::  inflow_damping_height = 9999999.9_wp          !< namelist parameter
    14961435    REAL(wp) ::  inflow_damping_width = 9999999.9_wp           !< namelist parameter
    1497     REAL(wp) ::  kappa = 0.4_wp                                !< von Karman constant
    14981436    REAL(wp) ::  km_constant = -1.0_wp                         !< namelist parameter
    14991437    REAL(wp) ::  latitude = 55.0_wp                            !< namelist parameter
     
    15121450    REAL(wp) ::  particle_maximum_age = 9999999.9_wp           !< namelist parameter
    15131451    REAL(wp) ::  prandtl_number = 1.0_wp                       !< namelist parameter
    1514     REAL(wp) ::  precipitation_amount_interval = 9999999.9_wp  !< namelist parameter
    15151452    REAL(wp) ::  prho_reference                                !< reference state of potential density
    15161453    REAL(wp) ::  pt_damping_factor = 0.0_wp                    !< namelist parameter
  • palm/trunk/SOURCE/multi_agent_system_mod.f90

    r3268 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3268 2018-09-21 13:45:37Z sward
    2730! Cleaned up agent pointer assignment in output routine
    2831!
     
    7780    USE, INTRINSIC ::  ISO_C_BINDING
    7881
    79     USE constants,                                                             &
     82    USE basic_constants_and_equations_mod,                                     &
    8083        ONLY:  pi
    8184
     
    26892692
    26902693       USE arrays_3d,                                                          &
    2691            ONLY:  u, v, pt, hyp
     2694           ONLY:  u, v, pt, hyp, exner
    26922695
    26932696!       USE chemistry_model_mod,                                                &
     
    27612764!
    27622765!--                Calculate temperature at agent position
    2763                    agents(nl)%t = pt(kl,jl,il) *                               &
    2764                                   ( hyp(kl) / 100000.0_wp )**0.286_wp
     2766                   agents(nl)%t = pt(kl,jl,il) * exner(kl)
    27652767! !
    27662768! !--                Get PM10 concentration at agent position, if possible
     
    41074109    SUBROUTINE mas_timestep_social_forces ( mode, nl, ip, jp )
    41084110
    4109 !       USE constants,                                                          &
    4110 !           ONLY:  pi
    4111 
    41124111       IMPLICIT NONE
    41134112
  • palm/trunk/SOURCE/netcdf_interface_mod.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    552555        ONLY:  chem_define_netcdf_grid
    553556
    554     USE constants,                                                             &
     557    USE basic_constants_and_equations_mod,                                     &
    555558        ONLY:  pi
    556559
  • palm/trunk/SOURCE/palm.f90

    r3258 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3258 2018-09-18 07:23:31Z Giersch
    2730! current revision for user interface has been changed to 3240
    2831!
     
    245248
    246249    USE control_parameters,                                                    &
    247         ONLY:  air_chemistry, cloud_physics, constant_diffusion, child_domain, &
     250        ONLY:  air_chemistry, constant_diffusion, child_domain,                &
    248251               coupling_char, coupling_mode, do2d_at_begin, do3d_at_begin,     &
    249252               humidity, initializing_actions, io_blocks, io_group,            &
    250                message_string, microphysics_morrison, microphysics_seifert,    &
     253               message_string,                                                 &
    251254               neutral, passive_scalar, runnr, simulated_time_chr, spinup,     &
    252255               time_since_reference_point, user_interface_current_revision,    &
     
    259262        ONLY:  nbgp
    260263
     264    USE kinds
     265
     266    USE bulk_cloud_model_mod,                                                  &
     267        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
     268
    261269    USE multi_agent_system_mod,                                                &
    262270        ONLY:  agents_active, mas_last_actions
     
    265273        ONLY:  netcdf_data_input_inquire_file, netcdf_data_input_init,         &
    266274               netcdf_data_input_surface_data, netcdf_data_input_topo
    267 
    268     USE kinds
    269275
    270276    USE particle_attributes,                                                   &
     
    442448             IF ( humidity )  THEN
    443449                CALL exchange_horiz( q, nbgp )
    444                 IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     450                IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    445451                  CALL exchange_horiz( qc, nbgp )
    446452                  CALL exchange_horiz( nc, nbgp )
    447453                ENDIF
    448                 IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     454                IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    449455                   CALL exchange_horiz( qr, nbgp )
    450456                   CALL exchange_horiz( nr, nbgp )
  • palm/trunk/SOURCE/parin.f90

    r3248 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3248 2018-09-14 09:42:06Z sward
    2730! Minor formating changes
    2831!
     
    420423
    421424    USE arrays_3d,                                                             &
    422         ONLY:  pt_init, q_init, ref_state, s_init, sa_init,                    &     
     425        ONLY:  pt_init, q_init, ref_state, s_init, sa_init,                    &
    423426               ug, u_init, v_init, vg
     427
     428    USE bulk_cloud_model_mod,                                                  &
     429        ONLY:  bcm_parin
    424430
    425431    USE chemistry_model_mod,                                                   &
    426432        ONLY:  chem_parin
    427        
     433
    428434    USE chem_modules
    429435
     
    455461    USE land_surface_model_mod,                                                &
    456462        ONLY: lsm_parin
    457 
    458     USE microphysics_mod,                                                      &
    459         ONLY:  c_sedimentation, cloud_water_sedimentation,                     &
    460                collision_turbulence, curvature_solution_effects_bulk,          &
    461                dry_aerosol_radius, limiter_sedimentation, na_init, nc_const,   &
    462                sigma_bulk, ventilation_effect
    463463
    464464    USE model_1d_mod,                                                          &
     
    525525    INTEGER(iwp) ::  ioerr          !< error flag for open/read/write
    526526
    527     NAMELIST /inipar/  aerosol_bulk, alpha_surface, approximation, bc_e_b,     &
     527    NAMELIST /inipar/  alpha_surface, approximation, bc_e_b,     &
    528528                       bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b, &
    529529             bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t,                 &
     
    531531             building_length_y, building_wall_left, building_wall_south,       &
    532532             calc_soil_moisture_during_spinup,                                 &
    533              call_psolver_at_all_substeps, call_microphysics_at_all_substeps, &
     533             call_psolver_at_all_substeps, &
    534534             canyon_height,                                                    &
    535535             canyon_width_x, canyon_width_y, canyon_wall_left,                 &
    536              canyon_wall_south, c_sedimentation, cfl_factor, cloud_droplets,   &
    537              cloud_physics, cloud_scheme, cloud_top_radiation,                 &
    538              cloud_water_sedimentation,                                        &
    539              collective_wait, collision_turbulence, complex_terrain,           &
     536             canyon_wall_south, cfl_factor, cloud_droplets,   &
     537             cloud_top_radiation,                 &
     538             collective_wait, complex_terrain,           &
    540539             conserve_volume_flow,                                             &
    541540             conserve_volume_flow_mode, constant_flux_layer,                   &
    542              coupling_start_time, curvature_solution_effects_bulk,             &
     541             coupling_start_time,             &
    543542             cycle_mg, damp_level_1d,                                          &
    544543             data_output_during_spinup,                                        &
    545544             day_of_year_init,                                                 &
    546545             dissipation_1d,                                                   &
    547              dp_external, dp_level_b, dp_smooth, dpdxy, dry_aerosol_radius,    &
     546             dp_external, dp_level_b, dp_smooth, dpdxy,    &
    548547             dt, dt_pr_1d, dt_run_control_1d, dt_spinup, dx, dy, dz, dz_max,   &
    549548             dz_stretch_factor, dz_stretch_level, dz_stretch_level_start,      &
     
    555554             initializing_actions, km_constant,                                &
    556555             large_scale_forcing, large_scale_subsidence, latitude,            &
    557              limiter_sedimentation, longitude,                                 &
     556             longitude,                                 &
    558557             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
    559558             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
    560              most_method, na_init, nc_const, nesting_offline,                  &
     559             most_method, nesting_offline,                  &
    561560             netcdf_precision, neutral, ngsrb,                                 &
    562561             nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
    563562             outflow_source_plane, passive_scalar,                             &
    564              prandtl_number, precipitation, psolver, pt_damping_factor,        &
     563             prandtl_number, psolver, pt_damping_factor,        &
    565564             pt_damping_width, pt_reference, pt_surface,                       &
    566565             pt_surface_initial_change, pt_vertical_gradient,                  &
     
    574573             roughness_length, sa_surface,                                     &
    575574             sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
    576              scalar_rayleigh_damping, sigma_bulk,                              &
     575             scalar_rayleigh_damping,                              &
    577576             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
    578577             statistic_regions, subs_vertical_gradient,                        &
     
    592591             use_top_fluxes, use_ug_for_galilei_tr, use_upstream_for_tke,      &
    593592             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient,  &
    594              vg_vertical_gradient_level, v_bulk, v_profile, ventilation_effect,&
     593             vg_vertical_gradient_level, v_bulk, v_profile,&
    595594             wall_adjustment, wall_heatflux, wall_humidityflux,                &
    596595             wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
    597596             z0h_factor
    598597
    599     NAMELIST /initialization_parameters/  aerosol_bulk, alpha_surface,         &
     598    NAMELIST /initialization_parameters/  alpha_surface,         &
    600599             approximation, bc_e_b,                                            &
    601600             bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b,           &
     
    604603             building_length_y, building_wall_left, building_wall_south,       &
    605604             calc_soil_moisture_during_spinup,                                 &
    606              call_psolver_at_all_substeps, call_microphysics_at_all_substeps, &
     605             call_psolver_at_all_substeps, &
    607606             canyon_height,                                                    &
    608607             canyon_width_x, canyon_width_y, canyon_wall_left,                 &
    609              canyon_wall_south, c_sedimentation, cfl_factor, cloud_droplets,   &
    610              cloud_physics, cloud_scheme, cloud_top_radiation,                 &
    611              cloud_water_sedimentation,                                        &
    612              collective_wait, collision_turbulence, complex_terrain,           &
     608             canyon_wall_south, cfl_factor, cloud_droplets,   &
     609             cloud_top_radiation,                 &
     610             collective_wait, complex_terrain,           &
    613611             conserve_volume_flow,                                             &
    614612             conserve_volume_flow_mode, constant_flux_layer,                   &
    615              coupling_start_time, curvature_solution_effects_bulk,             &
     613             coupling_start_time,             &
    616614             cycle_mg, damp_level_1d,                                          &
    617615             data_output_during_spinup,                                        &
    618616             day_of_year_init,                                                 &
    619617             dissipation_1d,                                                   &
    620              dp_external, dp_level_b, dp_smooth, dpdxy, dry_aerosol_radius,    &
     618             dp_external, dp_level_b, dp_smooth, dpdxy,    &
    621619             dt, dt_pr_1d, dt_run_control_1d, dt_spinup, dx, dy, dz, dz_max,   &
    622620             dz_stretch_factor, dz_stretch_level, dz_stretch_level_start,      &
     
    628626             initializing_actions, km_constant,                                &
    629627             large_scale_forcing, large_scale_subsidence, latitude,            &
    630              limiter_sedimentation, longitude,                                 &
     628             longitude,                                 &
    631629             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
    632630             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
    633              most_method, na_init, nc_const, nesting_offline,                  &
     631             most_method, nesting_offline,                  &
    634632             netcdf_precision, neutral, ngsrb,                                 &
    635633             nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
    636634             outflow_source_plane, passive_scalar,                             &
    637              prandtl_number, precipitation, psolver, pt_damping_factor,        &
     635             prandtl_number, psolver, pt_damping_factor,        &
    638636             pt_damping_width, pt_reference, pt_surface,                       &
    639637             pt_surface_initial_change, pt_vertical_gradient,                  &
     
    647645             roughness_length, sa_surface,                                     &
    648646             sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
    649              scalar_rayleigh_damping, sigma_bulk,                              &
     647             scalar_rayleigh_damping,                              &
    650648             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
    651649             statistic_regions, subs_vertical_gradient,                        &
     
    665663             use_free_convection_scaling,                                      &
    666664             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient,  &
    667              vg_vertical_gradient_level, v_bulk, v_profile, ventilation_effect,&
     665             vg_vertical_gradient_level, v_bulk, v_profile,&
    668666             wall_adjustment, wall_heatflux, wall_humidityflux,                &
    669667             wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
     
    684682             mask_y_loop, mask_z_loop, netcdf_data_format, netcdf_deflate,     &
    685683             normalizing_region, npex, npey, nz_do3d,                          &
    686              precipitation_amount_interval, profile_columns, profile_rows,     &
     684             profile_columns, profile_rows,     &
    687685             restart_time, section_xy, section_xz, section_yz,                 &
    688686             skip_time_data_output, skip_time_data_output_av, skip_time_dopr,  &
     
    705703             mask_y_loop, mask_z_loop, netcdf_data_format, netcdf_deflate,     &
    706704             normalizing_region, npex, npey, nz_do3d,                          &
    707              precipitation_amount_interval, profile_columns, profile_rows,     &
     705             profile_columns, profile_rows,     &
    708706             restart_time, section_xy, section_xz, section_yz,                 &
    709707             skip_time_data_output, skip_time_data_output_av, skip_time_dopr,  &
     
    864862
    865863!
     864!--       Check if gust module is used and read &gust_par if required
     865          CALL bcm_parin
     866
     867!
    866868!--       Check if urban surface model is used and read &urban_surface_par if required
    867869          CALL usm_parin
  • palm/trunk/SOURCE/plant_canopy_model_mod.f90

    r3248 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3248 2018-09-14 09:42:06Z sward
    2730! Minor formating changes
    2831!
     
    365368
    366369       USE control_parameters,                                                 &
    367            ONLY: cloud_physics, coupling_char, message_string,                 &
    368                  microphysics_seifert
     370           ONLY: coupling_char, message_string
     371
     372       USE bulk_cloud_model_mod,                                               &
     373           ONLY: bulk_cloud_model, microphysics_seifert
    369374
    370375       USE netcdf_data_input_mod,                                              &
     
    407412       ENDIF
    408413
    409        IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     414       IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    410415          message_string = 'plant_canopy = .TRUE. requires cloud_scheme /=' // &
    411416                          ' seifert_beheng'
  • palm/trunk/SOURCE/pmc_interface_mod.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    326329    USE control_parameters,                                                    &
    327330        ONLY:  air_chemistry, bc_dirichlet_l, bc_dirichlet_n, bc_dirichlet_r,  &
    328                bc_dirichlet_s, cloud_physics, child_domain,                    &
     331               bc_dirichlet_s, child_domain,                                   &
    329332               constant_diffusion, constant_flux_layer,                        &
    330333               coupling_char, dt_3d, dz, humidity, message_string,             &
    331                microphysics_morrison, microphysics_seifert,                    &
    332334               neutral, passive_scalar, rans_mode, rans_tke_e,                 &
    333335               roughness_length, simulated_time, topography, volume_flow
     
    348350        ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nyn, nyng, nys, nysg, &
    349351               nysv, nz, nzb, nzt, wall_flags_0
     352
     353    USE bulk_cloud_model_mod,                                                  &
     354        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    350355
    351356    USE particle_attributes,                                                   &
     
    12691274          CALL pmc_set_dataarray_name( 'coarse', 'q'  ,'fine', 'q',  ierr )
    12701275
    1271           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     1276          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    12721277            CALL pmc_set_dataarray_name( 'coarse', 'qc'  ,'fine', 'qc',  ierr ) 
    12731278            CALL pmc_set_dataarray_name( 'coarse', 'nc'  ,'fine', 'nc',  ierr )
    12741279          ENDIF
    12751280
    1276           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     1281          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    12771282             CALL pmc_set_dataarray_name( 'coarse', 'qr'  ,'fine', 'qr',  ierr )
    12781283             CALL pmc_set_dataarray_name( 'coarse', 'nr'  ,'fine', 'nr',  ierr )
     
    38423847                                      r2yo, r1zo, r2zo, 's' )
    38433848
    3844           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     3849          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    38453850             CALL pmci_interp_tril_all ( qc, qcc, ico, jco, kco, r1xo, r2xo,   &
    38463851                                          r1yo, r2yo, r1zo, r2zo, 's' )
     
    38493854          ENDIF
    38503855
    3851           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     3856          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    38523857             CALL pmci_interp_tril_all ( qr, qrc, ico, jco, kco, r1xo, r2xo,   &
    38533858                                         r1yo, r2yo, r1zo, r2zo, 's' )
     
    45754580                                          nzt_topo_nestbc_l, 'l', 's' )
    45764581
    4577                 IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     4582                IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    45784583                   CALL pmci_interp_tril_lr( qc, qcc, ico, jco, kco, r1xo,     &
    45794584                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
     
    45894594                ENDIF
    45904595
    4591                 IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     4596                IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    45924597                   CALL pmci_interp_tril_lr( qr, qrc, ico, jco, kco, r1xo,     &
    45934598                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
     
    46834688                                          nzt_topo_nestbc_r, 'r', 's' )
    46844689
    4685                 IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     4690                IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    46864691
    46874692                   CALL pmci_interp_tril_lr( qc, qcc, ico, jco, kco, r1xo,     &
     
    47004705                ENDIF
    47014706
    4702                 IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     4707                IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    47034708
    47044709     
     
    47964801                                          nzt_topo_nestbc_s, 's', 's' )
    47974802
    4798                 IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     4803                IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    47994804
    48004805                   CALL pmci_interp_tril_sn( qc, qcc, ico, jco, kco, r1xo,     &
     
    48124817                ENDIF
    48134818
    4814                 IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     4819                IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    48154820
    48164821                   CALL pmci_interp_tril_sn( qr, qrc, ico, jco, kco, r1xo,     &
     
    49074912                                          nzt_topo_nestbc_n, 'n', 's' )
    49084913
    4909                 IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     4914                IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    49104915
    49114916                   CALL pmci_interp_tril_sn( qc, qcc, ico, jco, kco, r1xo,     &
     
    49234928                ENDIF
    49244929
    4925                 IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     4930                IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    49264931
    49274932                   CALL pmci_interp_tril_sn( qr, qrc, ico, jco, kco, r1xo,     &
     
    49944999                                   r2yo, r1zo, r2zo, 's' )
    49955000
    4996           IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     5001          IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    49975002
    49985003             CALL pmci_interp_tril_t( qc, qcc, ico, jco, kco, r1xo, r2xo, r1yo,&
     
    50045009          ENDIF
    50055010
    5006           IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     5011          IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    50075012
    50085013
     
    50785083                                  kfuo, ijkfc_s, 'q' )
    50795084
    5080          IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     5085         IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    50815086
    50825087            CALL pmci_anterp_tophat( qc, qcc, kctu, iflo, ifuo, jflo, jfuo,    &
     
    50885093         ENDIF
    50895094
    5090          IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     5095         IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    50915096
    50925097            CALL pmci_anterp_tophat( qr, qrc, kctu, iflo, ifuo, jflo, jfuo,    &
     
    59025907          ENDDO 
    59035908       ENDIF
    5904        IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     5909       IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    59055910          DO  m = 1, bc_h(0)%ns
    59065911             i = bc_h(0)%i(m)           
     
    59205925       ENDIF
    59215926
    5922        IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     5927       IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    59235928          DO  m = 1, bc_h(0)%ns
    59245929             i = bc_h(0)%i(m)           
  • palm/trunk/SOURCE/prognostic_equations.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! omp_get_thread_num now declared in omp directive
    2831!
     
    289292               w, w_p
    290293
     294    USE bulk_cloud_model_mod,                                                  &
     295        ONLY:  call_microphysics_at_all_substeps, bulk_cloud_model,            &
     296               bcm_actions, microphysics_sat_adjust,                           &
     297               microphysics_morrison, microphysics_seifert
     298
    291299    USE chemistry_model_mod,                                                   &
    292300        ONLY:  chem_integrate, chem_prognostic_equations,                      &
     
    300308
    301309    USE control_parameters,                                                    &
    302         ONLY:  air_chemistry, call_microphysics_at_all_substeps,               &
    303                cloud_physics, cloud_top_radiation, constant_diffusion,         &
     310        ONLY:  air_chemistry,                                                  &
     311               cloud_top_radiation, constant_diffusion,                        &
    304312               dp_external, dp_level_ind_b, dp_smooth_factor, dpdxy, dt_3d,    &
    305313               humidity, intermediate_timestep_count,                          &
    306314               intermediate_timestep_count_max, large_scale_forcing,           &
    307                large_scale_subsidence, microphysics_morrison,                  &
    308                microphysics_seifert, microphysics_sat_adjust, neutral, nudging,&
     315               large_scale_subsidence,                  &
     316               neutral, nudging, &
    309317               ocean, passive_scalar, plant_canopy,                            &
    310318               prho_reference, prho_reference,                                 &
     
    381389    USE lsf_nudging_mod,                                                       &
    382390        ONLY:  ls_advec, nudge
    383 
    384     USE microphysics_mod,                                                      &
    385         ONLY:  microphysics_control
    386391
    387392    USE plant_canopy_model_mod,                                                &
     
    500505!
    501506!-- If required, calculate cloud microphysics
    502     IF ( cloud_physics  .AND.  .NOT. microphysics_sat_adjust  .AND.            &
     507    IF ( bulk_cloud_model  .AND.  .NOT. microphysics_sat_adjust  .AND.         &
    503508         ( intermediate_timestep_count == 1  .OR.                              &
    504509           call_microphysics_at_all_substeps ) )                               &
     
    508513       DO  i = nxlg, nxrg
    509514          DO  j = nysg, nyng
    510              CALL microphysics_control( i, j )
     515             CALL bcm_actions( i, j )
    511516           ENDDO
    512517       ENDDO
     
    9951000!--          If required, calculate prognostic equations for cloud water content
    9961001!--          and cloud drop concentration
    997              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     1002             IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    9981003!
    9991004!--             Calculate prognostic equation for cloud water content
     
    11111116!--          If required, calculate prognostic equations for rain water content
    11121117!--          and rain drop concentration
    1113              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     1118             IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    11141119!
    11151120!--             Calculate prognostic equation for rain water content
     
    13711376!
    13721377!-- If required, calculate cloud microphysical impacts
    1373     IF ( cloud_physics  .AND.  .NOT. microphysics_sat_adjust  .AND.            &
     1378    IF ( bulk_cloud_model  .AND.  .NOT. microphysics_sat_adjust  .AND.         &
    13741379         ( intermediate_timestep_count == 1  .OR.                              &
    13751380           call_microphysics_at_all_substeps )                                 &
    13761381       )  THEN
    13771382       CALL cpu_log( log_point(51), 'microphysics', 'start' )
    1378        CALL microphysics_control
     1383       CALL bcm_actions
    13791384       CALL cpu_log( log_point(51), 'microphysics', 'stop' )
    13801385    ENDIF
     
    19811986!--    If required, calculate prognostic equations for cloud water content
    19821987!--    and cloud drop concentration
    1983        IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     1988       IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    19841989
    19851990          CALL cpu_log( log_point(67), 'qc-equation', 'start' )
     
    21602165!--    If required, calculate prognostic equations for rain water content
    21612166!--    and rain drop concentration
    2162        IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     2167       IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    21632168
    21642169          CALL cpu_log( log_point(52), 'qr-equation', 'start' )
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r3272 r3274  
    2828! -----------------
    2929! $Id$
     30! Modularization of all bulk cloud physics code components
     31!
     32! 3272 2018-09-24 10:16:32Z suehring
    3033! - split direct and diffusion shortwave radiation using RRTMG rather than using
    3134!   calc_diffusion_radiation, in case of RRTMG
     
    103106!
    104107! 3117 2018-07-11 09:59:11Z maronga
    105 ! Bugfix: water vapor was not transfered to RRTMG when cloud_physics = .F.
     108! Bugfix: water vapor was not transfered to RRTMG when bulk_cloud_model = .F.
    106109! Bugfix: changed the calculation of RRTMG boundary conditions (Mohamed Salim)
    107110! Bugfix: dry residual atmosphere is replaced by standard RRTMG atmosphere
     
    437440 
    438441    USE arrays_3d,                                                             &
    439         ONLY:  dzw, hyp, nc, pt, q, ql, zu, zw
     442        ONLY:  dzw, hyp, nc, pt, q, ql, zu, zw, exner, d_exner
     443
     444    USE basic_constants_and_equations_mod,                                     &
     445        ONLY:  c_p, g, lv_d_cp, l_v, pi, r_d, rho_l, solar_constant,           &
     446               barometric_formula
    440447
    441448    USE calc_mean_profile_mod,                                                 &
    442449        ONLY:  calc_mean_profile
    443450
    444     USE cloud_parameters,                                                      &
    445         ONLY:  cp, l_d_cp, l_v, r_d, rho_l
    446 
    447     USE constants,                                                             &
    448         ONLY:  pi
    449 
    450451    USE control_parameters,                                                    &
    451         ONLY:  cloud_droplets, cloud_physics, coupling_char, dz, g,            &
     452        ONLY:  cloud_droplets, coupling_char, dz,                              &
    452453               humidity,                                                       &
    453454               initializing_actions, io_blocks, io_group,                      &
    454455               latitude, longitude, large_scale_forcing, lsf_surf,             &
    455                message_string, microphysics_morrison, plant_canopy, pt_surface,&
     456               message_string, plant_canopy, pt_surface,&
    456457               rho_surface, surface_pressure, time_since_reference_point,      &
    457458               urban_surface, land_surface, end_time, spinup_time, dt_spinup
     
    475476    USE kinds
    476477
    477     USE microphysics_mod,                                                      &
    478         ONLY:  na_init, nc_const, sigma_gc
     478    USE bulk_cloud_model_mod,                                                  &
     479        ONLY:  bulk_cloud_model, microphysics_morrison, na_init, nc_const, sigma_gc
    479480
    480481#if defined ( __netcdf )
     
    561562                                                         /)
    562563
     564    REAL(wp), PARAMETER :: sigma_sb       = 5.67037321E-8_wp !< Stefan-Boltzmann constant
     565
    563566    INTEGER(iwp) :: albedo_type  = 9999999, & !< Albedo surface type
    564567                    dots_rad     = 0          !< starting index for timeseries output
     
    578581                                                        !< will be considered. However fewer SVFs are expected.
    579582                radiation_interactions_on = .TRUE.      !< namelist flag to force RTM activiation regardless to vertical urban/land surface and trees
    580 
    581 
    582     REAL(wp), PARAMETER :: sigma_sb       = 5.67037321E-8_wp,       & !< Stefan-Boltzmann constant
    583                            solar_constant = 1368.0_wp                 !< solar constant at top of atmosphere
    584583
    585584    REAL(wp) :: albedo = 9999999.9_wp,           & !< NAMELIST alpha
     
    22742273!
    22752274!--       Initialize RRTMG
    2276           IF ( lw_radiation )  CALL rrtmg_lw_ini ( cp )
    2277           IF ( sw_radiation )  CALL rrtmg_sw_ini ( cp )
     2275          IF ( lw_radiation )  CALL rrtmg_lw_ini ( c_p )
     2276          IF ( sw_radiation )  CALL rrtmg_sw_ini ( c_p )
    22782277
    22792278!
     
    23352334
    23362335       INTEGER(iwp) ::  l         !< running index for surface orientation
    2337 
    2338        REAL(wp)     ::  exn       !< Exner functions at surface
    2339        REAL(wp)     ::  exn1      !< Exner functions at first grid level or at urban layer top
    23402336       REAL(wp)     ::  pt1       !< potential temperature at first grid level or mean value at urban layer top
    23412337       REAL(wp)     ::  pt1_l     !< potential temperature at first grid level or mean value at urban layer top at local subdomain
     
    23552351!
    23562352!--    Calculate value of the Exner function at model surface
    2357        exn = (surface_pressure / 1000.0_wp )**0.286_wp
    23582353!
    23592354!--    In case averaged radiation is used, calculate mean temperature and
     
    23612356       IF ( average_radiation ) THEN   
    23622357          pt1   = 0.0_wp
    2363           IF ( cloud_physics  .OR.  cloud_droplets )  ql1   = 0.0_wp
     2358          IF ( bulk_cloud_model  .OR.  cloud_droplets )  ql1   = 0.0_wp
    23642359
    23652360          pt1_l = SUM( pt(nzut,nys:nyn,nxl:nxr) )
    2366           IF ( cloud_physics  .OR.  cloud_droplets  )  ql1_l = SUM( ql(nzut,nys:nyn,nxl:nxr) )
     2361          IF ( bulk_cloud_model  .OR.  cloud_droplets  )  ql1_l = SUM( ql(nzut,nys:nyn,nxl:nxr) )
    23672362
    23682363#if defined( __parallel )     
    23692364          IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    23702365          CALL MPI_ALLREDUCE( pt1_l, pt1, 1, MPI_REAL, MPI_SUM, comm2d, ierr )
    2371           IF ( cloud_physics  .OR.  cloud_droplets )                            &
     2366          IF ( bulk_cloud_model  .OR.  cloud_droplets )                            &
    23722367             CALL MPI_ALLREDUCE( ql1_l, ql1, 1, MPI_REAL, MPI_SUM, comm2d, ierr )
    23732368#else
    23742369          pt1 = pt1_l
    2375           IF ( cloud_physics  .OR.  cloud_droplets )  ql1 = ql1_l
     2370          IF ( bulk_cloud_model  .OR.  cloud_droplets )  ql1 = ql1_l
    23762371#endif
    2377  
    2378           exn1 = ( hyp(nzut) / 100000.0_wp )**0.286_wp
    2379           IF ( cloud_physics  .OR.  cloud_droplets  )  pt1 = pt1 + l_d_cp / exn1 * ql1
     2372
     2373          IF ( bulk_cloud_model  .OR.  cloud_droplets  )  pt1 = pt1 + lv_d_cp / exner(nzut) * ql1
    23802374!
    23812375!--       Finally, divide by number of grid points
     
    24182412                k = nzut
    24192413
    2420                 exn1 = ( hyp(k+1) / 100000.0_wp )**0.286_wp
    2421 
    24222414                surf%rad_sw_in  = solar_constant * sky_trans * zenith(0)
    24232415                surf%rad_sw_out = albedo_urb * surf%rad_sw_in
    24242416               
    2425                 surf%rad_lw_in  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
     2417                surf%rad_lw_in  = 0.8_wp * sigma_sb * (pt1 * exner(k+1))**4
    24262418
    24272419                surf%rad_lw_out = emissivity_urb * sigma_sb * (t_rad_urb)**4   &
     
    24432435                   j = surf%j(m)
    24442436                   k = surf%k(m)
    2445 
    2446                    exn1 = (hyp(k) / 100000.0_wp )**0.286_wp
    24472437
    24482438                   surf%rad_sw_in(m) = solar_constant * sky_trans * zenith(0)
     
    24692459                                        )                                      &
    24702460                                        * sigma_sb                             &
    2471                                         * ( surf%pt_surface(m) * exn )**4
     2461                                        * ( surf%pt_surface(m) * exner(nzb) )**4
    24722462
    24732463                   surf%rad_lw_out_change_0(m) =                               &
     
    24792469                                        surf%emissivity(ind_wat_win,m)         &
    24802470                                      ) * 3.0_wp * sigma_sb                    &
    2481                                       * ( surf%pt_surface(m) * exn )** 3
    2482 
    2483 
    2484                    IF ( cloud_physics  .OR.  cloud_droplets  )  THEN
    2485                       pt1 = pt(k,j,i) + l_d_cp / exn1 * ql(k,j,i)
    2486                       surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
     2471                                      * ( surf%pt_surface(m) * exner(nzb) )** 3
     2472
     2473
     2474                   IF ( bulk_cloud_model  .OR.  cloud_droplets  )  THEN
     2475                      pt1 = pt(k,j,i) + lv_d_cp / exner(k) * ql(k,j,i)
     2476                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt1 * exner(k))**4
    24872477                   ELSE
    2488                       surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt(k,j,i) * exn1)**4
     2478                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt(k,j,i) * exner(k))**4
    24892479                   ENDIF
    24902480
     
    25242514       INTEGER(iwp) ::  l         !< running index for surface orientation
    25252515
    2526        REAL(wp)     ::  exn       !< Exner functions at surface
    2527        REAL(wp)     ::  exn1      !< Exner functions at first grid level
    25282516       REAL(wp)     ::  pt1       !< potential temperature at first grid level or mean value at urban layer top
    25292517       REAL(wp)     ::  pt1_l     !< potential temperature at first grid level or mean value at urban layer top at local subdomain
     
    25312519       REAL(wp)     ::  ql1_l     !< liquid water mixing ratio at first grid level or mean value at urban layer top at local subdomain
    25322520
    2533        TYPE(surf_type), POINTER ::  surf !< pointer on respective surface type, used to generalize routine   
    2534 
    2535 !
    2536 !--    Calculate value of the Exner function
    2537        exn = (surface_pressure / 1000.0_wp )**0.286_wp
     2521       TYPE(surf_type), POINTER ::  surf !< pointer on respective surface type, used to generalize routine
     2522
    25382523!
    25392524!--    In case averaged radiation is used, calculate mean temperature and
     
    25412526       IF ( average_radiation ) THEN   
    25422527          pt1   = 0.0_wp
    2543           IF ( cloud_physics  .OR.  cloud_droplets )  ql1   = 0.0_wp
     2528          IF ( bulk_cloud_model  .OR.  cloud_droplets )  ql1   = 0.0_wp
    25442529
    25452530          pt1_l = SUM( pt(nzut,nys:nyn,nxl:nxr) )
    2546           IF ( cloud_physics  .OR.  cloud_droplets )  ql1_l = SUM( ql(nzut,nys:nyn,nxl:nxr) )
     2531          IF ( bulk_cloud_model  .OR.  cloud_droplets )  ql1_l = SUM( ql(nzut,nys:nyn,nxl:nxr) )
    25472532
    25482533#if defined( __parallel )     
    25492534          IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    25502535          CALL MPI_ALLREDUCE( pt1_l, pt1, 1, MPI_REAL, MPI_SUM, comm2d, ierr )
    2551           IF ( cloud_physics  .OR.  cloud_droplets )                             &
     2536          IF ( bulk_cloud_model  .OR.  cloud_droplets )                             &
    25522537             CALL MPI_ALLREDUCE( ql1_l, ql1, 1, MPI_REAL, MPI_SUM, comm2d, ierr )
    25532538#else
    25542539          pt1 = pt1_l
    2555           IF ( cloud_physics  .OR.  cloud_droplets )  ql1 = ql1_l
     2540          IF ( bulk_cloud_model  .OR.  cloud_droplets )  ql1 = ql1_l
    25562541#endif
    2557           IF ( cloud_physics  .OR.  cloud_droplets )  pt1 = pt1 + l_d_cp / exn1 * ql1
     2542          IF ( bulk_cloud_model  .OR.  cloud_droplets )  pt1 = pt1 + lv_d_cp / exner(nzut+1) * ql1
    25582543!
    25592544!--       Finally, divide by number of grid points
     
    25952580             IF ( average_radiation ) THEN
    25962581
    2597                 ! set height above canopy
    2598                 k = nzut
    2599 
    26002582                surf%rad_net = net_radiation
    2601 ! MS: Wyh k + 1 ?
    2602                 exn1 = (hyp(k+1) / 100000.0_wp )**0.286_wp
    2603 
    2604                 surf%rad_lw_in  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
     2583
     2584                surf%rad_lw_in  = 0.8_wp * sigma_sb * (pt1 * exner(nzut+1))**4
    26052585
    26062586                surf%rad_lw_out = emissivity_urb * sigma_sb * (t_rad_urb)**4   &
     
    26362616                   surf%rad_net(m) = net_radiation
    26372617
    2638                    exn1 = (hyp(k) / 100000.0_wp )**0.286_wp
    2639 
    2640                    IF ( cloud_physics  .OR.  cloud_droplets )  THEN
    2641                       pt1 = pt(k,j,i) + l_d_cp / exn1 * ql(k,j,i)
    2642                       surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
     2618                   IF ( bulk_cloud_model  .OR.  cloud_droplets )  THEN
     2619                      pt1 = pt(k,j,i) + lv_d_cp / exner(k) * ql(k,j,i)
     2620                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt1 * exner(k))**4
    26432621                   ELSE
    26442622                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb *                 &
    2645                                              ( pt(k,j,i) * exn1 )**4
     2623                                             ( pt(k,j,i) * exner(k) )**4
    26462624                   ENDIF
    26472625
     
    26562634                                        )                                      &
    26572635                                      * sigma_sb                               &
    2658                                       * ( surf%pt_surface(m) * exn )**4
     2636                                      * ( surf%pt_surface(m) * exner(nzb) )**4
    26592637
    26602638                   surf%rad_sw_in(m) = ( surf%rad_net(m) - surf%rad_lw_in(m)   &
     
    29542932          rrtm_tlev(0,nzb+1) = t_rad_urb
    29552933
    2956           IF ( cloud_physics )  THEN
     2934          IF ( bulk_cloud_model )  THEN
    29572935
    29582936             CALL calc_mean_profile( ql, 54 )
     
    29622940             DO k = nzb+1, nzt+1
    29632941                rrtm_tlay(0,k) = pt_av(k) * ( (hyp(k) ) / 100000._wp       &
    2964                                  )**.286_wp + l_d_cp * ql_av(k)
     2942                                 )**.286_wp + lv_d_cp * ql_av(k)
    29652943                rrtm_h2ovmr(0,k) = mol_mass_air_d_wv * (q_av(k) - ql_av(k))
    29662944             ENDDO
     
    30132991          rrtm_icld   = 0
    30142992
    3015           IF ( cloud_physics )  THEN
     2993          IF ( bulk_cloud_model )  THEN
    30162994             DO k = nzb+1, nzt+1
    30172995                rrtm_cliqwp(0,k) =  ql_av(k) * 1000._wp *                   &
     
    31333111!--             Prepare profiles of temperature and H2O volume mixing ratio
    31343112                DO  m = surf_lsm_h%start_index(j,i), surf_lsm_h%end_index(j,i)
    3135                    rrtm_tlev(0,nzb+1) = surf_lsm_h%pt_surface(m) * &
    3136                                     ( surface_pressure / 1000.0_wp )**0.286_wp
     3113                   rrtm_tlev(0,nzb+1) = surf_lsm_h%pt_surface(m) * exner(nzb)
    31373114                ENDDO
    31383115                DO  m = surf_usm_h%start_index(j,i), surf_usm_h%end_index(j,i)
    3139                    rrtm_tlev(0,nzb+1) = surf_usm_h%pt_surface(m) * &
    3140                                     ( surface_pressure / 1000.0_wp )**0.286_wp
     3116                   rrtm_tlev(0,nzb+1) = surf_usm_h%pt_surface(m) * exner(nzb)
    31413117                ENDDO
    31423118
    31433119
    3144                 IF ( cloud_physics )  THEN
     3120                IF ( bulk_cloud_model )  THEN
    31453121                   DO k = nzb+1, nzt+1
    3146                       rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp   &
    3147                                        )**0.286_wp + l_d_cp * ql(k,j,i)
     3122                      rrtm_tlay(0,k) = pt(k,j,i) * exner(k)                    &
     3123                                        + lv_d_cp * ql(k,j,i)
    31483124                      rrtm_h2ovmr(0,k) = mol_mass_air_d_wv * (q(k,j,i) - ql(k,j,i))
    31493125                   ENDDO
    31503126                ELSEIF ( cloud_droplets )  THEN
    31513127                   DO k = nzb+1, nzt+1
    3152                       rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp   &
    3153                                        )**0.286_wp + l_d_cp * ql(k,j,i)
     3128                      rrtm_tlay(0,k) = pt(k,j,i) * exner(k)                     &
     3129                                        + lv_d_cp * ql(k,j,i)
    31543130                      rrtm_h2ovmr(0,k) = mol_mass_air_d_wv * q(k,j,i)
    31553131                   ENDDO
    31563132                ELSE
    31573133                   DO k = nzb+1, nzt+1
    3158                       rrtm_tlay(0,k) = pt(k,j,i) * ( (hyp(k) ) / 100000.0_wp   &
    3159                                        )**0.286_wp
     3134                      rrtm_tlay(0,k) = pt(k,j,i) * exner(k)
    31603135                   ENDDO
    31613136
     
    32023177                rrtm_icld   = 0
    32033178
    3204                 IF ( cloud_physics  .OR.  cloud_droplets )  THEN
     3179                IF ( bulk_cloud_model  .OR.  cloud_droplets )  THEN
    32053180                   DO k = nzb+1, nzt+1
    32063181                      rrtm_cliqwp(0,k) =  ql(k,j,i) * 1000.0_wp *              &
     
    32143189!
    32153190!--                      Calculate cloud droplet effective radius
    3216                          IF ( cloud_physics )  THEN
     3191                         IF ( bulk_cloud_model )  THEN
    32173192!
    32183193!--                         Calculete effective droplet radius. In case of using
     
    32853260                               surf_lsm_h%frac(ind_wat_win,m)   *              &
    32863261                               surf_lsm_h%emissivity(ind_wat_win,m)
    3287                    rrtm_tsfc = surf_lsm_h%pt_surface(m) *                      &
    3288                                        (surface_pressure / 1000.0_wp )**0.286_wp
     3262                   rrtm_tsfc = surf_lsm_h%pt_surface(m) * exner(nzb)
    32893263                ENDDO             
    32903264                DO  m = surf_usm_h%start_index(j,i), surf_usm_h%end_index(j,i)
     
    32953269                               surf_usm_h%frac(ind_wat_win,m)   *              &
    32963270                               surf_usm_h%emissivity(ind_wat_win,m)
    3297                    rrtm_tsfc = surf_usm_h%pt_surface(m) *                      &
    3298                                        (surface_pressure / 1000.0_wp )**0.286_wp
     3271                   rrtm_tsfc = surf_usm_h%pt_surface(m) * exner(nzb)
    32993272                ENDDO
    33003273!
     
    39853958       ALLOCATE ( rrtm_plev(0:0,nzb+1:nzt_rad+2)   )
    39863959
    3987        t_surface = pt_surface * ( surface_pressure / 1000.0_wp )**0.286_wp
     3960       t_surface = pt_surface * exner(nzb)
    39883961       DO k = nzb+1, nzt+1
    39893962          rrtm_play(0,k) = hyp(k) * 0.01_wp
    3990           rrtm_plev(0,k) = surface_pressure * ( (t_surface - g/cp * zw(k-1)) / &
    3991                          t_surface )**(1.0_wp/0.286_wp)
     3963          rrtm_plev(0,k) = barometric_formula(zw(k-1),                         &
     3964                              pt_surface * exner(nzb), &
     3965                              surface_pressure )
    39923966       ENDDO
    39933967
     
    44064380 SUBROUTINE radiation_tendency_ij ( i, j, tend )
    44074381
    4408     USE cloud_parameters,                                                      &
    4409         ONLY:  pt_d_t
    4410 
    44114382    IMPLICIT NONE
    44124383
     
    44214392       DO k = nzb+1, nzt+1
    44224393          tend(k,j,i) = tend(k,j,i) + (rad_lw_hr(k,j,i) + rad_sw_hr(k,j,i))    &
    4423                                          * pt_d_t(k) * d_seconds_hour
     4394                                         * d_exner(k) * d_seconds_hour
    44244395       ENDDO
    44254396#endif
     
    44374408 SUBROUTINE radiation_tendency ( tend )
    44384409
    4439     USE cloud_parameters,                                                      &
    4440         ONLY:  pt_d_t
    4441 
    44424410    USE indices,                                                               &
    44434411        ONLY:  nxl, nxr, nyn, nys
     
    44574425             DO k = nzb+1, nzt+1
    44584426                tend(k,j,i) = tend(k,j,i) + ( rad_lw_hr(k,j,i)                 &
    4459                                           +  rad_sw_hr(k,j,i) ) * pt_d_t(k)    &
     4427                                          +  rad_sw_hr(k,j,i) ) * d_exner(k)   &
    44604428                                          * d_seconds_hour
    44614429             ENDDO
     
    45254493#if ! defined( __nopointer )
    45264494     IF ( plant_canopy )  THEN
    4527          pchf_prep(:) = r_d * (hyp(nzub:nzut) / 100000.0_wp)**0.286_wp &
    4528                      / (cp * hyp(nzub:nzut) * dx*dy*dz(1)) !< equals to 1 / (rho * c_p * Vbox * T)
    4529          pctf_prep(:) = r_d * (hyp(nzub:nzut) / 100000.0_wp)**0.286_wp &
     4495         pchf_prep(:) = r_d * exner(nzub:nzut)                                &
     4496                     / (c_p * hyp(nzub:nzut) * dx*dy*dz(1)) !< equals to 1 / (rho * c_p * Vbox * T)
     4497         pctf_prep(:) = r_d * exner(nzub:nzut)                                &
    45304498                     / (l_v * hyp(nzub:nzut) * dx*dy*dz(1))
    45314499     ENDIF
     
    50325000!         k                = surf_lsm_h%k(m)
    50335001!         pt_surf_urb_l    = pt_surf_urb_l + surf_lsm_h%pt_surface(m)            &
    5034 !                            * ( hyp(k) / 100000.0_wp )**0.286_wp
     5002!                            * exner(k)
    50355003!         count_surfaces_l = count_surfaces_l + 1.0_wp
    50365004!      ENDDO
     
    50385006!         k                = surf_usm_h%k(m)
    50395007!         pt_surf_urb_l    = pt_surf_urb_l + surf_usm_h%pt_surface(m)            &
    5040 !                            * ( hyp(k) / 100000.0_wp )**0.286_wp
     5008!                            * exner(k)
    50415009!         count_surfaces_l = count_surfaces_l + 1.0_wp
    50425010!      ENDDO
     
    50455013!            k                = surf_lsm_v(l)%k(m)
    50465014!            pt_surf_urb_l    = pt_surf_urb_l + surf_lsm_v(l)%pt_surface(m)      &
    5047 !                            * ( hyp(k) / 100000.0_wp )**0.286_wp
     5015!                            * exner(k)
    50485016!            count_surfaces_l = count_surfaces_l + 1.0_wp
    50495017!         ENDDO
    50505018!         DO  m = 1, surf_usm_v(l)%ns
    50515019!            k                = surf_usm_v(l)%k(m)
    5052 !            pt_surf_urb_l    = pt_surf_urb_l + surf_usm_v(l)%pt_surface(m)      &
    5053 !                            * ( hyp(k) / 100000.0_wp )**0.286_wp
     5020!            pt_surf_urb_l    = pt_surf_urb_l + surf_usm_v(l)%pt_surface(m) * exner(k)
    50545021!            count_surfaces_l = count_surfaces_l + 1.0_wp
    50555022!         ENDDO
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    111114                  q_init, ref_state, s_init, sa_init, u_init, ug, v_init, vg
    112115
     116       USE bulk_cloud_model_mod,                                               &
     117           ONLY:  bcm_rrd_global
     118
    113119       USE date_and_time_mod,                                                  &
    114120           ONLY:  day_of_year_init, time_utc_init
     
    125131       USE indices,                                                            &
    126132           ONLY:  nz, nx, nx_on_file, ny, ny_on_file
    127 
    128        USE microphysics_mod,                                                   &
    129            ONLY:  c_sedimentation, collision_turbulence,                       &
    130                   cloud_water_sedimentation, limiter_sedimentation,            &
    131                   nc_const, ventilation_effect
    132133
    133134       USE model_1d_mod,                                                       &
     
    332333             CASE ( 'building_wall_south' )
    333334                READ ( 13 )  building_wall_south
    334              CASE ( 'c_sedimentation' )
    335                 READ ( 13 )  c_sedimentation
    336335             CASE ( 'call_psolver_at_all_substeps' )
    337336                READ ( 13 )  call_psolver_at_all_substeps
     
    350349             CASE ( 'cloud_droplets' )
    351350                READ ( 13 )  cloud_droplets
    352              CASE ( 'cloud_physics' )
    353                 READ ( 13 )  cloud_physics
    354              CASE ( 'cloud_scheme' )
    355                 READ ( 13 )  cloud_scheme
    356351             CASE ( 'cloud_top_radiation' )
    357352                READ ( 13 )  cloud_top_radiation
    358              CASE ( 'cloud_water_sedimentation' )
    359                 READ ( 13 )  cloud_water_sedimentation
    360353             CASE ( 'collective_wait' )
    361354                READ ( 13 )  collective_wait
    362              CASE ( 'collision_turbulence' )
    363                 READ ( 13 )  collision_turbulence
    364355             CASE ( 'conserve_volume_flow' )
    365356                READ ( 13 )  conserve_volume_flow
     
    461452             CASE ( 'latitude' )
    462453                READ ( 13 )  latitude
    463              CASE ( 'limiter_sedimentation' )
    464                 READ ( 13 )  limiter_sedimentation
    465454             CASE ( 'longitude' )
    466455                READ ( 13 )  longitude
     
    484473             CASE ( 'most_method' )
    485474                READ ( 13 )  most_method
    486              CASE ( 'nc_const' )
    487                 READ ( 13 )  nc_const
    488475             CASE ( 'netcdf_precision' )
    489476                READ ( 13 )  netcdf_precision
     
    520507             CASE ( 'prandtl_number' )
    521508                READ ( 13 )  prandtl_number
    522              CASE ( 'precipitation' )
    523                 READ ( 13 ) precipitation
    524509             CASE ( 'psolver' )
    525510                READ ( 13 )  psolver
     
    732717             CASE ( 'v_max_ijk' )
    733718                READ ( 13 )  v_max_ijk
    734              CASE ( 'ventilation_effect' )
    735                 READ ( 13 )  ventilation_effect
    736719             CASE ( 'vg' )
    737720                READ ( 13 )  vg
     
    786769             CASE DEFAULT
    787770
     771                IF ( .NOT. found ) CALL bcm_rrd_global( found )
     772
    788773                IF ( .NOT. found ) CALL wtm_rrd_global( found )
    789774
     
    10611046
    10621047    USE arrays_3d,                                                             &
    1063         ONLY:  e, kh, km, p, pt, q, ql, qc, nc, nr, prr, precipitation_amount, &
    1064                qr, s, sa, u, u_m_l, u_m_n, u_m_r, u_m_s, v, v_m_l, v_m_n,      &
     1048        ONLY:  e, kh, km, p, pt, q, ql, &
     1049               s, sa, u, u_m_l, u_m_n, u_m_r, u_m_s, v, v_m_l, v_m_n,      &
    10651050               v_m_r, v_m_s, vpt, w, w_m_l, w_m_n, w_m_r, w_m_s
    10661051
     
    10731058        ONLY:  cpu_log, log_point_s
    10741059
    1075     USE gust_mod,                                                           &
     1060    USE gust_mod,                                                              &
    10761061        ONLY :  gust_rrd_local
    10771062
     
    10841069    USE land_surface_model_mod,                                                &
    10851070        ONLY:  lsm_rrd_local
     1071
     1072    USE bulk_cloud_model_mod,                                                  &
     1073        ONLY :  bcm_rrd_local
    10861074
    10871075    USE particle_attributes,                                                   &
     
    14691457                      tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    14701458
    1471                 CASE ( 'nc' )
    1472                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1473                    nc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
    1474                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1475 
    1476                 CASE ( 'nc_av' )
    1477                    IF ( .NOT. ALLOCATED( nc_av ) )  THEN
    1478                       ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1479                    ENDIF
    1480                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1481                    nc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    1482                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1483 
    1484 
    1485                 CASE ( 'nr' )
    1486                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1487                    nr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
    1488                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1489 
    1490                 CASE ( 'nr_av' )
    1491                    IF ( .NOT. ALLOCATED( nr_av ) )  THEN
    1492                       ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1493                    ENDIF
    1494                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1495                    nr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    1496                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1497 
    14981459                CASE ( 'p' )
    14991460                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    15251486                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    15261487
    1527                 CASE ( 'prr' )
    1528                    IF ( .NOT. ALLOCATED( prr ) )  THEN
    1529                       ALLOCATE( prr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1530                    ENDIF
    1531                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1532                    prr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =            &
    1533                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1534 
    1535                 CASE ( 'prr_av' )
    1536                    IF ( .NOT. ALLOCATED( prr_av ) )  THEN
    1537                       ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1538                    ENDIF
    1539                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1540                    prr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    1541                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1542 
    1543                 CASE ( 'precipitation_amount' )
    1544                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1545                    precipitation_amount(nysc-nbgp:nync+nbgp,                   &
    1546                                         nxlc-nbgp:nxrc+nbgp)  =                &
    1547                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1548 
    15491488                CASE ( 'pt' )
    15501489                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    15731512                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    15741513
    1575                 CASE ( 'qc' )
    1576                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1577                    qc(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
    1578                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1579 
    1580                 CASE ( 'qc_av' )
    1581                    IF ( .NOT. ALLOCATED( qc_av ) )  THEN
    1582                       ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1583                    ENDIF
    1584                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1585                    qc_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    1586                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1587 
    15881514                CASE ( 'ql' )
    15891515                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    15971523                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    15981524                   ql_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    1599                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1600 
    1601                 CASE ( 'qr' )
    1602                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1603                    qr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
    1604                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1605 
    1606                 CASE ( 'qr_av' )
    1607                    IF ( .NOT. ALLOCATED( qr_av ) )  THEN
    1608                       ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1609                    ENDIF
    1610                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1611                    qr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    16121525                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    16131526
     
    19681881
    19691882!
     1883!--                Read microphysics module restart data
     1884                   IF ( .NOT. found ) CALL bcm_rrd_local( i, k, nxlf,          &
     1885                                           nxlc, nxl_on_file, nxrf, nxrc,      &
     1886                                           nxr_on_file, nynf, nync,            &
     1887                                           nyn_on_file, nysf, nysc,            &
     1888                                           nys_on_file, tmp_2d, tmp_3d, found )
     1889
     1890!
    19701891!--                Read surface related variables
    19711892                   IF ( .NOT. found ) CALL surface_rrd_local( i, k, nxlf,      &
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    204207        ONLY:  dzw, e, heatflux_output_conversion, nc, nr, p, prr, pt,         &
    205208               q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, sa, u, v, vpt, w,      &
    206                waterflux_output_conversion
     209               waterflux_output_conversion, d_exner
    207210
    208211    USE averaging,                                                             &
    209         ONLY:  e_av, ghf_av, lpt_av, lwp_av, nc_av,     &
    210                nr_av,                                                          &
    211                ol_av, p_av, pc_av, pr_av, prr_av, pt_av, q_av, qc_av, ql_av,   &
    212                ql_c_av, ql_v_av, ql_vp_av, qr_av, qsws_av, qv_av, r_a_av,      &
     212        ONLY:  e_av, ghf_av, lpt_av, lwp_av,                                   &
     213               ol_av, p_av, pc_av, pr_av, pt_av, q_av, ql_av,                  &
     214               ql_c_av, ql_v_av, ql_vp_av, qsws_av, qv_av, r_a_av,             &
    213215               rho_ocean_av, s_av, sa_av, shf_av, ssws_av, ts_av, tsurf_av,    &
    214216               u_av, us_av, v_av, vpt_av, w_av, z0_av, z0h_av, z0q_av
    215217
     218    USE basic_constants_and_equations_mod,                                     &
     219        ONLY:  c_p, lv_d_cp, l_v
     220
     221    USE bulk_cloud_model_mod,                                                  &
     222        ONLY:  bulk_cloud_model, bcm_3d_data_averaging
     223
    216224    USE chemistry_model_mod,                                                   &
    217225        ONLY:  chem_3d_data_averaging
    218226
    219     USE cloud_parameters,                                                      &
    220         ONLY:  cp, l_d_cp, l_v, pt_d_t
    221 
    222227    USE control_parameters,                                                    &
    223         ONLY:  air_chemistry, average_count_3d, cloud_physics, doav, doav_n,   &
     228        ONLY:  air_chemistry, average_count_3d, doav, doav_n,                  &
    224229               land_surface, rho_surface, urban_surface, uv_exposure,          &
    225230               varnamelength
     
    323328                lwp_av = 0.0_wp
    324329
    325              CASE ( 'nc' )
    326                 IF ( .NOT. ALLOCATED( nc_av ) )  THEN
    327                    ALLOCATE( nc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    328                 ENDIF
    329                 nc_av = 0.0_wp
    330 
    331              CASE ( 'nr' )
    332                 IF ( .NOT. ALLOCATED( nr_av ) )  THEN
    333                    ALLOCATE( nr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    334                 ENDIF
    335                 nr_av = 0.0_wp
    336 
    337330             CASE ( 'ol*' )
    338331                IF ( .NOT. ALLOCATED( ol_av ) )  THEN
     
    359352                pr_av = 0.0_wp
    360353
    361              CASE ( 'prr' )
    362                 IF ( .NOT. ALLOCATED( prr_av ) )  THEN
    363                    ALLOCATE( prr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    364                 ENDIF
    365                 prr_av = 0.0_wp
    366 
    367354             CASE ( 'pt' )
    368355                IF ( .NOT. ALLOCATED( pt_av ) )  THEN
     
    377364                q_av = 0.0_wp
    378365
    379              CASE ( 'qc' )
    380                 IF ( .NOT. ALLOCATED( qc_av ) )  THEN
    381                    ALLOCATE( qc_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    382                 ENDIF
    383                 qc_av = 0.0_wp
    384 
    385366             CASE ( 'ql' )
    386367                IF ( .NOT. ALLOCATED( ql_av ) )  THEN
     
    406387                ENDIF
    407388                ql_vp_av = 0.0_wp
    408 
    409              CASE ( 'qr' )
    410                 IF ( .NOT. ALLOCATED( qr_av ) )  THEN
    411                    ALLOCATE( qr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    412                 ENDIF
    413                 qr_av = 0.0_wp
    414389
    415390             CASE ( 'qsws*' )
     
    532507!--             Turbulence closure module
    533508                CALL tcm_3d_data_averaging( 'allocate', doav(ii) )
     509
     510!
     511!--             Microphysics module quantities
     512                IF ( bulk_cloud_model )  THEN
     513                   CALL bcm_3d_data_averaging( 'allocate', doav(ii) )
     514                ENDIF
    534515
    535516!
     
    654635             ENDIF
    655636
    656           CASE ( 'nc' )
    657              IF ( ALLOCATED( nc_av ) ) THEN
    658                 DO  i = nxlg, nxrg
    659                    DO  j = nysg, nyng
    660                       DO  k = nzb, nzt+1
    661                          nc_av(k,j,i) = nc_av(k,j,i) + nc(k,j,i)
    662                       ENDDO
    663                    ENDDO
    664                 ENDDO
    665              ENDIF
    666 
    667           CASE ( 'nr' )
    668              IF ( ALLOCATED( nr_av ) ) THEN
    669                 DO  i = nxlg, nxrg
    670                    DO  j = nysg, nyng
    671                       DO  k = nzb, nzt+1
    672                          nr_av(k,j,i) = nr_av(k,j,i) + nr(k,j,i)
    673                       ENDDO
    674                    ENDDO
    675                 ENDDO
    676              ENDIF
    677 
    678637          CASE ( 'ol*' )
    679638             IF ( ALLOCATED( ol_av ) ) THEN
     
    758717             ENDIF
    759718
    760           CASE ( 'prr' )
    761              IF ( ALLOCATED( prr_av ) ) THEN
    762                 DO  i = nxlg, nxrg
    763                    DO  j = nysg, nyng
    764                       DO  k = nzb, nzt+1
    765                          prr_av(k,j,i) = prr_av(k,j,i) + prr(k,j,i)
    766                       ENDDO
    767                    ENDDO
    768                 ENDDO
    769              ENDIF
    770 
    771719          CASE ( 'pt' )
    772720             IF ( ALLOCATED( pt_av ) ) THEN
    773                 IF ( .NOT. cloud_physics ) THEN
     721                IF ( .NOT. bulk_cloud_model ) THEN
    774722                DO  i = nxlg, nxrg
    775723                   DO  j = nysg, nyng
     
    783731                   DO  j = nysg, nyng
    784732                      DO  k = nzb, nzt+1
    785                             pt_av(k,j,i) = pt_av(k,j,i) + pt(k,j,i) + l_d_cp * &
    786                                                           pt_d_t(k) * ql(k,j,i)
     733                            pt_av(k,j,i) = pt_av(k,j,i) + pt(k,j,i) + lv_d_cp * &
     734                                                          d_exner(k) * ql(k,j,i)
    787735                         ENDDO
    788736                      ENDDO
     
    797745                      DO  k = nzb, nzt+1
    798746                         q_av(k,j,i) = q_av(k,j,i) + q(k,j,i)
    799                       ENDDO
    800                    ENDDO
    801                 ENDDO
    802              ENDIF
    803 
    804           CASE ( 'qc' )
    805              IF ( ALLOCATED( qc_av ) ) THEN
    806                 DO  i = nxlg, nxrg
    807                    DO  j = nysg, nyng
    808                       DO  k = nzb, nzt+1
    809                          qc_av(k,j,i) = qc_av(k,j,i) + qc(k,j,i)
    810747                      ENDDO
    811748                   ENDDO
     
    862799                            ENDIF
    863800                         ENDDO
    864                       ENDDO
    865                    ENDDO
    866                 ENDDO
    867              ENDIF
    868 
    869           CASE ( 'qr' )
    870              IF ( ALLOCATED( qr_av ) ) THEN
    871                 DO  i = nxlg, nxrg
    872                    DO  j = nysg, nyng
    873                       DO  k = nzb, nzt+1
    874                          qr_av(k,j,i) = qr_av(k,j,i) + qr(k,j,i)
    875801                      ENDDO
    876802                   ENDDO
     
    1001927                         m = surf_lsm_h%end_index(j,i)
    1002928                         shf_av(j,i) = shf_av(j,i) +                           &
    1003                                          surf_lsm_h%shf(m) * cp
     929                                         surf_lsm_h%shf(m) * c_p
    1004930                      ELSEIF ( match_usm )  THEN
    1005931                         m = surf_usm_h%end_index(j,i)
    1006932                         shf_av(j,i) = shf_av(j,i) +                           &
    1007                                          surf_usm_h%shf(m) * cp
     933                                         surf_usm_h%shf(m) * c_p
    1008934                      ENDIF
    1009935                   ENDDO
     
    12651191
    12661192!
     1193!--          Microphysics module quantities
     1194             IF ( bulk_cloud_model )  THEN
     1195                CALL bcm_3d_data_averaging( 'sum', doav(ii) )
     1196             ENDIF
     1197
     1198!
    12671199!--          Land surface quantity
    12681200             IF ( land_surface )  THEN
  • palm/trunk/SOURCE/surface_coupler.f90

    r3049 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3049 2018-05-29 13:52:36Z Giersch
    2730! Error messages revised
    2831!
     
    101104        ONLY:  pt, rho_ocean, sa, total_2d_a, total_2d_o, u, v
    102105
    103     USE cloud_parameters,                                                      &
    104         ONLY:  cp, l_v
     106    USE basic_constants_and_equations_mod,                                     &
     107        ONLY:  c_p, l_v
    105108
    106109    USE control_parameters,                                                    &
     
    477480             
    478481             surf_def_h(2)%shf(m) = surf_def_h(2)%shf(m) +                     &
    479                                     surf_def_h(2)%qsws(m) * l_v / cp
     482                                    surf_def_h(2)%qsws(m) * l_v / c_p
    480483!
    481484!--          ...and convert it to a salinity flux at the sea surface (top)
     
    498501          j = surf_def_h(2)%j(m)
    499502          surf_def_h(2)%shf(m) = surf_def_h(2)%shf(m) / rho_ocean(nzt,j,i) *   &
    500                                  cp / cpw
     503                                 c_p / cpw
    501504
    502505          surf_def_h(2)%usws(m) = surf_def_h(2)%usws(m) / rho_ocean(nzt,j,i)
  • palm/trunk/SOURCE/surface_layer_fluxes_mod.f90

    r3271 r3274  
    2626! -----------------
    2727! $Id$
     28! Modularization of all bulk cloud physics code components
     29!
     30! 3271 2018-09-24 08:20:34Z suehring
    2831! Comment revised
    2932!
     
    231234    USE arrays_3d,                                                             &
    232235        ONLY:  e, kh, nc, nr, pt, q, ql, qc, qr, s, u, v, vpt, w, zu, zw,      &
    233                drho_air_zw, rho_air_zw
     236               drho_air_zw, rho_air_zw, d_exner
     237
     238    USE basic_constants_and_equations_mod,                                     &
     239        ONLY:  g, kappa, lv_d_cp, pi
    234240
    235241    USE chem_modules,                                                          &
    236242        ONLY:  constant_csflux, nvar
    237243
    238     USE cloud_parameters,                                                      &
    239         ONLY:  l_d_cp, pt_d_t
    240 
    241     USE constants,                                                             &
    242         ONLY:  pi
    243 
    244244    USE cpulog
    245245
    246246    USE control_parameters,                                                    &
    247         ONLY:  air_chemistry, cloud_droplets, cloud_physics,                   &
    248                constant_heatflux, constant_scalarflux,                         &     
    249                constant_waterflux, coupling_mode, g, humidity, ibc_e_b,        &
    250                ibc_pt_b, initializing_actions, kappa,                          &
     247        ONLY:  air_chemistry, cloud_droplets,                                  &
     248               constant_heatflux, constant_scalarflux,                         &
     249               constant_waterflux, coupling_mode, humidity, ibc_e_b,           &
     250               ibc_pt_b, initializing_actions,                                 &
    251251               intermediate_timestep_count, intermediate_timestep_count_max,   &
    252                land_surface, large_scale_forcing, lsf_surf,                    &
    253                message_string, microphysics_morrison, microphysics_seifert,    &
     252               land_surface, large_scale_forcing, lsf_surf, message_string,    &
    254253               most_method, neutral, passive_scalar, pt_surface, q_surface,    &
    255254               run_coupled, surface_pressure, simulated_time, terminate_run,   &
     
    264263
    265264    USE kinds
     265
     266    USE bulk_cloud_model_mod,                                                  &
     267        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
    266268
    267269    USE pegrid
     
    14671469
    14681470             ENDDO
    1469           ELSEIF ( cloud_physics  .OR.  cloud_droplets )  THEN
     1471          ELSEIF ( bulk_cloud_model  .OR.  cloud_droplets )  THEN
    14701472             !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
    14711473             DO  m = 1, surf%ns
     
    15961598          k   = surf%k(m)
    15971599
    1598           IF ( cloud_physics ) THEN
    1599              surf%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1600          IF ( bulk_cloud_model ) THEN
     1601             surf%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    16001602             surf%qv1(m) = q(k,j,i) - ql(k,j,i)
    16011603          ELSEIF( cloud_droplets ) THEN
    1602              surf%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1604             surf%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    16031605             surf%qv1(m) = q(k,j,i)
    16041606          ELSE
     
    18201822             ENDIF
    18211823
    1822              IF ( cloud_physics  .OR.  cloud_droplets )  THEN
     1824             IF ( bulk_cloud_model  .OR.  cloud_droplets )  THEN
    18231825               !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
    18241826                DO  m = 1, surf%ns   
     
    19271929!
    19281930!--    If required compute qc* and nc*
    1929        IF ( cloud_physics  .AND.  microphysics_morrison  .AND.                 &
     1931       IF ( bulk_cloud_model  .AND.  microphysics_morrison  .AND.              &
    19301932            .NOT. surf_vertical )  THEN
    19311933          !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
     
    19531955!
    19541956!--    If required compute qr* and nr*
    1955        IF ( cloud_physics  .AND.  microphysics_seifert  .AND.                  &
     1957       IF ( bulk_cloud_model  .AND.  microphysics_seifert  .AND.               &
    19561958            .NOT. surf_vertical )  THEN
    19571959          !$OMP PARALLEL DO PRIVATE( i, j, k, z_mo )
     
    21452147!
    21462148!--       Compute (turbulent) fluxes of cloud water content and cloud drop conc.
    2147           IF ( cloud_physics  .AND.  microphysics_morrison  .AND.              &
     2149          IF ( bulk_cloud_model  .AND.  microphysics_morrison  .AND.           &
    21482150               .NOT. downward)  THEN
    21492151             !$OMP PARALLEL DO PRIVATE( i, j )
     
    21592161!
    21602162!--       Compute (turbulent) fluxes of rain water content and rain drop conc.
    2161           IF ( cloud_physics  .AND.  microphysics_seifert  .AND.               &
     2163          IF ( bulk_cloud_model  .AND.  microphysics_seifert  .AND.            &
    21622164               .NOT. downward)  THEN
    21632165             !$OMP PARALLEL DO PRIVATE( i, j )
  • palm/trunk/SOURCE/surface_mod.f90

    r3254 r3274  
    2626! -----------------
    2727! $Id$
     28! Modularization of all bulk cloud physics code components
     29!
     30! 3254 2018-09-17 10:53:57Z suehring
    2831! Remove redundant subroutine argument
    2932!
     
    207210    USE chem_modules
    208211
    209     USE control_parameters               
     212    USE control_parameters
    210213
    211214    USE indices,                                                               &
     
    505508                                                    !< in the domain (required to activiate RTM)
    506509
     510    LOGICAL ::  surf_bulk_cloud_model = .FALSE.                          !< use cloud microphysics
     511    LOGICAL ::  surf_microphysics_morrison = .FALSE.                  !< use 2-moment Morrison (add. prog. eq. for nc and qc)
     512    LOGICAL ::  surf_microphysics_seifert = .FALSE.                   !< use 2-moment Seifert and Beheng scheme
     513
    507514
    508515    SAVE
     
    543550    PUBLIC bc_h, ind_pav_green, ind_veg_wall, ind_wat_win, ns_h_on_file,       &
    544551           ns_v_on_file, surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v,       &
    545            surf_usm_h, surf_usm_v, surf_type, vertical_surfaces_exist
     552           surf_usm_h, surf_usm_v, surf_type, vertical_surfaces_exist,         &
     553           surf_bulk_cloud_model, surf_microphysics_morrison, surf_microphysics_seifert
    546554!
    547555!-- Public subroutines and functions
     
    10901098!
    10911099!--       
    1092        IF ( cloud_physics .AND. microphysics_morrison)  THEN
     1100       IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    10931101          DEALLOCATE ( surfaces%qcs )
    10941102          DEALLOCATE ( surfaces%ncs )
     
    10981106!
    10991107!--       
    1100        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1108       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    11011109          DEALLOCATE ( surfaces%qrs )
    11021110          DEALLOCATE ( surfaces%nrs )
     
    12171225!
    12181226!--       
    1219        IF ( cloud_physics .AND. microphysics_morrison)  THEN
     1227       IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    12201228          ALLOCATE ( surfaces%qcs(1:surfaces%ns)   )
    12211229          ALLOCATE ( surfaces%ncs(1:surfaces%ns)   )
     
    12251233!
    12261234!--       
    1227        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1235       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    12281236          ALLOCATE ( surfaces%qrs(1:surfaces%ns)   )
    12291237          ALLOCATE ( surfaces%nrs(1:surfaces%ns)   )
     
    12861294!
    12871295!--       
    1288        IF ( cloud_physics .AND. microphysics_morrison)  THEN
     1296       IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    12891297          DEALLOCATE ( surfaces%qcsws )
    12901298          DEALLOCATE ( surfaces%ncsws )
     
    12921300!
    12931301!--       
    1294        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1302       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    12951303          DEALLOCATE ( surfaces%qrsws )
    12961304          DEALLOCATE ( surfaces%nrsws )
     
    13581366!
    13591367!--       
    1360        IF ( cloud_physics .AND. microphysics_morrison)  THEN
     1368       IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    13611369          ALLOCATE ( surfaces%qcsws(1:surfaces%ns) )
    13621370          ALLOCATE ( surfaces%ncsws(1:surfaces%ns) )
     
    13641372!
    13651373!--       
    1366        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1374       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    13671375          ALLOCATE ( surfaces%qrsws(1:surfaces%ns) )
    13681376          ALLOCATE ( surfaces%nrsws(1:surfaces%ns) )
     
    14731481       DEALLOCATE ( surfaces%vpt1 )
    14741482
    1475        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1483       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    14761484          DEALLOCATE ( surfaces%qcs )
    14771485          DEALLOCATE ( surfaces%ncs )
     
    14801488       ENDIF
    14811489
    1482        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1490       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    14831491          DEALLOCATE ( surfaces%qrs )
    14841492          DEALLOCATE ( surfaces%nrs )
     
    15981606       ALLOCATE ( surfaces%vpt1(1:surfaces%ns) )
    15991607
    1600        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1608       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    16011609          ALLOCATE ( surfaces%qcs(1:surfaces%ns)   )
    16021610          ALLOCATE ( surfaces%ncs(1:surfaces%ns)   )
     
    16051613       ENDIF
    16061614
    1607        IF ( cloud_physics .AND. microphysics_seifert)  THEN
     1615       IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    16081616          ALLOCATE ( surfaces%qrs(1:surfaces%ns)   )
    16091617          ALLOCATE ( surfaces%nrs(1:surfaces%ns)   )
     
    21332141             IF ( humidity )  THEN
    21342142                surf%qs(num_h)   = 0.0_wp
    2135                 IF ( cloud_physics .AND. microphysics_morrison)  THEN
     2143                IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    21362144                   surf%qcs(num_h) = 0.0_wp
    21372145                   surf%ncs(num_h) = 0.0_wp
     
    21412149
    21422150                ENDIF
    2143                 IF ( cloud_physics .AND. microphysics_seifert)  THEN
     2151                IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    21442152                   surf%qrs(num_h) = 0.0_wp
    21452153                   surf%nrs(num_h) = 0.0_wp
     
    23142322             IF ( humidity )  THEN
    23152323                surf%qsws(num_h) = 0.0_wp
    2316                 IF ( cloud_physics  .AND.  microphysics_morrison ) THEN
     2324                IF ( surf_bulk_cloud_model  .AND.  surf_microphysics_morrison ) THEN
    23172325                   surf%ncsws(num_h) = 0.0_wp
    23182326                   surf%qcsws(num_h) = 0.0_wp
    23192327                ENDIF
    2320                 IF ( cloud_physics  .AND.  microphysics_seifert ) THEN
     2328                IF ( surf_bulk_cloud_model  .AND.  surf_microphysics_seifert ) THEN
    23212329                   surf%nrsws(num_h) = 0.0_wp
    23222330                   surf%qrsws(num_h) = 0.0_wp
     
    24492457!
    24502458!--             Following wall fluxes are assumed to be zero
    2451                 IF ( cloud_physics .AND. microphysics_morrison)  THEN
     2459                IF ( surf_bulk_cloud_model .AND. surf_microphysics_morrison)  THEN
    24522460                   surf%qcs(num_v) = 0.0_wp
    24532461                   surf%ncs(num_v) = 0.0_wp
     
    24562464                   surf%ncsws(num_v) = 0.0_wp
    24572465                ENDIF
    2458                 IF ( cloud_physics .AND. microphysics_seifert)  THEN
     2466                IF ( surf_bulk_cloud_model .AND. surf_microphysics_seifert)  THEN
    24592467                   surf%qrs(num_v) = 0.0_wp
    24602468                   surf%nrs(num_v) = 0.0_wp
  • palm/trunk/SOURCE/swap_timelevel.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    138141#endif
    139142
     143    USE bulk_cloud_model_mod,                                                  &
     144        ONLY:  bulk_cloud_model, bcm_swap_timelevel
     145
    140146    USE chemistry_model_mod,                                                   &
    141147        ONLY:  chem_swap_timelevel
     
    148154
    149155    USE control_parameters,                                                    &
    150         ONLY:  air_chemistry, cloud_physics, humidity, land_surface,           &
    151                microphysics_morrison, microphysics_seifert, neutral, ocean,    &
    152                passive_scalar, timestep_count, urban_surface
     156        ONLY:  air_chemistry, humidity, land_surface,                          &
     157               neutral, ocean, passive_scalar, timestep_count, urban_surface
    153158
    154159    USE gust_mod,                                                              &
     
    205210    IF ( humidity )  THEN
    206211       q = q_p
    207        IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    208           qc = qc_p
    209           nc = nc_p
    210        ENDIF             
    211        IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    212           qr = qr_p
    213           nr = nr_p
    214        ENDIF
    215212    ENDIF
    216213
    217214    IF ( passive_scalar )  s = s_p             
     215
     216    IF ( humidity  .AND.  bulk_cloud_model )  THEN
     217       CALL bcm_swap_timelevel ( 0 )
     218    ENDIF
    218219
    219220    IF ( land_surface )  THEN
     
    249250          IF ( humidity )  THEN
    250251             q => q_1;    q_p => q_2
    251              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    252                 qc => qc_1;    qc_p => qc_2
    253                 nc => nc_1;    nc_p => nc_2
    254              ENDIF
    255              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    256                 qr => qr_1;    qr_p => qr_2
    257                 nr => nr_1;    nr_p => nr_2
    258              ENDIF
    259252          ENDIF
    260253          IF ( passive_scalar )  THEN
     
    279272          IF ( humidity )  THEN
    280273             q => q_2;    q_p => q_1
    281              IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
    282                 qc => qc_2;    qc_p => qc_1
    283                 nc => nc_2;    nc_p => nc_1
    284              ENDIF
    285              IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    286                 qr => qr_2;    qr_p => qr_1
    287                 nr => nr_2;    nr_p => nr_1
    288              ENDIF
    289274          ENDIF
    290275          IF ( passive_scalar )  THEN
     
    300285    CALL tcm_swap_timelevel ( MOD( timestep_count, 2) )
    301286
     287    IF ( humidity  .AND.  bulk_cloud_model )  THEN
     288       CALL bcm_swap_timelevel ( MOD( timestep_count, 2) )
     289    ENDIF
     290
    302291    IF ( land_surface )  THEN
    303292       CALL lsm_swap_timelevel ( MOD( timestep_count, 2) )
  • palm/trunk/SOURCE/synthetic_turbulence_generator_mod.f90

    r3248 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3248 2018-09-14 09:42:06Z sward
    2730! Minor formating changes
    2831!
     
    145148        ONLY:  mean_inflow_profiles, u, v, w
    146149
    147     USE constants,                                                             &
     150    USE basic_constants_and_equations_mod,                                     &
    148151        ONLY:  pi
    149152
  • palm/trunk/SOURCE/time_integration.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    381384               bc_lr_cyc, bc_ns_cyc, bc_pt_t_val, bc_q_t_val,                  &
    382385               call_psolver_at_all_substeps,  child_domain, cloud_droplets,    &
    383                cloud_physics, constant_flux_layer, constant_heatflux,          &
     386               constant_flux_layer, constant_heatflux,                         &
    384387               create_disturbances, dopr_n, constant_diffusion, coupling_mode, &
    385388               coupling_start_time, current_timestep_number,                   &
     
    393396               intermediate_timestep_count_max,                                &
    394397               land_surface, large_scale_forcing,                              &
    395                loop_optimization, lsf_surf, lsf_vert, masks,                   &
    396                microphysics_morrison, microphysics_seifert, mid,               &
     398               loop_optimization, lsf_surf, lsf_vert, masks, mid,              &
    397399               multi_agent_system_end, multi_agent_system_start,               &
    398400               nesting_offline, neutral, nr_timesteps_this_run, nudging,       &
     
    441443               lsf_nesting_offline, lsf_nesting_offline_mass_conservation
    442444
    443     USE microphysics_mod,                                                      &
    444         ONLY: collision_turbulence
     445    USE bulk_cloud_model_mod,                                                  &
     446        ONLY: bulk_cloud_model, calc_liquid_water_content,                     &
     447              collision_turbulence, microphysics_morrison, microphysics_seifert
    445448
    446449    USE netcdf_data_input_mod,                                                 &
     
    757760          IF ( humidity )  THEN
    758761             CALL exchange_horiz( q_p, nbgp )
    759              IF ( cloud_physics .AND. microphysics_morrison )  THEN
     762             IF ( bulk_cloud_model .AND. microphysics_morrison )  THEN
    760763                CALL exchange_horiz( qc_p, nbgp )
    761764                CALL exchange_horiz( nc_p, nbgp )
    762765             ENDIF
    763              IF ( cloud_physics .AND. microphysics_seifert )  THEN
     766             IF ( bulk_cloud_model .AND. microphysics_seifert )  THEN
    764767                CALL exchange_horiz( qr_p, nbgp )
    765768                CALL exchange_horiz( nr_p, nbgp )
     
    822825                   CALL exchange_horiz( q, nbgp )
    823826
    824                    IF ( cloud_physics  .AND.  microphysics_morrison )  THEN
     827                   IF ( bulk_cloud_model  .AND.  microphysics_morrison )  THEN
    825828                       CALL exchange_horiz( qc, nbgp )
    826829                       CALL exchange_horiz( nc, nbgp )
    827830                   ENDIF
    828                    IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     831                   IF ( bulk_cloud_model  .AND.  microphysics_seifert )  THEN
    829832                       CALL exchange_horiz( qr, nbgp )
    830833                       CALL exchange_horiz( nr, nbgp )
     
    960963!
    961964!--       If required, compute liquid water content
    962           IF ( cloud_physics )  THEN
     965          IF ( bulk_cloud_model )  THEN
    963966             CALL calc_liquid_water_content
    964967          ENDIF
  • palm/trunk/SOURCE/time_integration_spinup.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    577580    FUNCTION solar_angle( local_time )
    578581
    579        USE constants,                                                          &
     582       USE basic_constants_and_equations_mod,                                  &
    580583       ONLY:  pi
    581584     
  • palm/trunk/SOURCE/timestep.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    154157    USE kinds
    155158
    156     USE microphysics_mod,                                                      &
     159    USE bulk_cloud_model_mod,                                                  &
    157160        ONLY:  dt_precipitation
    158161
  • palm/trunk/SOURCE/tridia_solver_mod.f90

    r3241 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    109112 
    110113
     114    USE basic_constants_and_equations_mod,                                     &
     115        ONLY:  pi
     116
    111117    USE indices,                                                               &
    112118        ONLY:  nx, ny, nz
     
    145151       USE arrays_3d,                                                          &
    146152           ONLY:  ddzu_pres, ddzw, rho_air_zw
    147 
    148        USE kinds
    149153
    150154       IMPLICIT NONE
     
    186190              ONLY:  tric, rho_air
    187191
    188           USE constants,                                                       &
    189               ONLY:  pi
    190 
    191192          USE control_parameters,                                              &
    192193              ONLY:  ibc_p_b, ibc_p_t
     
    195196              ONLY:  dx, dy
    196197
    197 
    198           USE kinds
    199198
    200199          IMPLICIT NONE
     
    282281              ONLY:  ibc_p_b, ibc_p_t
    283282
    284           USE kinds
    285 
    286283          IMPLICIT NONE
    287284
     
    358355              ONLY:  ibc_p_b, ibc_p_t
    359356
    360           USE kinds
    361 
    362357          IMPLICIT NONE
    363358
     
    431426          USE arrays_3d,                                                       &
    432427              ONLY:  tri, tric
    433 
    434           USE kinds
    435428
    436429          IMPLICIT NONE
     
    482475           ONLY:  ibc_p_b, ibc_p_t
    483476
    484        USE kinds
    485 
    486477       IMPLICIT NONE
    487478
     
    533524!------------------------------------------------------------------------------!
    534525       SUBROUTINE maketri_1dd( j )
    535 
    536           USE constants,                                                       &
    537               ONLY:  pi
    538 
    539           USE kinds
    540526
    541527          IMPLICIT NONE
  • palm/trunk/SOURCE/turbulence_closure_mod.f90

    r3245 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3245 2018-09-13 14:08:16Z knoop
    2730! unused variables removed, shortest_distance has wp now
    2831!
     
    154157#endif
    155158
     159    USE basic_constants_and_equations_mod,                                     &
     160        ONLY:  g, kappa, lv_d_cp, lv_d_rd
     161
    156162    USE control_parameters,                                                    &
    157163        ONLY:  constant_diffusion, dt_3d, e_init, humidity,                    &
    158164               initializing_actions, intermediate_timestep_count,              &
    159                intermediate_timestep_count_max, kappa, km_constant,            &
     165               intermediate_timestep_count_max, km_constant,                   &
    160166               les_dynamic, les_mw, ocean, plant_canopy, prandtl_number,       &
    161167               prho_reference, pt_reference, rans_mode, rans_tke_e, rans_tke_l,&
     
    950956 SUBROUTINE tcm_init_arrays
    951957
    952     USE microphysics_mod,                                                      &
     958    USE bulk_cloud_model_mod,                                                  &
    953959        ONLY:  collision_turbulence
    954960
     
    25982604
    25992605    USE arrays_3d,                                                             &
    2600         ONLY:  ddzw, dd2zu, drho_air_zw, q, ql
    2601 
    2602     USE cloud_parameters,                                                      &
    2603         ONLY:  l_d_cp, l_d_r, pt_d_t, t_d_pt
     2606        ONLY:  ddzw, dd2zu, drho_air_zw, q, ql, d_exner, exner
    26042607
    26052608    USE control_parameters,                                                    &
    2606         ONLY:  cloud_droplets, cloud_physics, constant_flux_layer, g, neutral, &
     2609        ONLY:  cloud_droplets, constant_flux_layer, neutral,                  &
    26072610               rho_reference, use_single_reference_value, use_surface_fluxes,  &
    26082611               use_top_fluxes
     
    26102613    USE grid_variables,                                                        &
    26112614        ONLY:  ddx, dx, ddy, dy
     2615
     2616    USE bulk_cloud_model_mod,                                                  &
     2617        ONLY:  bulk_cloud_model
    26122618
    26132619    USE surface_mod,                                                           &
     
    30673073!--                Flag 9 is used to mask top fluxes, flag 30 to mask
    30683074!--                surface fluxes
    3069                    IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3075                   IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    30703076                      k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    30713077                      k2 = 0.61_wp * pt(k,j,i)
     
    30833089                                          BTEST( wall_flags_0(k,j,i), 9 )      &
    30843090                                        )
    3085                    ELSE IF ( cloud_physics )  THEN
     3091                   ELSE IF ( bulk_cloud_model )  THEN
    30863092                      IF ( ql(k,j,i) == 0.0_wp )  THEN
    30873093                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    30883094                         k2 = 0.61_wp * pt(k,j,i)
    30893095                      ELSE
    3090                          theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3091                          temp  = theta * t_d_pt(k)
     3096                         theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3097                         temp  = theta * exner(k)
    30923098                         k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                  &
    30933099                                       ( q(k,j,i) - ql(k,j,i) ) *              &
    3094                               ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /         &
    3095                               ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *           &
     3100                              ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /       &
     3101                              ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *        &
    30963102                              ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3097                          k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3103                         k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    30983104                      ENDIF
    30993105                      tend(k,j,i) = tend(k,j,i) - kh(k,j,i) *                  &
     
    31443150                         k = surf_def_h(l)%k(m)
    31453151
    3146                          IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3152                         IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    31473153                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    31483154                            k2 = 0.61_wp * pt(k,j,i)
    3149                          ELSE IF ( cloud_physics )  THEN
     3155                         ELSE IF ( bulk_cloud_model )  THEN
    31503156                            IF ( ql(k,j,i) == 0.0_wp )  THEN
    31513157                               k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    31523158                               k2 = 0.61_wp * pt(k,j,i)
    31533159                            ELSE
    3154                                theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3155                                temp  = theta * t_d_pt(k)
     3160                               theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3161                               temp  = theta * exner(k)
    31563162                               k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *            &
    31573163                                          ( q(k,j,i) - ql(k,j,i) ) *           &
    3158                                  ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /      &
    3159                                  ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *        &
     3164                                 ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /    &
     3165                                 ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *     &
    31603166                                 ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3161                                k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3167                               k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    31623168                            ENDIF
    31633169                         ELSE IF ( cloud_droplets )  THEN
     
    31813187                      k = surf_lsm_h%k(m)
    31823188
    3183                       IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3189                      IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    31843190                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    31853191                         k2 = 0.61_wp * pt(k,j,i)
    3186                       ELSE IF ( cloud_physics )  THEN
     3192                      ELSE IF ( bulk_cloud_model )  THEN
    31873193                         IF ( ql(k,j,i) == 0.0_wp )  THEN
    31883194                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    31893195                            k2 = 0.61_wp * pt(k,j,i)
    31903196                         ELSE
    3191                             theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3192                             temp  = theta * t_d_pt(k)
     3197                            theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3198                            temp  = theta * exner(k)
    31933199                            k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *               &
    31943200                                          ( q(k,j,i) - ql(k,j,i) ) *           &
    3195                                  ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /      &
    3196                                  ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *        &
     3201                                 ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /    &
     3202                                 ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *     &
    31973203                                 ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3198                             k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3204                            k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    31993205                         ENDIF
    32003206                      ELSE IF ( cloud_droplets )  THEN
     
    32173223                      k = surf_usm_h%k(m)
    32183224
    3219                       IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3225                      IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    32203226                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    32213227                         k2 = 0.61_wp * pt(k,j,i)
    3222                       ELSE IF ( cloud_physics )  THEN
     3228                      ELSE IF ( bulk_cloud_model )  THEN
    32233229                         IF ( ql(k,j,i) == 0.0_wp )  THEN
    32243230                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    32253231                            k2 = 0.61_wp * pt(k,j,i)
    32263232                         ELSE
    3227                             theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3228                             temp  = theta * t_d_pt(k)
     3233                            theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3234                            temp  = theta * exner(k)
    32293235                            k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *               &
    32303236                                          ( q(k,j,i) - ql(k,j,i) ) *           &
    3231                                  ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /      &
    3232                                  ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *        &
     3237                                 ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /    &
     3238                                 ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *     &
    32333239                                 ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3234                             k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3240                            k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    32353241                         ENDIF
    32363242                      ELSE IF ( cloud_droplets )  THEN
     
    32603266                      k = surf_def_h(2)%k(m)
    32613267
    3262                       IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3268                      IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    32633269                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    32643270                         k2 = 0.61_wp * pt(k,j,i)
    3265                       ELSE IF ( cloud_physics )  THEN
     3271                      ELSE IF ( bulk_cloud_model )  THEN
    32663272                         IF ( ql(k,j,i) == 0.0_wp )  THEN
    32673273                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    32683274                            k2 = 0.61_wp * pt(k,j,i)
    32693275                         ELSE
    3270                             theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3271                             temp  = theta * t_d_pt(k)
     3276                            theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3277                            temp  = theta * exner(k)
    32723278                            k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *               &
    32733279                                       ( q(k,j,i) - ql(k,j,i) ) *              &
    3274                               ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /         &
    3275                               ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *           &
     3280                              ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /       &
     3281                              ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *        &
    32763282                              ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3277                             k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3283                            k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    32783284                         ENDIF
    32793285                      ELSE IF ( cloud_droplets )  THEN
     
    33163322
    33173323    USE arrays_3d,                                                             &
    3318         ONLY:  ddzw, dd2zu, drho_air_zw, q, ql
    3319 
    3320     USE cloud_parameters,                                                      &
    3321         ONLY:  l_d_cp, l_d_r, pt_d_t, t_d_pt
     3324        ONLY:  ddzw, dd2zu, drho_air_zw, q, ql, d_exner, exner
    33223325
    33233326    USE control_parameters,                                                    &
    3324         ONLY:  cloud_droplets, cloud_physics, constant_flux_layer, g, neutral, &
     3327        ONLY:  cloud_droplets, constant_flux_layer, neutral,                &
    33253328               rho_reference, use_single_reference_value, use_surface_fluxes,  &
    33263329               use_top_fluxes
     
    33283331    USE grid_variables,                                                        &
    33293332        ONLY:  ddx, dx, ddy, dy
     3333
     3334    USE bulk_cloud_model_mod,                                                  &
     3335        ONLY:  bulk_cloud_model
    33303336
    33313337    USE surface_mod,                                                           &
     
    38643870!
    38653871!--          Flag 9 is used to mask top fluxes, flag 30 to mask surface fluxes
    3866              IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets )  THEN
     3872             IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets )  THEN
    38673873                k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    38683874                k2 = 0.61_wp * pt(k,j,i)
     
    38803886                                        )
    38813887
    3882              ELSE IF ( cloud_physics )  THEN
     3888             ELSE IF ( bulk_cloud_model )  THEN
    38833889                IF ( ql(k,j,i) == 0.0_wp )  THEN
    38843890                   k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    38853891                   k2 = 0.61_wp * pt(k,j,i)
    38863892                ELSE
    3887                    theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3888                    temp  = theta * t_d_pt(k)
     3893                   theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3894                   temp  = theta * exner(k)
    38893895                   k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                        &
    38903896                                 ( q(k,j,i) - ql(k,j,i) ) *                    &
    3891                         ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /               &
    3892                         ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *                 &
     3897                        ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /             &
     3898                        ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *              &
    38933899                        ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3894                    k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3900                   k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    38953901                ENDIF
    38963902                tend(k,j,i) = tend(k,j,i) - kh(k,j,i) * g /                    &
     
    39343940                   k = surf_def_h(l)%k(m)
    39353941
    3936                    IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3942                   IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    39373943                      k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    39383944                      k2 = 0.61_wp * pt(k,j,i)
    3939                    ELSE IF ( cloud_physics )  THEN
     3945                   ELSE IF ( bulk_cloud_model )  THEN
    39403946                      IF ( ql(k,j,i) == 0.0_wp )  THEN
    39413947                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    39423948                         k2 = 0.61_wp * pt(k,j,i)
    39433949                      ELSE
    3944                         theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3945                         temp  = theta * t_d_pt(k)
     3950                        theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3951                        temp  = theta * exner(k)
    39463952                        k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                   &
    39473953                                   ( q(k,j,i) - ql(k,j,i) ) *                  &
    3948                           ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /             &
    3949                           ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *               &
     3954                          ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /           &
     3955                          ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *            &
    39503956                          ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3951                         k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3957                        k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    39523958                      ENDIF
    39533959                   ELSE IF ( cloud_droplets )  THEN
     
    39713977                k = surf_lsm_h%k(m)
    39723978
    3973                 IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     3979                IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    39743980                    k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    39753981                    k2 = 0.61_wp * pt(k,j,i)
    3976                 ELSE IF ( cloud_physics )  THEN
     3982                ELSE IF ( bulk_cloud_model )  THEN
    39773983                    IF ( ql(k,j,i) == 0.0_wp )  THEN
    39783984                       k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    39793985                       k2 = 0.61_wp * pt(k,j,i)
    39803986                    ELSE
    3981                        theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    3982                        temp  = theta * t_d_pt(k)
     3987                       theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3988                       temp  = theta * exner(k)
    39833989                       k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                    &
    39843990                                     ( q(k,j,i) - ql(k,j,i) ) *                &
    3985                             ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /           &
    3986                             ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *             &
     3991                            ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /         &
     3992                            ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *          &
    39873993                            ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3988                        k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     3994                       k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    39893995                   ENDIF
    39903996                ELSE IF ( cloud_droplets )  THEN
     
    40074013                k = surf_usm_h%k(m)
    40084014
    4009                 IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets ) THEN
     4015                IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN
    40104016                    k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    40114017                    k2 = 0.61_wp * pt(k,j,i)
    4012                 ELSE IF ( cloud_physics )  THEN
     4018                ELSE IF ( bulk_cloud_model )  THEN
    40134019                    IF ( ql(k,j,i) == 0.0_wp )  THEN
    40144020                       k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    40154021                       k2 = 0.61_wp * pt(k,j,i)
    40164022                    ELSE
    4017                        theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    4018                        temp  = theta * t_d_pt(k)
     4023                       theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     4024                       temp  = theta * exner(k)
    40194025                       k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                    &
    40204026                                     ( q(k,j,i) - ql(k,j,i) ) *                &
    4021                             ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /           &
    4022                             ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *             &
     4027                            ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /         &
     4028                            ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *          &
    40234029                            ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    4024                        k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     4030                       k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    40254031                   ENDIF
    40264032                ELSE IF ( cloud_droplets )  THEN
     
    40474053
    40484054
    4049                 IF ( .NOT. cloud_physics .AND. .NOT. cloud_droplets )  THEN
     4055                IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets )  THEN
    40504056                   k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    40514057                   k2 = 0.61_wp * pt(k,j,i)
    4052                 ELSE IF ( cloud_physics )  THEN
     4058                ELSE IF ( bulk_cloud_model )  THEN
    40534059                   IF ( ql(k,j,i) == 0.0_wp )  THEN
    40544060                      k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    40554061                      k2 = 0.61_wp * pt(k,j,i)
    40564062                   ELSE
    4057                       theta = pt(k,j,i) + pt_d_t(k) * l_d_cp * ql(k,j,i)
    4058                       temp  = theta * t_d_pt(k)
     4063                      theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     4064                      temp  = theta * exner(k)
    40594065                      k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp *                     &
    40604066                                 ( q(k,j,i) - ql(k,j,i) ) *                    &
    4061                         ( 1.0_wp + 0.622_wp * l_d_r / temp ) ) /               &
    4062                         ( 1.0_wp + 0.622_wp * l_d_r * l_d_cp *                 &
     4067                        ( 1.0_wp + 0.622_wp * lv_d_rd / temp ) ) /             &
     4068                        ( 1.0_wp + 0.622_wp * lv_d_rd * lv_d_cp *              &
    40634069                        ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    4064                       k2 = theta * ( l_d_cp / temp * k1 - 1.0_wp )
     4070                      k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
    40654071                   ENDIF
    40664072                ELSE IF ( cloud_droplets )  THEN
     
    41004106        ONLY:  ddx2, ddy2
    41014107
    4102     USE microphysics_mod,                                                      &
     4108    USE bulk_cloud_model_mod,                                                  &
    41034109        ONLY:  collision_turbulence
    41044110
     
    42374243        ONLY:  ddx2, ddy2
    42384244       
    4239     USE microphysics_mod,                                                      &
     4245    USE bulk_cloud_model_mod,                                                  &
    42404246        ONLY:  collision_turbulence
    42414247
     
    44764482
    44774483    USE control_parameters,                                                    &
    4478         ONLY:  atmos_ocean_sign, g, use_single_reference_value,                &
     4484        ONLY:  atmos_ocean_sign, use_single_reference_value,                   &
    44794485               wall_adjustment, wall_adjustment_factor
    44804486
     
    45334539
    45344540    USE control_parameters,                                                    &
    4535         ONLY:  atmos_ocean_sign, g, use_single_reference_value
     4541        ONLY:  atmos_ocean_sign, use_single_reference_value
    45364542
    45374543    IMPLICIT NONE
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r3248 r3274  
    2828! -----------------
    2929! $Id$
     30! Modularization of all bulk cloud physics code components
     31!
     32! 3248 2018-09-14 09:42:06Z sward
    3033! Minor formating changes
    3134!
     
    331334#if ! defined( __nopointer )
    332335    USE arrays_3d,                                                             &
    333         ONLY:  dzu, hyp, zu, pt, pt_1, pt_2, p, u, v, w, hyp, tend
     336        ONLY:  dzu, hyp, zu, pt, pt_1, pt_2, p, u, v, w, hyp, tend, exner
    334337#endif
    335338
    336     USE cloud_parameters,                                                      &
    337         ONLY:  cp, r_d
    338 
    339     USE constants,                                                             &
    340         ONLY:  pi
    341    
     339    USE basic_constants_and_equations_mod,                                     &
     340        ONLY:  c_p, g, kappa, pi, r_d
     341
    342342    USE control_parameters,                                                    &
    343343        ONLY:  coupling_start_time, topography, dt_3d, humidity,               &
     
    346346               timestep_scheme, tsc, coupling_char, io_blocks, io_group,       &
    347347               message_string, time_since_reference_point, surface_pressure,   &
    348                g, pt_surface, large_scale_forcing, lsf_surf, spinup,           &
     348               pt_surface, large_scale_forcing, lsf_surf, spinup,              &
    349349               spinup_pt_mean, spinup_time, time_do3d, dt_do3d,                &
    350                average_count_3d, varnamelength, urban_surface, kappa,          &
     350               average_count_3d, varnamelength, urban_surface,                 &
    351351               plant_canopy
    352352
     
    376376        ONLY:  albedo_type, radiation_interaction, calc_zenith, zenith,        &
    377377               radiation, rad_sw_in, rad_lw_in, rad_sw_out, rad_lw_out,        &
    378                sigma_sb, solar_constant, sun_direction, sun_dir_lat,           &
    379                sun_dir_lon,                                                    &
     378               sigma_sb, sun_direction, sun_dir_lat, sun_dir_lon,              &
    380379               force_radiation_call, surfinsw, surfinlw, surfinswdir,          &
    381380               surfinswdif, surfoutsw, surfoutlw, surfins,nsvfl, svf, svfsurf, &
     
    36033602        REAL(wp)     ::  ground_floor_level_l         !< local height of ground floor level
    36043603        REAL(wp)     ::  z_agl                        !< height above ground
    3605         REAL(wp), DIMENSION(nzb:nzt)   ::  exn        !< value of the Exner function in layers
    36063604
    36073605!
     
    46904688        IF ( TRIM( initializing_actions ) /= 'read_restart_data'  .AND.        &
    46914689             TRIM( initializing_actions ) /= 'cyclic_fill' )  THEN
    4692        
    4693 !--         Calculate initial surface temperature from pt of adjacent gridbox
    4694 #if ! defined( __nopointer )
    4695             exn(nzb:nzt) = (hyp(nzb:nzt) / 100000.0_wp )**0.286_wp          !< Exner function
    4696 #endif
    46974690
    46984691!
     
    47054698               k = surf_usm_h%k(m)
    47064699
    4707                t_surf_h(m) = pt(k,j,i) * exn(k)
    4708                t_surf_window_h(m) = pt(k,j,i) * exn(k)
    4709                t_surf_green_h(m) = pt(k,j,i) * exn(k)
    4710                surf_usm_h%pt_surface(m) = pt(k,j,i) * exn(k)
     4700               t_surf_h(m) = pt(k,j,i) * exner(k)
     4701               t_surf_window_h(m) = pt(k,j,i) * exner(k)
     4702               t_surf_green_h(m) = pt(k,j,i) * exner(k)
     4703               surf_usm_h%pt_surface(m) = pt(k,j,i) * exner(k)
    47114704            ENDDO
    47124705!
     
    47184711                  k = surf_usm_v(l)%k(m)
    47194712
    4720                   t_surf_v(l)%t(m) = pt(k,j,i) * exn(k)
    4721                   t_surf_window_v(l)%t(m) = pt(k,j,i) * exn(k)
    4722                   t_surf_green_v(l)%t(m) = pt(k,j,i) * exn(k)
    4723                   surf_usm_v(l)%pt_surface(m) = pt(k,j,i) * exn(k)
     4713                  t_surf_v(l)%t(m) = pt(k,j,i) * exner(k)
     4714                  t_surf_window_v(l)%t(m) = pt(k,j,i) * exner(k)
     4715                  t_surf_green_v(l)%t(m) = pt(k,j,i) * exner(k)
     4716                  surf_usm_v(l)%pt_surface(m) = pt(k,j,i) * exner(k)
    47244717               ENDDO
    47254718            ENDDO
     
    73387331        REAL(wp)                              :: lambda_surface_window !< current value of lambda_surface (heat conductivity between air and window)
    73397332        REAL(wp)                              :: lambda_surface_green  !< current value of lambda_surface (heat conductivity between air and greeb wall)
    7340         REAL(wp), DIMENSION(nzb:nzt)          :: exn                !< value of the Exner function in layers
    73417333       
    73427334        REAL(wp)                              :: dtime              !< simulated time of day (in UTC)
     
    73457337
    73467338
    7347 #if ! defined( __nopointer )
    7348         exn(nzb:nzt) = (hyp(nzb:nzt) / 100000.0_wp )**0.286_wp          !< Exner function
    7349 #endif
    73507339!       
    73517340!--     First, treat horizontal surface elements
     
    73717360#if ! defined( __nopointer )
    73727361!
    7373 !--        calculate rho * cp coefficient at surface layer
    7374            rho_cp  = cp * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exn(k) )
     7362!--        calculate rho * c_p coefficient at surface layer
     7363           rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exner(k) )
    73757364#endif
    73767365!
     
    73877376           surf_usm_h%r_a_green(m)  = surf_usm_h%r_a(m)
    73887377
    7389 !            r_a = ( surf_usm_h%pt1(m) - t_surf_h(m) / exn(k) ) /                              &
     7378!            r_a = ( surf_usm_h%pt1(m) - t_surf_h(m) / exner(k) ) /                              &
    73907379!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    7391 !            r_a_window = ( surf_usm_h%pt1(m) - t_surf_window_h(m) / exn(k) ) /                &
     7380!            r_a_window = ( surf_usm_h%pt1(m) - t_surf_window_h(m) / exner(k) ) /                &
    73927381!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    7393 !            r_a_green = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exn(k) ) /                  &
     7382!            r_a_green = ( surf_usm_h%pt1(m) - t_surf_green_h(m) / exner(k) ) /                  &
    73947383!                  ( surf_usm_h%ts(m) * surf_usm_h%us(m) + 1.0E-20_wp )
    73957384               
     
    74467435           coef_2 = 4.0_wp * surf_usm_h%emissivity(ind_veg_wall,m) *           &
    74477436                             sigma_sb * t_surf_h(m) ** 3                       &
    7448                            + lambda_surface + f_shf / exn(k)
     7437                           + lambda_surface + f_shf / exner(k)
    74497438           coef_window_2 = 4.0_wp * surf_usm_h%emissivity(ind_wat_win,m) *     &
    74507439                             sigma_sb * t_surf_window_h(m) ** 3                &
    7451                            + lambda_surface_window + f_shf_window / exn(k)
     7440                           + lambda_surface_window + f_shf_window / exner(k)
    74527441           coef_green_2 = 4.0_wp * surf_usm_h%emissivity(ind_pav_green,m) *    &
    74537442                             sigma_sb * t_surf_green_h(m) ** 3                 &
    7454                            + lambda_surface_green + f_shf_green / exn(k)
     7443                           + lambda_surface_green + f_shf_green / exner(k)
    74557444
    74567445!--        implicit solution when the surface layer has no heat capacity,
     
    74807469                               + surf_usm_h%frac(ind_wat_win,m) * t_surf_window_h_p(m)   &
    74817470                               + surf_usm_h%frac(ind_pav_green,m) * t_surf_green_h_p(m) )  &
    7482                                / exn(k)
     7471                               / exner(k)
    74837472                               
    74847473           IF ( humidity )  surf_usm_h%vpt_surface(m) =                        &
     
    75407529!
    75417530!--        ground/wall/roof surface heat flux
    7542            surf_usm_h%wshf_eb(m)   = - f_shf  * ( surf_usm_h%pt1(m) - t_surf_h_p(m) / exn(k) ) *               &
     7531           surf_usm_h%wshf_eb(m)   = - f_shf  * ( surf_usm_h%pt1(m) - t_surf_h_p(m) / exner(k) ) *               &
    75437532                                       surf_usm_h%frac(ind_veg_wall,m)         &
    7544                                      - f_shf_window  * ( surf_usm_h%pt1(m) - t_surf_window_h_p(m) / exn(k) ) * &
     7533                                     - f_shf_window  * ( surf_usm_h%pt1(m) - t_surf_window_h_p(m) / exner(k) ) * &
    75457534                                       surf_usm_h%frac(ind_wat_win,m)          &
    7546                                      - f_shf_green  * ( surf_usm_h%pt1(m) - t_surf_green_h_p(m) / exn(k) ) *   &
     7535                                     - f_shf_green  * ( surf_usm_h%pt1(m) - t_surf_green_h_p(m) / exner(k) ) *   &
    75477536                                       surf_usm_h%frac(ind_pav_green,m)
    75487537!           
    75497538!--        store kinematic surface heat fluxes for utilization in other processes
    75507539!--        diffusion_s, surface_layer_fluxes,...
    7551            surf_usm_h%shf(m) = surf_usm_h%wshf_eb(m) / cp
     7540           surf_usm_h%shf(m) = surf_usm_h%wshf_eb(m) / c_p
    75527541
    75537542       ENDDO
     
    75737562#if ! defined( __nopointer )         
    75747563!
    7575 !--          calculate rho * cp coefficient at surface layer
    7576              rho_cp  = cp * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exn(k) )
     7564!--          calculate rho * c_p coefficient at surface layer
     7565             rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exner(k) )
    75777566#endif
    75787567
     
    76477636              coef_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_veg_wall,m) *     &
    76487637                                sigma_sb * t_surf_v(l)%t(m) ** 3               &
    7649                               + lambda_surface + f_shf / exn(k)
     7638                              + lambda_surface + f_shf / exner(k)
    76507639              coef_window_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_wat_win,m) *&
    76517640                                sigma_sb * t_surf_window_v(l)%t(m) ** 3        &
    7652                               + lambda_surface_window + f_shf / exn(k)
     7641                              + lambda_surface_window + f_shf / exner(k)
    76537642              coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(ind_pav_green,m) *&
    76547643                                sigma_sb * t_surf_green_v(l)%t(m) ** 3         &
    7655                               + lambda_surface_green + f_shf / exn(k)
     7644                              + lambda_surface_green + f_shf / exner(k)
    76567645
    76577646!--           implicit solution when the surface layer has no heat capacity,
     
    76847673                                      + surf_usm_v(l)%frac(ind_wat_win,m) * t_surf_window_v_p(l)%t(m)  &
    76857674                                      + surf_usm_v(l)%frac(ind_pav_green,m) * t_surf_green_v_p(l)%t(m) ) &
    7686                                       / exn(k)
     7675                                      / exner(k)
    76877676                                     
    76887677              IF ( humidity )  surf_usm_v(l)%vpt_surface(m) =                  &
     
    77517740              surf_usm_v(l)%wshf_eb(m)   =                                     &
    77527741                 - f_shf  * ( surf_usm_v(l)%pt1(m) -                           &
    7753                  t_surf_v_p(l)%t(m) / exn(k) ) * surf_usm_v(l)%frac(ind_veg_wall,m)       &
     7742                 t_surf_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_veg_wall,m)       &
    77547743                 - f_shf_window  * ( surf_usm_v(l)%pt1(m) -                    &
    7755                  t_surf_window_v_p(l)%t(m) / exn(k) ) * surf_usm_v(l)%frac(ind_wat_win,m)&
     7744                 t_surf_window_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_wat_win,m)&
    77567745                 - f_shf_green  * ( surf_usm_v(l)%pt1(m) -                     &
    7757                  t_surf_green_v_p(l)%t(m) / exn(k) ) * surf_usm_v(l)%frac(ind_pav_green,m)
     7746                 t_surf_green_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(ind_pav_green,m)
    77587747
    77597748!           
    77607749!--           store kinematic surface heat fluxes for utilization in other processes
    77617750!--           diffusion_s, surface_layer_fluxes,...
    7762               surf_usm_v(l)%shf(m) = surf_usm_v(l)%wshf_eb(m) / cp
     7751              surf_usm_v(l)%shf(m) = surf_usm_v(l)%wshf_eb(m) / c_p
    77637752
    77647753           ENDDO
     
    77907779                         (dtime/3600.0_wp-REAL(dhour,wp))*aheatprof(k,dhour+1)
    77917780                 IF ( aheat(k,j,i) > 0.0_wp )  THEN
    7792                     pt(k,j,i) = pt(k,j,i) + aheat(k,j,i)*acoef*dt_3d/(exn(k)*rho_cp*dzu(k))
     7781                    pt(k,j,i) = pt(k,j,i) + aheat(k,j,i)*acoef*dt_3d/(exner(k)*rho_cp*dzu(k))
    77937782                 ENDIF
    77947783              ENDIF
  • palm/trunk/SOURCE/uv_exposure_model_mod.f90

    r3248 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3248 2018-09-14 09:42:06Z sward
    2730! Minor formating changes
    2831!
     
    7780!------------------------------------------------------------------------------!
    7881 MODULE uv_exposure_model_mod
    79  
     82
     83
     84    USE basic_constants_and_equations_mod,                                     &
     85        ONLY:  pi
    8086
    8187    USE kinds
     
    640646!> Module-specific routine for new module
    641647!------------------------------------------------------------------------------!
    642  SUBROUTINE uvem_solar_position
    643 
    644     USE constants,                                                             &
    645        ONLY:  pi
     648 SUBROUTINE uvem_solar_position
    646649   
    647650    USE date_and_time_mod,                                                     &
     
    713716!------------------------------------------------------------------------------!
    714717 SUBROUTINE uvem_calc_exposure
    715    
    716     USE constants,                                                             &
    717         ONLY:  pi
    718718
    719719    USE indices,                                                               &
  • palm/trunk/SOURCE/virtual_flight_mod.f90

    r3248 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3248 2018-09-14 09:42:06Z sward
    2730! Minor formating changes
    2831!
     
    311314    SUBROUTINE flight_init
    312315 
    313        USE constants,                                                          &
     316       USE basic_constants_and_equations_mod,                                  &
    314317           ONLY:  pi
    315318   
     
    410413   
    411414       USE control_parameters,                                                 &
    412           ONLY:  cloud_droplets, cloud_physics, humidity, neutral,             &
    413                  passive_scalar
    414          
     415          ONLY:  cloud_droplets, humidity, neutral, passive_scalar
     416
     417       USE bulk_cloud_model_mod,                                               &
     418           ONLY:  bulk_cloud_model
     419
    415420       USE netcdf_interface
    416421   
     
    441446          id_q       = num_var_fl
    442447       ENDIF
    443        IF ( cloud_physics .OR. cloud_droplets )  THEN
     448       IF ( bulk_cloud_model .OR. cloud_droplets )  THEN
    444449          num_var_fl = num_var_fl + 1 
    445450          id_ql      = num_var_fl
     
    533538
    534539       USE control_parameters,                                                 &
    535            ONLY:  cloud_droplets, cloud_physics, dt_3d, humidity, neutral,     &
     540           ONLY:  cloud_droplets, dt_3d, humidity, neutral,                    &
    536541                  passive_scalar, simulated_time
    537542                 
     
    544549       USE indices,                                                            &
    545550           ONLY:  nx, nxl, nxr, ny, nys, nyn
     551
     552       USE bulk_cloud_model_mod,                                               &
     553           ONLY:  bulk_cloud_model
    546554
    547555       USE pegrid
     
    712720!
    713721!--             Liquid water content
    714                 IF ( cloud_physics .OR. cloud_droplets )  THEN
     722                IF ( bulk_cloud_model .OR. cloud_droplets )  THEN
    715723                   CALL interpolate_xyz( ql, zu, ddzu, 1.0_wp, x, y, var_index, j, i )
    716724                   var_index = var_index + 1
  • palm/trunk/SOURCE/wind_turbine_model_mod.f90

    r3248 r3274  
    2626! -----------------
    2727! $Id$
     28! Modularization of all bulk cloud physics code components
     29!
     30! 3248 2018-09-14 09:42:06Z sward
    2831! Minor formating changes
    2932!
     
    175178        ONLY:  tend, u, v, w, zu, zw
    176179
    177     USE constants,                                                             &
     180    USE basic_constants_and_equations_mod,                                     &
    178181        ONLY:  pi
    179182
  • palm/trunk/SOURCE/write_restart_data_mod.f90

    r3065 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3065 2018-06-12 07:03:02Z Giersch
    2730! New parameters concerning vertical grid stretching have been added
    2831!
     
    109112           ONLY:  nx, ny, nz
    110113
    111        USE microphysics_mod,                                                   &
    112            ONLY:  c_sedimentation, cloud_water_sedimentation,                  &
    113                   collision_turbulence, limiter_sedimentation, nc_const,       &
    114                   ventilation_effect
     114       USE bulk_cloud_model_mod,                                               &
     115           ONLY:  bulk_cloud_model, bcm_wrd_global
    115116
    116117       USE model_1d_mod,                                                       &
     
    264265       WRITE ( 14 )  building_wall_south
    265266
    266        CALL wrd_write_string( 'c_sedimentation' )
    267        WRITE ( 14 )  c_sedimentation
    268 
    269267       CALL wrd_write_string( 'call_psolver_at_all_substeps' )
    270268       WRITE ( 14 )  call_psolver_at_all_substeps
     
    291289       WRITE ( 14 )  cloud_droplets
    292290
    293        CALL wrd_write_string( 'cloud_physics' )
    294        WRITE ( 14 )  cloud_physics
    295 
    296        CALL wrd_write_string( 'cloud_scheme' )
    297        WRITE ( 14 )  cloud_scheme
    298 
    299291       CALL wrd_write_string( 'cloud_top_radiation' )
    300292       WRITE ( 14 )  cloud_top_radiation
    301293
    302        CALL wrd_write_string( 'cloud_water_sedimentation' )
    303        WRITE ( 14 )  cloud_water_sedimentation
    304 
    305294       CALL wrd_write_string( 'collective_wait' )
    306295       WRITE ( 14 )  collective_wait
    307 
    308        CALL wrd_write_string( 'collision_turbulence' )
    309        WRITE ( 14 )  collision_turbulence
    310296
    311297       CALL wrd_write_string( 'conserve_volume_flow' )
     
    455441       WRITE ( 14 )  latitude
    456442
    457        CALL wrd_write_string( 'limiter_sedimentation' )
    458        WRITE ( 14 )  limiter_sedimentation
    459 
    460443       CALL wrd_write_string( 'longitude' )
    461444       WRITE ( 14 )  longitude
     
    487470       WRITE ( 14 )  most_method
    488471
    489        CALL wrd_write_string( 'nc_const' )
    490        WRITE ( 14 )  nc_const
    491 
    492472       CALL wrd_write_string( 'netcdf_precision' )
    493473       WRITE ( 14 )  netcdf_precision
     
    537517       CALL wrd_write_string( 'prandtl_number' )
    538518       WRITE ( 14 )  prandtl_number
    539 
    540        CALL wrd_write_string( 'precipitation' )
    541        WRITE ( 14 )  precipitation
    542519
    543520       CALL wrd_write_string( 'psolver' )
     
    848825       WRITE ( 14 )  v_max_ijk
    849826
    850        CALL wrd_write_string( 'ventilation_effect' )
    851        WRITE ( 14 )  ventilation_effect
    852 
    853827       CALL wrd_write_string( 'vg' )
    854828       WRITE ( 14 )  vg
     
    927901!-- The order of the calls can be different as in read_restart_data_mod where
    928902!-- the restart data will be read
     903
     904!
     905!-- If required, write restart data for gust module.
     906       IF ( bulk_cloud_model )  CALL bcm_wrd_global
    929907!
    930908!-- If required, write restart data for wind turbine model.
     
    962940
    963941       USE arrays_3d,                                                          &
    964            ONLY:  e, kh, km, p, pt, q, ql, qc, nc, nr, prr,                    &
    965                   precipitation_amount, qr, s, sa, u, u_m_l, u_m_n, u_m_r,     &
     942           ONLY:  e, kh, km, p, pt, q, ql, s, sa, u, u_m_l, u_m_n, u_m_r,      &
    966943                  u_m_s, v, v_m_l, v_m_n, v_m_r, v_m_s, vpt, w, w_m_l, w_m_n,  &
    967944                  w_m_r, w_m_s
    968945       
    969946       USE averaging
     947
     948       USE bulk_cloud_model_mod,                                               &
     949           ONLY:  bulk_cloud_model, bcm_wrd_local
    970950
    971951       USE chemistry_model_mod,                                                &
     
    980960       USE land_surface_model_mod,                                             &
    981961           ONLY:  lsm_wrd_local
    982        
     962
    983963       USE particle_attributes,                                                &
    984964           ONLY:  iran_part
     
    10781058       ENDIF
    10791059
    1080        IF ( ALLOCATED( prr ) )  THEN
    1081           CALL wrd_write_string( 'prr' )
    1082           WRITE ( 14 )  prr
    1083        ENDIF
    1084 
    1085        IF ( ALLOCATED( prr_av ) )  THEN
    1086           CALL wrd_write_string( 'prr_av' )
    1087           WRITE ( 14 )  prr_av
    1088        ENDIF
    1089 
    1090        IF ( ALLOCATED( precipitation_amount ) )  THEN
    1091           CALL wrd_write_string( 'precipitation_amount' )
    1092           WRITE ( 14 )  precipitation_amount
    1093        ENDIF
    1094 
    10951060       CALL wrd_write_string( 'pt' )
    10961061       WRITE ( 14 )  pt
     
    11111076          ENDIF
    11121077
    1113           IF ( cloud_physics  .OR.  cloud_droplets )  THEN
    1114 
    1115              CALL wrd_write_string( 'ql' ) 
     1078          IF ( cloud_droplets )  THEN
     1079
     1080             CALL wrd_write_string( 'ql' )
    11161081             WRITE ( 14 )  ql
    11171082
    11181083             IF ( ALLOCATED( ql_av ) )  THEN
    1119                 CALL wrd_write_string( 'ql_av' ) 
     1084                CALL wrd_write_string( 'ql_av' )
    11201085                WRITE ( 14 )  ql_av
    11211086             ENDIF
    11221087
    1123              IF ( .NOT. cloud_droplets )  THEN
    1124 
    1125                 CALL wrd_write_string( 'qc' )
    1126                 WRITE ( 14 )  qc
    1127 
    1128                 IF ( ALLOCATED( qc_av ) )  THEN
    1129                    CALL wrd_write_string( 'qc_av' )
    1130                    WRITE ( 14 )  qc_av
    1131                 ENDIF
    1132 
    1133                 IF ( microphysics_morrison )  THEN
    1134 
    1135                    CALL wrd_write_string( 'nc' )
    1136                    WRITE ( 14 )  nc
    1137 
    1138                    IF ( ALLOCATED( nc_av ) )  THEN
    1139                       CALL wrd_write_string( 'nc_av' )
    1140                       WRITE ( 14 )  nc_av
    1141                    ENDIF
    1142 
    1143                 ENDIF
    1144 
    1145                 IF ( microphysics_seifert )  THEN
    1146 
    1147                    CALL wrd_write_string( 'nr' )
    1148                    WRITE ( 14 )  nr
    1149 
    1150                    IF ( ALLOCATED( nr_av ) )  THEN
    1151                       CALL wrd_write_string( 'nr_av' )
    1152                       WRITE ( 14 )  nr_av
    1153                    ENDIF
    1154 
    1155                    CALL wrd_write_string( 'qr' )
    1156                    WRITE ( 14 )  qr
    1157 
    1158                    IF ( ALLOCATED( qr_av ) )  THEN
    1159                       CALL wrd_write_string( 'qr_av' )
    1160                       WRITE ( 14 )  qr_av
    1161                    ENDIF
    1162 
    1163                 ENDIF
    1164              ENDIF
    11651088          ENDIF
    11661089
     
    13871310
    13881311!
     1312!-- If required, write restart data for microphysics module.
     1313       IF ( bulk_cloud_model )  THEN
     1314          CALL bcm_wrd_local
     1315       ENDIF
     1316
     1317!
    13891318!-- Write surface-related restart data.
    13901319       CALL surface_wrd_local
Note: See TracChangeset for help on using the changeset viewer.