Ignore:
Timestamp:
Mar 3, 2015 2:18:16 PM (9 years ago)
Author:
maronga
Message:

land surface model released

File:
1 edited

Legend:

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

    r1505 r1551  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Added various checks for land surface and radiation model. In the course of this
     23! action, the length of the variable var has to be increased
    2324!
    2425! Former revisions:
     
    278279
    279280    CHARACTER (LEN=1)   ::  sq                       !:
    280     CHARACTER (LEN=6)   ::  var                      !:
     281    CHARACTER (LEN=15)  ::  var                      !:
    281282    CHARACTER (LEN=7)   ::  unit                     !:
    282283    CHARACTER (LEN=8)   ::  date                     !:
     
    970971       IF ( bc_pt_b == 'neumann' .OR. bc_q_b == 'neumann' )  THEN
    971972          message_string = 'lsm requires setting of'//                         &
    972                            'bc_pt_b = "dirichlet" and '//                        &
     973                           'bc_pt_b = "dirichlet" and '//                      &
    973974                           'bc_q_b  = "dirichlet"'
    974975          CALL message( 'check_parameters', 'PA0399', 1, 2, 0, 6, 0 )
     
    988989             CALL message( 'check_parameters', 'PA0401', 1, 2, 0, 6, 0 )
    989990          ENDIF
     991 
     992          IF ( min_canopy_resistance == 9999999.9_wp)  THEN
     993             message_string = 'veg_type = 0 (user_defined)'//                  &
     994                              'requires setting of min_canopy_resistance'//    &
     995                              '/= 9999999.9'
     996             CALL message( 'check_parameters', 'PA0415', 1, 2, 0, 6, 0 )
     997          ENDIF
     998
     999          IF ( leaf_area_index == 9999999.9_wp)  THEN
     1000             message_string = 'veg_type = 0 (user_defined)'//                  &
     1001                              'requires setting of leaf_area_index'//          &
     1002                              '/= 9999999.9'
     1003             CALL message( 'check_parameters', 'PA0416', 1, 2, 0, 6, 0 )
     1004          ENDIF
     1005
     1006          IF ( vegetation_coverage == 9999999.9_wp)  THEN
     1007             message_string = 'veg_type = 0 (user_defined)'//                  &
     1008                              'requires setting of vegetation_coverage'//      &
     1009                              '/= 9999999.9'
     1010             CALL message( 'check_parameters', 'PA0417', 1, 2, 0, 6, 0 )
     1011          ENDIF
     1012
     1013          IF ( canopy_resistance_coefficient == 9999999.9_wp)  THEN
     1014             message_string = 'veg_type = 0 (user_defined)'//                  &
     1015                              'requires setting of'//                          &
     1016                              'canopy_resistance_coefficient /= 9999999.9'
     1017             CALL message( 'check_parameters', 'PA0418', 1, 2, 0, 6, 0 )
     1018          ENDIF
     1019
     1020          IF ( lambda_surface_stable == 9999999.9_wp)  THEN
     1021             message_string = 'veg_type = 0 (user_defined)'//                  &
     1022                              'requires setting of lambda_surface_stable'//    &
     1023                              '/= 9999999.9'
     1024             CALL message( 'check_parameters', 'PA0419', 1, 2, 0, 6, 0 )
     1025          ENDIF
     1026
     1027          IF ( lambda_surface_unstable == 9999999.9_wp)  THEN
     1028             message_string = 'veg_type = 0 (user_defined)'//                  &
     1029                              'requires setting of lambda_surface_unstable'//  &
     1030                              '/= 9999999.9'
     1031             CALL message( 'check_parameters', 'PA0420', 1, 2, 0, 6, 0 )
     1032          ENDIF
     1033
     1034          IF ( f_shortwave_incoming == 9999999.9_wp)  THEN
     1035             message_string = 'veg_type = 0 (user_defined)'//                  &
     1036                              'requires setting of f_shortwave_incoming'//     &
     1037                              '/= 9999999.9'
     1038             CALL message( 'check_parameters', 'PA0421', 1, 2, 0, 6, 0 )
     1039          ENDIF
     1040
     1041          IF ( z0_eb == 9999999.9_wp)  THEN
     1042             message_string = 'veg_type = 0 (user_defined)'//                  &
     1043                              'requires setting of z0_eb'//                   &
     1044                              '/= 9999999.9'
     1045             CALL message( 'check_parameters', 'PA0422', 1, 2, 0, 6, 0 )
     1046          ENDIF
     1047
     1048          IF ( z0h_eb == 9999999.9_wp)  THEN
     1049             message_string = 'veg_type = 0 (user_defined)'//                  &
     1050                              'requires setting of z0h_eb'//                  &
     1051                              '/= 9999999.9'
     1052             CALL message( 'check_parameters', 'PA0423', 1, 2, 0, 6, 0 )
     1053          ENDIF
     1054
     1055
     1056       ENDIF
     1057
     1058       IF ( soil_type == 0 )  THEN
     1059
     1060          IF ( alpha_vangenuchten == 9999999.9_wp)  THEN
     1061             message_string = 'soil_type = 0 (user_defined)'//                 &
     1062                              'requires setting of alpha_vangenuchten'//       &
     1063                              '/= 9999999.9'
     1064             CALL message( 'check_parameters', 'PA0422', 1, 2, 0, 6, 0 )
     1065          ENDIF
     1066
     1067          IF ( l_vangenuchten == 9999999.9_wp)  THEN
     1068             message_string = 'soil_type = 0 (user_defined)'//                 &
     1069                              'requires setting of l_vangenuchten'//           &
     1070                              '/= 9999999.9'
     1071             CALL message( 'check_parameters', 'PA0423', 1, 2, 0, 6, 0 )
     1072          ENDIF
     1073
     1074          IF ( n_vangenuchten == 9999999.9_wp)  THEN
     1075             message_string = 'soil_type = 0 (user_defined)'//                 &
     1076                              'requires setting of n_vangenuchten'//           &
     1077                              '/= 9999999.9'
     1078             CALL message( 'check_parameters', 'PA0424', 1, 2, 0, 6, 0 )
     1079          ENDIF
     1080
     1081          IF ( hydraulic_conductivity == 9999999.9_wp)  THEN
     1082             message_string = 'soil_type = 0 (user_defined)'//                 &
     1083                              'requires setting of hydraulic_conductivity'//   &
     1084                              '/= 9999999.9'
     1085             CALL message( 'check_parameters', 'PA0425', 1, 2, 0, 6, 0 )
     1086          ENDIF
     1087
     1088          IF ( saturation_moisture == 9999999.9_wp)  THEN
     1089             message_string = 'soil_type = 0 (user_defined)'//                 &
     1090                              'requires setting of saturation_moisture'//      &
     1091                              '/= 9999999.9'
     1092             CALL message( 'check_parameters', 'PA0426', 1, 2, 0, 6, 0 )
     1093          ENDIF
     1094
     1095          IF ( field_capacity == 9999999.9_wp)  THEN
     1096             message_string = 'soil_type = 0 (user_defined)'//                 &
     1097                              'requires setting of field_capacity'//           &
     1098                              '/= 9999999.9'
     1099             CALL message( 'check_parameters', 'PA0427', 1, 2, 0, 6, 0 )
     1100          ENDIF
     1101
     1102          IF ( wilting_point == 9999999.9_wp)  THEN
     1103             message_string = 'soil_type = 0 (user_defined)'//                 &
     1104                              'requires setting of wilting_point'//            &
     1105                              '/= 9999999.9'
     1106             CALL message( 'check_parameters', 'PA0428', 1, 2, 0, 6, 0 )
     1107          ENDIF
     1108
     1109          IF ( residual_moisture == 9999999.9_wp)  THEN
     1110             message_string = 'soil_type = 0 (user_defined)'//                 &
     1111                              'requires setting of residual_moisture'//        &
     1112                              '/= 9999999.9'
     1113             CALL message( 'check_parameters', 'PA0429', 1, 2, 0, 6, 0 )
     1114          ENDIF
     1115
    9901116       ENDIF
    9911117
     
    9961122       ENDIF
    9971123
    998 
    9991124    END IF
     1125
     1126    IF ( radiation )  THEN
     1127       IF ( radiation_scheme == 'constant' )  THEN
     1128          irad_scheme = 0
     1129       ELSEIF ( radiation_scheme == 'clear-sky' )  THEN
     1130          irad_scheme = 1
     1131       ELSEIF ( radiation_scheme == 'rrtm' )  THEN
     1132          irad_scheme = 2
     1133       ELSE
     1134          message_string = 'unknown radiation_scheme = '//                     &
     1135                           TRIM( radiation_scheme )
     1136          CALL message( 'check_parameters', 'PA0430', 1, 2, 0, 6, 0 )
     1137       ENDIF
     1138    ENDIF
    10001139
    10011140
     
    28623001             ENDIF
    28633002
     3003          CASE ( 't_soil', '#t_soil' )
     3004             IF ( .NOT. land_surface )  THEN
     3005                message_string = 'data_output_pr = ' //                        &
     3006                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
     3007                                 'lemented for land_surface = .FALSE.'
     3008                CALL message( 'check_parameters', 'PA0403', 1, 2, 0, 6, 0 )
     3009             ELSE
     3010                dopr_index(i) = 89
     3011                dopr_unit(i)  = 'K'
     3012                hom(0:nzs-1,2,89,:)  = SPREAD( - zs, 2, statistic_regions+1 )
     3013                IF ( data_output_pr(i)(1:1) == '#' )  THEN
     3014                   dopr_initial_index(i) = 90
     3015                   hom(0:nzs-1,2,90,:)   = SPREAD( - zs, 2, statistic_regions+1 )
     3016                   data_output_pr(i)     = data_output_pr(i)(2:)
     3017                ENDIF
     3018             ENDIF
     3019
     3020          CASE ( 'm_soil', '#m_soil' )
     3021             IF ( .NOT. land_surface )  THEN
     3022                message_string = 'data_output_pr = ' //                        &
     3023                                 TRIM( data_output_pr(i) ) // ' is not imp' // &
     3024                                 'lemented for land_surface = .FALSE.'
     3025                CALL message( 'check_parameters', 'PA0403', 1, 2, 0, 6, 0 )
     3026             ELSE
     3027                dopr_index(i) = 91
     3028                dopr_unit(i)  = 'm3/m3'
     3029                hom(0:nzs-1,2,91,:)  = SPREAD( - zs, 2, statistic_regions+1 )
     3030                IF ( data_output_pr(i)(1:1) == '#' )  THEN
     3031                   dopr_initial_index(i) = 92
     3032                   hom(0:nzs-1,2,92,:)   = SPREAD( - zs, 2, statistic_regions+1 )
     3033                   data_output_pr(i)     = data_output_pr(i)(2:)
     3034                ENDIF
     3035             ENDIF
     3036
    28643037
    28653038          CASE DEFAULT
     
    29323105          ENDIF
    29333106       ENDIF
     3107
    29343108!
    29353109!--    Check for allowed value and set units
     
    29513125             ENDIF
    29523126             unit = 'K'
     3127
     3128          CASE ( 'm_soil' )
     3129             IF ( .NOT. land_surface )  THEN
     3130                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3131                         'land_surface = .TRUE.'
     3132                CALL message( 'check_parameters', 'PA0404', 1, 2, 0, 6, 0 )
     3133             ENDIF
     3134             unit = 'm3/m3'
    29533135
    29543136          CASE ( 'nr' )
     
    30763258             unit = 'psu'
    30773259
    3078           CASE ( 'u*', 't*', 'lwp*', 'pra*', 'prr*', 'qsws*', 'shf*', 'z0*', 'z0h*' )
     3260          CASE ( 't_soil' )
     3261             IF ( .NOT. land_surface )  THEN
     3262                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3263                         'land_surface = .TRUE.'
     3264                CALL message( 'check_parameters', 'PA0404', 1, 2, 0, 6, 0 )
     3265             ENDIF
     3266             unit = 'K'
     3267
     3268
     3269          CASE ( 'c_liq*', 'c_soil*', 'c_veg*', 'ghf_eb*', 'lai*', 'lwp*',     &
     3270                 'm_liq_eb*', 'pra*', 'prr*', 'qsws*', 'qsws_eb*',             &
     3271                 'qsws_liq_eb*', 'qsws_soil_eb*', 'qsws_veg_eb*',              &
     3272                 'rad_net*', 'rad_sw_in*', 'shf*', 'shf_eb*', 't*', 'u*',      &
     3273                 'z0*', 'z0h*' )
    30793274             IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
    30803275                message_string = 'illegal value for data_output: "' //         &
     
    30833278                CALL message( 'check_parameters', 'PA0111', 1, 2, 0, 6, 0 )
    30843279             ENDIF
     3280             IF ( TRIM( var ) == 'c_liq*'  .AND.  .NOT. land_surface )  THEN
     3281                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3282                                 'res land_surface = .TRUE.'
     3283                CALL message( 'check_parameters', 'PA0411', 1, 2, 0, 6, 0 )
     3284             ENDIF
     3285             IF ( TRIM( var ) == 'c_soil*'  .AND.  .NOT. land_surface )  THEN
     3286                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3287                                 'res land_surface = .TRUE.'
     3288                CALL message( 'check_parameters', 'PA0412', 1, 2, 0, 6, 0 )
     3289             ENDIF
     3290             IF ( TRIM( var ) == 'c_veg*'  .AND.  .NOT. land_surface )  THEN
     3291                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3292                                 'res land_surface = .TRUE.'
     3293                CALL message( 'check_parameters', 'PA0413', 1, 2, 0, 6, 0 )
     3294             ENDIF
     3295             IF ( TRIM( var ) == 'ghf_eb*'  .AND.  .NOT. land_surface )  THEN
     3296                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3297                                 'res land_surface = .TRUE.'
     3298                CALL message( 'check_parameters', 'PA0405', 1, 2, 0, 6, 0 )
     3299             ENDIF
     3300             IF ( TRIM( var ) == 'lai*'  .AND.  .NOT. land_surface )  THEN
     3301                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3302                                 'res land_surface = .TRUE.'
     3303                CALL message( 'check_parameters', 'PA0414', 1, 2, 0, 6, 0 )
     3304             ENDIF
    30853305             IF ( TRIM( var ) == 'lwp*'  .AND.  .NOT. cloud_physics )  THEN
    30863306                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     
    30883308                CALL message( 'check_parameters', 'PA0108', 1, 2, 0, 6, 0 )
    30893309             ENDIF
     3310             IF ( TRIM( var ) == 'm_liq_eb*'  .AND.  .NOT. land_surface )  THEN
     3311                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3312                                 'res land_surface = .TRUE.'
     3313                CALL message( 'check_parameters', 'PA0406', 1, 2, 0, 6, 0 )
     3314             ENDIF
    30903315             IF ( TRIM( var ) == 'pra*'  .AND.  .NOT. precipitation )  THEN
    30913316                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     
    31083333                CALL message( 'check_parameters', 'PA0322', 1, 2, 0, 6, 0 )
    31093334             ENDIF
    3110 
     3335             IF ( TRIM( var ) == 'qsws_eb*'  .AND.  .NOT. land_surface )  THEN
     3336                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3337                                 'res land_surface = .TRUE.'
     3338                CALL message( 'check_parameters', 'PA0407', 1, 2, 0, 6, 0 )
     3339             ENDIF
     3340             IF ( TRIM( var ) == 'qsws_liq_eb*'  .AND.  .NOT. land_surface )  &
     3341             THEN
     3342                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3343                                 'res land_surface = .TRUE.'
     3344                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     3345             ENDIF
     3346             IF ( TRIM( var ) == 'qsws_soil_eb*'  .AND.  .NOT. land_surface ) &
     3347             THEN
     3348                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3349                                 'res land_surface = .TRUE.'
     3350                CALL message( 'check_parameters', 'PA0409', 1, 2, 0, 6, 0 )
     3351             ENDIF
     3352             IF ( TRIM( var ) == 'qsws_veg_eb*'  .AND.  .NOT. land_surface )  &
     3353             THEN
     3354                message_string = 'output of "' // TRIM( var ) // '" requi' //  &
     3355                                 'res land_surface = .TRUE.'
     3356                CALL message( 'check_parameters', 'PA0410', 1, 2, 0, 6, 0 )
     3357             ENDIF
     3358
     3359             IF ( TRIM( var ) == 'c_liq*' )  unit = 'none'
     3360             IF ( TRIM( var ) == 'c_soil*')  unit = 'none'
     3361             IF ( TRIM( var ) == 'c_veg*' )  unit = 'none'
     3362             IF ( TRIM( var ) == 'ghf_eb*')  unit = 'W/m2'
     3363             IF ( TRIM( var ) == 'lai*'   )  unit = 'none'
    31113364             IF ( TRIM( var ) == 'lwp*'   )  unit = 'kg/kg*m'
    31123365             IF ( TRIM( var ) == 'pra*'   )  unit = 'mm'
    31133366             IF ( TRIM( var ) == 'prr*'   )  unit = 'mm/s'
    31143367             IF ( TRIM( var ) == 'qsws*'  )  unit = 'kgm/kgs'
     3368             IF ( TRIM( var ) == 'qsws_eb*'      ) unit = 'W/m2'
     3369             IF ( TRIM( var ) == 'qsws_liq_eb*'  ) unit = 'W/m2'
     3370             IF ( TRIM( var ) == 'qsws_soil_eb*' ) unit = 'W/m2'
     3371             IF ( TRIM( var ) == 'qsws_veg_eb*'  ) unit = 'W/m2'
     3372             IF ( TRIM( var ) == 'rad_net*')       unit = 'W/m2'     
     3373             IF ( TRIM( var ) == 'rad_sw_in*')     unit = 'W/m2'   
    31153374             IF ( TRIM( var ) == 'shf*'   )  unit = 'K*m/s'
     3375             IF ( TRIM( var ) == 'shf_eb*')  unit = 'W/m2'
    31163376             IF ( TRIM( var ) == 't*'     )  unit = 'K'
    31173377             IF ( TRIM( var ) == 'u*'     )  unit = 'm/s'
     
    31293389
    31303390          CASE DEFAULT
     3391
    31313392             CALL user_check_data_output( var, unit )
    31323393
     
    31373398                   CALL message( 'check_parameters', 'PA0114', 1, 2, 0, 6, 0 )
    31383399                ELSE
    3139                    message_string = 'illegal value for data_output =' //       &
     3400                   message_string = 'illegal value for data_output = "' //     &
    31403401                                    TRIM( data_output(i) ) // '"'
    31413402                   CALL message( 'check_parameters', 'PA0115', 1, 2, 0, 6, 0 )
Note: See TracChangeset for help on using the changeset viewer.