Ignore:
Timestamp:
Apr 7, 2016 12:01:39 PM (5 years ago)
Author:
maronga
Message:

further modularization of radiation model and plant canopy model

File:
1 moved

Legend:

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

    r1818 r1826  
    1 !> @file radiation_model.f90
     1!> @file radiation_model_mod.f90
    22!--------------------------------------------------------------------------------!
    33! This file is part of PALM.
     
    1919! Current revisions:
    2020! -----------------
    21 !
     21! Further modularization.
    2222!
    2323! Former revisions:
     
    8080! ------------
    8181!> Radiation models and interfaces
    82 !> @todo move variable definitions used in init_radiation only to the subroutine
     82!> @todo move variable definitions used in radiation_init only to the subroutine
    8383!>       as they are no longer required after initialization.
    8484!> @todo Output of full column vertical profiles used in RRTMG
     
    115115
    116116#if defined ( __rrtmg )
    117 
    118 !     USE netcdf_interface,                                                      &
    119 !         ONLY:  nc_stat, netcdf_handle_error
    120117
    121118    USE parrrsw,                                                               &
     
    353350#endif
    354351
    355     INTERFACE init_radiation
    356        MODULE PROCEDURE init_radiation
    357     END INTERFACE init_radiation
    358 
     352    INTERFACE radiation_check_data_output
     353       MODULE PROCEDURE radiation_check_data_output
     354    END INTERFACE radiation_check_data_output
     355
     356    INTERFACE radiation_check_data_output_pr
     357       MODULE PROCEDURE radiation_check_data_output_pr
     358    END INTERFACE radiation_check_data_output_pr
     359 
     360    INTERFACE radiation_check_parameters
     361       MODULE PROCEDURE radiation_check_parameters
     362    END INTERFACE radiation_check_parameters
     363 
    359364    INTERFACE radiation_clearsky
    360365       MODULE PROCEDURE radiation_clearsky
    361366    END INTERFACE radiation_clearsky
    362 
     367 
     368    INTERFACE radiation_header
     369       MODULE PROCEDURE radiation_header
     370    END INTERFACE radiation_header
     371 
     372    INTERFACE radiation_init
     373       MODULE PROCEDURE radiation_init
     374    END INTERFACE radiation_init
     375
     376    INTERFACE radiation_parin
     377       MODULE PROCEDURE radiation_parin
     378    END INTERFACE radiation_parin
     379   
    363380    INTERFACE radiation_rrtmg
    364381       MODULE PROCEDURE radiation_rrtmg
     
    374391    PRIVATE
    375392
    376     PUBLIC albedo, albedo_type, albedo_type_name, albedo_lw_dif, albedo_lw_dir,&
    377            albedo_sw_dif, albedo_sw_dir, constant_albedo, day_init, dots_rad,  &
    378            dt_radiation, emissivity, force_radiation_call, init_radiation,     &
    379            lambda, lw_radiation, net_radiation, rad_net, rad_net_av, radiation,&
    380            radiation_clearsky, radiation_rrtmg, radiation_scheme,              &
    381            radiation_tendency, rad_lw_in, rad_lw_in_av, rad_lw_out,            &
    382            rad_lw_out_av, rad_lw_out_change_0, rad_lw_cs_hr, rad_lw_cs_hr_av,  &
    383            rad_lw_hr, rad_lw_hr_av, rad_sw_in, rad_sw_in_av, rad_sw_out,       &
    384            rad_sw_out_av, rad_sw_cs_hr, rad_sw_cs_hr_av, rad_sw_hr,            &
    385            rad_sw_hr_av, sigma_sb, skip_time_do_radiation, sw_radiation,       &
    386            time_radiation, time_utc_init, unscheduled_radiation_calls
     393!
     394!-- Public functions
     395    PUBLIC radiation_check_data_output, radiation_check_data_output_pr,        &
     396           radiation_check_parameters, radiation_clearsky, radiation_header,   &
     397           radiation_init, radiation_parin, radiation_rrtmg, radiation_tendency
     398   
     399!
     400!-- Public variables and constants
     401    PUBLIC dots_rad, dt_radiation, force_radiation_call,                       &
     402           rad_net, rad_net_av, radiation, radiation_scheme, rad_lw_in,        &
     403           rad_lw_in_av, rad_lw_out, rad_lw_out_av, rad_lw_out_change_0,       &
     404           rad_lw_cs_hr, rad_lw_cs_hr_av, rad_lw_hr, rad_lw_hr_av, rad_sw_in,  &
     405           rad_sw_in_av, rad_sw_out, rad_sw_out_av, rad_sw_cs_hr,              &
     406           rad_sw_cs_hr_av, rad_sw_hr, rad_sw_hr_av, sigma_sb,                 &
     407           skip_time_do_radiation, time_radiation, unscheduled_radiation_calls
    387408
    388409
     
    396417! Description:
    397418! ------------
     419!> Check data output for radiation model
     420!------------------------------------------------------------------------------!
     421    SUBROUTINE radiation_check_data_output( var, unit, i, ilen, k )
     422 
     423 
     424       USE control_parameters,                                                 &
     425           ONLY: data_output, message_string
     426
     427       IMPLICIT NONE
     428
     429       CHARACTER (LEN=*) ::  unit     !<
     430       CHARACTER (LEN=*) ::  var      !<
     431
     432       INTEGER(iwp) :: i
     433       INTEGER(iwp) :: ilen
     434       INTEGER(iwp) :: k
     435
     436       SELECT CASE ( TRIM( var ) )
     437
     438         CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_lw_cs_hr', 'rad_lw_hr',       &
     439                 'rad_sw_in', 'rad_sw_out', 'rad_sw_cs_hr', 'rad_sw_hr' )
     440             IF (  .NOT.  radiation  .OR.  radiation_scheme /= 'rrtmg' )  THEN
     441                message_string = '"output of "' // TRIM( var ) // '" requi' // &
     442                                 'res radiation = .TRUE. and ' //              &
     443                                 'radiation_scheme = "rrtmg"'
     444                CALL message( 'check_parameters', 'PA0406', 1, 2, 0, 6, 0 )
     445             ENDIF
     446             unit = 'W/m2'     
     447
     448          CASE ( 'rad_net*', 'rrtm_aldif*', 'rrtm_aldir*', 'rrtm_asdif*',      &
     449                 'rrtm_asdir*' )
     450             IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
     451                message_string = 'illegal value for data_output: "' //         &
     452                                 TRIM( var ) // '" & only 2d-horizontal ' //   &
     453                                 'cross sections are allowed for this value'
     454                CALL message( 'check_parameters', 'PA0111', 1, 2, 0, 6, 0 )
     455             ENDIF
     456             IF (  .NOT.  radiation  .OR.  radiation_scheme /= "rrtmg" )  THEN
     457                IF ( TRIM( var ) == 'rrtm_aldif*'  .OR.                        &
     458                     TRIM( var ) == 'rrtm_aldir*'  .OR.                        &
     459                     TRIM( var ) == 'rrtm_asdif*'  .OR.                        &
     460                     TRIM( var ) == 'rrtm_asdir*'      )                       &
     461                THEN
     462                   message_string = 'output of "' // TRIM( var ) // '" require'&
     463                                    // 's radiation = .TRUE. and radiation_sch'&
     464                                    // 'eme = "rrtmg"'
     465                   CALL message( 'check_parameters', 'PA0409', 1, 2, 0, 6, 0 )
     466                ENDIF
     467             ENDIF
     468
     469             IF ( TRIM( var ) == 'rad_net*'      ) unit = 'W/m2'   
     470             IF ( TRIM( var ) == 'rrtm_aldif*'   ) unit = ''   
     471             IF ( TRIM( var ) == 'rrtm_aldir*'   ) unit = ''
     472             IF ( TRIM( var ) == 'rrtm_asdif*'   ) unit = ''
     473             IF ( TRIM( var ) == 'rrtm_asdir*'   ) unit = ''
     474
     475          CASE DEFAULT
     476             unit = 'illegal'
     477
     478       END SELECT
     479
     480
     481    END SUBROUTINE radiation_check_data_output
     482
     483!------------------------------------------------------------------------------!
     484! Description:
     485! ------------
     486!> Check data output of profiles for radiation model
     487!------------------------------------------------------------------------------! 
     488    SUBROUTINE radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
     489 
     490       USE arrays_3d,                                                          &
     491           ONLY: zu
     492
     493       USE control_parameters,                                                 &
     494           ONLY: data_output_pr, message_string
     495
     496       USE indices
     497
     498       USE profil_parameter
     499
     500       USE statistics
     501
     502       IMPLICIT NONE
     503   
     504       CHARACTER (LEN=*) ::  unit      !<
     505       CHARACTER (LEN=*) ::  variable  !<
     506       CHARACTER (LEN=*) ::  dopr_unit !< local value of dopr_unit
     507 
     508       INTEGER(iwp) ::  user_pr_index !<
     509       INTEGER(iwp) ::  var_count     !<
     510
     511       SELECT CASE ( TRIM( variable ) )
     512       
     513         CASE ( 'rad_net' )
     514             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme == 'constant' )&
     515             THEN
     516                message_string = 'data_output_pr = ' //                        &
     517                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     518                                 'not available for radiation = .FALSE. or ' //&
     519                                 'radiation_scheme = "constant"'
     520                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     521             ELSE
     522                dopr_index(var_count) = 101
     523                dopr_unit  = 'W/m2'
     524                hom(:,2,101,:)  = SPREAD( zw, 2, statistic_regions+1 )
     525                unit = dopr_unit
     526             ENDIF
     527
     528          CASE ( 'rad_lw_in' )
     529             IF ( (  .NOT.  radiation)  .OR.  radiation_scheme == 'constant' ) &
     530             THEN
     531                message_string = 'data_output_pr = ' //                        &
     532                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     533                                 'not available for radiation = .FALSE. or ' //&
     534                                 'radiation_scheme = "constant"'
     535                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     536             ELSE
     537                dopr_index(var_count) = 102
     538                dopr_unit  = 'W/m2'
     539                hom(:,2,102,:)  = SPREAD( zw, 2, statistic_regions+1 )
     540                unit = dopr_unit
     541             ENDIF
     542
     543          CASE ( 'rad_lw_out' )
     544             IF ( (  .NOT. radiation )  .OR.  radiation_scheme == 'constant' ) &
     545             THEN
     546                message_string = 'data_output_pr = ' //                        &
     547                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     548                                 'not available for radiation = .FALSE. or ' //&
     549                                 'radiation_scheme = "constant"'
     550                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     551             ELSE
     552                dopr_index(var_count) = 103
     553                dopr_unit  = 'W/m2'
     554                hom(:,2,103,:)  = SPREAD( zw, 2, statistic_regions+1 )
     555                unit = dopr_unit   
     556             ENDIF
     557
     558          CASE ( 'rad_sw_in' )
     559             IF ( (  .NOT. radiation )  .OR.  radiation_scheme == 'constant' ) &
     560             THEN
     561                message_string = 'data_output_pr = ' //                        &
     562                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     563                                 'not available for radiation = .FALSE. or ' //&
     564                                 'radiation_scheme = "constant"'
     565                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     566             ELSE
     567                dopr_index(var_count) = 104
     568                dopr_unit  = 'W/m2'
     569                hom(:,2,104,:)  = SPREAD( zw, 2, statistic_regions+1 )
     570                unit = dopr_unit
     571             ENDIF
     572
     573          CASE ( 'rad_sw_out')
     574             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme == 'constant' )&
     575             THEN
     576                message_string = 'data_output_pr = ' //                        &
     577                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     578                                 'not available for radiation = .FALSE. or ' //&
     579                                 'radiation_scheme = "constant"'
     580                CALL message( 'check_parameters', 'PA0408', 1, 2, 0, 6, 0 )
     581             ELSE
     582                dopr_index(var_count) = 105
     583                dopr_unit  = 'W/m2'
     584                hom(:,2,105,:)  = SPREAD( zw, 2, statistic_regions+1 )
     585                unit = dopr_unit
     586             ENDIF
     587
     588          CASE ( 'rad_lw_cs_hr' )
     589             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme /= 'rrtmg' )   &
     590             THEN
     591                message_string = 'data_output_pr = ' //                        &
     592                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     593                                 'not available for radiation = .FALSE. or ' //&
     594                                 'radiation_scheme /= "rrtmg"'
     595                CALL message( 'check_parameters', 'PA0413', 1, 2, 0, 6, 0 )
     596             ELSE
     597                dopr_index(var_count) = 106
     598                dopr_unit  = 'K/h'
     599                hom(:,2,106,:)  = SPREAD( zu, 2, statistic_regions+1 )
     600                unit = dopr_unit
     601             ENDIF
     602
     603          CASE ( 'rad_lw_hr' )
     604             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme /= 'rrtmg' )   &
     605             THEN
     606                message_string = 'data_output_pr = ' //                        &
     607                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     608                                 'not available for radiation = .FALSE. or ' //&
     609                                 'radiation_scheme /= "rrtmg"'
     610                CALL message( 'check_parameters', 'PA0413', 1, 2, 0, 6, 0 )
     611             ELSE
     612                dopr_index(var_count) = 107
     613                dopr_unit  = 'K/h'
     614                hom(:,2,107,:)  = SPREAD( zu, 2, statistic_regions+1 )
     615                unit = dopr_unit
     616             ENDIF
     617
     618          CASE ( 'rad_sw_cs_hr' )
     619             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme /= 'rrtmg' )   &
     620             THEN
     621                message_string = 'data_output_pr = ' //                        &
     622                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     623                                 'not available for radiation = .FALSE. or ' //&
     624                                 'radiation_scheme /= "rrtmg"'
     625                CALL message( 'check_parameters', 'PA0413', 1, 2, 0, 6, 0 )
     626             ELSE
     627                dopr_index(var_count) = 108
     628                dopr_unit  = 'K/h'
     629                hom(:,2,108,:)  = SPREAD( zu, 2, statistic_regions+1 )
     630                unit = dopr_unit
     631             ENDIF
     632
     633          CASE ( 'rad_sw_hr' )
     634             IF ( (  .NOT.  radiation )  .OR.  radiation_scheme /= 'rrtmg' )   &
     635             THEN
     636                message_string = 'data_output_pr = ' //                        &
     637                                 TRIM( data_output_pr(var_count) ) // ' is' // &
     638                                 'not available for radiation = .FALSE. or ' //&
     639                                 'radiation_scheme /= "rrtmg"'
     640                CALL message( 'check_parameters', 'PA0413', 1, 2, 0, 6, 0 )
     641             ELSE
     642                dopr_index(var_count) = 109
     643                dopr_unit  = 'K/h'
     644                hom(:,2,109,:)  = SPREAD( zu, 2, statistic_regions+1 )
     645                unit = dopr_unit
     646             ENDIF
     647
     648
     649          CASE DEFAULT
     650             unit = 'illegal'
     651
     652       END SELECT
     653
     654
     655    END SUBROUTINE radiation_check_data_output_pr
     656 
     657 
     658!------------------------------------------------------------------------------!
     659! Description:
     660! ------------
     661!> Check parameters routine for radiation model
     662!------------------------------------------------------------------------------!
     663    SUBROUTINE radiation_check_parameters
     664
     665       USE control_parameters,                                                 &
     666           ONLY: message_string, topography
     667                 
     668   
     669       IMPLICIT NONE
     670
     671       IF ( radiation_scheme /= 'constant'   .AND.                             &
     672            radiation_scheme /= 'clear-sky'  .AND.                             &
     673            radiation_scheme /= 'rrtmg' )  THEN
     674          message_string = 'unknown radiation_scheme = '//                     &
     675                           TRIM( radiation_scheme )
     676          CALL message( 'check_parameters', 'PA0405', 1, 2, 0, 6, 0 )
     677       ELSEIF ( radiation_scheme == 'rrtmg' )  THEN
     678#if ! defined ( __rrtmg )
     679          message_string = 'radiation_scheme = "rrtmg" requires ' //           &
     680                           'compilation of PALM with pre-processor ' //        &
     681                           'directive -D__rrtmg'
     682          CALL message( 'check_parameters', 'PA0407', 1, 2, 0, 6, 0 )
     683#endif
     684#if defined ( __rrtmg ) && ! defined( __netcdf )
     685          message_string = 'radiation_scheme = "rrtmg" requires ' //           &
     686                           'the use of NetCDF (preprocessor directive ' //     &
     687                           '-D__netcdf'
     688          CALL message( 'check_parameters', 'PA0412', 1, 2, 0, 6, 0 )
     689#endif
     690
     691       ENDIF
     692
     693       IF ( albedo_type == 0  .AND.  albedo == 9999999.9_wp  .AND.             &
     694            radiation_scheme == 'clear-sky')  THEN
     695          message_string = 'radiation_scheme = "clear-sky" in combination' //  &
     696                           'with albedo_type = 0 requires setting of albedo'// &
     697                           ' /= 9999999.9'
     698          CALL message( 'check_parameters', 'PA0410', 1, 2, 0, 6, 0 )
     699       ENDIF
     700
     701       IF ( albedo_type == 0  .AND.  radiation_scheme == 'rrtmg'  .AND.        &
     702          (    albedo_lw_dif == 9999999.9_wp .OR. albedo_lw_dir == 9999999.9_wp&
     703          .OR. albedo_sw_dif == 9999999.9_wp .OR. albedo_sw_dir == 9999999.9_wp&
     704          ) ) THEN
     705          message_string = 'radiation_scheme = "rrtmg" in combination' //      &
     706                           'with albedo_type = 0 requires setting of ' //      &
     707                           'albedo_lw_dif /= 9999999.9' //                     &
     708                           'albedo_lw_dir /= 9999999.9' //                     &
     709                           'albedo_sw_dif /= 9999999.9 and' //                 &
     710                           'albedo_sw_dir /= 9999999.9'
     711          CALL message( 'check_parameters', 'PA0411', 1, 2, 0, 6, 0 )
     712       ENDIF
     713
     714       IF ( topography /= 'flat' )  THEN
     715          message_string = 'radiation scheme cannot be used ' //               &
     716                           'in combination with  topography /= "flat"'
     717          CALL message( 'check_parameters', 'PA0414', 1, 2, 0, 6, 0 )
     718       ENDIF
     719 
     720    END SUBROUTINE radiation_check_parameters
     721 
     722 
     723!------------------------------------------------------------------------------!
     724! Description:
     725! ------------
    398726!> Initialization of the radiation model
    399727!------------------------------------------------------------------------------!
    400     SUBROUTINE init_radiation
     728    SUBROUTINE radiation_init
    401729   
    402730       IMPLICIT NONE
     
    661989       RETURN
    662990
    663     END SUBROUTINE init_radiation
     991    END SUBROUTINE radiation_init
    664992
    665993
     
    7191047
    7201048    END SUBROUTINE radiation_clearsky
     1049
     1050
     1051!------------------------------------------------------------------------------!
     1052! Description:
     1053! ------------
     1054!> Header output for radiation model
     1055!------------------------------------------------------------------------------!
     1056    SUBROUTINE radiation_header ( io )
     1057
     1058
     1059       IMPLICIT NONE
     1060 
     1061       INTEGER(iwp), INTENT(IN) ::  io            !< Unit of the output file
     1062   
     1063
     1064       
     1065!
     1066!--    Write radiation model header
     1067       WRITE( io, 3 )
     1068
     1069       IF ( radiation_scheme == "constant" )  THEN
     1070          WRITE( io, 4 ) net_radiation
     1071       ELSEIF ( radiation_scheme == "clear-sky" )  THEN
     1072          WRITE( io, 5 )
     1073       ELSEIF ( radiation_scheme == "rrtmg" )  THEN
     1074          WRITE( io, 6 )
     1075          IF ( .NOT. lw_radiation )  WRITE( io, 10 )
     1076          IF ( .NOT. sw_radiation )  WRITE( io, 11 )
     1077       ENDIF
     1078
     1079       IF ( albedo_type == 0 )  THEN
     1080          WRITE( io, 7 ) albedo
     1081       ELSE
     1082          WRITE( io, 8 ) TRIM( albedo_type_name(albedo_type) )
     1083       ENDIF
     1084       IF ( constant_albedo )  THEN
     1085          WRITE( io, 9 )
     1086       ENDIF
     1087       
     1088       IF ( radiation .AND. radiation_scheme /= 'constant' )  THEN
     1089          WRITE ( io, 1 )  lambda
     1090          WRITE ( io, 2 )  day_init, time_utc_init
     1091       ENDIF
     1092
     1093       WRITE( io, 12 ) dt_radiation
     1094 
     1095
     1096 1 FORMAT ('    Geograph. longitude            :   lambda = ',F4.1,' degr')
     1097 2 FORMAT ('    Day of the year at model start :   day_init = ',I3   &
     1098            /'    UTC time at model start        :   time_utc_init = ',F7.1' s')
     1099 3 FORMAT (//' Radiation model information:'/                                  &
     1100              ' ----------------------------'/)
     1101 4 FORMAT ('    --> Using constant net radiation: net_radiation = ', F6.2,        &
     1102           // 'W/m**2')
     1103 5 FORMAT ('    --> Simple radiation scheme for clear sky is used (no clouds,',   &
     1104                   ' default)')
     1105 6 FORMAT ('    --> RRTMG scheme is used')
     1106 7 FORMAT (/'    User-specific surface albedo: albedo =', F6.3)
     1107 8 FORMAT (/'    Albedo is set for land surface type: ', A)
     1108 9 FORMAT (/'    --> Albedo is fixed during the run')
     110910 FORMAT (/'    --> Longwave radiation is disabled')
     111011 FORMAT (/'    --> Shortwave radiation is disabled.')
     111112 FORMAT  ('    Timestep: dt_radiation = ', F6.2, '  s')
     1112
     1113
     1114    END SUBROUTINE radiation_header
     1115   
     1116
     1117!------------------------------------------------------------------------------!
     1118! Description:
     1119! ------------
     1120!> Parin for &radiation_par for radiation model
     1121!------------------------------------------------------------------------------!
     1122    SUBROUTINE radiation_parin
     1123
     1124
     1125       IMPLICIT NONE
     1126
     1127       CHARACTER (LEN=80) ::  line  !< dummy string that contains the current line of the parameter file
     1128       
     1129       NAMELIST /radiation_par/   albedo, albedo_type, albedo_lw_dir,          &
     1130                                  albedo_lw_dif, albedo_sw_dir, albedo_sw_dif, &
     1131                                  constant_albedo, day_init, dt_radiation,     &
     1132                                  lambda, lw_radiation, net_radiation,         &
     1133                                  radiation_scheme, skip_time_do_radiation,    &
     1134                                  sw_radiation, time_utc_init,                 &
     1135                                  unscheduled_radiation_calls
     1136       
     1137       line = ' '
     1138       
     1139!
     1140!--    Try to find radiation model package
     1141       REWIND ( 11 )
     1142       line = ' '
     1143       DO   WHILE ( INDEX( line, '&radiation_par' ) == 0 )
     1144          READ ( 11, '(A)', END=10 )  line
     1145       ENDDO
     1146       BACKSPACE ( 11 )
     1147
     1148!
     1149!--    Read user-defined namelist
     1150       READ ( 11, radiation_par )
     1151
     1152!
     1153!--    Set flag that indicates that the radiation model is switched on
     1154       radiation = .TRUE.
     1155
     1156 10    CONTINUE
     1157       
     1158
     1159    END SUBROUTINE radiation_parin
    7211160
    7221161
     
    16082047    END SUBROUTINE read_trace_gas_data
    16092048
     2049
    16102050    SUBROUTINE netcdf_handle_error_rad( routine_name, errno )
    16112051
Note: See TracChangeset for help on using the changeset viewer.