Changeset 3274 for palm/trunk/SOURCE/land_surface_model_mod.f90
- Timestamp:
- Sep 24, 2018 3:42:55 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model_mod.f90
r3271 r3274 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Modularization of all bulk cloud physics code components 28 ! 29 ! 3271 2018-09-24 08:20:34Z suehring 27 30 ! Several bugfixes: 28 31 ! - Initialization of pt_surface array with soil temperature in the uppermost … … 474 477 475 478 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 477 483 478 484 USE calc_mean_profile_mod, & 479 485 ONLY: calc_mean_profile 480 486 481 USE cloud_parameters, &482 ONLY: cp, hyrho, l_d_cp, l_d_r, l_v, pt_d_t, rho_l, r_d, r_v483 484 487 USE control_parameters, & 485 ONLY: cloud_droplets, c loud_physics, coupling_start_time, dt_3d, &488 ONLY: cloud_droplets, coupling_start_time, dt_3d, & 486 489 end_time, humidity, intermediate_timestep_count, & 487 490 initializing_actions, intermediate_timestep_count_max, & 488 land_surface, max_masks, p recipitation, pt_surface, &491 land_surface, max_masks, pt_surface, & 489 492 rho_surface, spinup, spinup_pt_mean, spinup_time, & 490 493 surface_pressure, timestep_scheme, tsc, & … … 493 496 USE indices, & 494 497 ONLY: nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb 498 499 USE bulk_cloud_model_mod, & 500 ONLY: bulk_cloud_model, precipitation 495 501 496 502 USE netcdf_data_input_mod, & … … 584 590 deep_soil_temperature = 9999999.9_wp, & !< Deep soil temperature (bottom boundary condition) 585 591 drho_l_lv, & !< (rho_l * l_v)**-1 586 exn, & !< value of the Exner function587 592 field_capacity = 9999999.9_wp, & !< NAMELIST m_fc 588 593 f_shortwave_incoming = 9999999.9_wp, & !< NAMELIST f_sw_in … … 604 609 rho_cp, & !< rho_surface * cp 605 610 rho_lv, & !< rho_ocean * l_v 606 rd_d_rv, & !< r_d / r_v607 611 saturation_moisture = 9999999.9_wp, & !< NAMELIST m_sat 608 612 skip_time_do_lsm = 0.0_wp, & !< LSM is not called before this time … … 1734 1738 SUBROUTINE lsm_energy_balance( horizontal, l ) 1735 1739 1736 USE diagnostic_quantities_mod, &1737 ONLY: magnus1738 1739 1740 USE pegrid 1740 1741 … … 1816 1817 j_off = surf%joff 1817 1818 i_off = surf%ioff 1818 1819 !1820 !-- Calculate the exner function for the current time step1821 exn = ( surface_pressure / 1000.0_wp )**0.286_wp1822 1819 1823 1820 DO m = 1, surf%ns … … 1889 1886 !-- time step is used here. Note that this formulation is the 1890 1887 !-- equivalent to the ECMWF formulation using drag coefficients 1891 ! IF ( cloud_physics) THEN1892 ! 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) 1893 1890 ! qv1 = q(k,j,i) - ql(k,j,i) 1894 1891 ! 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) 1896 1893 ! qv1 = q(k,j,i) 1897 1894 ! ELSE … … 2097 2094 !-- Denominator of the prognostic equation 2098 2095 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) 2100 2097 ELSE 2101 2098 ! … … 2107 2104 ! 2108 2105 !-- 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) 2110 2107 2111 2108 ENDIF … … 2160 2157 2161 2158 2162 ! pt(k+k_off,j+j_off,i+i_off) = surf_t_surface_p%var_1d(m) / exn !is actually no air temperature2163 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) 2164 2161 2165 2162 ! … … 2177 2174 - surf_t_soil%var_2d(nzb_soil,m) ) 2178 2175 2179 surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / c p2176 surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / c_p 2180 2177 2181 2178 IF ( humidity ) THEN … … 2330 2327 SUBROUTINE calc_q_surface 2331 2328 2332 USE diagnostic_quantities_mod2333 2334 2329 IMPLICIT NONE 2335 2330 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 2337 2334 2338 2335 DO m = 1, surf%ns … … 2353 2350 ! 2354 2351 !-- Calculate mixing ratio at surface 2355 IF ( cloud_physics) THEN2352 IF ( bulk_cloud_model ) THEN 2356 2353 q(k+k_off,j+j_off,i+i_off) = resistance * q_s + & 2357 2354 ( 1.0_wp - resistance ) * & … … 2471 2468 !------------------------------------------------------------------------------! 2472 2469 SUBROUTINE lsm_init 2473 2470 2474 2471 USE control_parameters, & 2475 2472 ONLY: message_string … … 2501 2498 REAL(wp), DIMENSION(:), ALLOCATABLE :: bound, bound_root_fr !< temporary arrays for storing index bounds 2502 2499 REAL(wp), DIMENSION(:), ALLOCATABLE :: pr_soil_init !< temporary array used for averaging soil profiles 2503 2504 !2505 !-- Calculate Exner function2506 exn = ( surface_pressure / 1000.0_wp )**0.286_wp2507 2500 ! 2508 2501 !-- If no cloud physics is used, rho_surface has not been calculated before 2509 IF ( .NOT. cloud_physics.AND. .NOT. cloud_droplets ) THEN2502 IF ( .NOT. bulk_cloud_model .AND. .NOT. cloud_droplets ) THEN 2510 2503 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) ) 2512 2505 ENDIF 2513 2506 2514 2507 ! 2515 2508 !-- 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 2518 2510 rho_lv = rho_surface * l_v 2519 2511 drho_l_lv = 1.0_wp / (rho_l * l_v) … … 4451 4443 !-- uppermost layer 4452 4444 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) 4454 4446 4455 IF ( cloud_physics.OR. cloud_droplets ) THEN4456 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) 4457 4449 ELSE 4458 4450 surf_lsm_h%pt1(m) = pt(k,j,i) … … 4480 4472 !-- uppermost layer 4481 4473 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 ) THEN4485 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) 4486 4478 ELSE 4487 4479 surf_lsm_v(l)%pt1(m) = pt(k,j,i) … … 7078 7070 7079 7071 USE control_parameters, & 7080 ONLY: g,message_string, molecular_viscosity7072 ONLY: message_string, molecular_viscosity 7081 7073 7082 7074 IMPLICIT NONE
Note: See TracChangeset
for help on using the changeset viewer.