Changeset 1585 for palm/trunk/SOURCE/land_surface_model.f90
- Timestamp:
- Apr 30, 2015 7:05:52 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model.f90
r1572 r1585 20 20 ! Current revisions: 21 21 ! ----------------- 22 ! 22 ! Modifications for RRTMG. Changed tables to PARAMETER type. 23 23 ! 24 24 ! Former revisions: … … 80 80 !------------------------------------------------------------------------------! 81 81 USE arrays_3d, & 82 ONLY: pt, pt_p, q , q_p, qsws, rif, shf, ts, us, z0, z0h82 ONLY: pt, pt_p, q_p, qsws, rif, shf, ts, us, z0, z0h 83 83 84 84 USE cloud_parameters, & … … 90 90 max_masks, precipitation, pt_surface, rho_surface, & 91 91 roughness_length, surface_pressure, timestep_scheme, tsc, & 92 z0h_factor 92 z0h_factor, time_since_reference_point 93 93 94 94 USE indices, & 95 ONLY: n xlg, nxrg, nyng, nysg, nzb_s_inner95 ONLY: nbgp, nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner 96 96 97 97 USE kinds … … 101 101 102 102 USE radiation_model_mod, & 103 ONLY: irad_scheme, rad_net, rad_sw_in, sigma_sb103 ONLY: radiation_scheme, rad_net, rad_sw_in, sigma_sb 104 104 105 105 USE statistics, & … … 243 243 qsws_veg_eb, & !: surface flux of latent heat (vegetation portion) 244 244 qsws_veg_eb_av, & !: average of qsws_veg_eb 245 rad_net_l, & !: local copy of rad_net (net radiation at surface) 245 246 r_a, & !: aerodynamic resistance 246 247 r_a_av, & !: avergae of r_a … … 276 277 t_soil_av, t_soil_1, t_soil_2, & 277 278 m_soil_av, m_soil_1, m_soil_2 278 279 280 279 #endif 281 280 … … 289 288 ! 290 289 !-- Predefined Land surface classes (veg_type) 291 CHARACTER(26), DIMENSION(0:19) :: veg_type_name = (/&292 'user defined', & ! 0293 'crops, mixed farming', & ! 1294 'short grass', & ! 2295 'evergreen needleleaf trees', & ! 3296 'deciduous needleleaf trees', & ! 4297 'evergreen broadleaf trees' , & ! 5298 'deciduous broadleaf trees', & ! 6299 'tall grass', & ! 7300 'desert', & ! 8301 'tundra', & ! 9302 'irrigated crops', & ! 10303 'semidesert', & ! 11304 'ice caps and glaciers' , & ! 12305 'bogs and marshes', & ! 13306 'inland water', & ! 14307 'ocean', & ! 15308 'evergreen shrubs', & ! 16309 'deciduous shrubs', & ! 17310 'mixed forest/woodland', & ! 18311 'interrupted forest' & ! 19312 /)290 CHARACTER(26), DIMENSION(0:19), PARAMETER :: veg_type_name = (/ & 291 'user defined', & ! 0 292 'crops, mixed farming', & ! 1 293 'short grass', & ! 2 294 'evergreen needleleaf trees', & ! 3 295 'deciduous needleleaf trees', & ! 4 296 'evergreen broadleaf trees' , & ! 5 297 'deciduous broadleaf trees', & ! 6 298 'tall grass', & ! 7 299 'desert', & ! 8 300 'tundra', & ! 9 301 'irrigated crops', & ! 10 302 'semidesert', & ! 11 303 'ice caps and glaciers' , & ! 12 304 'bogs and marshes', & ! 13 305 'inland water', & ! 14 306 'ocean', & ! 15 307 'evergreen shrubs', & ! 16 308 'deciduous shrubs', & ! 17 309 'mixed forest/woodland', & ! 18 310 'interrupted forest' & ! 19 311 /) 313 312 314 313 ! 315 314 !-- Soil model classes (soil_type) 316 CHARACTER(12), DIMENSION(0:7) :: soil_type_name = (/ &317 'user defined', & ! 0318 'coarse', & ! 1319 'medium', & ! 2320 'medium-fine', & ! 3321 'fine', & ! 4322 'very fine' , & ! 5323 'organic', & ! 6324 'loamy (CH)' & ! 7325 /)315 CHARACTER(12), DIMENSION(0:7), PARAMETER :: soil_type_name = (/ & 316 'user defined', & ! 0 317 'coarse', & ! 1 318 'medium', & ! 2 319 'medium-fine', & ! 3 320 'fine', & ! 4 321 'very fine' , & ! 5 322 'organic', & ! 6 323 'loamy (CH)' & ! 7 324 /) 326 325 ! 327 326 !-- Land surface parameters according to the respective classes (veg_type) … … 330 329 !-- Land surface parameters I 331 330 !-- r_canopy_min, lai, c_veg, g_d 332 REAL(wp), DIMENSION(0:3,1:19) :: veg_pars = RESHAPE( (/&333 180.0_wp, 3.00_wp, 0.90_wp, 0.00_wp, & ! 1334 110.0_wp, 2.00_wp, 0.85_wp, 0.00_wp, & ! 2335 500.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 3336 500.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 4337 175.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 5338 240.0_wp, 6.00_wp, 0.99_wp, 0.13_wp, & ! 6339 100.0_wp, 2.00_wp, 0.70_wp, 0.00_wp, & ! 7340 250.0_wp, 0.05_wp, 0.00_wp, 0.00_wp, & ! 8341 80.0_wp, 1.00_wp, 0.50_wp, 0.00_wp, & ! 9342 180.0_wp, 3.00_wp, 0.90_wp, 0.00_wp, & ! 10343 150.0_wp, 0.50_wp, 0.10_wp, 0.00_wp, & ! 11344 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 12345 240.0_wp, 4.00_wp, 0.60_wp, 0.00_wp, & ! 13346 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 14347 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 15348 225.0_wp, 3.00_wp, 0.50_wp, 0.00_wp, & ! 16349 225.0_wp, 1.50_wp, 0.50_wp, 0.00_wp, & ! 17350 250.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 18351 175.0_wp, 2.50_wp, 0.90_wp, 0.03_wp & ! 19331 REAL(wp), DIMENSION(0:3,1:19), PARAMETER :: veg_pars = RESHAPE( (/ & 332 180.0_wp, 3.00_wp, 0.90_wp, 0.00_wp, & ! 1 333 110.0_wp, 2.00_wp, 0.85_wp, 0.00_wp, & ! 2 334 500.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 3 335 500.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 4 336 175.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 5 337 240.0_wp, 6.00_wp, 0.99_wp, 0.13_wp, & ! 6 338 100.0_wp, 2.00_wp, 0.70_wp, 0.00_wp, & ! 7 339 250.0_wp, 0.05_wp, 0.00_wp, 0.00_wp, & ! 8 340 80.0_wp, 1.00_wp, 0.50_wp, 0.00_wp, & ! 9 341 180.0_wp, 3.00_wp, 0.90_wp, 0.00_wp, & ! 10 342 150.0_wp, 0.50_wp, 0.10_wp, 0.00_wp, & ! 11 343 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 12 344 240.0_wp, 4.00_wp, 0.60_wp, 0.00_wp, & ! 13 345 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 14 346 0.0_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 15 347 225.0_wp, 3.00_wp, 0.50_wp, 0.00_wp, & ! 16 348 225.0_wp, 1.50_wp, 0.50_wp, 0.00_wp, & ! 17 349 250.0_wp, 5.00_wp, 0.90_wp, 0.03_wp, & ! 18 350 175.0_wp, 2.50_wp, 0.90_wp, 0.03_wp & ! 19 352 351 /), (/ 4, 19 /) ) 353 352 354 353 ! 355 354 !-- Land surface parameters II z0, z0h 356 REAL(wp), DIMENSION(0:1,1:19) :: roughness_par = RESHAPE( (/ &357 0.25_wp, 0.25E-2_wp, & ! 1358 0.20_wp, 0.20E-2_wp, & ! 2359 2.00_wp, 2.00_wp, & ! 3360 2.00_wp, 2.00_wp, & ! 4361 2.00_wp, 2.00_wp, & ! 5362 2.00_wp, 2.00_wp, & ! 6363 0.47_wp, 0.47E-2_wp, & ! 7364 0.013_wp, 0.013E-2_wp, & ! 8365 0.034_wp, 0.034E-2_wp, & ! 9366 0.5_wp, 0.50E-2_wp, & ! 10367 0.17_wp, 0.17E-2_wp, & ! 11368 1.3E-3_wp, 1.3E-4_wp, & ! 12369 0.83_wp, 0.83E-2_wp, & ! 13370 0.00_wp, 0.00E-2_wp, & ! 14371 0.00_wp, 0.00E-2_wp, & ! 15372 0.10_wp, 0.10E-2_wp, & ! 16373 0.25_wp, 0.25E-2_wp, & ! 17374 2.00_wp, 2.00E-2_wp, & ! 18375 1.10_wp, 1.10E-2_wp & ! 19355 REAL(wp), DIMENSION(0:1,1:19), PARAMETER :: roughness_par = RESHAPE( (/ & 356 0.25_wp, 0.25E-2_wp, & ! 1 357 0.20_wp, 0.20E-2_wp, & ! 2 358 2.00_wp, 2.00_wp, & ! 3 359 2.00_wp, 2.00_wp, & ! 4 360 2.00_wp, 2.00_wp, & ! 5 361 2.00_wp, 2.00_wp, & ! 6 362 0.47_wp, 0.47E-2_wp, & ! 7 363 0.013_wp, 0.013E-2_wp, & ! 8 364 0.034_wp, 0.034E-2_wp, & ! 9 365 0.5_wp, 0.50E-2_wp, & ! 10 366 0.17_wp, 0.17E-2_wp, & ! 11 367 1.3E-3_wp, 1.3E-4_wp, & ! 12 368 0.83_wp, 0.83E-2_wp, & ! 13 369 0.00_wp, 0.00E-2_wp, & ! 14 370 0.00_wp, 0.00E-2_wp, & ! 15 371 0.10_wp, 0.10E-2_wp, & ! 16 372 0.25_wp, 0.25E-2_wp, & ! 17 373 2.00_wp, 2.00E-2_wp, & ! 18 374 1.10_wp, 1.10E-2_wp & ! 19 376 375 /), (/ 2, 19 /) ) 377 376 378 377 ! 379 378 !-- Land surface parameters III lambda_surface_s, lambda_surface_u, f_sw_in 380 REAL(wp), DIMENSION(0:2,1:19) :: surface_pars = RESHAPE( (/&381 10.0_wp, 10.0_wp, 0.05_wp, & ! 1382 10.0_wp, 10.0_wp, 0.05_wp, & ! 2383 20.0_wp, 15.0_wp, 0.03_wp, & ! 3384 20.0_wp, 15.0_wp, 0.03_wp, & ! 4385 20.0_wp, 15.0_wp, 0.03_wp, & ! 5386 20.0_wp, 15.0_wp, 0.03_wp, & ! 6387 10.0_wp, 10.0_wp, 0.05_wp, & ! 7388 15.0_wp, 15.0_wp, 0.00_wp, & ! 8389 10.0_wp, 10.0_wp, 0.05_wp, & ! 9390 10.0_wp, 10.0_wp, 0.05_wp, & ! 10391 10.0_wp, 10.0_wp, 0.05_wp, & ! 11392 58.0_wp, 58.0_wp, 0.00_wp, & ! 12393 10.0_wp, 10.0_wp, 0.05_wp, & ! 13394 1.0E20_wp, 1.0E20_wp, 0.00_wp, & ! 14395 1.0E20_wp, 1.0E20_wp, 0.00_wp, & ! 15396 10.0_wp, 10.0_wp, 0.05_wp, & ! 16397 10.0_wp, 10.0_wp, 0.05_wp, & ! 17398 20.0_wp, 15.0_wp, 0.03_wp, & ! 18399 20.0_wp, 15.0_wp, 0.03_wp & ! 19379 REAL(wp), DIMENSION(0:2,1:19), PARAMETER :: surface_pars = RESHAPE( (/ & 380 10.0_wp, 10.0_wp, 0.05_wp, & ! 1 381 10.0_wp, 10.0_wp, 0.05_wp, & ! 2 382 20.0_wp, 15.0_wp, 0.03_wp, & ! 3 383 20.0_wp, 15.0_wp, 0.03_wp, & ! 4 384 20.0_wp, 15.0_wp, 0.03_wp, & ! 5 385 20.0_wp, 15.0_wp, 0.03_wp, & ! 6 386 10.0_wp, 10.0_wp, 0.05_wp, & ! 7 387 15.0_wp, 15.0_wp, 0.00_wp, & ! 8 388 10.0_wp, 10.0_wp, 0.05_wp, & ! 9 389 10.0_wp, 10.0_wp, 0.05_wp, & ! 10 390 10.0_wp, 10.0_wp, 0.05_wp, & ! 11 391 58.0_wp, 58.0_wp, 0.00_wp, & ! 12 392 10.0_wp, 10.0_wp, 0.05_wp, & ! 13 393 1.0E20_wp, 1.0E20_wp, 0.00_wp, & ! 14 394 1.0E20_wp, 1.0E20_wp, 0.00_wp, & ! 15 395 10.0_wp, 10.0_wp, 0.05_wp, & ! 16 396 10.0_wp, 10.0_wp, 0.05_wp, & ! 17 397 20.0_wp, 15.0_wp, 0.03_wp, & ! 18 398 20.0_wp, 15.0_wp, 0.03_wp & ! 19 400 399 /), (/ 3, 19 /) ) 401 400 402 401 ! 403 402 !-- Root distribution (sum = 1) level 1, level 2, level 3, level 4, 404 REAL(wp), DIMENSION(0:3,1:19) :: root_distribution = RESHAPE( (/ &405 0.24_wp, 0.41_wp, 0.31_wp, 0.04_wp, & ! 1406 0.35_wp, 0.38_wp, 0.23_wp, 0.04_wp, & ! 2407 0.26_wp, 0.39_wp, 0.29_wp, 0.06_wp, & ! 3408 0.26_wp, 0.38_wp, 0.29_wp, 0.07_wp, & ! 4409 0.24_wp, 0.38_wp, 0.31_wp, 0.07_wp, & ! 5410 0.25_wp, 0.34_wp, 0.27_wp, 0.14_wp, & ! 6411 0.27_wp, 0.27_wp, 0.27_wp, 0.09_wp, & ! 7412 1.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 8413 0.47_wp, 0.45_wp, 0.08_wp, 0.00_wp, & ! 9414 0.24_wp, 0.41_wp, 0.31_wp, 0.04_wp, & ! 10415 0.17_wp, 0.31_wp, 0.33_wp, 0.19_wp, & ! 11416 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 12417 0.25_wp, 0.34_wp, 0.27_wp, 0.11_wp, & ! 13418 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 14419 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 15420 0.23_wp, 0.36_wp, 0.30_wp, 0.11_wp, & ! 16421 0.23_wp, 0.36_wp, 0.30_wp, 0.11_wp, & ! 17422 0.19_wp, 0.35_wp, 0.36_wp, 0.10_wp, & ! 18423 0.19_wp, 0.35_wp, 0.36_wp, 0.10_wp & ! 19403 REAL(wp), DIMENSION(0:3,1:19), PARAMETER :: root_distribution = RESHAPE( (/ & 404 0.24_wp, 0.41_wp, 0.31_wp, 0.04_wp, & ! 1 405 0.35_wp, 0.38_wp, 0.23_wp, 0.04_wp, & ! 2 406 0.26_wp, 0.39_wp, 0.29_wp, 0.06_wp, & ! 3 407 0.26_wp, 0.38_wp, 0.29_wp, 0.07_wp, & ! 4 408 0.24_wp, 0.38_wp, 0.31_wp, 0.07_wp, & ! 5 409 0.25_wp, 0.34_wp, 0.27_wp, 0.14_wp, & ! 6 410 0.27_wp, 0.27_wp, 0.27_wp, 0.09_wp, & ! 7 411 1.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 8 412 0.47_wp, 0.45_wp, 0.08_wp, 0.00_wp, & ! 9 413 0.24_wp, 0.41_wp, 0.31_wp, 0.04_wp, & ! 10 414 0.17_wp, 0.31_wp, 0.33_wp, 0.19_wp, & ! 11 415 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 12 416 0.25_wp, 0.34_wp, 0.27_wp, 0.11_wp, & ! 13 417 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 14 418 0.00_wp, 0.00_wp, 0.00_wp, 0.00_wp, & ! 15 419 0.23_wp, 0.36_wp, 0.30_wp, 0.11_wp, & ! 16 420 0.23_wp, 0.36_wp, 0.30_wp, 0.11_wp, & ! 17 421 0.19_wp, 0.35_wp, 0.36_wp, 0.10_wp, & ! 18 422 0.19_wp, 0.35_wp, 0.36_wp, 0.10_wp & ! 19 424 423 /), (/ 4, 19 /) ) 425 424 … … 429 428 ! 430 429 !-- Soil parameters I alpha_vg, l_vg, n_vg, gamma_w_sat 431 REAL(wp), DIMENSION(0:3,1:7) :: soil_pars = RESHAPE( (/&430 REAL(wp), DIMENSION(0:3,1:7), PARAMETER :: soil_pars = RESHAPE( (/ & 432 431 3.83_wp, 1.250_wp, 1.38_wp, 6.94E-6_wp, & ! 1 433 432 3.14_wp, -2.342_wp, 1.28_wp, 1.16E-6_wp, & ! 2 … … 441 440 ! 442 441 !-- Soil parameters II m_sat, m_fc, m_wilt, m_res 443 REAL(wp), DIMENSION(0:3,1:7) :: m_soil_pars = RESHAPE( (/&442 REAL(wp), DIMENSION(0:3,1:7), PARAMETER :: m_soil_pars = RESHAPE( (/ & 444 443 0.403_wp, 0.244_wp, 0.059_wp, 0.025_wp, & ! 1 445 444 0.439_wp, 0.347_wp, 0.151_wp, 0.010_wp, & ! 2 … … 490 489 !-- Public prognostic variables 491 490 PUBLIC m_liq_eb, m_liq_eb_av, m_soil, m_soil_av, t_soil, t_soil_av 492 493 491 494 492 INTERFACE init_lsm … … 573 571 ALLOCATE ( qsws_liq_eb(nysg:nyng,nxlg:nxrg) ) 574 572 ALLOCATE ( qsws_veg_eb(nysg:nyng,nxlg:nxrg) ) 573 ALLOCATE ( rad_net_l(nysg:nyng,nxlg:nxrg) ) 575 574 ALLOCATE ( r_a(nysg:nyng,nxlg:nxrg) ) 576 575 ALLOCATE ( r_canopy(nysg:nyng,nxlg:nxrg) ) … … 583 582 #if ! defined( __nopointer ) 584 583 ! 585 !-- Initial assignment of the pointers584 !-- Initial assignment of the pointers 586 585 t_soil => t_soil_1; t_soil_p => t_soil_2 587 586 t_surface => t_surface_1; t_surface_p => t_surface_2 … … 890 889 ! 891 890 !-- Add timeseries for land surface model 891 892 892 dots_label(dots_num+1) = "ghf_eb" 893 893 dots_label(dots_num+2) = "shf_eb" … … 904 904 dots_soil = dots_num + 1 905 905 dots_num = dots_num + 8 906 907 906 908 907 RETURN … … 957 956 exn = ( surface_pressure / 1000.0_wp )**0.286_wp 958 957 958 959 959 960 960 DO i = nxlg, nxrg … … 984 984 !-- f1: correction for incoming shortwave radiation (stomata close at 985 985 !-- night) 986 IF ( irad_scheme /= 0 ) THEN 987 f1 = MIN(1.0_wp, ( 0.004_wp * rad_sw_in(j,i) + 0.05_wp ) / & 988 (0.81_wp * (0.004_wp * rad_sw_in(j,i) + 1.0_wp) )) 986 IF ( radiation_scheme /= 'constant' ) THEN 987 f1 = MIN( 1.0_wp, ( 0.004_wp * rad_sw_in(k,j,i) + 0.05_wp ) /& 988 (0.81_wp * (0.004_wp * rad_sw_in(k,j,i) & 989 + 1.0_wp)) ) 989 990 ELSE 990 991 f1 = 1.0_wp … … 1112 1113 ! 1113 1114 !-- Add LW up so that it can be removed in prognostic equation 1114 rad_net (j,i) = rad_net(j,i) + sigma_sb * t_surface(j,i) ** 41115 rad_net_l(j,i) = rad_net(j,i) + sigma_sb * t_surface(j,i) ** 4 1115 1116 1116 1117 IF ( humidity ) THEN … … 1118 1119 ! 1119 1120 !-- Numerator of the prognostic equation 1120 coef_1 = rad_net (j,i) + 3.0_wp * sigma_sb * t_surface(j,i) ** 4&1121 coef_1 = rad_net_l(j,i) + 3.0_wp * sigma_sb * t_surface(j,i) ** 4& 1121 1122 + f_shf / exn * T_1 + f_qsws * ( q_p(k+1,j,i) - q_s & 1122 1123 + dq_s_dt * t_surface(j,i) ) + lambda_surface & … … 1132 1133 ! 1133 1134 !-- Numerator of the prognostic equation 1134 coef_1 = rad_net (j,i) + 3.0_wp * sigma_sb * t_surface(j,i) ** 4&1135 coef_1 = rad_net_l(j,i) + 3.0_wp * sigma_sb * t_surface(j,i) ** 4& 1135 1136 + f_shf / exn * T_1 + lambda_surface & 1136 1137 * t_soil(nzb_soil,j,i) … … 1175 1176 ! 1176 1177 !-- Calculate fluxes 1177 rad_net (j,i) = rad_net(j,i) + 3.0_wp * sigma_sb &1178 rad_net_l(j,i) = rad_net_l(j,i) + 3.0_wp * sigma_sb & 1178 1179 * t_surface(j,i)**4 - 4.0_wp * sigma_sb & 1179 1180 * t_surface(j,i)**3 * t_surface_p(j,i) … … 1621 1622 CASE ( 0 ) 1622 1623 1623 t_surface = t_surface_p1624 t_soil = t_soil_p1625 IF ( humidity ) THEN1626 m_soil = m_soil_p1627 m_liq_eb = m_liq_eb_p1628 ENDIF1629 1630 1631 CASE ( 1 )1632 1633 1624 t_surface => t_surface_1; t_surface_p => t_surface_2 1634 1625 t_soil => t_soil_1; t_soil_p => t_soil_2 … … 1638 1629 ENDIF 1639 1630 1631 1632 CASE ( 1 ) 1633 1634 t_surface => t_surface_2; t_surface_p => t_surface_1 1635 t_soil => t_soil_2; t_soil_p => t_soil_1 1636 IF ( humidity ) THEN 1637 m_soil => m_soil_2; m_soil_p => m_soil_1 1638 m_liq_eb => m_liq_eb_2; m_liq_eb_p => m_liq_eb_1 1639 ENDIF 1640 1640 1641 END SELECT 1641 1642 #endif
Note: See TracChangeset
for help on using the changeset viewer.