Changeset 3274 for palm/trunk/SOURCE/turbulence_closure_mod.f90
- Timestamp:
- Sep 24, 2018 3:42:55 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/turbulence_closure_mod.f90
r3245 r3274 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Modularization of all bulk cloud physics code components 28 ! 29 ! 3245 2018-09-13 14:08:16Z knoop 27 30 ! unused variables removed, shortest_distance has wp now 28 31 ! … … 154 157 #endif 155 158 159 USE basic_constants_and_equations_mod, & 160 ONLY: g, kappa, lv_d_cp, lv_d_rd 161 156 162 USE control_parameters, & 157 163 ONLY: constant_diffusion, dt_3d, e_init, humidity, & 158 164 initializing_actions, intermediate_timestep_count, & 159 intermediate_timestep_count_max, k appa, km_constant,&165 intermediate_timestep_count_max, km_constant, & 160 166 les_dynamic, les_mw, ocean, plant_canopy, prandtl_number, & 161 167 prho_reference, pt_reference, rans_mode, rans_tke_e, rans_tke_l,& … … 950 956 SUBROUTINE tcm_init_arrays 951 957 952 USE microphysics_mod,&958 USE bulk_cloud_model_mod, & 953 959 ONLY: collision_turbulence 954 960 … … 2598 2604 2599 2605 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 2604 2607 2605 2608 USE control_parameters, & 2606 ONLY: cloud_droplets, c loud_physics, constant_flux_layer, g, neutral,&2609 ONLY: cloud_droplets, constant_flux_layer, neutral, & 2607 2610 rho_reference, use_single_reference_value, use_surface_fluxes, & 2608 2611 use_top_fluxes … … 2610 2613 USE grid_variables, & 2611 2614 ONLY: ddx, dx, ddy, dy 2615 2616 USE bulk_cloud_model_mod, & 2617 ONLY: bulk_cloud_model 2612 2618 2613 2619 USE surface_mod, & … … 3067 3073 !-- Flag 9 is used to mask top fluxes, flag 30 to mask 3068 3074 !-- surface fluxes 3069 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3075 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3070 3076 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3071 3077 k2 = 0.61_wp * pt(k,j,i) … … 3083 3089 BTEST( wall_flags_0(k,j,i), 9 ) & 3084 3090 ) 3085 ELSE IF ( cloud_physics) THEN3091 ELSE IF ( bulk_cloud_model ) THEN 3086 3092 IF ( ql(k,j,i) == 0.0_wp ) THEN 3087 3093 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3088 3094 k2 = 0.61_wp * pt(k,j,i) 3089 3095 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) 3092 3098 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3093 3099 ( 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 * & 3096 3102 ( 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 ) 3098 3104 ENDIF 3099 3105 tend(k,j,i) = tend(k,j,i) - kh(k,j,i) * & … … 3144 3150 k = surf_def_h(l)%k(m) 3145 3151 3146 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3152 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3147 3153 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3148 3154 k2 = 0.61_wp * pt(k,j,i) 3149 ELSE IF ( cloud_physics) THEN3155 ELSE IF ( bulk_cloud_model ) THEN 3150 3156 IF ( ql(k,j,i) == 0.0_wp ) THEN 3151 3157 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3152 3158 k2 = 0.61_wp * pt(k,j,i) 3153 3159 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) 3156 3162 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3157 3163 ( 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 * & 3160 3166 ( 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 ) 3162 3168 ENDIF 3163 3169 ELSE IF ( cloud_droplets ) THEN … … 3181 3187 k = surf_lsm_h%k(m) 3182 3188 3183 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3189 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3184 3190 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3185 3191 k2 = 0.61_wp * pt(k,j,i) 3186 ELSE IF ( cloud_physics) THEN3192 ELSE IF ( bulk_cloud_model ) THEN 3187 3193 IF ( ql(k,j,i) == 0.0_wp ) THEN 3188 3194 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3189 3195 k2 = 0.61_wp * pt(k,j,i) 3190 3196 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) 3193 3199 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3194 3200 ( 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 * & 3197 3203 ( 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 ) 3199 3205 ENDIF 3200 3206 ELSE IF ( cloud_droplets ) THEN … … 3217 3223 k = surf_usm_h%k(m) 3218 3224 3219 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3225 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3220 3226 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3221 3227 k2 = 0.61_wp * pt(k,j,i) 3222 ELSE IF ( cloud_physics) THEN3228 ELSE IF ( bulk_cloud_model ) THEN 3223 3229 IF ( ql(k,j,i) == 0.0_wp ) THEN 3224 3230 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3225 3231 k2 = 0.61_wp * pt(k,j,i) 3226 3232 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) 3229 3235 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3230 3236 ( 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 * & 3233 3239 ( 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 ) 3235 3241 ENDIF 3236 3242 ELSE IF ( cloud_droplets ) THEN … … 3260 3266 k = surf_def_h(2)%k(m) 3261 3267 3262 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3268 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3263 3269 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3264 3270 k2 = 0.61_wp * pt(k,j,i) 3265 ELSE IF ( cloud_physics) THEN3271 ELSE IF ( bulk_cloud_model ) THEN 3266 3272 IF ( ql(k,j,i) == 0.0_wp ) THEN 3267 3273 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3268 3274 k2 = 0.61_wp * pt(k,j,i) 3269 3275 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) 3272 3278 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3273 3279 ( 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 * & 3276 3282 ( 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 ) 3278 3284 ENDIF 3279 3285 ELSE IF ( cloud_droplets ) THEN … … 3316 3322 3317 3323 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 3322 3325 3323 3326 USE control_parameters, & 3324 ONLY: cloud_droplets, c loud_physics, constant_flux_layer, g, neutral,&3327 ONLY: cloud_droplets, constant_flux_layer, neutral, & 3325 3328 rho_reference, use_single_reference_value, use_surface_fluxes, & 3326 3329 use_top_fluxes … … 3328 3331 USE grid_variables, & 3329 3332 ONLY: ddx, dx, ddy, dy 3333 3334 USE bulk_cloud_model_mod, & 3335 ONLY: bulk_cloud_model 3330 3336 3331 3337 USE surface_mod, & … … 3864 3870 ! 3865 3871 !-- Flag 9 is used to mask top fluxes, flag 30 to mask surface fluxes 3866 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3872 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3867 3873 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3868 3874 k2 = 0.61_wp * pt(k,j,i) … … 3880 3886 ) 3881 3887 3882 ELSE IF ( cloud_physics) THEN3888 ELSE IF ( bulk_cloud_model ) THEN 3883 3889 IF ( ql(k,j,i) == 0.0_wp ) THEN 3884 3890 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3885 3891 k2 = 0.61_wp * pt(k,j,i) 3886 3892 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) 3889 3895 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3890 3896 ( 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 * & 3893 3899 ( 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 ) 3895 3901 ENDIF 3896 3902 tend(k,j,i) = tend(k,j,i) - kh(k,j,i) * g / & … … 3934 3940 k = surf_def_h(l)%k(m) 3935 3941 3936 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3942 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3937 3943 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3938 3944 k2 = 0.61_wp * pt(k,j,i) 3939 ELSE IF ( cloud_physics) THEN3945 ELSE IF ( bulk_cloud_model ) THEN 3940 3946 IF ( ql(k,j,i) == 0.0_wp ) THEN 3941 3947 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3942 3948 k2 = 0.61_wp * pt(k,j,i) 3943 3949 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) 3946 3952 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3947 3953 ( 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 * & 3950 3956 ( 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 ) 3952 3958 ENDIF 3953 3959 ELSE IF ( cloud_droplets ) THEN … … 3971 3977 k = surf_lsm_h%k(m) 3972 3978 3973 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN3979 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 3974 3980 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3975 3981 k2 = 0.61_wp * pt(k,j,i) 3976 ELSE IF ( cloud_physics) THEN3982 ELSE IF ( bulk_cloud_model ) THEN 3977 3983 IF ( ql(k,j,i) == 0.0_wp ) THEN 3978 3984 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 3979 3985 k2 = 0.61_wp * pt(k,j,i) 3980 3986 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) 3983 3989 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 3984 3990 ( 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 * & 3987 3993 ( 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 ) 3989 3995 ENDIF 3990 3996 ELSE IF ( cloud_droplets ) THEN … … 4007 4013 k = surf_usm_h%k(m) 4008 4014 4009 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN4015 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 4010 4016 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 4011 4017 k2 = 0.61_wp * pt(k,j,i) 4012 ELSE IF ( cloud_physics) THEN4018 ELSE IF ( bulk_cloud_model ) THEN 4013 4019 IF ( ql(k,j,i) == 0.0_wp ) THEN 4014 4020 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 4015 4021 k2 = 0.61_wp * pt(k,j,i) 4016 4022 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) 4019 4025 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 4020 4026 ( 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 * & 4023 4029 ( 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 ) 4025 4031 ENDIF 4026 4032 ELSE IF ( cloud_droplets ) THEN … … 4047 4053 4048 4054 4049 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN4055 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 4050 4056 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 4051 4057 k2 = 0.61_wp * pt(k,j,i) 4052 ELSE IF ( cloud_physics) THEN4058 ELSE IF ( bulk_cloud_model ) THEN 4053 4059 IF ( ql(k,j,i) == 0.0_wp ) THEN 4054 4060 k1 = 1.0_wp + 0.61_wp * q(k,j,i) 4055 4061 k2 = 0.61_wp * pt(k,j,i) 4056 4062 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) 4059 4065 k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * & 4060 4066 ( 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 * & 4063 4069 ( 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 ) 4065 4071 ENDIF 4066 4072 ELSE IF ( cloud_droplets ) THEN … … 4100 4106 ONLY: ddx2, ddy2 4101 4107 4102 USE microphysics_mod,&4108 USE bulk_cloud_model_mod, & 4103 4109 ONLY: collision_turbulence 4104 4110 … … 4237 4243 ONLY: ddx2, ddy2 4238 4244 4239 USE microphysics_mod,&4245 USE bulk_cloud_model_mod, & 4240 4246 ONLY: collision_turbulence 4241 4247 … … 4476 4482 4477 4483 USE control_parameters, & 4478 ONLY: atmos_ocean_sign, g, use_single_reference_value,&4484 ONLY: atmos_ocean_sign, use_single_reference_value, & 4479 4485 wall_adjustment, wall_adjustment_factor 4480 4486 … … 4533 4539 4534 4540 USE control_parameters, & 4535 ONLY: atmos_ocean_sign, g,use_single_reference_value4541 ONLY: atmos_ocean_sign, use_single_reference_value 4536 4542 4537 4543 IMPLICIT NONE
Note: See TracChangeset
for help on using the changeset viewer.