Changeset 2963 for palm/trunk/SOURCE/land_surface_model_mod.f90
- Timestamp:
- Apr 12, 2018 2:47:44 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model_mod.f90
r2938 r2963 25 25 ! ----------------- 26 26 ! $Id$ 27 ! - In initialization of surface types, consider the case that surface_fractions 28 ! is not given in static input file. 29 ! - Introduce index for vegetation/wall, pavement/green-wall and water/window 30 ! surfaces, for clearer access of surface fraction, albedo, emissivity, etc. . 31 ! 32 ! 2938 2018-03-27 15:52:42Z suehring 27 33 ! Initialization of soil moisture and temperature via Inifor-provided data also 28 34 ! in nested child domains, even if no dynamic input file is available for … … 416 422 417 423 USE surface_mod, & 418 ONLY : surf_lsm_h, surf_lsm_v, surf_type, surface_restore_elements 424 ONLY : ind_pav_green, ind_veg_wall, ind_wat_win, surf_lsm_h, & 425 surf_lsm_v, surf_type, surface_restore_elements 419 426 420 427 IMPLICIT NONE … … 711 718 'pond ', & ! 4 712 719 'fountain ' & ! 5 713 /) 714 ! 715 !-- IDs for vegetation, pavement and water surfaces 716 INTEGER(iwp) :: ind_veg = 0 !< index for vegetation surfaces, used to assess surface-fraction, albedo, etc. 717 INTEGER(iwp) :: ind_pav = 1 !< index for pavement surfaces, used to assess surface-fraction, albedo, etc. 718 INTEGER(iwp) :: ind_wat = 2 !< index for vegetation surfaces, used to assess surface-fraction, albedo, etc. 720 /) 719 721 720 722 ! … … 2560 2562 2561 2563 surf_lsm_h%vegetation_surface = .TRUE. 2562 surf_lsm_h%frac(ind_veg ,:) = 1.0_wp2564 surf_lsm_h%frac(ind_veg_wall,:) = 1.0_wp 2563 2565 DO l = 0, 3 2564 2566 surf_lsm_v(l)%vegetation_surface = .TRUE. 2565 surf_lsm_v(l)%frac(ind_veg ,:) = 1.0_wp2567 surf_lsm_v(l)%frac(ind_veg_wall,:) = 1.0_wp 2566 2568 ENDDO 2567 2569 … … 2569 2571 2570 2572 surf_lsm_h%water_surface = .TRUE. 2571 surf_lsm_h%frac(ind_wat ,:) = 1.0_wp2573 surf_lsm_h%frac(ind_wat_win,:) = 1.0_wp 2572 2574 ! 2573 2575 !-- Note, vertical water surface does not really make sense. 2574 2576 DO l = 0, 3 2575 2577 surf_lsm_v(l)%water_surface = .TRUE. 2576 surf_lsm_v(l)%frac(ind_wat ,:) = 1.0_wp2578 surf_lsm_v(l)%frac(ind_wat_win,:) = 1.0_wp 2577 2579 ENDDO 2578 2580 … … 2580 2582 2581 2583 surf_lsm_h%pavement_surface = .TRUE. 2582 surf_lsm_h%frac(ind_pav ,:) = 1.0_wp2584 surf_lsm_h%frac(ind_pav_green,:) = 1.0_wp 2583 2585 DO l = 0, 3 2584 2586 surf_lsm_v(l)%pavement_surface = .TRUE. 2585 surf_lsm_v(l)%frac(ind_pav ,:) = 1.0_wp2587 surf_lsm_v(l)%frac(ind_pav_green,:) = 1.0_wp 2586 2588 ENDDO 2587 2589 … … 2631 2633 !-- In case of netcdf input file, further initialize surface fractions. 2632 2634 !-- At the moment only 1 surface is given at a location, so that the fraction 2633 !-- is either 0 or 1. This will be revised later. 2634 IF ( input_pids_static ) THEN 2635 !-- is either 0 or 1. This will be revised later. If surface fraction 2636 !-- is not given in static input file, relative fractions will be derived 2637 !-- from given surface type. In this case, only 1 type is given at a certain 2638 !-- location (already checked). 2639 IF ( input_pids_static .AND. surface_fraction_f%from_file ) THEN 2635 2640 DO m = 1, surf_lsm_h%ns 2636 2641 i = surf_lsm_h%i(m) … … 2638 2643 ! 2639 2644 !-- 0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction 2640 surf_lsm_h%frac(ind_veg,m) = surface_fraction_f%frac(ind_veg,j,i) 2641 surf_lsm_h%frac(ind_pav,m) = surface_fraction_f%frac(ind_pav,j,i) 2642 surf_lsm_h%frac(ind_wat,m) = surface_fraction_f%frac(ind_wat,j,i) 2645 surf_lsm_h%frac(ind_veg_wall,m) = & 2646 surface_fraction_f%frac(ind_veg_wall,j,i) 2647 surf_lsm_h%frac(ind_pav_green,m) = & 2648 surface_fraction_f%frac(ind_pav_green,j,i) 2649 surf_lsm_h%frac(ind_wat_win,m) = & 2650 surface_fraction_f%frac(ind_wat_win,j,i) 2643 2651 2644 2652 ENDDO … … 2651 2659 ! 2652 2660 !-- 0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction 2653 surf_lsm_v(l)%frac(ind_veg,m) = surface_fraction_f%frac(ind_veg,j,i) 2654 surf_lsm_v(l)%frac(ind_pav,m) = surface_fraction_f%frac(ind_pav,j,i) 2655 surf_lsm_v(l)%frac(ind_wat,m) = surface_fraction_f%frac(ind_wat,j,i) 2656 2661 surf_lsm_v(l)%frac(ind_veg_wall,m) = & 2662 surface_fraction_f%frac(ind_veg_wall,j,i) 2663 surf_lsm_v(l)%frac(ind_pav_green,m) = & 2664 surface_fraction_f%frac(ind_pav_green,j,i) 2665 surf_lsm_v(l)%frac(ind_wat_win,m) = & 2666 surface_fraction_f%frac(ind_wat_win,j,i) 2667 2668 ENDDO 2669 ENDDO 2670 ELSEIF ( input_pids_static .AND. .NOT. surface_fraction_f%from_file ) & 2671 THEN 2672 DO m = 1, surf_lsm_h%ns 2673 i = surf_lsm_h%i(m) 2674 j = surf_lsm_h%j(m) 2675 2676 IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill ) & 2677 surf_lsm_h%frac(ind_veg_wall,m) = 1.0_wp 2678 IF ( pavement_type_f%var(j,i) /= pavement_type_f%fill ) & 2679 surf_lsm_h%frac(ind_pav_green,m) = 1.0_wp 2680 IF ( water_type_f%var(j,i) /= water_type_f%fill ) & 2681 surf_lsm_h%frac(ind_wat_win,m) = 1.0_wp 2682 ENDDO 2683 DO l = 0, 3 2684 DO m = 1, surf_lsm_v(l)%ns 2685 i = surf_lsm_v(l)%i(m) + MERGE( 0, surf_lsm_v(l)%ioff, & 2686 surf_lsm_v(l)%building_covered(m) ) 2687 j = surf_lsm_v(l)%j(m) + MERGE( 0, surf_lsm_v(l)%joff, & 2688 surf_lsm_v(l)%building_covered(m) ) 2689 2690 IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill ) & 2691 surf_lsm_v(l)%frac(ind_veg_wall,m) = 1.0_wp 2692 IF ( pavement_type_f%var(j,i) /= pavement_type_f%fill ) & 2693 surf_lsm_v(l)%frac(ind_pav_green,m) = 1.0_wp 2694 IF ( water_type_f%var(j,i) /= water_type_f%fill ) & 2695 surf_lsm_v(l)%frac(ind_wat_win,m) = 1.0_wp 2657 2696 ENDDO 2658 2697 ENDDO … … 3016 3055 surf_lsm_h%f_sw_in(m) = f_shortwave_incoming 3017 3056 surf_lsm_h%c_surface(m) = c_surface 3018 surf_lsm_h%albedo_type(ind_veg ,m) = albedo_type3019 surf_lsm_h%emissivity(ind_veg ,m) = emissivity3057 surf_lsm_h%albedo_type(ind_veg_wall,m) = albedo_type 3058 surf_lsm_h%emissivity(ind_veg_wall,m) = emissivity 3020 3059 ELSE 3021 3060 surf_lsm_h%lai(m) = 0.0_wp … … 3042 3081 surf_lsm_v(l)%f_sw_in(m) = f_shortwave_incoming 3043 3082 surf_lsm_v(l)%c_surface(m) = c_surface 3044 surf_lsm_v(l)%albedo_type(ind_veg ,m) = albedo_type3045 surf_lsm_v(l)%emissivity(ind_veg ,m) = emissivity3083 surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = albedo_type 3084 surf_lsm_v(l)%emissivity(ind_veg_wall,m) = emissivity 3046 3085 ELSE 3047 3086 surf_lsm_v(l)%lai(m) = 0.0_wp … … 3077 3116 surf_lsm_h%f_sw_in(m) = vegetation_pars(ind_v_f_sw_in,st) 3078 3117 surf_lsm_h%c_surface(m) = vegetation_pars(ind_v_c_surf,st) 3079 surf_lsm_h%albedo_type(ind_veg ,m) = INT( vegetation_pars(ind_v_at,st) )3080 surf_lsm_h%emissivity(ind_veg ,m) = vegetation_pars(ind_v_emis,st)3118 surf_lsm_h%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) ) 3119 surf_lsm_h%emissivity(ind_veg_wall,m) = vegetation_pars(ind_v_emis,st) 3081 3120 ENDIF 3082 3121 ENDDO … … 3103 3142 surf_lsm_v(l)%f_sw_in(m) = vegetation_pars(ind_v_f_sw_in,st) 3104 3143 surf_lsm_v(l)%c_surface(m) = vegetation_pars(ind_v_c_surf,st) 3105 surf_lsm_v(l)%albedo_type(ind_veg ,m) = INT( vegetation_pars(ind_v_at,st) )3106 surf_lsm_v(l)%emissivity(ind_veg ,m) = vegetation_pars(ind_v_emis,st)3144 surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) ) 3145 surf_lsm_v(l)%emissivity(ind_veg_wall,m) = vegetation_pars(ind_v_emis,st) 3107 3146 ENDIF 3108 3147 ENDDO … … 3179 3218 IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /= & 3180 3219 vegetation_pars_f%fill ) & 3181 surf_lsm_h%albedo_type(ind_veg ,m) =&3220 surf_lsm_h%albedo_type(ind_veg_wall,m) = & 3182 3221 INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) ) 3183 3222 IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /= & 3184 3223 vegetation_pars_f%fill ) & 3185 surf_lsm_h%emissivity(ind_veg ,m) =&3224 surf_lsm_h%emissivity(ind_veg_wall,m) = & 3186 3225 vegetation_pars_f%pars_xy(ind_v_emis,j,i) 3187 3226 ENDIF … … 3255 3294 IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /= & 3256 3295 vegetation_pars_f%fill ) & 3257 surf_lsm_v(l)%albedo_type(ind_veg ,m) =&3296 surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = & 3258 3297 INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) ) 3259 3298 IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /= & 3260 3299 vegetation_pars_f%fill ) & 3261 surf_lsm_v(l)%emissivity(ind_veg ,m) =&3300 surf_lsm_v(l)%emissivity(ind_veg_wall,m) = & 3262 3301 vegetation_pars_f%pars_xy(ind_v_emis,j,i) 3263 3302 ENDIF … … 3305 3344 surf_lsm_h%lambda_surface_u(m) = 1.0E10_wp 3306 3345 surf_lsm_h%c_surface(m) = 0.0_wp 3307 surf_lsm_h%albedo_type(ind_wat ,m) = albedo_type3308 surf_lsm_h%emissivity(ind_wat ,m) = emissivity3346 surf_lsm_h%albedo_type(ind_wat_win,m) = albedo_type 3347 surf_lsm_h%emissivity(ind_wat_win,m) = emissivity 3309 3348 ENDIF 3310 3349 ENDDO … … 3323 3362 surf_lsm_v(l)%lambda_surface_u(m) = 1.0E10_wp 3324 3363 surf_lsm_v(l)%c_surface(m) = 0.0_wp 3325 surf_lsm_v(l)%albedo_type(ind_wat ,m) = albedo_type3326 surf_lsm_v(l)%emissivity(ind_wat ,m) = emissivity3364 surf_lsm_v(l)%albedo_type(ind_wat_win,m) = albedo_type 3365 surf_lsm_v(l)%emissivity(ind_wat_win,m) = emissivity 3327 3366 ENDIF 3328 3367 ENDDO … … 3353 3392 surf_lsm_h%lambda_surface_u(m) = water_pars(ind_w_lambda_u,st) 3354 3393 surf_lsm_h%c_surface(m) = 0.0_wp 3355 surf_lsm_h%albedo_type(ind_wat ,m) = INT( water_pars(ind_w_at,st) )3356 surf_lsm_h%emissivity(ind_wat ,m) = water_pars(ind_w_emis,st)3394 surf_lsm_h%albedo_type(ind_wat_win,m) = INT( water_pars(ind_w_at,st) ) 3395 surf_lsm_h%emissivity(ind_wat_win,m) = water_pars(ind_w_emis,st) 3357 3396 ENDIF 3358 3397 ENDDO … … 3378 3417 water_pars(ind_w_lambda_u,st) 3379 3418 surf_lsm_v(l)%c_surface(m) = 0.0_wp 3380 surf_lsm_v(l)%albedo_type(ind_wat ,m) =&3419 surf_lsm_v(l)%albedo_type(ind_wat_win,m) = & 3381 3420 INT( water_pars(ind_w_at,st) ) 3382 surf_lsm_v(l)%emissivity(ind_wat ,m) =&3421 surf_lsm_v(l)%emissivity(ind_wat_win,m) = & 3383 3422 water_pars(ind_w_emis,st) 3384 3423 ENDIF … … 3434 3473 IF ( water_pars_f%pars_xy(ind_w_at,j,i) /= & 3435 3474 water_pars_f%fill ) & 3436 surf_lsm_h%albedo_type(ind_wat ,m) =&3475 surf_lsm_h%albedo_type(ind_wat_win,m) = & 3437 3476 INT( water_pars_f%pars_xy(ind_w_at,j,i) ) 3438 3477 3439 3478 IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /= & 3440 3479 water_pars_f%fill ) & 3441 surf_lsm_h%emissivity(ind_wat ,m) =&3480 surf_lsm_h%emissivity(ind_wat_win,m) = & 3442 3481 water_pars_f%pars_xy(ind_w_emis,j,i) 3443 3482 ENDIF … … 3494 3533 IF ( water_pars_f%pars_xy(ind_w_at,j,i) /= & 3495 3534 water_pars_f%fill ) & 3496 surf_lsm_v(l)%albedo_type(ind_wat ,m) =&3535 surf_lsm_v(l)%albedo_type(ind_wat_win,m) = & 3497 3536 INT( water_pars_f%pars_xy(ind_w_at,j,i) ) 3498 3537 3499 3538 IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /= & 3500 3539 water_pars_f%fill ) & 3501 surf_lsm_v(l)%emissivity(ind_wat ,m) =&3540 surf_lsm_v(l)%emissivity(ind_wat_win,m) = & 3502 3541 water_pars_f%pars_xy(ind_w_emis,j,i) 3503 3542 ENDIF … … 3576 3615 * 0.25_wp 3577 3616 3578 surf_lsm_h%albedo_type(ind_pav ,m) = albedo_type3579 surf_lsm_h%emissivity(ind_pav ,m) = emissivity3617 surf_lsm_h%albedo_type(ind_pav_green,m) = albedo_type 3618 surf_lsm_h%emissivity(ind_pav_green,m) = emissivity 3580 3619 3581 3620 IF ( pavement_type /= 0 ) THEN … … 3611 3650 * 0.25_wp 3612 3651 3613 surf_lsm_v(l)%albedo_type(ind_pav ,m) = albedo_type3614 surf_lsm_v(l)%emissivity(ind_pav ,m) = emissivity3652 surf_lsm_v(l)%albedo_type(ind_pav_green,m) = albedo_type 3653 surf_lsm_v(l)%emissivity(ind_pav_green,m) = emissivity 3615 3654 3616 3655 IF ( pavement_type /= 0 ) THEN … … 3668 3707 * dz_soil(nzb_soil) & 3669 3708 * 0.25_wp 3670 surf_lsm_h%albedo_type(ind_pav ,m) = INT( pavement_pars(ind_p_at,st) )3671 surf_lsm_h%emissivity(ind_pav ,m) = pavement_pars(ind_p_emis,st)3709 surf_lsm_h%albedo_type(ind_pav_green,m) = INT( pavement_pars(ind_p_at,st) ) 3710 surf_lsm_h%emissivity(ind_pav_green,m) = pavement_pars(ind_p_emis,st) 3672 3711 3673 3712 DO k = nzb_soil, surf_lsm_h%nzt_pavement(m) … … 3718 3757 * dz_soil(nzb_soil) & 3719 3758 * 0.25_wp 3720 surf_lsm_v(l)%albedo_type(ind_pav ,m) =&3759 surf_lsm_v(l)%albedo_type(ind_pav_green,m) = & 3721 3760 INT( pavement_pars(ind_p_at,st) ) 3722 surf_lsm_v(l)%emissivity(ind_pav ,m) =&3761 surf_lsm_v(l)%emissivity(ind_pav_green,m) = & 3723 3762 pavement_pars(ind_p_emis,st) 3724 3763 3725 3764 DO k = nzb_soil, surf_lsm_h%nzt_pavement(m) 3726 surf_lsm_v(l)%lambda_h_def(k,m) = &3765 surf_lsm_v(l)%lambda_h_def(k,m) = & 3727 3766 pavement_subsurface_pars_1(k,pavement_type) 3728 surf_lsm_v(l)%rho_c_total_def(k,m) = &3767 surf_lsm_v(l)%rho_c_total_def(k,m) = & 3729 3768 pavement_subsurface_pars_2(k,pavement_type) 3730 3769 ENDDO … … 3784 3823 IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /= & 3785 3824 pavement_pars_f%fill ) & 3786 surf_lsm_h%albedo_type(ind_pav ,m) =&3825 surf_lsm_h%albedo_type(ind_pav_green,m) = & 3787 3826 INT( pavement_pars(ind_p_at,st) ) 3788 3827 IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /= & 3789 3828 pavement_pars_f%fill ) & 3790 surf_lsm_h%emissivity(ind_pav ,m) =&3829 surf_lsm_h%emissivity(ind_pav_green,m) = & 3791 3830 pavement_pars(ind_p_emis,st) 3792 3831 ENDIF … … 3844 3883 IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /= & 3845 3884 pavement_pars_f%fill ) & 3846 surf_lsm_v(l)%albedo_type(ind_pav ,m) =&3885 surf_lsm_v(l)%albedo_type(ind_pav_green,m) = & 3847 3886 INT( pavement_pars(ind_p_at,st) ) 3848 3887 3849 3888 IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /= & 3850 3889 pavement_pars_f%fill ) & 3851 surf_lsm_v(l)%emissivity(ind_pav ,m) =&3890 surf_lsm_v(l)%emissivity(ind_pav_green,m) = & 3852 3891 pavement_pars(ind_p_emis,st) 3853 3892 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.