Changeset 4312 for palm


Ignore:
Timestamp:
Nov 27, 2019 2:06:25 PM (4 years ago)
Author:
suehring
Message:

Checks and initialization for relative surface fractions revised

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r4296 r4312  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Initialization of relative surface fractions revised
    2323!
    2424! Former revisions:
     
    26562656                         soil_type_f%var_2d(j,i)                    = 1
    26572657!                         
    2658 !--                      Set surface_fraction if provided in static input,
    2659 !--                      else, in case no tiles are used, this will be done
    2660 !--                      on basis of the prescribed types (vegetation/pavement/
    2661 !--                      water_type).
     2658!--                      If surface_fraction is provided in static input,
     2659!--                      set fraction for vegetation to one at building-covered
     2660!--                      surfaces.
    26622661                         IF ( surface_fraction_f%from_file )  THEN
    26632662                            surface_fraction_f%frac(ind_veg_wall,j,i)  = 1.0_wp
     
    27082707             j = surf_lsm_h%j(m)
    27092708!
    2710 !--          0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction             
    2711              surf_lsm_h%frac(ind_veg_wall,m)  =                                &
    2712                                     surface_fraction_f%frac(ind_veg_wall,j,i)         
    2713              surf_lsm_h%frac(ind_pav_green,m) =                                &
    2714                                     surface_fraction_f%frac(ind_pav_green,j,i)       
    2715              surf_lsm_h%frac(ind_wat_win,m)   =                                &
     2709!--          0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction
     2710             IF ( surface_fraction_f%frac(ind_veg_wall,j,i) /=                 &
     2711                  surface_fraction_f%fill )  THEN
     2712                surf_lsm_h%frac(ind_veg_wall,m)  =                             &
     2713                                    surface_fraction_f%frac(ind_veg_wall,j,i)
     2714             ENDIF
     2715             IF ( surface_fraction_f%frac(ind_pav_green,j,i) /=                &
     2716                  surface_fraction_f%fill )  THEN
     2717                surf_lsm_h%frac(ind_pav_green,m) =                             &
     2718                                    surface_fraction_f%frac(ind_pav_green,j,i)
     2719             ENDIF
     2720             IF ( surface_fraction_f%frac(ind_wat_win,j,i) /=                  &
     2721                  surface_fraction_f%fill )  THEN
     2722                surf_lsm_h%frac(ind_wat_win,m)   =                             &
    27162723                                    surface_fraction_f%frac(ind_wat_win,j,i)
     2724             ENDIF
     2725!
     2726!--          Check if sum of relative fractions is zero. This case, give an
     2727!--          error message.
     2728             IF ( SUM ( surf_lsm_h%frac(:,m) ) == 0.0_wp )  THEN
     2729                WRITE( message_string, * )                                     &
     2730                                 'surface fractions at grid point (j,i) = (',  &
     2731                                 j, i, ') are all zero.'
     2732                CALL message( 'land_surface_model_mod', 'PA0688',              &
     2733                               2, 2, myid, 6, 0 )
     2734             ENDIF
     2735!
     2736!--          In case the sum of all surfaces is not 1, which may happen
     2737!--          due to rounding errors or type conversions, normalize the
     2738!--          fractions to one. Note, at the moment no tile approach is
     2739!--          implemented, so that relative fractions are either 1 or zero.
     2740             IF ( SUM ( surf_lsm_h%frac(:,m) ) > 1.0_wp  .OR.                  &
     2741                  SUM ( surf_lsm_h%frac(:,m) ) < 1.0_wp  )  THEN
     2742                surf_lsm_h%frac(:,m) = surf_lsm_h%frac(:,m) /                  &
     2743                                       SUM ( surf_lsm_h%frac(:,m) )
     2744
     2745             ENDIF
    27172746
    27182747          ENDDO
     
    27252754!
    27262755!--             0 - vegetation fraction, 1 - pavement fraction, 2 - water fraction       
    2727                 surf_lsm_v(l)%frac(ind_veg_wall,m)  =                          &
    2728                                     surface_fraction_f%frac(ind_veg_wall,j,i)         
    2729                 surf_lsm_v(l)%frac(ind_pav_green,m) =                          &
    2730                                     surface_fraction_f%frac(ind_pav_green,j,i)       
    2731                 surf_lsm_v(l)%frac(ind_wat_win,m)   =                          &
     2756                IF ( surface_fraction_f%frac(ind_veg_wall,j,i) /=              &
     2757                     surface_fraction_f%fill )  THEN
     2758                   surf_lsm_v(l)%frac(ind_veg_wall,m)  =                       &
     2759                                    surface_fraction_f%frac(ind_veg_wall,j,i)
     2760                ENDIF
     2761                IF ( surface_fraction_f%frac(ind_pav_green,j,i) /=             &
     2762                     surface_fraction_f%fill )  THEN
     2763                   surf_lsm_v(l)%frac(ind_pav_green,m)  =                      &
     2764                                    surface_fraction_f%frac(ind_pav_green,j,i)
     2765                ENDIF
     2766                IF ( surface_fraction_f%frac(ind_wat_win,j,i) /=               &
     2767                     surface_fraction_f%fill )  THEN
     2768                   surf_lsm_v(l)%frac(ind_wat_win,m)  =                        &
    27322769                                    surface_fraction_f%frac(ind_wat_win,j,i)
    2733 
     2770                ENDIF
     2771!
     2772!--             Check if sum of relative fractions is zero. This case, give an
     2773!--             error message.
     2774                IF ( SUM ( surf_lsm_v(l)%frac(:,m) ) == 0.0_wp )  THEN
     2775                   WRITE( message_string, * )                                  &
     2776                                 'surface fractions at grid point (j,i) = (',  &
     2777                                 j, i, ') are all zero.'
     2778                   CALL message( 'land_surface_model_mod', 'PA0688',           &
     2779                                  2, 2, myid, 6, 0 )
     2780                ENDIF
     2781!
     2782!--             In case the sum of all surfaces is not 1, which may happen
     2783!--             due to rounding errors or type conversions, normalize the
     2784!--             fractions to one. Note, at the moment no tile approach is
     2785!--             implemented, so that relative fractions are either 1 or zero.
     2786                IF ( SUM ( surf_lsm_v(l)%frac(:,m) ) > 1.0_wp  .OR.            &
     2787                     SUM ( surf_lsm_v(l)%frac(:,m) ) < 1.0_wp  )  THEN
     2788                   surf_lsm_v(l)%frac(:,m) = surf_lsm_v(l)%frac(:,m) /         &
     2789                                             SUM ( surf_lsm_v(l)%frac(:,m) )
     2790
     2791                ENDIF
    27342792             ENDDO
    27352793          ENDDO
  • palm/trunk/SOURCE/netcdf_data_input_mod.f90

    r4298 r4312  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Checks for surface fractions revised
    2323!
    2424! Former revisions:
     
    36433643                                  2, 2, myid, 6, 0 )
    36443644                ENDIF
    3645              ENDIF
    3646 !
    3647 !--          Check for consistency of surface fraction. If more than one type
    3648 !--          is set, surface fraction need to be given and the sum must not
    3649 !--          be larger than 1.
     3645             ENDIF
     3646!
     3647!--          Check for consistency of given types. At the moment, only one
     3648!--          of vegetation, pavement, or water-type can be set. This is
     3649!--          because no tile approach is yet implemented in the land-surface
     3650!--          model. Later, when this is possible, surface fraction need to be
     3651!--          given and the sum must not  be larger than 1. Please note, in case
     3652!--          more than one type is given at a pixel, an error message will be
     3653!--          given.
    36503654             n_surf = 0
    36513655             IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )       &
     
    36573661
    36583662             IF ( n_surf > 1 )  THEN
    3659                 IF ( .NOT. surface_fraction_f%from_file )  THEN
    3660                    message_string = 'If more than one surface type is ' //     &
    3661                                  'given at a location, surface_fraction ' //   &
    3662                                  'must be provided.'
    3663                    CALL message( 'netcdf_data_input_mod', 'PA0565',            &
    3664                                   2, 2, myid, 6, 0 )
    3665                 ELSEIF ( ANY ( surface_fraction_f%frac(:,j,i) ==               &
    3666                                surface_fraction_f%fill ) )  THEN
    3667                    message_string = 'If more than one surface type is ' //     &
    3668                                  'given at a location, surface_fraction ' //   &
    3669                                  'must be provided.'
    3670                    CALL message( 'netcdf_data_input_mod', 'PA0565',            &
    3671                                   2, 2, myid, 6, 0 )
    3672                 ENDIF
     3663                WRITE( message_string, * )                                     &
     3664                                 'More than one surface type (vegetation, '//  &
     3665                                 'pavement, water) is given at a location. '// &
     3666                                 'Please note, this is not possible at ' //    &
     3667                                 'the moment as no tile approach has been ' // &
     3668                                 'yet implemented. (i,j) = ', i, j
     3669                CALL message( 'netcdf_data_input_mod', 'PA0565',               &
     3670                               2, 2, myid, 6, 0 )
     3671
     3672!                 IF ( .NOT. surface_fraction_f%from_file )  THEN
     3673!                    message_string = 'More than one surface type (vegetation '//&
     3674!                                  'pavement, water) is given at a location. '// &
     3675!                                  'Please note, this is not possible at ' //    &
     3676!                                  'the moment as no tile approach is yet ' //   &
     3677!                                  'implemented.'
     3678!                    message_string = 'If more than one surface type is ' //     &
     3679!                                  'given at a location, surface_fraction ' //   &
     3680!                                  'must be provided.'
     3681!                    CALL message( 'netcdf_data_input_mod', 'PA0565',            &
     3682!                                   2, 2, myid, 6, 0 )
     3683!                 ELSEIF ( ANY ( surface_fraction_f%frac(:,j,i) ==               &
     3684!                                surface_fraction_f%fill ) )  THEN
     3685!                    message_string = 'If more than one surface type is ' //     &
     3686!                                  'given at a location, surface_fraction ' //   &
     3687!                                  'must be provided.'
     3688!                    CALL message( 'netcdf_data_input_mod', 'PA0565',            &
     3689!                                   2, 2, myid, 6, 0 )
     3690!                 ENDIF
    36733691             ENDIF
    36743692!
     
    36783696             IF ( surface_fraction_f%from_file )  THEN
    36793697!
    3680 !--             Sum of relative fractions must not exceed 1.
    3681                 IF ( SUM ( surface_fraction_f%frac(0:2,j,i) ) > 1.0_wp )  THEN
    3682                    message_string = 'surface_fraction must not exceed 1'
    3683                    CALL message( 'netcdf_data_input_mod', 'PA0566',            &
     3698!--             If surface fractions is given, also check that only one type
     3699!--             is given.
     3700                IF ( SUM( MERGE( 1, 0, surface_fraction_f%frac(:,j,i) /= 0.0_wp&
     3701                                .AND.  surface_fraction_f%frac(:,j,i) /=       &
     3702                                       surface_fraction_f%fill  ) ) > 1 )  THEN
     3703                   WRITE( message_string, * )                                  &
     3704                                    'surface_fraction is given for more ' //   &
     3705                                    'than one type. ' //                       &
     3706                                    'Please note, this is not possible at ' // &
     3707                                    'the moment as no tile approach has '//    &
     3708                                    'yet been implemented. (i, j) = ', i, j
     3709                   CALL message( 'netcdf_data_input_mod', 'PA0676',            &
    36843710                                  2, 2, myid, 6, 0 )
     3711                ENDIF
     3712!
     3713!--             Sum of relative fractions must be 1. Note, due to type
     3714!--             type conversions due to reading, the sum of surface fractions
     3715!--             might be not exactly 1. Hence, the sum is check with a
     3716!--             tolerance. Later, in the land-surface model, the relative
     3717!--             fractions are normalized to one.
     3718                IF ( ANY( surface_fraction_f%frac(:,j,i) /=                    &
     3719                          surface_fraction_f%fill ) )  THEN
     3720                   IF ( SUM ( surface_fraction_f%frac(0:2,j,i) ) >             &
     3721                        1.0_wp + 1E-8_wp  .OR.                                 &
     3722                        SUM ( surface_fraction_f%frac(0:2,j,i) ) <             &
     3723                        1.0_wp - 1E-8_wp )  THEN
     3724                      WRITE( message_string, * )                               &
     3725                                    'The sum of all land-surface fractions ' //&
     3726                                    'must equal 1. ', i, j
     3727                      CALL message( 'netcdf_data_input_mod', 'PA0566',         &
     3728                                     2, 2, myid, 6, 0 )
     3729                   ENDIF
    36853730                ENDIF
    36863731!
Note: See TracChangeset for help on using the changeset viewer.