diff --git a/components/buoyancy/src/buoyancy.F90 b/components/buoyancy/src/buoyancy.F90 index 5bb1ec9f..5630e3ff 100644 --- a/components/buoyancy/src/buoyancy.F90 +++ b/components/buoyancy/src/buoyancy.F90 @@ -29,8 +29,6 @@ module buoyancy_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tend_pr_tot_w logical :: l_tend_pr_tot_w - integer :: diagnostic_generation_frequency - public buoyancy_get_descriptor contains @@ -170,9 +168,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_w(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -197,6 +192,10 @@ subroutine timestep_callback(current_state) integer :: k, n integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -210,10 +209,8 @@ subroutine timestep_callback(current_state) endif endif ! zero totals - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if - + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) #ifdef W_ACTIVE if (.not. current_state%passive_th .and. current_state%th%active) then @@ -252,9 +249,8 @@ subroutine timestep_callback(current_state) end if #endif - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/casim/src/casim.F90 b/components/casim/src/casim.F90 index efa9e572..0358ed39 100644 --- a/components/casim/src/casim.F90 +++ b/components/casim/src/casim.F90 @@ -15,6 +15,7 @@ module casim_mod ! casim modules... use variable_precision, ONLY: wp use initialize, only: mphys_init + use mphys_parameters, only: cloud_params use mphys_switches, only: set_mphys_switches, & l_warm, & nq_l, nq_r, nq_i, nq_s, nq_g, & @@ -74,7 +75,19 @@ module casim_mod , l_pssub & ! sublimation of snow , l_pgsub & ! sublimation of graupel , l_pisub & ! sublimation of ice - , l_pimlt ! ice melting + , l_pimlt & ! ice melting + ! New switches for sedimentation (these are sort-of temporary) + , l_gamma_online & ! when true use standard vn0.3.3 sed, when false use precalced gamma + , l_subseds_maxv & ! Use a CFL criteria based on max terminal velocity + ! and sed_1M_2M + , l_sed_eulexp & ! switch for eulexp sed based on UM. Default is false + ! so standard casim sed used + , cfl_vt_max & ! cfl limit for sedimentation (default = 1.0) + , l_kfsm & ! single moment based on wilson-ballard + , l_adjust_D0 + + use mphys_constants, only: fixed_cloud_number ! number/m**3, overrides mphys_constants value + use micro_main, only: shipway_microphysics use generic_diagnostic_variables, ONLY: casdiags, allocate_diagnostic_space, & @@ -93,7 +106,12 @@ module casim_mod , nc(:,:,:), qr(:,:,:), nr(:,:,:), m3r(:,:,:),rho(:,:,:) & , exner(:,:,:), w(:,:,:), tke(:,:,:) & , qi(:,:,:), ni(:,:,:), qs(:,:,:), ns(:,:,:), m3s(:,:,:) & - , qg(:,:,:), ng(:,:,:), m3g(:,:,:) + , qg(:,:,:), ng(:,:,:), m3g(:,:,:) + ! declare a fraction for each hydrometeor category. All fractions are + ! initialised set to 1 if cloud is present, since MONC does not include + ! subgrid cloud fraction scheme (yet!) + REAL(wp), allocatable :: cfliq(:,:,:), cfice(:,:,:) & + , cfsnow(:,:,:), cfrain(:,:,:), cfgr(:,:,:) REAL(wp), allocatable :: AccumSolMass(:,:,:), AccumSolNumber(:,:,:) ! Accumulation mode aerosol REAL(wp), allocatable :: ActiveSolLiquid(:,:,:) ! Activated aerosol @@ -138,6 +156,8 @@ module casim_mod REAL(wp), allocatable :: dActiveInsolNumber(:,:,:) ! Activated insoluble number (if we need a tracer) REAL(wp), allocatable :: surface_precip(:,:) + REAL(wp), allocatable :: surface_cloudsed(:,:) + REAL(wp), allocatable :: surface_rainsed(:,:) INTEGER :: ils,ile, jls,jle, kls,kle, & its,ite, jts,jte, kts,kte @@ -187,7 +207,7 @@ type(component_descriptor_type) function casim_get_descriptor() casim_get_descriptor%field_value_retrieval=>field_value_retrieval_callback casim_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(casim_get_descriptor%published_fields(27)) + allocate(casim_get_descriptor%published_fields(29)) casim_get_descriptor%published_fields(1)="surface_precip" casim_get_descriptor%published_fields(2)="homogeneous_freezing_rate" @@ -216,6 +236,8 @@ type(component_descriptor_type) function casim_get_descriptor() casim_get_descriptor%published_fields(25)="graup_sed_rate" casim_get_descriptor%published_fields(26)="cloud_sed_rate" casim_get_descriptor%published_fields(27)="condensation_rate" + casim_get_descriptor%published_fields(28)="surface_cloudsed" + casim_get_descriptor%published_fields(29)="surface_rainsed" end function casim_get_descriptor @@ -277,6 +299,11 @@ subroutine initialisation_callback(current_state) allocate(qg(kte,1,1)) allocate(ng(kte,1,1)) allocate(m3g(kte,1,1)) + allocate(cfliq(kte,1,1)) + allocate(cfice(kte,1,1)) + allocate(cfsnow(kte,1,1)) + allocate(cfrain(kte,1,1)) + allocate(cfgr(kte,1,1)) allocate(AccumSolMass(kte,1,1)) allocate(AccumSolNumber(kte,1,1)) @@ -380,12 +407,27 @@ subroutine initialisation_callback(current_state) end if ! Number - if (l_2mc)inl = get_q_index(standard_q_names%CLOUD_LIQUID_NUMBER, 'casim') - if (l_2mr)inr = get_q_index(standard_q_names%RAIN_NUMBER, 'casim') + if (l_2mc) then + inl = get_q_index(standard_q_names%CLOUD_LIQUID_NUMBER, 'casim') + current_state%liquid_water_nc_index=inl + endif + if (l_2mr) then + inr = get_q_index(standard_q_names%RAIN_NUMBER, 'casim') + current_state%rain_water_nc_index = inr + endif if (.not. l_warm)then - if (l_2mi)ini = get_q_index(standard_q_names%ICE_NUMBER, 'casim') - if (l_2ms)ins = get_q_index(standard_q_names%SNOW_NUMBER, 'casim') - if (l_2mg)ing = get_q_index(standard_q_names%GRAUPEL_NUMBER, 'casim') + if (l_2mi) then + ini = get_q_index(standard_q_names%ICE_NUMBER, 'casim') + current_state%ice_water_nc_index=ini + endif + if (l_2ms) then + ins = get_q_index(standard_q_names%SNOW_NUMBER, 'casim') + current_state%snow_water_nc_index=ins + endif + if (l_2mg) then + ing = get_q_index(standard_q_names%GRAUPEL_NUMBER, 'casim') + current_state%graupel_water_nc_index = ing + endif end if ! Third moments @@ -440,6 +482,7 @@ subroutine initialisation_callback(current_state) if ( l_psedl ) then casdiags % l_psedl = .TRUE. casdiags % l_surface_rain = .TRUE. + casdiags % l_surface_cloud = .TRUE. casdiags % l_precip = .TRUE. endif if ( l_praut ) casdiags % l_praut = .TRUE. @@ -492,6 +535,8 @@ subroutine initialisation_callback(current_state) CALL allocate_diagnostic_space(its, ite, jts, jte, kts, kte) ! this is no longer needed since can use cas_monc_dgs structure but keep for now allocate(surface_precip(y_size_local, x_size_local)) + allocate(surface_cloudsed(y_size_local, x_size_local)) + allocate(surface_rainsed(y_size_local, x_size_local)) ! allocate diagnostic space for MONC fields to export to IO server call allocate_casim_monc_dgs_space(current_state, casdiags) @@ -515,7 +560,11 @@ subroutine timestep_callback(current_state) ! pcond_tot(:)= 0.0_DEFAULT_PRECISION !endif - if (current_state%halo_column .or. current_state%timestep < 2) return + + ! No need to do casim calculations in the halos or on the first timestep + ! unless this is a reconfiguration run + if (current_state%halo_column .or. & + (current_state%timestep < 2 .and. (.not. current_state%reconfig_run)) ) return if (current_state%field_stepping == FORWARD_STEPPING)then call log_master_log(LOG_ERROR, 'Currently, CASIM assumes CENTERED_STEPPING') @@ -576,16 +625,24 @@ subroutine timestep_callback(current_state) qv(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqv(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfliq(:,1,1) = 1.0_wp + cfice(:,1,1) = 1.0_wp + cfsnow(:,1,1) = 1.0_wp + cfrain(:,1,1) = 1.0_wp + cfgr(:,1,1) = 1.0_wp + ! Warm microphysical fields IF (nq_l > 0)then iqx = iql qc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfliq(:,1,1) = 1.0 end IF IF (nq_r > 0)then iqx = iqr qr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfrain(:,1,1) = 1.0 end IF IF (nq_l > 1)then iqx = inl @@ -608,16 +665,19 @@ subroutine timestep_callback(current_state) iqx = iqi qi(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqi(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfice(:,1,1) = 1.0 end IF IF (nq_s > 0)then iqx = iqs qs(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqs(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfsnow(:,1,1) = 1.0 end IF IF (nq_g > 0)then iqx = iqg qg(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol) dqg(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol) + cfgr(:,1,1) = 1.0 end IF IF (nq_i > 1)then iqx = ini @@ -712,7 +772,7 @@ subroutine timestep_callback(current_state) pressure, rho, & w, tke, & z_half, z_centre, & - dz, & + dz, cfliq, cfice, cfsnow, cfrain, cfgr, & ! in/out dqv, dqc, dqr, dnc, dnr, dm3r, & dqi, dqs, dqg, dni, dns, dng, dm3s, dm3g, & @@ -731,9 +791,7 @@ subroutine timestep_callback(current_state) dActiveSolNumber, & dActiveInsolNumber, & ils, ile, & - jls, jle, & - kls, kle, & - l_tendency=.TRUE. & + jls, jle & ) ! write back the tendencies @@ -838,9 +896,14 @@ subroutine timestep_callback(current_state) ! and surface ! snow rate (precip_s), which is the sum of ice, snow and graupel (See micromain.F90 in casim for ! calculation). - if (l_warm) then + if (l_warm .or. .not. casdiags % l_surface_snow ) then surface_precip(target_y_index,target_x_index) = & casdiags % SurfaceRainR(1,1) + surface_cloudsed(target_y_index,target_x_index) = & + casdiags % SurfaceCloudR(1,1) + surface_rainsed(target_y_index,target_x_index) = & + casdiags % SurfaceRainR(1,1) - casdiags % SurfaceCloudR(1,1) + else surface_precip(target_y_index,target_x_index) = & casdiags % SurfaceRainR(1,1) + casdiags % SurfaceSnowR(1,1) @@ -877,7 +940,7 @@ subroutine read_configuration(current_state) sp2 = options_get_real(current_state%options_database, 'sp2') sp3 = options_get_real(current_state%options_database, 'sp3') max_mu = options_get_real(current_state%options_database, 'max_mu') - fix_mu = options_get_real(current_state%options_database, 'fix_mu') + cloud_params%fix_mu = options_get_real(current_state%options_database, 'fix_mu') l_aaut = options_get_logical(current_state%options_database, 'l_aaut') l_aacc = options_get_logical(current_state%options_database, 'l_aacc') @@ -947,6 +1010,13 @@ subroutine read_configuration(current_state) l_pgsub = options_get_logical(current_state%options_database, 'l_pgsub') l_pisub = options_get_logical(current_state%options_database, 'l_pisub') l_pimlt = options_get_logical(current_state%options_database, 'l_pimlt') + l_gamma_online = options_get_logical(current_state%options_database, 'l_gamma_online') + l_subseds_maxv = options_get_logical(current_state%options_database, 'l_subseds_maxv') + l_sed_eulexp = options_get_logical(current_state%options_database, 'l_sed_eulexp') + cfl_vt_max = options_get_real(current_state%options_database, 'cfl_vt_max') + l_kfsm = options_get_logical(current_state%options_database, 'l_kfsm') + l_adjust_D0 = options_get_logical(current_state%options_database, 'l_adjust_D0') + fixed_cloud_number = options_get_real(current_state%options_database, 'fixed_cloud_number') end subroutine read_configuration @@ -957,7 +1027,8 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE - if (name .eq. "surface_precip") then + if (name .eq. "surface_precip" .or. name .eq. "surface_cloudsed" .or. & + name .eq. "surface_rainsed") then field_information%number_dimensions=2 field_information%dimension_sizes(1)=current_state%local_grid%size(Y_INDEX) field_information%dimension_sizes(2)=current_state%local_grid%size(X_INDEX) @@ -990,6 +1061,14 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & current_state%local_grid%size(X_INDEX))) field_value%real_2d_array(:,:)= surface_precip(:,:) + else if (name .eq. "surface_cloudsed") then + allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & + current_state%local_grid%size(X_INDEX))) + field_value%real_2d_array(:,:)= surface_cloudsed(:,:) + else if (name .eq. "surface_rainsed") then + allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & + current_state%local_grid%size(X_INDEX))) + field_value%real_2d_array(:,:)= surface_rainsed(:,:) else if (name .eq. "condensation_rate") then allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & current_state%local_grid%size(Y_INDEX), & diff --git a/components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 b/components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 index a1e330c4..bc46fdd0 100644 --- a/components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 +++ b/components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 @@ -22,6 +22,7 @@ module casim_monc_dgs_space !-------------------------------- ! Surface Precipitation rates REAL, ALLOCATABLE :: precip(:,:) + REAL, ALLOCATABLE :: SurfaceCloudR(:,:) REAL, ALLOCATABLE :: SurfaceRainR(:,:) REAL, ALLOCATABLE :: SurfaceSnowR(:,:) REAL, ALLOCATABLE :: SurfaceGraupR(:,:) @@ -98,6 +99,11 @@ subroutine allocate_casim_monc_dgs_space(current_state, casdiags) casim_monc_dgs % precip(:,:) = 0.0_DEFAULT_PRECISION endif + if ( casdiags % l_surface_cloud ) then + allocate ( casim_monc_dgs % SurfaceCloudR(y_size_local, x_size_local) ) + casim_monc_dgs % SurfaceCloudR(:, :) = 0.0_DEFAULT_PRECISION + endif + if ( casdiags % l_surface_rain ) then allocate ( casim_monc_dgs % SurfaceRainR(y_size_local, x_size_local) ) casim_monc_dgs % SurfaceRainR(:, :) = 0.0_DEFAULT_PRECISION @@ -314,6 +320,10 @@ subroutine populate_casim_monc_dg(current_state, casdiags ) casim_monc_dgs % SurfaceRainR(target_y_index,target_x_index) = & casdiags % SurfaceRainR(1,1) + if ( casdiags % l_surface_cloud ) & + casim_monc_dgs % SurfaceCloudR(target_y_index,target_x_index) = & + casdiags % SurfaceCloudR(1,1) + if ( casdiags % l_pcond ) & casim_monc_dgs % pcond(:,target_y_index,target_x_index) = & casdiags % pcond(1,1,:) @@ -354,9 +364,12 @@ subroutine populate_casim_monc_dg(current_state, casdiags ) casdiags % dqr(1,1,:) if (.not. l_warm) then - if ( casdiags % l_precip ) & - casim_monc_dgs % precip(target_y_index,target_x_index) = & + if ( casdiags % l_precip .and. casdiags % l_surface_snow ) & + casim_monc_dgs % precip(target_y_index,target_x_index) = & casdiags % SurfaceRainR(1,1) + casdiags % SurfaceSnowR(1,1) + if ( casdiags % l_precip .and. .not. casdiags % l_surface_snow ) & + casim_monc_dgs % precip(target_y_index,target_x_index) = & + casdiags % SurfaceRainR(1,1) if ( casdiags % l_surface_snow ) & casim_monc_dgs % SurfaceSnowR(target_y_index,target_x_index) = & casdiags % SurfaceSnowR(1,1) @@ -365,7 +378,7 @@ subroutine populate_casim_monc_dg(current_state, casdiags ) casdiags % SurfaceGraupR(1,1) if ( casdiags % l_phomc ) & casim_monc_dgs % phomc(:,target_y_index,target_x_index) = & - casdiags % psedr(1,1,:) + casdiags % phomc(1,1,:) if ( casdiags % l_pinuc ) & casim_monc_dgs % pinuc(:,target_y_index,target_x_index) = & casdiags % pinuc(1,1,:) diff --git a/components/casim/src/um_modules_core/lsp_sedim_eulexp.F90 b/components/casim/src/um_modules_core/lsp_sedim_eulexp.F90 new file mode 100644 index 00000000..9d2fd30c --- /dev/null +++ b/components/casim/src/um_modules_core/lsp_sedim_eulexp.F90 @@ -0,0 +1,96 @@ +! *****************************COPYRIGHT******************************* +! (C) Crown copyright Met Office. All rights reserved. +! For further details please refer to the file COPYRIGHT.txt +! which you should have received as part of this distribution. +! *****************************COPYRIGHT******************************* +! Microphysics hydrometeor Eulerian sedimentation scheme +MODULE lsp_sedim_eulexp_mod + +IMPLICIT NONE + +CHARACTER(LEN=*), PARAMETER, PRIVATE :: ModuleName='LSP_SEDIM_EULEXP_MOD' + +CONTAINS + +SUBROUTINE lsp_sedim_eulexp( & + points,m0,dhi,dhir,rho,rhor, & + flux_fromabove, fallspeed_thislayer, & + mixratio_thislayer, fallspeed_fromabove, & + total_flux_out) + +!USE lsprec_mod, ONLY: zero, one + +! Use in KIND for large scale precip, used for compressed variables passed down +! from here +!USE um_types, ONLY: real_lsprec + +use variable_precision, only: wp, iwp, defp + +USE yomhook, ONLY: lhook, dr_hook +USE parkind1, ONLY: jprb, jpim +IMPLICIT NONE + +! Description: +! Dummy replacement for lsp_sedim_eulexp, to permit compile of +! CASIM sedimentation in MONC. + +! Method: +! Based on method described in Rotstayn (1997)(QJRMS, 123, 1227-1282) +! +! Code Owner: Please refer to the UM file CodeOwners.txt + +! Subroutine arguments + + ! Intent (In) +INTEGER :: points ! number of points to process + +REAL (KIND=wp) :: & + m0, & + ! Small mass (kg/kg) defined in c_lspmic + dhi(points), & + ! CFL limit (s m-1) + dhir(points), & + ! 1.0/DHI (m s-1) + rho(points), & + ! Air density (kg m-3) + rhor(points), & + ! 1.0/Rho + flux_fromabove(points), & + fallspeed_thislayer(points) + + ! Intent (InOut) +REAL (KIND=wp) :: & + mixratio_thislayer(points), & + fallspeed_fromabove(points) + + ! Intent (Out) +REAL (KIND=wp) :: & + total_flux_out(points) + +! Local variables + +REAL (KIND=wp) :: & + mixratio_fromabove, & + ! Mixing Ratio from above + flux_out, & + ! Temporary flux out of layer + expfactor ! Exponential Factor + +INTEGER :: i ! Loop counter + +INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0 +INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1 +REAL(KIND=jprb) :: zhook_handle + +CHARACTER(LEN=*), PARAMETER :: RoutineName='LSP_SEDIM_EULEXP' + + +!----------------------------------------------------------------------- + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_in,zhook_handle) + + +IF (lhook) CALL dr_hook(ModuleName//':'//RoutineName,zhook_out,zhook_handle) +RETURN +END SUBROUTINE lsp_sedim_eulexp +END MODULE lsp_sedim_eulexp_mod diff --git a/components/casim/src/um_modules_core/um_types.F90 b/components/casim/src/um_modules_core/um_types.F90 new file mode 100644 index 00000000..84e36c66 --- /dev/null +++ b/components/casim/src/um_modules_core/um_types.F90 @@ -0,0 +1,25 @@ +! *****************************COPYRIGHT******************************* +! (C) Crown copyright Met Office. All rights reserved. +! For further details please refer to the file COPYRIGHT.txt +! which you should have received as part of this distribution. +! *****************************COPYRIGHT******************************* + +! Dummy version of um_types so CASIM will build in both MONC and UM +! lsp_sed_eulexp (from the UM) requires the precision to be set using +! real_lsprec. In the UM and rose-stem, this can be either single +! or double. The following code ensures CASIM will build in MONC with +! lsp_sed_eulexp call and single precision microphysics +! + +MODULE um_types + +use variable_precision, only: wp + +IMPLICIT NONE + +!Large scale precipitation scheme +INTEGER, PARAMETER :: real_lsprec = wp + + +END MODULE um_types + diff --git a/components/casim_profile_dgs/src/casim_profile_dgs.F90 b/components/casim_profile_dgs/src/casim_profile_dgs.F90 index 264a909a..047ce2ce 100644 --- a/components/casim_profile_dgs/src/casim_profile_dgs.F90 +++ b/components/casim_profile_dgs/src/casim_profile_dgs.F90 @@ -109,7 +109,7 @@ subroutine initialisation_callback(current_state) dqv_cond_evap_tot(current_state%local_grid%size(Z_INDEX)), & dqc_mphys_tot(current_state%local_grid%size(Z_INDEX)), & dqr_mphys_tot(current_state%local_grid%size(Z_INDEX))) - if (.not. l_warm) then + !if (.not. l_warm) then allocate(phomc_tot(current_state%local_grid%size(Z_INDEX)), & pinuc_tot(current_state%local_grid%size(Z_INDEX)), & pidep_tot(current_state%local_grid%size(Z_INDEX)), & @@ -133,7 +133,7 @@ subroutine initialisation_callback(current_state) dqi_mphys_tot(current_state%local_grid%size(Z_INDEX)), & dqs_mphys_tot(current_state%local_grid%size(Z_INDEX)), & dqg_mphys_tot(current_state%local_grid%size(Z_INDEX))) - endif + !endif end subroutine initialisation_callback @@ -161,7 +161,7 @@ subroutine timestep_callback(current_state) dqv_cond_evap_tot(:)= 0.0_DEFAULT_PRECISION dqc_mphys_tot(:)= 0.0_DEFAULT_PRECISION dqr_mphys_tot(:)= 0.0_DEFAULT_PRECISION - if (.not. l_warm) then + !if (.not. l_warm) then phomc_tot(:)= 0.0_DEFAULT_PRECISION pinuc_tot(:)= 0.0_DEFAULT_PRECISION pidep_tot(:)= 0.0_DEFAULT_PRECISION @@ -185,7 +185,7 @@ subroutine timestep_callback(current_state) dqi_mphys_tot(:)= 0.0_DEFAULT_PRECISION dqs_mphys_tot(:)= 0.0_DEFAULT_PRECISION dqg_mphys_tot(:)= 0.0_DEFAULT_PRECISION - endif + !endif endif if (.not. current_state%halo_column) then diff --git a/components/cfltest/src/cfltest.F90 b/components/cfltest/src/cfltest.F90 index afa2288b..fb4934da 100644 --- a/components/cfltest/src/cfltest.F90 +++ b/components/cfltest/src/cfltest.F90 @@ -8,7 +8,8 @@ module cfltest_mod use state_mod, only : model_state_type, parallel_state_type use collections_mod, only : map_type use logging_mod, only : LOG_WARN, LOG_DEBUG, LOG_ERROR, LOG_INFO, & - log_log, log_get_logging_level, log_newline + log_log, log_get_logging_level, log_master_newline, & + log_master_log use conversions_mod, only : conv_to_string use optionsdatabase_mod, only : options_get_integer, options_get_real, options_get_logical use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX @@ -21,7 +22,8 @@ module cfltest_mod !! Configuration options - all are optional and have default values real(kind=DEFAULT_PRECISION) :: tollerance, cvismax, cvelmax, dtmmax, dtmmin, rincmax - logical l_monitor_cfl + logical l_monitor_cfl, l_constant_dtm + integer :: compare_timestep ! timestep adusted in the case of reconfiguration to keep same cfl interval public cfltest_get_descriptor contains @@ -49,43 +51,73 @@ subroutine initialisation_callback(current_state) rincmax=options_get_real(current_state%options_database, "cfl_rincmax") l_monitor_cfl = options_get_logical(current_state%options_database,"cfl_monitor") + l_constant_dtm = options_get_logical(current_state%options_database,"l_constant_dtm") allocate(current_state%abswmax(current_state%local_grid%local_domain_end_index(Z_INDEX))) end subroutine initialisation_callback - !> Called at each timestep, this will only do the CFL computation every nncfl timesteps (or every timestep up to nncfl) but - !! will ratchet up to the absolute (target) dtm as needed. + !> Called at each timestep, this will only do the CFL computation every nncfl timesteps + !! (or every timestep up to nncfl) but will ratchet up to the absolute (target) dtm as needed. !! @param current_state The current model state subroutine timestep_callback(current_state) type(model_state_type), intent(inout), target :: current_state real(kind=DEFAULT_PRECISION) :: cfl_number - if (mod(current_state%timestep, current_state%cfl_frequency) == 1 .or. & - current_state%timestep-current_state%start_timestep .le. current_state%cfl_frequency) then + compare_timestep = current_state%timestep + current_state%reconfig_timestep_offset + + ! Default position: no dtm change + current_state%update_dtm=.false. + + ! Perform CFL check at certain points in time (intervals, early steps, and if interval passed). + if ((mod(compare_timestep, current_state%cfl_frequency) == 1 & + .or. compare_timestep - current_state%start_timestep .le. current_state%cfl_frequency) & + .or. compare_timestep .ge. (current_state%last_cfl_timestep + current_state%cfl_frequency)) then + + current_state%last_cfl_timestep = compare_timestep current_state%cvel=0.0_DEFAULT_PRECISION current_state%cvel_x=0.0_DEFAULT_PRECISION current_state%cvel_y=0.0_DEFAULT_PRECISION current_state%cvel_z=0.0_DEFAULT_PRECISION - + call perform_cfl_and_galilean_transformation_calculation(current_state) - - current_state%cvel=(current_state%cvel_x*current_state%global_grid%configuration%horizontal%cx+current_state%cvel_y*& - current_state%global_grid%configuration%horizontal%cy+current_state%cvel_z)*current_state%dtm + + current_state%cvel = & + (current_state%cvel_x*current_state%global_grid%configuration%horizontal%cx & + +current_state%cvel_y*current_state%global_grid%configuration%horizontal%cy & + +current_state%cvel_z) * current_state%dtm current_state%cvis=current_state%cvis*(current_state%dtm * 4) - + cfl_number=current_state%cvis/cvismax+current_state%cvel/cvelmax - + current_state%absolute_new_dtm=current_state%dtm - current_state%update_dtm=.false. if (cfl_number .gt. 0.0_DEFAULT_PRECISION) then - if (cfl_number .lt. (1.0_DEFAULT_PRECISION-tollerance) .or. cfl_number .gt. (1.0_DEFAULT_PRECISION+tollerance)) then + if (cfl_number .lt. (1.0_DEFAULT_PRECISION-tollerance) .or. & + cfl_number .gt. (1.0_DEFAULT_PRECISION+tollerance)) then current_state%absolute_new_dtm=current_state%dtm/cfl_number end if end if - end if - call update_dtm_based_on_absolute(current_state, cfl_number) + end if ! evaluate the cfl + + + ! On normal_step, allow ratcheting or cfl reduction. + ! Otherwise, no not permit dtm change unless necessary. + if (current_state%normal_step) then + call update_dtm_based_on_absolute(current_state, cfl_number) + ! check for need to reduce dtm to match sample or output time + if (current_state%time_basis .or. current_state%force_output_on_interval) & + call evaluate_time_basis(current_state) + else ! make no updates due to dtm lock unless needed because of suggested reduction + ! from above cfl check when using force_output_on_interval because locks might be long. + if ( current_state%force_output_on_interval .and. & + current_state%absolute_new_dtm .lt. current_state%dtm) then + call update_dtm_based_on_absolute(current_state, cfl_number) + call evaluate_time_basis(current_state) + end if + end if ! end check normal_step + current_state%cvis=0.0_DEFAULT_PRECISION + end subroutine timestep_callback !> Updates the (new) dtm value, which is actioned after time step completion, based upon the absolute value. This is incremented @@ -103,32 +135,46 @@ subroutine update_dtm_based_on_absolute(current_state, cfl_number) current_state%dtm_new=min(current_state%dtm*(1.0_DEFAULT_PRECISION+rincmax), current_state%absolute_new_dtm, dtmmax) - !! --- Diagnostic Writing ----------------- - if (current_state%parallel%my_rank==0) then - if (log_get_logging_level() .eq. LOG_DEBUG) then - call log_log(LOG_DEBUG, "dtm changed from "//trim(conv_to_string(current_state%dtm, 5))//" to "//& - trim(conv_to_string(current_state%dtm_new, 5))) + if (l_monitor_cfl) then + call log_master_log(LOG_INFO, " --- CFL Monitoring Information --- "//trim(conv_to_string(current_state%timestep))) + if (l_constant_dtm) & + call log_master_log(LOG_INFO, " *** l_constant_dtm=.true. - NOT CHANGING ***") + call log_master_log(LOG_INFO, "dtm changed from "//trim(conv_to_string(current_state%dtm, 5))& + //" to "//trim(conv_to_string(current_state%dtm_new, 5))) + if (cfl_number .gt. 0.0) then + call log_master_log(LOG_INFO, "cfl_number : "//trim(conv_to_string(cfl_number))//" (change divisor)") + call log_master_log(LOG_INFO, "cvis : "//trim(conv_to_string(current_state%cvis)) ) + call log_master_log(LOG_INFO, "cvel : "//trim(conv_to_string(current_state%cvel))) + else + call log_master_log(LOG_INFO, "dtm change due to ratcheting only. Target dtm unchanged.") end if - if (current_state%dtm_new .lt. dtmmin) then - call log_log(LOG_ERROR, "Timestep too small, dtmnew="//trim(conv_to_string(current_state%dtm_new, 5))//& - " dtmmin="//trim(conv_to_string(dtmmin, 5))) - end if - if (l_monitor_cfl) then - call log_log(LOG_INFO, " --- CFL Monitoring Information --- ") - call log_log(LOG_INFO, "dtm changed from "//trim(conv_to_string(current_state%dtm, 5))//" to "//& - trim(conv_to_string(current_state%dtm_new, 5))) - if (cfl_number .gt. 0.0) then - call log_log(LOG_INFO, "cfl_number : "//trim(conv_to_string(cfl_number))//" (change divisor)") - call log_log(LOG_INFO, "cvis : "//trim(conv_to_string(current_state%cvis)) ) - call log_log(LOG_INFO, "cvel : "//trim(conv_to_string(current_state%cvel)) ) - else - call log_log(LOG_INFO, "dtm change due to ratcheting only. Target dtm unchanged.") - end if - call log_log(LOG_INFO, "target dtm : "//trim(conv_to_string(current_state%absolute_new_dtm)) ) - call log_newline() - - end if ! l_monitor_cfl - end if ! Diagnostic Writing + call log_master_log(LOG_INFO, "target dtm : "//trim(conv_to_string(current_state%absolute_new_dtm)) ) + call log_master_newline() + end if ! l_monitor_cfl + + + !! --- Diagnostic Writing ----------------- + call log_master_log(LOG_DEBUG, "dtm changed from "//trim(conv_to_string(current_state%dtm, 5))//" to "//& + trim(conv_to_string(current_state%dtm_new, 5))) + + if (current_state%dtm_new .lt. dtmmin .and. .not. l_constant_dtm) then + call log_master_log(LOG_ERROR, "Timestep too small, dtmnew="//& + trim(conv_to_string(current_state%dtm_new, 5))//& + ", dtmmin="//trim(conv_to_string(dtmmin, 5))) + end if + + if (current_state%dtm_new .lt. current_state%dtm .and. l_constant_dtm) then + call log_master_log(LOG_WARN, "The CFL check would like to reduce the model timestep "//& + "to a value below the specified constant dtm: dtmnew="//& + trim(conv_to_string(current_state%dtm_new, 5))//& + ", constant dtm="//trim(conv_to_string(current_state%dtm, 5))) + end if + end if + + if (l_constant_dtm) then + current_state%dtm = options_get_real(current_state%options_database, "dtm") + current_state%dtm_new = current_state%dtm + current_state%update_dtm=.false. end if end subroutine update_dtm_based_on_absolute @@ -212,4 +258,86 @@ subroutine get_global_values(local_zumin, local_zumax, local_zvmin, local_zvmax, call mpi_allreduce(local_zumin, global_zumin, 1, PRECISION_TYPE, MPI_MIN, parallel_state%monc_communicator, ierr) call mpi_allreduce(local_zvmin, global_zvmin, 1, PRECISION_TYPE, MPI_MIN, parallel_state%monc_communicator, ierr) end subroutine get_global_values + + + !> Handle timestep adjustment for time_basis=.true. + !! @param current_state The current model state + subroutine evaluate_time_basis(current_state) + type(model_state_type), intent(inout), target :: current_state + + real(kind=DEFAULT_PRECISION) :: projected_time, dtm_trial + integer :: sample_nts, next_sample_time, ts_to_next_cfl, next_step, interval + + next_sample_time = minval(current_state%sampling(:)%next_time) + + ! Handle timestep adjustment for time_basis=.true. + ! Reduces timestep when approaching the next sample time. + if (current_state%time_basis) then + ts_to_next_cfl = current_state%cfl_frequency & + - mod(compare_timestep, current_state%cfl_frequency) + projected_time = current_state%time + current_state%dtm & + + (current_state%dtm_new * ts_to_next_cfl) + dtmmin + if ( next_sample_time .gt. 0 .and. projected_time .ge. next_sample_time ) then + sample_nts = max(1, ceiling( (next_sample_time & + - (current_state%time + current_state%dtm) ) & + / current_state%dtm_new ) ) + current_state%dtm_new = (next_sample_time - (current_state%time + current_state%dtm) ) & + / sample_nts + if (l_constant_dtm) then + current_state%dtm = options_get_real(current_state%options_database, "dtm") + current_state%dtm_new = current_state%dtm + sample_nts = nint((next_sample_time - (current_state%time + current_state%dtm) ) & + / current_state%dtm_new ) + end if + + ! Record the next sampling step for intervals matching the next time + where(next_sample_time .eq. current_state%sampling(:)%next_time) & + current_state%sampling(:)%next_step = current_state%timestep + sample_nts + + current_state%update_dtm = .true. + current_state%normal_step = .false. + + end if ! next_sample_time to be exceeded + + ! Handle force_output_on_interval by finding if time step can be reduced to hit + ! output interval exactly on a sampling interval. + else if (current_state%force_output_on_interval) then + + next_step = maxval(current_state%sampling(:)%next_step, & + (next_sample_time .eq. current_state%sampling(:)%next_time)) + interval = maxval(current_state%sampling(:)%interval, & + (next_step .eq. current_state%sampling(:)%next_step) .and. & + (next_sample_time .eq. current_state%sampling(:)%next_time)) + sample_nts = next_step - current_state%timestep + interval + + ! Early return point. + ! When readjusting for a dtm reduction during a non-normal step, permit the dtm lock to + ! persist if it's only a few timesteps away from the next_step + ! This is an ugly hack. + if (.not. current_state%normal_step .and. next_step - current_state%timestep .le. 5) then + current_state%update_dtm = .false. ! dtm lock persists, normal_step remains .false. + current_state%dtm_new = current_state%dtm ! symbolic assignment. no real effect. + ! ensure that cfl will be re-checked once next_step is reached. + current_state%last_cfl_timestep = current_state%timestep - current_state%cfl_frequency & + + (next_step - current_state%timestep) + return + end if + + dtm_trial = (next_sample_time - (current_state%time + current_state%dtm) ) & + / sample_nts + + if (dtm_trial .gt. current_state%dtm_new) then ! No need to adjust + current_state%normal_step = .true. + return + else ! dtm should be reduced to hit output time + current_state%dtm_new = dtm_trial + current_state%update_dtm = .true. + current_state%normal_step = .false. + end if + + end if ! time_basis or force_output_on_interval + + end subroutine evaluate_time_basis + + end module cfltest_mod diff --git a/components/checkpointer/src/checkpointcommon.F90 b/components/checkpointer/src/checkpointcommon.F90 index 835a0cc3..e28abeb0 100644 --- a/components/checkpointer/src/checkpointcommon.F90 +++ b/components/checkpointer/src/checkpointcommon.F90 @@ -29,9 +29,11 @@ module checkpointer_common_mod ZTH_KEY = "zth", & P_KEY = "p", & !< Pressure variable NetCDF key TIMESTEP="timestep", & !< Timestep NetCDF key + RECONFIG_TIMESTEP_OFFSET_KEY="reconfig_timestep_offset", & TIME_KEY="time",& DTM_KEY="dtm",& DTM_NEW_KEY="dtm_new",& + NORMAL_STEP_KEY="normal_step",& !< normal step indicator NetCDF key ABSOLUTE_NEW_DTM_KEY="absolute_new_dtm",& UGAL="ugal",& VGAL="vgal",& @@ -65,10 +67,16 @@ module checkpointer_common_mod OLZQBAR="olzqbar", & OLZQBAR_ANONYMOUS_NAME="olzqbar_qfield", & RAD_LAST_TIME_KEY="rad_last_time", & + LAST_CFL_TIMESTEP_KEY="last_cfl_timestep", & STH_LW_KEY="sth_lw", & STH_SW_KEY="sth_sw", & WUP='w_up', & - WDWN='w_dwn' + WDWN='w_dwn', & + NTRACERS_KEY="ntracers", & + NRADTRACERS_KEY="nradtracers", & + TRACER_DIM_KEY="tracer", & + TRACER_KEY = "tracer", & !< Tracer variable NetCDF key + ZTRACER_KEY = "ztracer" integer, parameter :: MAX_STRING_LENGTH = 100 !< Maximum string length (stored size) diff --git a/components/checkpointer/src/checkpointer.F90 b/components/checkpointer/src/checkpointer.F90 index d343e004..7cc70b73 100644 --- a/components/checkpointer/src/checkpointer.F90 +++ b/components/checkpointer/src/checkpointer.F90 @@ -8,7 +8,7 @@ module checkpointer_mod use state_mod, only : model_state_type use conversions_mod, only : conv_to_string use optionsdatabase_mod, only : options_get_string, options_has_key, options_get_integer, options_get_logical - use logging_mod, only : LOG_INFO, log_master_log, log_master_newline + use logging_mod, only : LOG_INFO, LOG_WARN, log_master_log, log_master_newline use checkpointer_write_checkpoint_mod, only : write_checkpoint_file use checkpointer_read_checkpoint_mod, only : read_checkpoint_file implicit none @@ -57,6 +57,17 @@ subroutine initialisation_callback(current_state) enable_write=.not. current_state%io_server_enabled end if + if (enable_write .and. current_state%time_basis) then + call log_master_newline() + call log_master_log(LOG_WARN, "-----") + call log_master_log(LOG_WARN, "The io_server is disabled with time_basis=.true.") + call log_master_log(LOG_WARN, " The checkpointer component will write the checkpoints.") + call log_master_log(LOG_WARN, " In this case, checkpoint_frequency has units of timesteps.") + call log_master_log(LOG_WARN, " This differs from the case where the io_server is enabled.") + call log_master_log(LOG_WARN, "-----") + call log_master_newline() + end if + if (options_has_key(current_state%options_database, "checkpoint")) then call read_checkpoint_file(current_state, options_get_string(current_state%options_database, "checkpoint")) end if diff --git a/components/checkpointer/src/readcheckpoint.F90 b/components/checkpointer/src/readcheckpoint.F90 index f33c23ec..3ff0de51 100644 --- a/components/checkpointer/src/readcheckpoint.F90 +++ b/components/checkpointer/src/readcheckpoint.F90 @@ -2,10 +2,10 @@ module checkpointer_read_checkpoint_mod #ifndef TEST_MODE use netcdf, only : nf90_global, nf90_nowrite, nf90_inquire_attribute, nf90_open, nf90_inq_dimid, nf90_inquire_dimension, & - nf90_inq_varid, nf90_get_var, nf90_get_att, nf90_close + nf90_inq_varid, nf90_get_var, nf90_get_att, nf90_close, nf90_noerr #else use dummy_netcdf_mod, only : nf90_global, nf90_nowrite, nf90_inquire_attribute, nf90_open, nf90_inq_dimid, & - nf90_inquire_dimension, nf90_inq_varid, nf90_get_var, nf90_get_att, nf90_close + nf90_inquire_dimension, nf90_inq_varid, nf90_get_var, nf90_get_att, nf90_close, nf90_noerr #endif use datadefn_mod, only : STRING_LENGTH use state_mod, only : model_state_type @@ -14,16 +14,19 @@ module checkpointer_read_checkpoint_mod use logging_mod, only : LOG_INFO, LOG_ERROR, log_log, log_master_log use conversions_mod, only : conv_is_integer, conv_to_integer, conv_is_real, conv_to_real, conv_is_logical, conv_to_logical, & conv_to_string - use optionsdatabase_mod, only : options_add + use optionsdatabase_mod, only : options_add, options_get_logical, options_get_integer, options_get_string, options_get_real_array use checkpointer_common_mod, only : EMPTY_DIM_KEY, STRING_DIM_KEY, X_DIM_KEY, Y_DIM_KEY, & Z_DIM_KEY, Q_DIM_KEY, Q_KEY, ZQ_KEY, TH_KEY, ZTH_KEY, P_KEY, U_KEY, V_KEY, W_KEY, ZU_KEY, ZV_KEY, ZW_KEY, X_KEY, Y_KEY, & Z_KEY, ZN_KEY, NQFIELDS, UGAL, VGAL, TIME_KEY, TIMESTEP, CREATED_ATTRIBUTE_KEY, TITLE_ATTRIBUTE_KEY, ABSOLUTE_NEW_DTM_KEY, & DTM_KEY, DTM_NEW_KEY, Q_INDICES_DIM_KEY, Q_INDICES_KEY, Q_FIELD_ANONYMOUS_NAME, ZQ_FIELD_ANONYMOUS_NAME, & MAX_STRING_LENGTH, THREF, OLUBAR, OLZUBAR, OLVBAR, OLZVBAR, OLTHBAR, OLZTHBAR, OLQBAR, OLZQBAR, OLQBAR_ANONYMOUS_NAME, & - OLZQBAR_ANONYMOUS_NAME, RAD_LAST_TIME_KEY, STH_LW_KEY, STH_SW_KEY, check_status, remove_null_terminator_from_string, & - WUP, WDWN + OLZQBAR_ANONYMOUS_NAME, RAD_LAST_TIME_KEY, LAST_CFL_TIMESTEP_KEY, STH_LW_KEY, STH_SW_KEY, check_status, & + remove_null_terminator_from_string, WUP, WDWN, TRACER_DIM_KEY, TRACER_KEY, ZTRACER_KEY, NTRACERS_KEY, NRADTRACERS_KEY, & + NORMAL_STEP_KEY, RECONFIG_TIMESTEP_OFFSET_KEY use datadefn_mod, only : DEFAULT_PRECISION use q_indices_mod, only : q_metadata_type, set_q_index, get_q_index, get_indices_descriptor, standard_q_names + use tracers_mod, only : get_tracer_name, reinitialise_trajectories, get_tracer_options, trajectories_enabled + implicit none #ifndef TEST_MODE @@ -49,7 +52,7 @@ subroutine read_checkpoint_file(current_state, filename) attribute_value=read_specific_global_attribute(ncid, "created") call read_dimensions(ncid, z_dim, y_dim, x_dim, z_found, y_found, x_found) call load_global_grid(current_state, ncid, z_dim, y_dim, x_dim, z_found, y_found, x_found) - + call verify_checkpoint_and_config_agree(current_state) call decompose_grid(current_state) call load_q_indices(ncid) @@ -66,8 +69,17 @@ subroutine read_checkpoint_file(current_state, filename) current_state%liquid_water_mixing_ratio_index=get_q_index(standard_q_names%CLOUD_LIQUID_MASS, 'checkpoint') end if - call log_master_log(LOG_INFO, "Restarted configuration from checkpoint file `"//trim(filename)//"` created at "& - //attribute_value) + if ( current_state%reconfig_run ) then + call log_master_log(LOG_INFO, "Reconfigured with data from checkpoint file `"//trim(filename)//"` created at "& + //attribute_value//" using configuration specified by `"//trim(options_get_string(current_state%options_database, & + "config"))//"`") + ! All tracers are always reset in the event of a reconfiguration. + call upgrade_tracers(current_state) + else + call log_master_log(LOG_INFO, "Restarted configuration from checkpoint file `"//trim(filename)//"` created at "& + //attribute_value) + end if + deallocate(attribute_value) current_state%initialised=.true. end subroutine read_checkpoint_file @@ -85,6 +97,23 @@ subroutine decompose_grid(current_state) end if end subroutine decompose_grid + !> Check for agreement between checkpoint and configuration global_grid dimensions. + ! It is possible for them to disagree and still have a functioning model run, but + ! diagnostic and checkpoint files will not have the expected dimensions. + !! @param current_state The current model state + subroutine verify_checkpoint_and_config_agree(current_state) + type(model_state_type), intent(inout) :: current_state + + if ( options_get_integer(current_state%options_database, "x_size") .ne. current_state%global_grid%size(X_INDEX) ) & + call log_master_log(LOG_ERROR, "Checkpoint and config x-dimensions do not agree.") + if ( options_get_integer(current_state%options_database, "y_size") .ne. current_state%global_grid%size(Y_INDEX) ) & + call log_master_log(LOG_ERROR, "Checkpoint and config y-dimensions do not agree.") + if ( options_get_integer(current_state%options_database, "z_size") .ne. current_state%global_grid%size(Z_INDEX) ) & + call log_master_log(LOG_ERROR, "Checkpoint and config z-dimensions do not agree.") + + end subroutine verify_checkpoint_and_config_agree + + !> Initialises the source and sav (for u,v,w) fields for allocated prognostics !! @param current_state The model current state subroutine initalise_source_and_sav_fields(current_state) @@ -129,6 +158,12 @@ subroutine initalise_source_and_sav_fields(current_state) allocate(current_state%sq(i)%data(z_size, y_size, x_size)) current_state%sq(i)%data(:,:,:) = 0. end do + if (current_state%n_tracers >0) then + do i=1,current_state%n_tracers + allocate(current_state%stracer(i)%data(z_size, y_size, x_size)) + current_state%stracer(i)%data(:,:,:) = 0. + end do + end if end subroutine initalise_source_and_sav_fields !> Loads in misc data from the checkpoint file @@ -140,16 +175,28 @@ subroutine load_misc(current_state, ncid) integer :: i_data(1) ! Procedure requires a vector rather than scalar real(kind=DEFAULT_PRECISION) :: r_data(1) + integer :: erri, dumid + logical :: read_normal=.true., read_last_cfl=.true. call read_single_variable(ncid, TIMESTEP, integer_data_1d=i_data) current_state%timestep = i_data(1)+1 ! plus one to increment for next timestep - !current_state%start_timestep = current_state%timestep call read_single_variable(ncid, UGAL, real_data_1d_double=r_data) current_state%ugal = r_data(1) call read_single_variable(ncid, VGAL, real_data_1d_double=r_data) current_state%vgal = r_data(1) call read_single_variable(ncid, NQFIELDS, integer_data_1d=i_data) current_state%number_q_fields = i_data(1) + ! Ignore tracer information in the case of a reconfiguration start. + ! Terms will be zero here and later be set from the new configuration specification. + if (.not. current_state%reconfig_run) then + call read_single_variable(ncid, NTRACERS_KEY, integer_data_1d=i_data) + current_state%n_tracers = i_data(1) + call read_single_variable(ncid, NRADTRACERS_KEY, integer_data_1d=i_data) + current_state%n_radioactive_tracers = i_data(1) + if (current_state%n_tracers > current_state%n_radioactive_tracers) current_state%traj_tracer_index = 1 + if (current_state%n_radioactive_tracers > 0) current_state%radioactive_tracer_index = & + current_state%n_tracers - current_state%n_radioactive_tracers + 1 + end if call read_single_variable(ncid, DTM_KEY, real_data_1d_double=r_data) current_state%dtm = r_data(1) call read_single_variable(ncid, DTM_NEW_KEY, real_data_1d_double=r_data) @@ -157,11 +204,60 @@ subroutine load_misc(current_state, ncid) current_state%update_dtm = current_state%dtm .ne. current_state%dtm_new call read_single_variable(ncid, ABSOLUTE_NEW_DTM_KEY, real_data_1d_double=r_data) current_state%absolute_new_dtm = r_data(1) + + ! During reconfig_run, check for fields that might be missing from old checkpoints + ! Only read if they are present. + ! Otherwise, skip reading, and leave default state values. + if ( current_state%reconfig_run ) then + ! normal_step defaults to .true.: no need to set again + erri = nf90_inq_varid(ncid, NORMAL_STEP_KEY, dumid) + read_normal = erri .eq. nf90_noerr + + ! last_cfl_timestep defaults to 0: no need to set again + erri = nf90_inq_varid(ncid, LAST_CFL_TIMESTEP_KEY, dumid) + read_last_cfl = erri .eq. nf90_noerr + end if + + if ( read_normal ) then + call read_single_variable(ncid, NORMAL_STEP_KEY, integer_data_1d=i_data) + if (i_data(1) .eq. 0 ) current_state%normal_step = .false. ! otherwise, keep default .true. value + end if + call read_single_variable(ncid, TIME_KEY, real_data_1d_double=r_data) ! The time is written into checkpoint as time+dtm, therefore the time as read in has been correctly advanced current_state%time = r_data(1) + call read_single_variable(ncid, RAD_LAST_TIME_KEY, real_data_1d_double=r_data) current_state%rad_last_time = r_data(1) + + if ( read_last_cfl ) then + call read_single_variable(ncid, LAST_CFL_TIMESTEP_KEY, integer_data_1d=i_data) + current_state%last_cfl_timestep = i_data(1) + end if + + ! Handle reconfiguration effects + ! reconfig_timestep_offset tracks the offset in timestep from the source run(s). + ! This keeps the cfl_test/stepfields/smagorinsky tests on the same track as the source run. + ! The offset is the value of the timestep in the checkpoint, plus any offset accumulated by + ! multiple reconfiguration runs. + ! This offset is also applied to last_cfl_timestep when it is updated. + ! timestep is reset to 1. + ! This ensures proper functioning of diagnostics on the IOserver when time_basis=.false. + if (does_field_exist(ncid, RECONFIG_TIMESTEP_OFFSET_KEY)) then + call read_single_variable(ncid, RECONFIG_TIMESTEP_OFFSET_KEY, integer_data_1d=i_data) + current_state%reconfig_timestep_offset = i_data(1) + end if ! else offset defaults to zero + if ( current_state%reconfig_run ) then + current_state%reconfig_timestep_offset = current_state%timestep-1 + current_state%reconfig_timestep_offset + ! This is required because of the formulation of later initialization of some fields. + current_state%timestep = 1 + if ( .not. current_state%retain_model_time ) then + current_state%time = 0.0_DEFAULT_PRECISION + current_state%rad_last_time = 0.0_DEFAULT_PRECISION + current_state%last_cfl_timestep = 0 + end if + end if + end subroutine load_misc !> Will read a global attribute from the checkpoint file - note that it allocates string memory @@ -197,7 +293,8 @@ subroutine load_all_fields(current_state, ncid) logical :: multi_process type(q_metadata_type) :: q_metadata character(len=STRING_LENGTH) :: q_field_name, zq_field_name - + character(len=STRING_LENGTH) :: tracer_field_name, ztracer_field_name + multi_process = current_state%parallel%processes .gt. 1 if (does_field_exist(ncid, U_KEY)) then @@ -258,6 +355,38 @@ subroutine load_all_fields(current_state, ncid) DUAL_GRID, DUAL_GRID, zq_field_name, multi_process) end do end if + if (current_state%n_tracers >0) then + allocate(current_state%tracer(current_state%n_tracers), current_state%ztracer(current_state%n_tracers), & + current_state%stracer(current_state%n_tracers)) + if (does_field_exist(ncid, TRACER_KEY)) then + call log_master_log(LOG_INFO, "Reading from checkpoint (TRACER_KEY): "//trim(TRACER_KEY)//" and "//trim(ZTRACER_KEY)) + do i=1,current_state%n_tracers + call load_single_3d_field(ncid, current_state%local_grid, current_state%tracer(i), DUAL_GRID, & + DUAL_GRID, DUAL_GRID, TRACER_KEY, multi_process, i) + call load_single_3d_field(ncid, current_state%local_grid, current_state%ztracer(i), DUAL_GRID, & + DUAL_GRID, DUAL_GRID, ZTRACER_KEY, multi_process, i) + end do + else + do i=1,current_state%n_tracers + tracer_field_name=trim(TRACER_KEY)//"_"//trim(get_tracer_name(i, current_state%traj_tracer_index, & + current_state%radioactive_tracer_index, current_state%n_radioactive_tracers, current_state%n_tracers)) + ztracer_field_name=trim(ZTRACER_KEY)//"_"//trim(get_tracer_name(i, current_state%traj_tracer_index, & + current_state%radioactive_tracer_index, current_state%n_radioactive_tracers, current_state%n_tracers)) + if (.not. does_field_exist(ncid, tracer_field_name)) then + call log_log(LOG_ERROR, "No entry in checkpoint file for tracer field "// & + trim(conv_to_string(i))//", "//trim(tracer_field_name)) + end if + if (.not. does_field_exist(ncid, ztracer_field_name)) then + call log_log(LOG_ERROR, "Missmatch between tracer and ztracer field name in the checkpoint file") + end if + call log_master_log(LOG_INFO, "Reading from checkpoint: "//trim(tracer_field_name)//" and "//trim(ztracer_field_name)) + call load_single_3d_field(ncid, current_state%local_grid, current_state%tracer(i), DUAL_GRID, & + DUAL_GRID, DUAL_GRID, tracer_field_name, multi_process) + call load_single_3d_field(ncid, current_state%local_grid, current_state%ztracer(i), DUAL_GRID, & + DUAL_GRID, DUAL_GRID, ztracer_field_name, multi_process) + end do + end if + end if if (does_field_exist(ncid, STH_LW_KEY)) then call load_single_3d_field(ncid, current_state%local_grid, current_state%sth_lw, DUAL_GRID, & DUAL_GRID, DUAL_GRID, STH_LW_KEY, multi_process) @@ -336,7 +465,6 @@ subroutine load_single_3d_field(ncid, local_grid, field, z_grid, y_grid, x_grid, integer, optional, intent(in) :: fourth_dim_loc integer :: start(5), count(5), i, map(5) - integer :: variable_id, nd if (allocated(field%data)) deallocate(field%data) allocate(field%data(local_grid%size(Z_INDEX) + local_grid%halo_size(Z_INDEX) * 2, local_grid%size(Y_INDEX) + & @@ -415,7 +543,7 @@ subroutine load_mean_profiles(current_state, ncid, z_dim_id) integer :: z_size, i type(q_metadata_type) :: q_metadata - character(len=STRING_LENGTH) :: q_field_name, zq_field_name + character(len=STRING_LENGTH) :: q_field_name call check_status(nf90_inquire_dimension(ncid, z_dim_id, len=z_size)) if (does_field_exist(ncid, OLUBAR)) then @@ -489,7 +617,7 @@ subroutine load_pdf_profiles(current_state, ncid, z_dim_id) type(model_state_type), intent(inout) :: current_state integer, intent(in) :: ncid, z_dim_id - integer :: z_size, i + integer :: z_size call check_status(nf90_inquire_dimension(ncid, z_dim_id, len=z_size)) if (does_field_exist(ncid, WUP)) then @@ -669,4 +797,56 @@ subroutine read_dimensions(ncid, z_dim, y_dim, x_dim, z_found, y_found, x_found) call check_status(nf90_inq_dimid(ncid, Y_DIM_KEY, y_dim), y_found) call check_status(nf90_inq_dimid(ncid, X_DIM_KEY, x_dim), x_found) end subroutine read_dimensions + + !> Called in the case of reconfig_run=.true. to read tracer setup from the configuration, ignoring the checkpoint state. + !! @param current_state The current model state_mod + subroutine upgrade_tracers(current_state) + type(model_state_type), intent(inout) :: current_state + + integer :: alloc_z, alloc_y, alloc_x, i, checkpoint_n_tracers + + checkpoint_n_tracers = current_state%n_tracers + + alloc_z=current_state%local_grid%size(Z_INDEX) + current_state%local_grid%halo_size(Z_INDEX) * 2 + alloc_y=current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2 + alloc_x=current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2 + + call log_master_log(LOG_INFO,"Restarting tracers. Checking config for enabled tracers.") + call get_tracer_options(current_state) + + ! Allocate and initialise (traj reinit and rad to zero) any tracers requested by the configuration. + if (current_state%n_tracers .gt. 0) then + allocate( current_state%tracer(current_state%n_tracers), & + current_state%ztracer(current_state%n_tracers), & + current_state%stracer(current_state%n_tracers)) + do i=1, current_state%n_tracers + call allocate_prognostic(current_state%tracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + call allocate_prognostic(current_state%ztracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + call allocate_prognostic(current_state%stracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + end do + + ! Under normal continuation runs, these aren't reinitialised in the initialisation, but reconfiguration + ! needs them to be reinitialised as if it were a cold start. + if (trajectories_enabled) then + call reinitialise_trajectories(current_state) + end if + endif ! allocate tracers + end subroutine upgrade_tracers + + !> Used by upgrade_tracers to allocate the tracer fields and initialise them to zero + !! @param field - prognostic field + !! @param alloc_[z,y,x] - size of field dimension to be allocated + !! @param [z,y,x]_grid - grid type parameter + subroutine allocate_prognostic(field, alloc_z, alloc_y, alloc_x, z_grid, y_grid, x_grid) + type(prognostic_field_type), intent(inout) :: field + integer, intent(in) :: alloc_z, alloc_y, alloc_x, z_grid, y_grid, x_grid + + field%active=.true. + field%grid(Z_INDEX) = z_grid + field%grid(Y_INDEX) = y_grid + field%grid(X_INDEX) = x_grid + allocate(field%data(alloc_z, alloc_y, alloc_x)) + field%data=0.0_DEFAULT_PRECISION + end subroutine allocate_prognostic + end module checkpointer_read_checkpoint_mod diff --git a/components/checkpointer/src/writecheckpoint.F90 b/components/checkpointer/src/writecheckpoint.F90 index 186b0aef..09f4b023 100644 --- a/components/checkpointer/src/writecheckpoint.F90 +++ b/components/checkpointer/src/writecheckpoint.F90 @@ -18,7 +18,9 @@ module checkpointer_write_checkpoint_mod ZU_KEY, ZV_KEY, ZW_KEY, X_KEY, Y_KEY, Z_KEY, ZN_KEY, NQFIELDS, UGAL, VGAL, TIME_KEY, TIMESTEP, MAX_STRING_LENGTH, & CREATED_ATTRIBUTE_KEY, TITLE_ATTRIBUTE_KEY, ABSOLUTE_NEW_DTM_KEY, DTM_KEY, DTM_NEW_KEY, Q_INDICES_KEY, & Q_INDICES_DIM_KEY, X_RESOLUTION, Y_RESOLUTION,X_TOP, Y_TOP, X_BOTTOM, Y_BOTTOM, THREF, OLUBAR, OLZUBAR, OLVBAR, & - OLZVBAR, OLTHBAR, OLZTHBAR, OLQBAR, OLZQBAR, check_status, WUP, WDWN + OLZVBAR, OLTHBAR, OLZTHBAR, OLQBAR, OLZQBAR, check_status, WUP, WDWN, & + NTRACERS_KEY, NRADTRACERS_KEY, TRACER_DIM_KEY, TRACER_KEY, ZTRACER_KEY, NORMAL_STEP_KEY, & + RAD_LAST_TIME_KEY, LAST_CFL_TIMESTEP_KEY, RECONFIG_TIMESTEP_OFFSET_KEY use datadefn_mod, only : DEFAULT_PRECISION, SINGLE_PRECISION, DOUBLE_PRECISION, STRING_LENGTH use q_indices_mod, only : q_metadata_type, get_max_number_q_indices, get_indices_descriptor, get_number_active_q_indices use mpi, only : MPI_INFO_NULL @@ -44,7 +46,8 @@ subroutine write_checkpoint_file(current_state, filename) integer :: ncid, z_dim_id, y_dim_id, x_dim_id, q_dim_id, x_id, y_id, z_id, th_id, p_id, time_id,& u_id, v_id, w_id, q_id, zu_id, zv_id, zw_id, zth_id, zq_id, timestep_id, ugal_id, & vgal_id, number_q_fields_id, string_dim_id, key_value_dim_id, options_id, q_indices_id, & - dtm_id, dtm_new_id, absolute_new_dtm_id + dtm_id, dtm_new_id, absolute_new_dtm_id, tr_dim_id, tr_id, ztr_id, n_tracers_id, n_rad_tracers_id, & + normal_step_id, rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id logical :: q_indices_declared #ifdef SINGLE_MONC_DO_SEQUENTIAL_NETCDF @@ -61,6 +64,7 @@ subroutine write_checkpoint_file(current_state, filename) call write_out_global_attributes(ncid) call define_grid_dimensions(current_state, ncid, z_dim_id, y_dim_id, x_dim_id) if (current_state%number_q_fields .gt. 0) call define_q_field_dimension(current_state, ncid, q_dim_id) + if (current_state%n_tracers .gt. 0) call define_tr_field_dimension(current_state, ncid, tr_dim_id) call define_options_variable(current_state, ncid, string_dim_id, key_value_dim_id, options_id) q_indices_declared=define_q_indices_variable(ncid, string_dim_id, key_value_dim_id, q_indices_id) @@ -68,21 +72,26 @@ subroutine write_checkpoint_file(current_state, filename) call define_mean_fields(current_state, ncid) if (current_state%number_q_fields .gt. 0) call define_q_variable(ncid, current_state%parallel%processes .gt. 1, & q_dim_id, z_dim_id, y_dim_id, x_dim_id, q_id, zq_id) + if (current_state%n_tracers .gt. 0) call define_tr_variable(ncid, current_state%parallel%processes .gt. 1, & + tr_dim_id, z_dim_id, y_dim_id, x_dim_id, tr_id, ztr_id) call define_prognostic_variables(current_state, current_state%parallel%processes .gt. 1, ncid, z_dim_id, y_dim_id, & x_dim_id, u_id, v_id, w_id, th_id, p_id, zu_id, zv_id, zw_id, zth_id) call define_misc_variables(ncid, timestep_id, time_id, ugal_id, vgal_id, number_q_fields_id, & - dtm_id, dtm_new_id, absolute_new_dtm_id) + dtm_id, dtm_new_id, absolute_new_dtm_id, n_tracers_id, n_rad_tracers_id, normal_step_id, & + rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id) call check_status(nf90_enddef(ncid)) if (current_state%parallel%my_rank==0) call write_out_grid(ncid, current_state%global_grid) if (current_state%parallel%my_rank==0) call write_out_mean_fields(ncid, current_state%global_grid) - call write_out_all_fields(current_state, ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, p_id) + call write_out_all_fields(current_state, ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, & + p_id, tr_id, ztr_id) if (current_state%parallel%my_rank==0) then call write_out_options(current_state, ncid, options_id) if (q_indices_declared) call write_out_q_indices(ncid, q_indices_id) call write_out_misc_variables(current_state, ncid, timestep_id, time_id, & - ugal_id, vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id) + ugal_id, vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id, n_tracers_id, n_rad_tracers_id, & + normal_step_id, rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id) end if !> writeout pdf fields in checkpoint file @@ -166,9 +175,10 @@ end subroutine write_out_options !! @param u_id The NetCDF u field dimension id !! @param v_id The NetCDF v field dimension id !! @param w_id The NetCDF w field dimension id - subroutine write_out_all_fields(current_state, ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, p_id) + subroutine write_out_all_fields(current_state, ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, & + p_id, tr_id, ztr_id) type(model_state_type), intent(inout) :: current_state - integer, intent(in) :: ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, p_id + integer, intent(in) :: ncid, u_id, v_id, w_id, zu_id, zv_id, zw_id, th_id, zth_id, q_id, zq_id, p_id, tr_id, ztr_id integer :: i logical :: multi_process @@ -198,6 +208,12 @@ subroutine write_out_all_fields(current_state, ncid, u_id, v_id, w_id, zu_id, zv call write_out_velocity_field(ncid, current_state%local_grid, current_state%zq(i), zq_id, multi_process, i) end if end do + do i=1,current_state%n_tracers + if (current_state%tracer(i)%active) then + call write_out_velocity_field(ncid, current_state%local_grid, current_state%tracer(i), tr_id, multi_process, i) + call write_out_velocity_field(ncid, current_state%local_grid, current_state%ztracer(i), ztr_id, multi_process, i) + end if + end do end subroutine write_out_all_fields !> Will write out a single velocity field to the checkpoint file. If there are multiple processes then will determine @@ -393,6 +409,18 @@ subroutine define_q_field_dimension(current_state, ncid, q_dim_id) call check_status(nf90_def_dim(ncid, Q_DIM_KEY, current_state%number_q_fields, q_dim_id)) end subroutine define_q_field_dimension + !> Defines the tracer field dimension in the NetCDF + !! @param current_state The current model state_mod + !! @param ncid The NetCDF file id + !! @param tr_dim_id Corresponding NetCDF tracer dimension id + subroutine define_tr_field_dimension(current_state, ncid, tr_dim_id) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: ncid + integer, intent(out) :: tr_dim_id + + call check_status(nf90_def_dim(ncid, TRACER_DIM_KEY, current_state%n_tracers, tr_dim_id)) + end subroutine define_tr_field_dimension + !> Will define the grid dimensions and works for 1, 2 or 3D grids_mod !! @param current_state The current model state_mod !! @param ncid The NetCDF file id @@ -540,6 +568,38 @@ subroutine define_q_variable(ncid, multi_process, q_dim_id, z_dim_id, y_dim_id, end if end subroutine define_q_variable + !> Defines the tracer variable in the checkpoint file + !! @param ncid The NetCDF file id + !! @param multi_process Whether to support parallel IO operations or not + !! @param tr_dim_id The NetCDF tr dimension id + !! @param z_dim_id The NetCDF z dimension id + !! @param y_dim_id The NetCDF y dimension id + !! @param x_dim_id The NetCDF x dimension id + !! @param tr_id The NetCDF tracer variable id provided by this procedure + !! @param ztr_id The NetCDF ztracer variable id provided by this procedure + subroutine define_tr_variable(ncid, multi_process, tr_dim_id, z_dim_id, y_dim_id, x_dim_id, tr_id, ztr_id) + logical, intent(in) :: multi_process + integer, intent(in) :: ncid, z_dim_id, y_dim_id, x_dim_id, tr_dim_id + integer, intent(out) :: tr_id, ztr_id + + integer, dimension(:), allocatable :: dimids + + allocate(dimids(4)) + dimids = (/ z_dim_id, y_dim_id, x_dim_id, tr_dim_id /) + + call check_status(nf90_def_var(ncid, TRACER_KEY, merge(NF90_DOUBLE, NF90_REAL, & + DEFAULT_PRECISION == DOUBLE_PRECISION), dimids, tr_id)) + call check_status(nf90_def_var(ncid, ZTRACER_KEY, merge(NF90_DOUBLE, NF90_REAL, & + DEFAULT_PRECISION == DOUBLE_PRECISION), dimids, ztr_id)) + + if (multi_process) then + call check_status(nf90_def_var_fill(ncid, tr_id, 1, 1)) + call check_status(nf90_def_var_fill(ncid, ztr_id, 1, 1)) + call check_status(nf90_var_par_access(ncid, tr_id, NF90_COLLECTIVE)) + call check_status(nf90_var_par_access(ncid, ztr_id, NF90_COLLECTIVE)) + end if + end subroutine define_tr_variable + !> Defines prognostic variables in the NetCDF. This handles 1, 2 and 3D grids_mod and 1, 2 and 3D fields, which !! most likely have the same dimensions but this is not mandatory here. All prognostic fields are 3D, if !! the grid is not 3D then the empty (size 1) dimension is used in that dimension @@ -584,9 +644,11 @@ end subroutine define_prognostic_variables !! @param ncid The NetCDF file id !! @param timestep_id The NetCDF timestep variable subroutine define_misc_variables(ncid, timestep_id, time_id, ugal_id, vgal_id, number_q_fields_id, & - dtm_id, dtm_new_id, absolute_new_dtm_id) + dtm_id, dtm_new_id, absolute_new_dtm_id, n_tracers_id, n_rad_tracers_id, normal_step_id, & + rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id) integer, intent(in) :: ncid - integer, intent(out) :: timestep_id, time_id, ugal_id, vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id + integer, intent(out) :: timestep_id, time_id, ugal_id, vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id, & + n_tracers_id, n_rad_tracers_id, normal_step_id, rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id call check_status(nf90_def_var(ncid, TIMESTEP, NF90_INT, timestep_id)) call check_status(nf90_def_var(ncid, TIME_KEY, NF90_DOUBLE, time_id)) @@ -596,6 +658,12 @@ subroutine define_misc_variables(ncid, timestep_id, time_id, ugal_id, vgal_id, n call check_status(nf90_def_var(ncid, DTM_KEY, NF90_DOUBLE, dtm_id)) call check_status(nf90_def_var(ncid, DTM_NEW_KEY, NF90_DOUBLE, dtm_new_id)) call check_status(nf90_def_var(ncid, ABSOLUTE_NEW_DTM_KEY, NF90_DOUBLE, absolute_new_dtm_id)) + call check_status(nf90_def_var(ncid, NTRACERS_KEY, NF90_INT, n_tracers_id)) + call check_status(nf90_def_var(ncid, NRADTRACERS_KEY, NF90_INT, n_rad_tracers_id)) + call check_status(nf90_def_var(ncid, NORMAL_STEP_KEY, NF90_INT, normal_step_id)) + call check_status(nf90_def_var(ncid, RAD_LAST_TIME_KEY, NF90_DOUBLE, rad_last_time_id)) + call check_status(nf90_def_var(ncid, LAST_CFL_TIMESTEP_KEY, NF90_INT, last_cfl_timestep_id)) + call check_status(nf90_def_var(ncid, RECONFIG_TIMESTEP_OFFSET_KEY, NF90_INT, reconfig_timestep_offset_id)) end subroutine define_misc_variables !> Will dump out (write) misc model data to the checkpoint @@ -603,10 +671,12 @@ end subroutine define_misc_variables !! @param ncid The NetCDF file id !! @param timestep_id The NetCDF timestep variable id subroutine write_out_misc_variables(current_state, ncid, timestep_id, time_id, ugal_id, & - vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id) + vgal_id, number_q_fields_id, dtm_id, dtm_new_id, absolute_new_dtm_id, n_tracers_id, n_rad_tracers_id, & + normal_step_id, rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id) type(model_state_type), intent(inout) :: current_state integer, intent(in) :: ncid, timestep_id, time_id, ugal_id, vgal_id, number_q_fields_id, & - dtm_id, dtm_new_id, absolute_new_dtm_id + dtm_id, dtm_new_id, absolute_new_dtm_id, n_tracers_id, n_rad_tracers_id, normal_step_id, & + rad_last_time_id, last_cfl_timestep_id, reconfig_timestep_offset_id call check_status(nf90_put_var(ncid, timestep_id, current_state%timestep)) ! The time is incremented with dtm as the model was about to increment for the next step and this is needed for diagnostics @@ -617,6 +687,16 @@ subroutine write_out_misc_variables(current_state, ncid, timestep_id, time_id, u call check_status(nf90_put_var(ncid, dtm_id, current_state%dtm)) call check_status(nf90_put_var(ncid, dtm_new_id, current_state%dtm_new)) call check_status(nf90_put_var(ncid, absolute_new_dtm_id, current_state%absolute_new_dtm)) + call check_status(nf90_put_var(ncid, n_tracers_id, current_state%n_tracers)) + call check_status(nf90_put_var(ncid, n_rad_tracers_id, current_state%n_radioactive_tracers)) + if (current_state%normal_step) then + call check_status(nf90_put_var(ncid, normal_step_id, 1)) + else + call check_status(nf90_put_var(ncid, normal_step_id, 0)) + end if + call check_status(nf90_put_var(ncid, rad_last_time_id, current_state%rad_last_time)) + call check_status(nf90_put_var(ncid, last_cfl_timestep_id, current_state%last_cfl_timestep)) + call check_status(nf90_put_var(ncid, reconfig_timestep_offset_id, current_state%reconfig_timestep_offset)) end subroutine write_out_misc_variables !> Will define a single velocity variable in the NetCDF file diff --git a/components/clearsourceterms/src/clearsourceterms.F90 b/components/clearsourceterms/src/clearsourceterms.F90 index 72b5aeaf..c64eccb9 100644 --- a/components/clearsourceterms/src/clearsourceterms.F90 +++ b/components/clearsourceterms/src/clearsourceterms.F90 @@ -44,5 +44,14 @@ subroutine timestep_callback(current_state) do i=1, current_state%number_q_fields current_state%sq(i)%data=0.0_DEFAULT_PRECISION end do + + if (current_state%n_tracers .gt. 0) then + do i=1, current_state%n_tracers + current_state%stracer(i)%data=0.0_DEFAULT_PRECISION + end do + if (current_state%traj_tracer_index >0 .and. current_state%reinit_tracer) then + current_state%reinit_tracer=.false. + end if + end if end subroutine timestep_callback end module clearsourceterms_mod diff --git a/components/componentheaders.static b/components/componentheaders.static index e08b8e29..dee2c6fb 100644 --- a/components/componentheaders.static +++ b/components/componentheaders.static @@ -16,6 +16,7 @@ use gridmanager_mod, only : gridmanager_get_descriptor use haloswapper_mod, only : haloswapper_get_descriptor use iobridge_mod, only : iobridge_get_descriptor use iterativesolver_mod, only : iterativesolver_get_descriptor +use iterativesolver_single_prec_mod, only : iterativesolver_single_prec_get_descriptor use kidreader_mod, only : kidreader_get_descriptor use lowerbc_mod, only : lowerbc_get_descriptor use meanprofiles_mod, only : meanprofiles_get_descriptor @@ -48,3 +49,5 @@ use socrates_couple_mod, only : socrates_couple_get_descriptor use conditional_diagnostics_column_mod, only : conditional_diagnostics_column_get_descriptor use conditional_diagnostics_whole_mod, only : conditional_diagnostics_whole_get_descriptor use pdf_analysis_mod, only : pdf_analysis_get_descriptor +use tracers_mod, only: tracers_get_descriptor +use dephy_forcings_mod, only : dephy_forcings_get_descriptor diff --git a/components/componentregistrations.static b/components/componentregistrations.static index c6410161..8b1e092a 100644 --- a/components/componentregistrations.static +++ b/components/componentregistrations.static @@ -16,6 +16,7 @@ call add_component(component_descriptions, gridmanager_get_descriptor()) call add_component(component_descriptions, haloswapper_get_descriptor()) call add_component(component_descriptions, iobridge_get_descriptor()) call add_component(component_descriptions, iterativesolver_get_descriptor()) +call add_component(component_descriptions, iterativesolver_single_prec_get_descriptor()) call add_component(component_descriptions, kidreader_get_descriptor()) call add_component(component_descriptions, lowerbc_get_descriptor()) call add_component(component_descriptions, meanprofiles_get_descriptor()) @@ -48,3 +49,5 @@ call add_component(component_descriptions, socrates_couple_get_descriptor()) call add_component(component_descriptions, conditional_diagnostics_column_get_descriptor()) call add_component(component_descriptions, conditional_diagnostics_whole_get_descriptor()) call add_component(component_descriptions, pdf_analysis_get_descriptor()) +call add_component(component_descriptions, tracers_get_descriptor()) +call add_component(component_descriptions, dephy_forcings_get_descriptor()) diff --git a/components/conditional_diagnostics_column/src/conditional_diagnostics_column.F90 b/components/conditional_diagnostics_column/src/conditional_diagnostics_column.F90 index ed031049..68285b38 100644 --- a/components/conditional_diagnostics_column/src/conditional_diagnostics_column.F90 +++ b/components/conditional_diagnostics_column/src/conditional_diagnostics_column.F90 @@ -55,8 +55,6 @@ module conditional_diagnostics_column_mod integer, dimension(:), allocatable :: diag_locations, cond_locations integer :: requested_area - integer :: diagnostic_generation_frequency - public conditional_diagnostics_column_get_descriptor, CondDiags_tot, ncond, ndiag, gpts_total, requested_area, & cond_request, diag_request, cond_long, diag_long @@ -351,9 +349,6 @@ subroutine initialisation_callback(current_state) cond_long=master_conditions_list(cond_locations) diag_long=master_diagnostics_list(diag_locations) - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -400,7 +395,9 @@ subroutine timestep_callback(current_state) integer :: k, j, i integer :: inc ! loop increment variable - integer :: local_y, locaL_x, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep j=current_state%column_local_y i=current_state%column_local_x @@ -415,7 +412,7 @@ subroutine timestep_callback(current_state) if ( .not. (current_state%th%active .and. & .not. current_state%passive_q .and. & current_state%number_q_fields .gt. 0) ) return - if (.not. mod(current_state%timestep, diagnostic_generation_frequency) == 0) return + if (.not. calculate_diagnostics) return !> Begin the calculations !> Loop over levels diff --git a/components/conditional_diagnostics_whole/src/conditional_diagnostics_whole.F90 b/components/conditional_diagnostics_whole/src/conditional_diagnostics_whole.F90 index da720949..a2651614 100644 --- a/components/conditional_diagnostics_whole/src/conditional_diagnostics_whole.F90 +++ b/components/conditional_diagnostics_whole/src/conditional_diagnostics_whole.F90 @@ -10,24 +10,20 @@ module conditional_diagnostics_whole_mod use conditional_diagnostics_column_mod, only : CondDiags_tot, ncond, ndiag, gpts_total, requested_area use grids_mod, only : Z_INDEX use datadefn_mod, only : PRECISION_TYPE, DEFAULT_PRECISION - use mpi, only : MPI_SUM, MPI_IN_PLACE, MPI_INT, MPI_REAL, MPI_DOUBLE, MPI_Comm + use mpi, only : MPI_SUM, MPI_IN_PLACE, MPI_INT, MPI_REAL, MPI_DOUBLE use missing_data_mod, only: rmdi use optionsdatabase_mod, only : options_get_integer - implicit none #ifndef TEST_MODE private #endif - integer :: diagnostic_generation_frequency - public conditional_diagnostics_whole_get_descriptor contains - !> Provides registry information for the component !! @returns The component descriptor that describes this component type(component_descriptor_type) function conditional_diagnostics_whole_get_descriptor() @@ -38,15 +34,11 @@ type(component_descriptor_type) function conditional_diagnostics_whole_get_descr conditional_diagnostics_whole_get_descriptor%finalisation=>finalisation_callback end function conditional_diagnostics_whole_get_descriptor - !> Initialisation hook: currently doesn't need to do anything !! @param current_state The current model state subroutine initialisation_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -56,9 +48,12 @@ subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state integer :: k,cnc,dnc,ierr real(kind=DEFAULT_PRECISION) :: temp + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep !> Decide if conditions are appropriate to proceed with calculations - if (.not. mod(current_state%timestep, diagnostic_generation_frequency) == 0) return + if (.not. calculate_diagnostics) return !> Sum conditional diagnostics total array (horizontally), placing the result on process 0 !! Reduction call on process 0 requires special MPI_IN_PLACE handling diff --git a/components/coriolis/src/coriolis.F90 b/components/coriolis/src/coriolis.F90 index da82fe69..868c6de3 100644 --- a/components/coriolis/src/coriolis.F90 +++ b/components/coriolis/src/coriolis.F90 @@ -27,8 +27,6 @@ module coriolis_mod tend_pr_tot_u, tend_pr_tot_v logical :: l_tend_pr_tot_u, l_tend_pr_tot_v - integer :: diagnostic_generation_frequency - public coriolis_get_descriptor contains @@ -189,9 +187,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_v(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -210,8 +205,11 @@ end subroutine finalisation_callback !! @param current_state The current model state subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state + integer :: local_y, local_x, k, target_x_index, target_y_index + logical :: calculate_diagnostics - integer :: local_y, locaL_x, k, target_x_index, target_y_index + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column local_y=current_state%column_local_y local_x=current_state%column_local_x @@ -237,9 +235,7 @@ subroutine timestep_callback(current_state) .and. current_state%column_local_y .le. current_state%local_grid%local_domain_end_index(Y_INDEX)) )) return end if - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) do k=2,current_state%local_grid%size(Z_INDEX) #if defined(U_ACTIVE) && defined(V_ACTIVE) @@ -261,9 +257,7 @@ subroutine timestep_callback(current_state) #endif end do - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/damping/src/damping.F90 b/components/damping/src/damping.F90 index 8741ff8e..db8d069d 100644 --- a/components/damping/src/damping.F90 +++ b/components/damping/src/damping.F90 @@ -41,8 +41,6 @@ module damping_mod l_tend_pr_tot_tabs ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency - ! tke tendency diagnostic real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tend_pr_tot_tke @@ -136,24 +134,24 @@ subroutine init_callback(current_state) l_tend_pr_tot_v = current_state%v%active l_tend_pr_tot_w = current_state%w%active l_tend_pr_tot_th = current_state%th%active - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_u = current_state%u%active .or. l_tend_pr_tot_u l_tend_3d_v = current_state%v%active .or. l_tend_pr_tot_v l_tend_3d_w = current_state%w%active .or. l_tend_pr_tot_w l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th l_tend_pr_tot_tke = current_state%u%active .and. current_state%v%active .and. current_state%w%active @@ -261,10 +259,6 @@ subroutine init_callback(current_state) allocate( tend_pr_tot_tke(current_state%local_grid%size(Z_INDEX)) ) endif - - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine init_callback @@ -309,6 +303,10 @@ subroutine timestep_callback(current_state) integer :: k, i integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -358,18 +356,20 @@ subroutine timestep_callback(current_state) endif ! zero totals - if (current_state%halo_column .and. current_state%timestep <3) return + ! No need to do damping calculations in the halos or on the first two timesteps + ! unless this is a reconfiguration run + if (current_state%halo_column .or. & + (current_state%timestep < 3 .and. (.not. current_state%reconfig_run)) ) return - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) do k=current_state%global_grid%configuration%vertical%kdmpmin,current_state%local_grid%size(Z_INDEX) #ifdef U_ACTIVE current_state%su%data(k, current_state%column_local_y, current_state%column_local_x)=current_state%su%data(k, & current_state%column_local_y, current_state%column_local_x)-& current_state%global_grid%configuration%vertical%dmpco(k)*(current_state%zu%data(k, current_state%column_local_y, & - current_state%column_local_x)- (current_state%global_grid%configuration%vertical%olzubar(k)-current_state%ugal)) + current_state%column_local_x)-(current_state%global_grid%configuration%vertical%olzubar(k)-current_state%ugal)) #endif #ifdef V_ACTIVE current_state%sv%data(k, current_state%column_local_y, current_state%column_local_x)=current_state%sv%data(k, & @@ -403,9 +403,8 @@ subroutine timestep_callback(current_state) end do #endif - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/dephy_forcings/makefile b/components/dephy_forcings/makefile new file mode 100644 index 00000000..78944064 --- /dev/null +++ b/components/dephy_forcings/makefile @@ -0,0 +1,17 @@ +SRCSF = src/dephy_forcings.F90 + +BUILDDIR=build +COREDIR=../../model_core/build +LOWERBCDIR=../lowerbc/build +SETFLUXLOOKDIR=../setfluxlook/build +GRIDMANAGERDIR=../gridmanager/build +FFLAGS=-I $(BUILDDIR) -I $(COREDIR) -I $(LOWERBCDIR) -I $(SETFLUXLOOKDIR) -I $(GRIDMANAGERDIR) $(COMPILERFFLAGS) +OBJS = $(patsubst %.F90,$(BUILDDIR)/%.o,$(SRCSF)) + +all: create-build-dirs $(OBJS) + +create-build-dirs: + mkdir -p $(BUILDDIR) + +$(OBJS) : $(BUILDDIR)/%.o : %.F90 + $(FTN) $(OPT) $(FFLAGS) $< -o $(BUILDDIR)/$(notdir $@) diff --git a/components/dephy_forcings/src/dephy_forcings.F90 b/components/dephy_forcings/src/dephy_forcings.F90 new file mode 100644 index 00000000..d19762d4 --- /dev/null +++ b/components/dephy_forcings/src/dephy_forcings.F90 @@ -0,0 +1,1600 @@ +! Note that this subroutine replaces part of the profile initialisation +! as well as setfluxlook, coriolis, and "forcing from mcf" routines + +! NOTES +! - Currently, surface pressure needs to be set in mcf still. +! - GW Damping and grid also need to be set correctly in MCF +! - Module needs to be initialised after gridmanager but before random noise +! This may need to be checked +! - Ensure PW advection does not clear source terms. +! - Note q in MONC is mixing ratio (rather than specific humidity, as is more usual) + +! CURRENTLY TESTING +! - Handle nudging above clouds in prescribed fashion (could be a question for DEPHY community)? +! - Implement lat/lon dependence for radiation (socrates_opt%latitude,socrates_opt%longitude,socrates_opt%surface_albedo) + +! TODO +! - Surface pressure initialisation from file? +! - Implement consistency check for use_surface_boundary_conditions flag +! - Implement check that grid manager initialised but random noise hasn't been applied yet +! - Check for possible problematic nature of modifying both current state and vertical grid simultaneously +! and check what "target" keyword does in this context. +! - Handle (evolving) surface pressure? +! - Deal with surface non-zero height above sea level (better to deal with this in Lagtraj?) +! - Make code self-documenting with Doxygen +! - Add diagnostics +! - Improve interpolation routines? (replace linear interpolation by Steffen interpolation) +! - Code up finalisation callback (deallocation)? +! - Implement a less hacky column mode check? +! - Code restructuring/reformatting/more DRY code +! - Discuss best way to refer to z-coordinates +! - Discuss best way to do lowerbc and z0/z0th reinitialisation +! - Check grid vertical halo size + +! TODO: RELATED ISSUES +! - Discuss possible problematic nature of modifying both current_state and current_state%vertical grid simultaneously in general +! - Work on problems with "entire domain" setfluxlook for heterogeneous surface forcings. +! - More systematic implementation of utilities in a separate module. + +module dephy_forcings_mod + use datadefn_mod, only : STRING_LENGTH + use monc_component_mod, only : component_descriptor_type + ! Use PRESCRIBED_SURFACE_FLUXES, PRESCRIBED_SURFACE_VALUES to specify boundary conditions for use in other modules + use state_mod, only : model_state_type, PRESCRIBED_SURFACE_FLUXES, PRESCRIBED_SURFACE_VALUES + use optionsdatabase_mod, only : options_get_integer, options_get_logical, options_get_real, & + options_get_string + use grids_mod, only : vertical_grid_configuration_type, X_INDEX, Y_INDEX, Z_INDEX + use logging_mod, only : LOG_ERROR, log_master_log, log_log + ! note z0 and z0th are overwritten during the simulation + use science_constants_mod, only : cp, rlvap, z0, z0th, G, von_karman_constant, ratio_mol_wts,r_over_cp,& + alphah,betah,betam,gammah,gammam,rlvap_over_cp + use q_indices_mod, only: get_q_index, standard_q_names + use interpolation_mod, only: piecewise_linear_1d, interpolate_point_linear_1d, interpolate_point_linear_2d + use registry_mod, only : is_component_enabled + use netcdf, only : nf90_noerr, nf90_global, nf90_nowrite, & + nf90_inquire_attribute, nf90_open, nf90_strerror, & + nf90_inq_dimid, nf90_inquire_dimension, nf90_inq_varid, & + nf90_get_var, nf90_inquire, nf90_close, nf90_get_att, & + nf90_ebaddim, nf90_enotatt, nf90_enotvar, nf90_inquire_attribute + ! use existing fluxlook functionality + use setfluxlook_mod, only : set_look, change_look + ! re-initialise lowerbc module as z0 and z0th change over time + use lowerbc_mod, only: tstrcona, rhmbc, ddbc, ddbc_x4, eecon, r2ddbc, rcmbc, tstrconb, & + x4con, xx0con, y2con, yy0con, viscous_courant_coefficient + use saturation_mod, only : qsaturation + ! supersede initialisation from mcf file in grid manager + use gridmanager_mod, only : set_up_vertical_reference_properties,set_anelastic_pressure, & + setup_reference_state_liquid_water_temperature_and_saturation, & + calculate_mixing_length_for_neutral_case, set_buoyancy_coefficient + use datadefn_mod, only : DEFAULT_PRECISION, PRECISION_TYPE + use mpi, only : MPI_SUM, MPI_IN_PLACE + use socrates_couple_mod, only: socrates_opt + use def_socrates_options, only: str_socrates_options + + implicit none + +#ifndef TEST_MODE + private +#endif + + real(kind=DEFAULT_PRECISION), allocatable :: time_dephy(:) + real(kind=DEFAULT_PRECISION), allocatable :: height_dephy(:) + real(kind=DEFAULT_PRECISION), allocatable :: module_z(:) + real(kind=DEFAULT_PRECISION), allocatable :: module_zn(:) + real(kind=DEFAULT_PRECISION), allocatable :: full_theta(:,:,:) + real(kind=DEFAULT_PRECISION), parameter :: proper_pi=atan(1.0_DEFAULT_PRECISION) * 4.0_DEFAULT_PRECISION + + character(len=STRING_LENGTH) :: dephy_file + integer :: ncid_dephy + integer :: time_len_dephy + integer :: height_len_dephy + integer :: kkp !module wide parameter for vertical grid + logical :: l_verbose=.false. ! Temporary flag for dirty debugging + ! Three parameters below are meant to catch the model being in column mode. + integer :: column_check_x ! + integer :: column_check_y ! + integer :: n_dephy_passes=0 ! start checking after the initial two dephy passes + + ! Surface fields (time-dependent) + real(kind=DEFAULT_PRECISION), allocatable :: lat_traj_dephy(:), & + lon_traj_dephy(:), & + ps_forc_dephy(:), & + ts_dephy(:), & + sfc_sens_flx_dephy(:), & + sfc_lat_flx_dephy(:), & + z0_traj_dephy(:), & + z0th_traj_dephy(:), & + ustar_dephy(:), & + u_traj_dephy(:), & + v_traj_dephy(:), & + albedo_traj_dephy(:), & + q_skin_traj_dephy(:) + + ! Surface fields at time step + real(kind=DEFAULT_PRECISION) :: lat_traj, & + lon_traj, & + ps_forc, & + ts, & + sfc_sens_flx, & + sfc_lat_flx, & + z0_traj, & + z0th_traj, & + ustar, & + u_traj, & + v_traj, & + albedo_traj, & + q_skin_traj + + ! Initial fields on MONC vertical grid + real(kind=DEFAULT_PRECISION), allocatable :: u_dephy(:), & + v_dephy(:), & + theta_dephy(:), & + rv_dephy(:), & + tke_dephy(:) + + ! Forcing fields on MONC vertical grid (time-dependent) + real(kind=DEFAULT_PRECISION), allocatable :: height_forc_dephy(:,:), & + pressure_forc_dephy(:,:), & + ug_dephy(:,:), & + vg_dephy(:,:), & + u_adv_dephy(:,:), & + v_adv_dephy(:,:), & + theta_adv_dephy(:,:), & + theta_rad_dephy(:,:), & + rv_adv_dephy(:,:), & + w_dephy(:,:), & + theta_nudging_dephy(:,:), & + rv_nudging_dephy(:,:), & + u_nudging_dephy(:,:), & + v_nudging_dephy(:,:), & + nudging_inv_u_traj_dephy(:,:), & + nudging_inv_v_traj_dephy(:,:), & + nudging_inv_theta_traj_dephy(:,:), & + nudging_inv_rv_traj_dephy(:,:) + + ! Forcing fields during a time step + real(kind=DEFAULT_PRECISION), allocatable :: height_forc(:), & + pressure_forc(:), & + ug(:), & + vg(:), & + u_adv(:), & + v_adv(:), & + theta_adv(:), & + theta_rad(:), & + rv_adv(:), & + w(:), & + theta_nudging(:), & + rv_nudging(:), & + u_nudging(:), & + v_nudging(:), & + nudging_inv_u_traj(:), & + nudging_inv_v_traj(:), & + nudging_inv_theta_traj(:), & + nudging_inv_rv_traj(:) + + ! Dephy flags: applied only during simulation + integer :: int_adv_theta, & + int_adv_rv, & + int_rad_theta, & + int_forc_w, & + int_forc_geo, & + int_nudging_u, & + int_nudging_v, & + int_nudging_theta, & + int_nudging_rv + + ! EUREC4A nudging procedure + integer :: int_inversion_nudging=0 ! Flag for inversion nudging (optional DEPHY extension) + real(kind=DEFAULT_PRECISION), allocatable :: theta_l(:,:,:) + real(kind=DEFAULT_PRECISION), allocatable :: theta_l_mean(:) + real(kind=DEFAULT_PRECISION) :: inversion_nudging_height_above + real(kind=DEFAULT_PRECISION) :: inversion_nudging_transition + real(kind=DEFAULT_PRECISION) :: inversion_nudging_time + + ! Dephy strings + character(len=STRING_LENGTH):: str_surfaceType, & + str_surfaceForcing, & + str_surfaceForcingWind + + public dephy_forcings_get_descriptor + +contains + + !> Provides the descriptor back to the caller and is used in component registration + !! @returns The dephy_forcings component descriptor + type(component_descriptor_type) function dephy_forcings_get_descriptor() + dephy_forcings_get_descriptor%name="dephy_forcings" + dephy_forcings_get_descriptor%version=0.1 + dephy_forcings_get_descriptor%initialisation=>initialise_callback + dephy_forcings_get_descriptor%timestep=>timestep_callback + end function dephy_forcings_get_descriptor + + + !> Called during initialisation and will initialise the horizontal and vertical grid configurations + !! Note that the model state_mod (from a checkpoint or external file) must have been initialised already + !! @param current_state The current model state_mod + subroutine initialise_callback(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + type(vertical_grid_configuration_type) :: vertical_grid + integer :: alloc_z, alloc_y, alloc_x + + !if(current_state%parallel%my_rank==0) then + ! l_verbose=.true. + !endif + + if(l_verbose) write(*,*) "initialising dephy" + + alloc_z=current_state%local_grid%size(Z_INDEX) + current_state%local_grid%halo_size(Z_INDEX) * 2 + alloc_y=current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2 + alloc_x=current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2 + + !!! Might need re-thinking: vertical grid passed into subroutines as well as current state + if (.not. current_state%initialised) then + call log_log(LOG_ERROR, "Must initialise the model state_mod before constructing the grid properties") + end if + + vertical_grid=current_state%global_grid%configuration%vertical + + ! get DEPHY filename, which needs to be trimmed + dephy_file=options_get_string(current_state%options_database, "dephy_file") + kkp=current_state%local_grid%size(Z_INDEX) + + ! allocate module arrays + allocate(module_z(kkp)) + allocate(module_zn(kkp)) + allocate(full_theta(alloc_z, alloc_y, alloc_x)) + allocate(height_forc(kkp)) + allocate(pressure_forc(kkp)) + allocate(ug(kkp)) + allocate(vg(kkp)) + allocate(u_adv(kkp)) + allocate(v_adv(kkp)) + allocate(theta_adv(kkp)) + allocate(theta_rad(kkp)) + allocate(rv_adv(kkp)) + allocate(w(kkp)) + allocate(theta_nudging(kkp)) + allocate(rv_nudging(kkp)) + allocate(u_nudging(kkp)) + allocate(v_nudging(kkp)) + allocate(nudging_inv_u_traj(kkp)) + allocate(nudging_inv_v_traj(kkp)) + allocate(nudging_inv_theta_traj(kkp)) + allocate(nudging_inv_rv_traj(kkp)) + allocate(theta_l_mean(kkp)) + allocate(theta_l(alloc_z, alloc_y, alloc_x)) + + if(l_verbose) write(*,*) "initialised dephy 1" + + module_z=vertical_grid%z(:) + module_zn=vertical_grid%zn(:) + + if(l_verbose) write(*,*) "initialised dephy 2" + + call check_status(nf90_open(path = trim(dephy_file), mode = nf90_nowrite, ncid = ncid_dephy)) + + if(l_verbose) write(*,*) "initialised dephy 3" + + call dephy_read_dimension_variables() ! reads the forcing time and height variables + call dephy_read_profile_variables() ! does profile initialisation + call dephy_read_forcing_variables() ! reads and interpolates forcings + call dephy_read_surface_variables() ! reads and interpolates forcings + call dephy_read_integers() ! reads flags + call dephy_read_strings() ! reads strings + call dephy_read_inversion_nudging() + + if(l_verbose) write(*,*) "initialised dephy 4" + + call dephy_sanity_checks(current_state) ! checks for incompatible elements + + if(l_verbose) write(*,*) "initialised dephy 5" + + call dephy_time_interpolate(current_state) ! needed to get such things as z0 + + if(l_verbose) write(*,*) "initialised dephy 6" + + call dephy_profiles_etc(current_state, vertical_grid) ! initialises proiles/reference profiles + + if(l_verbose) write(*,*) "initialised dephy 7" + + call dephy_setfluxlook_init(current_state) ! initialises surface + + if(l_verbose) write(*,*) "initialised dephy 8" + + call check_status(nf90_close(ncid_dephy)) + + if(l_verbose) write(*,*) "initialised dephy 10" + + if(l_verbose) call dephy_bughunting(current_state) + + end subroutine initialise_callback + + + subroutine timestep_callback(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + + ! update forcing and current fields + call dephy_time_interpolate(current_state) + call dephy_column_mode_check(current_state) + + ! Reset z0 and z0th, and related parameters + z0=z0_traj + z0th=z0th_traj + current_state%global_grid%configuration%vertical%zlogm=& + log(1.0_DEFAULT_PRECISION+current_state%global_grid%configuration%vertical%zn(2)/z0) + current_state%global_grid%configuration%vertical%zlogth=& + log((current_state%global_grid%configuration%vertical%zn(2)+z0)/z0th) + current_state%global_grid%configuration%vertical%vk_on_zlogm=& + von_karman_constant/current_state%global_grid%configuration%vertical%zlogm + + if(l_verbose) write(*,*) "dephy timestep 1" + + call dephy_setfluxlook_timestep(current_state) + + if(l_verbose) write(*,*) "dephy timestep 2" + + call dephy_apply_forcings(current_state) + + if(l_verbose) write(*,*) "dephy timestep 3" + + ! re-initialisation needed as z0 and z0th means lowerbc needs reinitialisation + call lowerbc_reset_constants(current_state) + + if(l_verbose) write(*,*) "dephy timestep 4" + + if(l_verbose) call dephy_bughunting(current_state) + if(l_verbose) call dephy_dirty_diagnostics() + + end subroutine timestep_callback + + + subroutine dephy_sanity_checks(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + + !! Check for initialisation from mcf file (incompatible) + logical :: l_init_pl_u ! if .true. then initialize u field from mcf file + logical :: l_init_pl_v ! if .true. then initialize v field + logical :: l_init_pl_theta ! if .true. then initialize potential temperature field + logical :: l_init_pl_temp ! if .true. then initialize temperature field + logical :: l_init_pl_rh ! if .true. then initialize relative humidity field + logical :: l_init_pl_q ! if .true. then initialize q fields + real(kind=DEFAULT_PRECISION) :: termination_time, zztop, max_height_cloud + + !! Check if incompatible routines are enabled + !! Check if incompatible flags are set + + !! Check "standard" coriolis force not activated + !! Check "other" forcings routine not acticated + !! Check mean profiles are enabled if nudging is used + !! Check radiation scheme is compatible (ACTIVATED if 0, DEACTIVATED otherwise) + !! Check initialisation from profiles not activated + !! Check not current_state%passive_q .or. current_state%passive_th + !! Check current_state%number_q_fields > 0 + !! Check for inconsistent surface conditions. Make sure setfluxlook component is not active + !! Catch ustar-based setups (check earlier work on BOMEX for potential fix). + + if (is_component_enabled(current_state%options_database, "setfluxlook")) then + call log_master_log(LOG_ERROR, "DEPHY: setfluxlook component incompatible with dephy forcing") + endif + if (is_component_enabled(current_state%options_database, "forcing")) then + call log_master_log(LOG_ERROR, "DEPHY: forcing component incompatible with dephy forcing") + endif + if(is_component_enabled(current_state%options_database, "socrates_couple")) then + if(int_rad_theta==1) then + call log_master_log(LOG_ERROR, "DEPHY: socrates_couple component incompatible with dephy flag rad_theta==1") + endif + endif + if(.not. is_component_enabled(current_state%options_database, "socrates_couple")) then + if(int_rad_theta==0) then + call log_master_log(LOG_ERROR, "DEPHY: absence of socrates_couple component incompatible with dephy flag rad_theta==0") + endif + endif + if (is_component_enabled(current_state%options_database, "lwrad_exponential")) then + call log_master_log(LOG_ERROR, "DEPHY: lwrad_exponential component incompatible with dephy forcing") + endif + if (.not. is_component_enabled(current_state%options_database, "buoyancy")) then + call log_master_log(LOG_ERROR, "DEPHY: absence of buoyancy component incompatible with dephy forcing") + endif + if (.not. is_component_enabled(current_state%options_database, "lower_bc")) then + call log_master_log(LOG_ERROR, "DEPHY: absence of lower_bc component incompatible with dephy forcing") + endif + if (.not. is_component_enabled(current_state%options_database, "set_consistent_lowbc")) then + call log_master_log(LOG_ERROR, "DEPHY: absence of set_consistent_lowbc component incompatible with dephy forcing") + endif + if (.not. is_component_enabled(current_state%options_database, "mean_profiles")) then + call log_master_log(LOG_ERROR, "DEPHY: absence of mean_profiles component incompatible with dephy forcing") + endif + if(.not. (trim(str_surfaceForcing)=="surfaceFlux" .or. trim(str_surfaceForcing)=="ts")) then + call log_master_log(LOG_ERROR, "DEPHY: surfaceForcing (thermodynamics) not implemented") + endif + if(.not. trim(str_surfaceForcingWind)=="z0_traj") then + call log_master_log(LOG_ERROR, "DEPHY: surfaceForcingWind not implemented") + endif + if(.not. current_state%number_q_fields > 0) then + call log_master_log(LOG_ERROR, "DEPHY: dephy_forcings need current_state%number_q_fields > 0") + endif + if(current_state%passive_q) then + call log_master_log(LOG_ERROR, "DEPHY: dephy_forcings incompatible with passive_q") + endif + if(current_state%passive_th) then + call log_master_log(LOG_ERROR, "DEPHY: dephy_forcings incompatible with passive_th") + endif + l_init_pl_theta=options_get_logical(current_state%options_database, "l_init_pl_theta") + l_init_pl_temp=options_get_logical(current_state%options_database, "l_init_pl_temp") + l_init_pl_rh=options_get_logical(current_state%options_database, "l_init_pl_rh") + l_init_pl_q=options_get_logical(current_state%options_database, "l_init_pl_q") + l_init_pl_u=options_get_logical(current_state%options_database, "l_init_pl_u") + l_init_pl_v=options_get_logical(current_state%options_database, "l_init_pl_v") + if(l_init_pl_theta .or. l_init_pl_temp .or. l_init_pl_rh .or. l_init_pl_q .or. & + l_init_pl_u .or. l_init_pl_v) then + call log_master_log(LOG_ERROR, & + "DEPHY: dephy_forcings incompatible with initialisation of profiles using "//& + "l_init_pl_theta or l_init_pl_temp or l_init_pl_rh or l_init_pl_q or l_init_pl_u or l_init_pl_v") + endif + termination_time=options_get_real(current_state%options_database, "termination_time") + if(termination_time>time_dephy(time_len_dephy)) then + call log_master_log(LOG_ERROR, "DEPHY: termination time beyond last time in forcing file") + endif + zztop=options_get_real(current_state%options_database, "zztop") + if(zztop>height_dephy(height_len_dephy)) then + call log_master_log(LOG_ERROR, "DEPHY: zztop beyond highest level in forcing file") + endif + max_height_cloud=options_get_real(current_state%options_database, "max_height_cloud") + if(max_height_cloud0. .and. w_prof(kk+1)>0.) then + ! UPSIDENCE: GET TENDENCY USING LEVEL BELOW + tendency(kk,jj,ii)=tendency(kk,jj,ii)-w_prof(kk)*& + (field(kk,jj,ii)-field(kk-1,jj,ii))/(module_zn(kk)-module_zn(kk-1)) + else + ! NO CONSISTENT SIGN OF SUBSIDENCE PROFILE, USE MEAN GRADIENTS AND VELOCITIES? + tendency(kk,jj,ii)=tendency(kk,jj,ii)-0.5_DEFAULT_PRECISION*& + (w_prof(kk+1)+w_prof(kk))*(field(kk+1,jj,ii)-field(kk-1,jj,ii))/(module_zn(kk+1)-module_zn(kk-1)) + end if + end do + tendency(kkp,jj,ii)=tendency(kkp,jj,ii)-w_prof(kkp)*& + (field(kkp,jj,ii)-field(kkp-1,jj,ii))/(module_zn(kkp)-module_zn(kkp-1)) + end do + end do + + end subroutine + + ! Implements energy consistent (non-traditional) coriolis force using time-dependent geostrophic wind + subroutine dephy_coriolis(u,v,w,u_geo,v_geo,u_gal,v_gal,lat,su,sv,sw) + implicit none + real(kind=DEFAULT_PRECISION), intent(in) :: u(:,:,:),v(:,:,:),w(:,:,:) + real(kind=DEFAULT_PRECISION), intent(in) :: u_geo(:),v_geo(:) + real(kind=DEFAULT_PRECISION), intent(in) :: u_gal,v_gal + real(kind=DEFAULT_PRECISION), intent(in) :: lat + real(kind=DEFAULT_PRECISION), intent(inout) :: su(:,:,:),sv(:,:,:),sw(:,:,:) + real(kind=DEFAULT_PRECISION) :: fcoriol, fcoriol2 + real(kind=DEFAULT_PRECISION), parameter :: omega_earth=7.2921e-5 ! radial frecuency of earth's rotation + integer ii,jj,kk + + fcoriol=2.0_DEFAULT_PRECISION*omega_earth*sin(lat*proper_pi/180.0_DEFAULT_PRECISION) + ! Non-traditional coriolis terms, needed for energy-consistency + ! See e.g. Igel and Biello 2020 + ! Note geostrophic wind parametrises pressure gradients, and is therefore not in the non-traditional terms. + fcoriol2=2.0_DEFAULT_PRECISION*omega_earth*cos(lat*proper_pi/180.0_DEFAULT_PRECISION) + +#if defined(U_ACTIVE) && defined(V_ACTIVE) + do ii=2,size(su,3)-1 + do jj=2,size(su,2)-1 + do kk=2,kkp + su(kk, jj, ii)=su(kk, jj, ii)+fcoriol*& + (0.25_DEFAULT_PRECISION*(v(kk, jj, ii)+v(kk, jj, ii+1)+& + v(kk, jj-1, ii)+v(kk, jj-1, ii+1))+& + v_gal-v_geo(kk))-& + fcoriol2*& + (0.25_DEFAULT_PRECISION*(w(kk, jj, ii)+w(kk, jj, ii+1)+& + w(kk-1, jj, ii)+w(kk-1, jj, ii+1))) + + sv(kk, jj, ii)=sv(kk, jj, ii)-fcoriol*& + (0.25_DEFAULT_PRECISION*(u(kk, jj, ii)+u(kk, jj, ii-1)+& + u(kk, jj+1, ii)+u(kk, jj+1, ii-1))+& + u_gal-u_geo(kk)) + + end do + do kk=2,kkp-1 + sw(kk, jj, ii)=sw(kk,jj,ii)+fcoriol2*& + (0.25_DEFAULT_PRECISION*(u(kk, jj, ii)+u(kk+1, jj, ii)+& + u(kk, jj, ii-1)+u(kk+1, jj, ii-1))+u_gal) + end do + end do + end do +#endif + + end subroutine dephy_coriolis + + + subroutine dephy_time_interpolate(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + + ! interpolate surface variables + call interpolate_point_linear_1d(time_dephy, lat_traj_dephy, current_state%time, lat_traj) + call interpolate_point_linear_1d(time_dephy, lon_traj_dephy, current_state%time, lon_traj) + call interpolate_point_linear_1d(time_dephy, ps_forc_dephy, current_state%time, ps_forc) + call interpolate_point_linear_1d(time_dephy, ts_dephy, current_state%time, ts) + call interpolate_point_linear_1d(time_dephy, sfc_sens_flx_dephy, current_state%time, sfc_sens_flx) + call interpolate_point_linear_1d(time_dephy, sfc_lat_flx_dephy, current_state%time, sfc_lat_flx) + call interpolate_point_linear_1d(time_dephy, z0_traj_dephy, current_state%time, z0_traj) + call interpolate_point_linear_1d(time_dephy, z0th_traj_dephy, current_state%time, z0th_traj) + call interpolate_point_linear_1d(time_dephy, ustar_dephy, current_state%time, ustar) + call interpolate_point_linear_1d(time_dephy, u_traj_dephy, current_state%time, u_traj) + call interpolate_point_linear_1d(time_dephy, v_traj_dephy, current_state%time, v_traj) + call interpolate_point_linear_1d(time_dephy, albedo_traj_dephy, current_state%time, albedo_traj) + call interpolate_point_linear_1d(time_dephy, q_skin_traj_dephy, current_state%time, q_skin_traj) + + ! interpolate height-dependent variables + call interpolate_point_linear_2d(time_dephy, height_forc_dephy, current_state%time, height_forc) + call interpolate_point_linear_2d(time_dephy, pressure_forc_dephy, current_state%time, pressure_forc) + call interpolate_point_linear_2d(time_dephy, ug_dephy, current_state%time, ug) + call interpolate_point_linear_2d(time_dephy, vg_dephy, current_state%time, vg) + call interpolate_point_linear_2d(time_dephy, u_adv_dephy, current_state%time, u_adv) + call interpolate_point_linear_2d(time_dephy, v_adv_dephy, current_state%time, v_adv) + call interpolate_point_linear_2d(time_dephy, theta_adv_dephy, current_state%time, theta_adv) + call interpolate_point_linear_2d(time_dephy, theta_rad_dephy, current_state%time, theta_rad) + call interpolate_point_linear_2d(time_dephy, rv_adv_dephy, current_state%time, rv_adv) + call interpolate_point_linear_2d(time_dephy, w_dephy, current_state%time, w) + call interpolate_point_linear_2d(time_dephy, theta_nudging_dephy, current_state%time, theta_nudging) + call interpolate_point_linear_2d(time_dephy, rv_nudging_dephy, current_state%time, rv_nudging) + call interpolate_point_linear_2d(time_dephy, u_nudging_dephy, current_state%time, u_nudging) + call interpolate_point_linear_2d(time_dephy, v_nudging_dephy, current_state%time, v_nudging) + if(int_inversion_nudging==0) then + call interpolate_point_linear_2d(time_dephy, nudging_inv_u_traj_dephy, current_state%time, nudging_inv_u_traj) + call interpolate_point_linear_2d(time_dephy, nudging_inv_v_traj_dephy, current_state%time, nudging_inv_v_traj) + call interpolate_point_linear_2d(time_dephy, nudging_inv_theta_traj_dephy, current_state%time, nudging_inv_theta_traj) + call interpolate_point_linear_2d(time_dephy, nudging_inv_rv_traj_dephy, current_state%time, nudging_inv_rv_traj) + endif + end subroutine dephy_time_interpolate + + real(kind=DEFAULT_PRECISION) function cos_transition(absolute_input, transition_start, transition_end) + real(kind=DEFAULT_PRECISION), intent(in) :: absolute_input + real(kind=DEFAULT_PRECISION), intent(in) :: transition_start + real(kind=DEFAULT_PRECISION), intent(in) :: transition_end + real(kind=DEFAULT_PRECISION) :: normalised_input + + ! function that smoothly transitions from 1 to 0 using a + ! cosine-shaped transition between start and end + ! start can be larger than end, in which case is applies in reverse order + normalised_input = (absolute_input-transition_start)/(transition_end-transition_start) + if(normalised_input<0.0_DEFAULT_PRECISION) then + cos_transition=1.0_DEFAULT_PRECISION + elseif(normalised_input>1.0_DEFAULT_PRECISION) then + cos_transition=0.0_DEFAULT_PRECISION + else + cos_transition=0.5_DEFAULT_PRECISION+0.5_DEFAULT_PRECISION*cos(normalised_input*proper_pi) + end if + end function cos_transition + + + subroutine dephy_calc_interactive_nudging_profiles(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + real(kind=DEFAULT_PRECISION) :: theta_l_max_grad + real(kind=DEFAULT_PRECISION) :: z_inversion + real(kind=DEFAULT_PRECISION) :: this_weight + integer :: ii,iql,jj,kk,kk_inversion_plus + iql=get_q_index(standard_q_names%CLOUD_LIQUID_MASS, 'dephy_forcings') + + ! calculate theta_l + ! average theta_l + do ii=1,size(theta_l,3) + do jj=1,size(theta_l,2) + do kk=1,size(theta_l,1) + theta_l(kk,jj,ii)=full_theta(kk,jj,ii)-& + current_state%sq(iql)%data(kk,jj,ii)*rlvap_over_cp/current_state%global_grid%configuration%vertical%rprefrcp(kk) + end do + end do + end do + call calculate_theta_l_mean(current_state) + theta_l_max_grad=0.0_DEFAULT_PRECISION + do kk=2,size(theta_l,1) + if(module_zn(kk)<6000.0_DEFAULT_PRECISION) then ! clip at 6 km, currently hardcoded + if((theta_l_mean(kk)-theta_l_mean(kk-1))/(module_zn(kk)-module_zn(kk-1))>theta_l_max_grad) then + theta_l_max_grad=(theta_l_mean(kk)-theta_l_mean(kk-1))/(module_zn(kk)-module_zn(kk-1)) + kk_inversion_plus=kk + end if + else if(kk_inversion_plus==0) then + kk_inversion_plus=kk + end if + end do + z_inversion=0.5_DEFAULT_PRECISION*(module_zn(kk_inversion_plus)+module_zn(kk_inversion_plus-1)) + do kk=1,size(theta_l,1) + this_weight=cos_transition(module_zn(kk),z_inversion+inversion_nudging_height_above+inversion_nudging_transition,& + z_inversion+inversion_nudging_height_above) + nudging_inv_u_traj(kk)=this_weight/inversion_nudging_time + nudging_inv_v_traj(kk)=this_weight/inversion_nudging_time + nudging_inv_theta_traj(kk)=this_weight/inversion_nudging_time + nudging_inv_rv_traj(kk)=this_weight/inversion_nudging_time + end do + + end subroutine dephy_calc_interactive_nudging_profiles + + subroutine dephy_apply_forcings(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + ! Surface fields, in time + integer:: iqv,nn + + iqv=get_q_index(standard_q_names%VAPOUR, 'dephy_forcings') + + ! CALCULATE COMPLETE THETA AND THETA_L + call dephy_add_profile(current_state%th%data,current_state%global_grid%configuration%vertical%thref,full_theta) + if(int_inversion_nudging==1) then + call dephy_calc_interactive_nudging_profiles(current_state) + endif + + ! APPLY FORCINGS + ! NUDGINGS NEED MEAN +#ifdef U_ACTIVE + if(int_nudging_u==1) then + call dephy_apply_nudging(current_state%global_grid%configuration%vertical%olubar,& + u_nudging,nudging_inv_u_traj,current_state%su%data) + end if +#endif +#ifdef V_ACTIVE + if(int_nudging_v==1) then + call dephy_apply_nudging(current_state%global_grid%configuration%vertical%olvbar,& + v_nudging,nudging_inv_v_traj,current_state%sv%data) + end if +#endif + if(int_nudging_theta==1) then + call dephy_apply_nudging(current_state%global_grid%configuration%vertical%olthbar+& + current_state%global_grid%configuration%vertical%thref,& + theta_nudging,nudging_inv_theta_traj,current_state%sth%data) + end if + if(int_nudging_rv==1) then + call dephy_apply_nudging(current_state%global_grid%configuration%vertical%olqbar(:,iqv),& + rv_nudging,nudging_inv_rv_traj,current_state%sq(iqv)%data) + end if + + ! PROFILES +#ifdef U_ACTIVE + call dephy_apply_tendency(u_adv,current_state%su%data) +#endif +#ifdef V_ACTIVE + call dephy_apply_tendency(v_adv,current_state%sv%data) +#endif + if(int_adv_theta==1) then + call dephy_apply_tendency(theta_adv,current_state%sth%data) + end if + if(int_adv_rv==1) then + call dephy_apply_tendency(rv_adv,current_state%sq(iqv)%data) + end if + + ! RADIATION TENDENCIES + if(int_rad_theta==0) then + call dephy_update_socrates(socrates_opt,lat_traj,lon_traj,albedo_traj) + elseif(int_rad_theta==1) then + call dephy_apply_tendency(theta_rad,current_state%sth%data) + end if + + ! LARGE-SCALE VERTICAL WIND + ! USE A DOWNWIND FORMULATION (AS IN DALES), + ! SO ADVECTION ONLY IN DIRECTION OF WIND + ! ALWAYS USE LOCAL GRADIENTS, AS NON-LOCAL ONES ARE UNPHYSICAL + ! APPLY TO ALL Q SPECIES + if(int_forc_w ==1) then +#ifdef U_ACTIVE + call dephy_apply_subsidence(w,current_state%u%data,current_state%su%data) +#endif +#ifdef V_ACTIVE + call dephy_apply_subsidence(w,current_state%v%data,current_state%sv%data) +#endif + end if + if((int_forc_w ==1) .OR. (int_forc_w==2)) then + call dephy_apply_subsidence(w,full_theta,current_state%sth%data) + DO nn=1,current_state%number_q_fields + call dephy_apply_subsidence(w,current_state%q(nn)%data,current_state%sq(nn)%data) + END DO + end if + + ! IMPLEMENTATION OF FULL CORIOLIS FORCE + if(int_forc_geo==1) then + call dephy_coriolis(current_state%u%data,current_state%v%data,current_state%w%data,& + ug,vg,current_state%ugal,current_state%vgal,lat_traj,& + current_state%su%data,current_state%sv%data,current_state%sw%data) + end if + + end subroutine dephy_apply_forcings + + + subroutine dephy_initial_profiles(current_state) + implicit none + type(model_state_type), target, intent(inout) :: current_state + integer :: iqv + logical :: l_matchthref + + iqv=get_q_index(standard_q_names%VAPOUR, 'dephy_forcings') + l_matchthref=options_get_logical(current_state%options_database, "l_matchthref") + if(l_matchthref) then + if(.not. current_state%use_anelastic_equations) then + call log_master_log(LOG_ERROR, "Non-anelastic equation set and l_maththref are incompatible") + end if + current_state%global_grid%configuration%vertical%thref(:)=theta_dephy + else + current_state%global_grid%configuration%vertical%thref(:)=current_state%thref0 + endif + + call dephy_set_profile(u_dephy,current_state%u%data) + call dephy_set_profile(u_dephy,current_state%zu%data) + call dephy_set_profile(v_dephy,current_state%v%data) + call dephy_set_profile(v_dephy,current_state%zv%data) + call dephy_set_profile(theta_dephy-current_state%global_grid%configuration%vertical%thref,current_state%th%data) + call dephy_set_profile(theta_dephy-current_state%global_grid%configuration%vertical%thref,current_state%zth%data) + ! Note q in MONC is mixing ratio (rather than specific humidity, as is more usual) + call dephy_set_profile(rv_dephy,current_state%q(iqv)%data) + call dephy_set_profile(rv_dephy,current_state%zq(iqv)%data) + + end subroutine dephy_initial_profiles + + !!! THIS SHOULD LIKELY COME FROM A UTILITIES MODULE + !> Will check a NetCDF status and write to log_log error any decoded statuses. Can be used to decode + !! whether a dimension or variable exists within the NetCDF data file + !! @param status The NetCDF status flag + !! @param foundFlag Whether the field has been found or not + subroutine check_status(status, found_flag) + integer, intent(in) :: status + logical, intent(out), optional :: found_flag + + if (present(found_flag)) then + found_flag = status /= nf90_ebaddim .and. status /= nf90_enotatt .and. status /= nf90_enotvar + if (.not. found_flag) return + end if + + if (status /= nf90_noerr) then + call log_log(LOG_ERROR, "NetCDF returned error code of "//trim(nf90_strerror(status))) + end if + end subroutine check_status + + !!! THIS SUBROUTINE REPLACES set_vertical_reference_profile IN gridmanager.F90 + !> Sets up the vertical grid reference profile at each point + !! @param current_state The current model state_mod + !! @param vertical_grid The vertical grid that we are working on + !! @param kkp Number of grid points in a vertical column + subroutine dephy_profiles_etc(current_state, vertical_grid) + implicit none + type(model_state_type), intent(inout) :: current_state + type(vertical_grid_configuration_type), intent(inout) :: vertical_grid + + integer :: k + + call dephy_initial_profiles(current_state) + call set_up_vertical_reference_properties(current_state, vertical_grid, current_state%global_grid%size(Z_INDEX)) + + if(l_verbose) write(*,*) "initialised dephy 6.3" + + call set_anelastic_pressure(current_state) + + ! THIS CRUCIAL STATEMENT IS HIDDEN IN set_qv_init_from_rh in gridmanager.F90 + vertical_grid=current_state%global_grid%configuration%vertical + + if(l_verbose) write(*,*) "initialised dephy 6.4" + + do k=2,kkp-1 + ! for diffusion onto p-level from below + vertical_grid%czb(k)=(vertical_grid%rho(k-1)/vertical_grid%rhon(k))/(vertical_grid%dz(k)*vertical_grid%dzn(k)) + ! for diffusion onto p-level from above + vertical_grid%cza(k)=(vertical_grid%rho(k)/vertical_grid%rhon(k))/(vertical_grid%dz(k)*vertical_grid%dzn(k+1)) + vertical_grid%czg(k)=-vertical_grid%czb(k)-vertical_grid%cza(k) + if (k .gt. 2) vertical_grid%czh(k)=vertical_grid%czb(k)*vertical_grid%cza(k-1) + end do + do k=2,kkp-1 + ! advection onto p-level from below + vertical_grid%tzc1(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdz(k)*vertical_grid%rho(k-1)/vertical_grid%rhon(k) + ! advection onto p-level from above + vertical_grid%tzc2(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdz(k)*vertical_grid%rho(k)/vertical_grid%rhon(k) + end do + do k=2,kkp-1 + ! advection onto w-level (K) from below + vertical_grid%tzd1(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdzn(k+1)*vertical_grid%rhon(k)/vertical_grid%rho(k) + ! advection onto w-level (K) from above + vertical_grid%tzd2(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdzn(k+1)*vertical_grid%rhon(k+1)/vertical_grid%rho(k) + end do + k=kkp + vertical_grid%czb(k)=(vertical_grid%rho(k-1)/vertical_grid%rhon(k))/(vertical_grid%dz(k)*vertical_grid%dzn(k)) + vertical_grid%cza(k)=0.0_DEFAULT_PRECISION + vertical_grid%czg(k)=-vertical_grid%czb(k) + vertical_grid%czh(k)=vertical_grid%czb(k)*vertical_grid%cza(k-1) + vertical_grid%tzc2(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdz(k)*vertical_grid%rho(k)/vertical_grid%rhon(k) + vertical_grid%tzc1(k)=0.25_DEFAULT_PRECISION*vertical_grid%rdz(k)*vertical_grid%rho(k-1)/vertical_grid%rhon(k) + vertical_grid%czn=vertical_grid%dzn(2)*0.5_DEFAULT_PRECISION + vertical_grid%zlogm=log(1.0_DEFAULT_PRECISION+vertical_grid%zn(2)/z0) + vertical_grid%zlogth=log((vertical_grid%zn(2)+z0)/z0th) + vertical_grid%vk_on_zlogm=von_karman_constant/vertical_grid%zlogm + + if(l_verbose) write(*,*) "initialised dephy 6.5" + + call setup_reference_state_liquid_water_temperature_and_saturation(& + current_state, vertical_grid, current_state%global_grid%size(Z_INDEX)) + + if(l_verbose) write(*,*) "initialised dephy 6.6" + + call calculate_mixing_length_for_neutral_case(current_state, vertical_grid, current_state%global_grid%size(Z_INDEX)) + + if(l_verbose) write(*,*) "initialised dephy 6.7" + + call set_buoyancy_coefficient(current_state, vertical_grid, current_state%global_grid%size(Z_INDEX)) + + end subroutine dephy_profiles_etc + + !!! THIS SUBROUTINE REPLACES the initialisation_callback IN setfluxlook.F90 + subroutine dephy_setfluxlook_init(current_state) + type(model_state_type), intent(inout), target :: current_state + + integer, parameter :: LOOKUP_ENTRIES = 80 !< Number of entries for MO lookup tables + integer :: iqv + + current_state%lookup_table_entries=LOOKUP_ENTRIES + current_state%saturated_surface = .true. ! Copied from setfluxlook module + ! We will change this if we find some humidity data + allocate(current_state%lookup_table_velocity(current_state%lookup_table_entries), & + current_state%lookup_table_ustr(current_state%lookup_table_entries)) + + if(l_verbose) write(*,*) "initialised dephy 7.1" + + if (.not. allocated(current_state%cq))then + allocate(current_state%cq(current_state%number_q_fields)) + current_state%cq=0.0_DEFAULT_PRECISION + end if + + iqv = get_q_index(standard_q_names%VAPOUR, 'dephy_forcings') + current_state%cq(iqv) = ratio_mol_wts-1.0 + + if(l_verbose) write(*,*) "initialised dephy 7.2" + + if (trim(str_surfaceForcing) == "ts") then + current_state%type_of_surface_boundary_conditions = PRESCRIBED_SURFACE_VALUES + current_state%use_surface_boundary_conditions = .true. + else if (trim(str_surfaceForcing) == "surfaceFlux") then + current_state%type_of_surface_boundary_conditions = PRESCRIBED_SURFACE_FLUXES + current_state%use_surface_boundary_conditions = .true. + else + call log_master_log(LOG_ERROR, "Surface condition for dephy not implemented") + endif + + if(l_verbose) write(*,*) "initialised dephy 7.3" + + if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_FLUXES) then + call dephy_set_flux(current_state) + + current_state%fbuoy=0. + current_state%fbuoy=& + current_state%global_grid%configuration%vertical%buoy_co(1)*current_state%surface_temperature_flux+& + current_state%cq(iqv)*current_state%surface_vapour_flux*G + call set_look(current_state) + current_state%theta_surf=0.0_DEFAULT_PRECISION + current_state%surface_vapour_mixing_ratio=0.0_DEFAULT_PRECISION + else if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then ! Prescribed surface temperatures + call dephy_set_flux(current_state) + end if + + if(l_verbose) write(*,*) "initialised dephy 7.4" + + end subroutine dephy_setfluxlook_init + + !!! THIS SUBROUTINE REPLACES the timestep_callback IN setfluxlook.F90 + subroutine dephy_setfluxlook_timestep(current_state) + type(model_state_type), intent(inout), target :: current_state + + if(l_verbose) write(*,*) "dephy timestep 1.1" + call dephy_set_flux(current_state) + if(l_verbose) write(*,*) "dephy timestep 1.2" + call change_look(current_state) + if(l_verbose) write(*,*) "dephy timestep 1.3" + + end subroutine dephy_setfluxlook_timestep + + !!! THIS SUBROUTINE REPLACES the set_flux subroutine IN setfluxlook.F90 + subroutine dephy_set_flux(current_state) + type(model_state_type), intent(inout), target :: current_state + + integer :: iqv + iqv = get_q_index(standard_q_names%VAPOUR, 'dephy_forcings') + + if(l_verbose) write(*,*) "initialised dephy 7.3.1" + + if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_FLUXES) then ! Prescribed surface fluxes + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.0" + + current_state%surface_temperature_flux=sfc_sens_flx/(current_state%global_grid%configuration%vertical%rho(1)*cp) + current_state%surface_vapour_flux=sfc_lat_flx/(current_state%global_grid%configuration%vertical%rho(1)*rlvap) + + ! Update buoyancy flux... + current_state%fbuoynew=0.0_DEFAULT_PRECISION + current_state%fbuoynew=& + current_state%global_grid%configuration%vertical%buoy_co(1)*current_state%surface_temperature_flux + current_state%fbuoynew=current_state%fbuoynew+current_state%cq(iqv)*current_state%surface_vapour_flux*G + + else if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then ! Prescribed surface temperatures + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.1" + + if (current_state%saturated_surface)then + current_state%surface_vapour_mixing_ratio = qsaturation(ts,current_state%surface_pressure*0.01) + else + call log_master_log(LOG_ERROR, "DEPHY: prescribed surface vapout mixing ratio not implemented"//& + " (note q_skin is reservoir content!)") + end if + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.2" + + ! Set theta_v + current_state%theta_surf = ts*& + (current_state%surface_reference_pressure/current_state%surface_pressure)**r_over_cp + current_state%theta_virtual_surf = current_state%theta_surf + current_state%theta_virtual_surf = current_state%theta_surf + & + current_state%global_grid%configuration%vertical%thref(2)* & + current_state%cq(iqv)*current_state%surface_vapour_mixing_ratio + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.3" + + ! Finally set up new values of THVSURF dependent constants + current_state%cmbc=betam*current_state%global_grid%configuration%vertical%zn(2)*G*& + von_karman_constant/current_state%theta_virtual_surf + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.4" + + current_state%rcmbc=1.0_DEFAULT_PRECISION/current_state%cmbc + current_state%ellmocon=current_state%theta_virtual_surf/(G*von_karman_constant) + + if(l_verbose) write(*,*) "initialised dephy 7.3.1.5" + + end if + + end subroutine dephy_set_flux + + ! lowerbc need to re-initialise due to evolving z0/z0th + ! It is possible to improve on this by making more changes to the lowerbc code + subroutine lowerbc_reset_constants(current_state) + type(model_state_type), target, intent(inout) :: current_state + + real(kind=DEFAULT_PRECISION) :: bhbc + + if ( current_state%use_surface_boundary_conditions .and. & + current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then + ! variables below are only required when PRESCRIBED_SURFACE_VALUES are used. + tstrcona=von_karman_constant/alphah*current_state%global_grid%configuration%vertical%zlogth + bhbc=alphah*current_state%global_grid%configuration%vertical%zlogth + rhmbc=betah*(current_state%global_grid%configuration%vertical%zn(2)+z0-z0th)/& + (betam*current_state%global_grid%configuration%vertical%zn(2)) + ddbc=current_state%global_grid%configuration%vertical%zlogm*(bhbc-& + rhmbc*current_state%global_grid%configuration%vertical%zlogm) + ddbc_x4=4.*ddbc + r2ddbc=0.5_DEFAULT_PRECISION/ddbc + eecon=2.0_DEFAULT_PRECISION*rhmbc*current_state%global_grid%configuration%vertical%zlogm-bhbc + rcmbc=1.0_DEFAULT_PRECISION/current_state%cmbc + tstrconb=von_karman_constant/alphah + x4con=gammam*(current_state%global_grid%configuration%vertical%zn(2)+z0) + xx0con=gammam*z0 + y2con=gammah*(current_state%global_grid%configuration%vertical%zn(2)+z0) + yy0con=gammah*z0th + endif + + end subroutine lowerbc_reset_constants + + +!!! COPY OF PIECEWISE LINEAR INTERPOLATION ROUTINE, BUT INCLUDING THE K=1 LEVEL +!!! MAINLY TO BE SAFE + + !> Does a simple 1d linear interpolation to a point + !! @param zvals input z nodes + !! @param vals input nodal values + !! @param z location to interpolate onto + !! @param f output interpolated value + subroutine piecewise_linear_2d_k1(zvals, time_vals, vals, z, field) + + ! Assumes input variables (vals) are 2-D, with dims (z, time) + + real(kind=DEFAULT_PRECISION), intent(in) :: zvals(:), time_vals(:) + real(kind=DEFAULT_PRECISION), intent(in) :: vals(:,:) + real(kind=DEFAULT_PRECISION), intent(in) :: z(:) + real(kind=DEFAULT_PRECISION), intent(out) :: field(:,:) + + real(kind=DEFAULT_PRECISION) :: scale_tmp + + integer :: nn, k_monc, k_force ! loop counter + integer :: nz_force, nt_force, nz_monc, nt_monc ! time and height array sizes for forcing and monc grids + + nz_force = size(zvals) + nt_force = size(time_vals) + nz_monc = size(z) + nt_monc = size(time_vals) ! time is intepolated in the timestep callback + + if ( zvals(1) .GT. zvals(nz_force) ) then ! pressure + call log_master_log(LOG_ERROR, "Input forcing uses pressure, this has not been coded"// & + " - please modify your forcing file to using height coordinates or modify the" // & + " interpolation routine in model_core to work with pressure coords - STOP") + else + do k_monc=1,nz_monc + do k_force=1,nz_force-1 + if( z(k_monc) >= zvals(k_force) .AND. z(k_monc) < zvals(k_force+1) ) then + scale_tmp = ( z(k_monc) - zvals(k_force) ) / & + ( zvals(k_force+1) - zvals(k_force) ) + do nn=1, nt_force + field(k_monc,nn) = vals(k_force,nn) + & + ( vals(k_force+1,nn) - vals(k_force,nn) ) & + * scale_tmp + enddo + endif + enddo + enddo + ! now examine the cases below and above forlevs(1) and forlevs(ktmfor + ! uses the local vertical gradient in the forcing to determine the + ! new values + do k_monc=1,nz_monc + if ( z(k_monc) >= zvals(nz_force) ) then + scale_tmp = ( z(k_monc) - zvals(nz_force) ) & + / ( zvals(nz_force) - zvals(nz_force-1) ) + do nn=1,nt_force + field(k_monc,nn) = vals(nz_force,nn) + & + ( vals(nz_force,nn) - vals(nz_force-1,nn) ) & + * scale_tmp + enddo + elseif ( z(k_monc) < zvals(1) )THEN + scale_tmp = ( z(k_monc) - zvals(1) ) & + / ( zvals(1) - zvals(2) ) + do nn=1,nt_force + field(k_monc,nn) = vals(1,nn) + & + ( vals(1,nn) - vals(2,nn) ) & + * scale_tmp + enddo + endif + enddo + ! + endif ! pressure or height + + end subroutine piecewise_linear_2d_k1 + + +integer function maxloc1(field) + real(kind=DEFAULT_PRECISION), intent(in), dimension(:,:,:) :: field + integer, dimension(3) :: maxloc_res + maxloc_res=maxloc(field) + maxloc1=maxloc_res(1) +end function maxloc1 + + +integer function minloc1(field) + real(kind=DEFAULT_PRECISION), intent(in), dimension(:,:,:) :: field + integer, dimension(3) :: minloc_res + minloc_res=minloc(field) + minloc1=minloc_res(1) +end function minloc1 + + +subroutine dephy_bughunting(current_state) + implicit none + type(model_state_type), intent(in) :: current_state + integer:: iqv + + iqv=get_q_index(standard_q_names%VAPOUR, 'dephy_forcings') + + ! tendency debugging + write (*,'(A)') 'DEPHY MANUAL DEBUGGING ROUTINE' + write (*,*) 'time ',current_state%time + + write (*,'(A)') ' su sv sw sth sqv' + write (*,'(A,5ES12.2)') 'max vals',maxval(current_state%su%data), & + maxval(current_state%sv%data), maxval(current_state%sw%data), & + maxval(current_state%sth%data), maxval(current_state%sq(iqv)%data) + write (*,'(A,5I12)') 'max loc',maxloc1(current_state%su%data), & + maxloc1(current_state%sv%data), maxloc1(current_state%sw%data), & + maxloc1(current_state%sth%data), maxloc1(current_state%sq(iqv)%data) + write (*,'(A)') ' ' + write (*,'(A,5ES12.2)') 'min zvals',minval(current_state%su%data), & + minval(current_state%sv%data), minval(current_state%sw%data), & + minval(current_state%sth%data), minval(current_state%sq(iqv)%data) + write (*,'(A,5I12)') 'min zloc',minloc1(current_state%su%data), & + minloc1(current_state%sv%data), minloc1(current_state%sw%data), & + minloc1(current_state%sth%data), minloc1(current_state%sq(iqv)%data) + write (*,'(A)') ' ' + write (*,'(A)') ' ' + + ! value debugging + write (*,'(A)') ' u v w th qv' + write (*,'(A,5ES12.2)') 'max vals',maxval(current_state%u%data), & + maxval(current_state%v%data), maxval(current_state%w%data), & + maxval(current_state%th%data), maxval(current_state%q(iqv)%data) + write (*,'(A,5I12)') 'max zloc',maxloc1(current_state%u%data), & + maxloc1(current_state%v%data), maxloc1(current_state%w%data), & + maxloc1(current_state%th%data), maxloc1(current_state%q(iqv)%data) + write (*,'(A)') ' ' + write (*,'(A,5ES12.2)') 'min vals',minval(current_state%u%data), & + minval(current_state%v%data), minval(current_state%w%data), & + minval(current_state%th%data), minval(current_state%q(iqv)%data) + write (*,'(A,5I12)') 'min zloc',minloc1(current_state%u%data), & + minloc1(current_state%v%data), minloc1(current_state%w%data), & + minloc1(current_state%th%data), minloc1(current_state%q(iqv)%data) + write (*,'(A)') ' ' + write (*,'(A)') ' ' + + !z value debugging + write (*,'(A)') ' zu zv zw zth zqv' + write (*,'(A,5ES12.2)') 'max vals',maxval(current_state%zu%data), & + maxval(current_state%zv%data), maxval(current_state%zw%data), & + maxval(current_state%zth%data), maxval(current_state%zq(iqv)%data) + write (*,'(A,5I12)') 'max zloc',maxloc1(current_state%zu%data), & + maxloc1(current_state%zv%data), maxloc1(current_state%zw%data), & + maxloc1(current_state%zth%data), maxloc1(current_state%zq(iqv)%data) + write (*,'(A)') ' ' + write (*,'(A,5ES12.2)') 'min vals',minval(current_state%zu%data), & + minval(current_state%zv%data), minval(current_state%zw%data), & + minval(current_state%zth%data), minval(current_state%zq(iqv)%data) + write (*,'(A,5I12)') 'min zloc',minloc1(current_state%zu%data), & + minloc1(current_state%zv%data), minloc1(current_state%zw%data), & + minloc1(current_state%zth%data), minloc1(current_state%zq(iqv)%data) + +end subroutine dephy_bughunting + +subroutine calculate_theta_l_mean(current_state) + type(model_state_type), intent(inout) :: current_state + + integer :: k, ierr + real(kind=DEFAULT_PRECISION) :: rnhpts + + rnhpts=1.0_DEFAULT_PRECISION/real(current_state%global_grid%size(X_INDEX)*current_state%global_grid%size(Y_INDEX)) + + do k=current_state%local_grid%local_domain_start_index(Z_INDEX), current_state%local_grid%local_domain_end_index(Z_INDEX) + theta_l_mean(k)=sum(theta_l(k, & + current_state%local_grid%local_domain_start_index(Y_INDEX):current_state%local_grid%local_domain_end_index(Y_INDEX), & + current_state%local_grid%local_domain_start_index(X_INDEX):current_state%local_grid%local_domain_end_index(X_INDEX) & + )) + end do + + call mpi_allreduce(MPI_IN_PLACE, theta_l_mean, current_state%local_grid%size(Z_INDEX), PRECISION_TYPE, MPI_SUM, & + current_state%parallel%monc_communicator, ierr) + theta_l_mean(:)=theta_l_mean(:)*rnhpts + +end subroutine calculate_theta_l_mean + +subroutine dephy_update_socrates(socrates_opt,lat_traj,lon_traj,albedo_traj) + implicit none + type (str_socrates_options), intent(inout) :: socrates_opt + real(kind=DEFAULT_PRECISION), intent(in) :: lat_traj + real(kind=DEFAULT_PRECISION), intent(in) :: lon_traj + real(kind=DEFAULT_PRECISION), intent(in) :: albedo_traj + socrates_opt%latitude=lat_traj + socrates_opt%longitude=lon_traj + socrates_opt%surface_albedo=albedo_traj +end subroutine dephy_update_socrates + + +!~ !! SOME MORE DIRTY DIAGNOSTICS JUST ADDED AS COMMENTS + +subroutine dephy_dirty_diagnostics() + implicit none + + write(*,*) 'lat_traj' + write(*,*) lat_traj + write(*,*) 'lon_traj' + write(*,*) lon_traj + write(*,*) 'ps_forc' + write(*,*) ps_forc + write(*,*) 'ts' + write(*,*) ts + write(*,*) 'sfc_sens_flx' + write(*,*) sfc_sens_flx + write(*,*) 'sfc_lat_flx' + write(*,*) sfc_lat_flx + write(*,*) 'z0_traj' + write(*,*) z0_traj + write(*,*) 'z0th_traj' + write(*,*) z0th_traj + write(*,*) 'ustar' + write(*,*) ustar + write(*,*) 'u_traj' + write(*,*) u_traj + write(*,*) 'v_traj' + write(*,*) v_traj + write(*,*) 'albedo_traj' + write(*,*) albedo_traj + write(*,*) 'q_skin_traj' + write(*,*) q_skin_traj + + write(*,*) 'height_forc' + write(*,*) height_forc + write(*,*) 'pressure_forc' + write(*,*) pressure_forc + write(*,*) 'ug' + write(*,*) ug + write(*,*) 'vg' + write(*,*) vg + write(*,*) 'u_adv' + write(*,*) u_adv + write(*,*) 'v_adv' + write(*,*) v_adv + write(*,*) 'theta_adv' + write(*,*) theta_adv + write(*,*) 'theta_rad' + write(*,*) theta_rad + write(*,*) 'rv_adv' + write(*,*) rv_adv + write(*,*) 'w' + write(*,*) w + write(*,*) 'theta_nudging' + write(*,*) theta_nudging + write(*,*) 'rv_nudging' + write(*,*) rv_nudging + write(*,*) 'u_nudging' + write(*,*) u_nudging + write(*,*) 'v_nudging' + write(*,*) v_nudging + write(*,*) 'nudging_inv_u_traj' + write(*,*) nudging_inv_u_traj + write(*,*) 'nudging_inv_v_traj' + write(*,*) nudging_inv_v_traj + write(*,*) 'nudging_inv_theta_traj' + write(*,*) nudging_inv_theta_traj + write(*,*) 'nudging_inv_rv_traj' + write(*,*) nudging_inv_rv_traj + +end subroutine dephy_dirty_diagnostics + + !> Removes NetCDF C style null termination of string. This is placed right at the end, after any + !! spaces so trim will not actually trim any spaces due to null terminator + !! @param netCDFString The NetCDF string to remove the null terminator from which is modified + subroutine remove_null_terminator_from_string(net_cdf_string) + character(len=*), intent(inout) :: net_cdf_string + integer :: i + do i=1,len(net_cdf_string) + if (iachar(net_cdf_string(i:i)) == 0) then + net_cdf_string(i:len(net_cdf_string)) = ' ' + exit + end if + end do + end subroutine remove_null_terminator_from_string + +end module dephy_forcings_mod diff --git a/components/diagnostics_3d/src/diagnostics_3d.F90 b/components/diagnostics_3d/src/diagnostics_3d.F90 index f4bd3bec..fc6d2a50 100644 --- a/components/diagnostics_3d/src/diagnostics_3d.F90 +++ b/components/diagnostics_3d/src/diagnostics_3d.F90 @@ -21,7 +21,7 @@ module diagnostics_3d_mod private #endif - integer :: total_points, iqv, iql, iqr + integer :: iqv, iql, iqr real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: & TdegK, & ! absolute temperature in kelvin theta, & ! potential temperature in kelvin (th + thref) @@ -86,7 +86,8 @@ subroutine timestep_callback(current_state) integer :: current_y_index, current_x_index, target_x_index, target_y_index if (current_state%halo_column) return - + if (.not. current_state%diagnostic_sample_timestep) return + current_y_index=current_state%column_local_y current_x_index=current_state%column_local_x target_y_index=current_y_index-current_state%local_grid%halo_size(Y_INDEX) @@ -102,7 +103,7 @@ subroutine timestep_callback(current_state) ! test for the qfields if (.not. current_state%passive_q .and. & current_state%number_q_fields .gt. 0) then - total_condensate(:) = & + total_condensate(:) = & current_state%q(iql)%data(:,current_y_index,current_x_index) + & current_state%q(iqr)%data(:,current_y_index,current_x_index) liquid_ice_theta(:,target_y_index, target_x_index) = & @@ -111,8 +112,8 @@ subroutine timestep_callback(current_state) endif TdegK(:,target_y_index, target_x_index) = & (current_state%th%data(:,current_y_index,current_x_index) & - + current_state%global_grid%configuration%vertical%thref(:) & - * current_state%global_grid%configuration%vertical%rprefrcp(:)) + + current_state%global_grid%configuration%vertical%thref(:)) & + * current_state%global_grid%configuration%vertical%rprefrcp(:) endif end subroutine timestep_callback diff --git a/components/diffusion/src/diffusion.F90 b/components/diffusion/src/diffusion.F90 index 5021f8a3..67e67b2a 100644 --- a/components/diffusion/src/diffusion.F90 +++ b/components/diffusion/src/diffusion.F90 @@ -23,6 +23,7 @@ module diffusion_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: th_diffusion real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: q_diffusion + real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: tracer_diffusion ! Local tendency diagnostic variables for this component ! 3D tendency fields and logicals for their use @@ -37,7 +38,6 @@ module diffusion_mod l_tend_pr_tot_qs,l_tend_pr_tot_qg,l_tend_pr_tot_tabs ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency public diffusion_get_descriptor @@ -54,7 +54,7 @@ type(component_descriptor_type) function diffusion_get_descriptor() diffusion_get_descriptor%field_value_retrieval=>field_value_retrieval_callback diffusion_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(diffusion_get_descriptor%published_fields(2+8+8)) + allocate(diffusion_get_descriptor%published_fields(2+8+8+1)) diffusion_get_descriptor%published_fields(1)="th_diffusion" diffusion_get_descriptor%published_fields(2)="q_diffusion" @@ -77,6 +77,8 @@ type(component_descriptor_type) function diffusion_get_descriptor() diffusion_get_descriptor%published_fields(2+8+7)="tend_qg_diffusion_profile_total_local" diffusion_get_descriptor%published_fields(2+8+8)="tend_tabs_diffusion_profile_total_local" + diffusion_get_descriptor%published_fields(2+8+8+1)="tracer_diffusion" + end function diffusion_get_descriptor @@ -95,11 +97,14 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE if (name .eq. "q_diffusion") then field_information%number_dimensions=2 + else if (name .eq. "tracer_diffusion") then + field_information%number_dimensions=2 else field_information%number_dimensions=1 end if field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) if (name .eq. "q_diffusion") field_information%dimension_sizes(2)=current_state%number_q_fields + if (name .eq. "tracer_diffusion") field_information%dimension_sizes(2)=current_state%n_tracers field_information%enabled=.true. ! Field information for 3d @@ -179,6 +184,8 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) call set_published_field_value(field_value, real_1d_field=th_diffusion) else if (name .eq. "q_diffusion") then call set_published_field_value(field_value, real_2d_field=q_diffusion) + else if (name .eq. "tracer_diffusion") then + call set_published_field_value(field_value, real_2d_field=tracer_diffusion) ! 3d Tendency Fields else if (name .eq. "tend_th_diffusion_3d_local" .and. allocated(tend_3d_th)) then @@ -235,6 +242,7 @@ subroutine initialisation_callback(current_state) z_size=current_state%global_grid%size(Z_INDEX) allocate(th_diffusion(z_size)) allocate(q_diffusion(z_size, current_state%number_q_fields)) + if (current_state%n_tracers > 0) allocate(tracer_diffusion(z_size, current_state%n_tracers)) ! Set tendency diagnostic logicals based on availability ! Need to use 3d tendencies to compute the profiles, so they will be allocated @@ -242,21 +250,21 @@ subroutine initialisation_callback(current_state) l_qdiag = (.not. current_state%passive_q .and. current_state%number_q_fields .gt. 0) l_tend_pr_tot_th = current_state%th%active - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th ! Allocate 3d tendency fields upon availability @@ -333,9 +341,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -344,6 +349,7 @@ subroutine finalisation_callback(current_state) if (allocated(th_diffusion)) deallocate(th_diffusion) if (allocated(q_diffusion)) deallocate(q_diffusion) + if (allocated(tracer_diffusion)) deallocate(tracer_diffusion) if (allocated(tend_3d_th)) deallocate(tend_3d_th) if (allocated(tend_3d_qv)) deallocate(tend_3d_qv) @@ -372,6 +378,10 @@ subroutine timestep_callback(current_state) integer :: local_y, local_x, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep + local_y=current_state%column_local_y local_x=current_state%column_local_x target_y_index=local_y-current_state%local_grid%halo_size(Y_INDEX) @@ -413,19 +423,33 @@ subroutine timestep_callback(current_state) perform_local_data_copy_for_diff, copy_halo_buffer_to_diff, copy_halo_buffer_to_diff_corners) end if - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) if (current_state%th%active) call perform_th_diffusion(current_state, local_y, local_x) if (current_state%number_q_fields .gt. 0) call perform_q_diffusion(current_state, local_y, local_x) + if (current_state%n_radioactive_tracers .gt. 0) call perform_tracer_diffusion(current_state, local_y, local_x) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) end subroutine timestep_callback + !> Computes the diffusion source terms for each tracer field + !! @param current_state The current model state + !! @param local_y Local Y index + !! @param local_x Local X index + subroutine perform_tracer_diffusion(current_state, local_y, local_x) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: local_y, local_x + + integer :: n + + do n=current_state%radioactive_tracer_index, current_state%radioactive_tracer_index + current_state%n_radioactive_tracers - 1 + call general_diffusion(current_state, current_state%ztracer(n), current_state%stracer(n), local_y, local_x, & + tracer_diffusion(:,n)) + end do + end subroutine perform_tracer_diffusion + + !> Computes the diffusion source terms for each Q field !! @param current_state The current model state !! @param local_y Local Y index diff --git a/components/fftsolver/src/ffte.F90 b/components/fftsolver/src/ffte.F90 new file mode 100644 index 00000000..c3bea649 --- /dev/null +++ b/components/fftsolver/src/ffte.F90 @@ -0,0 +1,142 @@ +!module that provides wrapper functions for FFTE calls +! +! NOTE: FFTE only has functionality for complex to complex in-place FFTs. +! This module allows for real to complex FFTs by providing wrappers for +! the complex to complex calls +! +! example usage: +! Takes the r2c of a real array "input", producing complex array "output" +! Then takes the c2r of "output", returning the real array "input" +! ________________________________________________________________________________ +! |integer :: n | +! |double precision :: input(n) | +! |complex*16 :: output(n/2+1) | +! | | +! |call ffte_init(n) !set up ffte for this problem size | +! |call ffte_r2c(input, output, n) ! real to complex (forward) FFT | +! |call ffte_c2r(output,input, n) ! complex to real (reverse) FFT | +! |call ffte_finalise() !clean up work arrays | +! -------------------------------------------------------------------------------- +! +module ffte_mod + + implicit none + + complex*16, allocatable, dimension(:) :: wk ! work array for the FFT calculations + complex*16, allocatable, dimension(:) :: data !the array that will have the in-place FFT applied to it + + contains + + !initialises the FFTE routines for the real problem size (n) + subroutine ffte_init(n) + integer, intent(in) :: n + + !check that n is a valid size for FFTE to handle + if (.not. ffte_check_factors(n)) then + stop "FFTE: FFT size, n, can only contain prime factors of 2, 3 and 5" + endif + + !allocate work and data arrays + allocate(wk(2*n)) + allocate(data(n)) + + !initialise FFTE + call ZFFT1D(data,n,0,wk) + + end subroutine + + !computes a real-to-complex (e.g. forward) FFT + ! in : double precision real array of size n (input) + ! out : double precision complex array of size n/2+1 (output) + ! n : integer - size of in (input) + subroutine ffte_r2c(in, out, n) + integer, intent(in) :: n + double precision, intent(in) :: in(n) + complex*16, intent(out) :: out(n/2+1) + + integer :: i + + !copy real input into complex "data" array + do i=1,n + data(i) = dcmplx(in(i), 0.d0) + enddo + + !compute forward FFT (in-place on data) + call ZFFT1D(data,n,-1,wk) + + !extract the first n/2+1 terms from the FFT and return them as output + !(The last n/2-1 terms of r2c are complex conjugates of the previous + ! ones and so are redundant) + out(:) = data(1:n/2+1) + + end subroutine + + !computes a complex-to-real (e.g. inverse) FFT + ! in : double precision complex array of size n/2+1 (input) + ! out : double precision real array of size n (output) + ! n : integer - size of out (input) + subroutine ffte_c2r(in,out,n) + integer, intent(in) :: n + complex*16, intent(in) :: in(n/2+1) + double precision, intent(out) :: out(n) + + integer :: i + + !construct the array to be inverse FFT'd + + !copy the first n/2+1 terms + data(1:n/2+1) = in(:) + !set the remaining entries to the complex conjugates of the previous ones + do i=n/2+2,n + data(i) = dconjg(in(n-i+2)) + enddo + + + !do the inverse fft (in place on data) + call ZFFT1D(data,n,1,wk) + + !extract the real part of data and place it in out + do i=1,n + !out(i) = realpart(data(i)) + out(i) = real(data(i)) + enddo + + end subroutine + + !Finalises the FFTE routines + subroutine ffte_finalise() + + !deallocate the work arrays + deallocate(wk,data) + + end subroutine + + !Checks to see if the input, n, only has prime factors of 2, 3 and 5 + ! If it does, return true. Otherwise, return false + logical function ffte_check_factors(n) + integer, intent(in) :: n + integer :: m + + m=n + + do while (mod(m,5) .eq. 0) + m = m/5 + enddo + + do while (mod(m,3) .eq. 0) + m = m/3 + enddo + + do while (mod(m,2) .eq. 0) + m = m/2 + enddo + + if (m .eq. 1) then + ffte_check_factors= .true. + else + ffte_check_factors= .false. + endif + + end function + +end module ffte_mod diff --git a/components/fftsolver/src/ffte/factor.f b/components/fftsolver/src/ffte/factor.f new file mode 100644 index 00000000..f902465a --- /dev/null +++ b/components/fftsolver/src/ffte/factor.f @@ -0,0 +1,76 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2014, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C FACTORIZATION ROUTINE +C +C FORTRAN77 SOURCE PROGRAM +C +C WRITTEN BY DAISUKE TAKAHASHI +C + SUBROUTINE FACTOR(N,IP) + DIMENSION IP(*) +C + IP(1)=0 + IP(2)=0 + IP(3)=0 + N2=N + IF (MOD(N,2) .NE. 0 .AND. MOD(N,3) .NE. 0 .AND. + 1 MOD(N,5) .NE. 0) RETURN + 10 IF (N2 .LE. 1) RETURN + IF (MOD(N2,2) .EQ. 0) THEN + IP(1)=IP(1)+1 + N2=N2/2 + GO TO 10 + ELSE IF (MOD(N2,3) .EQ. 0) THEN + IP(2)=IP(2)+1 + N2=N2/3 + GO TO 10 + ELSE IF (MOD(N2,5) .EQ. 0) THEN + IP(3)=IP(3)+1 + N2=N2/5 + GO TO 10 + END IF + RETURN + END + SUBROUTINE GETNXNY(N,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + DIMENSION IP(3),LNX(3),LNY(3) +C + ISQRTN=IDINT(DSQRT(DBLE(N))) + CALL FACTOR(N,IP) + DO 10 I=1,3 + LNX(I)=0 + 10 CONTINUE + IRES=ISQRTN + DO 40 K=0,(IP(3)+1)/2 + DO 30 J=0,(IP(2)+1)/2 + DO 20 I=0,(IP(1)+1)/2 + NX=(2**I)*(3**J)*(5**K) + IF (NX .LE. ISQRTN) THEN + IRES2=ISQRTN-NX + IF (IRES2 .LT. IRES) THEN + LNX(1)=I + LNX(2)=J + LNX(3)=K + IRES=IRES2 + END IF + END IF + 20 CONTINUE + 30 CONTINUE + 40 CONTINUE + DO 50 I=1,3 + LNY(I)=IP(I)-LNX(I) + 50 CONTINUE + NX=(2**LNX(1))*(3**LNX(2))*(5**LNX(3)) + NY=(2**LNY(1))*(3**LNY(2))*(5**LNY(3)) + RETURN + END diff --git a/components/fftsolver/src/ffte/fft235.f b/components/fftsolver/src/ffte/fft235.f new file mode 100644 index 00000000..59c77f90 --- /dev/null +++ b/components/fftsolver/src/ffte/fft235.f @@ -0,0 +1,234 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2014, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C RADIX-2, 3, 4, 5 AND 8 FFT ROUTINE +C +C FORTRAN77 SOURCE PROGRAM +C +C WRITTEN BY DAISUKE TAKAHASHI +C + SUBROUTINE FFT235(A,B,W,N,IP) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) + DIMENSION IP(*) +C + IF (IP(1) .NE. 1) THEN + KP4=2-MOD(IP(1)+2,3) + KP8=(IP(1)-KP4)/3 + ELSE + KP4=0 + KP8=0 + END IF +C + KEY=1 + J=1 + L=N + M=1 + DO 10 K=1,KP8 + L=L/8 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT8(A,B,W(J),M,L) + ELSE + CALL FFT8(B,A,W(J),M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT8(A,A,W(J),M,L) + ELSE + CALL FFT8(B,A,W(J),M,L) + END IF + END IF + M=M*8 + J=J+L*7 + 10 CONTINUE + DO 20 K=1,IP(3) + L=L/5 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT5(A,B,W(J),M,L) + ELSE + CALL FFT5(B,A,W(J),M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT5(A,A,W(J),M,L) + ELSE + CALL FFT5(B,A,W(J),M,L) + END IF + END IF + M=M*5 + J=J+L*4 + 20 CONTINUE + DO 30 K=1,KP4 + L=L/4 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT4(A,B,W(J),M,L) + ELSE + CALL FFT4(B,A,W(J),M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT4(A,A,W(J),M,L) + ELSE + CALL FFT4(B,A,W(J),M,L) + END IF + END IF + M=M*4 + J=J+L*3 + 30 CONTINUE + DO 40 K=1,IP(2) + L=L/3 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT3(A,B,W(J),M,L) + ELSE + CALL FFT3(B,A,W(J),M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT3(A,A,W(J),M,L) + ELSE + CALL FFT3(B,A,W(J),M,L) + END IF + END IF + M=M*3 + J=J+L*2 + 40 CONTINUE + IF (IP(1) .EQ. 1) THEN + IF (KEY .GE. 0) THEN + CALL FFT2(A,A,M) + ELSE + CALL FFT2(B,A,M) + END IF + END IF + RETURN + END + SUBROUTINE FFT3(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) +C + IF (M .EQ. 1) THEN + CALL FFT3A(A,B,W,L) + ELSE + CALL FFT3B(A,B,W,M,L) + END IF + RETURN + END + SUBROUTINE FFT4(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) +C + IF (M .EQ. 1) THEN + CALL FFT4A(A,B,W,L) + ELSE + CALL FFT4B(A,B,W,M,L) + END IF + RETURN + END + SUBROUTINE FFT5(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) +C + IF (M .EQ. 1) THEN + CALL FFT5A(A,B,W,L) + ELSE + CALL FFT5B(A,B,W,M,L) + END IF + RETURN + END + SUBROUTINE FFT8(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) +C + IF (M .EQ. 1) THEN + CALL FFT8A(A,B,W,L) + ELSE + CALL FFT8B(A,B,W,M,L) + END IF + RETURN + END + SUBROUTINE SETTBL(W,N) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 W(*) + DIMENSION IP(3) +C + CALL FACTOR(N,IP) +C + IF (IP(1) .NE. 1) THEN + KP4=2-MOD(IP(1)+2,3) + KP8=(IP(1)-KP4)/3 + ELSE + KP4=0 + KP8=0 + END IF +C + J=1 + L=N + DO 10 K=1,KP8 + L=L/8 + CALL SETTBL0(W(J),8,L) + J=J+L*7 + 10 CONTINUE + DO 20 K=1,IP(3) + L=L/5 + CALL SETTBL0(W(J),5,L) + J=J+L*4 + 20 CONTINUE + DO 30 K=1,KP4 + L=L/4 + CALL SETTBL0(W(J),4,L) + J=J+L*3 + 30 CONTINUE + DO 40 K=1,IP(2) + L=L/3 + CALL SETTBL0(W(J),3,L) + J=J+L*2 + 40 CONTINUE + RETURN + END + SUBROUTINE SETTBL0(W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 W(M-1,*) +C + PI2=8.0D0*DATAN(1.0D0) + PX=-PI2/(DBLE(M)*DBLE(L)) + DO 20 J=1,L +!DIR$ VECTOR ALIGNED + DO 10 I=1,M-1 + TEMP=PX*DBLE(I)*DBLE(J-1) + W(I,J)=DCMPLX(DCOS(TEMP),DSIN(TEMP)) + 10 CONTINUE + 20 CONTINUE + RETURN + END + SUBROUTINE SETTBL2(W,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 W(NX,*) +C + PI2=8.0D0*DATAN(1.0D0) + PX=-PI2/(DBLE(NX)*DBLE(NY)) +!$OMP PARALLEL DO PRIVATE(TEMP) + DO 20 J=1,NY +!DIR$ VECTOR ALIGNED + DO 10 I=1,NX + TEMP=PX*DBLE(I-1)*DBLE(J-1) + W(I,J)=DCMPLX(DCOS(TEMP),DSIN(TEMP)) + 10 CONTINUE + 20 CONTINUE + RETURN + END diff --git a/components/fftsolver/src/ffte/kernel.f b/components/fftsolver/src/ffte/kernel.f new file mode 100644 index 00000000..4aa51198 --- /dev/null +++ b/components/fftsolver/src/ffte/kernel.f @@ -0,0 +1,404 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2011, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C RADIX-2, 3, 4, 5 AND 8 FFT KERNEL ROUTINE +C +C FORTRAN77 SOURCE PROGRAM +C +C WRITTEN BY DAISUKE TAKAHASHI +C + SUBROUTINE FFT2(A,B,M) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(M,*),B(M,*) + COMPLEX*16 C0,C1 +C +!DIR$ VECTOR ALIGNED + DO 10 I=1,M + C0=A(I,1) + C1=A(I,2) + B(I,1)=C0+C1 + B(I,2)=C0-C1 + 10 CONTINUE + RETURN + END + SUBROUTINE FFT3A(A,B,W,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(L,*),B(3,*),W(2,*) + COMPLEX*16 C0,C1,C2,D0,D1,D2,W1,W2 + DATA C31/0.86602540378443865D0/C32/0.5D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 J=1,L + W1=W(1,J) + W2=W(2,J) + C0=A(J,1) + C1=A(J,2) + C2=A(J,3) + D0=C1+C2 + D1=C0-C32*D0 + D2=(0.0D0,-1.0D0)*C31*(C1-C2) + B(1,J)=C0+D0 + B(2,J)=W1*(D1+D2) + B(3,J)=W2*(D1-D2) + 10 CONTINUE + RETURN + END + SUBROUTINE FFT3B(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(M,L,*),B(M,3,*),W(2,*) + COMPLEX*16 C0,C1,C2,D0,D1,D2,W1,W2 + DATA C31/0.86602540378443865D0/C32/0.5D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 I=1,M + C0=A(I,1,1) + C1=A(I,1,2) + C2=A(I,1,3) + D0=C1+C2 + D1=C0-C32*D0 + D2=(0.0D0,-1.0D0)*C31*(C1-C2) + B(I,1,1)=C0+D0 + B(I,2,1)=D1+D2 + B(I,3,1)=D1-D2 + 10 CONTINUE + DO 30 J=2,L + W1=W(1,J) + W2=W(2,J) +!DIR$ VECTOR ALIGNED + DO 20 I=1,M + C0=A(I,J,1) + C1=A(I,J,2) + C2=A(I,J,3) + D0=C1+C2 + D1=C0-C32*D0 + D2=(0.0D0,-1.0D0)*C31*(C1-C2) + B(I,1,J)=C0+D0 + B(I,2,J)=W1*(D1+D2) + B(I,3,J)=W2*(D1-D2) + 20 CONTINUE + 30 CONTINUE + RETURN + END + SUBROUTINE FFT4A(A,B,W,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(L,*),B(4,*),W(3,*) + COMPLEX*16 C0,C1,C2,C3,D0,D1,D2,D3,W1,W2,W3 +C +!DIR$ VECTOR ALIGNED + DO 10 J=1,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) + C0=A(J,1) + C1=A(J,2) + C2=A(J,3) + C3=A(J,4) + D0=C0+C2 + D1=C0-C2 + D2=C1+C3 + D3=(0.0D0,-1.0D0)*(C1-C3) + B(1,J)=D0+D2 + B(2,J)=W1*(D1+D3) + B(3,J)=W2*(D0-D2) + B(4,J)=W3*(D1-D3) + 10 CONTINUE + RETURN + END + SUBROUTINE FFT4B(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(M,L,*),B(M,4,*),W(3,*) + COMPLEX*16 C0,C1,C2,C3,D0,D1,D2,D3,W1,W2,W3 +C +!DIR$ VECTOR ALIGNED + DO 10 I=1,M + C0=A(I,1,1) + C1=A(I,1,2) + C2=A(I,1,3) + C3=A(I,1,4) + D0=C0+C2 + D1=C0-C2 + D2=C1+C3 + D3=(0.0D0,-1.0D0)*(C1-C3) + B(I,1,1)=D0+D2 + B(I,2,1)=D1+D3 + B(I,3,1)=D0-D2 + B(I,4,1)=D1-D3 + 10 CONTINUE + DO 30 J=2,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) +!DIR$ VECTOR ALIGNED + DO 20 I=1,M + C0=A(I,J,1) + C1=A(I,J,2) + C2=A(I,J,3) + C3=A(I,J,4) + D0=C0+C2 + D1=C0-C2 + D2=C1+C3 + D3=(0.0D0,-1.0D0)*(C1-C3) + B(I,1,J)=D0+D2 + B(I,2,J)=W1*(D1+D3) + B(I,3,J)=W2*(D0-D2) + B(I,4,J)=W3*(D1-D3) + 20 CONTINUE + 30 CONTINUE + RETURN + END + SUBROUTINE FFT5A(A,B,W,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(L,*),B(5,*),W(4,*) + COMPLEX*16 C0,C1,C2,C3,C4,D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10 + COMPLEX*16 W1,W2,W3,W4 + DATA C51/0.95105651629515357D0/C52/0.61803398874989485D0/ + 1 C53/0.55901699437494742D0/C54/0.25D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 J=1,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) + W4=W(4,J) + C0=A(J,1) + C1=A(J,2) + C2=A(J,3) + C3=A(J,4) + C4=A(J,5) + D0=C1+C4 + D1=C2+C3 + D2=C51*(C1-C4) + D3=C51*(C2-C3) + D4=D0+D1 + D5=C53*(D0-D1) + D6=C0-C54*D4 + D7=D6+D5 + D8=D6-D5 + D9=(0.0D0,-1.0D0)*(D2+C52*D3) + D10=(0.0D0,-1.0D0)*(C52*D2-D3) + B(1,J)=C0+D4 + B(2,J)=W1*(D7+D9) + B(3,J)=W2*(D8+D10) + B(4,J)=W3*(D8-D10) + B(5,J)=W4*(D7-D9) + 10 CONTINUE + RETURN + END + SUBROUTINE FFT5B(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(M,L,*),B(M,5,*),W(4,*) + COMPLEX*16 C0,C1,C2,C3,C4,D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10 + COMPLEX*16 W1,W2,W3,W4 + DATA C51/0.95105651629515357D0/C52/0.61803398874989485D0/ + 1 C53/0.55901699437494742D0/C54/0.25D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 I=1,M + C0=A(I,1,1) + C1=A(I,1,2) + C2=A(I,1,3) + C3=A(I,1,4) + C4=A(I,1,5) + D0=C1+C4 + D1=C2+C3 + D2=C51*(C1-C4) + D3=C51*(C2-C3) + D4=D0+D1 + D5=C53*(D0-D1) + D6=C0-C54*D4 + D7=D6+D5 + D8=D6-D5 + D9=(0.0D0,-1.0D0)*(D2+C52*D3) + D10=(0.0D0,-1.0D0)*(C52*D2-D3) + B(I,1,1)=C0+D4 + B(I,2,1)=D7+D9 + B(I,3,1)=D8+D10 + B(I,4,1)=D8-D10 + B(I,5,1)=D7-D9 + 10 CONTINUE + DO 30 J=2,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) + W4=W(4,J) +!DIR$ VECTOR ALIGNED + DO 20 I=1,M + C0=A(I,J,1) + C1=A(I,J,2) + C2=A(I,J,3) + C3=A(I,J,4) + C4=A(I,J,5) + D0=C1+C4 + D1=C2+C3 + D2=C51*(C1-C4) + D3=C51*(C2-C3) + D4=D0+D1 + D5=C53*(D0-D1) + D6=C0-C54*D4 + D7=D6+D5 + D8=D6-D5 + D9=(0.0D0,-1.0D0)*(D2+C52*D3) + D10=(0.0D0,-1.0D0)*(C52*D2-D3) + B(I,1,J)=C0+D4 + B(I,2,J)=W1*(D7+D9) + B(I,3,J)=W2*(D8+D10) + B(I,4,J)=W3*(D8-D10) + B(I,5,J)=W4*(D7-D9) + 20 CONTINUE + 30 CONTINUE + RETURN + END + SUBROUTINE FFT8A(A,B,W,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(L,*),B(8,*),W(7,*) + COMPLEX*16 C0,C1,C2,C3,C4,C5,C6,C7,D0,D1,D2,D3,D4,D5,D6,D7 + COMPLEX*16 E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,W1,W2,W3,W4,W5,W6,W7 + DATA C81/0.70710678118654752D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 J=1,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) + W4=W(4,J) + W5=W(5,J) + W6=W(6,J) + W7=W(7,J) + C0=A(J,1) + C1=A(J,2) + C2=A(J,3) + C3=A(J,4) + C4=A(J,5) + C5=A(J,6) + C6=A(J,7) + C7=A(J,8) + D0=C0+C4 + D1=C0-C4 + D2=C2+C6 + D3=(0.0D0,-1.0D0)*(C2-C6) + D4=C1+C5 + D5=C1-C5 + D6=C3+C7 + D7=C3-C7 + E0=D0+D2 + E1=D0-D2 + E2=D4+D6 + E3=(0.0D0,-1.0D0)*(D4-D6) + E4=C81*(D5-D7) + E5=(0.0D0,-1.0D0)*C81*(D5+D7) + E6=D1+E4 + E7=D1-E4 + E8=D3+E5 + E9=D3-E5 + B(1,J)=E0+E2 + B(2,J)=W1*(E6+E8) + B(3,J)=W2*(E1+E3) + B(4,J)=W3*(E7-E9) + B(5,J)=W4*(E0-E2) + B(6,J)=W5*(E7+E9) + B(7,J)=W6*(E1-E3) + B(8,J)=W7*(E6-E8) + 10 CONTINUE + RETURN + END + SUBROUTINE FFT8B(A,B,W,M,L) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(M,L,*),B(M,8,*),W(7,*) + COMPLEX*16 C0,C1,C2,C3,C4,C5,C6,C7,D0,D1,D2,D3,D4,D5,D6,D7 + COMPLEX*16 E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,W1,W2,W3,W4,W5,W6,W7 + DATA C81/0.70710678118654752D0/ +C +!DIR$ VECTOR ALIGNED + DO 10 I=1,M + C0=A(I,1,1) + C1=A(I,1,2) + C2=A(I,1,3) + C3=A(I,1,4) + C4=A(I,1,5) + C5=A(I,1,6) + C6=A(I,1,7) + C7=A(I,1,8) + D0=C0+C4 + D1=C0-C4 + D2=C2+C6 + D3=(0.0D0,-1.0D0)*(C2-C6) + D4=C1+C5 + D5=C1-C5 + D6=C3+C7 + D7=C3-C7 + E0=D0+D2 + E1=D0-D2 + E2=D4+D6 + E3=(0.0D0,-1.0D0)*(D4-D6) + E4=C81*(D5-D7) + E5=(0.0D0,-1.0D0)*C81*(D5+D7) + E6=D1+E4 + E7=D1-E4 + E8=D3+E5 + E9=D3-E5 + B(I,1,1)=E0+E2 + B(I,2,1)=E6+E8 + B(I,3,1)=E1+E3 + B(I,4,1)=E7-E9 + B(I,5,1)=E0-E2 + B(I,6,1)=E7+E9 + B(I,7,1)=E1-E3 + B(I,8,1)=E6-E8 + 10 CONTINUE + DO 30 J=2,L + W1=W(1,J) + W2=W(2,J) + W3=W(3,J) + W4=W(4,J) + W5=W(5,J) + W6=W(6,J) + W7=W(7,J) +!DIR$ VECTOR ALIGNED + DO 20 I=1,M + C0=A(I,J,1) + C1=A(I,J,2) + C2=A(I,J,3) + C3=A(I,J,4) + C4=A(I,J,5) + C5=A(I,J,6) + C6=A(I,J,7) + C7=A(I,J,8) + D0=C0+C4 + D1=C0-C4 + D2=C2+C6 + D3=(0.0D0,-1.0D0)*(C2-C6) + D4=C1+C5 + D5=C1-C5 + D6=C3+C7 + D7=C3-C7 + E0=D0+D2 + E1=D0-D2 + E2=D4+D6 + E3=(0.0D0,-1.0D0)*(D4-D6) + E4=C81*(D5-D7) + E5=(0.0D0,-1.0D0)*C81*(D5+D7) + E6=D1+E4 + E7=D1-E4 + E8=D3+E5 + E9=D3-E5 + B(I,1,J)=E0+E2 + B(I,2,J)=W1*(E6+E8) + B(I,3,J)=W2*(E1+E3) + B(I,4,J)=W3*(E7-E9) + B(I,5,J)=W4*(E0-E2) + B(I,6,J)=W5*(E7+E9) + B(I,7,J)=W6*(E1-E3) + B(I,8,J)=W7*(E6-E8) + 20 CONTINUE + 30 CONTINUE + RETURN + END diff --git a/components/fftsolver/src/ffte/mfft235.f b/components/fftsolver/src/ffte/mfft235.f new file mode 100644 index 00000000..51c13e7a --- /dev/null +++ b/components/fftsolver/src/ffte/mfft235.f @@ -0,0 +1,329 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2014, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C RADIX-2, 3, 4, 5 AND 8 MULTIPLE FFT ROUTINE +C +C FORTRAN77 SOURCE PROGRAM +C +C WRITTEN BY DAISUKE TAKAHASHI +C + SUBROUTINE MFFT235A(A,B,W,NS,N,IP) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) + DIMENSION IP(*) +C + IF (IP(1) .NE. 1) THEN + KP4=2-MOD(IP(1)+2,3) + KP8=(IP(1)-KP4)/3 + ELSE + KP4=0 + KP8=0 + END IF +C + KEY=1 + J=1 + L=N + M=1 + DO 10 K=1,KP8 + L=L/8 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT8B(A,B,W(J),NS*M,L) + ELSE + CALL FFT8B(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT8B(A,A,W(J),NS*M,L) + ELSE + CALL FFT8B(B,A,W(J),NS*M,L) + END IF + END IF + M=M*8 + J=J+L*7 + 10 CONTINUE + DO 20 K=1,IP(3) + L=L/5 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT5B(A,B,W(J),NS*M,L) + ELSE + CALL FFT5B(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT5B(A,A,W(J),NS*M,L) + ELSE + CALL FFT5B(B,A,W(J),NS*M,L) + END IF + END IF + M=M*5 + J=J+L*4 + 20 CONTINUE + DO 30 K=1,KP4 + L=L/4 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT4B(A,B,W(J),NS*M,L) + ELSE + CALL FFT4B(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT4B(A,A,W(J),NS*M,L) + ELSE + CALL FFT4B(B,A,W(J),NS*M,L) + END IF + END IF + M=M*4 + J=J+L*3 + 30 CONTINUE + DO 40 K=1,IP(2) + L=L/3 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT3B(A,B,W(J),NS*M,L) + ELSE + CALL FFT3B(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT3B(A,A,W(J),NS*M,L) + ELSE + CALL FFT3B(B,A,W(J),NS*M,L) + END IF + END IF + M=M*3 + J=J+L*2 + 40 CONTINUE + IF (IP(1) .EQ. 1) THEN + IF (KEY .GE. 0) THEN + CALL FFT2(A,A,NS*M) + ELSE + CALL FFT2(B,A,NS*M) + END IF + END IF + RETURN + END + SUBROUTINE MFFT235B(A,B,W,NS,N,IP) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) + DIMENSION IP(*) +C + IF (IP(1) .NE. 1) THEN + KP4=2-MOD(IP(1)+2,3) + KP8=(IP(1)-KP4)/3 + ELSE + KP4=0 + KP8=0 + END IF +C + KEY=1 + J=1 + L=N + M=1 + DO 10 K=1,KP8 + L=L/8 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT8(A,B,W(J),NS*M,L) + ELSE + CALL FFT8(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT8(A,B,W(J),NS*M,L) + ELSE + CALL FFT8(B,B,W(J),NS*M,L) + END IF + END IF + M=M*8 + J=J+L*7 + 10 CONTINUE + DO 20 K=1,IP(3) + L=L/5 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT5(A,B,W(J),NS*M,L) + ELSE + CALL FFT5(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT5(A,B,W(J),NS*M,L) + ELSE + CALL FFT5(B,B,W(J),NS*M,L) + END IF + END IF + M=M*5 + J=J+L*4 + 20 CONTINUE + DO 30 K=1,KP4 + L=L/4 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT4(A,B,W(J),NS*M,L) + ELSE + CALL FFT4(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT4(A,B,W(J),NS*M,L) + ELSE + CALL FFT4(B,B,W(J),NS*M,L) + END IF + END IF + M=M*4 + J=J+L*3 + 30 CONTINUE + DO 40 K=1,IP(2) + L=L/3 + IF (L .GE. 2) THEN + IF (KEY .GE. 0) THEN + CALL FFT3(A,B,W(J),NS*M,L) + ELSE + CALL FFT3(B,A,W(J),NS*M,L) + END IF + KEY=-KEY + ELSE + IF (KEY .GE. 0) THEN + CALL FFT3(A,B,W(J),NS*M,L) + ELSE + CALL FFT3(B,B,W(J),NS*M,L) + END IF + END IF + M=M*3 + J=J+L*2 + 40 CONTINUE + IF (IP(1) .EQ. 1) THEN + IF (KEY .GE. 0) THEN + CALL FFT2(A,B,NS*M) + ELSE + CALL FFT2(B,B,NS*M) + END IF + END IF + RETURN + END + SUBROUTINE ZTRANS(A,B,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*) + DIMENSION LNX(3),LNY(3) +C + CALL FACTOR(NX,LNX) + CALL FACTOR(NY,LNY) +C + IF (NX .EQ. 1 .OR. NY .EQ. 1) THEN +!DIR$ VECTOR ALIGNED + DO 10 I=1,NX*NY + B(I)=A(I) + 10 CONTINUE + RETURN + END IF +C + IF (LNX(1)+LNY(1) .LE. 1) THEN + CALL ZTRANSA(A,B,NX,NY) + ELSE + CALL ZTRANSB(A,B,NX,NY) + END IF + RETURN + END + SUBROUTINE ZTRANSA(A,B,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NX,*),B(NY,*) +C + DO 20 I=1,NX +!DIR$ VECTOR ALIGNED + DO 10 J=1,NY + B(J,I)=A(I,J) + 10 CONTINUE + 20 CONTINUE + RETURN + END + SUBROUTINE ZTRANSB(A,B,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NX,*),B(NY,*) +C + IF (NY .GE. NX) THEN + DO 20 I=0,NX-1 +!DIR$ VECTOR ALIGNED + DO 10 J=1,NX-I + B(J,I+J)=A(I+J,J) + 10 CONTINUE + 20 CONTINUE + DO 40 I=1,NY-NX +!DIR$ VECTOR ALIGNED + DO 30 J=1,NX + B(I+J,J)=A(J,I+J) + 30 CONTINUE + 40 CONTINUE + DO 60 I=NY-NX+1,NY-1 +!DIR$ VECTOR ALIGNED + DO 50 J=1,NY-I + B(I+J,J)=A(J,I+J) + 50 CONTINUE + 60 CONTINUE + ELSE + DO 80 I=0,NY-1 +!DIR$ VECTOR ALIGNED + DO 70 J=1,NY-I + B(I+J,J)=A(J,I+J) + 70 CONTINUE + 80 CONTINUE + DO 100 I=1,NX-NY +!DIR$ VECTOR ALIGNED + DO 90 J=1,NY + B(J,I+J)=A(I+J,J) + 90 CONTINUE + 100 CONTINUE + DO 120 I=NX-NY+1,NX-1 +!DIR$ VECTOR ALIGNED + DO 110 J=1,NX-I + B(J,I+J)=A(I+J,J) + 110 CONTINUE + 120 CONTINUE + END IF + RETURN + END + SUBROUTINE ZTRANS2(A,B,NX,NY,NZ) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NX,NY,*),B(NY,NX,*) +C + DO 10 K=1,NZ + CALL ZTRANS(A(1,1,K),B(1,1,K),NX,NY) + 10 CONTINUE + RETURN + END + SUBROUTINE MZTRANS(A,B,NS,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NS,NX,*),B(NS,NY,*) +C + IF (NS .EQ. 1) THEN + CALL ZTRANS(A(1,1,1),B(1,1,1),NX,NY) + ELSE + DO 30 I=1,NX + DO 20 J=1,NY +!DIR$ VECTOR ALIGNED + DO 10 K=1,NS + B(K,J,I)=A(K,I,J) + 10 CONTINUE + 20 CONTINUE + 30 CONTINUE + END IF + RETURN + END diff --git a/components/fftsolver/src/ffte/param.h b/components/fftsolver/src/ffte/param.h new file mode 100644 index 00000000..894d5772 --- /dev/null +++ b/components/fftsolver/src/ffte/param.h @@ -0,0 +1,33 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2014, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C HEADER FILE FOR PARAMETERS +C +C FORTRAN77 SOURCE PROGRAM +C +C WRITTEN BY DAISUKE TAKAHASHI +C +C The maximum supported number of processors is 65536. + PARAMETER (MAXNPU=65536) +C The maximum supported 2-D transform length is 65536. + PARAMETER (NDA2=65536) +C The maximum supported 3-D transform length is 4096. + PARAMETER (NDA3=4096) +C The parameter NBLK is a blocking parameter. + PARAMETER (NBLK=16) +C The parameter NB is a blocking parameter for NVIDIA GPUs. + parameter (NB=128) +C The parameter NP is a padding parameter to avoid cache conflicts in +C the FFT routines. + PARAMETER (NP=8) +C Size of L2 cache + PARAMETER (L2SIZE=2097152) diff --git a/components/fftsolver/src/ffte/vzfft1d.f b/components/fftsolver/src/ffte/vzfft1d.f new file mode 100644 index 00000000..2c5619d5 --- /dev/null +++ b/components/fftsolver/src/ffte/vzfft1d.f @@ -0,0 +1,151 @@ +C +C FFTE: A FAST FOURIER TRANSFORM PACKAGE +C +C (C) COPYRIGHT SOFTWARE, 2000-2004, 2008-2011, ALL RIGHTS RESERVED +C BY +C DAISUKE TAKAHASHI +C FACULTY OF ENGINEERING, INFORMATION AND SYSTEMS +C UNIVERSITY OF TSUKUBA +C 1-1-1 TENNODAI, TSUKUBA, IBARAKI 305-8573, JAPAN +C E-MAIL: daisuke@cs.tsukuba.ac.jp +C +C +C 1-D COMPLEX FFT ROUTINE (FOR VECTOR MACHINES) +C +C FORTRAN77 SOURCE PROGRAM +C +C CALL ZFFT1D(A,N,IOPT,B) +C +C A(N) IS COMPLEX INPUT/OUTPUT VECTOR (COMPLEX*16) +C B(N*2) IS WORK/COEFFICIENT VECTOR (COMPLEX*16) +C N IS THE LENGTH OF THE TRANSFORMS (INTEGER*4) +C ----------------------------------- +C N = (2**IP) * (3**IQ) * (5**IR) +C ----------------------------------- +C IOPT = 0 FOR INITIALIZING THE COEFFICIENTS (INTEGER*4) +C = -1 FOR FORWARD TRANSFORM +C = +1 FOR INVERSE TRANSFORM +C +C WRITTEN BY DAISUKE TAKAHASHI +C + SUBROUTINE ZFFT1D(A,N,IOPT,B) + IMPLICIT REAL*8 (A-H,O-Z) + INCLUDE 'param.h' + COMPLEX*16 A(*),B(*) + COMPLEX*16 WX(NDA2),WY(NDA2) + DIMENSION IP(3),LNX(3),LNY(3) + SAVE WX,WY +C + CALL FACTOR(N,IP) +C + IF (IOPT .EQ. 1) THEN +!DIR$ VECTOR ALIGNED + DO 10 I=1,N + A(I)=DCONJG(A(I)) + 10 CONTINUE + END IF +C + CALL GETNXNY(N,NX,NY) + CALL FACTOR(NX,LNX) + CALL FACTOR(NY,LNY) +C + IF (IOPT .EQ. 0) THEN + CALL SETTBL(WX,NX) + CALL SETTBL(WY,NY) + CALL SETTBL2(B(N+1),NX,NY) + RETURN + END IF +C + CALL MFFT235A(A,B,WY,NX,NY,LNY) + CALL ZTRANSMUL(A,B,B(N+1),NX,NY) + CALL MFFT235B(B,A,WX,NY,NX,LNX) +C + IF (IOPT .EQ. 1) THEN + DN=1.0D0/DBLE(N) +!DIR$ VECTOR ALIGNED + DO 20 I=1,N + A(I)=DCONJG(A(I))*DN + 20 CONTINUE + END IF + RETURN + END + SUBROUTINE ZTRANSMUL(A,B,W,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(*),B(*),W(*) + DIMENSION LNX(3),LNY(3) +C + CALL FACTOR(NX,LNX) + CALL FACTOR(NY,LNY) +C + IF (NX .EQ. 1 .OR. NY .EQ. 1) THEN +!DIR$ VECTOR ALIGNED + DO 10 I=1,NX*NY + B(I)=A(I)*W(I) + 10 CONTINUE + RETURN + END IF +C + IF (LNX(1)+LNY(1) .LE. 1) THEN + CALL ZTRANSMULA(A,B,W,NX,NY) + ELSE + CALL ZTRANSMULB(A,B,W,NX,NY) + END IF + RETURN + END + SUBROUTINE ZTRANSMULA(A,B,W,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NX,*),B(NY,*),W(NX,*) +C + DO 20 I=1,NX +!DIR$ VECTOR ALIGNED + DO 10 J=1,NY + B(J,I)=A(I,J)*W(I,J) + 10 CONTINUE + 20 CONTINUE + RETURN + END + SUBROUTINE ZTRANSMULB(A,B,W,NX,NY) + IMPLICIT REAL*8 (A-H,O-Z) + COMPLEX*16 A(NX,*),B(NY,*),W(NX,*) +C + IF (NY .GE. NX) THEN + DO 20 I=0,NX-1 +!DIR$ VECTOR ALIGNED + DO 10 J=1,NX-I + B(J,I+J)=A(I+J,J)*W(I+J,J) + 10 CONTINUE + 20 CONTINUE + DO 40 I=1,NY-NX +!DIR$ VECTOR ALIGNED + DO 30 J=1,NX + B(I+J,J)=A(J,I+J)*W(J,I+J) + 30 CONTINUE + 40 CONTINUE + DO 60 I=NY-NX+1,NY-1 +!DIR$ VECTOR ALIGNED + DO 50 J=1,NY-I + B(I+J,J)=A(J,I+J)*W(J,I+J) + 50 CONTINUE + 60 CONTINUE + ELSE + DO 80 I=0,NY-1 +!DIR$ VECTOR ALIGNED + DO 70 J=1,NY-I + B(I+J,J)=A(J,I+J)*W(J,I+J) + 70 CONTINUE + 80 CONTINUE + DO 100 I=1,NX-NY +!DIR$ VECTOR ALIGNED + DO 90 J=1,NY + B(J,I+J)=A(I+J,J)*W(I+J,J) + 90 CONTINUE + 100 CONTINUE + DO 120 I=NX-NY+1,NX-1 +!DIR$ VECTOR ALIGNED + DO 110 J=1,NX-I + B(J,I+J)=A(I+J,J)*W(I+J,J) + 110 CONTINUE + 120 CONTINUE + END IF + RETURN + END diff --git a/components/fftsolver/src/fftw.F90 b/components/fftsolver/src/fftw.F90 index 924fd7fe..3ebb9fd9 100644 --- a/components/fftsolver/src/fftw.F90 +++ b/components/fftsolver/src/fftw.F90 @@ -1,15 +1,15 @@ !> Wrapper around the FFTW3 bindings. This will privatise by default all of FFTW3 apart from the calls that we explicitly need !! in our pencil solver -module fftw_mod - use, intrinsic :: iso_c_binding - implicit none - -#ifndef TEST_MODE - private -#endif - - include 'fftw3.f03' - - public C_DOUBLE_COMPLEX, C_PTR, FFTW_BACKWARD, FFTW_FORWARD, FFTW_ESTIMATE, fftw_plan_many_dft_r2c, & - fftw_plan_many_dft_c2r, fftw_plan_many_dft, fftw_execute_dft, fftw_execute_dft_c2r, fftw_execute_dft_r2c, fftw_destroy_plan -end module fftw_mod +!!$module fftw_mod +!!$ use, intrinsic :: iso_c_binding +!!$ implicit none +!!$ +!!$#ifndef TEST_MODE +!!$ private +!!$#endif +!!$ +!!$ include 'fftw3.f03' +!!$ +!!$ public C_DOUBLE_COMPLEX, C_PTR, FFTW_BACKWARD, FFTW_FORWARD, FFTW_ESTIMATE, fftw_plan_many_dft_r2c, & +!!$ fftw_plan_many_dft_c2r, fftw_plan_many_dft, fftw_execute_dft, fftw_execute_dft_c2r, fftw_execute_dft_r2c, fftw_destroy_plan +!!$end module fftw_mod diff --git a/components/fftsolver/src/pencilfft.F90 b/components/fftsolver/src/pencilfft.F90 index 021bfba2..b267fdaf 100644 --- a/components/fftsolver/src/pencilfft.F90 +++ b/components/fftsolver/src/pencilfft.F90 @@ -9,9 +9,12 @@ module pencil_fft_mod use datadefn_mod, only : DEFAULT_PRECISION, PRECISION_TYPE use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX, global_grid_type use state_mod, only : model_state_type - use fftw_mod, only : C_DOUBLE_COMPLEX, C_PTR, FFTW_BACKWARD, FFTW_FORWARD, FFTW_ESTIMATE, fftw_plan_many_dft_r2c, & - fftw_plan_many_dft_c2r, fftw_execute_dft_c2r, fftw_execute_dft_r2c, fftw_destroy_plan - use mpi, only : MPI_DOUBLE_COMPLEX, MPI_INT, MPI_COMM_SELF + use, intrinsic :: iso_c_binding + !use fftw_mod, only : C_DOUBLE_COMPLEX, C_PTR, FFTW_BACKWARD, FFTW_FORWARD, FFTW_ESTIMATE, fftw_plan_many_dft_r2c, & + ! fftw_plan_many_dft_c2r, fftw_execute_dft_c2r, fftw_execute_dft_r2c, fftw_destroy_plan + use mpi, only : MPI_DOUBLE_COMPLEX, MPI_INT, MPI_COMM_SELF,MPI_Wtime + use ffte_mod, only: ffte_r2c, ffte_c2r, ffte_init, ffte_finalise, ffte_check_factors + use optionsdatabase_mod, only: options_get_logical implicit none #ifndef TEST_MODE @@ -37,10 +40,18 @@ module pencil_fft_mod complex(C_DOUBLE_COMPLEX), dimension(:,:,:), contiguous, pointer :: buffer1, buffer2 ! Pointers to FFTW plans and whether these have been initialised (only initialised once) - type(C_PTR) :: fftw_plan(4) - logical :: fftw_plan_initialised(4)=.false. + !type(C_PTR) :: fftw_plan(4) + !logical :: fftw_plan_initialised(4)=.false. public initialise_pencil_fft, finalise_pencil_fft, perform_forward_3dfft, perform_backwards_3dfft + + !whether to use FFTE (true) or FFTW (false) + logical :: ffte = .true. + + !counters for number of times the fft routines (FFTW or FFTE) are called and the time spent in them + integer :: nforward, nback + double precision :: tforward, tback + contains !> Initialises the pencil FFT functionality, this will create the transposition structures needed @@ -85,7 +96,29 @@ function initialise_pencil_fft(current_state, my_y_start, my_x_start) call initialise_transpositions(current_state, y_distinct_sizes, x_distinct_sizes) call initialise_buffers() - initialise_pencil_fft=z_from_y_transposition%my_pencil_size + initialise_pencil_fft=z_from_y_transposition%my_pencil_size + + !get from the options whether we are to use FFTE or FFTW + ffte=options_get_logical(current_state%options_database, "FFTE") + + if (ffte) then + if (current_state%parallel%my_rank .eq. 0) print *, "Using FFTE for FFTs" + !check fft sizes are appropriate for FFTE + if (.not. (ffte_check_factors(current_state%global_grid%size(X_INDEX)) .and. & + ffte_check_factors(current_state%global_grid%size(Y_INDEX)))) then + stop "NX and/or NY are the wrong sizes for FFTE" + endif + else + if (current_state%parallel%my_rank .eq. 0) print *, "Using FFTW for FFTs" + endif + + nforward = 0 + nback = 0 + + tforward = 0.d0 + tback = 0d0 + + end function initialise_pencil_fft !> Cleans up allocated buffer memory @@ -93,11 +126,24 @@ subroutine finalise_pencil_fft(monc_communicator) integer, intent(in) :: monc_communicator integer :: ierr, i - do i=1,size(fftw_plan_initialised) - if (fftw_plan_initialised(i)) then - call fftw_destroy_plan(fftw_plan(i)) - end if - end do + !do i=1,size(fftw_plan_initialised) + ! if (fftw_plan_initialised(i)) then + ! call fftw_destroy_plan(fftw_plan(i)) + ! end if + !end do + + !call MPI_Allreduce(tforward,tgf,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr)) + !call MPI_Allreduce(tbackward,tgb,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr)) + call MPI_Comm_rank(monc_communicator,i,ierr) + if (i .eq. 0) then + if (ffte) then + print *, "FFTE" + else + print *, "FFTW" + endif + print *, "Total time in forward FFT =",tforward + print *, "Total time in reverse FFT =", tback + endif if (dim_y_comm .ne. MPI_COMM_SELF .and. dim_y_comm .ne. monc_communicator) call mpi_comm_free(dim_y_comm, ierr) if (dim_x_comm .ne. MPI_COMM_SELF .and. dim_x_comm .ne. monc_communicator) call mpi_comm_free(dim_x_comm, ierr) @@ -115,11 +161,14 @@ subroutine perform_forward_3dfft(current_state, source_data, target_data) type(model_state_type), target, intent(inout) :: current_state real(kind=DEFAULT_PRECISION), dimension(:,:,:), intent(inout) :: source_data real(kind=DEFAULT_PRECISION), dimension(:,:,:), intent(out) :: target_data - + call transpose_and_forward_fft_in_y(current_state, source_data, buffer1, real_buffer1) - real_buffer1=real_buffer1/current_state%global_grid%size(Y_INDEX) + !this is needed with fftw to normalise the FFT, but FFTE automatically normalises + if (.not. ffte) real_buffer1=real_buffer1/current_state%global_grid%size(Y_INDEX) + call transpose_and_forward_fft_in_x(current_state, real_buffer1, buffer2, real_buffer2) - real_buffer2=real_buffer2/current_state%global_grid%size(X_INDEX) + !this is needed with fftw to normalise the FFT, but FFTE automatically normalises + if (.not. ffte) real_buffer2=real_buffer2/current_state%global_grid%size(X_INDEX) call transpose_to_pencil(y_from_x_transposition, (/X_INDEX, Z_INDEX, Y_INDEX/), dim_x_comm, BACKWARD, & real_buffer2, real_buffer3) @@ -431,13 +480,37 @@ subroutine perform_r2c_fft(source_data, transformed_data, row_size, num_rows, pl real(kind=DEFAULT_PRECISION), dimension(:,:,:), contiguous, pointer, intent(inout) :: source_data complex(C_DOUBLE_COMPLEX), dimension(:,:,:), contiguous, pointer, intent(inout) :: transformed_data integer, intent(in) :: row_size, num_rows, plan_id + integer :: i, j + double precision :: tstart, tstop + + tstart = MPI_Wtime() + + if (ffte) then !use FFTE for the FFTs + + call ffte_init(row_size) + + do i=1,size(source_data,3) + do j=1,size(source_data,2) + call ffte_r2c(source_data(:,j,i),transformed_data(:,j,i),row_size) + enddo + enddo + + call ffte_finalise() + + else !use FFTW for FFTs - if (.not. fftw_plan_initialised(plan_id)) then - fftw_plan(plan_id) = fftw_plan_many_dft_r2c(1, (/row_size/), num_rows, source_data, (/row_size/), 1, row_size, & - transformed_data, (/row_size/), 1, row_size/2+1, FFTW_ESTIMATE) - fftw_plan_initialised(plan_id)=.true. - end if - call fftw_execute_dft_r2c(fftw_plan(plan_id), source_data, transformed_data) + !if (.not. fftw_plan_initialised(plan_id)) then + ! fftw_plan(plan_id) = fftw_plan_many_dft_r2c(1, (/row_size/), num_rows, source_data, (/row_size/), 1, row_size, & + ! transformed_data, (/row_size/), 1, row_size/2+1, FFTW_ESTIMATE) + ! fftw_plan_initialised(plan_id)=.true. + ! end if + ! call fftw_execute_dft_r2c(fftw_plan(plan_id), source_data, transformed_data) + endif + + tstop = mpi_wtime() + + nforward = nforward +1 + tforward = tforward + (tstop-tstart) end subroutine perform_r2c_fft !> Performs the complex to real (backwards) FFT @@ -449,16 +522,42 @@ end subroutine perform_r2c_fft subroutine perform_c2r_fft(source_data, transformed_data, row_size, num_rows, plan_id) complex(C_DOUBLE_COMPLEX), dimension(:,:,:), contiguous, pointer, intent(inout) :: source_data real(kind=DEFAULT_PRECISION), dimension(:,:,:), contiguous, pointer, intent(inout) :: transformed_data - integer, intent(in) :: row_size, num_rows, plan_id - - if (.not. fftw_plan_initialised(plan_id)) then - ! n is the size of the FFT (in real, not complex->real coords.) There are row_size/2+1 between entries for the input - ! (complex) data and row_size between entries for the output data - fftw_plan(plan_id) = fftw_plan_many_dft_c2r(1, (/row_size/), num_rows, source_data, (/row_size/2+1/), 1, row_size/2+1, & - transformed_data, (/row_size/), 1, row_size, FFTW_ESTIMATE) - fftw_plan_initialised(plan_id)=.true. - end if - call fftw_execute_dft_c2r(fftw_plan(plan_id), source_data, transformed_data) + integer, intent(in) :: row_size, num_rows, plan_id + integer :: i,j + double precision :: tstart, tstop + + tstart = MPI_Wtime() + + if (ffte) then !use FFTE for FFTs + + call ffte_init(row_size) + + do i=1,size(source_data,3) + do j=1,size(source_data,2) + call ffte_c2r(source_data(:,j,i),transformed_data(:,j,i),row_size) + enddo + enddo + + call ffte_finalise() + + else !use FFTW for FFTs + + !if (.not. fftw_plan_initialised(plan_id)) then + ! n is the size of the FFT (in real, not complex->real coords.) There are row_size/2+1 between entries for the input + ! (complex) data and row_size between entries for the output data + ! fftw_plan(plan_id) = fftw_plan_many_dft_c2r(1, (/row_size/), num_rows, source_data, (/row_size/2+1/), 1, row_size/2+1, & + ! transformed_data, (/row_size/), 1, row_size, FFTW_ESTIMATE) + ! fftw_plan_initialised(plan_id)=.true. + !end if + !call fftw_execute_dft_c2r(fftw_plan(plan_id), source_data, transformed_data) + + endif + + tstop = mpi_wtime() + + nback = nback +1 + tback = tback + (tstop-tstart) + end subroutine perform_c2r_fft !> Rearranges data for sending, transposing a,b,c into c,b,a . This is done as alltoall splits on dimension c diff --git a/components/flux_budget/src/flux_budget.F90 b/components/flux_budget/src/flux_budget.F90 index 9e617913..0ef26c13 100644 --- a/components/flux_budget/src/flux_budget.F90 +++ b/components/flux_budget/src/flux_budget.F90 @@ -37,8 +37,6 @@ module flux_budget_mod some_prognostic_budget_diagnostics_enabled, some_thetal_diagnostics_enabled, some_mse_diagnostics_enabled, & some_qt_diagnostics_enabled, some_tke_diagnostics_enabled - integer :: diagnostic_generation_frequency - public flux_budget_get_descriptor contains @@ -134,15 +132,17 @@ subroutine initialisation_callback(current_state) call initialise_qt_diagnostics(current_state) call initialise_scalar_diagnostics(current_state) call initialise_tke_diagnostics(current_state) - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") end subroutine initialisation_callback !> Timestep call back, this will deduce the diagnostics for the current (non halo) column !! @param current_state Current model state subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep + + if (calculate_diagnostics) then if (current_state%first_timestep_column) then if (some_theta_flux_diagnostics_enabled) call clear_theta_fluxes() if (some_q_flux_diagnostics_enabled) call clear_q_fluxes() @@ -1871,7 +1871,7 @@ subroutine compute_TKE_for_column(current_state) ! Note - calculating on z levels (i.e. w) ! So need w'p' on p levels - w_pprime_at_p(k) = 0.5 * & + w_pprime_at_p(k) = 0.5_DEFAULT_PRECISION * & (current_state%w%data(k, current_state%column_local_y,current_state%column_local_x) + & current_state%w%data(k-1,current_state%column_local_y,current_state%column_local_x)) * & (current_state%global_grid%configuration%vertical%rhon(k) * & @@ -1908,6 +1908,8 @@ subroutine compute_TKE_for_column(current_state) end do end if +! ********************** Resolved turbulent transport ************************ + rke1(current_state%local_grid%size(Z_INDEX)) = 0.0_DEFAULT_PRECISION ! Zero gradient at surface rke1(1)=rke1(2) diff --git a/components/forcing/src/forcing.F90 b/components/forcing/src/forcing.F90 index 72fa7b0e..7c41ec6d 100644 --- a/components/forcing/src/forcing.F90 +++ b/components/forcing/src/forcing.F90 @@ -7,13 +7,16 @@ module forcing_mod use state_mod, only : model_state_type use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH use optionsdatabase_mod, only : options_get_integer, options_get_logical, options_get_real, options_get_array_size, & - options_get_logical_array, options_get_real_array, options_get_string_array, options_get_string + options_get_logical_array, options_get_real_array, options_get_string_array, options_get_string, options_has_key,& + options_compare_profile_arrays use interpolation_mod, only: piecewise_linear_1d, piecewise_linear_2d, interpolate_point_linear_2d use q_indices_mod, only: get_q_index, standard_q_names use science_constants_mod, only: seconds_in_a_day use naming_conventions_mod use registry_mod, only : is_component_enabled - use logging_mod, only : LOG_ERROR, log_master_log, LOG_DEBUG, log_get_logging_level, log_log + use logging_mod, only : LOG_ERROR, log_master_log, LOG_DEBUG, log_get_logging_level, log_log, LOG_WARN + use conversions_mod, only : conv_to_string + ! In order to set forcing from a netcdf file, need the following netcdf modules use netcdf, only : nf90_noerr, nf90_global, nf90_nowrite, & nf90_inquire_attribute, nf90_open, nf90_strerror, & @@ -27,13 +30,13 @@ module forcing_mod #endif character(len=*), parameter :: & - TIME_KEY = "time", & !< NetCDF data time key + TIME_KEY = "time", & !< NetCDF data time key Z_KEY = "z", & !< NetCDF data height(z) key - WSUBS_KEY = "wsubs" !< NetCDF data subsidence velocity + LEV_KEY = "lev", & !< NetCDF data pressure level key + TH_KEY = "theta_tendency", & !< NetCDF data theta tendency key + Q_KEY = "q_tendency", & !< NetCDF data water vapour tendency key + WSUBS_KEY = "wsubs" !< NetCDF data subsidence velocity key - integer, parameter :: MAX_FILE_LEN=200 !< Maximum length of surface condition input filename - character(MAX_FILE_LEN) :: input_file - integer, parameter :: DIVERGENCE=0 ! Input for subsidence forcing is a divergence profile integer, parameter :: SUBSIDENCE=1 ! Input for subsidence forcing is the subsidence velocity profile @@ -57,10 +60,6 @@ module forcing_mod real(kind=DEFAULT_PRECISION), allocatable :: du_subs_profile_diag(:), dv_subs_profile_diag(:), & dtheta_subs_profile_diag(:), dq_subs_profile_diag(:,:) - ! time dependent subsidence array (from netcdf file) - real(kind=DEFAULT_PRECISION), allocatable :: w_subs_varies_with_time(:,:) - real(kind=DEFAULT_PRECISION), allocatable :: forcing_input_times(:) - real(kind=DEFAULT_PRECISION) :: forcing_timescale_theta ! Timescale for forcing of theta real(kind=DEFAULT_PRECISION) :: forcing_timescale_q ! Timescale for forcing of q real(kind=DEFAULT_PRECISION) :: forcing_timescale_u ! Timescale for forcing of u @@ -76,13 +75,15 @@ module forcing_mod integer :: constant_forcing_type_u=RELAXATION ! Method for large-scale forcing of u integer :: constant_forcing_type_v=RELAXATION ! Method for large-scale forcing of v - logical :: l_constant_forcing_theta_z2pressure ! profile is a function of pressure not height + logical :: l_constant_forcing_theta_height ! If .true., theta forcing profile is a function of height logical :: relax_to_initial_u_profile ! For relaxation, use initial profile as the target logical :: relax_to_initial_v_profile ! For relaxation, use initial profile as the target logical :: relax_to_initial_theta_profile ! For relaxation, use initial profile as the target logical :: use_time_varying_subsidence ! Use time dependent subsidence veocity (read from file) + logical :: use_time_varying_theta ! Use time dependent theta forcing (read from file) + logical :: use_time_varying_q ! Use time dependent water vapour forcing (read from file) logical :: l_subs_pl_theta ! if .true. then subsidence applied to theta field logical :: l_subs_pl_q ! if .true. then subsidence applied to q fields @@ -112,7 +113,16 @@ module forcing_mod ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency + ! Contains time varying forcing profile information + type time_varying_forcing_profile + real(kind=DEFAULT_PRECISION), allocatable :: forcing_times(:) ! input forcing times + real(kind=DEFAULT_PRECISION), allocatable :: forcing_values(:,:) ! input forcing values, interpolated to MONC heights + end type time_varying_forcing_profile + + type(time_varying_forcing_profile), allocatable :: time_varying_subsidence, time_varying_theta, time_varying_q + + logical :: convert_input_theta_from_temperature=.false. ! If .true. input forcing data is for temperature and should + ! be converted to theta (potential temerature). public forcing_get_descriptor @@ -198,47 +208,51 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor else if (name .eq. "th_subsidence") then field_information%enabled=current_state%th%active .and. l_subs_pl_theta .and. & allocated(current_state%global_grid%configuration%vertical%olzthbar) - else if (name .eq. "vapour_mmr_subsidence" .or. name .eq. "vapour_mmr_subsidence" .or. & - name .eq. "cloud_mmr_subsidence" .or. name .eq. "cloud_mmr_subsidence" ) then - field_information%enabled=.not. current_state%passive_q .and. & - current_state%number_q_fields .gt. 0 .and. l_subs_pl_q .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "rain_mmr_subsidence" ) then - field_information%enabled=current_state%rain_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "ice_mmr_subsidence" ) then - field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "snow_mmr_subsidence" ) then - field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "graupel_mmr_subsidence" ) then - field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (l_subs_pl_q) then + if (name .eq. "vapour_mmr_subsidence" .or. name .eq. "cloud_mmr_subsidence" ) then + field_information%enabled=.not. current_state%passive_q .and. & + current_state%number_q_fields .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "rain_mmr_subsidence" ) then + field_information%enabled=current_state%rain_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "ice_mmr_subsidence" ) then + field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "snow_mmr_subsidence" ) then + field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "graupel_mmr_subsidence" ) then + field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + end if + else if (name .eq. "u_large_scale") then field_information%enabled=current_state%u%active .and. l_constant_forcing_u else if (name .eq. "v_large_scale") then field_information%enabled=current_state%v%active .and. l_constant_forcing_v else if (name .eq. "th_large_scale") then field_information%enabled=current_state%th%active .and. l_constant_forcing_theta - else if (name .eq. "vapour_mmr_large_scale" .or. name .eq. "vapour_mmr_large_scale" .or. & - name .eq. "cloud_mmr_large_scale" .or. name .eq. "cloud_mmr_large_scale" ) then - field_information%enabled=.not. current_state%passive_q .and. & - current_state%number_q_fields .gt. 0 .and. l_subs_pl_q .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "rain_mmr_large_scale" ) then - field_information%enabled=current_state%rain_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "ice_mmr_large_scale" ) then - field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "snow_mmr_large_scale" ) then - field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - else if (name .eq. "graupel_mmr_large_scale" ) then - field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 .and. & - allocated(current_state%global_grid%configuration%vertical%olzqbar) - end if + + else if (l_constant_forcing_q) then + if (name .eq. "vapour_mmr_large_scale" .or. name .eq. "cloud_mmr_large_scale" ) then + field_information%enabled=.not. current_state%passive_q .and. & + current_state%number_q_fields .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "rain_mmr_large_scale" ) then + field_information%enabled=current_state%rain_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "ice_mmr_large_scale" ) then + field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "snow_mmr_large_scale" ) then + field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + else if (name .eq. "graupel_mmr_large_scale" ) then + field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 .and. & + allocated(current_state%global_grid%configuration%vertical%olzqbar) + end if + end if ! Field information for 3d strcomp=INDEX(name, "forcing_3d_local") @@ -440,8 +454,6 @@ subroutine init_callback(current_state) integer :: iq ! temporary q varible index integer :: ncid ! id for the netcdf file - integer :: time_dim ! number of elements in time variable, read from input file - integer :: z_dim ! number of elements in height variable, read from input file ! Input arrays from config (always 1D) - subsidence profile real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: f_subs_pl ! subsidence node for q variables @@ -455,11 +467,8 @@ subroutine init_callback(current_state) real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: f_force_pl_u ! Forcing values for u variable real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: z_force_pl_u ! Forcing height values for u variable real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: f_force_pl_v ! Forcing values for v variable - real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: z_force_pl_v ! Forcing height values for v variabl + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: z_force_pl_v ! Forcing height values for v variable - ! Read from netcdf file if used - always 2D - real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: f_subs_2d ! subsidence node for q variables - integer :: subsidence_input_type=DIVERGENCE ! Determines if we're reading in a subsidence velocity or divergence real(kind=DEFAULT_PRECISION), allocatable :: f_force_pl_q_tmp(:) !temporary 1D storage of forcing for q fields @@ -470,9 +479,6 @@ subroutine init_callback(current_state) character(len=STRING_LENGTH) :: units_u_force='unset' ! units of theta variable forcing character(len=STRING_LENGTH) :: units_v_force='unset' ! units of theta variable forcing - logical :: convert_input_theta_from_temperature=.false. ! If .true. input forcing data is for temperature and should - ! be converted to theta (potential temerature). - integer :: k logical :: l_qdiag @@ -512,68 +518,69 @@ subroutine init_callback(current_state) if (current_state%graupel_water_mixing_ratio_index > 0) & iqg = current_state%graupel_water_mixing_ratio_index - ! Subsidence forcing initialization - - use_time_varying_subsidence= & - options_get_logical(current_state%options_database, "use_time_varying_subsidence") + ! General Subsidence options l_subs_pl_theta=options_get_logical(current_state%options_database, "l_subs_pl_theta") l_subs_pl_q=options_get_logical(current_state%options_database, "l_subs_pl_q") subsidence_input_type=options_get_integer(current_state%options_database, "subsidence_input_type") + + ! time_varying forcing initialization + use_time_varying_subsidence= & + options_get_logical(current_state%options_database, "use_time_varying_subsidence") + if ((l_subs_pl_theta .or. l_subs_pl_q) .and. use_time_varying_subsidence) then + allocate(time_varying_subsidence) + call init_time_varying_forcing(current_state, time_varying_subsidence, WSUBS_KEY, & + options_get_string(current_state%options_database, "varying_subsidence_file"), & + options_get_string(current_state%options_database, "varying_subsidence_coordinate")) + end if + + use_time_varying_theta= & + options_get_logical(current_state%options_database, "use_time_varying_theta") + if (use_time_varying_theta) then + convert_input_theta_from_temperature=options_get_logical(current_state%options_database, & + "convert_input_theta_from_temperature") + allocate(time_varying_theta) + call init_time_varying_forcing(current_state, time_varying_theta, TH_KEY, & + options_get_string(current_state%options_database, "varying_theta_file"), & + options_get_string(current_state%options_database, "varying_theta_coordinate")) + end if + + use_time_varying_q= & + options_get_logical(current_state%options_database, "use_time_varying_q") + if (use_time_varying_q) then + allocate(time_varying_q) + call init_time_varying_forcing(current_state, time_varying_q, Q_KEY, & + options_get_string(current_state%options_database, "varying_q_file"), & + options_get_string(current_state%options_database, "varying_q_coordinate")) + end if + + ! Subsidence forcing initialization l_subs_local_theta=options_get_logical(current_state%options_database, "subsidence_local_theta") l_subs_local_q=options_get_logical(current_state%options_database, "subsidence_local_q") - input_file=options_get_string(current_state%options_database, "forcing_file") - if ((l_subs_pl_theta .and. .not. l_subs_local_theta) .or. & (l_subs_pl_q .and. .not. l_subs_local_q))then if (.not. is_component_enabled(current_state%options_database, "mean_profiles")) then - call log_master_log(LOG_ERROR, "subsidence requires the mean profiles component to be enabled") + call log_master_log(LOG_ERROR, "non-local subsidence requires the mean profiles component to be enabled") end if end if - if (l_subs_pl_theta .or. l_subs_pl_q)then - ! Read in the input_file - if (trim(input_file)=='' .or. trim(input_file)=='None') then - if (.not. use_time_varying_subsidence) then - allocate(z_subs_pl(options_get_array_size(current_state%options_database, "z_subs_pl")), & - f_subs_pl(options_get_array_size(current_state%options_database, "f_subs_pl"))) - call options_get_real_array(current_state%options_database, "z_subs_pl", z_subs_pl) - call options_get_real_array(current_state%options_database, "f_subs_pl", f_subs_pl) - ! Get profiles - zgrid=current_state%global_grid%configuration%vertical%z(:) - call piecewise_linear_1d(z_subs_pl(1:size(z_subs_pl)), f_subs_pl(1:size(f_subs_pl)), zgrid, & - current_state%global_grid%configuration%vertical%w_subs) - if (subsidence_input_type==DIVERGENCE) then - current_state%global_grid%configuration%vertical%w_subs(:) = & - -1.0*current_state%global_grid%configuration%vertical%w_subs(:)*zgrid(:) - end if - else - call log_master_log(LOG_ERROR, "timevarying forcing selected but no forcing file provided - STOP") - endif - deallocate(z_subs_pl, f_subs_pl) - else - if (use_time_varying_subsidence) then - call check_forcing_status(nf90_open(path = trim(input_file), mode = nf90_nowrite, ncid = ncid)) - if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_master_log(LOG_DEBUG, "Reading in subsidence velocity profile from:"//trim(input_file) ) - end if - - call read_2d_forcing_dimensions(ncid, time_dim,z_dim) - allocate(forcing_input_times(time_dim), z_subs_pl(z_dim), f_subs_2d(z_dim, time_dim)) - call read_2d_forcing_variables(trim(input_file), ncid, time_dim, forcing_input_times, & - z_dim, z_subs_pl, WSUBS_KEY, f_subs_2d) - call check_forcing_status(nf90_close(ncid)) - - zgrid=current_state%global_grid%configuration%vertical%z(:) - ! interpolate forcing levels onto the MONC vertical grid (zgrid), for all forcing times - allocate(current_state%global_grid%configuration%vertical%wsubs_time_vary(size(zgrid), time_dim)) - call piecewise_linear_2d(z_subs_pl(1:z_dim), forcing_input_times(1:time_dim), & - f_subs_2d(1:z_dim,1:time_dim), zgrid, & - current_state%global_grid%configuration%vertical%wsubs_time_vary) - else - call log_master_log(LOG_ERROR, "constant forcing from file selected but not coded - STOP") - endif - endif + ! Subsidence supplied by config, not nc file: + if ((l_subs_pl_theta .or. l_subs_pl_q) .and. .not. use_time_varying_subsidence) then + allocate(z_subs_pl(options_get_array_size(current_state%options_database, "z_subs_pl")), & + f_subs_pl(options_get_array_size(current_state%options_database, "f_subs_pl"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_subs_pl", "f_subs_pl", "subsidence forcing") + call options_get_real_array(current_state%options_database, "z_subs_pl", z_subs_pl) + call options_get_real_array(current_state%options_database, "f_subs_pl", f_subs_pl) + ! Get profiles + zgrid=current_state%global_grid%configuration%vertical%z(:) + call piecewise_linear_1d(z_subs_pl(1:size(z_subs_pl)), f_subs_pl(1:size(f_subs_pl)), zgrid, & + current_state%global_grid%configuration%vertical%w_subs) + if (subsidence_input_type==DIVERGENCE) then + current_state%global_grid%configuration%vertical%w_subs(:) = & + -1.0*current_state%global_grid%configuration%vertical%w_subs(:)*zgrid(:) + end if + deallocate(z_subs_pl, f_subs_pl) end if ! Time independent large-scale forcing (proxy for e.g. advection/radiation) @@ -594,12 +601,20 @@ subroutine init_callback(current_state) end if if (l_constant_forcing_theta)then + current_state%global_grid%configuration%vertical%theta_force(:)=0.0_DEFAULT_PRECISION constant_forcing_type_theta=options_get_integer(current_state%options_database, "constant_forcing_type_theta") forcing_timescale_theta=options_get_real(current_state%options_database, "forcing_timescale_theta") - l_constant_forcing_theta_z2pressure=options_get_logical(current_state%options_database, "l_constant_forcing_theta_z2pressure") + l_constant_forcing_theta_height=options_get_logical(current_state%options_database, "l_constant_forcing_theta_height") + if (options_has_key(current_state%options_database, "l_constant_forcing_theta_z2pressure")) then + call log_master_log(LOG_ERROR, "The option l_constant_forcing_theta_z2pressure is deprecated. "// & + "It has been replaced by l_constant_forcing_theta_height. "// & + "Check the global_config for usage." ) + end if allocate(z_force_pl_theta(options_get_array_size(current_state%options_database, "z_force_pl_theta")), & f_force_pl_theta(options_get_array_size(current_state%options_database, "f_force_pl_theta"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_force_pl_theta", "f_force_pl_theta", "theta forcing") call options_get_real_array(current_state%options_database, "z_force_pl_theta", z_force_pl_theta) call options_get_real_array(current_state%options_database, "f_force_pl_theta", f_force_pl_theta) ! Get profiles @@ -608,10 +623,18 @@ subroutine init_callback(current_state) current_state%global_grid%configuration%vertical%theta_force(:) = & current_state%global_grid%configuration%vertical%theta_init(:) else - if (l_constant_forcing_theta_z2pressure)then + if (l_constant_forcing_theta_height)then zgrid=current_state%global_grid%configuration%vertical%zn(:) + if (maxval(z_force_pl_theta) .lt. current_state%global_grid%top(Z_INDEX) .or. & + minval(z_force_pl_theta) .gt. 0.0) then + call warn_forcing_bounds("z_force_pl_theta (in height coordinates)") + end if else zgrid=current_state%global_grid%configuration%vertical%prefn(:) + if (maxval(z_force_pl_theta) .lt. current_state%global_grid%configuration%vertical%prefn(1) .or. & + minval(z_force_pl_theta) .gt. current_state%global_grid%configuration%vertical%prefn(size(zgrid))) then + call warn_forcing_bounds("z_force_pl_theta (in pressure coordinates)") + end if end if call piecewise_linear_1d(z_force_pl_theta(1:size(z_force_pl_theta)), f_force_pl_theta(1:size(f_force_pl_theta)), zgrid, & current_state%global_grid%configuration%vertical%theta_force) @@ -640,6 +663,7 @@ subroutine init_callback(current_state) #ifdef U_ACTIVE if (l_constant_forcing_u)then + current_state%global_grid%configuration%vertical%u_force(:)=0.0_DEFAULT_PRECISION constant_forcing_type_u=options_get_integer(current_state%options_database, "constant_forcing_type_u") forcing_timescale_u=options_get_real(current_state%options_database, "forcing_timescale_u") relax_to_initial_u_profile=options_get_logical(current_state%options_database, "relax_to_initial_u_profile") @@ -649,10 +673,16 @@ subroutine init_callback(current_state) else allocate(z_force_pl_u(options_get_array_size(current_state%options_database, "z_force_pl_u")), & f_force_pl_u(options_get_array_size(current_state%options_database, "f_force_pl_u"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_force_pl_u", "f_force_pl_u", "u-wind forcing") call options_get_real_array(current_state%options_database, "z_force_pl_u", z_force_pl_u) call options_get_real_array(current_state%options_database, "f_force_pl_u", f_force_pl_u) ! Get profiles zgrid=current_state%global_grid%configuration%vertical%zn(:) + if (maxval(z_force_pl_u) .lt. current_state%global_grid%top(Z_INDEX) .or. & + minval(z_force_pl_u) .gt. 0.0) then + call warn_forcing_bounds("z_force_pl_u") + end if call piecewise_linear_1d(z_force_pl_u(1:size(z_force_pl_u)), f_force_pl_u(1:size(f_force_pl_u)), zgrid, & current_state%global_grid%configuration%vertical%u_force) deallocate(z_force_pl_u, f_force_pl_u) @@ -674,6 +704,7 @@ subroutine init_callback(current_state) #ifdef V_ACTIVE if (l_constant_forcing_v)then + current_state%global_grid%configuration%vertical%v_force(:)=0.0_DEFAULT_PRECISION constant_forcing_type_v=options_get_integer(current_state%options_database, "constant_forcing_type_v") forcing_timescale_v=options_get_real(current_state%options_database, "forcing_timescale_v") relax_to_initial_v_profile=options_get_logical(current_state%options_database, "relax_to_initial_v_profile") @@ -683,10 +714,16 @@ subroutine init_callback(current_state) else allocate(z_force_pl_v(options_get_array_size(current_state%options_database, "z_force_pl_v")), & f_force_pl_v(options_get_array_size(current_state%options_database, "f_force_pl_v"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_force_pl_v", "f_force_pl_v", "v-wind forcing") call options_get_real_array(current_state%options_database, "z_force_pl_v", z_force_pl_v) call options_get_real_array(current_state%options_database, "f_force_pl_v", f_force_pl_v) ! Get profiles zgrid=current_state%global_grid%configuration%vertical%zn(:) + if (maxval(z_force_pl_v) .lt. current_state%global_grid%top(Z_INDEX) .or. & + minval(z_force_pl_v) .gt. 0.0) then + call warn_forcing_bounds("z_force_pl_v") + end if call piecewise_linear_1d(z_force_pl_v(1:size(z_force_pl_v)), f_force_pl_v(1:size(f_force_pl_v)), zgrid, & current_state%global_grid%configuration%vertical%v_force) deallocate(z_force_pl_v, f_force_pl_v) @@ -707,6 +744,7 @@ subroutine init_callback(current_state) #endif if (l_constant_forcing_q) then + current_state%global_grid%configuration%vertical%q_force(:,:)=0.0_DEFAULT_PRECISION constant_forcing_type_q=options_get_integer(current_state%options_database, "constant_forcing_type_q") forcing_timescale_q=options_get_real(current_state%options_database, "forcing_timescale_q") nq_force=size(names_force_pl_q) @@ -714,7 +752,19 @@ subroutine init_callback(current_state) call options_get_real_array(current_state%options_database, "z_force_pl_q", z_force_pl_q) nzq=size(z_force_pl_q) zgrid=current_state%global_grid%configuration%vertical%zn(:) - allocate(f_force_pl_q_tmp(nq_force*nzq)) + if (maxval(z_force_pl_q) .lt. current_state%global_grid%top(Z_INDEX) .or. & + minval(z_force_pl_q) .gt. 0.0) then + call warn_forcing_bounds("z_force_pl_q") + end if + allocate(f_force_pl_q_tmp(options_get_array_size(current_state%options_database, "f_force_pl_q"))) + if (nq_force*nzq .ne. size(f_force_pl_q_tmp)) then + call log_master_log(LOG_ERROR, "There is a mismatch between the number of moisture forcing heights, "//& + "size(z_force_pl_q)="//trim(conv_to_string(nzq))// & + ", and the forcing values, "// & + "size(f_force_pl_q)="//trim(conv_to_string(size(f_force_pl_q_tmp)))// & + ". The length of f_force_pl_q should equal the length of z_force_pl_q "// & + "multiplied by the number of names_force_pl_q.") + end if call options_get_real_array(current_state%options_database, "f_force_pl_q", f_force_pl_q_tmp) allocate(f_force_pl_q(nzq, nq_force)) f_force_pl_q(1:nzq, 1:nq_force)=reshape(f_force_pl_q_tmp, (/nzq, nq_force/)) @@ -757,23 +807,23 @@ subroutine init_callback(current_state) l_tend_pr_tot_u = current_state%u%active l_tend_pr_tot_v = current_state%v%active l_tend_pr_tot_th = current_state%th%active - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_u = current_state%u%active .or. l_tend_pr_tot_u l_tend_3d_v = current_state%v%active .or. l_tend_pr_tot_v l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th ! Allocate 3d tendency fields upon availability @@ -860,18 +910,18 @@ subroutine init_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - - - end subroutine init_callBack + end subroutine init_callback !> Called for each data column and will determine the forcing values in x and y which are then applied to the field !! source terms !! @param current_state The current model state_mod subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: current_x_index, current_y_index, target_x_index, target_y_index + integer :: current_x_index, current_y_index, target_x_index, target_y_index, k + logical :: calculate_diagnostics + real(kind=DEFAULT_PRECISION), dimension(current_state%local_grid%size(Z_INDEX)) :: temp_prof + + calculate_diagnostics = current_state%diagnostic_sample_timestep current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -919,40 +969,83 @@ subroutine timestep_callback(current_state) endif end if - if (current_state%halo_column .or. current_state%timestep<3) return + ! No need to do forcing calculations in the halos or on the first two timesteps + ! unless this is a reconfiguration run + if (current_state%halo_column .or. & + (current_state%timestep < 3 .and. (.not. current_state%reconfig_run)) ) return - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) ! AH: perform subsidence calculation but first determine if time varying or constant ! If timevarying then work out the profile of subsidence for the given time and ! assign to w_subs, which is used in apply_subsidence_to... ! if (use_time_varying_subsidence) then - call interpolate_point_linear_2d(forcing_input_times, & - current_state%global_grid%configuration%vertical%wsubs_time_vary, & + call interpolate_point_linear_2d(time_varying_subsidence%forcing_times, & + time_varying_subsidence%forcing_values, & current_state%time, current_state%global_grid%configuration%vertical%w_subs) endif ! if not w_subs is constant and set in the init_callback + + ! Apply time-varying theta and q (vapour only). + ! This functionality permits the user to apply a constant forcing separately as long as the + ! theta forcing is consistently in theta or absolute temperature units in both cases because + ! they share the convert_input_theta_from_temperature logical. + if (use_time_varying_theta) then + ! Obtain the profile, interpolated to the current time + call interpolate_point_linear_2d(time_varying_theta%forcing_times, & + time_varying_theta%forcing_values, & + current_state%time, temp_prof) + + ! Unit conversions + if (convert_input_theta_from_temperature)then ! Input is temperature not theta + temp_prof = temp_prof * current_state%global_grid%configuration%vertical%prefrcp(:) + end if + + ! Record the diagnostic and apply the forcing + dtheta_profile_diag = dtheta_profile_diag + temp_prof + do k=2,current_state%local_grid%size(Z_INDEX)-1 + current_state%sth%data(k,current_state%column_local_y,current_state%column_local_x) = & + current_state%sth%data(k,current_state%column_local_y,current_state%column_local_x) & + + temp_prof(k) + end do + endif ! use_time_varying_theta + + if (use_time_varying_q) then + ! Obtain the profile, interpolated to the current time + call interpolate_point_linear_2d(time_varying_q%forcing_times, & + time_varying_q%forcing_values, & + current_state%time, temp_prof) + + ! Record the diagnostic and apply the forcing + dq_profile_diag(:,iqv) = dq_profile_diag(:,iqv) + temp_prof + do k=2,current_state%local_grid%size(Z_INDEX)-1 + current_state%sq(iqv)%data(k,current_state%column_local_y,current_state%column_local_x) = & + current_state%sq(iqv)%data(k,current_state%column_local_y,current_state%column_local_x) & + + temp_prof(k) + end do + endif ! use_time_varying_q + + if (l_subs_pl_theta) then call apply_subsidence_to_flow_fields(current_state) call apply_subsidence_to_theta(current_state) end if if (l_subs_pl_q) call apply_subsidence_to_q_fields(current_state) - if (l_constant_forcing_theta)call apply_time_independent_forcing_to_theta(current_state) + if (l_constant_forcing_theta) call apply_time_independent_forcing_to_theta(current_state) #ifdef U_ACTIVE - if (l_constant_forcing_u)call apply_time_independent_forcing_to_u(current_state) + if (l_constant_forcing_u) call apply_time_independent_forcing_to_u(current_state) #endif #ifdef V_ACTIVE - if (l_constant_forcing_v)call apply_time_independent_forcing_to_v(current_state) + if (l_constant_forcing_v) call apply_time_independent_forcing_to_v(current_state) #endif - if (l_constant_forcing_q)call apply_time_independent_forcing_to_q(current_state) + if (l_constant_forcing_q) call apply_time_independent_forcing_to_q(current_state) + + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if end subroutine timestep_callback @@ -1402,9 +1495,12 @@ end subroutine check_forcing_status !> Reads the dimensions for forcing from the NetCDF file. This routine assumes the forcing uses only time and height. !! @param ncid The NetCDF file id + !! @param vert_key The vertical coordinate key of the input data !! @param time_dim Number of elements in the time dimension - subroutine read_2d_forcing_dimensions(ncid, time_dim, z_dim) + !! @param z_dim Number of elements in the vertical dimension + subroutine read_2d_forcing_dimensions(ncid, vert_key, time_dim, z_dim) integer, intent(in) :: ncid + character(len=*), intent(in) :: vert_key integer, intent(out) :: time_dim integer, intent(out) :: z_dim integer :: time_dimid, z_dimid @@ -1412,7 +1508,7 @@ subroutine read_2d_forcing_dimensions(ncid, time_dim, z_dim) call check_forcing_status(nf90_inq_dimid(ncid, TIME_KEY, time_dimid)) call check_forcing_status(nf90_inquire_dimension(ncid, time_dimid, len=time_dim)) - call check_forcing_status(nf90_inq_dimid(ncid, Z_KEY, z_dimid)) + call check_forcing_status(nf90_inq_dimid(ncid, vert_key, z_dimid)) call check_forcing_status(nf90_inquire_dimension(ncid, z_dimid, len=z_dim)) end subroutine read_2d_forcing_dimensions @@ -1421,14 +1517,15 @@ end subroutine read_2d_forcing_dimensions !! @param ncid The id of the NetCDF file !! @param time_dim The number of elements in the time dimension !! @param time The time data field that is to be read + !! @param vert_key The vertical coordinate key of the input data !! @param z_dim is the number of elements in the height dimension !! @param force_2d_key is the string that defines the forcing variable in teh NetCDF file !! @param force_2d_var is the forcing data field that is read with dimension (t_dim, z_dim) - subroutine read_2d_forcing_variables(filename, ncid, time_dim, time, z_dim, z_profile, & + subroutine read_2d_forcing_variables(filename, ncid, time_dim, time, vert_key, z_dim, z_profile, & force_2d_key, force_2d_var ) character(*), intent(in) :: filename - character(len=*), intent(in) :: force_2d_key + character(len=*), intent(in) :: force_2d_key, vert_key integer, intent(in) :: ncid, time_dim, z_dim real(kind=DEFAULT_PRECISION), intent(inout) :: time(:), z_profile(:) real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable, intent(inout) :: force_2d_var @@ -1446,11 +1543,11 @@ subroutine read_2d_forcing_variables(filename, ncid, time_dim, time, z_dim, z_pr call log_log(LOG_ERROR, "No recognized time variable found in"//trim(filename)) end if - status=nf90_inq_varid(ncid, Z_KEY, variable_id) + status=nf90_inq_varid(ncid, vert_key, variable_id) if (status==nf90_noerr)then - call read_single_forcing_variable(ncid, Z_KEY, data1d=z_profile) + call read_single_forcing_variable(ncid, vert_key, data1d=z_profile) else - call log_log(LOG_ERROR, "No recognized height variable found in"//trim(filename)) + call log_log(LOG_ERROR, "No recognized '"//trim(vert_key)//"' vertical coordinate variable found in"//trim(filename)) end if status=nf90_inq_varid(ncid, force_2d_key, variable_id) @@ -1491,4 +1588,79 @@ subroutine read_single_forcing_variable(ncid, key, data1d, data2d) end if end subroutine read_single_forcing_variable + !> Sets up time-varying forcing profiles + !! @param current_state Current model state + !! @param tvdata The time-varying data structure + !! @param key The variable key (name) to access + !! @param filename The input NetCDF file name + !! @param coordinate The vertical coordinate of the input data [ height | pressure ] + subroutine init_time_varying_forcing(current_state, tvdata, key, filename, coordinate) + type(model_state_type), target, intent(inout) :: current_state + type(time_varying_forcing_profile), intent(inout) :: tvdata + character(len=*), intent(in) :: key, filename, coordinate + + character(STRING_LENGTH) :: vert_key + integer :: ncid, time_dim_len, vert_dim_len ! Input file parameters + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: vert_coords ! contains input vertical coordinates + real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: input_forcing + real(kind=DEFAULT_PRECISION), dimension(current_state%local_grid%size(Z_INDEX)) :: vert_grid + + ! Check for valid vertical coordinate specification + if (trim(coordinate) .eq. 'pressure') then + vert_key = LEV_KEY + if (key .eq. WSUBS_KEY) then + call piecewise_linear_1d(current_state%global_grid%configuration%vertical%zn(:), & + current_state%global_grid%configuration%vertical%prefn(:), & + current_state%global_grid%configuration%vertical%z(:), & + vert_grid) ! get pressure values on w-levels (z) + else + vert_grid = current_state%global_grid%configuration%vertical%prefn(:) + end if + else if (trim(coordinate) .eq. 'height') then + vert_key = Z_KEY + if (key .eq. WSUBS_KEY) then + vert_grid = current_state%global_grid%configuration%vertical%z(:) + else + vert_grid = current_state%global_grid%configuration%vertical%zn(:) + end if + else + call log_log(LOG_ERROR, "Must specify vertical coordinate for forcing file as 'height' [m] or 'pressure' [Pa] "// & + "for '"//trim(key)//"' of file: "//trim(filename)) + end if + + ! open forcing file + call check_forcing_status(nf90_open(path = trim(filename), mode = nf90_nowrite, ncid = ncid)) + + ! read the dimension sizes and allocate space to receive the data + call read_2d_forcing_dimensions(ncid, trim(vert_key), time_dim_len, vert_dim_len) + allocate(tvdata%forcing_times(time_dim_len), vert_coords(vert_dim_len), input_forcing(vert_dim_len, time_dim_len), & + tvdata%forcing_values(size(vert_grid), time_dim_len) ) + + ! read the forcing coordinates and data, then close file + call read_2d_forcing_variables(trim(filename), ncid, time_dim_len, tvdata%forcing_times, & + trim(vert_key), vert_dim_len, vert_coords, & + key, input_forcing) + call check_forcing_status(nf90_close(ncid)) + + + ! interpolate forcing levels onto the MONC vertical grid (vert_grid), for all forcing times + ! Linear gradient extrapolation beyond the input height bounds is implicitly performed. + ! This behaviour is different from that in piecewise_linear_1d, which does not extrapolate. + call piecewise_linear_2d(vert_coords, tvdata%forcing_times, input_forcing, & ! input coordinates and data + vert_grid, tvdata%forcing_values) ! output vertical coords and data + ! clean up + deallocate(vert_coords, input_forcing) + + end subroutine init_time_varying_forcing + + + !> Send warning message for the provided bounds of the specified forcing. + !! @param source Specific source information for this message + subroutine warn_forcing_bounds(source) + character(*), intent(in) :: source + + call log_master_log(LOG_WARN, "Input forcing profile coordinates for [ "//trim(source)//& + " ] do not cover the full depth of the model domain. Values outside of the provided "//& + "range have been set to zero.") + end subroutine warn_forcing_bounds end module forcing_mod diff --git a/components/gridmanager/src/gridmanager.F90 b/components/gridmanager/src/gridmanager.F90 index 16d3d1ac..69e04823 100644 --- a/components/gridmanager/src/gridmanager.F90 +++ b/components/gridmanager/src/gridmanager.F90 @@ -13,6 +13,8 @@ module gridmanager_mod use saturation_mod, only : qsaturation, dqwsatdt use q_indices_mod, only: get_q_index, standard_q_names use interpolation_mod, only: piecewise_linear_1d + use rcemip_mod, only: rcemip_init + use tracers_mod, only: reinitialise_trajectories implicit none @@ -28,7 +30,9 @@ module gridmanager_mod real, parameter :: DEFAULT_SPACING = 1.E9 !< The default spacing used if no grid is active in a specific dimension real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: qinit - public gridmanager_get_descriptor + public gridmanager_get_descriptor,set_up_vertical_reference_properties,set_anelastic_pressure, & + setup_reference_state_liquid_water_temperature_and_saturation, & + calculate_mixing_length_for_neutral_case, set_buoyancy_coefficient contains @@ -160,14 +164,13 @@ end subroutine set_vertical_reference_profile !> Calculates the initial profiles for U, V, TH & Q if required !! @param current_state The current model state_mod !! @param vertical_grid The vertical grid that we are working on - !! @param kkp Number of grid points in a vertical column subroutine calculate_initial_profiles(current_state, vertical_grid) type(model_state_type), intent(inout) :: current_state type(vertical_grid_configuration_type), intent(inout) :: vertical_grid integer :: nq_init ! The number of q fields to initialize integer :: nzq ! The number of input levels for q_init - integer :: i,j,n, k ! loop counters + integer :: i,j,n, k, i_tracer ! loop counters integer :: iq ! temporary q varible index real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: f_init_pl_q ! Initial node values for q variables @@ -214,6 +217,10 @@ subroutine calculate_initial_profiles(current_state, vertical_grid) if (l_init_pl_q) then allocate(names_init_pl_q(options_get_array_size(current_state%options_database, "names_init_pl_q"))) call options_get_string_array(current_state%options_database, "names_init_pl_q", names_init_pl_q) + if (size(names_init_pl_q) .eq. 0) then + call log_master_log(LOG_ERROR, "Model configured with l_init_pl_q=.true., but "//& + "no names_init_pl_q have been specified") + end if do n = 1,size(names_init_pl_q) if (trim(names_init_pl_q(n)) .eq. 'vapour' .and. l_init_pl_rh) then call log_master_log(LOG_ERROR, "Initialisation of vapour and RH - STOP") @@ -226,21 +233,24 @@ subroutine calculate_initial_profiles(current_state, vertical_grid) l_thref=options_get_logical(current_state%options_database, "l_thref") l_matchthref=options_get_logical(current_state%options_database, "l_matchthref") - if (l_thref)then - if (.not. l_matchthref)then - allocate(z_thref(options_get_array_size(current_state%options_database, "z_thref")), & - f_thref(options_get_array_size(current_state%options_database, "f_thref"))) - call options_get_real_array(current_state%options_database, "z_thref", z_thref) - call options_get_real_array(current_state%options_database, "f_thref", f_thref) - call check_top(zztop, z_thref(size(z_thref)), 'z_thref') - zgrid=current_state%global_grid%configuration%vertical%zn(:) - call piecewise_linear_1d(z_thref(1:size(z_thref)), f_thref(1:size(f_thref)), zgrid, & - current_state%global_grid%configuration%vertical%thref) - deallocate(z_thref, f_thref) + if (.not. current_state%continuation_run) then ! For continuations, ensure thref is that from checkpoint + if (l_thref)then + if (.not. l_matchthref)then + allocate(z_thref(options_get_array_size(current_state%options_database, "z_thref")), & + f_thref(options_get_array_size(current_state%options_database, "f_thref"))) + call options_get_real_array(current_state%options_database, "z_thref", z_thref) + call options_get_real_array(current_state%options_database, "f_thref", f_thref) + call check_top(zztop, z_thref(size(z_thref)), 'z_thref') + call check_input_levels(size(z_thref), size(f_thref), "f_thref") + zgrid=current_state%global_grid%configuration%vertical%zn(:) + call piecewise_linear_1d(z_thref(1:size(z_thref)), f_thref(1:size(f_thref)), zgrid, & + current_state%global_grid%configuration%vertical%thref) + deallocate(z_thref, f_thref) + end if + else + current_state%global_grid%configuration%vertical%thref(:)=current_state%thref0 end if - else - current_state%global_grid%configuration%vertical%thref(:)=current_state%thref0 - end if + end if if (l_init_pl_theta)then allocate(z_init_pl_theta(options_get_array_size(current_state%options_database, "z_init_pl_theta")), & @@ -252,9 +262,9 @@ subroutine calculate_initial_profiles(current_state, vertical_grid) zgrid=current_state%global_grid%configuration%vertical%zn(:) call piecewise_linear_1d(z_init_pl_theta(1:size(z_init_pl_theta)), f_init_pl_theta(1:size(f_init_pl_theta)), zgrid, & current_state%global_grid%configuration%vertical%theta_init) - if (l_matchthref) then + if (l_matchthref .and. .not. current_state%continuation_run) then ! For continuations, ensure thref is that from checkpoint if(.not. current_state%use_anelastic_equations) then - call log_master_log(LOG_ERROR, "Non-anelastic equation set and l_maththref are incompatible") + call log_master_log(LOG_ERROR, "Non-anelastic equation set and l_matchthref are incompatible") end if current_state%global_grid%configuration%vertical%thref = current_state%global_grid%configuration%vertical%theta_init end if @@ -316,9 +326,16 @@ subroutine calculate_initial_profiles(current_state, vertical_grid) nzq=size(z_init_pl_q) call check_top(zztop, z_init_pl_q(nzq), 'z_init_pl_q') zgrid=current_state%global_grid%configuration%vertical%zn(:) - allocate(f_init_pl_q_tmp(nq_init*nzq)) + allocate(f_init_pl_q_tmp(options_get_array_size(current_state%options_database, "f_init_pl_q"))) + if (nq_init*nzq .ne. size(f_init_pl_q_tmp)) then + call log_master_log(LOG_ERROR, "There is a mismatch between the number of initial moisture heights, "// & + "size(z_init_pl_q)="//trim(conv_to_string(nzq))// & + ", and the initial moisture values, "// & + "size(f_init_pl_q)="//trim(conv_to_string(size(f_init_pl_q_tmp)))// & + ". The length of f_init_pl_q should equal the length of z_init_pl_q "// & + "multiplied by the number of names_init_pl_q.") + end if call options_get_real_array(current_state%options_database, "f_init_pl_q", f_init_pl_q_tmp) - !call check_input_levels(size(z_init_pl_q), size(f_init_pl_q_tmp), "f_init_pl_q_tmp") allocate(f_init_pl_q(nzq, nq_init)) f_init_pl_q(1:nzq, 1:nq_init)=reshape(f_init_pl_q_tmp, (/nzq, nq_init/)) do n=1, nq_init @@ -337,7 +354,27 @@ subroutine calculate_initial_profiles(current_state, vertical_grid) end if end do deallocate(f_init_pl_q_tmp, z_init_pl_q, f_init_pl_q, names_init_pl_q) - end if + end if + + ! Override with RCEMIP initial conditions, if logical is set. + if (options_get_logical(current_state%options_database, "l_rcemip_initial")) & + call rcemip_init(current_state) + + if (current_state%n_tracers .gt. 0) then + if (.not. current_state%continuation_run) then + do i_tracer = 1,current_state%n_tracers + current_state%tracer(i_tracer)%data(:,:,:) = 0.0_DEFAULT_PRECISION + current_state%ztracer(i_tracer)%data(:,:,:) = 0.0_DEFAULT_PRECISION + end do + end if + end if + + if (current_state%traj_tracer_index .gt. 0) then + if (.not. current_state%continuation_run) then + call reinitialise_trajectories(current_state) + end if + end if + deallocate(zgrid) end subroutine calculate_initial_profiles @@ -846,7 +883,7 @@ subroutine check_top(zztop, z, info) character(*), intent(in) :: info if (z Displays some debugging information about who is sending what if that logging_mod level is selected @@ -459,5 +509,13 @@ subroutine perform_local_data_copy_for_all_prognostics(current_state, halo_depth current_state%parallel%my_rank, halo_depth, involve_corners) end if end do + if (current_state%n_tracers .gt. 0) then + do i=1, current_state%n_tracers + call perform_local_data_copy_for_field(current_state%tracer(i)%data, current_state%local_grid, & + current_state%parallel%my_rank, halo_depth, involve_corners) + call perform_local_data_copy_for_field(current_state%ztracer(i)%data, current_state%local_grid, & + current_state%parallel%my_rank, halo_depth, involve_corners) + end do + end if end subroutine perform_local_data_copy_for_all_prognostics end module haloswapper_mod diff --git a/components/iobridge/src/iobridge.F90 b/components/iobridge/src/iobridge.F90 index dbee0f21..71107cc9 100644 --- a/components/iobridge/src/iobridge.F90 +++ b/components/iobridge/src/iobridge.F90 @@ -8,12 +8,10 @@ module iobridge_mod use conversions_mod, only : conv_to_string use state_mod, only : model_state_type use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX, local_grid_type - use optionsdatabase_mod, only : options_size, options_get_logical + use optionsdatabase_mod, only : options_size, options_get_logical, options_get_integer, options_get_string, options_get_real use prognostics_mod, only : prognostic_field_type use datadefn_mod, only : DEFAULT_PRECISION, SINGLE_PRECISION, DOUBLE_PRECISION, STRING_LENGTH use logging_mod, only : LOG_ERROR, LOG_WARN, log_log, log_master_log - use optionsdatabase_mod, only : options_get_integer - use q_indices_mod, only : q_metadata_type, get_indices_descriptor use registry_mod, only : get_all_component_published_fields, get_component_field_value, & get_component_field_information, is_component_enabled use io_server_client_mod, only : COMMAND_TAG, DATA_TAG, REGISTER_COMMAND, DEREGISTER_COMMAND, DATA_COMMAND_START, & @@ -24,8 +22,10 @@ module iobridge_mod get_mpi_datatype_from_internal_representation, pack_scalar_field, pack_array_field, pack_map_field use mpi, only : MPI_COMM_WORLD, MPI_INT, MPI_BYTE, MPI_REQUEST_NULL, MPI_STATUSES_IGNORE, MPI_STATUS_IGNORE, MPI_STATUS_SIZE use q_indices_mod, only : q_metadata_type, get_max_number_q_indices, get_indices_descriptor, get_number_active_q_indices + use tracers_mod, only : get_tracer_name, reinitialise_trajectories, traj_interval use conditional_diagnostics_column_mod, only : ncond, ndiag, cond_request, diag_request, cond_long, diag_long + use socrates_couple_mod, only : socrates_couple_get_descriptor implicit none @@ -47,7 +47,7 @@ module iobridge_mod type io_configuration_data_definition_type character(len=STRING_LENGTH) :: name logical :: send_on_terminate - integer :: number_of_data_fields, frequency, mpi_datatype + integer :: number_of_data_fields, frequency, mpi_datatype, command_data type(io_configuration_field_type), dimension(:), allocatable :: fields integer :: dump_requests(2) !< Dump non blocking send request handles character, dimension(:), allocatable :: send_buffer !< Send buffer which holds the model during a dump @@ -55,7 +55,10 @@ module iobridge_mod type(io_configuration_data_definition_type), dimension(:), allocatable :: data_definitions type(map_type) :: unique_field_names, sendable_fields, component_field_descriptions - logical :: io_server_enabled, in_finalisation_callback + logical :: io_server_enabled, in_finalisation_callback, socrates_enabled + integer :: radiation_interval + type(component_descriptor_type) :: socrates_descriptor + real(kind=DEFAULT_PRECISION) :: dtmmin public iobridge_get_descriptor @@ -85,6 +88,8 @@ subroutine init_callback(current_state) io_server_enabled=.true. in_finalisation_callback=.false. + call read_and_check_timing_options(current_state) + call populate_sendable_fields(current_state) mpi_type_data_sizing_description=build_mpi_type_data_sizing_description() @@ -99,6 +104,9 @@ subroutine init_callback(current_state) call mpi_type_free(mpi_type_field_description, ierr) call build_mpi_data_types() + + call setup_timing_parameters(current_state) + end subroutine init_callback !> Model dump call back, called for each model dump phase @@ -106,17 +114,76 @@ end subroutine init_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: i + integer :: i, snc + logical :: data_sent + + data_sent=.false. if (.not. io_server_enabled) return - do i=1, size(data_definitions) - if (data_definitions(i)%frequency .gt. 0) then - if (mod(current_state%timestep, data_definitions(i)%frequency) == 0) then - call send_data_to_io_server(current_state, i) - end if + ! Send data definitions for active sampling intervals + do snc=1,size(current_state%sampling(:)%interval) + if (current_state%sampling(snc)%active) then + do i=1, size(data_definitions) + if (data_definitions(i)%frequency == current_state%sampling(snc)%interval) then + call send_data_to_io_server(current_state, i) + data_sent=.true. + end if + end do end if end do + + ! Update time parameters if data was sent + if (data_sent) then + if (current_state%time_basis) then + ! Release the time_basis dtm lock and eliminate accumulated rounding error on 'time' + if (current_state%diagnostic_sample_timestep) then + current_state%normal_step=.true. + current_state%time = & + real(nint(current_state%time + current_state%dtm),kind=DEFAULT_PRECISION) & + - current_state%dtm + end if + ! Increment next sample time if data was written for this interval + where(current_state%sampling(:)%active) & + current_state%sampling(:)%next_time = current_state%sampling(:)%next_time + & + current_state%sampling(:)%interval + + ! force_output_on_interval + else if (current_state%force_output_on_interval) then + do i=1,size(current_state%sampling(:)) + if (current_state%timestep .eq. current_state%sampling(i)%next_step) then + ! Release the time_basis dtm lock and eliminate accumulated rounding error on 'time' + if (abs(current_state%time+current_state%dtm - current_state%sampling(i)%next_time) & + .lt. dtmmin/10) then + current_state%normal_step=.true. + current_state%time = & + real(nint(current_state%time + current_state%dtm),kind=DEFAULT_PRECISION) & + - current_state%dtm + ! Update next output time + current_state%sampling(i)%next_time = & + minval(((nint(current_state%time + current_state%dtm) & + / current_state%sampling(i)%output(:)) + 1) & + * current_state%sampling(i)%output(:)) + end if + !Update next sample step. + current_state%sampling(i)%next_step = current_state%sampling(i)%next_step & + + current_state%sampling(i)%interval + end if + end do + end if ! time_basis or force_output_on_interval check + end if ! Update time parameters if data was sent + + ! Adjust radiation timings under time_basis + if (current_state%radiation_timestep .and. current_state%time_basis) then + current_state%normal_step=.true. + current_state%time = & + real(nint(current_state%time + current_state%dtm),kind=DEFAULT_PRECISION) & + - current_state%dtm + where (current_state%sampling(:)%radiation) & + current_state%sampling(:)%next_time = current_state%sampling(:)%next_time + & + current_state%sampling(:)%interval + end if + end subroutine timestep_callback !> Sends data to the IO server @@ -137,8 +204,9 @@ subroutine send_data_to_io_server(current_state, data_index) ! Pack the send buffer and send it to the IO server call pack_send_buffer(current_state, data_definitions(data_index)) - command_to_send=DATA_COMMAND_START+data_index - call mpi_issend(command_to_send, 1, MPI_INT, current_state%parallel%corresponding_io_server_process, & + data_definitions(data_index)%command_data=DATA_COMMAND_START+data_index + call mpi_issend(data_definitions(data_index)%command_data, 1, MPI_INT, & + current_state%parallel%corresponding_io_server_process, & COMMAND_TAG, MPI_COMM_WORLD, data_definitions(data_index)%dump_requests(1), ierr) call mpi_issend(data_definitions(data_index)%send_buffer, 1, data_definitions(data_index)%mpi_datatype, & current_state%parallel%corresponding_io_server_process, DATA_TAG+data_index, MPI_COMM_WORLD, & @@ -389,6 +457,11 @@ subroutine populate_globally_visible_sendable_fields(current_state) raw_generic=>generate_sendable_description(z_size, y_size, x_size) call c_put_generic(sendable_fields, "p", raw_generic, .false.) end if + if (current_state%n_tracers .gt. 0) then + raw_generic=>generate_sendable_description(z_size, y_size, x_size, current_state%n_tracers) + call c_put_generic(sendable_fields, "tracer", raw_generic, .false.) + call c_put_generic(sendable_fields, "ztracer", raw_generic, .false.) + end if ! need to dump heating rate tendency from socrates radiation if (is_component_enabled(current_state%options_database, "socrates_couple")) then raw_generic=>generate_sendable_description(z_size, y_size, x_size) @@ -465,7 +538,7 @@ subroutine send_monc_specific_data_to_server(current_state, mpi_type_data_sizing request_handles(1)=send_data_field_sizes_to_server(current_state, mpi_type_data_sizing_description, & data_description, number_unique_fields) buffer_size=(kind(dreal)*current_state%local_grid%size(Z_INDEX))*2 + (STRING_LENGTH * current_state%number_q_fields & - + 4*ncond*STRING_LENGTH + 2*ndiag*STRING_LENGTH ) + + STRING_LENGTH * current_state%n_tracers + 4*ncond*STRING_LENGTH + 2*ndiag*STRING_LENGTH ) allocate(buffer(buffer_size)) request_handles(2)=send_general_monc_information_to_server(current_state, buffer) call mpi_waitall(2, request_handles, MPI_STATUSES_IGNORE, ierr) @@ -510,7 +583,7 @@ integer function send_general_monc_information_to_server(current_state, buffer) type(model_state_type), target, intent(inout) :: current_state character, dimension(:), intent(inout) :: buffer - character(len=STRING_LENGTH) :: q_field_name, cd_field_name + character(len=STRING_LENGTH) :: q_field_name, tracer_name, cd_field_name type(q_metadata_type) :: q_meta_data integer :: current_loc, n, ierr, request_handle @@ -527,6 +600,16 @@ integer function send_general_monc_information_to_server(current_state, buffer) current_loc=pack_scalar_field(buffer, current_loc, string_value=q_field_name) end do end if + + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + tracer_name=get_tracer_name(n, current_state%traj_tracer_index, & + current_state%radioactive_tracer_index, & + current_state%n_radioactive_tracers, current_state%n_tracers) + current_loc=pack_scalar_field(buffer, current_loc, string_value=tracer_name) + end do + end if + current_loc=pack_array_field(buffer, current_loc, real_array_1d=current_state%global_grid%configuration%vertical%z) do n=1,ncond*2 @@ -557,7 +640,7 @@ end function send_general_monc_information_to_server !> Packages the local MONC decomposition information into descriptions for communication !! @param current_state The current model state - !! @param data_description THe data description to pack into + !! @param data_description The data description to pack into subroutine package_local_monc_decomposition_into_descriptions(current_state, data_description) type(model_state_type), target, intent(inout) :: current_state type(data_sizing_description_type), dimension(:), intent(inout) :: data_description @@ -640,6 +723,8 @@ end subroutine assemble_individual_description !> Registers this MONC with the corresponding IO server. This will encapsulate the entire protocol, which is sending the !! registration command, receiving the data and field definitions from the IO server and then sending back the sizing !! for the fields that this MONC will contribute. + !! Additionally, this receives the unique sampling/output interval pairs from the IO server and + !! stores them in the current_state%sampling structure. !! @param current_state The current model state !! @param mpi_type_definition_description MPI data type for data definition message !! @param mpi_type_field_description MPI data type for field definition message @@ -649,13 +734,17 @@ subroutine register_with_io_server(current_state, mpi_type_definition_descriptio type(definition_description_type), dimension(:), allocatable :: definition_descriptions type(field_description_type), dimension(:), allocatable :: field_descriptions - integer :: number_defns, number_fields, status(MPI_STATUS_SIZE), ierr + integer :: number_defns, number_fields, status(MPI_STATUS_SIZE), ierr, nvalues, i, psize + integer, dimension(:,:), allocatable :: tmparr + logical, dimension(:), allocatable :: mask call mpi_send(REGISTER_COMMAND, 1, MPI_INT, current_state%parallel%corresponding_io_server_process, & COMMAND_TAG, MPI_COMM_WORLD, ierr) call mpi_probe(current_state%parallel%corresponding_io_server_process, DATA_TAG, MPI_COMM_WORLD, status, ierr) + call mpi_get_count(status, mpi_type_definition_description, number_defns, ierr) + allocate(definition_descriptions(number_defns)) call mpi_recv(definition_descriptions, number_defns, mpi_type_definition_description, & @@ -667,6 +756,71 @@ subroutine register_with_io_server(current_state, mpi_type_definition_descriptio current_state%parallel%corresponding_io_server_process, DATA_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE, ierr) call populate_data_definition_configuration(definition_descriptions, number_defns, field_descriptions, number_fields) deallocate(definition_descriptions) + + call mpi_probe(current_state%parallel%corresponding_io_server_process, DATA_TAG, MPI_COMM_WORLD, status, ierr) + call mpi_get_count(status, MPI_INT, nvalues, ierr) + allocate(tmparr(nvalues/2,2)) + call mpi_recv(tmparr, nvalues, MPI_INT, & + current_state%parallel%corresponding_io_server_process, DATA_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE, ierr) + + ! Store all unique non-zero user-selected sampling intervals (integers of time or timestep) + ! tmparr contains unique sample/output pairs + ! tmparr index(:,1)=sampling intervals + ! tmparr ineex(:,2)=output intervals + psize = 0 + allocate(mask(nvalues/2)) + mask(:) = .false. + ! Isolate unique sampling intervals + do i=1,nvalues/2 + if ((count( tmparr(i,1) == tmparr(:,1)) .eq. 1) & + .or. .not. any(tmparr(i,1) == tmparr(:,1) .and. mask)) & + mask(i) = .true. + end do + + ! If radiation is enabled under time_basis and not required every timestep, + ! add a sampling entry to track the radiation calculation + if (socrates_enabled .and. current_state%time_basis .and. radiation_interval .gt. 0) then + psize = count(mask) + 1 + else + psize = count(mask) + end if + + ! Allocate the sampling structure and enter the interval values + allocate(current_state%sampling(psize)) + current_state%sampling(1:count(mask))%interval = pack(tmparr(:,1), mask) + + ! For each unique diagnostic sample interval, + ! find all non-zero, associated output intervals and store + do i=1,size(current_state%sampling(1:count(mask))) + mask(:) = tmparr(:,1) == current_state%sampling(i)%interval .and. & + tmparr(:,2) .gt. 0 + nvalues=count(mask) + allocate(current_state%sampling(i)%output(nvalues)) + current_state%sampling(i)%output(:) = pack(tmparr(:,2), mask) + end do + deallocate(mask) + deallocate(tmparr) + + ! Populate the radiation interval if not already used + if (socrates_enabled .and. current_state%time_basis .and. radiation_interval .gt. 0) then + current_state%sampling(psize)%radiation = .true. + current_state%sampling(psize)%interval = radiation_interval + allocate(current_state%sampling(psize)%output(1)) + current_state%sampling(psize)%output(1) = -9999 ! this is a dummy item in this case + end if + + ! Enforce time_basis sampling regularity (prevents bugs) + if (current_state%time_basis) then + if (any(mod(current_state%sampling(:)%interval,minval(current_state%sampling(:)%interval)) & + .ne. 0)) then + call log_master_log(LOG_ERROR, "Under time_basis, all sampling intervals must be "//& + "divisible by the smallest sampling interval ("//& + trim(conv_to_string(minval(current_state%sampling(:)%interval)))//& + " s). This rule applies system-wide (diagnostics, radiation, checkpoints, etc.") + + end if + end if + end subroutine register_with_io_server !> Retrieve the total number of fields, which is all the fields in all the data definitions @@ -720,6 +874,25 @@ subroutine populate_data_definition_configuration(definition_descriptions, numbe call c_put_integer(unique_field_names, field_descriptions(i)%field_name, 1) end if if (.not. field_descriptions(i)%optional) data_definitions(definition_index)%fields(field_index)%enabled=.true. + + ! Verify valid configuration of SOCRATES radiation diagnostics + if (socrates_enabled .and. radiation_interval .gt. 0 .and. & + definition_descriptions(definition_index)%frequency .gt. 0) then + if (any(field_descriptions(i)%field_name .eq. socrates_descriptor%published_fields(:))) then + if (mod(definition_descriptions(definition_index)%frequency, radiation_interval) .ne. 0 .or. & + definition_descriptions(definition_index)%frequency .lt. radiation_interval) then + call log_master_log(LOG_ERROR, "To guarantee availability of radiation "//& + "diagnostics, the sampling interval (currently: "//& + trim(conv_to_string(definition_descriptions(definition_index)%frequency))//& + ") of the diagnostic ("//trim(field_descriptions(i)%field_name)//& + ") must be a MULTIPLE of AND .GE. the radiation calculation interval "//& + "(currently: rad_interval="//trim(conv_to_string(radiation_interval))//& + "). This means radiation diagnostics cannot be sampled between calculations."//& + " Check variable's sampling interval (frequency=#) in the xml data-definition." ) + end if !err + end if !compare + end if !enabled + end do end subroutine populate_data_definition_configuration @@ -764,6 +937,14 @@ subroutine pack_send_buffer(current_state, data_definition) end if end if end do + + if (current_state%traj_tracer_index .gt. 0 .and. data_definition%name == "3d_tracer_data") then + if (mod(nint(current_state%time+current_state%dtm),traj_interval) .eq. 0) then + call reinitialise_trajectories(current_state) + current_state%reinit_tracer=.true. + end if + end if + end subroutine pack_send_buffer !> Packs scalar fields into the send bufer @@ -778,6 +959,10 @@ integer function pack_scalar_into_send_buffer(current_state, data_definition, fi type(io_configuration_field_type), intent(in) :: field integer, intent(in) :: current_buffer_point + integer :: normal_step_int + + normal_step_int = 0 + if (field%name .eq. "timestep") then pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & int_value=current_state%timestep) @@ -824,6 +1009,12 @@ integer function pack_scalar_into_send_buffer(current_state, data_definition, fi else if (field%name .eq. "nqfields") then pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & int_value=current_state%number_q_fields) + else if (field%name .eq. "ntracers") then + pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & + int_value=current_state%n_tracers) + else if (field%name .eq. "nradtracers") then + pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & + int_value=current_state%n_radioactive_tracers) else if (field%name .eq. "dtm") then pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & real_value=current_state%dtm) @@ -833,9 +1024,19 @@ integer function pack_scalar_into_send_buffer(current_state, data_definition, fi else if (field%name .eq. "absolute_new_dtm") then pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & real_value=current_state%absolute_new_dtm) + else if (field%name .eq. "normal_step") then + if (current_state%normal_step) normal_step_int = 1 + pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & + int_value=normal_step_int) else if (field%name .eq. "rad_last_time") then pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & real_value=current_state%rad_last_time) + else if (field%name .eq. "last_cfl_timestep") then + pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & + int_value=current_state%last_cfl_timestep) + else if (field%name .eq. "reconfig_timestep_offset") then + pack_scalar_into_send_buffer=pack_scalar_field(data_definition%send_buffer, current_buffer_point, & + int_value=current_state%reconfig_timestep_offset) else ! Handle component field here pack_scalar_into_send_buffer=handle_component_field_scalar_packing_into_send_buffer(current_state, & @@ -992,6 +1193,12 @@ integer function pack_array_into_send_buffer(current_state, data_definition, fie else if (field%name .eq. "zq") then pack_array_into_send_buffer=pack_q_fields(data_definition%send_buffer, current_state%zq, current_state%number_q_fields, & current_buffer_point, current_state%local_grid) + else if (field%name .eq. "tracer") then + pack_array_into_send_buffer=pack_q_fields(data_definition%send_buffer, current_state%tracer, current_state%n_tracers, & + current_buffer_point, current_state%local_grid) + else if (field%name .eq. "ztracer") then + pack_array_into_send_buffer=pack_q_fields(data_definition%send_buffer, current_state%ztracer, current_state%n_tracers, & + current_buffer_point, current_state%local_grid) else if (field%name .eq. "th") then pack_array_into_send_buffer=pack_prognostic_flow_field(data_definition%send_buffer, current_state%th, current_buffer_point,& current_state%local_grid) @@ -1119,4 +1326,131 @@ integer function pack_q_fields(buffer, q_fields, number_q_fields, start_offset, end do pack_q_fields=target_end+1 end function pack_q_fields + + + !> Reads in and checks the timing options + subroutine read_and_check_timing_options(current_state) + type(model_state_type), target, intent(inout) :: current_state + + ! Obtain logical switch for "as-needed" diagnostic calculations (only when sampling) + current_state%only_compute_on_sample_timestep = & + options_get_logical(current_state%options_database, "only_compute_on_sample_timestep") + + ! Obtain logical switch to ensure that samples are sent on the requestes output_frequency + ! time_basis=.true. does this automatically + current_state%force_output_on_interval = & + options_get_logical(current_state%options_database, "force_output_on_interval") + + ! Obtain logical switch for time_basis handling + current_state%time_basis = options_get_logical(current_state%options_database, "time_basis") + + ! Send logical behaviour message + if (current_state%force_output_on_interval .and. current_state%time_basis) & + call log_master_log(LOG_WARN, "Both force_output_on_interval and time_basis are set to "//& + ".true.. Behaviour defaults to that of time_basis.") + + ! Check l_constant_dtm for consistency + if (options_get_logical(current_state%options_database, "l_constant_dtm")) then + if (current_state%time_basis) then + if (any(mod(real( current_state%sampling(:)%interval), real(current_state%dtm)) .gt. 0)) then + call log_master_log(LOG_ERROR, "All sampling intervals must be a multiple of dtm "//& + "when l_constant_dtm=.true.") + end if + else if (current_state%force_output_on_interval) then + call log_master_log(LOG_ERROR, "Use of l_constant_dtm requires force_output_on_interval"//& + "=.false. and time_basis=.false. or time_basis=.true. with all"//& + " sampling intervals a multiple of dtm.") + end if + end if + + ! Record SOCRATES information, if enabled + socrates_enabled = is_component_enabled(current_state%options_database, "socrates_couple") + radiation_interval = options_get_integer(current_state%options_database, "rad_interval") + if (socrates_enabled) then + socrates_descriptor = socrates_couple_get_descriptor() + end if + + end subroutine read_and_check_timing_options + + + !> Initialises timimg paramters + !! @param current_state The current model state + subroutine setup_timing_parameters(current_state) + type(model_state_type), target, intent(inout) :: current_state + integer :: sample_nts, next_sample_time, i + + ! Set up the sampling times for time_basis or force_output_on_interval + if (current_state%time_basis) then + dtmmin = options_get_real(current_state%options_database, "cfl_dtmmin") + current_state%sampling(:)%next_time = ((int(current_state%time + dtmmin) & + / current_state%sampling(:)%interval) + 1) & + * current_state%sampling(:)%interval + + else if (current_state%force_output_on_interval) then + dtmmin = options_get_real(current_state%options_database, "cfl_dtmmin") + do i=1,size(current_state%sampling(:)) + current_state%sampling(i)%next_time = minval(((int(current_state%time + dtmmin) & + / current_state%sampling(i)%output(:)) + 1) & + * current_state%sampling(i)%output(:)) + if (size(current_state%sampling(i)%output(:)) .eq. 0) then + ! There are no specified output intervals for this sampling interval, so we set the + ! next "output time" (which could change dtm) to be the largest possible integer. + ! This ensures that in these cases (possibly for a non-zero checkpoint_frequency or + ! a radiation interval) the samples simply occur on the timestep interval, and the + ! request has no impact on dtm changes. In the case of a specified non-zero + ! checkpoint_frequency, though, checkpoints will be written at that sampling frequency + ! without any consideration for the model time. + ! Further, note that this only needs to happen here. Updates to %next_time in this + ! module's timestep_callback only occur when writing at an existing %next_time, which + ! won't reasonably be reached in this case. + current_state%sampling(i)%next_time = huge(current_state%sampling(i)%next_time) + else + current_state%sampling(i)%next_time = minval(((int(current_state%time + dtmmin) & + / current_state%sampling(i)%output(:)) + 1) & + * current_state%sampling(i)%output(:) ) + end if + current_state%sampling(i)%next_step = (current_state%timestep & + / current_state%sampling(i)%interval + 1) & + * current_state%sampling(i)%interval + if (mod(current_state%sampling(i)%interval,minval(current_state%sampling(:)%interval)) & + .ne. 0) then + call log_master_log(LOG_ERROR, "Use of force_output_on_interval requires that all"//& + " sampling intervals be evenly divisible by the smallest sampling interval. "//& + " Smallest: "//trim(conv_to_string(minval(current_state%sampling(:)%interval)))//& + " Conflicting: "//trim(conv_to_string(current_state%sampling(i)%interval))) + end if + end do + end if ! time_basis=.true. or force_output_on_interval=.true. + + ! If we are restarting from a NON-normal_step under time_basis, + ! then the next sample steps need to be set now. + ! This is similar to the code in cfltest's evaluate_time_basis. + if (.not. current_state%normal_step .and. current_state%time_basis) then + + next_sample_time = minval(current_state%sampling(:)%next_time) + sample_nts = nint((next_sample_time - current_state%time) / current_state%dtm_new) - 1 + + ! Record the next sampling step for intervals matching the next time + where(next_sample_time .eq. current_state%sampling(:)%next_time) & + current_state%sampling(:)%next_step = current_state%timestep + sample_nts + end if + + + ! If this is a reconfig_run, it's possible that the previous run did not use time_basis, and it could + ! be the case that taking 1 timestep would put us beyond an expected sample time. + ! Check for and correct for this case, if needed. + ! Correction is to set the dtm to align with the next sample time and set the next_step to the current step. + if (current_state%reconfig_run .and. current_state%time_basis .and. current_state%normal_step) then + next_sample_time = minval(current_state%sampling(:)%next_time) + if (next_sample_time .lt. current_state%time + current_state%dtm) then + current_state%dtm = next_sample_time - current_state%time + current_state%normal_step = .false. + where(next_sample_time .eq. current_state%sampling(:)%next_time) & + current_state%sampling(:)%next_step = current_state%timestep + end if ! check for passing next_sample_time in one step + end if ! check for reconfig_run with time_basis + + + end subroutine setup_timing_parameters + end module iobridge_mod diff --git a/components/iterativesolver/src/iterativesolver.F90 b/components/iterativesolver/src/iterativesolver.F90 index a5fcc8e9..19a12436 100644 --- a/components/iterativesolver/src/iterativesolver.F90 +++ b/components/iterativesolver/src/iterativesolver.F90 @@ -35,7 +35,7 @@ module iterativesolver_mod real(kind=DEFAULT_PRECISION), parameter :: TINY = 1.0e-16 !< Minimum residual - if we go below this then something has gone wrong type(halo_communication_type), save :: halo_swap_state !< The halo swap state as initialised by that module - real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: psource, prev_p !< Passed to BiCGStab as the RHS + real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable, target :: psource, prev_p !< Passed to BiCGStab as the RHS logical :: first_run=.true. type(matrix_type) :: A @@ -75,6 +75,9 @@ subroutine initialisation_callback(current_state) current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2)) + ! Record previous values for p: either zeros (cold start, see diverr) or those from checkpoint + prev_p = current_state%p%data + A=create_problem_matrix(current_state%local_grid%size(Z_INDEX)) call set_matrix_for_poisson(current_state%global_grid%configuration, A, current_state%local_grid%size(Z_INDEX)) end subroutine initialisation_callback @@ -84,7 +87,7 @@ end subroutine initialisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: i_strt, i_end, j_strt, j_end, k_end + integer :: i_strt, i_end, j_strt, j_end, k_end, inc, knc i_strt = current_state%local_grid%local_domain_start_index(X_INDEX) i_end = current_state%local_grid%local_domain_end_index(X_INDEX) @@ -100,22 +103,24 @@ subroutine timestep_callback(current_state) call complete_nonblocking_halo_swap(current_state, halo_swap_state, perform_local_data_copy_for_p, copy_halo_buffer_to_p) psource=current_state%p%data + + ! Initial guess is set to previous timestep's p if (first_run) then - ! If first timestep then initial guess is zero - current_state%p%data=0.0_DEFAULT_PRECISION - first_run=.false. - else - ! Initial guess is set to previous timesteps p - current_state%p%data=prev_p + ! Halo swap of depth-1. + call swap_halo_prev_p(current_state) + first_run = .false. end if - + current_state%p%data = prev_p + if (symm_prob) then call cg_solver(current_state, A, current_state%p%data, psource, i_strt, i_end, j_strt, j_end, k_end) else call bicgstab(current_state, A, current_state%p%data, psource, i_strt, i_end, j_strt, j_end, k_end) end if - prev_p=current_state%p%data + ! Save values for next step + prev_p = current_state%p%data + end subroutine timestep_callback !> Called as MONC is shutting down and frees the halo swap state and deallocates local data @@ -233,9 +238,11 @@ subroutine bicgstab(current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end) end if if (err > tolerance) then - call log_log(LOG_WARN, "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) + call log_log(LOG_WARN, "Iterative solver bicgstab: "// & + "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) else if (current_state%parallel%my_rank==0 .and. log_get_logging_level() .eq. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& + call log_log(LOG_DEBUG,"Iterative solver bicgstab: "// & + "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& trim(conv_to_string(err, 5, .true.))//" initial norm="//trim(conv_to_string(init_err, 5, .true.))) end if end subroutine bicgstab @@ -304,9 +311,11 @@ subroutine cg_solver(current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end if( current_state%parallel%my_rank == 0 ) print*,it, err, init_err if (err > tolerance) then - call log_log(LOG_WARN, "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) + call log_log(LOG_WARN, "Iterative solver cg_solver: "// & + "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) else if (current_state%parallel%my_rank==0 .and. log_get_logging_level() .eq. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& + call log_log(LOG_DEBUG,"Iterative solver cg_solver: "// & + "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& trim(conv_to_string(err, 5, .true.))//" initial norm="//trim(conv_to_string(init_err, 5, .true.))) end if end subroutine cg_solver @@ -370,6 +379,19 @@ subroutine precond(current_state, A, s, r, preits) end do end subroutine precond + subroutine swap_halo_prev_p(current_state) + type(model_state_type), target, intent(inout) :: current_state + type(field_data_wrapper_type) :: source_data + + source_data%data => prev_p + + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, & + copy_calc_Ax_to_halo_buffer, source_data=(/source_data/)) + call complete_nonblocking_halo_swap(current_state, halo_swap_state, perform_local_data_copy_for_calc_Ax, & + copy_halo_buffer_to_calc_Ax, source_data=(/source_data/)) + + end subroutine swap_halo_prev_p + !> Calculates A * x !! @param current_state The current model state !! @param A The matrix @@ -725,6 +747,12 @@ function create_problem_matrix(z_size) allocate(create_problem_matrix%u(z_size), create_problem_matrix%d(z_size), create_problem_matrix%p(z_size), & create_problem_matrix%lu_u(z_size), create_problem_matrix%lu_d(z_size), create_problem_matrix%vol(z_size)) + create_problem_matrix%u = 0.0_DEFAULT_PRECISION + create_problem_matrix%d = 0.0_DEFAULT_PRECISION + create_problem_matrix%p = 0.0_DEFAULT_PRECISION + create_problem_matrix%lu_u = 0.0_DEFAULT_PRECISION + create_problem_matrix%lu_d = 0.0_DEFAULT_PRECISION + create_problem_matrix%vol = 0.0_DEFAULT_PRECISION end function create_problem_matrix !> Completes the psrce calculation by waiting on all outstanding psrce communications to complete and then combine the diff --git a/components/iterativesolver_single_prec/makefile b/components/iterativesolver_single_prec/makefile new file mode 100644 index 00000000..3657c38b --- /dev/null +++ b/components/iterativesolver_single_prec/makefile @@ -0,0 +1,14 @@ +SRCSF = src/iterativesolver.F90 + +BUILDDIR=build +COREDIR=../../model_core/build +FFLAGS=-I $(BUILDDIR) -I $(COREDIR) $(COMPILERFFLAGS) +OBJS = $(patsubst %.F90,$(BUILDDIR)/%.o,$(SRCSF)) + +all: create-build-dirs $(OBJS) + +create-build-dirs: + mkdir -p $(BUILDDIR) + +$(OBJS) : $(BUILDDIR)/%.o : %.F90 + $(FTN) $(OPT) $(FFLAGS) $< -o $(BUILDDIR)/$(notdir $@) diff --git a/components/iterativesolver_single_prec/src/iterativesolver_single_prec.F90 b/components/iterativesolver_single_prec/src/iterativesolver_single_prec.F90 new file mode 100644 index 00000000..93fae7ed --- /dev/null +++ b/components/iterativesolver_single_prec/src/iterativesolver_single_prec.F90 @@ -0,0 +1,800 @@ +!> This is the iterative pressure solver and uses a Jacobi preconditioned BiCGStab which we implement here +module iterativesolver_single_prec_mod + use monc_component_mod, only : component_descriptor_type + use collections_mod, only : map_type + use optionsdatabase_mod, only : options_get_real, options_get_integer, options_get_logical + use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX, local_grid_type, grid_configuration_type + use state_mod, only : model_state_type + use datadefn_mod, only : DEFAULT_PRECISION, PRECISION_TYPE, & + SINGLE_PRECISION, SINGLE_PRECISION_TYPE + use logging_mod, only : LOG_WARN, LOG_DEBUG, log_log, log_get_logging_level + use conversions_mod, only : conv_to_string + use communication_types_mod, only : halo_communication_single_prec_type, halo_communication_type, & + neighbour_description_single_prec_type, & + field_data_wrapper_single_prec_type + use halo_communication_single_mod, only : copy_buffer_to_field, copy_field_to_buffer, perform_local_data_copy_for_field, & + init_halo_communication, finalise_halo_communication, initiate_nonblocking_halo_swap, complete_nonblocking_halo_swap, & + blocking_halo_swap, get_single_field_per_halo_cell + use registry_mod, only : is_component_enabled + use logging_mod, only : LOG_ERROR, log_master_log + use mpi, only : MPI_MAX, MPI_SUM, MPI_COMM_WORLD, MPI_REQUEST_NULL, MPI_STATUSES_IGNORE + implicit none + +#ifndef TEST_MODE + private +#endif + + !> A helper type to abstract the concrete details of the matrix + type matrix_type + real(kind=SINGLE_PRECISION) :: n, s, e, w + real(kind=SINGLE_PRECISION), dimension(:), allocatable :: u, d, p, lu_d, lu_u, vol + end type matrix_type + + real(kind=SINGLE_PRECISION) :: tolerance, relaxation !< Solving tollerance + integer :: max_iterations, & !< Maximum number of BiCGStab iterations + preconditioner_iterations !< Number of preconditioner iterations to perform per call + logical :: symm_prob + + real(kind=SINGLE_PRECISION), parameter :: TINY = 1.0e-16 !< Minimum residual - if we go below this then something has gone wrong + + type(halo_communication_single_prec_type), save :: halo_swap_state !< The halo swap state as initialised by that module + real(kind=SINGLE_PRECISION), dimension(:,:,:), allocatable :: psource, prev_p, p_data !< Passed to BiCGStab as the RHS + logical :: first_run=.true. + type(matrix_type) :: A + + public iterativesolver_single_prec_get_descriptor +contains + + !> Descriptor of the iterative solver component used by the registry + !! @returns The iterative solver component descriptor + type(component_descriptor_type) function iterativesolver_single_prec_get_descriptor() + iterativesolver_single_prec_get_descriptor%name="iterativesolver_single_prec" + iterativesolver_single_prec_get_descriptor%version=0.1 + iterativesolver_single_prec_get_descriptor%initialisation=>initialisation_callback + iterativesolver_single_prec_get_descriptor%timestep=>timestep_callback + iterativesolver_single_prec_get_descriptor%finalisation=>finalisation_callback + end function iterativesolver_single_prec_get_descriptor + + !> Initialisation callback hook which will set up the halo swapping state and allocate some data + !! @param current_state The current model state + subroutine initialisation_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state + + if (.not. is_component_enabled(current_state%options_database, "diverr")) then + call log_master_log(LOG_ERROR, "The iterative solver component requires the diverr component to be enabled") + end if + + tolerance=options_get_real(current_state%options_database, "tolerance") + max_iterations=options_get_integer(current_state%options_database, "max_iterations") + preconditioner_iterations=options_get_integer(current_state%options_database, "preconditioner_iterations") + symm_prob=options_get_logical(current_state%options_database, "symm_prob") + + call init_halo_communication(current_state, get_single_field_per_halo_cell, halo_swap_state, 1, .false.) + + allocate(psource(current_state%local_grid%size(Z_INDEX) + current_state%local_grid%halo_size(Z_INDEX) * 2, & + current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & + current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2),& + prev_p(current_state%local_grid%size(Z_INDEX) + current_state%local_grid%halo_size(Z_INDEX) * 2, & + current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & + current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2), & + p_data(current_state%local_grid%size(Z_INDEX) + current_state%local_grid%halo_size(Z_INDEX) * 2, & + current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & + current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2)) + + A=create_problem_matrix(current_state%local_grid%size(Z_INDEX)) + call set_matrix_for_poisson(current_state%global_grid%configuration, A, current_state%local_grid%size(Z_INDEX)) + end subroutine initialisation_callback + + !> Timestep callback, this ignores all but the last column where it calls the solver + !! @param current_state The current model state + subroutine timestep_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state + + integer :: i_strt, i_end, j_strt, j_end, k_end + + i_strt = current_state%local_grid%local_domain_start_index(X_INDEX) + i_end = current_state%local_grid%local_domain_end_index(X_INDEX) + j_strt = current_state%local_grid%local_domain_start_index(Y_INDEX) + j_end = current_state%local_grid%local_domain_end_index(Y_INDEX) + k_end = current_state%local_grid%size(Z_INDEX) + + call complete_psrce_calculation(current_state, current_state%local_grid%halo_size(Y_INDEX), & + current_state%local_grid%halo_size(X_INDEX)) + + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, copy_p_to_halo_buffer) + call deduce_global_divmax(current_state) + call complete_nonblocking_halo_swap(current_state, halo_swap_state, perform_local_data_copy_for_p, copy_halo_buffer_to_p) + + psource=real(current_state%p%data, kind=SINGLE_PRECISION) + if (first_run) then + ! If first timestep then initial guess is zero + current_state%p%data=0.0_DEFAULT_PRECISION + p_data=real(current_state%p%data, kind=SINGLE_PRECISION) + first_run=.false. + else + ! Initial guess is set to previous timesteps p + p_data = prev_p + end if + + if (symm_prob) then + call cg_solver(current_state, A, p_data, psource, i_strt, i_end, j_strt, j_end, k_end) + else + call bicgstab(current_state, A, p_data, psource, i_strt, i_end, j_strt, j_end, k_end) + end if + + prev_p=p_data + current_state%p%data = real(p_data, kind=DEFAULT_PRECISION) + end subroutine timestep_callback + + !> Called as MONC is shutting down and frees the halo swap state and deallocates local data + !! @param current_state The current model state + subroutine finalisation_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state + + call finalise_halo_communication(halo_swap_state) + deallocate(psource, prev_p, A%u, A%d, A%p, A%lu_u, A%lu_d, A%vol) + end subroutine finalisation_callback + + !> Performs the BiCGStab KS method + !! @param current_state The current model state + !! @param A The matrix + !! @param x The solution + !! @param b The RHS + subroutine bicgstab(current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end) + type(model_state_type), target, intent(inout) :: current_state + type(matrix_type), intent(inout) :: A + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: x + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(in) :: b + integer, intent(in) :: i_strt, i_end, j_strt, j_end, k_end + + integer :: it, i, j, k + real(kind=SINGLE_PRECISION) :: sc_err, alf, omg, nrm, my_rho, bet, tt, ts, ss, err, init_err, inner_prod_results(3) + real(kind=SINGLE_PRECISION), dimension(current_state%local_grid%size(Z_INDEX) + & + current_state%local_grid%halo_size(Z_INDEX) * 2, & + current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & + current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2) :: Ax, r, cr, pp, v, t, s, cs + + ! Calculate scale factor for error + sc_err = sqrt(inner_prod(current_state, b, b, i_strt, i_end, j_strt, j_end, k_end)) + sc_err = max(sc_err, 0.0001_SINGLE_PRECISION) + + ! Calculate initial residual + call calc_Ax(current_state, A, x, Ax) + + do i = i_strt, i_end + do j = j_strt, j_end + do k = 2, k_end + r(k,j,i) = b(k,j,i) - Ax(k,j,i) + cr(k,j,i) = r(k,j,i) + end do + end do + end do + + my_rho = inner_prod(current_state, r, r, i_strt, i_end, j_strt, j_end, k_end) + err = sqrt(my_rho)/sc_err + init_err = err + + alf = 1.0_SINGLE_PRECISION + omg = 1.0_SINGLE_PRECISION + nrm = 1.0_SINGLE_PRECISION + + if (err .ge. tolerance) then + do it=1, max_iterations + if (it > 1) my_rho = inner_prod(current_state, r, cr, i_strt, i_end, j_strt, j_end, k_end) + bet = (my_rho/nrm) * (alf/omg) + if (it == 1) then + call precond(current_state, A, pp, r, preconditioner_iterations) + else + do i = i_strt, i_end + do j = j_strt, j_end + do k = 2, k_end + t(k,j,i) = r(k,j,i) - bet*omg*v(k,j,i) + end do + end do + end do + call precond(current_state, A, s, t, preconditioner_iterations) + do i = i_strt, i_end + do j = j_strt, j_end + do k = 2, k_end + pp(k,j,i) = s(k,j,i) + bet*pp(k,j,i) + end do + end do + end do + end if + call calc_Ax(current_state, A, pp, v) + nrm = inner_prod(current_state, cr, v, i_strt, i_end, j_strt, j_end, k_end) + alf = my_rho / nrm + + do i = i_strt, i_end + do j = j_strt, j_end + do k = 2, k_end + s(k,j,i) = r(k,j,i) - alf*v(k,j,i) + end do + end do + end do + + call precond(current_state, A, cs, s, preconditioner_iterations) + call calc_Ax(current_state, A, cs, t) + + inner_prod_results=inner_prod_three_way(current_state, t, s, i_strt, i_end, j_strt, j_end, k_end) + tt = inner_prod_results(1) + ts = inner_prod_results(2) + ss = inner_prod_results(3) + omg = ts/tt + x = x + alf*pp + omg*cs + do i = i_strt, i_end + do j = j_strt, j_end + do k = 2, k_end + r(k,j,i) = s(k,j,i) - omg*t(k,j,i) + end do + end do + end do + nrm = my_rho + + if (abs(omg) < TINY) then + call log_log(LOG_WARN, "Convergence problem, omega="//conv_to_string(omg)) + endif + + err = sqrt(ss - 2*omg*ts + omg**2 *tt)/sc_err + if (err < tolerance) exit + end do + end if + + if (err > tolerance) then + call log_log(LOG_WARN, "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) + else if (current_state%parallel%my_rank==0 .and. log_get_logging_level() .eq. LOG_DEBUG) then + call log_log(LOG_DEBUG, "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& + trim(conv_to_string(err, 5, .true.))//" initial norm="//trim(conv_to_string(init_err, 5, .true.))) + end if + end subroutine bicgstab + + !> Performs the preconditioned conjugate gradient method + !! @param current_state The current model state + !! @param A The matrix + !! @param x The solution + !! @param b The RHS + subroutine cg_solver(current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end) + type(model_state_type), target, intent(inout) :: current_state + type(matrix_type), intent(inout) :: A + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: x + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(in) :: b + integer, intent(in) :: i_strt, i_end, j_strt, j_end, k_end + + integer :: it, k, i, j + real(kind=SINGLE_PRECISION) :: sc_err, alf, bet, err, init_err, rho + real(kind=SINGLE_PRECISION), dimension(current_state%local_grid%size(Z_INDEX) + & + current_state%local_grid%halo_size(Z_INDEX) * 2, & + current_state%local_grid%size(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) * 2, & + current_state%local_grid%size(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) * 2) :: Ax, r, z, p + + ! first rescale RHS for symmetry (this could be done when p_source is calculated + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + + r(1,j,i) = 0.0_SINGLE_PRECISION + do k=2,current_state%local_grid%size(Z_INDEX) + r(k,j,i) = b(k,j,i) * A%vol(k) + end do + end do + end do + + ! Calculate scale factor for error + + call calc_Ax(current_state, A, x, Ax) + + sc_err = sqrt(inner_prod(current_state, r, r, i_strt, i_end, j_strt, j_end, k_end)) + sc_err = max(sc_err, 0.0001_SINGLE_PRECISION) + r = r - Ax + init_err = sqrt(inner_prod(current_state, r, r, i_strt, i_end, j_strt, j_end, k_end))/sc_err + + do it=1, max_iterations + if( it == 1 ) then + call precond(current_state, A, p, r, preconditioner_iterations) + rho = inner_prod(current_state, p, r, i_strt, i_end, j_strt, j_end, k_end) + alf = rho + else + call precond(current_state, A, z, r, preconditioner_iterations) + alf = inner_prod(current_state, z, r, i_strt, i_end, j_strt, j_end, k_end) + bet = alf/rho + rho = alf + p = z + bet*p + end if + + call calc_Ax(current_state, A, p, Ax) + alf = alf/inner_prod(current_state, p, Ax, i_strt, i_end, j_strt, j_end, k_end) + x = x + alf*p + r = r - alf*Ax + + err = sqrt(inner_prod(current_state, r, r, i_strt, i_end, j_strt, j_end, k_end))/sc_err + if (err < tolerance) exit + end do + + if( current_state%parallel%my_rank == 0 ) print*,it, err, init_err + + if (err > tolerance) then + call log_log(LOG_WARN, "Convergence failed, RNorm="//conv_to_string(err, exponent=.true.)) + else if (current_state%parallel%my_rank==0 .and. log_get_logging_level() .eq. LOG_DEBUG) then + call log_log(LOG_DEBUG, "Converged in "//trim(conv_to_string(it))//" iterations with RNorm="//& + trim(conv_to_string(err, 5, .true.))//" initial norm="//trim(conv_to_string(init_err, 5, .true.))) + end if + end subroutine cg_solver + + !> Jacobi preconditioner + !! @param current_state The current model state + !! @param A The matrix + !! @param s Written into as result of preconditioning + !! @param r Input values to preconditioner + !! @param preits Number of iterations of the preconditioner to perform per call + subroutine precond(current_state, A, s, r, preits) + type(model_state_type), target, intent(inout) :: current_state + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(in) :: r + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: s + integer, intent(in) :: preits + type(matrix_type), intent(inout) :: A + + real(kind=SINGLE_PRECISION), dimension(current_state%local_grid%size(Z_INDEX) + & + current_state%local_grid%halo_size(Z_INDEX) * 2, current_state%local_grid%size(Y_INDEX) + & + current_state%local_grid%halo_size(Y_INDEX) * 2, current_state%local_grid%size(X_INDEX) + & + current_state%local_grid%halo_size(X_INDEX) * 2) :: t + real(kind=SINGLE_PRECISION), dimension(current_state%local_grid%size(Z_INDEX)) :: s_k + integer :: it, i, j, k + + if (preits .le. 0) then + s=r + return + end if + + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + s(1,j,i) = 0.0_SINGLE_PRECISION + k=2 + s(k,j,i)=r(k,j,i)*A%LU_d(k) + do k=3,current_state%local_grid%size(Z_INDEX) + s(k,j,i)=(r(k,j,i) - A%d(k)*s(k-1,j,i))*A%lu_d(k) + end do + do k=current_state%local_grid%size(Z_INDEX)-1, 2, -1 + s(k,j,i)=s(k,j,i) - A%lu_u(k)*s(k+1,j,i) + end do + end do + end do + + do it=1, preits + call calc_Ax(current_state, A, s, t) + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + k=2 + s_k(k)=(r(k,j,i) - t(k,j,i))*A%lu_d(k) + do k=3,current_state%local_grid%size(Z_INDEX) + s_k(k)=(r(k,j,i) - t(k,j,i) - A%d(k)*s_k(k-1))*A%lu_d(k) + end do + k=current_state%local_grid%size(Z_INDEX) + s(k,j,i)=s(k,j,i)+s_k(k) + do k=current_state%local_grid%size(Z_INDEX)-1, 2, -1 + s_k(k)=s_k(k) - A%lu_u(k)*s_k(k+1) + s(k,j,i)=s(k,j,i) + relaxation*s_k(k) + end do + end do + end do + end do + end subroutine precond + + !> Calculates A * x + !! @param current_state The current model state + !! @param A The matrix + !! @param x Vector to multiply with + !! @param Ax Result of A*x + subroutine calc_Ax(current_state, A, x, Ax) + type(model_state_type), target, intent(inout) :: current_state + type(matrix_type), intent(in) :: A + real(kind=SINGLE_PRECISION), dimension(:,:,:), target, intent(inout) :: x, Ax + + integer :: i, k, j, n, istart, iend, jstart, jend + type(field_data_wrapper_single_prec_type) :: source_data + + source_data%data=>x + + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, & + copy_calc_Ax_to_halo_buffer, source_data=(/source_data/)) + + Ax(1,:,:) = 0.0_SINGLE_PRECISION + if (symm_prob) then + do n=1, 5 + if (n==1) then + istart=current_state%local_grid%local_domain_start_index(X_INDEX)+1 + iend=current_state%local_grid%local_domain_end_index(X_INDEX)-1 + jstart=current_state%local_grid%local_domain_start_index(Y_INDEX)+1 + jend=current_state%local_grid%local_domain_end_index(Y_INDEX)-1 + else if (n==2) then + istart=current_state%local_grid%local_domain_start_index(X_INDEX) + iend=current_state%local_grid%local_domain_start_index(X_INDEX) + else if (n==3) then + istart=current_state%local_grid%local_domain_end_index(X_INDEX) + iend=current_state%local_grid%local_domain_end_index(X_INDEX) + else if (n==4) then + jstart=current_state%local_grid%local_domain_start_index(Y_INDEX) + jend=current_state%local_grid%local_domain_start_index(Y_INDEX) + istart=current_state%local_grid%local_domain_start_index(X_INDEX) + iend=current_state%local_grid%local_domain_end_index(X_INDEX) + else if (n==5) then + jstart=current_state%local_grid%local_domain_end_index(Y_INDEX) + jend=current_state%local_grid%local_domain_end_index(Y_INDEX) + end if + do i=istart, iend + do j=jstart, jend + k=2 + Ax(k,j,i)=A%vol(k)*(A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i)))+ A%u(k)*x(k+1,j,i)+A%p(k)*x(k,j,i) + do k=3,current_state%local_grid%size(Z_INDEX)-1 + Ax(k,j,i)=A%vol(k)*(A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i)))+& + A%u(k)*x(k+1,j,i)+A%d(k)*x(k-1,j,i)+A%p(k)*x(k,j,i) + end do + k=current_state%local_grid%size(Z_INDEX) + Ax(k,j,i) = A%vol(k)*(A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i)))+ A%d(k)*x(k-1,j,i)+A%p(k)*x(k,j,i) + end do + end do + if (n==1) then + call complete_nonblocking_halo_swap(current_state, halo_swap_state, perform_local_data_copy_for_calc_Ax, & + copy_halo_buffer_to_calc_Ax, source_data=(/source_data/)) + end if + end do + else + do n=1, 5 + if (n==1) then + istart=current_state%local_grid%local_domain_start_index(X_INDEX)+1 + iend=current_state%local_grid%local_domain_end_index(X_INDEX)-1 + jstart=current_state%local_grid%local_domain_start_index(Y_INDEX)+1 + jend=current_state%local_grid%local_domain_end_index(Y_INDEX)-1 + else if (n==2) then + istart=current_state%local_grid%local_domain_start_index(X_INDEX) + iend=current_state%local_grid%local_domain_start_index(X_INDEX) + else if (n==3) then + istart=current_state%local_grid%local_domain_end_index(X_INDEX) + iend=current_state%local_grid%local_domain_end_index(X_INDEX) + else if (n==4) then + jstart=current_state%local_grid%local_domain_start_index(Y_INDEX) + jend=current_state%local_grid%local_domain_start_index(Y_INDEX) + istart=current_state%local_grid%local_domain_start_index(X_INDEX) + iend=current_state%local_grid%local_domain_end_index(X_INDEX) + else if (n==5) then + jstart=current_state%local_grid%local_domain_end_index(Y_INDEX) + jend=current_state%local_grid%local_domain_end_index(Y_INDEX) + end if + do i=istart, iend + do j=jstart, jend + k=2 + Ax(k,j,i)=A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i))+ A%u(k)*x(k+1,j,i)+A%p(k)*x(k,j,i) + do k=3,current_state%local_grid%size(Z_INDEX)-1 + Ax(k,j,i)=A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i))+& + A%u(k)*x(k+1,j,i)+A%d(k)*x(k-1,j,i)+A%p(k)*x(k,j,i) + end do + k=current_state%local_grid%size(Z_INDEX) + Ax(k,j,i) = A%n*(x(k,j,i+1)+x(k,j,i-1))+A%e*(x(k,j+1,i)+x(k,j-1,i))+ A%d(k)*x(k-1,j,i)+A%p(k)*x(k,j,i) + end do + end do + if (n==1) then + call complete_nonblocking_halo_swap(current_state, halo_swap_state, perform_local_data_copy_for_calc_Ax, & + copy_halo_buffer_to_calc_Ax, source_data=(/source_data/)) + end if + end do + endif + end subroutine calc_Ax + + !> Returns the global inner product of two vectors, ignoring the halo cells + !! @param current_state The current model state + !! @param x First vector + !! @praam y Second vector + !! @returns Global inner product of the two input vectors + real(kind=SINGLE_PRECISION) function inner_prod(current_state, x, y, i_strt, i_end, j_strt, j_end, k_end) + type(model_state_type), target, intent(inout) :: current_state + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(in) :: x, y + integer, intent(in) :: i_strt, i_end, j_strt, j_end, k_end + + real(kind=SINGLE_PRECISION) :: global_sum + real(kind=DEFAULT_PRECISION) :: local_sum, local_sum_mpi, global_sum_mpi + integer :: ierr, i, j, k + + local_sum=0.0_DEFAULT_PRECISION + local_sum_mpi = 0.0_DEFAULT_PRECISION + + do i=i_strt, i_end + do j=j_strt, j_end + do k=2, k_end + local_sum=local_sum+real(x(k,j,i), kind=DEFAULT_PRECISION)* & + real(y(k,j,i), kind=DEFAULT_PRECISION) + end do + end do + end do + + + call mpi_allreduce(local_sum, global_sum_mpi, 1, PRECISION_TYPE, MPI_SUM, & + current_state%parallel%monc_communicator, ierr) + + global_sum = real(global_sum_mpi, kind=SINGLE_PRECISION) + + inner_prod=global_sum + end function inner_prod + + !> Returns the global inner product of a pair of vectors, ignoring the halo cells for three separate pairs. This call + !! is for optimisation to bunch up the comms in a BiCGStab solver per iteration + !! @param current_state The current model state + !! @param x First vector + !! @praam y Second vector + !! @returns Global inner product of the two input vectors + function inner_prod_three_way(current_state, t, s, i_strt, i_end, j_strt, j_end, k_end) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: i_strt, i_end, j_strt, j_end, k_end + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(in) :: t, s + real(kind=SINGLE_PRECISION), dimension(3) :: inner_prod_three_way + + real(kind=SINGLE_PRECISION), dimension(3) :: global_sum + real(kind=DEFAULT_PRECISION), dimension(3) :: local_sum, local_sum_mpi, global_sum_mpi + integer :: ierr, i, j, k + + local_sum(1)=0.0_DEFAULT_PRECISION + local_sum(2)=0.0_DEFAULT_PRECISION + local_sum(3)=0.0_DEFAULT_PRECISION + + local_sum_mpi(1)=0.0_DEFAULT_PRECISION + local_sum_mpi(2)=0.0_DEFAULT_PRECISION + local_sum_mpi(3)=0.0_DEFAULT_PRECISION + + do i=i_strt, i_end + do j=j_strt, j_end + do k=2, k_end + local_sum(1)=local_sum(1)+real(t(k,j,i), kind=DEFAULT_PRECISION) & + *real(t(k,j,i), kind=DEFAULT_PRECISION) + local_sum(2)=local_sum(2)+real(t(k,j,i), kind=DEFAULT_PRECISION) & + *real(s(k,j,i), kind=DEFAULT_PRECISION) + local_sum(3)=local_sum(3)+real(s(k,j,i), kind=DEFAULT_PRECISION) & + *real(s(k,j,i), kind=DEFAULT_PRECISION) + end do + end do + end do + + call mpi_allreduce(local_sum, global_sum_mpi, 3, PRECISION_TYPE, MPI_SUM, & + current_state%parallel%monc_communicator, ierr) + + global_sum(:) = real(global_sum_mpi, kind=SINGLE_PRECISION) + + inner_prod_three_way=global_sum + end function inner_prod_three_way + + !> Sets the values of the provided matrix to solve the poisson equation + !! @param grid_configuration Configuration of the vertical and horizontal grids + !! @param A The matrix that the values are written into + !! @param z_size Number of elements in a column + subroutine set_matrix_for_poisson(grid_configuration, A, z_size) + type(grid_configuration_type), intent(inout) :: grid_configuration + type(matrix_type), intent(inout) :: A + integer, intent(in) :: z_size + + integer :: k + real(kind=SINGLE_PRECISION) :: d_sc, concat_scalars + + A%n=grid_configuration%horizontal%cx*grid_configuration%horizontal%cx + A%s=A%n + A%e=grid_configuration%horizontal%cy*grid_configuration%horizontal%cy + A%w=A%e + concat_scalars=A%n+A%s+A%e+A%w + do k=2, z_size + if (symm_prob) then + A%vol(k)=grid_configuration%vertical%dz(k) + d_sc=1.0/grid_configuration%vertical%rhon(k) + else + d_sc=grid_configuration%vertical%rdz(k) / grid_configuration%vertical%rhon(k) + A%vol(k)=1.0 + endif + + if (k==z_size) then + A%u(k)=0.0_SINGLE_PRECISION + else + A%u(k)=grid_configuration%vertical%rho(k)*grid_configuration%vertical%rdzn(k+1) + end if + if (k==2) then + A%d(k)=0.0_SINGLE_PRECISION + else + A%d(k)=grid_configuration%vertical%rho(k-1)*grid_configuration%vertical%rdzn(k) + end if + A%p(k) = d_sc * (-(A%u(k) + A%d(k))) - concat_scalars * A%vol(k) + A%u(k)=d_sc * A%u(k) + A%d(k)=d_sc * A%d(k) + end do + k=2 + A%lu_d(k)=1.0_SINGLE_PRECISION/A%p(k) + A%lu_u(k)=A%lu_d(k)*A%u(k) + do k=3, z_size + A%lu_d(k)=1.0_SINGLE_PRECISION/(A%p(k) - A%d(k)*A%lu_u(k-1)) + A%lu_u(k)=A%u(k)*A%lu_d(k) + end do + end subroutine set_matrix_for_poisson + + !> Determines the global divmax which is written into the current state + !! @param current_state The current model state + subroutine deduce_global_divmax(current_state) + type(model_state_type), target, intent(inout) :: current_state + + integer :: ierr + + call mpi_allreduce(current_state%local_divmax, current_state%global_divmax, 1, PRECISION_TYPE, MPI_MAX, & + current_state%parallel%monc_communicator, ierr) + end subroutine deduce_global_divmax + + !> Copies the p field data to halo buffers for a specific process in a dimension and halo cell + !! @param current_state The current model state + !! @param neighbour_descriptions Description of the neighbour halo swapping status + !! @param dim Dimension to copy from + !! @param source_index The source index of the dimension we are reading from in the prognostic field + !! @param pid_location Location of the neighbouring process in the local stored data structures + !! @param current_page The current (next) buffer page to copy into + !! @param source_data Optional source data which is read from + subroutine copy_p_to_halo_buffer(current_state, neighbour_description, dim, source_index, & + pid_location, current_page, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, pid_location, source_index + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + call copy_field_to_buffer(current_state%local_grid, neighbour_description%send_halo_buffer, p_data, & + dim, source_index, current_page(pid_location)) + + current_page(pid_location)=current_page(pid_location)+1 + end subroutine copy_p_to_halo_buffer + + !> Copies the source field data to halo buffers for a specific process in a dimension and halo cell - for the calc_Ax halo swaps + !! @param current_state The current model state + !! @param neighbour_descriptions Description of the neighbour halo swapping status + !! @param dim Dimension to copy from + !! @param source_index The source index of the dimension we are reading from in the prognostic field + !! @param pid_location Location of the neighbouring process in the local stored data structures + !! @param current_page The current (next) buffer page to copy into + !! @param source_data Optional source data which is read from + subroutine copy_calc_Ax_to_halo_buffer(current_state, neighbour_description, dim, source_index, & + pid_location, current_page, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, pid_location, source_index + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + type(field_data_wrapper_single_prec_type) :: selected_source + + selected_source=source_data(1) + + call copy_field_to_buffer(current_state%local_grid, neighbour_description%send_halo_buffer, selected_source%data, & + dim, source_index, current_page(pid_location)) + + current_page(pid_location)=current_page(pid_location)+1 + end subroutine copy_calc_Ax_to_halo_buffer + + !> Copies the halo buffer to halo location for the p field + !! @param current_state The current model state + !! @param neighbour_description The halo swapping description of the neighbour we are accessing the buffer of + !! @param dim The dimension we receive for + !! @param target_index The target index for the dimension we are receiving for + !! @param neighbour_location The location in the local neighbour data stores of this neighbour + !! @param current_page The current, next, halo swap page to read from (all previous have been read and copied already) + !! @param source_data Optional source data which is written into + subroutine copy_halo_buffer_to_p(current_state, neighbour_description, dim, target_index, & + neighbour_location, current_page, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, target_index, neighbour_location + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + call copy_buffer_to_field(current_state%local_grid, neighbour_description%recv_halo_buffer, p_data, & + dim, target_index, current_page(neighbour_location)) + + current_page(neighbour_location)=current_page(neighbour_location)+1 + end subroutine copy_halo_buffer_to_p + + !> Copies the halo buffer to halo location for the source field as required in the calc_Ax procedure + !! @param current_state The current model state + !! @param neighbour_description The halo swapping description of the neighbour we are accessing the buffer of + !! @param dim The dimension we receive for + !! @param target_index The target index for the dimension we are receiving for + !! @param neighbour_location The location in the local neighbour data stores of this neighbour + !! @param current_page The current, next, halo swap page to read from (all previous have been read and copied already) + !! @param source_data Optional source data which is written into + subroutine copy_halo_buffer_to_calc_Ax(current_state, neighbour_description, dim, target_index, & + neighbour_location, current_page, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, target_index, neighbour_location + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + type(field_data_wrapper_single_prec_type) :: selected_source + + selected_source=source_data(1) + + call copy_buffer_to_field(current_state%local_grid, & + neighbour_description%recv_halo_buffer, selected_source%data, & + dim, target_index, current_page(neighbour_location)) + + current_page(neighbour_location)=current_page(neighbour_location)+1 + end subroutine copy_halo_buffer_to_calc_Ax + + !> Does local data copying for P variable halo swap + !! @param current_state The current model state_mod + !! @param source_data Optional source data which is written into + subroutine perform_local_data_copy_for_p(current_state, halo_depth, involve_corners, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: halo_depth + logical, intent(in) :: involve_corners + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + call perform_local_data_copy_for_field(p_data, current_state%local_grid, & + current_state%parallel%my_rank, halo_depth, involve_corners) + end subroutine perform_local_data_copy_for_p + + !> Does a local data copy for halo swapping cells with wrap around (to maintain periodic boundary condition) + !! @param current_state The current model state + !! @param source_data Optional source data which is written into + subroutine perform_local_data_copy_for_calc_Ax(current_state, halo_depth, involve_corners, source_data) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: halo_depth + logical, intent(in) :: involve_corners + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + type(field_data_wrapper_single_prec_type) :: selected_source + + selected_source=source_data(1) + + call perform_local_data_copy_for_field(selected_source%data, current_state%local_grid, & + current_state%parallel%my_rank, halo_depth, involve_corners) + end subroutine perform_local_data_copy_for_calc_Ax + + !> Creates a problem matrix, allocating the required data based upon the column size + !! @param z_size Number of elements in the vertical column + !! @returns The allocated matrix ready to be used + function create_problem_matrix(z_size) + integer, intent(in) :: z_size + type(matrix_type) :: create_problem_matrix + + allocate(create_problem_matrix%u(z_size), create_problem_matrix%d(z_size), create_problem_matrix%p(z_size), & + create_problem_matrix%lu_u(z_size), create_problem_matrix%lu_d(z_size), create_problem_matrix%vol(z_size)) + end function create_problem_matrix + + !> Completes the psrce calculation by waiting on all outstanding psrce communications to complete and then combine the + !! received values with the P field for U and V + !! @param current_state The current model state + !! @param y_halo_size The halo size in the Y dimension + !! @param x_halo_size The halo size in the X dimension + subroutine complete_psrce_calculation(current_state, y_halo_size, x_halo_size) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: y_halo_size, x_halo_size + + integer :: ierr, combined_handles(2), i, j, k + + combined_handles(1)=current_state%psrce_x_hs_recv_request + combined_handles(2)=current_state%psrce_y_hs_recv_request + call mpi_waitall(2, combined_handles, MPI_STATUSES_IGNORE, ierr) + + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + do k=2,current_state%local_grid%size(Z_INDEX) +#ifdef U_ACTIVE + current_state%p%data(k,j,x_halo_size+1)=current_state%p%data(k,j,x_halo_size+1)-& + current_state%psrce_recv_buffer_x(k-1,j-x_halo_size) +#endif +#ifdef V_ACTIVE + if (j .gt. y_halo_size+1) current_state%p%data(k, j, x_halo_size+1)=current_state%p%data(k, j, x_halo_size+1)-& + current_state%global_grid%configuration%horizontal%cy * current_state%sv%data(k, j-1, x_halo_size+1) +#endif + end do + end do + +#ifdef V_ACTIVE + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do k=2,current_state%local_grid%size(Z_INDEX) + current_state%p%data(k,y_halo_size+1,i)=current_state%p%data(k,y_halo_size+1,i)-& + current_state%psrce_recv_buffer_y(k-1,i-y_halo_size) + end do + end do +#endif + + combined_handles(1)=current_state%psrce_x_hs_send_request + combined_handles(2)=current_state%psrce_y_hs_send_request + call mpi_waitall(2, combined_handles, MPI_STATUSES_IGNORE, ierr) + end subroutine complete_psrce_calculation +end module iterativesolver_single_prec_mod diff --git a/components/lateral_bcs/src/lateral_bcs.F90 b/components/lateral_bcs/src/lateral_bcs.F90 index e8abfbe6..61fef139 100644 --- a/components/lateral_bcs/src/lateral_bcs.F90 +++ b/components/lateral_bcs/src/lateral_bcs.F90 @@ -188,7 +188,7 @@ subroutine apply_rigid(current_state,istart,iend,jstart,jend,kstart,kend) INTEGER :: istart, iend, jstart, jend, kstart, kend - INTEGER :: i,j,k,iq + INTEGER :: i,j,k,iq,it do i=istart, iend do j=jstart, jend @@ -216,6 +216,15 @@ subroutine apply_rigid(current_state,istart,iend,jstart,jend,kstart,kend) end do end do end do + do it = 1, current_state%n_tracers + do i=istart, iend + do j=jstart, jend + do k=kstart,kend + current_state%tracer(it)%data(k,j,i) = current_state%ztracer(it)%data(k,j,i) + end do + end do + end do + end do end subroutine apply_rigid diff --git a/components/lowerbc/src/lowerbc.F90 b/components/lowerbc/src/lowerbc.F90 index 9d45e08d..d196fce6 100644 --- a/components/lowerbc/src/lowerbc.F90 +++ b/components/lowerbc/src/lowerbc.F90 @@ -3,15 +3,17 @@ module lowerbc_mod use monc_component_mod, only : component_descriptor_type use state_mod, only : FORWARD_STEPPING, PRESCRIBED_SURFACE_FLUXES, PRESCRIBED_SURFACE_VALUES, & model_state_type + use tracers_mod, only : TRACER_SURFACE_FLUX_FROM_DECAY, TRACER_SURFACE_FLUX_SPECIFIED, TRACER_SURFACE_VALUE_SPECIFIED use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX, vertical_grid_configuration_type use datadefn_mod, only : DEFAULT_PRECISION, PRECISION_TYPE use prognostics_mod, only : prognostic_field_type use science_constants_mod, only : von_karman_constant, smallp, alphah, betah, betam, pi, & - z0, z0th, convective_limit, gammah, gammam + z0, z0th, convective_limit, gammah, gammam, G use logging_mod, only : LOG_ERROR, LOG_WARN, log_log use registry_mod, only : is_component_enabled use logging_mod, only : LOG_ERROR, log_master_log use q_indices_mod, only: get_q_index, standard_q_names + use optionsdatabase_mod, only : options_get_logical use mpi, only: MPI_REQUEST_NULL, MPI_STATUSES_IGNORE implicit none @@ -34,6 +36,9 @@ module lowerbc_mod integer :: wrapping_comm_requests(4), y_wrapping_target_id, x_wrapping_target_id public lowerbc_get_descriptor + public tstrcona, rhmbc, ddbc, ddbc_x4, eecon, r2ddbc, rcmbc, tstrconb, & + x4con, xx0con, y2con, yy0con, viscous_courant_coefficient + contains !> Descriptor of this component for registration @@ -68,6 +73,7 @@ subroutine initialisation_callback(current_state) num_wrapped_fields=0 if (current_state%th%active) num_wrapped_fields=1 num_wrapped_fields=num_wrapped_fields+current_state%number_q_fields + num_wrapped_fields=num_wrapped_fields+current_state%n_tracers if (num_wrapped_fields .gt. 0) then if (current_state%parallel%my_coords(Y_INDEX) == 0 .or. & @@ -180,22 +186,27 @@ subroutine timestep_callback(current_state) if (current_state%field_stepping == FORWARD_STEPPING) then call compute_lower_boundary_conditions(current_state, current_y_index, current_x_index, & - current_state%u, current_state%v, current_state%th, current_state%th, current_state%q, current_state%q) + current_state%u, current_state%v, current_state%th, current_state%th, current_state%q, current_state%q, & + current_state%tracer, current_state%tracer) else if (current_state%scalar_stepping == FORWARD_STEPPING) then call compute_lower_boundary_conditions(current_state, current_y_index, current_x_index, & - current_state%zu, current_state%zv, current_state%th, current_state%zth, current_state%q, current_state%zq) + current_state%zu, current_state%zv, current_state%th, current_state%zth, current_state%q, current_state%zq, & + current_state%tracer, current_state%ztracer) else call compute_lower_boundary_conditions(current_state, current_y_index, current_x_index, & - current_state%zu, current_state%zv, current_state%zth, current_state%zth, current_state%zq, current_state%zq) + current_state%zu, current_state%zv, current_state%zth, current_state%zth, current_state%zq, current_state%zq, & + current_state%ztracer, current_state%ztracer) end if end if end subroutine timestep_callback - subroutine compute_lower_boundary_conditions(current_state, current_y_index, current_x_index, zu, zv, zth, th, zq, q) + subroutine compute_lower_boundary_conditions(current_state, current_y_index, current_x_index, & + zu, zv, zth, th, zq, q, ztracer, tracer) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zu, zv, th, zth type(prognostic_field_type), dimension(:), intent(inout) :: q, zq + type(prognostic_field_type), dimension(:), intent(inout) :: tracer, ztracer integer, intent(in) :: current_y_index, current_x_index integer :: n @@ -224,6 +235,11 @@ subroutine compute_lower_boundary_conditions(current_state, current_y_index, cur #endif horizontal_velocity_at_k2=sqrt(horizontal_velocity_at_k2)+smallp + ! Set minimum effective windspeed for RCEMIP + if (options_get_logical(current_state%options_database, "l_rcemip_lowerbc")) then + horizontal_velocity_at_k2=max(horizontal_velocity_at_k2, 1.0_DEFAULT_PRECISION) + end if + if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_FLUXES) then call compute_using_fixed_surface_fluxes(current_state, current_y_index, current_x_index, & horizontal_velocity_at_k2, th, q) @@ -231,6 +247,10 @@ subroutine compute_lower_boundary_conditions(current_state, current_y_index, cur call compute_using_fixed_surface_temperature(current_state, current_y_index, current_x_index, & horizontal_velocity_at_k2, zth, th, zq, q) end if + + if (current_state%n_tracers .gt. 0) then + call compute_tracer_lower_boundary_conditions(current_state, current_y_index, current_x_index, ztracer, tracer) + end if current_state%dis%data(1, current_y_index, current_x_index)=0.0_DEFAULT_PRECISION current_state%dis_th%data(1, current_y_index, current_x_index)=0.0_DEFAULT_PRECISION @@ -253,7 +273,7 @@ subroutine compute_lower_boundary_conditions(current_state, current_y_index, cur else if (current_x_index == current_state%local_grid%local_domain_end_index(X_INDEX)+& current_state%local_grid%halo_size(X_INDEX) .and. current_y_index == & current_state%local_grid%local_domain_end_index(Y_INDEX)+current_state%local_grid%halo_size(Y_INDEX)) then - call complete_async_wrapping(current_state, zth, zq) + call complete_async_wrapping(current_state, zth, zq, ztracer) end if end if end subroutine compute_lower_boundary_conditions @@ -279,21 +299,24 @@ end subroutine register_async_wrapping_recv_requests !! @param current_state The current model state !! @param zth Temperature field !! @param zq Q fields - subroutine complete_async_wrapping(current_state, zth, zq) + subroutine complete_async_wrapping(current_state, zth, zq, ztracer) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zth type(prognostic_field_type), dimension(:), intent(inout) :: zq + type(prognostic_field_type), dimension(:), intent(inout) :: ztracer integer :: ierr, n if (allocated(x_wrapping_send_buffer) .or. allocated(y_wrapping_send_buffer)) then if (allocated(y_wrapping_send_buffer)) then if (current_state%parallel%my_coords(Y_INDEX) == 0) then - call package_y_wrapping_send_buffer(current_state, zth, zq, current_state%local_grid%local_domain_start_index(Y_INDEX),& - current_state%local_grid%local_domain_start_index(Y_INDEX)+1) + call package_y_wrapping_send_buffer(current_state, zth, zq, ztracer, & + current_state%local_grid%local_domain_start_index(Y_INDEX), & + current_state%local_grid%local_domain_start_index(Y_INDEX)+1) else - call package_y_wrapping_send_buffer(current_state, zth, zq, current_state%local_grid%local_domain_end_index(Y_INDEX)-1,& - current_state%local_grid%local_domain_end_index(Y_INDEX)) + call package_y_wrapping_send_buffer(current_state, zth, zq, ztracer, & + current_state%local_grid%local_domain_end_index(Y_INDEX)-1, & + current_state%local_grid%local_domain_end_index(Y_INDEX)) end if call mpi_isend(y_wrapping_send_buffer, size(y_wrapping_send_buffer), PRECISION_TYPE, & y_wrapping_target_id, 0, current_state%parallel%neighbour_comm, & @@ -301,11 +324,13 @@ subroutine complete_async_wrapping(current_state, zth, zq) end if if (allocated(x_wrapping_send_buffer)) then if (current_state%parallel%my_coords(X_INDEX) == 0) then - call package_x_wrapping_send_buffer(current_state, zth, zq, current_state%local_grid%local_domain_start_index(X_INDEX),& - current_state%local_grid%local_domain_start_index(X_INDEX)+1) + call package_x_wrapping_send_buffer(current_state, zth, zq, ztracer, & + current_state%local_grid%local_domain_start_index(X_INDEX), & + current_state%local_grid%local_domain_start_index(X_INDEX)+1) else - call package_x_wrapping_send_buffer(current_state, zth, zq, current_state%local_grid%local_domain_end_index(X_INDEX)-1,& - current_state%local_grid%local_domain_end_index(X_INDEX)) + call package_x_wrapping_send_buffer(current_state, zth, zq, ztracer, & + current_state%local_grid%local_domain_end_index(X_INDEX)-1, & + current_state%local_grid%local_domain_end_index(X_INDEX)) end if call mpi_isend(x_wrapping_send_buffer, size(x_wrapping_send_buffer), PRECISION_TYPE, & x_wrapping_target_id, 0, current_state%parallel%neighbour_comm, & @@ -317,18 +342,18 @@ subroutine complete_async_wrapping(current_state, zth, zq) wrapping_comm_requests=MPI_REQUEST_NULL if (allocated(y_wrapping_recv_buffer)) then if (current_state%parallel%my_coords(Y_INDEX) == 0) then - call unpackage_y_wrapping_recv_buffer(current_state, zth, zq, 1, 2) + call unpackage_y_wrapping_recv_buffer(current_state, zth, zq, ztracer, 1, 2) else - call unpackage_y_wrapping_recv_buffer(current_state, zth, zq, & + call unpackage_y_wrapping_recv_buffer(current_state, zth, zq, ztracer, & current_state%local_grid%local_domain_end_index(Y_INDEX)+1, & current_state%local_grid%local_domain_end_index(Y_INDEX)+2) end if end if if (allocated(x_wrapping_recv_buffer)) then if (current_state%parallel%my_coords(X_INDEX) == 0) then - call unpackage_x_wrapping_recv_buffer(current_state, zth, zq, 1, 2) + call unpackage_x_wrapping_recv_buffer(current_state, zth, zq, ztracer, 1, 2) else - call unpackage_x_wrapping_recv_buffer(current_state, zth, zq, & + call unpackage_x_wrapping_recv_buffer(current_state, zth, zq, ztracer, & current_state%local_grid%local_domain_end_index(X_INDEX)+1, & current_state%local_grid%local_domain_end_index(X_INDEX)+2) end if @@ -353,6 +378,16 @@ subroutine complete_async_wrapping(current_state, zth, zq) zq(n)%data(1, current_state%local_grid%local_domain_start_index(Y_INDEX)+1, :) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + ztracer(n)%data(1,1,:)=ztracer(n)%data(1, current_state%local_grid%local_domain_end_index(Y_INDEX)-1, :) + ztracer(n)%data(1,2,:)=ztracer(n)%data(1, current_state%local_grid%local_domain_end_index(Y_INDEX), :) + ztracer(n)%data(1,current_state%local_grid%local_domain_end_index(Y_INDEX)+1,:)=& + ztracer(n)%data(1, current_state%local_grid%local_domain_start_index(Y_INDEX), :) + ztracer(n)%data(1,current_state%local_grid%local_domain_end_index(Y_INDEX)+2,:)=& + ztracer(n)%data(1, current_state%local_grid%local_domain_start_index(Y_INDEX)+1, :) + end do + end if end if if (current_state%parallel%my_rank == x_wrapping_target_id) then @@ -374,19 +409,31 @@ subroutine complete_async_wrapping(current_state, zth, zq) zq(n)%data(1,:,current_state%local_grid%local_domain_start_index(X_INDEX)+1) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + ztracer(n)%data(1,:,1)=ztracer(n)%data(1,:,current_state%local_grid%local_domain_end_index(X_INDEX)-1) + ztracer(n)%data(1,:,2)=ztracer(n)%data(1,:,current_state%local_grid%local_domain_end_index(X_INDEX)) + ztracer(n)%data(1,:,current_state%local_grid%local_domain_end_index(X_INDEX)+1)=& + ztracer(n)%data(1,:,current_state%local_grid%local_domain_start_index(X_INDEX)) + ztracer(n)%data(1,:,current_state%local_grid%local_domain_end_index(X_INDEX)+2)=& + ztracer(n)%data(1,:,current_state%local_grid%local_domain_start_index(X_INDEX)+1) + end do + end if end if end subroutine complete_async_wrapping - !> Packages theta and Q fields (if enabled) into the send buffer for Y + !> Packages theta, Q fields and tracer fields (if enabled) into the send buffer for Y !! @param current_state The current model state !! @param zth Temperature field !! @param zq Q fields + !! @param ztracer tracer fields !! @param first_y_index The first Y index to read from the data field !! @param second_y_index The second Y index to read from the data field - subroutine package_y_wrapping_send_buffer(current_state, zth, zq, first_y_index, second_y_index) + subroutine package_y_wrapping_send_buffer(current_state, zth, zq, ztracer, first_y_index, second_y_index) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zth type(prognostic_field_type), dimension(:), intent(inout) :: zq + type(prognostic_field_type), dimension(:), intent(inout) :: ztracer integer, intent(in) :: first_y_index, second_y_index integer :: index_start, n @@ -403,18 +450,26 @@ subroutine package_y_wrapping_send_buffer(current_state, zth, zq, first_y_index, y_wrapping_send_buffer(:,2,index_start+n)=zq(n)%data(1,second_y_index,:) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + y_wrapping_send_buffer(:,1,index_start+n)=ztracer(n)%data(1,first_y_index,:) + y_wrapping_send_buffer(:,2,index_start+n)=ztracer(n)%data(1,second_y_index,:) + end do + end if end subroutine package_y_wrapping_send_buffer !> Packages theta and Q fields (if enabled) into the send buffer for X !! @param current_state The current model state !! @param zth Temperature field !! @param zq Q fields + !! @param ztracer tracer fields !! @param first_x_index The first X index to read from the data field !! @param second_x_index The second X index to read from the data field - subroutine package_x_wrapping_send_buffer(current_state, zth, zq, first_x_index, second_x_index) + subroutine package_x_wrapping_send_buffer(current_state, zth, zq, ztracer, first_x_index, second_x_index) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zth type(prognostic_field_type), dimension(:), intent(inout) :: zq + type(prognostic_field_type), dimension(:), intent(inout) :: ztracer integer, intent(in) :: first_x_index, second_x_index integer :: index_start, n @@ -431,18 +486,26 @@ subroutine package_x_wrapping_send_buffer(current_state, zth, zq, first_x_index, x_wrapping_send_buffer(:,2,index_start+n)= zq(n)%data(1,:,second_x_index) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + x_wrapping_send_buffer(:,1,index_start+n)= ztracer(n)%data(1,:,first_x_index) + x_wrapping_send_buffer(:,2,index_start+n)= ztracer(n)%data(1,:,second_x_index) + end do + end if end subroutine package_x_wrapping_send_buffer !> Unpackages theta and Q fields from the receive buffer into the fields themselves (if enabled) for Y !! @param current_state The current model state !! @param zth Temperature field !! @param zq Q fields + !! @param ztracer tracer fields !! @param first_y_index The first Y index to read from the data field !! @param second_y_index The second Y index to read from the data field - subroutine unpackage_y_wrapping_recv_buffer(current_state, zth, zq, first_y_index, second_y_index) + subroutine unpackage_y_wrapping_recv_buffer(current_state, zth, zq, ztracer, first_y_index, second_y_index) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zth type(prognostic_field_type), dimension(:), intent(inout) :: zq + type(prognostic_field_type), dimension(:), intent(inout) :: ztracer integer, intent(in) :: first_y_index, second_y_index integer :: index_start, n @@ -459,18 +522,26 @@ subroutine unpackage_y_wrapping_recv_buffer(current_state, zth, zq, first_y_inde zq(n)%data(1,second_y_index,:)=y_wrapping_recv_buffer(:,2,index_start+n) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + ztracer(n)%data(1,first_y_index,:)=y_wrapping_recv_buffer(:,1,index_start+n) + ztracer(n)%data(1,second_y_index,:)=y_wrapping_recv_buffer(:,2,index_start+n) + end do + end if end subroutine unpackage_y_wrapping_recv_buffer !> Unpackages theta and Q fields from the receive buffer into the fields themselves (if enabled) for X !! @param current_state The current model state !! @param zth Temperature field !! @param zq Q fields + !! @param ztracer tracer fields !! @param first_x_index The first X index to read from the data field !! @param second_x_index The second X index to read from the data field - subroutine unpackage_x_wrapping_recv_buffer(current_state, zth, zq, first_x_index, second_x_index) + subroutine unpackage_x_wrapping_recv_buffer(current_state, zth, zq, ztracer, first_x_index, second_x_index) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: zth type(prognostic_field_type), dimension(:), intent(inout) :: zq + type(prognostic_field_type), dimension(:), intent(inout) :: ztracer integer, intent(in) :: first_x_index, second_x_index integer :: index_start, n @@ -487,6 +558,12 @@ subroutine unpackage_x_wrapping_recv_buffer(current_state, zth, zq, first_x_inde zq(n)%data(1,:,second_x_index)=x_wrapping_recv_buffer(:,2,index_start+n) end do end if + if (current_state%n_tracers .gt. 0) then + do n=1, current_state%n_tracers + ztracer(n)%data(1,:,first_x_index)=x_wrapping_recv_buffer(:,1,index_start+n) + ztracer(n)%data(1,:,second_x_index)=x_wrapping_recv_buffer(:,2,index_start+n) + end do + end if end subroutine unpackage_x_wrapping_recv_buffer subroutine handle_convective_fluxes(current_state, current_y_index, current_x_index, horizontal_velocity_at_k2, th, q) @@ -496,8 +573,8 @@ subroutine handle_convective_fluxes(current_state, current_y_index, current_x_in integer, intent(in) :: current_y_index, current_x_index real(kind=DEFAULT_PRECISION), intent(in) :: horizontal_velocity_at_k2 - integer :: n real(kind=DEFAULT_PRECISION) :: ustr + integer :: n ustr=look(current_state, horizontal_velocity_at_k2) @@ -521,6 +598,7 @@ subroutine handle_convective_fluxes(current_state, current_y_index, current_x_in current_state%surface_vapour_flux*current_state%global_grid%configuration%vertical%dzn(2)/& current_state%diff_coefficient%data(1, current_y_index, current_x_index) endif + end subroutine handle_convective_fluxes real(kind=DEFAULT_PRECISION) function look(current_state, vel) @@ -555,8 +633,8 @@ subroutine handle_neutral_fluxes(current_state, current_y_index, current_x_index integer, intent(in) :: current_y_index, current_x_index real(kind=DEFAULT_PRECISION) :: horizontal_velocity_at_k2 - integer :: n real(kind=DEFAULT_PRECISION) :: ustr + integer :: n ustr=horizontal_velocity_at_k2*current_state%global_grid%configuration%vertical%vk_on_zlogm current_state%vis_coefficient%data(1, current_y_index, current_x_index)=current_state%global_grid%configuration%vertical%czn*& @@ -577,6 +655,7 @@ subroutine handle_neutral_fluxes(current_state, current_y_index, current_x_index current_state%surface_vapour_flux*current_state%global_grid%configuration%vertical%dzn(2)/& current_state%diff_coefficient%data(1, current_y_index, current_x_index) endif + end subroutine handle_neutral_fluxes subroutine handle_stable_fluxes(current_state, current_y_index, current_x_index, horizontal_velocity_at_k2, th, q) @@ -633,7 +712,8 @@ subroutine handle_stable_fluxes(current_state, current_y_index, current_x_index, end subroutine handle_stable_fluxes ! set surface_boundary_flux in init == FBUOY - subroutine compute_using_fixed_surface_fluxes(current_state, current_y_index, current_x_index, horizontal_velocity_at_k2, th, q) + subroutine compute_using_fixed_surface_fluxes(current_state, current_y_index, current_x_index, horizontal_velocity_at_k2, & + th, q) type(model_state_type), target, intent(inout) :: current_state type(prognostic_field_type), intent(inout) :: th type(prognostic_field_type), dimension(:), intent(inout) :: q @@ -649,7 +729,6 @@ subroutine compute_using_fixed_surface_fluxes(current_state, current_y_index, cu end if end subroutine compute_using_fixed_surface_fluxes - subroutine compute_using_fixed_surface_temperature(current_state, current_y_index, current_x_index, horizontal_velocity_at_k2, & zth, th, zq, q) type(model_state_type), target, intent(inout) :: current_state @@ -721,6 +800,75 @@ subroutine simple_boundary_values(current_state, current_y_index, current_x_inde end do end if end subroutine simple_boundary_values + + subroutine compute_tracer_lower_boundary_conditions(current_state, current_y_index, current_x_index, ztracer, tracer) + type(model_state_type), target, intent(inout) :: current_state + type(prognostic_field_type), dimension(:), intent(inout) :: tracer, ztracer + integer, intent(in) :: current_y_index, current_x_index + + real(kind=DEFAULT_PRECISION) :: surface_tracer_flux + REAL(kind=DEFAULT_PRECISION), PARAMETER :: sec_in_hour=3600.0 + REAL, PARAMETER :: SMALL = 1.E-18 + + integer :: n,i + + ! Surface Flux of trajectory tracers = 0 + if (current_state%traj_tracer_index .gt. 0) then + do n=1, 5 + i = n + current_state%traj_tracer_index - 1 + tracer(i)%data(1, current_y_index, current_x_index)=tracer(i)%data(2, current_y_index, current_x_index) + end do + end if + + ! Surface Flux of radioactive tracers + if (current_state%n_radioactive_tracers .gt. 0) then + + if ( ABS(current_state%diff_coefficient%data(1, current_y_index, current_x_index)) .gt. SMALL) then + + do n = 1, current_state%n_radioactive_tracers + i = n + current_state%radioactive_tracer_index - 1 + + if (current_state%tracer_surf_bc_opt(n) == TRACER_SURFACE_FLUX_FROM_DECAY) then + + surface_tracer_flux = current_state%tracer_decay_rate(n) * & + current_state%surface_pressure/(G * sec_in_hour) + + tracer(i)%data(1, current_y_index, current_x_index)=tracer(i)%data(2, current_y_index, current_x_index) + & + surface_tracer_flux*current_state%global_grid%configuration%vertical%dzn(2)/& + current_state%diff_coefficient%data(1, current_y_index, current_x_index) + + else if (current_state%tracer_surf_bc_opt(n) == TRACER_SURFACE_FLUX_SPECIFIED) then + + surface_tracer_flux = current_state%tracer_surf_bc(n) + + tracer(i)%data(1, current_y_index, current_x_index)=tracer(i)%data(2, current_y_index, current_x_index) + & + surface_tracer_flux*current_state%global_grid%configuration%vertical%dzn(2) / & + ( current_state%global_grid%configuration%vertical%rhon(1) * & + current_state%diff_coefficient%data(1, current_y_index, current_x_index)) + + else if (current_state%tracer_surf_bc_opt(n) == TRACER_SURFACE_VALUE_SPECIFIED) then + + ztracer(i)%data(1, current_y_index, current_x_index)= 2.0 * current_state%tracer_surf_bc(n) - & + ztracer(i)%data(2, current_y_index, current_x_index) + tracer(i)%data(1, current_y_index, current_x_index)= 2.0 * current_state%tracer_surf_bc(n) - & + tracer(i)%data(2, current_y_index, current_x_index) + + end if + + end do + + else + + do n=current_state%radioactive_tracer_index, current_state%radioactive_tracer_index + & + current_state%n_radioactive_tracers - 1 + tracer(n)%data(1, current_y_index, current_x_index)=tracer(n)%data(2, current_y_index, current_x_index) + end do + + end if + + end if + + end subroutine !> Solves the Monin-Obukhov equations in the case of specified surface values of temperature and mixing ratio,combined !! into a specified value of virtual temperature. It is a modified version of the subroutine described in Bull and diff --git a/components/lwrad_exponential/src/lwrad_exponential.F90 b/components/lwrad_exponential/src/lwrad_exponential.F90 index 0419fdc8..87c27ab5 100644 --- a/components/lwrad_exponential/src/lwrad_exponential.F90 +++ b/components/lwrad_exponential/src/lwrad_exponential.F90 @@ -6,7 +6,9 @@ !> set in the config file. module lwrad_exponential_mod use datadefn_mod, only : DEFAULT_PRECISION - use monc_component_mod, only : component_descriptor_type + use monc_component_mod, only : COMPONENT_ARRAY_FIELD_TYPE, & + COMPONENT_DOUBLE_DATA_TYPE, component_descriptor_type, & + component_field_value_type, component_field_information_type use optionsdatabase_mod, only : options_get_real use state_mod, only : FORWARD_STEPPING, model_state_type use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX @@ -14,6 +16,7 @@ module lwrad_exponential_mod use q_indices_mod, only: get_q_index, standard_q_names use registry_mod, only : is_component_enabled use logging_mod, only : LOG_ERROR, log_master_log + use optionsdatabase_mod, only : options_get_integer implicit none @@ -37,6 +40,13 @@ module lwrad_exponential_mod ! declare radiative flux variables that are read for global or user_config real(DEFAULT_PRECISION) :: longwave_exp_decay, cltop_longwave_flux, clbase_longwave_flux + ! Local tendency diagnostic variables for this component + ! 3D tendency fields and logicals for their use + real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: tend_3d_th, tend_3d_tabs + logical :: l_tend_3d_th, l_tend_3d_tabs + ! Local mean tendency profile fields and logicals for their use + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tend_pr_tot_th, tend_pr_tot_tabs + logical :: l_tend_pr_tot_th, l_tend_pr_tot_tabs public lwrad_exponential_get_descriptor contains @@ -49,6 +59,16 @@ type(component_descriptor_type) function lwrad_exponential_get_descriptor() lwrad_exponential_get_descriptor%initialisation=>initialisation_callback lwrad_exponential_get_descriptor%timestep=>timestep_callback lwrad_exponential_get_descriptor%finalisation=>finalisation_callback + + lwrad_exponential_get_descriptor%field_value_retrieval=>field_value_retrieval_callback + lwrad_exponential_get_descriptor%field_information_retrieval=>field_information_retrieval_callback + allocate(lwrad_exponential_get_descriptor%published_fields(2+2)) + + lwrad_exponential_get_descriptor%published_fields(1)= "tend_th_lwrad_exponential_3d_local" + lwrad_exponential_get_descriptor%published_fields(2)= "tend_tabs_lwrad_exponential_3d_local" + + lwrad_exponential_get_descriptor%published_fields(2+1)= "tend_th_lwrad_exponential_profile_total_local" + lwrad_exponential_get_descriptor%published_fields(2+2)= "tend_tabs_lwrad_exponential_profile_total_local" end function lwrad_exponential_get_descriptor !> The initialisation callback sets up the prescribed longwave fluxes and the @@ -90,6 +110,35 @@ subroutine initialisation_callback(current_state) radiation_factor(2:k_top) = 1.0/(density_factor(2:k_top)*cp) radiation_factor(1) = radiation_factor(2) + ! Set tendency diagnostic logicals based on availability + ! Need to use 3d tendencies to compute the profiles, so they will be allocated + ! in the case where profiles are available + l_tend_pr_tot_th = current_state%th%active + l_tend_pr_tot_tabs = l_tend_pr_tot_th + + l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th + l_tend_3d_tabs = l_tend_3d_th + + ! Allocate 3d tendency fields upon availability + if (l_tend_3d_th) then + allocate( tend_3d_th(current_state%local_grid%size(Z_INDEX), & + current_state%local_grid%size(Y_INDEX), & + current_state%local_grid%size(X_INDEX) ) ) + endif + if (l_tend_3d_tabs) then + allocate( tend_3d_tabs(current_state%local_grid%size(Z_INDEX), & + current_state%local_grid%size(Y_INDEX), & + current_state%local_grid%size(X_INDEX) ) ) + endif + + ! Allocate profile tendency fields upon availability + if (l_tend_pr_tot_th) then + allocate( tend_pr_tot_th(current_state%local_grid%size(Z_INDEX)) ) + endif + if (l_tend_pr_tot_tabs) then + allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) + endif + end subroutine initialisation_callback !> Called for each column per timestep this will apply a forcing term @@ -100,7 +149,7 @@ subroutine timestep_callback(current_state) integer :: k ! Loop counter integer :: icol, jcol ! Shorthand column indices - + integer :: target_x_index, target_y_index ! Column indices with halos subtracted real(DEFAULT_PRECISION) :: dtm ! Local timestep variable if (current_state%halo_column) return @@ -110,13 +159,24 @@ subroutine timestep_callback(current_state) icol=current_state%column_local_x jcol=current_state%column_local_y + target_y_index = jcol - current_state%local_grid%halo_size(Y_INDEX) + target_x_index = icol - current_state%local_grid%halo_size(X_INDEX) + + ! Zero profile tendency totals on first instance in the sum + if (current_state%first_nonhalo_timestep_column) then + if (l_tend_pr_tot_th) then + tend_pr_tot_th(:) = 0.0_DEFAULT_PRECISION + endif + if (l_tend_pr_tot_tabs) then + tend_pr_tot_tabs(:) = 0.0_DEFAULT_PRECISION + endif + endif ! zero totals ! set the column liquid water content if (current_state%field_stepping == FORWARD_STEPPING) then ! Should this be revised to scalar_stepping qc_col(:) = current_state%q(iql)%data(:, jcol, icol) + current_state%sq(iql)%data(:, jcol, icol)*dtm else qc_col(:)= current_state%zq(iql)%data(:, jcol, icol) + current_state%sq(iql)%data(:, jcol, icol)*dtm - end if ! initialise the flux top and base to 0.0 @@ -159,6 +219,16 @@ subroutine timestep_callback(current_state) ! update the current_state sth current_state%sth%data(:, jcol, icol) = current_state%sth%data(:, jcol, icol) + sth_lw(:, jcol, icol) + ! Zero profile tendency totals on first instance in the sum + if (current_state%first_timestep_column) then + tend_pr_tot_th(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs(:) = 0.0_DEFAULT_PRECISION + endif ! zero totals + + if (current_state%diagnostic_sample_timestep .and. .not. current_state%halo_column) then + call compute_component_tendencies(current_state, icol, jcol, target_x_index, target_y_index) + end if + end subroutine timestep_callback subroutine finalisation_callback(current_state) @@ -166,6 +236,138 @@ subroutine finalisation_callback(current_state) type(model_state_type), target, intent(inout) :: current_state deallocate(lwrad_flux_top,lwrad_flux_base, lwrad_flux, density_factor, radiation_factor, sth_lw) + if (allocated(tend_3d_th)) deallocate(tend_3d_th) + if (allocated(tend_3d_tabs)) deallocate(tend_3d_tabs) + + if (allocated(tend_pr_tot_th)) deallocate(tend_pr_tot_th) + if (allocated(tend_pr_tot_tabs)) deallocate(tend_pr_tot_tabs) + end subroutine finalisation_callback + !> Computation of component tendencies + !! @param current_state Current model state + !! @param cxn The current slice, x, index + !! @param cyn The current column, y, index. + !! @param txn target_x_index + !! @param tyn target_y_index + subroutine compute_component_tendencies(current_state, cxn, cyn, txn, tyn) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: cxn, cyn, txn, tyn + + ! Calculate change in tendency due to component + if (l_tend_3d_th) then + tend_3d_th(:,tyn,txn) = sth_lw(:,cyn,cxn) + endif + if (l_tend_3d_tabs) then + tend_3d_tabs(:,tyn,txn) = sth_lw(:,cyn,cxn) * current_state%global_grid%configuration%vertical%rprefrcp(:) + endif + + ! Add local tendency fields to the profile total + if (l_tend_pr_tot_th) then + tend_pr_tot_th(:)=tend_pr_tot_th(:) + tend_3d_th(:,tyn,txn) + endif + if (l_tend_pr_tot_tabs) then + tend_pr_tot_tabs(:)=tend_pr_tot_tabs(:) + tend_3d_tabs(:,tyn,txn) + endif + + end subroutine compute_component_tendencies + + !> Field information retrieval callback, this returns information for a specific component's published field + !! @param current_state Current model state + !! @param name The name of the field to retrieve information for + !! @param field_information Populated with information about the field + !! @param strcomp Starting index within 1st argument string that matches substring (2nd argument); 0 if not a match. + subroutine field_information_retrieval_callback(current_state, name, field_information) + type(model_state_type), target, intent(inout) :: current_state + character(len=*), intent(in) :: name + type(component_field_information_type), intent(out) :: field_information + integer :: strcomp + + ! Field information for 3d + strcomp=INDEX(name, "lwrad_exponential_3d_local") + if (strcomp .ne. 0) then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=3 + field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) + field_information%dimension_sizes(2)=current_state%local_grid%size(Y_INDEX) + field_information%dimension_sizes(3)=current_state%local_grid%size(X_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + + if (name .eq. "tend_th_lwrad_exponential_3d_local") then + field_information%enabled=l_tend_3d_th + else if (name .eq. "tend_tabs_lwrad_exponential_3d_local") then + field_information%enabled=l_tend_3d_tabs + else + field_information%enabled=.true. + end if + + end if !end 3d check + + ! Field information for profiles + strcomp=INDEX(name, "lwrad_exponential_profile_total_local") + if (strcomp .ne. 0) then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=1 + field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + + if (name .eq. "tend_th_lwrad_exponential_profile_total_local") then + field_information%enabled=l_tend_pr_tot_th + else if (name .eq. "tend_tabs_lwrad_exponential_profile_total_local") then + field_information%enabled=l_tend_pr_tot_tabs + else + field_information%enabled=.true. + end if + + end if !end profile check + + end subroutine field_information_retrieval_callback + + + !> Field value retrieval callback, this returns the value of a specific published field + !! @param current_state Current model state + !! @param name The name of the field to retrieve the value for + !! @param field_value Populated with the value of the field + subroutine field_value_retrieval_callback(current_state, name, field_value) + type(model_state_type), target, intent(inout) :: current_state + character(len=*), intent(in) :: name + type(component_field_value_type), intent(out) :: field_value + + ! 3d Tendency Fields + if (name .eq. "tend_th_lwrad_exponential_3d_local" .and. allocated(tend_3d_th)) then + call set_published_field_value(field_value, real_3d_field=tend_3d_th) + else if (name .eq. "tend_tabs_lwrad_exponential_3d_local" .and. allocated(tend_3d_tabs)) then + call set_published_field_value(field_value, real_3d_field=tend_3d_tabs) + + ! Profile Tendency Fields + else if (name .eq. "tend_th_lwrad_exponential_profile_total_local" .and. allocated(tend_pr_tot_th)) then + call set_published_field_value(field_value, real_1d_field=tend_pr_tot_th) + else if (name .eq. "tend_tabs_lwrad_exponential_profile_total_local" .and. allocated(tend_pr_tot_tabs)) then + call set_published_field_value(field_value, real_1d_field=tend_pr_tot_tabs) + end if + + end subroutine field_value_retrieval_callback + + + !> Sets the published field value from the temporary diagnostic values held by this component. + !! @param field_value Populated with the value of the field + !! @param real_1d_field Optional one dimensional real of values to publish + !! @param real_2d_field Optional two dimensional real of values to publish + subroutine set_published_field_value(field_value, real_1d_field, real_2d_field, real_3d_field) + type(component_field_value_type), intent(inout) :: field_value + real(kind=DEFAULT_PRECISION), dimension(:), optional :: real_1d_field + real(kind=DEFAULT_PRECISION), dimension(:,:), optional :: real_2d_field + real(kind=DEFAULT_PRECISION), dimension(:,:,:), optional :: real_3d_field + + if (present(real_1d_field)) then + allocate(field_value%real_1d_array(size(real_1d_field)), source=real_1d_field) + else if (present(real_2d_field)) then + allocate(field_value%real_2d_array(size(real_2d_field, 1), size(real_2d_field, 2)), source=real_2d_field) + else if (present(real_3d_field)) then + allocate(field_value%real_3d_array(size(real_3d_field, 1), size(real_3d_field, 2), size(real_3d_field, 3)), & + source=real_3d_field) + end if + end subroutine set_published_field_value + + end module lwrad_exponential_mod diff --git a/components/makefile b/components/makefile index 22f9d6ca..4a456b03 100644 --- a/components/makefile +++ b/components/makefile @@ -1,5 +1,5 @@ # List of components to compile is the directories in this top level with makefiles in them -COMPONENTS=$(subst /,,$(sort $(dir $(wildcard */makefile)))) +COMPONENTS=buoyancy casim casim_profile_dgs cfltest checkpointer clearsourceterms conditional_diagnostics_column conditional_diagnostics_whole coriolis damping debugger decomposition diagnostics_3d diffusion diverr fftsolver flux_budget forcing gridmanager haloswapper iobridge iterativesolver iterativesolver_single_prec kidreader lateral_bcs lowerbc lwrad_exponential meanprofiles modelsynopsis pdf_analysis petsc_solver pressuresource tvdadvection profile_diagnostics pstep pwadvection randomnoise scalar_diagnostics set_consistent_lowbc setfluxlook simplecloud simplesetup smagorinsky socrates_couple stepfields steppingdirection subgrid_profile_diagnostics swapsmooth terminationcheck thadvection tracers viscosity xiosbridge dephy_forcings COMPONENT_HEADER_FILE=componentheaders.autogen COMPONENT_REGISTRATIONS_FILE=componentregistrations.autogen diff --git a/components/modelsynopsis/src/modelsynopsis.F90 b/components/modelsynopsis/src/modelsynopsis.F90 index c7bf98bb..fa63fcde 100644 --- a/components/modelsynopsis/src/modelsynopsis.F90 +++ b/components/modelsynopsis/src/modelsynopsis.F90 @@ -53,7 +53,7 @@ subroutine timestep_callback(current_state) end_time=mpi_wtime() call log_newline() call log_log(LOG_INFO, "Number of completed timesteps "//conv_to_string(current_state%timestep)) - call log_log(LOG_INFO, "Completed "//trim(conv_to_string((current_state%timestep-previous_ts)+1))//& + call log_log(LOG_INFO, "Completed "//trim(conv_to_string((current_state%timestep-previous_ts)))//& " timesteps in "//trim(conv_to_string(int((end_time-start_time) * 1000)))//"ms") call log_log(LOG_INFO, "Model time "//trim(conv_to_string(current_state%time, 5))//" seconds; dtm="//& trim(conv_to_string(current_state%dtm, 5))) diff --git a/components/pdf_analysis/src/pdf_analysis.F90 b/components/pdf_analysis/src/pdf_analysis.F90 index e48ade0a..b9c2a480 100644 --- a/components/pdf_analysis/src/pdf_analysis.F90 +++ b/components/pdf_analysis/src/pdf_analysis.F90 @@ -7,9 +7,10 @@ module pdf_analysis_mod use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX use datadefn_mod, only : DEFAULT_PRECISION, PRECISION_TYPE use optionsdatabase_mod, only : options_has_key, options_get_logical, options_get_integer, options_get_string, options_get_real - use mpi, only : MPI_SUM, MPI_IN_PLACE, MPI_INT, MPI_REAL, MPI_DOUBLE, MPI_Comm + use mpi, only : MPI_SUM, MPI_IN_PLACE, MPI_INT, MPI_REAL, MPI_DOUBLE use logging_mod, only : LOG_INFO, LOG_DEBUG, LOG_ERROR, log_master_log, log_is_master use conversions_mod, only : conv_to_string + use maths_mod, only : sort_1d implicit none #ifndef TEST_MODE @@ -27,9 +28,12 @@ module pdf_analysis_mod integer :: tpts ! total number of horizontal grid points on full domain integer :: lpts ! local number of horizontal grid points on - logical :: show_critical_w ! stdout diagnostic logical + integer :: n_w_bins ! number of histogram bins for w + real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: w_histogram_profile_local + real(kind=DEFAULT_PRECISION) :: w_bin_size, w_bin_min + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: w_histogram_bins - integer :: diagnostic_generation_frequency + logical :: show_critical_w ! stdout diagnostic logical public pdf_analysis_get_descriptor @@ -47,10 +51,13 @@ type(component_descriptor_type) function pdf_analysis_get_descriptor() pdf_analysis_get_descriptor%field_value_retrieval=>field_value_retrieval_callback pdf_analysis_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(pdf_analysis_get_descriptor%published_fields(2)) + allocate(pdf_analysis_get_descriptor%published_fields(2+2)) pdf_analysis_get_descriptor%published_fields(1)="critical_updraft_local" pdf_analysis_get_descriptor%published_fields(2)="critical_downdraft_local" + pdf_analysis_get_descriptor%published_fields(2+1)="w_histogram_profile_local" + pdf_analysis_get_descriptor%published_fields(2+2)="w_histogram_bins_local" + end function pdf_analysis_get_descriptor @@ -60,6 +67,7 @@ subroutine init_callback(current_state) type(model_state_type), target, intent(inout) :: current_state integer :: ierr, inc + ! Total number of horizontal points on global grid tpts = current_state%global_grid%size(X_INDEX)*current_state%global_grid%size(Y_INDEX) start_x = current_state%local_grid%local_domain_start_index(X_INDEX) @@ -77,32 +85,46 @@ subroutine init_callback(current_state) show_critical_w = options_get_logical(current_state%options_database, "show_critical_w") - !> Allocate space for the global 2d field only on a single process -! if (current_state%parallel%my_rank == 0) + !> Allocate space for the global 2d field + ! Exists on all processes, but is only used on a single process allocate(tmp_all(tpts)) -! else -! allocate(tmp_all(1)) -! end if - !> Allocate and collect horizontal local sizes, send to all proceses + !> Allocate and collect local sizes of horizontal grid points; send to all proceses allocate(gpts_on_proc(current_state%parallel%processes)) call mpi_allgather(lpts, 1, MPI_INT, gpts_on_proc, 1, MPI_INT, current_state%parallel%monc_communicator, ierr) !> Allocate and initialize displacement values + ! displacements are the array locations specifying the starting data location for data on a given process + ! based on how many data points belong to lower-rank (value) proceses allocate(displacements(current_state%parallel%processes)) displacements(1) = 0 do inc = 2, current_state%parallel%processes displacements(inc) = displacements(inc-1) + gpts_on_proc(inc-1) end do ! loop over processes - !> Allocate critial fields in current_state if a cold start - if (.not. current_state%continuation_run) then - allocate(current_state%global_grid%configuration%vertical%w_dwn(current_state%local_grid%size(Z_INDEX)),& - current_state%global_grid%configuration%vertical%w_up(current_state%local_grid%size(Z_INDEX))) + ! Since these current_state variables are not prognostics, it is possible for the model to be run without them + ! and then reconfigured with this component enabled. In that case, they will not be found in the checkpoint, + ! and they will not be allocated, but they will still be needed. + ! So in all cases, if this component is enabled, we make certain these are allocated. + if (.not. allocated(current_state%global_grid%configuration%vertical%w_dwn) ) then + allocate(current_state%global_grid%configuration%vertical%w_dwn(current_state%local_grid%size(Z_INDEX))) + current_state%global_grid%configuration%vertical%w_dwn(:) = 0.0_DEFAULT_PRECISION + end if + if (.not. allocated(current_state%global_grid%configuration%vertical%w_up) ) then + allocate(current_state%global_grid%configuration%vertical%w_up(current_state%local_grid%size(Z_INDEX))) + current_state%global_grid%configuration%vertical%w_up(:) = 0.0_DEFAULT_PRECISION end if - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") + ! Allocate w histogram profile data + n_w_bins = options_get_integer(current_state%options_database, "n_w_bins") + w_bin_size = options_get_real(current_state%options_database, "w_bin_size") + w_bin_min = options_get_real(current_state%options_database, "w_bin_min") + allocate( w_histogram_profile_local( current_state%local_grid%size(Z_INDEX), n_w_bins) ) + allocate( w_histogram_bins(n_w_bins) ) + w_histogram_bins(1) = w_bin_min + do inc = 2, n_w_bins + w_histogram_bins(inc) = w_histogram_bins(inc-1) + w_bin_size + end do ! loop over number of w bins end subroutine init_callback @@ -111,13 +133,18 @@ end subroutine init_callback !! @param current_state The current model state subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep !> Current forumulation only handles vertical velocity percentiles. !! Future enhancements may employ this component to perform additional !! operations that require access to full horizontal fields, such as !! pdf calculations. - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) call calculate_w_percentiles(current_state) + if ( .not. calculate_diagnostics) return + + call calculate_w_percentiles(current_state) end subroutine timestep_callback @@ -128,6 +155,8 @@ subroutine finalisation_callback(current_state) type(model_state_type), target, intent(inout) :: current_state if (allocated(tmp_all)) deallocate(tmp_all) + if (allocated(w_histogram_profile_local)) deallocate(w_histogram_profile_local) + end subroutine finalisation_callback @@ -137,7 +166,8 @@ subroutine calculate_w_percentiles(current_state) type(model_state_type), target, intent(inout) :: current_state real(kind=DEFAULT_PRECISION), dimension(lpts) :: tmp_var - integer :: i, j, k, num_neg, num_pos, dd_thresh_pos, ud_thresh_pos + integer :: k, num_neg, num_pos, dd_thresh_pos, ud_thresh_pos + integer :: bnc, bpn, bpx integer :: max_up_k, min_dwn_k real(kind=DEFAULT_PRECISION), dimension((lpts+1)/2) :: T real(kind=DEFAULT_PRECISION), dimension((tpts+1)/2) :: Tall @@ -154,6 +184,9 @@ subroutine calculate_w_percentiles(current_state) max_up_k = 0 min_dwn_k = 0 + !> initialize w histogram + w_histogram_profile_local(:,:) = 0.0_DEFAULT_PRECISION + !> reset thresholds current_state%global_grid%configuration%vertical%w_dwn(:) = 0.0_DEFAULT_PRECISION current_state%global_grid%configuration%vertical%w_up(:) = 0.0_DEFAULT_PRECISION @@ -169,9 +202,22 @@ subroutine calculate_w_percentiles(current_state) tmp_var=pack(l2d,.true.) !> Perform sort of data on local process - call MergeSort(tmp_var,lpts,T) - - !> Gather 2d field to single process + ! tmp_var: enters as unsorted values on local process, returns in sorted form + call sort_1d(tmp_var,lpts,T) + + !> Calculate w histogram profile + ! Counts values within a range of w_bin_size from w_histogram_bins(bnc). + ! For efficiency, only bins encompassing the current range of data are considered. + bpn = count(w_histogram_bins < minval(tmp_var)) + bpx = count(w_histogram_bins < maxval(tmp_var)) + do bnc = bpn, bpx + w_histogram_profile_local(k, bnc) = & + count( tmp_var >= w_histogram_bins(bnc) & + .and. & + tmp_var < w_histogram_bins(bnc) + w_bin_size ) + end do ! loop over + + !> Gather tmp_var local fields to single process (0), global data stored in tmp_all call mpi_gatherv(tmp_var, lpts, PRECISION_TYPE, tmp_all, gpts_on_proc, displacements, PRECISION_TYPE, & 0, current_state%parallel%monc_communicator, ierr ) @@ -179,17 +225,14 @@ subroutine calculate_w_percentiles(current_state) if (current_state%parallel%my_rank == 0) then !> Sort the global data on single process - call MergeSort(tmp_all,tpts,Tall) + call sort_1d(tmp_all,tpts,Tall) !> Determine threshold updraft and downdraft values num_neg = count(tmp_all < 0.0_DEFAULT_PRECISION) num_pos = count(tmp_all > 0.0_DEFAULT_PRECISION) - dd_thresh_pos = int(num_neg * dwnpercrit) - ud_thresh_pos = tpts - int(num_pos * uppercrit) + 1 - - if ( dd_thresh_pos == 0 ) dd_thresh_pos = 1 - if ( ud_thresh_pos == 0 .or. num_pos == 0 ) ud_thresh_pos = tpts + dd_thresh_pos = max(1, int(num_neg * dwnpercrit)) + ud_thresh_pos = min(tpts, tpts - int(num_pos * uppercrit) + 1) current_state%global_grid%configuration%vertical%w_dwn(k) = tmp_all(dd_thresh_pos) current_state%global_grid%configuration%vertical%w_up(k) = tmp_all(ud_thresh_pos) @@ -235,78 +278,6 @@ subroutine calculate_w_percentiles(current_state) end subroutine calculate_w_percentiles - !> Combines with MergeSort sorting algorithm taken from: - ! https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort#Fortran - ! and modified to match local type and renamed to avoid confusion with intrinsic merge - ! All parameters based on MergeSort. No need to modify anything. - subroutine MergeSortMerge(A,NA,B,NB,C,NC) - - integer, intent(in) :: NA,NB,NC ! Normal usage: NA+NB = NC - real(kind=DEFAULT_PRECISION), intent(in out) :: A(NA) ! B overlays C(NA+1:NC) - real(kind=DEFAULT_PRECISION), intent(in) :: B(NB) - real(kind=DEFAULT_PRECISION), intent(in out) :: C(NC) - - integer :: I,J,K - - I = 1; J = 1; K = 1; - do while(I <= NA .and. J <= NB) - if (A(I) <= B(J)) then - C(K) = A(I) - I = I+1 - else - C(K) = B(J) - J = J+1 - endif - K = K + 1 - enddo - do while (I <= NA) - C(K) = A(I) - I = I + 1 - K = K + 1 - enddo - return - - end subroutine mergesortmerge - - !> Combines with MergeSortMerge sorting algorithm taken from: - ! https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort#Fortran - ! and modified to match local type - !! @A array of values to be sorted, returned sorted - !! @N size of A - !! @T I don't really understand T - recursive subroutine MergeSort(A,N,T) - - integer, intent(in) :: N - real(kind=DEFAULT_PRECISION), dimension(N), intent(in out) :: A - real(kind=DEFAULT_PRECISION), dimension((N+1)/2), intent (out) :: T - - integer :: NA,NB - real(kind=DEFAULT_PRECISION) :: V - - if (N < 2) return - if (N == 2) then - if (A(1) > A(2)) then - V = A(1) - A(1) = A(2) - A(2) = V - endif - return - endif - NA=(N+1)/2 - NB=N-NA - - call MergeSort(A,NA,T) - call MergeSort(A(NA+1),NB,T) - - if (A(NA) > A(NA+1)) then - T(1:NA)=A(1:NA) - call MergeSortMerge(T,NA,A(NA+1),NB,A,N) - endif - return - - end subroutine MergeSort - - !> Field information retrieval callback, this returns information for a specific components published field !! @param current_state Current model state !! @param name The name of the field to retrieve information for @@ -315,12 +286,35 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor type(model_state_type), target, intent(inout) :: current_state character(len=*), intent(in) :: name type(component_field_information_type), intent(out) :: field_information + integer :: strcomp + + ! Field information for critical values + strcomp = INDEX(name, "critical_") + if (strcomp .ne. 0) then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=1 + field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + field_information%enabled=.true. + end if + + ! Field information for w histogram + if (name .eq. "w_histogram_profile_local") then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions = 2 + field_information%dimension_sizes(1) = current_state%local_grid%size(Z_INDEX) + field_information%dimension_sizes(2) = n_w_bins + field_information%data_type = COMPONENT_DOUBLE_DATA_TYPE + field_information%enabled=.true. + end if - field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE - field_information%number_dimensions=1 - field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) - field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE - field_information%enabled=.true. + if (name .eq. "w_histogram_bins_local") then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions = 1 + field_information%dimension_sizes(1) = n_w_bins + field_information%data_type = COMPONENT_DOUBLE_DATA_TYPE + field_information%enabled=.true. + end if end subroutine field_information_retrieval_callback @@ -341,6 +335,12 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) else if (name .eq. "critical_downdraft_local") then allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX)), & source=current_state%global_grid%configuration%vertical%w_dwn(:)) + else if (name .eq. "w_histogram_profile_local") then + allocate(field_value%real_2d_array(current_state%local_grid%size(Z_INDEX), n_w_bins), & + source=w_histogram_profile_local(:,:)) + else if (name .eq. "w_histogram_bins_local") then + allocate(field_value%real_1d_array(n_w_bins), & + source=w_histogram_bins(:)) end if end subroutine field_value_retrieval_callback diff --git a/components/profile_diagnostics/src/profile_diagnostics.F90 b/components/profile_diagnostics/src/profile_diagnostics.F90 index 05d42b19..d9cbdfba 100644 --- a/components/profile_diagnostics/src/profile_diagnostics.F90 +++ b/components/profile_diagnostics/src/profile_diagnostics.F90 @@ -10,6 +10,8 @@ module profile_diagnostics_mod use saturation_mod, only: qsaturation use logging_mod, only : LOG_ERROR, log_master_log use def_tvd_diagnostic_terms, only: tvd_dgs_terms, allocate_tvd_diagnostic_terms + use conversions_mod, only : conv_to_uppercase + use def_merge_atm, only: str_merge_atm implicit none @@ -19,6 +21,8 @@ module profile_diagnostics_mod integer :: total_points, iqv=0, iql=0, iqr=0, iqi=0, iqs=0, & iqg=0 + integer :: inl=0, inr=0, ini=0, ins=0, & + ing=0 real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: & tempfac, u_wind_tot, uprime_tot, v_wind_tot, vprime_tot, & uprime, vprime, wke_tot, wwww_tot, www_tot, ww_tot, & @@ -27,6 +31,8 @@ module profile_diagnostics_mod thref, prefn, rho, rhon, thinit, uinit, vinit, & ! mositure means q_temp, qv_tot, ql_tot, qr_tot, qi_tot, qs_tot, qg_tot, & + ! number concentrations + nl_tot, nr_tot, ni_tot, ns_tot, ng_tot, & ! moisture flux terms wqv_cn_tot, wql_cn_tot, wqr_cn_tot, wqi_cn_tot, & wqs_cn_tot, wqg_cn_tot, & @@ -41,7 +47,7 @@ module profile_diagnostics_mod real(kind=DEFAULT_PRECISION), dimension(:) , allocatable :: cloud_ice_mask_tot logical :: l_partial_liq_ice - real(kind=DEFAULT_PRECISION) :: qlcrit, qicrit + real(kind=DEFAULT_PRECISION) :: qlcrit, qicrit, max_height_cloud ! character string to determine the advection scheme character(len=5) :: advect_theta, advect_q, advect_flow @@ -63,7 +69,7 @@ type(component_descriptor_type) function profile_diagnostics_get_descriptor() profile_diagnostics_get_descriptor%field_value_retrieval=>field_value_retrieval_callback profile_diagnostics_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(profile_diagnostics_get_descriptor%published_fields(42+26+4)) + allocate(profile_diagnostics_get_descriptor%published_fields(76)) profile_diagnostics_get_descriptor%published_fields(1)="thref_local" profile_diagnostics_get_descriptor%published_fields(2)="prefn_local" @@ -149,6 +155,14 @@ type(component_descriptor_type) function profile_diagnostics_get_descriptor() profile_diagnostics_get_descriptor%published_fields(42+25+3)="cloud_liq_mask_total_local" profile_diagnostics_get_descriptor%published_fields(42+25+4)="cloud_ice_mask_total_local" +! ===================================================== +! hydrometeor number concentrations (only output if casim is on) + profile_diagnostics_get_descriptor%published_fields(72)="liquid_nc_total_local" + profile_diagnostics_get_descriptor%published_fields(73)="rain_nc_total_local" + profile_diagnostics_get_descriptor%published_fields(74)="ice_nc_total_local" + profile_diagnostics_get_descriptor%published_fields(75)="snow_nc_total_local" + profile_diagnostics_get_descriptor%published_fields(76)="graupel_nc_total_local" + end function profile_diagnostics_get_descriptor @@ -210,7 +224,8 @@ subroutine initialisation_callback(current_state) iql=get_q_index(standard_q_names%CLOUD_LIQUID_MASS, 'profile_diags') qlcrit=options_get_real(current_state%options_database, "qlcrit") qicrit=options_get_real(current_state%options_database, "qicrit") - + max_height_cloud=options_get_real(current_state%options_database, "max_height_cloud") + allocate(qv_tot(current_state%local_grid%size(Z_INDEX)) & , ql_tot(current_state%local_grid%size(Z_INDEX)), & q_temp(current_state%local_grid%size(Z_INDEX)), & @@ -247,12 +262,34 @@ subroutine initialisation_callback(current_state) allocate(wqg_cn_tot(current_state%local_grid%size(Z_INDEX))) allocate(wqg_ad_tot(current_state%local_grid%size(Z_INDEX))) endif + ! allocate number concentrations for the hydrometeors + if (current_state%liquid_water_nc_index > 0) then + inl = current_state%liquid_water_nc_index + allocate(nl_tot(current_state%local_grid%size(Z_INDEX))) + endif + if (current_state%rain_water_nc_index > 0) then + inr = current_state%rain_water_nc_index + allocate(nr_tot(current_state%local_grid%size(Z_INDEX))) + endif + if (current_state%ice_water_nc_index > 0) then + ini = current_state%ice_water_nc_index + allocate(ni_tot(current_state%local_grid%size(Z_INDEX))) + endif + if (current_state%snow_water_nc_index > 0) then + ins = current_state%snow_water_nc_index + allocate(ns_tot(current_state%local_grid%size(Z_INDEX))) + endif + if (current_state%graupel_water_nc_index > 0) then + ing = current_state%graupel_water_nc_index + allocate(ng_tot(current_state%local_grid%size(Z_INDEX))) + endif ! arrange and allocate cloud fraction diagnostics...3d mask is optional - cloud_mask_method = & - options_get_string(current_state%options_database, "cloud_mask_method") - if (.not. (trim(cloud_mask_method) == "DEFAULT" .or. & - trim(cloud_mask_method) == "SOCRATES" ) ) then + cloud_mask_method = conv_to_uppercase( & + options_get_string(current_state%options_database, "cloud_mask_method")) + if (.not. (cloud_mask_method == "DEFAULT" .or. & + cloud_mask_method == "SOCRATES" .or. & + cloud_mask_method == "RCEMIP")) then call log_master_log(LOG_ERROR, & "Requested cloud_mask_method is invalid. Check profile_diagnostics.F90") end if ! cloud_mask_method validity check @@ -274,7 +311,7 @@ end subroutine initialisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: k, i, iq_tmp, km1, kp1, icol, jcol + integer :: k, i, iq_tmp, icol, jcol real(kind=DEFAULT_PRECISION) :: cltop_col, clbas_col, qv, qc, TdegK, Pmb & , qs, exner real(kind=DEFAULT_PRECISION) :: uprime_w_local, vprime_w_local & @@ -339,6 +376,12 @@ subroutine timestep_callback(current_state) wqg_ad_tot(:) = 0.0_DEFAULT_PRECISION endif + if (inl > 0) nl_tot(:) = 0.0_DEFAULT_PRECISION + if (inr > 0) nr_tot(:) = 0.0_DEFAULT_PRECISION + if (ini > 0) ni_tot(:) = 0.0_DEFAULT_PRECISION + if (ins > 0) ns_tot(:) = 0.0_DEFAULT_PRECISION + if (ing > 0) ng_tot(:) = 0.0_DEFAULT_PRECISION + if (allocated(cloud_mask)) cloud_mask(:,:,:) = 0.0_DEFAULT_PRECISION cloud_mask_tot(:) = 0.0_DEFAULT_PRECISION cloud_liq_mask_tot(:) = 0.0_DEFAULT_PRECISION @@ -462,29 +505,34 @@ subroutine timestep_callback(current_state) endif if (allocated(wke_tot)) then - do k=1, current_state%local_grid%size(Z_INDEX) - kp1=MIN(k+1,current_state%local_grid%size(Z_INDEX)) - km1=MAX(k-1,1) - wke_tot(k) = wke_tot(k) + 0.25_DEFAULT_PRECISION * ( & - current_state%global_grid%configuration%vertical%rho(k) * & - ( (current_state%v%data(k,jcol,icol) & - + current_state%v%data(k,jcol,icol+1)) & - * uprime(k)*uprime(kp1) & - + (current_state%v%data(k,jcol,icol) & - + current_state%v%data(k,jcol+1,icol)) & - * vprime(k) * vprime(kp1) ) & - + 0.5_DEFAULT_PRECISION * ( & - (current_state%w%data(k,jcol,icol) & - + current_state%w%data(kp1,jcol,icol)) & - * current_state%w%data(k,jcol,icol) & - * current_state%w%data(kp1,jcol,icol) & - * current_state%global_grid%configuration%vertical%rhon(kp1) & - +(current_state%w%data(k,jcol,icol) & - + current_state%w%data(km1,jcol,icol)) & - * current_state%w%data(k,jcol,icol) & - * current_state%w%data(km1,jcol,icol) & - * current_state%global_grid%configuration%vertical%rhon(k) ) & - ) + do k=1, current_state%local_grid%size(Z_INDEX)-1 + uprime_w_local = & + 0.25_DEFAULT_PRECISION * ( current_state%u%data(k,jcol,icol) + & + current_state%u%data(k,jcol,icol-1) + & + current_state%u%data(k+1,jcol,icol) + & + current_state%u%data(k+1,jcol,icol-1) ) + & + current_state%ugal + if (allocated(current_state%global_grid%configuration%vertical%olubar)) & + uprime_w_local = uprime_w_local - & + 0.5_DEFAULT_PRECISION * ( current_state%global_grid%configuration%vertical%olubar(k) + & + current_state%global_grid%configuration%vertical%olubar(k+1) ) + vprime_w_local = & + 0.25_DEFAULT_PRECISION * ( current_state%v%data(k,jcol,icol) + & + current_state%v%data(k,jcol-1,icol) + & + current_state%v%data(k+1,jcol,icol) + & + current_state%v%data(k+1,jcol-1,icol) ) + & + current_state%vgal + if (allocated(current_state%global_grid%configuration%vertical%olvbar)) & + vprime_w_local = vprime_w_local - & + 0.5_DEFAULT_PRECISION * ( current_state%global_grid%configuration%vertical%olvbar(k) + & + current_state%global_grid%configuration%vertical%olvbar(k+1) ) + + wke_tot(k) = wke_tot(k) + 0.5_DEFAULT_PRECISION * & + current_state%global_grid%configuration%vertical%rhon(k) * & + current_state%w%data(k,jcol,icol) * & + ( uprime_w_local * uprime_w_local + & + vprime_w_local * vprime_w_local + & + current_state%w%data(k,jcol,icol) * current_state%w%data(k,jcol,icol) ) enddo endif @@ -536,7 +584,6 @@ subroutine timestep_callback(current_state) exner = current_state%global_grid%configuration%vertical%rprefrcp(k) Pmb = (current_state%global_grid%configuration%vertical%prefn(k)/100.) qv = current_state%q(iqv)%data(k, jcol,icol) - qc = current_state%q(iql)%data(k, jcol,icol) TdegK = (current_state%th%data(k,jcol,icol) & + current_state%global_grid%configuration%vertical%thref(k))*exner qs = qsaturation(TdegK, Pmb) @@ -552,6 +599,17 @@ subroutine timestep_callback(current_state) qs_tot(:) = qs_tot(:) + (current_state%q(iqs)%data(:,jcol,icol)) if (iqg > 0) & qg_tot(:) = qg_tot(:) + (current_state%q(iqg)%data(:,jcol,icol)) + ! hydrometeor number concentration + if (inl > 0) & + nl_tot(:) = nl_tot(:) + (current_state%q(inl)%data(:,jcol,icol)) + if (inr > 0) & + nr_tot(:) = nr_tot(:) + (current_state%q(inr)%data(:,jcol,icol)) + if (ini > 0) & + ni_tot(:) = ni_tot(:) + (current_state%q(ini)%data(:,jcol,icol)) + if (ins > 0) & + ns_tot(:) = ns_tot(:) + (current_state%q(ins)%data(:,jcol,icol)) + if (ing > 0) & + ng_tot(:) = ng_tot(:) + (current_state%q(ing)%data(:,jcol,icol)) ! ! moisture field fluxes ! vapour @@ -667,6 +725,17 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor else if (name .eq. "cloud_ice_mask_total_local") then field_information%enabled=allocated(cloud_ice_mask_tot) ! ======================================================================== + else if (name .eq. "liquid_nc_total_local") then + field_information%enabled=current_state%liquid_water_nc_index .gt. 0 + else if (name .eq. "rain_nc_total_local" ) then + field_information%enabled= current_state%rain_water_nc_index .gt. 0 + else if (name .eq. "ice_nc_total_local") then + field_information%enabled= current_state%ice_water_nc_index .gt. 0 + else if (name .eq. "snow_nc_total_local") then + field_information%enabled= current_state%snow_water_nc_index .gt. 0 + else if (name .eq. "graupel_nc_total_local" ) then + field_information%enabled= current_state%graupel_water_nc_index .gt. 0 +! ======================================================================== else field_information%enabled=.true. end if @@ -778,6 +847,31 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) do k = 1, current_state%local_grid%size(Z_INDEX) field_value%real_1d_array(k)=qg_tot(k) enddo + else if (name .eq. "liquid_nc_total_local") then + allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) + do k = 1, current_state%local_grid%size(Z_INDEX) + field_value%real_1d_array(k)=nl_tot(k) + enddo + else if (name .eq. "rain_nc_total_local" ) then + allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) + do k = 1, current_state%local_grid%size(Z_INDEX) + field_value%real_1d_array(k)=nr_tot(k) + enddo + else if (name .eq. "ice_nc_total_local" ) then + allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) + do k = 1, current_state%local_grid%size(Z_INDEX) + field_value%real_1d_array(k)=ni_tot(k) + enddo + else if (name .eq. "snow_nc_total_local" ) then + allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) + do k = 1, current_state%local_grid%size(Z_INDEX) + field_value%real_1d_array(k)=ns_tot(k) + enddo + else if (name .eq. "graupel_nc_total_local" ) then + allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) + do k = 1, current_state%local_grid%size(Z_INDEX) + field_value%real_1d_array(k)=ng_tot(k) + enddo else if (name .eq. "w_wind_total_local") then allocate(field_value%real_1d_array(current_state%local_grid%size(Z_INDEX))) do k = 1, current_state%local_grid%size(Z_INDEX) @@ -1097,28 +1191,30 @@ end subroutine calculate_wq ! ! !> DEFAULT method - ! Cloud fraction is based on exceeding qlcrit and qicrit. - ! This definition is consistent with that used in the conditional - ! diagnostics routine (condition "AC"). It does not include - ! consideration of rain, snow, and graupel fields. Liquid and - ! ice cloud are treated separately, with their individual fractions - ! within a cell summing to 1 based their mixing ratios relative to - ! the cell total. + ! Cloud fraction is based on species exceeding qlcrit and qicrit. + ! This definition is NOT consistent with that used in the conditional + ! diagnostics routine (condition "AC") because: + ! Ice cloud considers the combination of ice and snow species. + ! It does not include consideration of rain and graupel fields. + ! Liquid and ice cloud are treated separately, with their individual + ! fractions within a cell summing to 1 based their mixing ratios + ! relative to the cell total. + ! Ice cloud considered as the combination of ice and snow species. subroutine calculate_cloud_mask(current_state, jcol, icol) type(model_state_type), target, intent(inout) :: current_state integer, intent(in) :: jcol, icol integer :: k, target_y_index, target_x_index logical :: l_prepare_3d_mask, cloud_present + ! Create a local copy of the precipitation multiplication factors + ! for the SOCRATES cloud fraction calculation from the str_merge_atm + ! type structure. ! The factors below were derived as part of J. Petch PhD ! These are used in the SOCRATES method. - real(kind=DEFAULT_PRECISION) :: & - rainfac = 0.02, & - snowfac = 0.40, & - graupfac = 0.05 + type (str_merge_atm) :: merge_fields ! Local temporary terms - real(kind=DEFAULT_PRECISION) :: templ, tempi, tempt + real(kind=DEFAULT_PRECISION) :: templ, tempi, tempt, qsat_thresh target_y_index = jcol - current_state%local_grid%halo_size(Y_INDEX) target_x_index = icol - current_state%local_grid%halo_size(X_INDEX) @@ -1129,7 +1225,9 @@ subroutine calculate_cloud_mask(current_state, jcol, icol) l_prepare_3d_mask = allocated(cloud_mask) - do k=1, current_state%local_grid%size(Z_INDEX) + do k=2, current_state%local_grid%size(Z_INDEX) + + if (current_state%global_grid%configuration%vertical%zn(k) > max_height_cloud) exit !> Collect available condensate amounts if (iql > 0) & @@ -1138,21 +1236,39 @@ subroutine calculate_cloud_mask(current_state, jcol, icol) tempi = current_state%q(iqi)%data(k, jcol, icol) !> Check cloud_mask_method and modify as needed - !> The SOCRATES method considers rain, snow, and graupel. - if (trim(cloud_mask_method) == "SOCRATES") then + if (cloud_mask_method == "SOCRATES") then if (iqr > 0) & - templ = templ + rainfac * current_state%q(iqr)%data(k, jcol, icol) + templ = templ + merge_fields%rainfac * current_state%q(iqr)%data(k, jcol, icol) if (iqs > 0) & - tempi = tempi + snowfac * current_state%q(iqs)%data(k, jcol, icol) + tempi = tempi + merge_fields%snowfac * current_state%q(iqs)%data(k, jcol, icol) if (iqg > 0) & - tempi = tempi + graupfac * current_state%q(iqg)%data(k, jcol, icol) - endif ! check cloud_mask_method + tempi = tempi + merge_fields%graupfac * current_state%q(iqg)%data(k, jcol, icol) + end if ! check cloud_mask_method + + !> Consider the snow species as cloud for DEFAULT and RCEMIP + if ((cloud_mask_method == "DEFAULT" .or. & + cloud_mask_method == "RCEMIP") .and. iqs > 0) then + tempi = tempi + current_state%q(iqs)%data(k, jcol, icol) + end if ! check cloud_mask_method + + !> The RCEMIP method + !> 1e-5 g/g, or 1 % of the saturation mixing ratio over water, whichever is smaller + if (cloud_mask_method == "RCEMIP") then + qsat_thresh = min(1e-5_DEFAULT_PRECISION,& + qsaturation( (current_state%th%data(k,jcol,icol) & + + current_state%global_grid%configuration%vertical%thref(k))*& + current_state%global_grid%configuration%vertical%rprefrcp(k), & + current_state%global_grid%configuration%vertical%prefn(k)/100.) & + * 0.01_DEFAULT_PRECISION) + end if !> Work out cloud fractions tempt = templ + tempi - if (trim(cloud_mask_method) == "SOCRATES") then + if (cloud_mask_method == "SOCRATES") then cloud_present = (tempt > EPSILON(tempt)) + else if (cloud_mask_method == "RCEMIP") then + cloud_present = (tempt > qsat_thresh) else ! DEFAULT cloud_present = (templ > qlcrit .or. tempi > qicrit .or. (templ+tempi) > qlcrit) end if diff --git a/components/pstep/src/pstep.F90 b/components/pstep/src/pstep.F90 index f4463973..ef047405 100644 --- a/components/pstep/src/pstep.F90 +++ b/components/pstep/src/pstep.F90 @@ -33,8 +33,6 @@ module pstep_mod tendp_pr_tot_u, tendp_pr_tot_v, tendp_pr_tot_w, tend_pr_tot_u, tend_pr_tot_v, tend_pr_tot_w logical :: l_tendp_pr_tot_u, l_tendp_pr_tot_v, l_tendp_pr_tot_w, l_tend_pr_tot_u, l_tend_pr_tot_v, l_tend_pr_tot_w - integer :: diagnostic_generation_frequency - public pstep_get_descriptor contains @@ -285,9 +283,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_w(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -315,6 +310,10 @@ end subroutine finalisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state integer :: local_y, local_x, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column local_y=current_state%column_local_y local_x=current_state%column_local_x @@ -346,15 +345,11 @@ subroutine timestep_callback(current_state) if (current_state%galilean_transformation) call perform_galilean_transformation(current_state, & current_state%column_local_y, current_state%column_local_x) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) if (.not. current_state%halo_column) call step_pressure_field(current_state) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/pwadvection/src/pwadvection.F90 b/components/pwadvection/src/pwadvection.F90 index c5e01c3d..eb87e610 100644 --- a/components/pwadvection/src/pwadvection.F90 +++ b/components/pwadvection/src/pwadvection.F90 @@ -39,8 +39,6 @@ module pwadvection_mod l_tend_pr_tot_tabs ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency - public pwadvection_get_descriptor contains @@ -102,24 +100,24 @@ subroutine initialisation_callback(current_state) l_tend_pr_tot_v = current_state%v%active .and. advect_flow l_tend_pr_tot_w = current_state%w%active .and. advect_flow l_tend_pr_tot_th = current_state%th%active .and. advect_th - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_u = (current_state%u%active .and. advect_flow) .or. l_tend_pr_tot_u l_tend_3d_v = (current_state%v%active .and. advect_flow) .or. l_tend_pr_tot_v l_tend_3d_w = (current_state%w%active .and. advect_flow) .or. l_tend_pr_tot_w l_tend_3d_th = (current_state%th%active .and. advect_th) .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th ! Allocate 3d tendency fields upon availability @@ -220,9 +218,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -262,8 +257,10 @@ end subroutine finalisation_callback !! not include halos and to prevent array out-of-bounds subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -311,17 +308,15 @@ subroutine timestep_callback(current_state) if (current_state%halo_column) return - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) if (advect_flow) call advect_flow_fields(current_state, current_x_index, current_y_index) if (advect_th) call advect_th_field(current_state, current_x_index, current_y_index) if (advect_q) call advect_q_field(current_state, current_x_index, current_y_index) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback @@ -409,7 +404,7 @@ subroutine advect_th_field(current_state, current_x_index, current_y_index) do k=2,current_state%local_grid%size(Z_INDEX)-1 #ifdef U_ACTIVE - current_state%sth%data(k, current_y_index, current_x_index)= & !current_state%sth%data(k, current_y_index, current_x_index)+& + current_state%sth%data(k, current_y_index, current_x_index)= current_state%sth%data(k, current_y_index, current_x_index)+& current_state%global_grid%configuration%horizontal%cx*& 0.5_DEFAULT_PRECISION*(current_state%u%data(k, current_y_index, current_x_index-1)*& current_state%th%data(k, current_y_index, current_x_index-1)-& @@ -439,7 +434,7 @@ subroutine advect_th_field(current_state, current_x_index, current_y_index) k=current_state%local_grid%size(Z_INDEX) #ifdef U_ACTIVE - current_state%sth%data(k, current_y_index, current_x_index)= & !current_state%sth%data(k, current_y_index, current_x_index)+& + current_state%sth%data(k, current_y_index, current_x_index)= current_state%sth%data(k, current_y_index, current_x_index)+& current_state%global_grid%configuration%horizontal%cx*& 0.5_DEFAULT_PRECISION*(current_state%u%data(k, current_y_index, current_x_index-1)*& current_state%th%data(k, current_y_index, current_x_index-1)-& @@ -476,7 +471,7 @@ subroutine advect_flow_fields(current_state, current_x_index, current_y_index) do k=2,current_state%local_grid%size(Z_INDEX)-1 #ifdef U_ACTIVE - current_state%su%data(k, current_y_index, current_x_index)=& + current_state%su%data(k, current_y_index, current_x_index)=current_state%su%data(k, current_y_index, current_x_index)+& current_state%global_grid%configuration%horizontal%tcx*(current_state%u%data(k, current_y_index, current_x_index-1)*& (current_state%u%data(k, current_y_index, current_x_index)+& current_state%u%data(k, current_y_index, current_x_index-1))-& @@ -504,7 +499,8 @@ subroutine advect_flow_fields(current_state, current_x_index, current_y_index) #endif #ifdef V_ACTIVE - current_state%sv%data(k, current_y_index, current_x_index)=current_state%global_grid%configuration%horizontal%tcy*(& + current_state%sv%data(k, current_y_index, current_x_index)=current_state%sv%data(k, current_y_index, current_x_index)+& + current_state%global_grid%configuration%horizontal%tcy*(& current_state%v%data(k, current_y_index-1, current_x_index)*& (current_state%v%data(k, current_y_index, current_x_index)+& current_state%v%data(k, current_y_index-1, current_x_index))-& @@ -532,7 +528,8 @@ subroutine advect_flow_fields(current_state, current_x_index, current_y_index) #endif #ifdef W_ACTIVE - current_state%sw%data(k, current_y_index, current_x_index)=(current_state%global_grid%configuration%vertical%tzd1(k)*& + current_state%sw%data(k, current_y_index, current_x_index)=current_state%sw%data(k, current_y_index, current_x_index)+& + (current_state%global_grid%configuration%vertical%tzd1(k)*& current_state%w%data(k-1, current_y_index, current_x_index)*& (current_state%w%data(k, current_y_index, current_x_index)+& current_state%w%data(k-1, current_y_index, current_x_index))-& @@ -563,7 +560,8 @@ subroutine advect_flow_fields(current_state, current_x_index, current_y_index) if (l_toplevel)then k=current_state%local_grid%size(Z_INDEX) #ifdef U_ACTIVE - current_state%su%data(k, current_y_index, current_x_index)=current_state%global_grid%configuration%horizontal%tcx*& + current_state%su%data(k, current_y_index, current_x_index)=current_state%su%data(k, current_y_index, current_x_index)+& + current_state%global_grid%configuration%horizontal%tcx*& (current_state%u%data(k, current_y_index, current_x_index-1)*& (current_state%u%data(k, current_y_index, current_x_index)+& current_state%u%data(k, current_y_index, current_x_index-1))-& @@ -588,7 +586,8 @@ subroutine advect_flow_fields(current_state, current_x_index, current_y_index) #endif #ifdef V_ACTIVE - current_state%sv%data(k, current_y_index, current_x_index)=current_state%global_grid%configuration%horizontal%tcy*& + current_state%sv%data(k, current_y_index, current_x_index)=current_state%sv%data(k, current_y_index, current_x_index)+& + current_state%global_grid%configuration%horizontal%tcy*& (current_state%v%data(k, current_y_index-1, current_x_index)*& (current_state%v%data(k, current_y_index, current_x_index)+& current_state%v%data(k, current_y_index-1, current_x_index))-& diff --git a/components/randomnoise/src/randomnoise.F90 b/components/randomnoise/src/randomnoise.F90 index b81c697d..ff1ff79d 100644 --- a/components/randomnoise/src/randomnoise.F90 +++ b/components/randomnoise/src/randomnoise.F90 @@ -5,9 +5,12 @@ module randomnoise_mod use state_mod, only : FORWARD_STEPPING, model_state_type use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX use optionsdatabase_mod, only : options_get_integer, options_get_logical, options_get_real, & - options_get_logical_array, options_get_real_array, options_get_string_array, options_get_array_size + options_get_logical_array, options_get_real_array, options_get_string_array, options_get_array_size, & + options_compare_profile_arrays use interpolation_mod, only: piecewise_linear_1d use q_indices_mod, only: get_q_index, standard_q_names + use logging_mod, only: LOG_ERROR, log_master_log + use conversions_mod, only : conv_to_string implicit none @@ -15,7 +18,7 @@ module randomnoise_mod private #endif - integer, parameter :: MAX_SIZE_SEED_ARRAY=256, I_SEED=7, ISD=1 + integer, parameter :: MAX_SIZE_SEED_ARRAY=256, I_SEED=7 public randomnoise_get_descriptor contains @@ -77,20 +80,28 @@ subroutine initialisation_callback(current_state) end if if (l_rand_pl_q) then + allocate(names_rand_pl_q(options_get_array_size(current_state%options_database, "names_rand_pl_q"))) + if (size(names_rand_pl_q) .eq. 0) then + call log_master_log(LOG_ERROR, "Model configured with l_rand_pl_q=.true., but no names_rand_pl_q "//& + "have been provided to specify the species names to perturb.") + end if + call options_get_string_array(current_state%options_database, "names_rand_pl_q", names_rand_pl_q) end if - if (l_rand_bit_reproducible) iranseed(1:ISD)=I_SEED + if (l_rand_bit_reproducible) iranseed(1:MAX_SIZE_SEED_ARRAY)=I_SEED if (l_rand_pl_theta)then ! Get random numbers - if (l_rand_bit_reproducible) call random_seed(get=iranseed) + if (l_rand_bit_reproducible) call random_seed(put=iranseed) if (l_rand_bit_reproducible) call random_number(randarr) ! Get amplitude profiles allocate(z_rand_pl_theta(options_get_array_size(current_state%options_database, "z_rand_pl_theta")), & f_rand_pl_theta(options_get_array_size(current_state%options_database, "f_rand_pl_theta"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_rand_pl_theta", "f_rand_pl_theta", "theta perturbation") call options_get_real_array(current_state%options_database, "z_rand_pl_theta", z_rand_pl_theta) call options_get_real_array(current_state%options_database, "f_rand_pl_theta", f_rand_pl_theta) zgrid=current_state%global_grid%configuration%vertical%zn(:) @@ -122,7 +133,15 @@ subroutine initialisation_callback(current_state) call options_get_real_array(current_state%options_database, "z_rand_pl_q", z_rand_pl_q) nzq=size(z_rand_pl_q) zgrid=current_state%global_grid%configuration%vertical%zn(:) - allocate(f_rand_pl_q_tmp(nq_rand*nzq)) + allocate(f_rand_pl_q_tmp(options_get_array_size(current_state%options_database, "f_rand_pl_q"))) + if (nq_rand*nzq .ne. size(f_rand_pl_q_tmp)) then + call log_master_log(LOG_ERROR, "There is a mismatch between the number of moisture perturbation heights, "//& + "size(z_rand_pl_q)="//trim(conv_to_string(nzq))// & + ", and the perturbation values, "// & + "size(f_rand_pl_q)="//trim(conv_to_string(size(f_rand_pl_q_tmp)))// & + ". The length of f_rand_pl_q should equal the length of z_rand_pl_q "// & + "multiplied by the number of names_rand_pl_q.") + end if call options_get_real_array(current_state%options_database, "f_rand_pl_q", f_rand_pl_q_tmp) allocate(f_rand_pl_q(nzq, nq_rand)) f_rand_pl_q(1:nzq, 1:nq_rand)=reshape(f_rand_pl_q_tmp, (/nzq, nq_rand/)) @@ -164,6 +183,8 @@ subroutine initialisation_callback(current_state) ! Get amplitude profiles allocate(z_rand_pl_w(options_get_array_size(current_state%options_database, "z_rand_pl_w")), & f_rand_pl_w(options_get_array_size(current_state%options_database, "f_rand_pl_w"))) + call options_compare_profile_arrays(current_state%options_database, & + "z_rand_pl_w", "f_rand_pl_w", "w perturbation") call options_get_real_array(current_state%options_database, "z_rand_pl_w", z_rand_pl_w) call options_get_real_array(current_state%options_database, "f_rand_pl_w", f_rand_pl_w) diff --git a/components/scalar_diagnostics/src/scalar_diagnostics.F90 b/components/scalar_diagnostics/src/scalar_diagnostics.F90 index 344291be..d5c3fc2d 100644 --- a/components/scalar_diagnostics/src/scalar_diagnostics.F90 +++ b/components/scalar_diagnostics/src/scalar_diagnostics.F90 @@ -3,6 +3,7 @@ module scalar_diagnostics_mod COMPONENT_ARRAY_FIELD_TYPE, COMPONENT_INTEGER_DATA_TYPE, & component_descriptor_type, component_field_value_type, component_field_information_type use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX + use state_mod, only : FORWARD_STEPPING use optionsdatabase_mod, only : options_get_real use state_mod, only : model_state_type use datadefn_mod, only : DEFAULT_PRECISION @@ -15,7 +16,7 @@ module scalar_diagnostics_mod private #endif - integer :: total_points, ncl_col, iqv=0, iql=0, iqr=0, iqi=0, iqs=0, & + integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, & iqg=0 real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: dz_rhon_fac real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: ww_prime_res, uu_prime_res, & @@ -24,6 +25,7 @@ module scalar_diagnostics_mod real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: vwp, lwp, wmax, wmin, & qlmax, hqlmax, cltop, clbas, senhf, lathf, rwp, iwp, swp, gwp, tot_iwp, & reske + real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: trsfflux public scalar_diagnostics_get_descriptor @@ -40,7 +42,7 @@ type(component_descriptor_type) function scalar_diagnostics_get_descriptor() scalar_diagnostics_get_descriptor%field_value_retrieval=>field_value_retrieval_callback scalar_diagnostics_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(scalar_diagnostics_get_descriptor%published_fields(16)) + allocate(scalar_diagnostics_get_descriptor%published_fields(17)) scalar_diagnostics_get_descriptor%published_fields(1)="vwp" scalar_diagnostics_get_descriptor%published_fields(2)="lwp" @@ -58,6 +60,7 @@ type(component_descriptor_type) function scalar_diagnostics_get_descriptor() scalar_diagnostics_get_descriptor%published_fields(14)="gwp" scalar_diagnostics_get_descriptor%published_fields(15)="tot_iwp" scalar_diagnostics_get_descriptor%published_fields(16)="reske" + scalar_diagnostics_get_descriptor%published_fields(17)="trsfflux" end function scalar_diagnostics_get_descriptor @@ -115,6 +118,11 @@ subroutine initialisation_callback(current_state) endif endif + ! Surface Flux of tracers + if (current_state%n_tracers .gt. 0) then + allocate(trsfflux(y_size_local, x_size_local, current_state%n_tracers)) + endif + allocate(dz_rhon_fac(current_state%local_grid%size(Z_INDEX))) do k=2, current_state%local_grid%size(Z_INDEX) ! used in the water path calculation @@ -127,9 +135,11 @@ end subroutine initialisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: k, i + integer :: k, i, n integer :: current_y_index, current_x_index, target_x_index, target_y_index + if (.not. current_state%diagnostic_sample_timestep) return + current_y_index=current_state%column_local_y current_x_index=current_state%column_local_x target_y_index=current_y_index-current_state%local_grid%halo_size(Y_INDEX) @@ -174,6 +184,12 @@ subroutine timestep_callback(current_state) senhf(:,:)=0.0 ! surface latent heat flux lathf(:,:)=0.0 + + ! Surface Flux of radioactive tracers + if (current_state%n_tracers .gt. 0) then + trsfflux(:,:,:) = 0.0 + endif + end if if (.not. current_state%halo_column) then @@ -303,7 +319,7 @@ subroutine timestep_callback(current_state) * rlvap * current_state%global_grid%configuration%vertical%rhon(1) endif - if (current_state%th%active) then + if (current_state%th%active) then senhf(target_y_index, target_x_index)=(current_state%diff_coefficient%data(1, current_y_index, current_x_index) & * current_state%global_grid%configuration%vertical%rdzn(2) & * (current_state%th%data(1, current_y_index, current_x_index) & @@ -311,6 +327,34 @@ subroutine timestep_callback(current_state) - current_state%global_grid%configuration%vertical%dthref(1))) & * current_state%global_grid%configuration%vertical%rhon(1)*cp endif + + ! Surface Flux of tracers + if (current_state%n_tracers .gt. 0) then + if (current_state%scalar_stepping == FORWARD_STEPPING) then + + do n = 1, current_state%n_tracers + trsfflux(target_y_index, target_x_index, n) = & + (current_state%diff_coefficient%data(1, current_y_index, current_x_index) * & + current_state%global_grid%configuration%vertical%rhon(1) * & + current_state%global_grid%configuration%vertical%rdzn(2) * & + (current_state%tracer(n)%data(1,current_y_index,current_x_index) - & + current_state%tracer(n)%data(2,current_y_index,current_x_index))) + end do + + else + + do n = 1, current_state%n_tracers + trsfflux(target_y_index, target_x_index, n) = & + (current_state%diff_coefficient%data(1, current_y_index, current_x_index) * & + current_state%global_grid%configuration%vertical%rhon(1) * & + current_state%global_grid%configuration%vertical%rdzn(2) * & + (current_state%ztracer(n)%data(1,current_y_index,current_x_index) - & + current_state%ztracer(n)%data(2,current_y_index,current_x_index))) + end do + + endif + endif + endif end if end subroutine timestep_callback @@ -323,36 +367,49 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor type(model_state_type), target, intent(inout) :: current_state character(len=*), intent(in) :: name type(component_field_information_type), intent(out) :: field_information + + if (name .eq. "trsfflux") then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=3 + field_information%dimension_sizes(1)=current_state%local_grid%size(Y_INDEX) + field_information%dimension_sizes(2)=current_state%local_grid%size(X_INDEX) + field_information%dimension_sizes(3)=current_state%n_tracers + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + field_information%enabled=current_state%use_surface_boundary_conditions .and. current_state%n_tracers .gt. 0 + + else - field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE - field_information%number_dimensions=2 - field_information%dimension_sizes(1)=current_state%local_grid%size(Y_INDEX) - field_information%dimension_sizes(2)=current_state%local_grid%size(X_INDEX) - field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=2 + field_information%dimension_sizes(1)=current_state%local_grid%size(Y_INDEX) + field_information%dimension_sizes(2)=current_state%local_grid%size(X_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE - if (name .eq. "senhf") then - field_information%enabled=current_state%use_surface_boundary_conditions .and. current_state%th%active - else if (name .eq. "lathf") then - field_information%enabled=current_state%use_surface_boundary_conditions .and. & + if (name .eq. "senhf") then + field_information%enabled=current_state%use_surface_boundary_conditions .and. current_state%th%active + else if (name .eq. "lathf") then + field_information%enabled=current_state%use_surface_boundary_conditions .and. & current_state%water_vapour_mixing_ratio_index .gt. 0 .and. & current_state%number_q_fields .ge. current_state%water_vapour_mixing_ratio_index - else if (name .eq. "qlmax".or. name .eq. "cltop" .or. name .eq. "clbas") then - field_information%enabled=.not. current_state%passive_q .and. current_state%liquid_water_mixing_ratio_index .gt. 0 & + else if (name .eq. "qlmax".or. name .eq. "cltop" .or. name .eq. "clbas") then + field_information%enabled=.not. current_state%passive_q .and. current_state%liquid_water_mixing_ratio_index .gt. 0 & .and. current_state%number_q_fields .ge. current_state%liquid_water_mixing_ratio_index - else if (name .eq. "vwp" .or. name .eq. "lwp") then - field_information%enabled=current_state%number_q_fields .gt. 0 .and. current_state%water_vapour_mixing_ratio_index .gt. 0 & + else if (name .eq. "vwp" .or. name .eq. "lwp") then + field_information%enabled= & + current_state%number_q_fields .gt. 0 .and. current_state%water_vapour_mixing_ratio_index .gt. 0 & .and. current_state%number_q_fields .ge. current_state%water_vapour_mixing_ratio_index - else if (name .eq. "rwp" ) then - field_information%enabled= current_state%rain_water_mixing_ratio_index .gt. 0 - else if (name .eq. "iwp" .or. name .eq. 'tot_iwp') then - field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 - else if (name .eq. "swp" ) then - field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 - else if (name .eq. "gwp" ) then - field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 - else - field_information%enabled=.true. - end if + else if (name .eq. "rwp" ) then + field_information%enabled= current_state%rain_water_mixing_ratio_index .gt. 0 + else if (name .eq. "iwp" .or. name .eq. 'tot_iwp') then + field_information%enabled= current_state%ice_water_mixing_ratio_index .gt. 0 + else if (name .eq. "swp" ) then + field_information%enabled= current_state%snow_water_mixing_ratio_index .gt. 0 + else if (name .eq. "gwp" ) then + field_information%enabled= current_state%graupel_water_mixing_ratio_index .gt. 0 + else + field_information%enabled=.true. + end if + end if end subroutine field_information_retrieval_callback @@ -431,6 +488,10 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & current_state%local_grid%size(X_INDEX))) field_value%real_2d_array(:,:)=lathf(:,:) + else if (name .eq. "trsfflux") then + allocate(field_value%real_3d_array(current_state%local_grid%size(Y_INDEX), & + current_state%local_grid%size(X_INDEX), current_state%n_tracers)) + field_value%real_3d_array(:,:,:)=trsfflux(:,:,:) end if end subroutine field_value_retrieval_callback diff --git a/components/set_consistent_lowbc/src/set_consistent_lowbc.F90 b/components/set_consistent_lowbc/src/set_consistent_lowbc.F90 index c1390f63..e14b464f 100644 --- a/components/set_consistent_lowbc/src/set_consistent_lowbc.F90 +++ b/components/set_consistent_lowbc/src/set_consistent_lowbc.F90 @@ -55,6 +55,9 @@ subroutine timestep_callback(current_state) if (current_state%number_q_fields .gt. 0) then call set_q_lowbc(current_state, current_x_index, current_y_index) endif + if (current_state%n_tracers .gt. 0) then + call set_tracer_lowbc(current_state, current_x_index, current_y_index) + endif end subroutine timestep_callback subroutine set_flow_lowbc(current_state, current_x_index, current_y_index) @@ -120,4 +123,19 @@ subroutine set_q_lowbc(current_state, current_x_index, current_y_index) end subroutine set_q_lowbc + subroutine set_tracer_lowbc(current_state, current_x_index, current_y_index) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: current_x_index, current_y_index + + integer :: i + + if (current_state%n_tracers .gt. 0) then + do n=1,current_state%n_tracers + current_state%stracer(n)%data(1, current_y_index, current_x_index)= & + current_state%stracer(n)%data(2,current_y_index, current_x_index) + enddo + endif + + end subroutine set_tracer_lowbc + end module set_consistent_lowbc_mod diff --git a/components/setfluxlook/src/setfluxlook.F90 b/components/setfluxlook/src/setfluxlook.F90 index 0e9a118e..97b3d2ba 100644 --- a/components/setfluxlook/src/setfluxlook.F90 +++ b/components/setfluxlook/src/setfluxlook.F90 @@ -14,6 +14,7 @@ module setfluxlook_mod use q_indices_mod, only: get_q_index, standard_q_names use interpolation_mod, only: interpolate_point_linear_1d use naming_conventions_mod + use conversions_mod, only: conv_to_lowercase implicit none @@ -27,12 +28,12 @@ module setfluxlook_mod SURFACE_HUMIDITIES_KEY = "surface_humidity", & !< NetCDF data surface_humidities SURFACE_SHF_KEY = "surface_sensible_heat_flux",& !< NetCDF data surface_sensible_heat_flux SURFACE_LHF_KEY = "surface_latent_heat_flux" !< NetCDF data surface_latent_heat_flux - + integer, parameter :: LOOKUP_ENTRIES = 80 !< Number of entries for MO lookup tables integer, parameter :: MAX_FILE_LEN=200 !< Maximum length of surface condition input filename integer, parameter :: MAX_SURFACE_INPUTS=750 !< Specifies the maximum number of surface inputs through configuration file !! Inputs through netcdf files are not limitted by this. - + character(MAX_FILE_LEN) :: input_file character(len=STRING_LENGTH) :: units_surface_temp='unset' ! units of theta variable forcing @@ -46,7 +47,7 @@ module setfluxlook_mod integer :: iqv ! index for vapour - public setfluxlook_get_descriptor + public setfluxlook_get_descriptor, set_look, change_look contains @@ -61,7 +62,7 @@ end function setfluxlook_get_descriptor subroutine initialisation_callback(current_state) type(model_state_type), intent(inout), target :: current_state - + current_state%lookup_table_entries=LOOKUP_ENTRIES call read_configuration(current_state) @@ -84,11 +85,11 @@ subroutine initialisation_callback(current_state) current_state%surface_vapour_flux = surface_latent_heat_flux(1) & /(current_state%global_grid%configuration%vertical%rho(1)*rlvap) end if - - current_state%fbuoy=0. + + current_state%fbuoy=0. if(.not. current_state%passive_th) current_state%fbuoy=& current_state%global_grid%configuration%vertical%buoy_co(1)*current_state%surface_temperature_flux - if(.not. current_state%passive_q .and. current_state%number_q_fields > 0)then + if(.not. current_state%passive_q .and. current_state%number_q_fields > 0)then current_state%fbuoy=current_state%fbuoy+current_state%cq(iqv)*current_state%surface_vapour_flux*G end if call set_look(current_state) ! _set M-O lookup table @@ -101,17 +102,17 @@ subroutine initialisation_callback(current_state) if (current_state%use_time_varying_surface_values) then call set_flux(current_state) else - ! If surface_values are constant then surface_temperatures prescribed in + ! If surface_values are constant then surface_temperatures prescribed in ! config and read in read_configuration but if humidity not set then ! surface vapour (surface_vapour_mixing_ratio) set to saturated value (see read_config) if (current_state%saturated_surface)then current_state%surface_vapour_mixing_ratio = qsaturation(surface_temperatures(1),current_state%surface_pressure*0.01) - else + else current_state%surface_vapour_mixing_ratio = & options_get_real(current_state%options_database, "surface_vapour_mixing_ratio") endif - - ! The code below copied from set_flux as these values need to be + + ! The code below copied from set_flux as these values need to be ! set for both time varying and constant surface values ! Set theta_v current_state%theta_surf = surface_temperatures(1)*& @@ -121,7 +122,7 @@ subroutine initialisation_callback(current_state) current_state%theta_virtual_surf = current_state%theta_surf + & current_state%global_grid%configuration%vertical%thref(2)* & current_state%cq(iqv)*current_state%surface_vapour_mixing_ratio - end if + end if ! Finally set up new values of THVSURF dependent constants current_state%cmbc=betam*current_state%global_grid%configuration%vertical%zn(2)*G*& @@ -160,10 +161,10 @@ subroutine set_look(current_state) smth=0.1_DEFAULT_PRECISION ! _relaxation parameter for unstable case do ik=1, current_state%lookup_table_entries current_state%lookup_table_velocity(ik)=current_state%velmin*(current_state%velmax/current_state%velmin)**& - (real(ik-1)/real(current_state%lookup_table_entries-1)) + (real(ik-1)/real(current_state%lookup_table_entries-1)) current_state%lookup_table_ustr(ik)=current_state%lookup_table_velocity(ik)*& current_state%global_grid%configuration%vertical%vk_on_zlogm - if (current_state%fbuoy .gt. 0.0_DEFAULT_PRECISION) then ! _unstable + if (current_state%fbuoy .gt. 0.0_DEFAULT_PRECISION) then ! _unstable iters(ik)=0 do i=1, 30 ! @check how many iterations needed!! iters(ik)=iters(ik)+1 @@ -193,6 +194,7 @@ subroutine change_look(current_state) dvelustr(current_state%lookup_table_entries), ob, x1, x0 integer n, ik, & ! Loop counters nit ! Number of iterations + if (current_state%fbuoynew .le. 0.0_DEFAULT_PRECISION) then current_state%fbuoy=current_state%fbuoynew return @@ -202,17 +204,20 @@ subroutine change_look(current_state) nit = 1+int(rnit) else nit=1 - end if + end if + if (nit .gt. 10 .or. (current_state%fbuoynew .gt. 0.0_DEFAULT_PRECISION .and. & current_state%fbuoy .le. 0.0_DEFAULT_PRECISION)) then current_state%fbuoy=current_state%fbuoynew call set_look(current_state) - return + return end if + crelax=1./sqrt(real(nit)) ! maybe better with crelax=1. dfb=(current_state%fbuoynew-current_state%fbuoy)/real(nit) + do n=1, nit - current_state%fbuoy=current_state%fbuoy+dfb + current_state%fbuoy=current_state%fbuoy+dfb do ik=2, current_state%lookup_table_entries-1 dvelustr(ik)=log(current_state%lookup_table_velocity(ik+1)/current_state%lookup_table_velocity(ik-1))& /log(current_state%lookup_table_ustr(ik+1)/current_state%lookup_table_ustr(ik-1)) @@ -223,40 +228,42 @@ subroutine change_look(current_state) current_state%lookup_table_velocity(current_state%lookup_table_entries-1))/& log(current_state%lookup_table_ustr(current_state%lookup_table_entries)/& current_state%lookup_table_ustr(current_state%lookup_table_entries-1)) - do ik=1, current_state%lookup_table_entries - ! compute new mean vel. based on old ustar and new fbuoy + do ik=1, current_state%lookup_table_entries + ! compute new mean vel. based on old ustar and new fbuoy ob=-current_state%lookup_table_ustr(ik)**3/(von_karman_constant*current_state%fbuoy) x1=sqrt(sqrt(1.-gammam*(current_state%global_grid%configuration%vertical%zn(2)+z0)/ob)) x0=sqrt(sqrt(1.-gammam*z0/ob)) velnew=(current_state%lookup_table_ustr(ik)/von_karman_constant)*(current_state%global_grid%configuration%vertical%zlogm-& (2.0_DEFAULT_PRECISION*log((x1+1.0_DEFAULT_PRECISION)/(x0+1.0_DEFAULT_PRECISION)) + & log((x1*x1+1.0_DEFAULT_PRECISION)/(x0*x0+1.0_DEFAULT_PRECISION)) + 2.0_DEFAULT_PRECISION*atan(x0) & - -2.0_DEFAULT_PRECISION*atan(x1))) - ! relax to new ustar + -2.0_DEFAULT_PRECISION*atan(x1))) + ! relax to new ustar current_state%lookup_table_ustr(ik)=current_state%lookup_table_ustr(ik)/& (velnew/current_state%lookup_table_velocity(ik))**(crelax/dvelustr(ik)) end do end do + current_state%cneut=current_state%lookup_table_ustr(current_state%lookup_table_entries)/& current_state%lookup_table_velocity(current_state%lookup_table_entries) current_state%cfc=current_state%lookup_table_ustr(1)*current_state%lookup_table_velocity(1)**convective_limit ! _Businger-Dyer current_state%fbuoy=current_state%fbuoynew + end subroutine change_look subroutine set_flux(current_state) type(model_state_type), intent(inout), target :: current_state real(kind=DEFAULT_PRECISION) :: surface_temp ! Surface temperature - + if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_FLUXES) then ! Prescribed surface fluxes - + ! Linear interpolation of input data... - call interpolate_point_linear_1d(surface_boundary_input_times, & + call interpolate_point_linear_1d(surface_boundary_input_times, & surface_sensible_heat_flux/(current_state%global_grid%configuration%vertical%rho(1)*cp), & current_state%time, current_state%surface_temperature_flux, & - extrapolate='constant') - - call interpolate_point_linear_1d(surface_boundary_input_times, & + extrapolate='constant') + + call interpolate_point_linear_1d(surface_boundary_input_times, & surface_latent_heat_flux/(current_state%global_grid%configuration%vertical%rho(1)*rlvap), & current_state%time, current_state%surface_vapour_flux, & extrapolate='constant') @@ -265,18 +272,18 @@ subroutine set_flux(current_state) current_state%fbuoynew=0.0_DEFAULT_PRECISION if (.not. current_state%passive_th) current_state%fbuoynew=& current_state%global_grid%configuration%vertical%buoy_co(1)*current_state%surface_temperature_flux - if (.not. current_state%passive_q) then + if (.not. current_state%passive_q) then current_state%fbuoynew=current_state%fbuoynew+current_state%cq(iqv)*current_state%surface_vapour_flux*G end if else if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then ! Prescribed surface temperatures ! Linear interpolation of input data... - call interpolate_point_linear_1d(surface_boundary_input_times, & + call interpolate_point_linear_1d(surface_boundary_input_times, & surface_temperatures, & current_state%time, surface_temp, & - extrapolate='constant') - + extrapolate='constant') + select case(trim(units_surface_temp)) case(degC) ! degrees C surface_temp = surface_temp + 273.15_DEFAULT_PRECISION @@ -286,10 +293,10 @@ subroutine set_flux(current_state) if (current_state%saturated_surface)then current_state%surface_vapour_mixing_ratio = qsaturation(surface_temp,current_state%surface_pressure*0.01) else - call interpolate_point_linear_1d(surface_boundary_input_times, & + call interpolate_point_linear_1d(surface_boundary_input_times, & surface_humidities, & current_state%time, current_state%surface_vapour_mixing_ratio, & - extrapolate='constant') + extrapolate='constant') end if ! Set theta_v @@ -310,18 +317,19 @@ subroutine set_flux(current_state) end if - end subroutine set_flux + end subroutine set_flux + subroutine read_configuration(current_state) type(model_state_type), intent(inout), target :: current_state - integer :: ncid, time_dim - integer :: number_input_humidities + integer :: number_input_humidities, number_times, number_check + number_times = 0 - current_state%use_surface_boundary_conditions= & + current_state%use_surface_boundary_conditions= & options_get_logical(current_state%options_database, "use_surface_boundary_conditions") if (current_state%use_surface_boundary_conditions)then @@ -329,19 +337,24 @@ subroutine read_configuration(current_state) "type_of_surface_boundary_conditions") current_state%use_time_varying_surface_values=options_get_logical(current_state%options_database, & "use_time_varying_surface_values") - + current_state%saturated_surface = .true. ! We will change this if we find some humidity data input_file=options_get_string(current_state%options_database, "surface_conditions_file") ! Read in the input_file - if (trim(input_file)=='' .or. trim(input_file)=='None')then - if (current_state%use_time_varying_surface_values)then + if (trim(input_file)=='' .or. conv_to_lowercase(trim(input_file))=='none')then + if (current_state%use_time_varying_surface_values)then allocate(surface_boundary_input_times(MAX_SURFACE_INPUTS)) surface_boundary_input_times=0.0 call options_get_real_array(current_state%options_database, "surface_boundary_input_times", surface_boundary_input_times) + number_times = options_get_array_size(current_state%options_database, "surface_boundary_input_times") + if (number_times .eq. 0) then + call log_master_log(LOG_WARN, "Model configured to use_time_varying_surface_values, "// & + "but no times have been provided. Only setting time 0.") + end if end if if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_FLUXES)then - allocate(surface_sensible_heat_flux(MAX_SURFACE_INPUTS), & + allocate(surface_sensible_heat_flux(MAX_SURFACE_INPUTS), & surface_latent_heat_flux(MAX_SURFACE_INPUTS) & ) surface_sensible_heat_flux=0.0 @@ -349,7 +362,9 @@ subroutine read_configuration(current_state) call options_get_real_array(current_state%options_database, "surface_sensible_heat_flux", surface_sensible_heat_flux) call options_get_real_array(current_state%options_database, "surface_latent_heat_flux", surface_latent_heat_flux) number_input_humidities=0 - else if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then + call check_time_arrays(current_state, number_times, "surface_sensible_heat_flux") + call check_time_arrays(current_state, number_times, "surface_latent_heat_flux") + else if (current_state%type_of_surface_boundary_conditions == PRESCRIBED_SURFACE_VALUES) then allocate(surface_temperatures(MAX_SURFACE_INPUTS), & surface_humidities(MAX_SURFACE_INPUTS) & ) @@ -357,9 +372,11 @@ subroutine read_configuration(current_state) surface_humidities=0.0 call options_get_real_array(current_state%options_database, "surface_temperatures", surface_temperatures) units_surface_temp=options_get_string(current_state%options_database, "units_surface_temp") - + call options_get_real_array(current_state%options_database, "surface_humidities", surface_humidities) number_input_humidities=options_get_array_size(current_state%options_database, "surface_humidities") + call check_time_arrays(current_state, number_times, "surface_temperatures") + call check_time_arrays(current_state, number_times, "surface_humidities") end if else call check_status(nf90_open(path = trim(input_file), mode = nf90_nowrite, ncid = ncid)) @@ -421,9 +438,9 @@ subroutine read_variables(filename, ncid, time_dim, time, surface_temperatures, integer :: status, variable_id - ! Do some checking on the variable contents so that we can deal with different + ! Do some checking on the variable contents so that we can deal with different ! variable names or missing variables - + ! time... status=nf90_inq_varid(ncid, TIME_KEY, variable_id) if (status==nf90_noerr)then @@ -432,25 +449,25 @@ subroutine read_variables(filename, ncid, time_dim, time, surface_temperatures, else call log_log(LOG_ERROR, "No recognized time variable found in"//trim(filename)) end if - + status=nf90_inq_varid(ncid, SURFACE_TEMPERATURES_KEY, variable_id) if (status==nf90_noerr)then allocate(surface_temperatures(time_dim)) call read_single_variable(ncid, SURFACE_TEMPERATURES_KEY, data1d=surface_temperatures) end if - + status=nf90_inq_varid(ncid, SURFACE_HUMIDITIES_KEY, variable_id) if (status==nf90_noerr)then allocate(surface_humidities(time_dim)) call read_single_variable(ncid, SURFACE_HUMIDITIES_KEY, data1d=surface_humidities) end if - + status=nf90_inq_varid(ncid, SURFACE_LHF_KEY, variable_id) if (status==nf90_noerr)then allocate(surface_latent_heat_flux(time_dim)) call read_single_variable(ncid, SURFACE_LHF_KEY, data1d=surface_latent_heat_flux) end if - + status=nf90_inq_varid(ncid, SURFACE_SHF_KEY, variable_id) if (status==nf90_noerr)then allocate(surface_sensible_heat_flux(time_dim)) @@ -499,4 +516,25 @@ subroutine check_status(status) end if end subroutine check_status + + !> Checks the length of input data arrays when use_time_varying_surface_values is enabled + !> to warn about unintended mismatches. Model can function well with mismatches, though. + !! @param current_state + !! @param number_times Number of use_time_varying_surface_values + !! @param key The key to look up in the options_database + subroutine check_time_arrays(current_state, number_times, key) + type(model_state_type), intent(inout), target :: current_state + integer, intent(in) :: number_times + character(len=*), intent(in) :: key + + if (.not. current_state%use_time_varying_surface_values) return + + if (options_get_array_size(current_state%options_database, trim(key)) .ne. number_times) then + call log_master_log(LOG_WARN, "Model configured to use_time_varying_surface_values, "// & + "but the number of entries for '"//trim(key)// & + "' differs from the number of 'surface_boundary_input_times'. "//& + "Unmatched entries of either will be set to zero.") + end if + end subroutine check_time_arrays + end module setfluxlook_mod diff --git a/components/simplecloud/src/simplecloud.F90 b/components/simplecloud/src/simplecloud.F90 index f1801c41..a6fbd3b6 100644 --- a/components/simplecloud/src/simplecloud.F90 +++ b/components/simplecloud/src/simplecloud.F90 @@ -34,8 +34,6 @@ module simplecloud_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: & tend_pr_tot_th, tend_pr_tot_qv, tend_pr_tot_ql, tend_pr_tot_tabs logical :: l_tend_pr_tot_th,l_tend_pr_tot_qv,l_tend_pr_tot_ql,l_tend_pr_tot_tabs - integer :: diagnostic_generation_frequency - public simplecloud_get_descriptor @@ -194,13 +192,13 @@ subroutine initialisation_callback(current_state) l_qdiag = (.not. current_state%passive_q .and. current_state%number_q_fields .gt. 0) l_tend_pr_tot_th = current_state%th%active - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql l_tend_3d_tabs = l_tend_3d_th ! Allocate 3d tendency fields upon availability @@ -239,9 +237,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -282,6 +277,9 @@ subroutine timestep_callback(current_state) real(DEFAULT_PRECISION) :: dtm ! Local timestep variable integer :: target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep ! Zero profile tendency totals on first instance in the sum if (current_state%first_timestep_column) then @@ -311,9 +309,7 @@ subroutine timestep_callback(current_state) target_y_index=jcol-current_state%local_grid%halo_size(Y_INDEX) target_x_index=icol-current_state%local_grid%halo_size(X_INDEX) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call save_precomponent_tendencies(current_state, icol, jcol, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call save_precomponent_tendencies(current_state, icol, jcol, target_x_index, target_y_index) do k=2,k_cloudmax @@ -378,9 +374,7 @@ subroutine timestep_callback(current_state) end if end do - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call compute_component_tendencies(current_state, icol, jcol, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call compute_component_tendencies(current_state, icol, jcol, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/simplesetup/src/simplesetup.F90 b/components/simplesetup/src/simplesetup.F90 index def711ba..c23058dc 100644 --- a/components/simplesetup/src/simplesetup.F90 +++ b/components/simplesetup/src/simplesetup.F90 @@ -2,11 +2,13 @@ module simplesetup_mod use datadefn_mod, only : DEFAULT_PRECISION use monc_component_mod, only : component_descriptor_type use state_mod, only : PRESCRIBED_SURFACE_FLUXES, model_state_type - use logging_mod, only : LOG_ERROR, log_log + use conversions_mod, only : conv_to_string + use logging_mod, only : LOG_INFO, LOG_ERROR, log_log, log_master_log use grids_mod, only : local_grid_type, global_grid_type, X_INDEX, Y_INDEX, Z_INDEX, PRIMAL_GRID, DUAL_GRID use prognostics_mod, only : prognostic_field_type use optionsdatabase_mod, only : options_get_integer, options_get_logical, options_get_real, & options_get_integer_array, options_get_real_array + use tracers_mod, only : get_tracer_options use q_indices_mod, only: get_q_index, standard_q_names use registry_mod, only : is_component_enabled @@ -19,6 +21,7 @@ module simplesetup_mod integer :: x_size, y_size, z_size real(kind=DEFAULT_PRECISION) :: zztop, dxx, dyy logical :: enable_theta=.false. + public simplesetup_get_descriptor contains @@ -41,6 +44,16 @@ subroutine initialisation_callback(current_state) current_state%initialised=.true. end if + + ! Isolate MONC process that has the requested print_debug_data location by changing the value of the flag to be true + ! only on that process. + if (current_state%print_debug_data) then + current_state%print_debug_data = & + current_state%pdd_x .ge. current_state%local_grid%start(X_INDEX).and. & + current_state%pdd_x .le. current_state%local_grid%end(X_INDEX) .and. & + current_state%pdd_y .ge. current_state%local_grid%start(Y_INDEX).and. & + current_state%pdd_y .le. current_state%local_grid%end(Y_INDEX) + end if end subroutine initialisation_callback @@ -77,9 +90,11 @@ subroutine allocate_prognostics(current_state) call allocate_prognostic(current_state%zth, alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) call allocate_prognostic(current_state%sth, alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) end if + if (current_state%number_q_fields .gt. 0) then allocate(current_state%q(current_state%number_q_fields), & - current_state%zq(current_state%number_q_fields), current_state%sq(current_state%number_q_fields)) + current_state%zq(current_state%number_q_fields),& + current_state%sq(current_state%number_q_fields)) do i=1, current_state%number_q_fields call allocate_prognostic(current_state%q(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) call allocate_prognostic(current_state%zq(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) @@ -90,6 +105,18 @@ subroutine allocate_prognostics(current_state) current_state%water_vapour_mixing_ratio_index=get_q_index(standard_q_names%VAPOUR, 'simplesetup') current_state%liquid_water_mixing_ratio_index=get_q_index(standard_q_names%CLOUD_LIQUID_MASS, 'simplesetup') end if + + if (current_state%n_tracers .gt. 0) then + allocate( current_state%tracer(current_state%n_tracers), & + current_state%ztracer(current_state%n_tracers), & + current_state%stracer(current_state%n_tracers)) + do i=1, current_state%n_tracers + call allocate_prognostic(current_state%tracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + call allocate_prognostic(current_state%ztracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + call allocate_prognostic(current_state%stracer(i), alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) + end do + + endif ! allocate tracers ! Set arrays for radiative heating rates - Note: this should be protected by a switch call allocate_prognostic(current_state%sth_lw, alloc_z, alloc_y, alloc_x, DUAL_GRID, DUAL_GRID, DUAL_GRID) @@ -217,5 +244,24 @@ subroutine read_configuration(current_state) if (current_state%fix_vgal)current_state%vgal=options_get_real(current_state%options_database, "vgal") end if + ! Parameters for print_debug_data + current_state%print_debug_data = options_get_logical(current_state%options_database, "print_debug_data") + if (current_state%print_debug_data) then + current_state%pdd_z = options_get_integer(current_state%options_database, "pdd_z") + if (current_state%pdd_z .lt. 0) current_state%pdd_z = z_size/2 + current_state%pdd_y = options_get_integer(current_state%options_database, "pdd_y") + if (current_state%pdd_y .lt. 0) current_state%pdd_y = y_size/2 + current_state%pdd_x = options_get_integer(current_state%options_database, "pdd_x") + if (current_state%pdd_x .lt. 0) current_state%pdd_x = x_size/2 + + current_state%column_global_x = current_state%pdd_x + current_state%column_global_y = current_state%pdd_y + current_state%halo_column = .false. + end if + + if (.not. current_state%reconfig_run) then + call get_tracer_options(current_state) + end if ! not reconfig + end subroutine read_configuration end module simplesetup_mod diff --git a/components/smagorinsky/src/smagorinsky.F90 b/components/smagorinsky/src/smagorinsky.F90 index 441cf31f..1d35c4a0 100644 --- a/components/smagorinsky/src/smagorinsky.F90 +++ b/components/smagorinsky/src/smagorinsky.F90 @@ -111,7 +111,7 @@ subroutine timestep_callback(current_state) ssq=calculate_half_squared_strain_rate(current_state, current_state%u, current_state%v, current_state%w) richardson_number=calculate_richardson_number(current_state, ssq, current_state%th, current_state%q) else - ssq=calculate_half_squared_strain_rate(current_state, current_state%zu, current_state%zv, current_state%zw) + ssq=calculate_half_squared_strain_rate(current_state, current_state%zu, current_state%zv, current_state%zw) richardson_number=calculate_richardson_number(current_state, ssq, current_state%zth, current_state%zq) end if call setfri(current_state, richardson_number, ssq) @@ -144,9 +144,13 @@ subroutine update_viscous_number(current_state) type(model_state_type), target, intent(inout) :: current_state integer :: k + integer :: compare_timestep ! timestep adusted in the case of reconfiguration to keep same cfl interval - if (mod(current_state%timestep, current_state%cfl_frequency) == 1 .or. & - current_state%timestep-current_state%start_timestep .le. current_state%cfl_frequency) then + compare_timestep = current_state%timestep + current_state%reconfig_timestep_offset + + if ((mod(compare_timestep, current_state%cfl_frequency) == 1 & + .or. compare_timestep - current_state%start_timestep .le. current_state%cfl_frequency) & + .or. compare_timestep .ge. (current_state%last_cfl_timestep + current_state%cfl_frequency)) then do k=2, current_state%local_grid%size(Z_INDEX)-1 current_state%cvis=max(current_state%cvis, max(current_state%vis_coefficient%data(k, current_state%column_local_y, & current_state%column_local_x),current_state%diff_coefficient%data(k, current_state%column_local_y, & diff --git a/components/socrates_couple/data/spectra/ga7/sp_lw_ga7_k b/components/socrates_couple/data/spectra/ga7/sp_lw_ga7_k new file mode 100644 index 00000000..47efe828 --- /dev/null +++ b/components/socrates_couple/data/spectra/ga7/sp_lw_ga7_k @@ -0,0 +1,8948 @@ +*BLOCK: k-table + +Lookup table: 59 pressures, 5 temperatures. + 9.657700E-01 1.643400E+02 1.893400E+02 2.143400E+02 2.393400E+02 2.643400E+02 + 1.179600E+00 1.646600E+02 1.896600E+02 2.146600E+02 2.396600E+02 2.646600E+02 + 1.440800E+00 1.649800E+02 1.899800E+02 2.149800E+02 2.399800E+02 2.649800E+02 + 1.759800E+00 1.653000E+02 1.903000E+02 2.153000E+02 2.403000E+02 2.653000E+02 + 2.149400E+00 1.656300E+02 1.906300E+02 2.156300E+02 2.406300E+02 2.656300E+02 + 2.625200E+00 1.659500E+02 1.909500E+02 2.159500E+02 2.409500E+02 2.659500E+02 + 3.206500E+00 1.662700E+02 1.912700E+02 2.162700E+02 2.412700E+02 2.662700E+02 + 3.916400E+00 1.666100E+02 1.916100E+02 2.166100E+02 2.416100E+02 2.666100E+02 + 4.783500E+00 1.670300E+02 1.920300E+02 2.170300E+02 2.420300E+02 2.670300E+02 + 5.842600E+00 1.680500E+02 1.930500E+02 2.180500E+02 2.430500E+02 2.680500E+02 + 7.136100E+00 1.704500E+02 1.954500E+02 2.204500E+02 2.454500E+02 2.704500E+02 + 8.716100E+00 1.740900E+02 1.990900E+02 2.240900E+02 2.490900E+02 2.740900E+02 + 1.064600E+01 1.780900E+02 2.030900E+02 2.280900E+02 2.530900E+02 2.780900E+02 + 1.300300E+01 1.822200E+02 2.072200E+02 2.322200E+02 2.572200E+02 2.822200E+02 + 1.588200E+01 1.864600E+02 2.114600E+02 2.364600E+02 2.614600E+02 2.864600E+02 + 1.939800E+01 1.906800E+02 2.156800E+02 2.406800E+02 2.656800E+02 2.906800E+02 + 2.369300E+01 1.950300E+02 2.200300E+02 2.450300E+02 2.700300E+02 2.950300E+02 + 2.893800E+01 1.994900E+02 2.244900E+02 2.494900E+02 2.744900E+02 2.994900E+02 + 3.534600E+01 2.039700E+02 2.289700E+02 2.539700E+02 2.789700E+02 3.039700E+02 + 4.317100E+01 2.085200E+02 2.335200E+02 2.585200E+02 2.835200E+02 3.085200E+02 + 5.272900E+01 2.132000E+02 2.382000E+02 2.632000E+02 2.882000E+02 3.132000E+02 + 6.440400E+01 2.179000E+02 2.429000E+02 2.679000E+02 2.929000E+02 3.179000E+02 + 7.866300E+01 2.224200E+02 2.474200E+02 2.724200E+02 2.974200E+02 3.224200E+02 + 9.607900E+01 2.255200E+02 2.505200E+02 2.755200E+02 3.005200E+02 3.255200E+02 + 1.173500E+02 2.253200E+02 2.503200E+02 2.753200E+02 3.003200E+02 3.253200E+02 + 1.433300E+02 2.228800E+02 2.478800E+02 2.728800E+02 2.978800E+02 3.228800E+02 + 1.750700E+02 2.195600E+02 2.445600E+02 2.695600E+02 2.945600E+02 3.195600E+02 + 2.138300E+02 2.158000E+02 2.408000E+02 2.658000E+02 2.908000E+02 3.158000E+02 + 2.611700E+02 2.119800E+02 2.369800E+02 2.619800E+02 2.869800E+02 3.119800E+02 + 3.189900E+02 2.081600E+02 2.331600E+02 2.581600E+02 2.831600E+02 3.081600E+02 + 3.896200E+02 2.043400E+02 2.293400E+02 2.543400E+02 2.793400E+02 3.043400E+02 + 4.758800E+02 2.006300E+02 2.256300E+02 2.506300E+02 2.756300E+02 3.006300E+02 + 5.812400E+02 1.971200E+02 2.221200E+02 2.471200E+02 2.721200E+02 2.971200E+02 + 7.099300E+02 1.938100E+02 2.188100E+02 2.438100E+02 2.688100E+02 2.938100E+02 + 8.671100E+02 1.906200E+02 2.156200E+02 2.406200E+02 2.656200E+02 2.906200E+02 + 1.059100E+03 1.875400E+02 2.125400E+02 2.375400E+02 2.625400E+02 2.875400E+02 + 1.293600E+03 1.844700E+02 2.094700E+02 2.344700E+02 2.594700E+02 2.844700E+02 + 1.580000E+03 1.814100E+02 2.064100E+02 2.314100E+02 2.564100E+02 2.814100E+02 + 1.929800E+03 1.785200E+02 2.035200E+02 2.285200E+02 2.535200E+02 2.785200E+02 + 2.357100E+03 1.759400E+02 2.009400E+02 2.259400E+02 2.509400E+02 2.759400E+02 + 2.878900E+03 1.739100E+02 1.989100E+02 2.239100E+02 2.489100E+02 2.739100E+02 + 3.516300E+03 1.722600E+02 1.972600E+02 2.222600E+02 2.472600E+02 2.722600E+02 + 4.294800E+03 1.707000E+02 1.957000E+02 2.207000E+02 2.457000E+02 2.707000E+02 + 5.245700E+03 1.691300E+02 1.941300E+02 2.191300E+02 2.441300E+02 2.691300E+02 + 6.407200E+03 1.676000E+02 1.926000E+02 2.176000E+02 2.426000E+02 2.676000E+02 + 7.825700E+03 1.663500E+02 1.913500E+02 2.163500E+02 2.413500E+02 2.663500E+02 + 9.558400E+03 1.658100E+02 1.908100E+02 2.158100E+02 2.408100E+02 2.658100E+02 + 1.167500E+04 1.657500E+02 1.907500E+02 2.157500E+02 2.407500E+02 2.657500E+02 + 1.425900E+04 1.658000E+02 1.908000E+02 2.158000E+02 2.408000E+02 2.658000E+02 + 1.741600E+04 1.671000E+02 1.921000E+02 2.171000E+02 2.421000E+02 2.671000E+02 + 2.127300E+04 1.732100E+02 1.982100E+02 2.232100E+02 2.482100E+02 2.732100E+02 + 2.598200E+04 1.818700E+02 2.068700E+02 2.318700E+02 2.568700E+02 2.818700E+02 + 3.173500E+04 1.909000E+02 2.159000E+02 2.409000E+02 2.659000E+02 2.909000E+02 + 3.876100E+04 2.002500E+02 2.252500E+02 2.502500E+02 2.752500E+02 3.002500E+02 + 4.734300E+04 2.097400E+02 2.347400E+02 2.597400E+02 2.847400E+02 3.097400E+02 + 5.782500E+04 2.191600E+02 2.441600E+02 2.691600E+02 2.941600E+02 3.191600E+02 + 7.062700E+04 2.288000E+02 2.538000E+02 2.788000E+02 3.038000E+02 3.288000E+02 + 8.626400E+04 2.382700E+02 2.632700E+02 2.882700E+02 3.132700E+02 3.382700E+02 + 1.004850E+05 2.440000E+02 2.690000E+02 2.940000E+02 3.190000E+02 3.440000E+02 + +Band: 1, gas: 1, k-terms: 17 + 1.142533E+02 1.210529E+02 1.244893E+02 1.159231E+02 1.143291E+02 + 1.144657E+02 1.211565E+02 1.244970E+02 1.158721E+02 1.142385E+02 + 1.146695E+02 1.212265E+02 1.245021E+02 1.158246E+02 1.141585E+02 + 1.148613E+02 1.212579E+02 1.244724E+02 1.157521E+02 1.140674E+02 + 1.150458E+02 1.212755E+02 1.243911E+02 1.156324E+02 1.139405E+02 + 1.121842E+02 1.212699E+02 1.242620E+02 1.154648E+02 1.137682E+02 + 1.123169E+02 1.212376E+02 1.241318E+02 1.152603E+02 1.135483E+02 + 1.124327E+02 1.211775E+02 1.239777E+02 1.150345E+02 1.132898E+02 + 1.125613E+02 1.210958E+02 1.237848E+02 1.147828E+02 1.129931E+02 + 1.130130E+02 1.211031E+02 1.235378E+02 1.143949E+02 1.125342E+02 + 1.141956E+02 1.175344E+02 1.231929E+02 1.137193E+02 1.116961E+02 + 1.158543E+02 1.177817E+02 1.226784E+02 1.127391E+02 1.087897E+02 + 1.160695E+02 1.216078E+02 1.191996E+02 1.115765E+02 1.073897E+02 + 1.161166E+02 1.214181E+02 1.182262E+02 1.099040E+02 1.058640E+02 + 1.167831E+02 1.209428E+02 1.163973E+02 1.084194E+02 1.042083E+02 + 1.133810E+02 1.201573E+02 1.149939E+02 1.067905E+02 1.024463E+02 + 1.131762E+02 1.190461E+02 1.133428E+02 1.049718E+02 1.005272E+02 + 1.125440E+02 1.149435E+02 1.114251E+02 1.047301E+02 9.844365E+01 + 1.114442E+02 1.124484E+02 1.095179E+02 1.024596E+02 9.620541E+01 + 1.098602E+02 1.101684E+02 1.070101E+02 9.995630E+01 9.119403E+01 + 1.064284E+02 1.077371E+02 1.041624E+02 9.718377E+01 8.861632E+01 + 1.034386E+02 1.046136E+02 9.919274E+01 9.417206E+01 8.579261E+01 + 9.556232E+01 1.010847E+02 9.572747E+01 8.829406E+01 8.064522E+01 + 9.196211E+01 9.379241E+01 8.953908E+01 8.523737E+01 7.320045E+01 + 8.786446E+01 8.995697E+01 8.613656E+01 7.953756E+01 7.048023E+01 + 8.314308E+01 7.854768E+01 7.374092E+01 7.094457E+01 6.572872E+01 + 7.652280E+01 7.415152E+01 7.008704E+01 6.538497E+01 6.314203E+01 + 6.849896E+01 6.678505E+01 6.355533E+01 6.061829E+01 6.011889E+01 + 6.219964E+01 6.147298E+01 5.824670E+01 5.675992E+01 5.399884E+01 + 5.241021E+01 5.309862E+01 5.345565E+01 5.128368E+01 4.956183E+01 + 4.607163E+01 4.739023E+01 4.539545E+01 4.678607E+01 4.555480E+01 + 3.990644E+01 4.075244E+01 4.002714E+01 4.062336E+01 4.130920E+01 + 3.411425E+01 3.533307E+01 3.513115E+01 3.600853E+01 3.458070E+01 + 2.884242E+01 2.930593E+01 3.043156E+01 3.108537E+01 3.050834E+01 + 2.417225E+01 2.484363E+01 2.642153E+01 2.686037E+01 2.658242E+01 + 2.014126E+01 2.089716E+01 2.241507E+01 2.258529E+01 2.291116E+01 + 1.672977E+01 1.748519E+01 1.888801E+01 1.944073E+01 1.957434E+01 + 1.389845E+01 1.506551E+01 1.581304E+01 1.640679E+01 1.691800E+01 + 1.197382E+01 1.303086E+01 1.326944E+01 1.388266E+01 1.431467E+01 + 1.033483E+01 1.079811E+01 1.117926E+01 1.182347E+01 1.207090E+01 + 9.094377E+00 9.208115E+00 9.881804E+00 1.023901E+01 1.030982E+01 + 8.319625E+00 8.117116E+00 8.497877E+00 8.783356E+00 9.321999E+00 + 7.570157E+00 7.384046E+00 7.421746E+00 7.822092E+00 8.084825E+00 + 7.089748E+00 6.844495E+00 7.020122E+00 6.855721E+00 7.071303E+00 + 6.673149E+00 7.151369E+00 6.645419E+00 6.525805E+00 6.409961E+00 + 6.454242E+00 6.838271E+00 6.812336E+00 5.991016E+00 6.028897E+00 + 6.205764E+00 6.419590E+00 6.347202E+00 6.102227E+00 5.941529E+00 + 6.291262E+00 6.193932E+00 6.106743E+00 6.179520E+00 5.953726E+00 + 6.324054E+00 6.194580E+00 6.004010E+00 6.040518E+00 5.965442E+00 + 6.623548E+00 6.343270E+00 6.217424E+00 6.205982E+00 6.236487E+00 + 6.674207E+00 6.519020E+00 6.641248E+00 6.405000E+00 6.614553E+00 + 7.208534E+00 6.851756E+00 7.003752E+00 7.221549E+00 6.719688E+00 + 7.497407E+00 7.384300E+00 7.265890E+00 7.553838E+00 7.892622E+00 + 8.399822E+00 7.763489E+00 7.999920E+00 8.322410E+00 8.306830E+00 + 9.725922E+00 9.456071E+00 9.228781E+00 9.639094E+00 9.864349E+00 + 1.089132E+01 1.066559E+01 1.043857E+01 1.072390E+01 1.103712E+01 + 1.259334E+01 1.155951E+01 1.183471E+01 1.234342E+01 1.274227E+01 + 1.377931E+01 1.350654E+01 1.364481E+01 1.443714E+01 1.528138E+01 + 1.523327E+01 1.490680E+01 1.524113E+01 1.614431E+01 1.704540E+01 + 2.188184E+04 2.273388E+04 2.362712E+04 2.185795E+04 2.211037E+04 + 2.191225E+04 2.273978E+04 2.361937E+04 2.184224E+04 2.208948E+04 + 2.193968E+04 2.274262E+04 2.360868E+04 2.182406E+04 2.206630E+04 + 2.196330E+04 2.274166E+04 2.359432E+04 2.180280E+04 2.204028E+04 + 2.198376E+04 2.273679E+04 2.357579E+04 2.177775E+04 2.201057E+04 + 2.116034E+04 2.272592E+04 2.355188E+04 2.174843E+04 2.197711E+04 + 2.116642E+04 2.270831E+04 2.352172E+04 2.171368E+04 2.193858E+04 + 2.116689E+04 2.268369E+04 2.348413E+04 2.167207E+04 2.189338E+04 + 2.116693E+04 2.265347E+04 2.343821E+04 2.162122E+04 2.183816E+04 + 2.122452E+04 2.264221E+04 2.338793E+04 2.155086E+04 2.175382E+04 + 2.141800E+04 2.169485E+04 2.333579E+04 2.144387E+04 2.161107E+04 + 2.170489E+04 2.175104E+04 2.326688E+04 2.129469E+04 2.097133E+04 + 2.162122E+04 2.276100E+04 2.243958E+04 2.111354E+04 2.074180E+04 + 2.153202E+04 2.274708E+04 2.229647E+04 2.081318E+04 2.048670E+04 + 2.164394E+04 2.268166E+04 2.194598E+04 2.057055E+04 2.020442E+04 + 2.074390E+04 2.255702E+04 2.171760E+04 2.029670E+04 1.989775E+04 + 2.070649E+04 2.237172E+04 2.144083E+04 1.998428E+04 1.955816E+04 + 2.059328E+04 2.143510E+04 2.111153E+04 2.008456E+04 1.918336E+04 + 2.039468E+04 2.096081E+04 2.080154E+04 1.967896E+04 1.877365E+04 + 2.010710E+04 2.056772E+04 2.035659E+04 1.922447E+04 1.764785E+04 + 1.939989E+04 2.016542E+04 1.984530E+04 1.871526E+04 1.716969E+04 + 1.885659E+04 1.961079E+04 1.880244E+04 1.815908E+04 1.664045E+04 + 1.717305E+04 1.897112E+04 1.816856E+04 1.688307E+04 1.552963E+04 + 1.651762E+04 1.738345E+04 1.684382E+04 1.631592E+04 1.385962E+04 + 1.571979E+04 1.662140E+04 1.617207E+04 1.503215E+04 1.330157E+04 + 1.477788E+04 1.407116E+04 1.335744E+04 1.308797E+04 1.225774E+04 + 1.343481E+04 1.319803E+04 1.263005E+04 1.190942E+04 1.173188E+04 + 1.183128E+04 1.169131E+04 1.127830E+04 1.092992E+04 1.112074E+04 + 1.064770E+04 1.066530E+04 1.021816E+04 1.016497E+04 9.826262E+03 + 8.765941E+03 9.017419E+03 9.291799E+03 9.068388E+03 8.933265E+03 + 7.637539E+03 7.978520E+03 7.708441E+03 8.201283E+03 8.148136E+03 + 6.550095E+03 6.758455E+03 6.720485E+03 6.995226E+03 7.324667E+03 + 5.538721E+03 5.801423E+03 5.841358E+03 6.144233E+03 5.970175E+03 + 4.626522E+03 4.720357E+03 5.009276E+03 5.233215E+03 5.217494E+03 + 3.823875E+03 3.954837E+03 4.321510E+03 4.476784E+03 4.500722E+03 + 3.134721E+03 3.282807E+03 3.625318E+03 3.704929E+03 3.838037E+03 + 2.553509E+03 2.705334E+03 3.015498E+03 3.166191E+03 3.241161E+03 + 2.071441E+03 2.308618E+03 2.484884E+03 2.636847E+03 2.782808E+03 + 1.746979E+03 1.971824E+03 2.048055E+03 2.200103E+03 2.320295E+03 + 1.459925E+03 1.581929E+03 1.687308E+03 1.843524E+03 1.920264E+03 + 1.234195E+03 1.301714E+03 1.465633E+03 1.566268E+03 1.606695E+03 + 1.085884E+03 1.103856E+03 1.216779E+03 1.302919E+03 1.433798E+03 + 9.348113E+02 9.614825E+02 1.016980E+03 1.123747E+03 1.200918E+03 + 8.254490E+02 8.476348E+02 9.257475E+02 9.370889E+02 1.001456E+03 + 7.244263E+02 8.693802E+02 8.357822E+02 8.549585E+02 8.610309E+02 + 6.511824E+02 7.844097E+02 8.330110E+02 7.356692E+02 7.643913E+02 + 5.766446E+02 6.791485E+02 7.195558E+02 7.170022E+02 7.117939E+02 + 5.421239E+02 6.048121E+02 6.425905E+02 6.857195E+02 6.695462E+02 + 5.022648E+02 5.585190E+02 5.845200E+02 6.167910E+02 6.186363E+02 + 4.883859E+02 5.285506E+02 5.598233E+02 5.834569E+02 5.936204E+02 + 4.670607E+02 5.095067E+02 5.543914E+02 5.479357E+02 5.688569E+02 + 4.810324E+02 5.016851E+02 5.370968E+02 5.622237E+02 5.058345E+02 + 4.723225E+02 4.985385E+02 5.032494E+02 5.201227E+02 5.276719E+02 + 4.902348E+02 4.778059E+02 4.943748E+02 5.023199E+02 4.758652E+02 + 5.225582E+02 5.218243E+02 5.036298E+02 5.084836E+02 4.904123E+02 + 5.349871E+02 5.252226E+02 5.032473E+02 4.926254E+02 4.728565E+02 + 5.575185E+02 5.095145E+02 5.013679E+02 4.915853E+02 4.699652E+02 + 5.495117E+02 5.277233E+02 5.083909E+02 5.011062E+02 4.880458E+02 + 5.606099E+02 5.326983E+02 5.157251E+02 5.066725E+02 4.907730E+02 + 4.004373E-04 1.873629E-03 4.550671E-03 7.058160E-03 6.256135E-03 + 4.653541E-04 2.184849E-03 5.497250E-03 8.485166E-03 7.618873E-03 + 5.525990E-04 2.542159E-03 6.652824E-03 1.022513E-02 9.280878E-03 + 6.353709E-04 2.952900E-03 8.065556E-03 1.131795E-02 1.130744E-02 + 7.101137E-04 3.520418E-03 9.798832E-03 1.361916E-02 1.377804E-02 + 8.424116E-04 4.181773E-03 1.219688E-02 1.642593E-02 1.679121E-02 + 1.013903E-03 4.802149E-03 1.434512E-02 2.181526E-02 2.334448E-02 + 1.144645E-03 5.539557E-03 1.692278E-02 2.570601E-02 2.830381E-02 + 1.302750E-03 6.446823E-03 2.007740E-02 3.045211E-02 3.433964E-02 + 1.556506E-03 7.541598E-03 2.424306E-02 3.653926E-02 4.161183E-02 + 2.042208E-03 1.011194E-02 2.953767E-02 4.511341E-02 5.021200E-02 + 2.929539E-03 1.469989E-02 3.765712E-02 6.016456E-02 6.024318E-02 + 4.376478E-03 2.079714E-02 4.711720E-02 7.524237E-02 7.225539E-02 + 6.800523E-03 3.056038E-02 5.892176E-02 9.065868E-02 8.661656E-02 + 1.091334E-02 4.297761E-02 8.427545E-02 1.113356E-01 1.037559E-01 + 1.593596E-02 5.714400E-02 1.107549E-01 1.365993E-01 1.385066E-01 + 2.412949E-02 7.469981E-02 1.369867E-01 1.770034E-01 1.658634E-01 + 3.489971E-02 9.512946E-02 1.771204E-01 1.968728E-01 1.983732E-01 + 5.150202E-02 1.253768E-01 2.286106E-01 2.358061E-01 2.372483E-01 + 7.512432E-02 1.504014E-01 2.778316E-01 3.101521E-01 2.836471E-01 + 1.038360E-01 2.100729E-01 3.409779E-01 3.711216E-01 3.389369E-01 + 1.390300E-01 2.913800E-01 4.208487E-01 4.435755E-01 4.040498E-01 + 1.643673E-01 3.938435E-01 5.181661E-01 5.304887E-01 4.826659E-01 + 2.322218E-01 4.783967E-01 6.338082E-01 6.376038E-01 5.795026E-01 + 2.793601E-01 5.036281E-01 7.664216E-01 7.757179E-01 7.037698E-01 + 3.015385E-01 5.821734E-01 9.198920E-01 9.950779E-01 8.618431E-01 + 2.780203E-01 6.344081E-01 1.059255E+00 1.080973E+00 1.089114E+00 + 2.325020E-01 6.137409E-01 1.129045E+00 1.243503E+00 1.202684E+00 + 1.971130E-01 5.728365E-01 1.053759E+00 1.377545E+00 1.367749E+00 + 1.622580E-01 6.329684E-01 9.776512E-01 1.445798E+00 1.634646E+00 + 1.268571E-01 5.546995E-01 1.026798E+00 1.447395E+00 1.654389E+00 + 1.027128E-01 4.593292E-01 9.718545E-01 1.212769E+00 1.715985E+00 + 8.174461E-02 3.535093E-01 8.829422E-01 1.184177E+00 1.454423E+00 + 6.697201E-02 2.976423E-01 8.770395E-01 1.138449E+00 1.285154E+00 + 5.780393E-02 2.343852E-01 7.623085E-01 1.069191E+00 1.121658E+00 + 5.086343E-02 1.843802E-01 6.133964E-01 9.122598E-01 9.617521E-01 + 4.675150E-02 1.457032E-01 4.848517E-01 8.830811E-01 8.130081E-01 + 4.529387E-02 1.178282E-01 3.796080E-01 7.242670E-01 7.823333E-01 + 4.605258E-02 9.908599E-02 2.978619E-01 6.509297E-01 7.397573E-01 + 4.654497E-02 8.772612E-02 2.382025E-01 5.721178E-01 6.841468E-01 + 4.848129E-02 8.594902E-02 1.986709E-01 4.777479E-01 5.184512E-01 + 5.273966E-02 8.587874E-02 1.775581E-01 3.946649E-01 4.379127E-01 + 5.634530E-02 8.396184E-02 1.589945E-01 3.334463E-01 3.752806E-01 + 6.461490E-02 8.810062E-02 1.481742E-01 2.944110E-01 3.278874E-01 + 7.533101E-02 9.524054E-02 1.444876E-01 2.604070E-01 3.243437E-01 + 8.873054E-02 1.056494E-01 1.460193E-01 2.413542E-01 2.962122E-01 + 1.040129E-01 1.206403E-01 1.534123E-01 2.345385E-01 2.806050E-01 + 1.218532E-01 1.407329E-01 1.720103E-01 2.415155E-01 3.133405E-01 + 1.420764E-01 1.656907E-01 1.982555E-01 2.498121E-01 3.110128E-01 + 1.685506E-01 1.946355E-01 2.292797E-01 2.719824E-01 3.348883E-01 + 2.061172E-01 2.348751E-01 2.620333E-01 3.144534E-01 3.822347E-01 + 2.551434E-01 2.878974E-01 3.233385E-01 3.547845E-01 4.388836E-01 + 3.052667E-01 3.542278E-01 3.905268E-01 4.036042E-01 5.002907E-01 + 3.754225E-01 4.376162E-01 4.640477E-01 4.981146E-01 5.657370E-01 + 4.632400E-01 5.236099E-01 5.495224E-01 6.161469E-01 6.837298E-01 + 5.732456E-01 6.507235E-01 6.482207E-01 7.620932E-01 8.147831E-01 + 7.128523E-01 7.778776E-01 7.815275E-01 9.448876E-01 9.611342E-01 + 8.872089E-01 9.175076E-01 9.771131E-01 1.077097E+00 1.043073E+00 + 9.782412E-01 1.002622E+00 1.111826E+00 1.143611E+00 6.859530E-01 + 4.966682E-01 1.253976E+00 2.743204E+00 5.376810E+00 9.150442E+00 + 5.687014E-01 1.412574E+00 3.067262E+00 5.890653E+00 1.015355E+01 + 6.516473E-01 1.596201E+00 3.412291E+00 6.545951E+00 1.113890E+01 + 7.463737E-01 1.838252E+00 3.779451E+00 7.177290E+00 1.223740E+01 + 8.533910E-01 2.080063E+00 4.211566E+00 7.977632E+00 1.340336E+01 + 9.688845E-01 2.365314E+00 4.781447E+00 8.752485E+00 1.463458E+01 + 1.113228E+00 2.641664E+00 5.357703E+00 9.693333E+00 1.605280E+01 + 1.279961E+00 2.988467E+00 5.961879E+00 1.080934E+01 1.787274E+01 + 1.458426E+00 3.378990E+00 6.717274E+00 1.203958E+01 1.966112E+01 + 1.718448E+00 3.871535E+00 7.581606E+00 1.346030E+01 2.203475E+01 + 2.114835E+00 4.675102E+00 8.919870E+00 1.555519E+01 2.506926E+01 + 2.697919E+00 5.858509E+00 1.071007E+01 1.851254E+01 2.913504E+01 + 3.482517E+00 7.328816E+00 1.300903E+01 2.211716E+01 3.409693E+01 + 4.524680E+00 9.172850E+00 1.577769E+01 2.628729E+01 3.973587E+01 + 5.878269E+00 1.140994E+01 1.943754E+01 3.131065E+01 4.634956E+01 + 7.511457E+00 1.409210E+01 2.355217E+01 3.746468E+01 5.403348E+01 + 9.635396E+00 1.729308E+01 2.833243E+01 4.433523E+01 6.287892E+01 + 1.216055E+01 2.127936E+01 3.440761E+01 5.202261E+01 7.290880E+01 + 1.536463E+01 2.613568E+01 4.138838E+01 6.165800E+01 8.483057E+01 + 1.914840E+01 3.180900E+01 4.974589E+01 7.301959E+01 9.840410E+01 + 2.386888E+01 3.880591E+01 5.957046E+01 8.593800E+01 1.144090E+02 + 2.960224E+01 4.738633E+01 7.083589E+01 1.003412E+02 1.323938E+02 + 3.595055E+01 5.684824E+01 8.319183E+01 1.156712E+02 1.516856E+02 + 4.268673E+01 6.606242E+01 9.601697E+01 1.309803E+02 1.689758E+02 + 4.715270E+01 7.189332E+01 1.050448E+02 1.426988E+02 1.841171E+02 + 5.070371E+01 7.652960E+01 1.117706E+02 1.530429E+02 1.965278E+02 + 5.297720E+01 8.091039E+01 1.170605E+02 1.603524E+02 2.063262E+02 + 5.388723E+01 8.366769E+01 1.230021E+02 1.679699E+02 2.172375E+02 + 5.448433E+01 8.599036E+01 1.261687E+02 1.741536E+02 2.274533E+02 + 5.442681E+01 8.898953E+01 1.283591E+02 1.797153E+02 2.395723E+02 + 5.354472E+01 8.891590E+01 1.312692E+02 1.825409E+02 2.447282E+02 + 5.220394E+01 8.826429E+01 1.318064E+02 1.854808E+02 2.477842E+02 + 5.037935E+01 8.556700E+01 1.313499E+02 1.841205E+02 2.495072E+02 + 4.778604E+01 8.268696E+01 1.294935E+02 1.825079E+02 2.466871E+02 + 4.434168E+01 7.770372E+01 1.240869E+02 1.779629E+02 2.397071E+02 + 4.022409E+01 7.229598E+01 1.171385E+02 1.695631E+02 2.303256E+02 + 3.605927E+01 6.518561E+01 1.079421E+02 1.586074E+02 2.186902E+02 + 3.132004E+01 5.720905E+01 9.764088E+01 1.448034E+02 2.014654E+02 + 2.676426E+01 4.999545E+01 8.590563E+01 1.304635E+02 1.822849E+02 + 2.240083E+01 4.278098E+01 7.498382E+01 1.158277E+02 1.621895E+02 + 1.892003E+01 3.681113E+01 6.435086E+01 1.012641E+02 1.393578E+02 + 1.626351E+01 3.164822E+01 5.537622E+01 8.709908E+01 1.203468E+02 + 1.391588E+01 2.678194E+01 4.728028E+01 7.425740E+01 1.033100E+02 + 1.218667E+01 2.288884E+01 4.030944E+01 6.286787E+01 8.817328E+01 + 1.091953E+01 1.971496E+01 3.422361E+01 5.311777E+01 7.493519E+01 + 9.960596E+00 1.735337E+01 2.948866E+01 4.522725E+01 6.353610E+01 + 9.509635E+00 1.581244E+01 2.602371E+01 3.929938E+01 5.470460E+01 + 9.304143E+00 1.478646E+01 2.358372E+01 3.483231E+01 4.825990E+01 + 9.334027E+00 1.416095E+01 2.187186E+01 3.129739E+01 4.268562E+01 + 9.658507E+00 1.402681E+01 2.101496E+01 2.934184E+01 3.925794E+01 + 1.085568E+01 1.524882E+01 2.176548E+01 2.942201E+01 3.840382E+01 + 1.251189E+01 1.713577E+01 2.337971E+01 3.004917E+01 3.835555E+01 + 1.449722E+01 1.916931E+01 2.517881E+01 3.140490E+01 3.933366E+01 + 1.690694E+01 2.163735E+01 2.670274E+01 3.328061E+01 3.954009E+01 + 1.945769E+01 2.437149E+01 2.908876E+01 3.549319E+01 4.065446E+01 + 2.268305E+01 2.725072E+01 3.152931E+01 3.739187E+01 4.211765E+01 + 2.606945E+01 3.043830E+01 3.516386E+01 4.038489E+01 4.479619E+01 + 3.007746E+01 3.426432E+01 3.844869E+01 4.363508E+01 4.734038E+01 + 3.251459E+01 3.658868E+01 4.099856E+01 4.537795E+01 5.001023E+01 + 3.259298E+02 5.496410E+02 8.806870E+02 1.388173E+03 2.040762E+03 + 3.625712E+02 5.996274E+02 9.542704E+02 1.455818E+03 2.188996E+03 + 4.017302E+02 6.642844E+02 1.028029E+03 1.580657E+03 2.310079E+03 + 4.520811E+02 7.563656E+02 1.106171E+03 1.678141E+03 2.448681E+03 + 5.091449E+02 8.294674E+02 1.198662E+03 1.813803E+03 2.585587E+03 + 5.703736E+02 9.280513E+02 1.333020E+03 1.941440E+03 2.739893E+03 + 6.362685E+02 1.014172E+03 1.480298E+03 2.094957E+03 2.890296E+03 + 7.298222E+02 1.139750E+03 1.612796E+03 2.296014E+03 3.155582E+03 + 8.265672E+02 1.266422E+03 1.800081E+03 2.512691E+03 3.409091E+03 + 9.527297E+02 1.419809E+03 1.981761E+03 2.735574E+03 3.756170E+03 + 1.130747E+03 1.664450E+03 2.270557E+03 3.071228E+03 4.127837E+03 + 1.346886E+03 1.980714E+03 2.604301E+03 3.498420E+03 4.630963E+03 + 1.638472E+03 2.345982E+03 3.032235E+03 4.038535E+03 5.237206E+03 + 2.007730E+03 2.766850E+03 3.535778E+03 4.654503E+03 5.908819E+03 + 2.452145E+03 3.275186E+03 4.163557E+03 5.412084E+03 6.696091E+03 + 2.979301E+03 3.885739E+03 4.852388E+03 6.279662E+03 7.516691E+03 + 3.614570E+03 4.572331E+03 5.649675E+03 7.183987E+03 8.629882E+03 + 4.338941E+03 5.418368E+03 6.675873E+03 8.236395E+03 9.814838E+03 + 5.222106E+03 6.446428E+03 7.856653E+03 9.602797E+03 1.134006E+04 + 6.238558E+03 7.628001E+03 9.316777E+03 1.111311E+04 1.301022E+04 + 7.523031E+03 9.039085E+03 1.097367E+04 1.296839E+04 1.507748E+04 + 9.013790E+03 1.080143E+04 1.282289E+04 1.505399E+04 1.734966E+04 + 1.073516E+04 1.279699E+04 1.494477E+04 1.737201E+04 1.978185E+04 + 1.264301E+04 1.480690E+04 1.741445E+04 1.960382E+04 2.200408E+04 + 1.410340E+04 1.654398E+04 1.948895E+04 2.171403E+04 2.450940E+04 + 1.581905E+04 1.863243E+04 2.174486E+04 2.426728E+04 2.700051E+04 + 1.768656E+04 2.084131E+04 2.428862E+04 2.687298E+04 2.918541E+04 + 1.921642E+04 2.293111E+04 2.671336E+04 2.990262E+04 3.222765E+04 + 2.061660E+04 2.530855E+04 2.985861E+04 3.268078E+04 3.584617E+04 + 2.198204E+04 2.729930E+04 3.153281E+04 3.529468E+04 3.996587E+04 + 2.260691E+04 2.838888E+04 3.400651E+04 3.844719E+04 4.298543E+04 + 2.336870E+04 2.993807E+04 3.570019E+04 4.187125E+04 4.542306E+04 + 2.416873E+04 3.072457E+04 3.817065E+04 4.351917E+04 4.900749E+04 + 2.429358E+04 3.124590E+04 3.864927E+04 4.550820E+04 5.068634E+04 + 2.351959E+04 3.114166E+04 3.858538E+04 4.639403E+04 5.148759E+04 + 2.206437E+04 3.045412E+04 3.821007E+04 4.596428E+04 5.175580E+04 + 2.072782E+04 2.867707E+04 3.688572E+04 4.440368E+04 5.156641E+04 + 1.872844E+04 2.610142E+04 3.506978E+04 4.227112E+04 4.884118E+04 + 1.641503E+04 2.354385E+04 3.144345E+04 3.880710E+04 4.518728E+04 + 1.411778E+04 2.059794E+04 2.819118E+04 3.504970E+04 4.098762E+04 + 1.201100E+04 1.750789E+04 2.461675E+04 3.122565E+04 3.593970E+04 + 1.008575E+04 1.483879E+04 2.095499E+04 2.729449E+04 3.124031E+04 + 8.315373E+03 1.231159E+04 1.779569E+04 2.342445E+04 2.709139E+04 + 6.787426E+03 1.015843E+04 1.487260E+04 1.947261E+04 2.314036E+04 + 5.583105E+03 8.302394E+03 1.224463E+04 1.633439E+04 1.955915E+04 + 4.551565E+03 6.825609E+03 1.000420E+04 1.349608E+04 1.623942E+04 + 3.837295E+03 5.667685E+03 8.258068E+03 1.125455E+04 1.355352E+04 + 3.246032E+03 4.747244E+03 6.850127E+03 9.313959E+03 1.125948E+04 + 2.794486E+03 4.015648E+03 5.739665E+03 7.726023E+03 9.366688E+03 + 2.440771E+03 3.418437E+03 4.919083E+03 6.532082E+03 7.898681E+03 + 2.341454E+03 3.123999E+03 4.495027E+03 5.752960E+03 6.931896E+03 + 2.224303E+03 3.027313E+03 4.161439E+03 5.063140E+03 6.060759E+03 + 2.096302E+03 2.835626E+03 3.763410E+03 4.531106E+03 5.428144E+03 + 2.079418E+03 2.723482E+03 3.307674E+03 4.109122E+03 4.686947E+03 + 2.016480E+03 2.604982E+03 3.016964E+03 3.721077E+03 4.109334E+03 + 1.950503E+03 2.331138E+03 2.753817E+03 3.237535E+03 3.604179E+03 + 1.854903E+03 2.178865E+03 2.590592E+03 2.905211E+03 3.159745E+03 + 1.742686E+03 2.017029E+03 2.284897E+03 2.596203E+03 2.813762E+03 + 1.626050E+03 1.864029E+03 2.097971E+03 2.354081E+03 2.767609E+03 + 4.395902E+04 7.908938E+04 1.269797E+05 1.807810E+05 2.466490E+05 + 4.503788E+04 8.020616E+04 1.281143E+05 1.818682E+05 2.477629E+05 + 4.626416E+04 8.310696E+04 1.293169E+05 1.867399E+05 2.489273E+05 + 4.862054E+04 8.533098E+04 1.316531E+05 1.880125E+05 2.501514E+05 + 5.049505E+04 8.687691E+04 1.331400E+05 1.893997E+05 2.514748E+05 + 5.525259E+04 9.025174E+04 1.347315E+05 1.945133E+05 2.569698E+05 + 5.731274E+04 9.274524E+04 1.391795E+05 1.992404E+05 2.585057E+05 + 6.157191E+04 9.695043E+04 1.411699E+05 2.012700E+05 2.602228E+05 + 6.730467E+04 9.964288E+04 1.446831E+05 2.037078E+05 2.669699E+05 + 7.217493E+04 1.041444E+05 1.500302E+05 2.079594E+05 2.730718E+05 + 8.208116E+04 1.151408E+05 1.596438E+05 2.183514E+05 2.796932E+05 + 9.128563E+04 1.272216E+05 1.726346E+05 2.302709E+05 2.913778E+05 + 1.031668E+05 1.397229E+05 1.863495E+05 2.452553E+05 3.023187E+05 + 1.163361E+05 1.532795E+05 2.025966E+05 2.592602E+05 3.156441E+05 + 1.314133E+05 1.688257E+05 2.161215E+05 2.794969E+05 3.294081E+05 + 1.475377E+05 1.847028E+05 2.318665E+05 2.898666E+05 3.397671E+05 + 1.626922E+05 2.017463E+05 2.489497E+05 3.059781E+05 3.609695E+05 + 1.818058E+05 2.186795E+05 2.674402E+05 3.225760E+05 3.780266E+05 + 2.020847E+05 2.399531E+05 2.906226E+05 3.407437E+05 3.998688E+05 + 2.300818E+05 2.609996E+05 3.122964E+05 3.574657E+05 4.178018E+05 + 2.582014E+05 2.872355E+05 3.364840E+05 3.800014E+05 4.381179E+05 + 2.830347E+05 3.131878E+05 3.598631E+05 4.058050E+05 4.550362E+05 + 3.166909E+05 3.490564E+05 3.921673E+05 4.416300E+05 4.729828E+05 + 3.595446E+05 3.731254E+05 4.220615E+05 4.604027E+05 4.934676E+05 + 3.902789E+05 3.956310E+05 4.377331E+05 4.708942E+05 5.079633E+05 + 4.175513E+05 4.323688E+05 4.532319E+05 4.856006E+05 5.163492E+05 + 4.608926E+05 4.628353E+05 4.887021E+05 4.989362E+05 5.281328E+05 + 4.974070E+05 4.982333E+05 4.935307E+05 5.156990E+05 5.309011E+05 + 5.263580E+05 5.339094E+05 5.445831E+05 5.350447E+05 5.491500E+05 + 5.682115E+05 5.618395E+05 5.466071E+05 5.420005E+05 5.677890E+05 + 5.667678E+05 5.668263E+05 5.685094E+05 5.781199E+05 5.794581E+05 + 5.859244E+05 5.855368E+05 5.765472E+05 5.865215E+05 5.822733E+05 + 6.042809E+05 5.892900E+05 6.022578E+05 5.926913E+05 5.917918E+05 + 6.056067E+05 5.959347E+05 5.904318E+05 5.950287E+05 5.845413E+05 + 5.954538E+05 5.955051E+05 5.823718E+05 5.820075E+05 5.753798E+05 + 5.604582E+05 5.696858E+05 5.599817E+05 5.509653E+05 5.563776E+05 + 5.233307E+05 5.371189E+05 5.341549E+05 5.228466E+05 5.295765E+05 + 4.811921E+05 4.933653E+05 5.024408E+05 4.854824E+05 4.884322E+05 + 4.293824E+05 4.379340E+05 4.417054E+05 4.368734E+05 4.426054E+05 + 3.756455E+05 3.853466E+05 3.898792E+05 3.900156E+05 3.964913E+05 + 3.255810E+05 3.273350E+05 3.445263E+05 3.447681E+05 3.528918E+05 + 2.786439E+05 2.784371E+05 2.910634E+05 3.023687E+05 3.041278E+05 + 2.351772E+05 2.331041E+05 2.472281E+05 2.606963E+05 2.618236E+05 + 1.952655E+05 1.951182E+05 2.057081E+05 2.180191E+05 2.208767E+05 + 1.608008E+05 1.619597E+05 1.718979E+05 1.864793E+05 1.873022E+05 + 1.322445E+05 1.344007E+05 1.414784E+05 1.556949E+05 1.557178E+05 + 1.086108E+05 1.106549E+05 1.175119E+05 1.314405E+05 1.300941E+05 + 8.945234E+04 9.156844E+04 9.767113E+04 1.093825E+05 1.073379E+05 + 7.402187E+04 7.582124E+04 8.111365E+04 9.068022E+04 8.917611E+04 + 6.173249E+04 6.260335E+04 6.779813E+04 7.383969E+04 7.371917E+04 + 5.278463E+04 5.196714E+04 5.813834E+04 6.099157E+04 6.263742E+04 + 4.331587E+04 4.549831E+04 5.035026E+04 5.020557E+04 5.309290E+04 + 3.452833E+04 3.854009E+04 4.113032E+04 4.167139E+04 4.518127E+04 + 3.033315E+04 3.360498E+04 3.363845E+04 3.594413E+04 3.875815E+04 + 2.686937E+04 2.899203E+04 2.804232E+04 3.100424E+04 3.325449E+04 + 2.270521E+04 2.316882E+04 2.445263E+04 2.628975E+04 2.831791E+04 + 1.982766E+04 2.035886E+04 2.134952E+04 2.258264E+04 2.310629E+04 + 1.684982E+04 1.710291E+04 1.820467E+04 1.885990E+04 2.006184E+04 + 1.498129E+04 1.533655E+04 1.612051E+04 1.693814E+04 5.638415E+04 + 2.647328E-06 1.815698E-06 1.298836E-06 9.623104E-07 7.336026E-07 + 3.217078E-06 2.207750E-06 1.580040E-06 1.171055E-06 8.930346E-07 + 3.908978E-06 2.684259E-06 1.922028E-06 1.425116E-06 1.087197E-06 + 4.749576E-06 3.263542E-06 2.337986E-06 1.734154E-06 1.323485E-06 + 5.770471E-06 3.967679E-06 2.843576E-06 2.110291E-06 1.610805E-06 + 7.011978E-06 4.823810E-06 3.458881E-06 2.567974E-06 1.960819E-06 + 8.520056E-06 5.864973E-06 4.207549E-06 3.125555E-06 2.387045E-06 + 1.034974E-05 7.129223E-06 5.117265E-06 3.802718E-06 2.905004E-06 + 1.255517E-05 8.655508E-06 6.216987E-06 4.622328E-06 3.532689E-06 + 1.508818E-05 1.042117E-05 7.496863E-06 5.581086E-06 4.269819E-06 + 1.774974E-05 1.231195E-05 8.887833E-06 6.635897E-06 5.089417E-06 + 2.049727E-05 1.430566E-05 1.038427E-05 7.786397E-06 5.992963E-06 + 2.355987E-05 1.655493E-05 1.209066E-05 9.105106E-06 7.038776E-06 + 2.706000E-05 1.914801E-05 1.405892E-05 1.064022E-05 8.258864E-06 + 3.107799E-05 2.213655E-05 1.634702E-05 1.242517E-05 9.678914E-06 + 3.573567E-05 2.562603E-05 1.902227E-05 1.452270E-05 1.135937E-05 + 4.106473E-05 2.963690E-05 2.212330E-05 1.696255E-05 1.332080E-05 + 4.718467E-05 3.427627E-05 2.572329E-05 1.980640E-05 1.561523E-05 + 5.425078E-05 3.966960E-05 2.991734E-05 2.315077E-05 1.831487E-05 + 6.240254E-05 4.590427E-05 3.480850E-05 2.704876E-05 2.148236E-05 + 7.173710E-05 5.310651E-05 4.046414E-05 3.157540E-05 2.519488E-05 + 8.255739E-05 6.146900E-05 4.705067E-05 3.689065E-05 2.955041E-05 + 9.530783E-05 7.138313E-05 5.487033E-05 4.320556E-05 3.471575E-05 + 1.120328E-04 8.421194E-05 6.495628E-05 5.127456E-05 4.131037E-05 + 1.369871E-04 1.030029E-04 7.944728E-05 6.269718E-05 5.051098E-05 + 1.721069E-04 1.290586E-04 9.931349E-05 7.826023E-05 6.291421E-05 + 2.185640E-04 1.632796E-04 1.253160E-04 9.847421E-05 7.896300E-05 + 2.791133E-04 2.076129E-04 1.588286E-04 1.243666E-04 9.947221E-05 + 3.565208E-04 2.642690E-04 2.014951E-04 1.572178E-04 1.253788E-04 + 4.556736E-04 3.363984E-04 2.556430E-04 1.988402E-04 1.580546E-04 + 5.824140E-04 4.282524E-04 3.241010E-04 2.514667E-04 1.993722E-04 + 7.431219E-04 5.442143E-04 4.105278E-04 3.175704E-04 2.511844E-04 + 9.453505E-04 6.899003E-04 5.188512E-04 4.004340E-04 3.158990E-04 + 1.199572E-03 8.719597E-04 6.539987E-04 5.037173E-04 3.963802E-04 + 1.518875E-03 1.100194E-03 8.229430E-04 6.321569E-04 4.965313E-04 + 1.923782E-03 1.386038E-03 1.033694E-03 7.922990E-04 6.209428E-04 + 2.440861E-03 1.746293E-03 1.297868E-03 9.919457E-04 7.763700E-04 + 3.105160E-03 2.204476E-03 1.627683E-03 1.241545E-03 9.696384E-04 + 3.947084E-03 2.781122E-03 2.041598E-03 1.549807E-03 1.207611E-03 + 5.007041E-03 3.504959E-03 2.556295E-03 1.930292E-03 1.500177E-03 + 6.301080E-03 4.389859E-03 3.186196E-03 2.393514E-03 1.853303E-03 + 7.883192E-03 5.469669E-03 3.958397E-03 2.962256E-03 2.283308E-03 + 9.848319E-03 6.808034E-03 4.912435E-03 3.664867E-03 2.815411E-03 + 1.231705E-02 8.486355E-03 6.104462E-03 4.539907E-03 3.473569E-03 + 1.539903E-02 1.057747E-02 7.584341E-03 5.627160E-03 4.295612E-03 + 1.916624E-02 1.313457E-02 9.394246E-03 6.956986E-03 5.299469E-03 + 2.358351E-02 1.614553E-02 1.153116E-02 8.533100E-03 6.494731E-03 + 2.878951E-02 1.971256E-02 1.407290E-02 1.040782E-02 7.918393E-03 + 3.505373E-02 2.401427E-02 1.714877E-02 1.266960E-02 9.639418E-03 + 4.180672E-02 2.872043E-02 2.056110E-02 1.521209E-02 1.157743E-02 + 4.620585E-02 3.211099E-02 2.319734E-02 1.729168E-02 1.323440E-02 + 4.931644E-02 3.476874E-02 2.542126E-02 1.913615E-02 1.476591E-02 + 5.266746E-02 3.763215E-02 2.781402E-02 2.114446E-02 1.644883E-02 + 5.631732E-02 4.077256E-02 3.045491E-02 2.335037E-02 1.829844E-02 + 6.043506E-02 4.429334E-02 3.342387E-02 2.584228E-02 2.039641E-02 + 6.524161E-02 4.836979E-02 3.684130E-02 2.870794E-02 2.280799E-02 + 7.057014E-02 5.288871E-02 4.065112E-02 3.191314E-02 2.552390E-02 + 7.682200E-02 5.815091E-02 4.506833E-02 3.563426E-02 2.866715E-02 + 8.358386E-02 6.363073E-02 4.955245E-02 3.933930E-02 3.175980E-02 + 8.785933E-06 9.095498E-06 9.705636E-06 1.082130E-05 1.088323E-05 + 1.073322E-05 1.111113E-05 1.186513E-05 1.322391E-05 1.329238E-05 + 1.311282E-05 1.357478E-05 1.450538E-05 1.616009E-05 1.622902E-05 + 1.601987E-05 1.658369E-05 1.773416E-05 1.972360E-05 1.980919E-05 + 1.957116E-05 2.025976E-05 2.168162E-05 2.406803E-05 2.420048E-05 + 2.390887E-05 2.474907E-05 2.650676E-05 2.937980E-05 2.957851E-05 + 2.921074E-05 3.023624E-05 3.240700E-05 3.586535E-05 3.614848E-05 + 3.568477E-05 3.693785E-05 3.961902E-05 4.379539E-05 4.417568E-05 + 4.359851E-05 4.513192E-05 4.845222E-05 5.341807E-05 5.400724E-05 + 5.330651E-05 5.519716E-05 5.939235E-05 6.499976E-05 6.609331E-05 + 6.531703E-05 6.767853E-05 7.322672E-05 7.922542E-05 8.108090E-05 + 8.021184E-05 8.323725E-05 9.079998E-05 9.673106E-05 9.994801E-05 + 9.870426E-05 1.026666E-04 1.128203E-04 1.180071E-04 1.234134E-04 + 1.216492E-04 1.268623E-04 1.403779E-04 1.443799E-04 1.526325E-04 + 1.486049E-04 1.569852E-04 1.744839E-04 1.772462E-04 1.887075E-04 + 1.820272E-04 1.944712E-04 2.156317E-04 2.173416E-04 2.327087E-04 + 2.236481E-04 2.413332E-04 2.615262E-04 2.678728E-04 2.877127E-04 + 2.752681E-04 2.999016E-04 3.191720E-04 3.307214E-04 3.557609E-04 + 3.396007E-04 3.729357E-04 3.895493E-04 4.085401E-04 4.398895E-04 + 4.197148E-04 4.640131E-04 4.767089E-04 5.059093E-04 5.449743E-04 + 5.194019E-04 5.757210E-04 5.856595E-04 6.249288E-04 6.762990E-04 + 6.436818E-04 7.039664E-04 7.196482E-04 7.723438E-04 8.396980E-04 + 7.979555E-04 8.563021E-04 8.862919E-04 9.540045E-04 1.039627E-03 + 9.837549E-04 1.044139E-03 1.090523E-03 1.174194E-03 1.281972E-03 + 1.196264E-03 1.271467E-03 1.328253E-03 1.430964E-03 1.562104E-03 + 1.441633E-03 1.546209E-03 1.607377E-03 1.731586E-03 1.888657E-03 + 1.733016E-03 1.879445E-03 1.943415E-03 2.092030E-03 2.277524E-03 + 2.082595E-03 2.297827E-03 2.348378E-03 2.523098E-03 2.741989E-03 + 2.507939E-03 2.767161E-03 2.847921E-03 3.049147E-03 3.299346E-03 + 3.025228E-03 3.324512E-03 3.452563E-03 3.680678E-03 3.972718E-03 + 3.654549E-03 3.991504E-03 4.197459E-03 4.434516E-03 4.784364E-03 + 4.423116E-03 4.798459E-03 5.106887E-03 5.357312E-03 5.775232E-03 + 5.363812E-03 5.776006E-03 6.224290E-03 6.472215E-03 6.974742E-03 + 6.516744E-03 6.964251E-03 7.579459E-03 7.844380E-03 8.434226E-03 + 7.926337E-03 8.405048E-03 9.284909E-03 9.500254E-03 1.020180E-02 + 9.655679E-03 1.015821E-02 1.121567E-02 1.154360E-02 1.235752E-02 + 1.181984E-02 1.228726E-02 1.352827E-02 1.401331E-02 1.495950E-02 + 1.436185E-02 1.487097E-02 1.629170E-02 1.704314E-02 1.808485E-02 + 1.744307E-02 1.801315E-02 1.963682E-02 2.073598E-02 2.186185E-02 + 2.120599E-02 2.185465E-02 2.370700E-02 2.524916E-02 2.650201E-02 + 2.580866E-02 2.655841E-02 2.868148E-02 3.084613E-02 3.217589E-02 + 3.143720E-02 3.230506E-02 3.476765E-02 3.763494E-02 3.909766E-02 + 3.830090E-02 3.932938E-02 4.216055E-02 4.583595E-02 4.751946E-02 + 4.668102E-02 4.789827E-02 5.113028E-02 5.588507E-02 5.781558E-02 + 5.691039E-02 5.835020E-02 6.203136E-02 6.819022E-02 7.036699E-02 + 6.940906E-02 7.111364E-02 7.533950E-02 8.313613E-02 8.564508E-02 + 8.469235E-02 8.673942E-02 9.172139E-02 1.011785E-01 1.043015E-01 + 1.033727E-01 1.058390E-01 1.118312E-01 1.233153E-01 1.271020E-01 + 1.261679E-01 1.291450E-01 1.363833E-01 1.503211E-01 1.549407E-01 + 1.541197E-01 1.577532E-01 1.670676E-01 1.837534E-01 1.895263E-01 + 1.891199E-01 1.939765E-01 2.082700E-01 2.251165E-01 2.346237E-01 + 2.336618E-01 2.410752E-01 2.627769E-01 2.759020E-01 2.919684E-01 + 2.861333E-01 3.017552E-01 3.305691E-01 3.418073E-01 3.648144E-01 + 3.530355E-01 3.800363E-01 4.088569E-01 4.260076E-01 4.566686E-01 + 4.399725E-01 4.803624E-01 5.003170E-01 5.306034E-01 5.736510E-01 + 5.511817E-01 6.040236E-01 6.231376E-01 6.632536E-01 7.180028E-01 + 6.930318E-01 7.430600E-01 7.741818E-01 8.295129E-01 8.905949E-01 + 8.696420E-01 9.131577E-01 9.609954E-01 1.032672E+00 1.109178E+00 + 1.031538E+00 1.072381E+00 1.134964E+00 1.216166E+00 1.307509E+00 + 5.317081E-05 6.085735E-05 6.890010E-05 7.524337E-05 7.814206E-05 + 6.494654E-05 7.429102E-05 8.407146E-05 9.173446E-05 9.523850E-05 + 7.931582E-05 9.066453E-05 1.025561E-04 1.118000E-04 1.159968E-04 + 9.683123E-05 1.105789E-04 1.250319E-04 1.361175E-04 1.412008E-04 + 1.181492E-04 1.348187E-04 1.523408E-04 1.656404E-04 1.718107E-04 + 1.440709E-04 1.642328E-04 1.854770E-04 2.014475E-04 2.089332E-04 + 1.755656E-04 1.999416E-04 2.256334E-04 2.447501E-04 2.538491E-04 + 2.137648E-04 2.432355E-04 2.742417E-04 2.970964E-04 3.081101E-04 + 2.601692E-04 2.956335E-04 3.330626E-04 3.600549E-04 3.735665E-04 + 3.174502E-04 3.601452E-04 4.049652E-04 4.358539E-04 4.526455E-04 + 3.894706E-04 4.413986E-04 4.945113E-04 5.286629E-04 5.493289E-04 + 4.805224E-04 5.437009E-04 6.065059E-04 6.413509E-04 6.677736E-04 + 5.934077E-04 6.685853E-04 7.418530E-04 7.769134E-04 8.108499E-04 + 7.295277E-04 8.182540E-04 9.054492E-04 9.412333E-04 9.838197E-04 + 8.930782E-04 1.001895E-03 1.099796E-03 1.140168E-03 1.192650E-03 + 1.094420E-03 1.227394E-03 1.336779E-03 1.381533E-03 1.445040E-03 + 1.344727E-03 1.505099E-03 1.616783E-03 1.677314E-03 1.755129E-03 + 1.656539E-03 1.850897E-03 1.964578E-03 2.044976E-03 2.136945E-03 + 2.043297E-03 2.279329E-03 2.393793E-03 2.499579E-03 2.608250E-03 + 2.522710E-03 2.808457E-03 2.928048E-03 3.067323E-03 3.190287E-03 + 3.134864E-03 3.467305E-03 3.596755E-03 3.768365E-03 3.910815E-03 + 3.909987E-03 4.261271E-03 4.421520E-03 4.635377E-03 4.803836E-03 + 4.874119E-03 5.231988E-03 5.443920E-03 5.700570E-03 5.897796E-03 + 6.036484E-03 6.417501E-03 6.693030E-03 6.993133E-03 7.228924E-03 + 7.365937E-03 7.835011E-03 8.168522E-03 8.535822E-03 8.822253E-03 + 8.892377E-03 9.533943E-03 9.920220E-03 1.037970E-02 1.073693E-02 + 1.069209E-02 1.158880E-02 1.203394E-02 1.260738E-02 1.305135E-02 + 1.282148E-02 1.411268E-02 1.459826E-02 1.529257E-02 1.585609E-02 + 1.536970E-02 1.705943E-02 1.771739E-02 1.856134E-02 1.926627E-02 + 1.843733E-02 2.060524E-02 2.149592E-02 2.251016E-02 2.341586E-02 + 2.215018E-02 2.482130E-02 2.611677E-02 2.726343E-02 2.843467E-02 + 2.654902E-02 2.984238E-02 3.171991E-02 3.306130E-02 3.450415E-02 + 3.178453E-02 3.583873E-02 3.853343E-02 4.005235E-02 4.188181E-02 + 3.810792E-02 4.308638E-02 4.682488E-02 4.861904E-02 5.085827E-02 + 4.577089E-02 5.180244E-02 5.706368E-02 5.899792E-02 6.176184E-02 + 5.506216E-02 6.229692E-02 6.907975E-02 7.167007E-02 7.501418E-02 + 6.645655E-02 7.493902E-02 8.358597E-02 8.698496E-02 9.107747E-02 + 7.984505E-02 9.023363E-02 1.010204E-01 1.057110E-01 1.104916E-01 + 9.602403E-02 1.087187E-01 1.217615E-01 1.285342E-01 1.339708E-01 + 1.152012E-01 1.308781E-01 1.469856E-01 1.562083E-01 1.626967E-01 + 1.387645E-01 1.578448E-01 1.775358E-01 1.901482E-01 1.976379E-01 + 1.676368E-01 1.907216E-01 2.148278E-01 2.315012E-01 2.401940E-01 + 2.026024E-01 2.306531E-01 2.600823E-01 2.816735E-01 2.919830E-01 + 2.446916E-01 2.789265E-01 3.147818E-01 3.430525E-01 3.551073E-01 + 2.955521E-01 3.374691E-01 3.809294E-01 4.174917E-01 4.317611E-01 + 3.579026E-01 4.088775E-01 4.614152E-01 5.079415E-01 5.249649E-01 + 4.348484E-01 4.970133E-01 5.606675E-01 6.177253E-01 6.385548E-01 + 5.293806E-01 6.051634E-01 6.822768E-01 7.519436E-01 7.771143E-01 + 6.445772E-01 7.368189E-01 8.304674E-01 9.155584E-01 9.454097E-01 + 7.907965E-01 9.025075E-01 1.015765E+00 1.117146E+00 1.152998E+00 + 9.970021E-01 1.129868E+00 1.268534E+00 1.368667E+00 1.415735E+00 + 1.276949E+00 1.436140E+00 1.598198E+00 1.677561E+00 1.740127E+00 + 1.611724E+00 1.811660E+00 1.998591E+00 2.063692E+00 2.137092E+00 + 2.044209E+00 2.289218E+00 2.460775E+00 2.540687E+00 2.623929E+00 + 2.604736E+00 2.889196E+00 3.006747E+00 3.115071E+00 3.224932E+00 + 3.282829E+00 3.597914E+00 3.699511E+00 3.815295E+00 3.946660E+00 + 4.133831E+00 4.407765E+00 4.520871E+00 4.659534E+00 4.783607E+00 + 5.165985E+00 5.374059E+00 5.498717E+00 5.666004E+00 5.815351E+00 + 6.073601E+00 6.248858E+00 6.397859E+00 6.572941E+00 6.738538E+00 + 5.901278E-04 6.092872E-04 6.287461E-04 6.412463E-04 6.575524E-04 + 7.087994E-04 7.316309E-04 7.547544E-04 7.696009E-04 7.892787E-04 + 8.501752E-04 8.772619E-04 9.049619E-04 9.223272E-04 9.463510E-04 + 1.018700E-03 1.050927E-03 1.084039E-03 1.104671E-03 1.134162E-03 + 1.220311E-03 1.258838E-03 1.298684E-03 1.323476E-03 1.359770E-03 + 1.463325E-03 1.509445E-03 1.557839E-03 1.588015E-03 1.633140E-03 + 1.758781E-03 1.814323E-03 1.873509E-03 1.910470E-03 1.966910E-03 + 2.121070E-03 2.188739E-03 2.261779E-03 2.306994E-03 2.378016E-03 + 2.569764E-03 2.651557E-03 2.742349E-03 2.796670E-03 2.886430E-03 + 3.129064E-03 3.228634E-03 3.338804E-03 3.403117E-03 3.516514E-03 + 3.826114E-03 3.952478E-03 4.081607E-03 4.159138E-03 4.302988E-03 + 4.700976E-03 4.857053E-03 5.008222E-03 5.094326E-03 5.279326E-03 + 5.775781E-03 5.965512E-03 6.133857E-03 6.246355E-03 6.479128E-03 + 7.071684E-03 7.303126E-03 7.510967E-03 7.670293E-03 7.948315E-03 + 8.661733E-03 8.952976E-03 9.167460E-03 9.416719E-03 9.752851E-03 + 1.062691E-02 1.098758E-02 1.122044E-02 1.156938E-02 1.197107E-02 + 1.306755E-02 1.348977E-02 1.373597E-02 1.420308E-02 1.469547E-02 + 1.608771E-02 1.657149E-02 1.684366E-02 1.744488E-02 1.804144E-02 + 1.976653E-02 2.030895E-02 2.066883E-02 2.142612E-02 2.212857E-02 + 2.419781E-02 2.482163E-02 2.538346E-02 2.629978E-02 2.708327E-02 + 2.968775E-02 3.035424E-02 3.120296E-02 3.229642E-02 3.312074E-02 + 3.646460E-02 3.713756E-02 3.832336E-02 3.966495E-02 4.052284E-02 + 4.476659E-02 4.551274E-02 4.708278E-02 4.869177E-02 4.959450E-02 + 5.484726E-02 5.575146E-02 5.771799E-02 5.962946E-02 6.062186E-02 + 6.694922E-02 6.802213E-02 7.042026E-02 7.274630E-02 7.396934E-02 + 8.145746E-02 8.278238E-02 8.562919E-02 8.850385E-02 9.013072E-02 + 9.901948E-02 1.007254E-01 1.039854E-01 1.075702E-01 1.097434E-01 + 1.202670E-01 1.226740E-01 1.262788E-01 1.305937E-01 1.336036E-01 + 1.461336E-01 1.494218E-01 1.532204E-01 1.585292E-01 1.627397E-01 + 1.776831E-01 1.822567E-01 1.859166E-01 1.924662E-01 1.981921E-01 + 2.165020E-01 2.220454E-01 2.258343E-01 2.337000E-01 2.411703E-01 + 2.630258E-01 2.700934E-01 2.743821E-01 2.837249E-01 2.927757E-01 + 3.189396E-01 3.281152E-01 3.332777E-01 3.444105E-01 3.556349E-01 + 3.869276E-01 3.987895E-01 4.055256E-01 4.181944E-01 4.320312E-01 + 4.700608E-01 4.846217E-01 4.939886E-01 5.079211E-01 5.250146E-01 + 5.717083E-01 5.891668E-01 6.017497E-01 6.167363E-01 6.376015E-01 + 6.961299E-01 7.161646E-01 7.334375E-01 7.483501E-01 7.741931E-01 + 8.474857E-01 8.714571E-01 8.938577E-01 9.088276E-01 9.399164E-01 + 1.032549E+00 1.060661E+00 1.086202E+00 1.104395E+00 1.141148E+00 + 1.252297E+00 1.288138E+00 1.321194E+00 1.340821E+00 1.386054E+00 + 1.519952E+00 1.563363E+00 1.603972E+00 1.627732E+00 1.683025E+00 + 1.847017E+00 1.898124E+00 1.948342E+00 1.978279E+00 2.042485E+00 + 2.245294E+00 2.304547E+00 2.366555E+00 2.403334E+00 2.479181E+00 + 2.722940E+00 2.796451E+00 2.873145E+00 2.920369E+00 3.006957E+00 + 3.300540E+00 3.393015E+00 3.485756E+00 3.544274E+00 3.643863E+00 + 4.004892E+00 4.118557E+00 4.226323E+00 4.298907E+00 4.413032E+00 + 4.863753E+00 5.001080E+00 5.125464E+00 5.212224E+00 5.344241E+00 + 5.904056E+00 6.070409E+00 6.214632E+00 6.315943E+00 6.472573E+00 + 7.162767E+00 7.362406E+00 7.532349E+00 7.651592E+00 7.831121E+00 + 8.711307E+00 8.937510E+00 9.124369E+00 9.269689E+00 9.481228E+00 + 1.066319E+01 1.086763E+01 1.108693E+01 1.124132E+01 1.154151E+01 + 1.305801E+01 1.326982E+01 1.349044E+01 1.367425E+01 1.407202E+01 + 1.580212E+01 1.605014E+01 1.637784E+01 1.664555E+01 1.709394E+01 + 1.916467E+01 1.948208E+01 1.981670E+01 2.026357E+01 2.073621E+01 + 2.332748E+01 2.369032E+01 2.400636E+01 2.459487E+01 2.512010E+01 + 2.809719E+01 2.857436E+01 2.907614E+01 2.974552E+01 3.030952E+01 + 3.393145E+01 3.444270E+01 3.508679E+01 3.578945E+01 3.627267E+01 + 4.090016E+01 4.145905E+01 4.216650E+01 4.297861E+01 4.328086E+01 + 4.701957E+01 4.768633E+01 4.846382E+01 4.926803E+01 5.021689E+01 + 5.086360E-03 5.143949E-03 5.254633E-03 5.358037E-03 5.511238E-03 + 6.206339E-03 6.274582E-03 6.406996E-03 6.529107E-03 6.709301E-03 + 7.573564E-03 7.652070E-03 7.811202E-03 7.953379E-03 8.171308E-03 + 9.240597E-03 9.333717E-03 9.521298E-03 9.690946E-03 9.949136E-03 + 1.127368E-02 1.138306E-02 1.160845E-02 1.180867E-02 1.211708E-02 + 1.375406E-02 1.387923E-02 1.415637E-02 1.439424E-02 1.475697E-02 + 1.678642E-02 1.693007E-02 1.725797E-02 1.754819E-02 1.797379E-02 + 2.048368E-02 2.064214E-02 2.103975E-02 2.138405E-02 2.189206E-02 + 2.499682E-02 2.518290E-02 2.566444E-02 2.606163E-02 2.666675E-02 + 3.049862E-02 3.073924E-02 3.130442E-02 3.177391E-02 3.251696E-02 + 3.720013E-02 3.755963E-02 3.820338E-02 3.879094E-02 3.967991E-02 + 4.549104E-02 4.593863E-02 4.666180E-02 4.740166E-02 4.841562E-02 + 5.549845E-02 5.619617E-02 5.696358E-02 5.796378E-02 5.912814E-02 + 6.775880E-02 6.875147E-02 6.958755E-02 7.092563E-02 7.214220E-02 + 8.273852E-02 8.405949E-02 8.507725E-02 8.675138E-02 8.802037E-02 + 1.011158E-01 1.027099E-01 1.039754E-01 1.060735E-01 1.073691E-01 + 1.237165E-01 1.255186E-01 1.270329E-01 1.296385E-01 1.310437E-01 + 1.513630E-01 1.533078E-01 1.553552E-01 1.582120E-01 1.599886E-01 + 1.851219E-01 1.871800E-01 1.899542E-01 1.933077E-01 1.953634E-01 + 2.264623E-01 2.287504E-01 2.325077E-01 2.359413E-01 2.385792E-01 + 2.767178E-01 2.797447E-01 2.846861E-01 2.877617E-01 2.914292E-01 + 3.381947E-01 3.418337E-01 3.479875E-01 3.513714E-01 3.555737E-01 + 4.131815E-01 4.178474E-01 4.251335E-01 4.288948E-01 4.335994E-01 + 5.042515E-01 5.105090E-01 5.188142E-01 5.232632E-01 5.286010E-01 + 6.150769E-01 6.222343E-01 6.325075E-01 6.373635E-01 6.440369E-01 + 7.497489E-01 7.575659E-01 7.704029E-01 7.758960E-01 7.840266E-01 + 9.136394E-01 9.212231E-01 9.378028E-01 9.452304E-01 9.547053E-01 + 1.112561E+00 1.122358E+00 1.140810E+00 1.150269E+00 1.161832E+00 + 1.355911E+00 1.366282E+00 1.386962E+00 1.400601E+00 1.413438E+00 + 1.650108E+00 1.661925E+00 1.684748E+00 1.706009E+00 1.718815E+00 + 2.007642E+00 2.022490E+00 2.047427E+00 2.075977E+00 2.090999E+00 + 2.443118E+00 2.462871E+00 2.489176E+00 2.524973E+00 2.540762E+00 + 2.974296E+00 2.998929E+00 3.024992E+00 3.073871E+00 3.089751E+00 + 3.618790E+00 3.649864E+00 3.676438E+00 3.738169E+00 3.760211E+00 + 4.402203E+00 4.440775E+00 4.470728E+00 4.538236E+00 4.574563E+00 + 5.357676E+00 5.404469E+00 5.433015E+00 5.511073E+00 5.562914E+00 + 6.524385E+00 6.567621E+00 6.599196E+00 6.682914E+00 6.754654E+00 + 7.943552E+00 7.975967E+00 8.008322E+00 8.100681E+00 8.194199E+00 + 9.663684E+00 9.682274E+00 9.726419E+00 9.818019E+00 9.936313E+00 + 1.174933E+01 1.175290E+01 1.180438E+01 1.188959E+01 1.204598E+01 + 1.426117E+01 1.425597E+01 1.430591E+01 1.438591E+01 1.458316E+01 + 1.730268E+01 1.728488E+01 1.733581E+01 1.741502E+01 1.763593E+01 + 2.099500E+01 2.093696E+01 2.099397E+01 2.104638E+01 2.130861E+01 + 2.539888E+01 2.533445E+01 2.540491E+01 2.541665E+01 2.570842E+01 + 3.070927E+01 3.059592E+01 3.070407E+01 3.068861E+01 3.100481E+01 + 3.704807E+01 3.694855E+01 3.703183E+01 3.698618E+01 3.735106E+01 + 4.474230E+01 4.458487E+01 4.461936E+01 4.454573E+01 4.495174E+01 + 5.393435E+01 5.377341E+01 5.371413E+01 5.356887E+01 5.403525E+01 + 6.488891E+01 6.472444E+01 6.461364E+01 6.434124E+01 6.487401E+01 + 7.795383E+01 7.773641E+01 7.754597E+01 7.717152E+01 7.771383E+01 + 9.354285E+01 9.305430E+01 9.281976E+01 9.253976E+01 9.303325E+01 + 1.116417E+02 1.111273E+02 1.108482E+02 1.108529E+02 1.111476E+02 + 1.323923E+02 1.323089E+02 1.323494E+02 1.324819E+02 1.322857E+02 + 1.562151E+02 1.566521E+02 1.574188E+02 1.573353E+02 1.564870E+02 + 1.836201E+02 1.846682E+02 1.858536E+02 1.856373E+02 1.842241E+02 + 2.141833E+02 2.159576E+02 2.174739E+02 2.175685E+02 2.157117E+02 + 2.483421E+02 2.506333E+02 2.526161E+02 2.527308E+02 2.503670E+02 + 2.857467E+02 2.893575E+02 2.907831E+02 2.915082E+02 2.886753E+02 + 3.168870E+02 3.215310E+02 3.224602E+02 3.227181E+02 3.371127E+02 + 5.748652E-02 5.910683E-02 6.103632E-02 6.334456E-02 6.614153E-02 + 6.998822E-02 7.193281E-02 7.408364E-02 7.673217E-02 7.986917E-02 + 8.523386E-02 8.747014E-02 8.996209E-02 9.289220E-02 9.651730E-02 + 1.038127E-01 1.063919E-01 1.091241E-01 1.124956E-01 1.165599E-01 + 1.264462E-01 1.293773E-01 1.323771E-01 1.363594E-01 1.413013E-01 + 1.539160E-01 1.571489E-01 1.607898E-01 1.653839E-01 1.709524E-01 + 1.875098E-01 1.912819E-01 1.953342E-01 2.006889E-01 2.068679E-01 + 2.283516E-01 2.324955E-01 2.371555E-01 2.435409E-01 2.504532E-01 + 2.779821E-01 2.829933E-01 2.884733E-01 2.954158E-01 3.036825E-01 + 3.386905E-01 3.447500E-01 3.509148E-01 3.585275E-01 3.683957E-01 + 4.131747E-01 4.197671E-01 4.270989E-01 4.363174E-01 4.476865E-01 + 5.043488E-01 5.117729E-01 5.202134E-01 5.314560E-01 5.439114E-01 + 6.154394E-01 6.237887E-01 6.342434E-01 6.475658E-01 6.628333E-01 + 7.518202E-01 7.608557E-01 7.728924E-01 7.892393E-01 8.060254E-01 + 9.178811E-01 9.285895E-01 9.410743E-01 9.604943E-01 9.804921E-01 + 1.119186E+00 1.133166E+00 1.146101E+00 1.168782E+00 1.191862E+00 + 1.365200E+00 1.381077E+00 1.396077E+00 1.423076E+00 1.448392E+00 + 1.665399E+00 1.681180E+00 1.700257E+00 1.732906E+00 1.758973E+00 + 2.028729E+00 2.049698E+00 2.071959E+00 2.110043E+00 2.140620E+00 + 2.472946E+00 2.494751E+00 2.523829E+00 2.565939E+00 2.602323E+00 + 3.015434E+00 3.041136E+00 3.075393E+00 3.119728E+00 3.163800E+00 + 3.678298E+00 3.700417E+00 3.740005E+00 3.793330E+00 3.844812E+00 + 4.479027E+00 4.507415E+00 4.555344E+00 4.612985E+00 4.666813E+00 + 5.459137E+00 5.489931E+00 5.547516E+00 5.603748E+00 5.663753E+00 + 6.653142E+00 6.677214E+00 6.743711E+00 6.799108E+00 6.868136E+00 + 8.098619E+00 8.124876E+00 8.178616E+00 8.245412E+00 8.321176E+00 + 9.865825E+00 9.875699E+00 9.930723E+00 1.000252E+01 1.009480E+01 + 1.200907E+01 1.201980E+01 1.206516E+01 1.215453E+01 1.224297E+01 + 1.463210E+01 1.463426E+01 1.466044E+01 1.473640E+01 1.484162E+01 + 1.780978E+01 1.779746E+01 1.780005E+01 1.789502E+01 1.797825E+01 + 2.166362E+01 2.164299E+01 2.163480E+01 2.169552E+01 2.180000E+01 + 2.637979E+01 2.633669E+01 2.629435E+01 2.631393E+01 2.638660E+01 + 3.209036E+01 3.201385E+01 3.193602E+01 3.192781E+01 3.195164E+01 + 3.900625E+01 3.891319E+01 3.882764E+01 3.874623E+01 3.872182E+01 + 4.740628E+01 4.729030E+01 4.712407E+01 4.690808E+01 4.688824E+01 + 5.755255E+01 5.743526E+01 5.718473E+01 5.693799E+01 5.683881E+01 + 6.984918E+01 6.966344E+01 6.936328E+01 6.900703E+01 6.878195E+01 + 8.476029E+01 8.450996E+01 8.400225E+01 8.351068E+01 8.324730E+01 + 1.026933E+02 1.024523E+02 1.018370E+02 1.011571E+02 1.005231E+02 + 1.242444E+02 1.239376E+02 1.232617E+02 1.224398E+02 1.215061E+02 + 1.501110E+02 1.498487E+02 1.489521E+02 1.478980E+02 1.466102E+02 + 1.809900E+02 1.808918E+02 1.800332E+02 1.785955E+02 1.769240E+02 + 2.179481E+02 2.179547E+02 2.171704E+02 2.155035E+02 2.131051E+02 + 2.618279E+02 2.621067E+02 2.615820E+02 2.594469E+02 2.561816E+02 + 3.138684E+02 3.140018E+02 3.141641E+02 3.118997E+02 3.080982E+02 + 3.739054E+02 3.758618E+02 3.756501E+02 3.740021E+02 3.697532E+02 + 4.444527E+02 4.464858E+02 4.475787E+02 4.465057E+02 4.417544E+02 + 5.265241E+02 5.284402E+02 5.293148E+02 5.285898E+02 5.251966E+02 + 6.194489E+02 6.205146E+02 6.224007E+02 6.212181E+02 6.191096E+02 + 7.240062E+02 7.234720E+02 7.245382E+02 7.242798E+02 7.227926E+02 + 8.388834E+02 8.369229E+02 8.366473E+02 8.384284E+02 8.341266E+02 + 9.644540E+02 9.592274E+02 9.570889E+02 9.594237E+02 9.552786E+02 + 1.094726E+03 1.093209E+03 1.090319E+03 1.090961E+03 1.085588E+03 + 1.229841E+03 1.228791E+03 1.224256E+03 1.219815E+03 1.215013E+03 + 1.364264E+03 1.359790E+03 1.351097E+03 1.342373E+03 1.337466E+03 + 1.486326E+03 1.476186E+03 1.464905E+03 1.454951E+03 1.455969E+03 + 1.593598E+03 1.571756E+03 1.571078E+03 1.560566E+03 1.556501E+03 + 1.680917E+03 1.660781E+03 1.657646E+03 1.654744E+03 1.645470E+03 + 1.739107E+03 1.724541E+03 1.720538E+03 1.715776E+03 1.989464E+03 + 6.563792E-01 6.758477E-01 7.037772E-01 7.495571E-01 8.129597E-01 + 7.953699E-01 8.172941E-01 8.459219E-01 8.963535E-01 9.681430E-01 + 9.646648E-01 9.866627E-01 1.020951E+00 1.072029E+00 1.151298E+00 + 1.170324E+00 1.194251E+00 1.229858E+00 1.283908E+00 1.364918E+00 + 1.420316E+00 1.442577E+00 1.477346E+00 1.537972E+00 1.636758E+00 + 1.724391E+00 1.743125E+00 1.779159E+00 1.849087E+00 1.954142E+00 + 2.093125E+00 2.112604E+00 2.146044E+00 2.220935E+00 2.327590E+00 + 2.542108E+00 2.560658E+00 2.589348E+00 2.673065E+00 2.788462E+00 + 3.086702E+00 3.109653E+00 3.126570E+00 3.214499E+00 3.353046E+00 + 3.747498E+00 3.778299E+00 3.785742E+00 3.872302E+00 4.017031E+00 + 4.550029E+00 4.577116E+00 4.590867E+00 4.686562E+00 4.838208E+00 + 5.530019E+00 5.545019E+00 5.569147E+00 5.677708E+00 5.834247E+00 + 6.730874E+00 6.724801E+00 6.783311E+00 6.878419E+00 7.065249E+00 + 8.189028E+00 8.170438E+00 8.226043E+00 8.349781E+00 8.532467E+00 + 9.956832E+00 9.947925E+00 9.963360E+00 1.010692E+01 1.030635E+01 + 1.210094E+01 1.208921E+01 1.209198E+01 1.223407E+01 1.245161E+01 + 1.468272E+01 1.466718E+01 1.468912E+01 1.485543E+01 1.504023E+01 + 1.783103E+01 1.778907E+01 1.781170E+01 1.799904E+01 1.815120E+01 + 2.166901E+01 2.160972E+01 2.161334E+01 2.178091E+01 2.199855E+01 + 2.629366E+01 2.619179E+01 2.618382E+01 2.633933E+01 2.659932E+01 + 3.198071E+01 3.179070E+01 3.176637E+01 3.185695E+01 3.208520E+01 + 3.878842E+01 3.858636E+01 3.846919E+01 3.846930E+01 3.888145E+01 + 4.700845E+01 4.683786E+01 4.661381E+01 4.659416E+01 4.694568E+01 + 5.713325E+01 5.675603E+01 5.643100E+01 5.634756E+01 5.667035E+01 + 6.952307E+01 6.893413E+01 6.844512E+01 6.823142E+01 6.841421E+01 + 8.461517E+01 8.379288E+01 8.287627E+01 8.244044E+01 8.254985E+01 + 1.032490E+02 1.021025E+02 1.008774E+02 9.972099E+01 9.965538E+01 + 1.257453E+02 1.241030E+02 1.225438E+02 1.216047E+02 1.206793E+02 + 1.535439E+02 1.509621E+02 1.491280E+02 1.474157E+02 1.462141E+02 + 1.873570E+02 1.838801E+02 1.813287E+02 1.793373E+02 1.771043E+02 + 2.281691E+02 2.243600E+02 2.210801E+02 2.180629E+02 2.153514E+02 + 2.783911E+02 2.738803E+02 2.695221E+02 2.653157E+02 2.616667E+02 + 3.387770E+02 3.341035E+02 3.282717E+02 3.229210E+02 3.177201E+02 + 4.133569E+02 4.069608E+02 4.005721E+02 3.932037E+02 3.862517E+02 + 5.032554E+02 4.953601E+02 4.870689E+02 4.781396E+02 4.693910E+02 + 6.115155E+02 6.040292E+02 5.930576E+02 5.822730E+02 5.718792E+02 + 7.426738E+02 7.331298E+02 7.212438E+02 7.085509E+02 6.955174E+02 + 9.016869E+02 8.910581E+02 8.753416E+02 8.596565E+02 8.466660E+02 + 1.090032E+03 1.078798E+03 1.060502E+03 1.041920E+03 1.024025E+03 + 1.313977E+03 1.299204E+03 1.282366E+03 1.261634E+03 1.238751E+03 + 1.577058E+03 1.558367E+03 1.539902E+03 1.514425E+03 1.493005E+03 + 1.878408E+03 1.858147E+03 1.841412E+03 1.813106E+03 1.785915E+03 + 2.222463E+03 2.203283E+03 2.183386E+03 2.158978E+03 2.127578E+03 + 2.609055E+03 2.588690E+03 2.573159E+03 2.547316E+03 2.507777E+03 + 3.033365E+03 3.014629E+03 3.002536E+03 2.967248E+03 2.942197E+03 + 3.501136E+03 3.488592E+03 3.471772E+03 3.440412E+03 3.418771E+03 + 3.993608E+03 3.985198E+03 3.968454E+03 3.949549E+03 3.913869E+03 + 4.505729E+03 4.505149E+03 4.475135E+03 4.446993E+03 4.422470E+03 + 5.012805E+03 4.993257E+03 4.980167E+03 4.917035E+03 4.908875E+03 + 5.485718E+03 5.440273E+03 5.426859E+03 5.370217E+03 5.361867E+03 + 5.927414E+03 5.845993E+03 5.830904E+03 5.790734E+03 5.749996E+03 + 6.281369E+03 6.188472E+03 6.149181E+03 6.124249E+03 6.078450E+03 + 6.519000E+03 6.471631E+03 6.438712E+03 6.391694E+03 6.328767E+03 + 6.714464E+03 6.687066E+03 6.601354E+03 6.574702E+03 6.522402E+03 + 6.850185E+03 6.809620E+03 6.724498E+03 6.668103E+03 6.605140E+03 + 6.849149E+03 6.827512E+03 6.748012E+03 6.662004E+03 6.590450E+03 + 6.767608E+03 6.706512E+03 6.638671E+03 6.508269E+03 6.435628E+03 + 6.559927E+03 6.494783E+03 6.406904E+03 6.298809E+03 6.274168E+03 + 6.326838E+03 6.291393E+03 6.248708E+03 6.147228E+03 1.100140E+04 + 7.746787E+00 7.900358E+00 8.123690E+00 8.618246E+00 9.407369E+00 + 9.298954E+00 9.386533E+00 9.638500E+00 1.012858E+01 1.105407E+01 + 1.122375E+01 1.119909E+01 1.150867E+01 1.194506E+01 1.295243E+01 + 1.357348E+01 1.343867E+01 1.376079E+01 1.414593E+01 1.508543E+01 + 1.643670E+01 1.607856E+01 1.639467E+01 1.677545E+01 1.777864E+01 + 1.993641E+01 1.937532E+01 1.957928E+01 1.998565E+01 2.092190E+01 + 2.415066E+01 2.328821E+01 2.339947E+01 2.383095E+01 2.463216E+01 + 2.925138E+01 2.813160E+01 2.796131E+01 2.839205E+01 2.925011E+01 + 3.538617E+01 3.411022E+01 3.329363E+01 3.372529E+01 3.481107E+01 + 4.282805E+01 4.123794E+01 3.997896E+01 4.021478E+01 4.124798E+01 + 5.181558E+01 4.982588E+01 4.800840E+01 4.824066E+01 4.899489E+01 + 6.231174E+01 5.970938E+01 5.792893E+01 5.771317E+01 5.828809E+01 + 7.513922E+01 7.179066E+01 7.025008E+01 6.922925E+01 6.949189E+01 + 9.066351E+01 8.657752E+01 8.420811E+01 8.321389E+01 8.301085E+01 + 1.089746E+02 1.043266E+02 1.016836E+02 9.939981E+01 9.874939E+01 + 1.310835E+02 1.257908E+02 1.223983E+02 1.193412E+02 1.182778E+02 + 1.578213E+02 1.513956E+02 1.477038E+02 1.440399E+02 1.421459E+02 + 1.900615E+02 1.829548E+02 1.778240E+02 1.734909E+02 1.702565E+02 + 2.296517E+02 2.203406E+02 2.142567E+02 2.083909E+02 2.051679E+02 + 2.760353E+02 2.645451E+02 2.573047E+02 2.502973E+02 2.457656E+02 + 3.333425E+02 3.193061E+02 3.097500E+02 2.998483E+02 2.943544E+02 + 4.023887E+02 3.868111E+02 3.739572E+02 3.606464E+02 3.543354E+02 + 4.849105E+02 4.697889E+02 4.514600E+02 4.356145E+02 4.254616E+02 + 5.868965E+02 5.667052E+02 5.436600E+02 5.262234E+02 5.118039E+02 + 7.145990E+02 6.910403E+02 6.615226E+02 6.384349E+02 6.180411E+02 + 8.716147E+02 8.428035E+02 8.044659E+02 7.762954E+02 7.508385E+02 + 1.072848E+03 1.030897E+03 9.859771E+02 9.439509E+02 9.113791E+02 + 1.311824E+03 1.256086E+03 1.206042E+03 1.156524E+03 1.110210E+03 + 1.610839E+03 1.533606E+03 1.478913E+03 1.412483E+03 1.354021E+03 + 1.981645E+03 1.876222E+03 1.812433E+03 1.738883E+03 1.658451E+03 + 2.420181E+03 2.299917E+03 2.217846E+03 2.130109E+03 2.029071E+03 + 2.967544E+03 2.825741E+03 2.721786E+03 2.601532E+03 2.490567E+03 + 3.630439E+03 3.478015E+03 3.329732E+03 3.189430E+03 3.038236E+03 + 4.461586E+03 4.239805E+03 4.067078E+03 3.906774E+03 3.726932E+03 + 5.446964E+03 5.169533E+03 4.954942E+03 4.765099E+03 4.529395E+03 + 6.622430E+03 6.307654E+03 6.011858E+03 5.778261E+03 5.546926E+03 + 8.036608E+03 7.631979E+03 7.279630E+03 7.008674E+03 6.726911E+03 + 9.689795E+03 9.230491E+03 8.753566E+03 8.447642E+03 8.127399E+03 + 1.153723E+04 1.102863E+04 1.049253E+04 1.007739E+04 9.726112E+03 + 1.359888E+04 1.302747E+04 1.249105E+04 1.197452E+04 1.155223E+04 + 1.576996E+04 1.520138E+04 1.459965E+04 1.398435E+04 1.350280E+04 + 1.809603E+04 1.734443E+04 1.679108E+04 1.610560E+04 1.556377E+04 + 2.032166E+04 1.960012E+04 1.893718E+04 1.825832E+04 1.775117E+04 + 2.242051E+04 2.167015E+04 2.097840E+04 2.037554E+04 1.972742E+04 + 2.412675E+04 2.359395E+04 2.282131E+04 2.215244E+04 2.160050E+04 + 2.569151E+04 2.514396E+04 2.442498E+04 2.373542E+04 2.327839E+04 + 2.691805E+04 2.630924E+04 2.571585E+04 2.508398E+04 2.463231E+04 + 2.772407E+04 2.724292E+04 2.668264E+04 2.612645E+04 2.549583E+04 + 2.798433E+04 2.753970E+04 2.705499E+04 2.644151E+04 2.580617E+04 + 2.758552E+04 2.741126E+04 2.682487E+04 2.626559E+04 2.582829E+04 + 2.711957E+04 2.675314E+04 2.624737E+04 2.574418E+04 2.524619E+04 + 2.609657E+04 2.570163E+04 2.509248E+04 2.462002E+04 2.432076E+04 + 2.475466E+04 2.437217E+04 2.392036E+04 2.329272E+04 2.306493E+04 + 2.306258E+04 2.271539E+04 2.233454E+04 2.198676E+04 2.197108E+04 + 2.123836E+04 2.107884E+04 2.108799E+04 2.081100E+04 2.076365E+04 + 1.970281E+04 1.978644E+04 1.976493E+04 1.946733E+04 1.937369E+04 + 1.841708E+04 1.834828E+04 1.831103E+04 1.800606E+04 1.798486E+04 + 1.708717E+04 1.699704E+04 1.686078E+04 1.673340E+04 1.679617E+04 + 1.598641E+04 1.593630E+04 1.590885E+04 1.581841E+04 9.969210E+36 + 8.063920E+01 7.780057E+01 7.580362E+01 7.917515E+01 8.533776E+01 + 9.548806E+01 9.071916E+01 8.796063E+01 9.005442E+01 9.771234E+01 + 1.138203E+02 1.070190E+02 1.035303E+02 1.040569E+02 1.112005E+02 + 1.364670E+02 1.270019E+02 1.216928E+02 1.217382E+02 1.277408E+02 + 1.637517E+02 1.499563E+02 1.431400E+02 1.431324E+02 1.456262E+02 + 1.961409E+02 1.817821E+02 1.698525E+02 1.648262E+02 1.690966E+02 + 2.373606E+02 2.150886E+02 2.013849E+02 1.935630E+02 1.989745E+02 + 2.851345E+02 2.581882E+02 2.405890E+02 2.290395E+02 2.311340E+02 + 3.451698E+02 3.118553E+02 2.854088E+02 2.707128E+02 2.711434E+02 + 4.135328E+02 3.719544E+02 3.411092E+02 3.211702E+02 3.203128E+02 + 5.006827E+02 4.485359E+02 4.092789E+02 3.844001E+02 3.743035E+02 + 5.920962E+02 5.329699E+02 4.897226E+02 4.558906E+02 4.420132E+02 + 7.027535E+02 6.290732E+02 5.792371E+02 5.370027E+02 5.215331E+02 + 8.385943E+02 7.558585E+02 6.935124E+02 6.404949E+02 6.182091E+02 + 9.939579E+02 8.988435E+02 8.362862E+02 7.563797E+02 7.281665E+02 + 1.178145E+03 1.075837E+03 1.002496E+03 9.014803E+02 8.691769E+02 + 1.402366E+03 1.282329E+03 1.191405E+03 1.082998E+03 1.032155E+03 + 1.678665E+03 1.538120E+03 1.403644E+03 1.297458E+03 1.223289E+03 + 2.014466E+03 1.846628E+03 1.687288E+03 1.542850E+03 1.471595E+03 + 2.402036E+03 2.184151E+03 2.005595E+03 1.843625E+03 1.745965E+03 + 2.860307E+03 2.613456E+03 2.401285E+03 2.201094E+03 2.080706E+03 + 3.420303E+03 3.128219E+03 2.868998E+03 2.650946E+03 2.478754E+03 + 4.097590E+03 3.782087E+03 3.447259E+03 3.187459E+03 2.978918E+03 + 4.947282E+03 4.548186E+03 4.136784E+03 3.840349E+03 3.597881E+03 + 6.049164E+03 5.546900E+03 5.047244E+03 4.660790E+03 4.343086E+03 + 7.400843E+03 6.846995E+03 6.203236E+03 5.722806E+03 5.308545E+03 + 9.193686E+03 8.394303E+03 7.639125E+03 7.010006E+03 6.495509E+03 + 1.134838E+04 1.036209E+04 9.454397E+03 8.657581E+03 8.035474E+03 + 1.405336E+04 1.282086E+04 1.173644E+04 1.068466E+04 9.882698E+03 + 1.742705E+04 1.577121E+04 1.448810E+04 1.327215E+04 1.226664E+04 + 2.143569E+04 1.944948E+04 1.788457E+04 1.639562E+04 1.506447E+04 + 2.635398E+04 2.399984E+04 2.202296E+04 2.013903E+04 1.853456E+04 + 3.218791E+04 2.959195E+04 2.708617E+04 2.476631E+04 2.268554E+04 + 3.933596E+04 3.607755E+04 3.295443E+04 3.022348E+04 2.795490E+04 + 4.816931E+04 4.383276E+04 4.047752E+04 3.695767E+04 3.379174E+04 + 5.745246E+04 5.277153E+04 4.852088E+04 4.449276E+04 4.115469E+04 + 6.875490E+04 6.284445E+04 5.780645E+04 5.339295E+04 4.945538E+04 + 8.052006E+04 7.373104E+04 6.746937E+04 6.301169E+04 5.839380E+04 + 9.222362E+04 8.452400E+04 7.833769E+04 7.338690E+04 6.754176E+04 + 1.029512E+05 9.518767E+04 8.914125E+04 8.310053E+04 7.745955E+04 + 1.101561E+05 1.044494E+05 9.801314E+04 9.263917E+04 8.602433E+04 + 1.170254E+05 1.102658E+05 1.053356E+05 9.919730E+04 9.364716E+04 + 1.210771E+05 1.155528E+05 1.098327E+05 1.040652E+05 1.000870E+05 + 1.230125E+05 1.161881E+05 1.113104E+05 1.070290E+05 1.033714E+05 + 1.213575E+05 1.151349E+05 1.110559E+05 1.071288E+05 1.038225E+05 + 1.165742E+05 1.125407E+05 1.078451E+05 1.051995E+05 1.021502E+05 + 1.092215E+05 1.074971E+05 1.039193E+05 1.016525E+05 1.001242E+05 + 1.019654E+05 1.008162E+05 9.846701E+04 9.668049E+04 9.563994E+04 + 9.392846E+04 9.303852E+04 9.250863E+04 9.011610E+04 8.956778E+04 + 8.529693E+04 8.499726E+04 8.482611E+04 8.349693E+04 8.272668E+04 + 7.681219E+04 7.658900E+04 7.674182E+04 7.610108E+04 7.521830E+04 + 6.826871E+04 6.852157E+04 6.904355E+04 6.846312E+04 6.790189E+04 + 6.017374E+04 6.101779E+04 6.166757E+04 6.094503E+04 6.072407E+04 + 5.283373E+04 5.403061E+04 5.431861E+04 5.391298E+04 5.422140E+04 + 4.653458E+04 4.761334E+04 4.816481E+04 4.826954E+04 4.821659E+04 + 4.126646E+04 4.229223E+04 4.253531E+04 4.259144E+04 4.244350E+04 + 3.663427E+04 3.748407E+04 3.753473E+04 3.758782E+04 3.752608E+04 + 3.253302E+04 3.312207E+04 3.301803E+04 3.304737E+04 3.319898E+04 + 2.966845E+04 3.007247E+04 2.992129E+04 3.008314E+04 9.969210E+36 + 5.357223E+02 5.027992E+02 5.064635E+02 5.076067E+02 5.929885E+02 + 6.227445E+02 5.840763E+02 5.525380E+02 5.304971E+02 6.115645E+02 + 7.092682E+02 6.627159E+02 6.388048E+02 5.800476E+02 6.473557E+02 + 8.397147E+02 7.712167E+02 7.197502E+02 6.729768E+02 7.102749E+02 + 9.917082E+02 8.929078E+02 8.170365E+02 7.797748E+02 7.642949E+02 + 1.140690E+03 1.034702E+03 9.356750E+02 8.843356E+02 8.787398E+02 + 1.360257E+03 1.181545E+03 1.078172E+03 1.049505E+03 1.003882E+03 + 1.629149E+03 1.423947E+03 1.279579E+03 1.212690E+03 1.151856E+03 + 1.999784E+03 1.679540E+03 1.446239E+03 1.383950E+03 1.333071E+03 + 2.366527E+03 1.983928E+03 1.705090E+03 1.602167E+03 1.565575E+03 + 2.777957E+03 2.346826E+03 2.068132E+03 1.894074E+03 1.769464E+03 + 3.202050E+03 2.751715E+03 2.444662E+03 2.228274E+03 2.068996E+03 + 3.687358E+03 3.104765E+03 2.854423E+03 2.483209E+03 2.387499E+03 + 4.318230E+03 3.706247E+03 3.311809E+03 2.864373E+03 2.782183E+03 + 5.067181E+03 4.436635E+03 3.916680E+03 3.413216E+03 3.298783E+03 + 6.044434E+03 5.248358E+03 4.653676E+03 4.039670E+03 3.918213E+03 + 7.041104E+03 6.150013E+03 5.298015E+03 4.803281E+03 4.645739E+03 + 8.391127E+03 7.353905E+03 6.242265E+03 5.842783E+03 5.507975E+03 + 1.009042E+04 8.813758E+03 7.546207E+03 6.966192E+03 6.634234E+03 + 1.198592E+04 1.039428E+04 9.014139E+03 8.428946E+03 7.927288E+03 + 1.423629E+04 1.245694E+04 1.093201E+04 1.019208E+04 9.508221E+03 + 1.684833E+04 1.477375E+04 1.322135E+04 1.231865E+04 1.142470E+04 + 2.021239E+04 1.742584E+04 1.593982E+04 1.470912E+04 1.379569E+04 + 2.428438E+04 2.065501E+04 1.933618E+04 1.783900E+04 1.669001E+04 + 2.966801E+04 2.522503E+04 2.361453E+04 2.178729E+04 2.027789E+04 + 3.669207E+04 3.164252E+04 2.896724E+04 2.673322E+04 2.471924E+04 + 4.534318E+04 3.906787E+04 3.557953E+04 3.284987E+04 3.020178E+04 + 5.605986E+04 4.974796E+04 4.387105E+04 4.090696E+04 3.808413E+04 + 7.092647E+04 6.151713E+04 5.385266E+04 5.025765E+04 4.674249E+04 + 8.744075E+04 7.598477E+04 6.586949E+04 6.165504E+04 5.729139E+04 + 1.074909E+05 9.517064E+04 8.161263E+04 7.548063E+04 7.070637E+04 + 1.315345E+05 1.169230E+05 9.906505E+04 9.343690E+04 8.642160E+04 + 1.604509E+05 1.428002E+05 1.236626E+05 1.135211E+05 1.051753E+05 + 1.937157E+05 1.734237E+05 1.500129E+05 1.370040E+05 1.288441E+05 + 2.352303E+05 2.097309E+05 1.833272E+05 1.650363E+05 1.546715E+05 + 2.735353E+05 2.474684E+05 2.181528E+05 1.935535E+05 1.835791E+05 + 3.141756E+05 2.844212E+05 2.550964E+05 2.272781E+05 2.145693E+05 + 3.462409E+05 3.198415E+05 2.921092E+05 2.597634E+05 2.471277E+05 + 3.802750E+05 3.479834E+05 3.256791E+05 2.943182E+05 2.724138E+05 + 3.985104E+05 3.650454E+05 3.475591E+05 3.185492E+05 2.960147E+05 + 3.981610E+05 3.714896E+05 3.556123E+05 3.362891E+05 3.124240E+05 + 3.949445E+05 3.644723E+05 3.561854E+05 3.406325E+05 3.195055E+05 + 3.756297E+05 3.534900E+05 3.434289E+05 3.318704E+05 3.210570E+05 + 3.455907E+05 3.311867E+05 3.209226E+05 3.186031E+05 3.113196E+05 + 3.135620E+05 3.085043E+05 2.999239E+05 2.973216E+05 2.939871E+05 + 2.807182E+05 2.807449E+05 2.729112E+05 2.694347E+05 2.683482E+05 + 2.477827E+05 2.532735E+05 2.482267E+05 2.435823E+05 2.431806E+05 + 2.204212E+05 2.252111E+05 2.235761E+05 2.162270E+05 2.146958E+05 + 1.948267E+05 1.985464E+05 1.978783E+05 1.899839E+05 1.883158E+05 + 1.700516E+05 1.723529E+05 1.727004E+05 1.662570E+05 1.643757E+05 + 1.468076E+05 1.476481E+05 1.475810E+05 1.431801E+05 1.420861E+05 + 1.248716E+05 1.254181E+05 1.244496E+05 1.214477E+05 1.222749E+05 + 1.050027E+05 1.054807E+05 1.044772E+05 1.030688E+05 1.063192E+05 + 8.748581E+04 8.777851E+04 8.768920E+04 8.901262E+04 9.244377E+04 + 7.287845E+04 7.346101E+04 7.411136E+04 7.700395E+04 7.954373E+04 + 6.065337E+04 6.220011E+04 6.361595E+04 6.631178E+04 6.821147E+04 + 5.143997E+04 5.313319E+04 5.449175E+04 5.672134E+04 5.882829E+04 + 4.414183E+04 4.519900E+04 4.662375E+04 4.886251E+04 5.111426E+04 + 3.915216E+04 3.989077E+04 4.129662E+04 4.368794E+04 9.969210E+36 + 2.181768E+03 2.470829E+03 2.677394E+03 2.372116E+03 2.569285E+03 + 2.603394E+03 2.472920E+03 2.678165E+03 2.375015E+03 2.575174E+03 + 2.782628E+03 2.474751E+03 2.678633E+03 2.377756E+03 2.580976E+03 + 2.976945E+03 2.476247E+03 2.678720E+03 2.380296E+03 2.586665E+03 + 3.186579E+03 2.678251E+03 2.678424E+03 2.382714E+03 2.592417E+03 + 3.294590E+03 2.713838E+03 2.541963E+03 2.384742E+03 2.597820E+03 + 3.696854E+03 3.053667E+03 2.668188E+03 2.658944E+03 2.603025E+03 + 4.145684E+03 3.433525E+03 2.809520E+03 2.733659E+03 2.608376E+03 + 4.714998E+03 3.591492E+03 2.940319E+03 2.813404E+03 2.666182E+03 + 5.077102E+03 4.104423E+03 3.303595E+03 3.154420E+03 2.984471E+03 + 5.653829E+03 4.793352E+03 3.894014E+03 3.524794E+03 3.308007E+03 + 6.399163E+03 5.553908E+03 4.555721E+03 3.925465E+03 3.674960E+03 + 7.333942E+03 6.060288E+03 5.319966E+03 4.483217E+03 4.052447E+03 + 8.647365E+03 7.003181E+03 5.891613E+03 5.196227E+03 4.749015E+03 + 1.018825E+04 8.313932E+03 7.067359E+03 6.253904E+03 5.708869E+03 + 1.200762E+04 9.548410E+03 8.475857E+03 7.525366E+03 6.862049E+03 + 1.384367E+04 1.142589E+04 9.861319E+03 9.049215E+03 8.243140E+03 + 1.641109E+04 1.353722E+04 1.186917E+04 1.087437E+04 9.896289E+03 + 1.945158E+04 1.623184E+04 1.428045E+04 1.306444E+04 1.187913E+04 + 2.304180E+04 1.944815E+04 1.717065E+04 1.568733E+04 1.425286E+04 + 2.624512E+04 2.327995E+04 2.062972E+04 1.882376E+04 1.709039E+04 + 3.135285E+04 2.785375E+04 2.477567E+04 2.258084E+04 2.035749E+04 + 3.747045E+04 3.246011E+04 2.976354E+04 2.710001E+04 2.451207E+04 + 4.469546E+04 3.922587E+04 3.593026E+04 3.269514E+04 2.970844E+04 + 5.459432E+04 4.791094E+04 4.389167E+04 3.994355E+04 3.628418E+04 + 6.795845E+04 5.893341E+04 5.404094E+04 4.920888E+04 4.454040E+04 + 8.417455E+04 7.265546E+04 6.671638E+04 6.080354E+04 5.488551E+04 + 1.043541E+05 9.274304E+04 8.242198E+04 7.520014E+04 6.828177E+04 + 1.345083E+05 1.147493E+05 1.017195E+05 9.292836E+04 8.444723E+04 + 1.674118E+05 1.416818E+05 1.253096E+05 1.146585E+05 1.042993E+05 + 2.076327E+05 1.744088E+05 1.539705E+05 1.411527E+05 1.285647E+05 + 2.559734E+05 2.136464E+05 1.883950E+05 1.731209E+05 1.579397E+05 + 3.127158E+05 2.598344E+05 2.290960E+05 2.111479E+05 1.930457E+05 + 3.754960E+05 3.166152E+05 2.762233E+05 2.555483E+05 2.343001E+05 + 4.477252E+05 3.891093E+05 3.291932E+05 3.060809E+05 2.816910E+05 + 5.231706E+05 4.590839E+05 3.860936E+05 3.613609E+05 3.342635E+05 + 5.955857E+05 5.177487E+05 4.433039E+05 4.184952E+05 3.897496E+05 + 6.482037E+05 5.843871E+05 5.127464E+05 4.725669E+05 4.439792E+05 + 6.935418E+05 6.369070E+05 5.592997E+05 5.168701E+05 4.908644E+05 + 7.111068E+05 6.665643E+05 6.101370E+05 5.445496E+05 5.236219E+05 + 6.979413E+05 6.679474E+05 6.222490E+05 5.608919E+05 5.366814E+05 + 6.658123E+05 6.419817E+05 6.084175E+05 5.585154E+05 5.258864E+05 + 6.206467E+05 5.943485E+05 5.722499E+05 5.361087E+05 5.077957E+05 + 5.629877E+05 5.329318E+05 5.202212E+05 4.963240E+05 4.715733E+05 + 4.968373E+05 4.687632E+05 4.597554E+05 4.453789E+05 4.311076E+05 + 4.289920E+05 4.084379E+05 3.973978E+05 3.889013E+05 3.829345E+05 + 3.642894E+05 3.494733E+05 3.378327E+05 3.352704E+05 3.323911E+05 + 3.057724E+05 2.948470E+05 2.838666E+05 2.846929E+05 2.834966E+05 + 2.546672E+05 2.464375E+05 2.366395E+05 2.390288E+05 2.425715E+05 + 2.107711E+05 2.041943E+05 1.961552E+05 2.009183E+05 2.050280E+05 + 1.731057E+05 1.670193E+05 1.628789E+05 1.691103E+05 1.720893E+05 + 1.412135E+05 1.354645E+05 1.370830E+05 1.418449E+05 1.436185E+05 + 1.146539E+05 1.098854E+05 1.153070E+05 1.183876E+05 1.192543E+05 + 9.272160E+04 9.256713E+04 9.660424E+04 9.845259E+04 9.867185E+04 + 7.475333E+04 7.809972E+04 8.069259E+04 8.167083E+04 8.314116E+04 + 6.253423E+04 6.570594E+04 6.728221E+04 6.790071E+04 7.221135E+04 + 5.318993E+04 5.523113E+04 5.608903E+04 5.892898E+04 6.230131E+04 + 4.518513E+04 4.643554E+04 4.735005E+04 5.083712E+04 5.338914E+04 + 3.984073E+04 4.070238E+04 4.219787E+04 4.508232E+04 9.969210E+36 + +Band: 1, gas: 6, k-terms: 1 + 5.360114E-02 5.926316E-02 6.728629E-02 7.722693E-02 8.860234E-02 + 5.528394E-02 6.074592E-02 6.862796E-02 7.846222E-02 8.974959E-02 + 5.723302E-02 6.246908E-02 7.019036E-02 7.990226E-02 9.108770E-02 + 5.948134E-02 6.446453E-02 7.200566E-02 8.157906E-02 9.264311E-02 + 6.206576E-02 6.676464E-02 7.411323E-02 8.353258E-02 9.444735E-02 + 6.501997E-02 6.940652E-02 7.654428E-02 8.579329E-02 9.654010E-02 + 6.838335E-02 7.243209E-02 7.934330E-02 8.840416E-02 9.896832E-02 + 7.219374E-02 7.588434E-02 8.255797E-02 9.139343E-02 1.017851E-01 + 7.649106E-02 7.981536E-02 8.624669E-02 9.485072E-02 1.050638E-01 + 8.132797E-02 8.436113E-02 9.057791E-02 9.901464E-02 1.090739E-01 + 8.673861E-02 8.969076E-02 9.582781E-02 1.042096E-01 1.141837E-01 + 9.273124E-02 9.579847E-02 1.019952E-01 1.104204E-01 1.203690E-01 + 9.931342E-02 1.025204E-01 1.088681E-01 1.173662E-01 1.273026E-01 + 1.064683E-01 1.099046E-01 1.164265E-01 1.250091E-01 1.349370E-01 + 1.142684E-01 1.179934E-01 1.247105E-01 1.333895E-01 1.433144E-01 + 1.227588E-01 1.267991E-01 1.337202E-01 1.425020E-01 1.524277E-01 + 1.319990E-01 1.363943E-01 1.435423E-01 1.524369E-01 1.623850E-01 + 1.420246E-01 1.468042E-01 1.541993E-01 1.632234E-01 1.732123E-01 + 1.528576E-01 1.580342E-01 1.656887E-01 1.748576E-01 1.849065E-01 + 1.645119E-01 1.701013E-01 1.780316E-01 1.873660E-01 1.974999E-01 + 1.770047E-01 1.830254E-01 1.912519E-01 2.007770E-01 2.110254E-01 + 1.903046E-01 1.967598E-01 2.052949E-01 2.150330E-01 2.254196E-01 + 2.043367E-01 2.112080E-01 2.200527E-01 2.300205E-01 2.405728E-01 + 2.187598E-01 2.259081E-01 2.349933E-01 2.451697E-01 2.558975E-01 + 2.330368E-01 2.401334E-01 2.492778E-01 2.595809E-01 2.704674E-01 + 2.473852E-01 2.541636E-01 2.632156E-01 2.735726E-01 2.846002E-01 + 2.621317E-01 2.684172E-01 2.772709E-01 2.876235E-01 2.987694E-01 + 2.773692E-01 2.829969E-01 2.915463E-01 3.018264E-01 3.130507E-01 + 2.930436E-01 2.979770E-01 3.061240E-01 3.162618E-01 3.275139E-01 + 3.091877E-01 3.132077E-01 3.209494E-01 3.308636E-01 3.420809E-01 + 3.257830E-01 3.286850E-01 3.358154E-01 3.455195E-01 3.566427E-01 + 3.427509E-01 3.443737E-01 3.507390E-01 3.599998E-01 3.709901E-01 + 3.599787E-01 3.601297E-01 3.655842E-01 3.743316E-01 3.850498E-01 + 3.772942E-01 3.758117E-01 3.802952E-01 3.884488E-01 3.988193E-01 + 3.945749E-01 3.913505E-01 3.947495E-01 4.022195E-01 4.121658E-01 + 4.116945E-01 4.065867E-01 4.088057E-01 4.155061E-01 4.249557E-01 + 4.285720E-01 4.213610E-01 4.222545E-01 4.281065E-01 4.369996E-01 + 4.451356E-01 4.356329E-01 4.350706E-01 4.399641E-01 4.482110E-01 + 4.611609E-01 4.492732E-01 4.471898E-01 4.510717E-01 4.586264E-01 + 4.763835E-01 4.621331E-01 4.585374E-01 4.614037E-01 4.682526E-01 + 4.903866E-01 4.739972E-01 4.690231E-01 4.709507E-01 4.771342E-01 + 5.031402E-01 4.848123E-01 4.785837E-01 4.796482E-01 4.852099E-01 + 5.148607E-01 4.946592E-01 4.872227E-01 4.874560E-01 4.924169E-01 + 5.256693E-01 5.036089E-01 4.949838E-01 4.944038E-01 4.987787E-01 + 5.355407E-01 5.116794E-01 5.019115E-01 5.005534E-01 5.043694E-01 + 5.441777E-01 5.187678E-01 5.080156E-01 5.059831E-01 5.093099E-01 + 5.509380E-01 5.245992E-01 5.132341E-01 5.107597E-01 5.137470E-01 + 5.561458E-01 5.293536E-01 5.176614E-01 5.149252E-01 5.176888E-01 + 5.604092E-01 5.333512E-01 5.214530E-01 5.185359E-01 5.211313E-01 + 5.620943E-01 5.358503E-01 5.243770E-01 5.216704E-01 5.243461E-01 + 5.568091E-01 5.348359E-01 5.258239E-01 5.245763E-01 5.281119E-01 + 5.497004E-01 5.329572E-01 5.270188E-01 5.276206E-01 5.322597E-01 + 5.440303E-01 5.318283E-01 5.285944E-01 5.308349E-01 5.364398E-01 + 5.397589E-01 5.314535E-01 5.305660E-01 5.342310E-01 5.406607E-01 + 5.368368E-01 5.318038E-01 5.329020E-01 5.377660E-01 5.448742E-01 + 5.351225E-01 5.327781E-01 5.355184E-01 5.413570E-01 5.490045E-01 + 5.343287E-01 5.342645E-01 5.383963E-01 5.450462E-01 5.531219E-01 + 5.343473E-01 5.361416E-01 5.413974E-01 5.486890E-01 5.570730E-01 + 5.347407E-01 5.375071E-01 5.433428E-01 5.509577E-01 5.594799E-01 + +Band: 1, gas: 12, k-terms: 1 + 7.118932E-05 6.743458E-05 6.964579E-05 7.893087E-05 9.457918E-05 + 7.941684E-05 7.428597E-05 7.557816E-05 8.419994E-05 9.943517E-05 + 8.842777E-05 8.184345E-05 8.222947E-05 9.018554E-05 1.050511E-04 + 9.826852E-05 9.019847E-05 8.959010E-05 9.702234E-05 1.115448E-04 + 1.089125E-04 9.938534E-05 9.787084E-05 1.048513E-04 1.190575E-04 + 1.205657E-04 1.095466E-04 1.072418E-04 1.138166E-04 1.277258E-04 + 1.333789E-04 1.208738E-04 1.178835E-04 1.240961E-04 1.377216E-04 + 1.475271E-04 1.335927E-04 1.299879E-04 1.358788E-04 1.492290E-04 + 1.631420E-04 1.479110E-04 1.437723E-04 1.493898E-04 1.624730E-04 + 1.798876E-04 1.638720E-04 1.594826E-04 1.650435E-04 1.779617E-04 + 1.974186E-04 1.814218E-04 1.773968E-04 1.833701E-04 1.963368E-04 + 2.162038E-04 2.009536E-04 1.978361E-04 2.045741E-04 2.176538E-04 + 2.374562E-04 2.231495E-04 2.210527E-04 2.285158E-04 2.414984E-04 + 2.617154E-04 2.483655E-04 2.472481E-04 2.552428E-04 2.678154E-04 + 2.892520E-04 2.768269E-04 2.765859E-04 2.848399E-04 2.966431E-04 + 3.203240E-04 3.087054E-04 3.091268E-04 3.172734E-04 3.279277E-04 + 3.549086E-04 3.440480E-04 3.449138E-04 3.525742E-04 3.617228E-04 + 3.930231E-04 3.828278E-04 3.838408E-04 3.906143E-04 3.979535E-04 + 4.346820E-04 4.249486E-04 4.257306E-04 4.312384E-04 4.365610E-04 + 4.796618E-04 4.701483E-04 4.703375E-04 4.742941E-04 4.775012E-04 + 5.276816E-04 5.181385E-04 5.174380E-04 5.196721E-04 5.207582E-04 + 5.784967E-04 5.686362E-04 5.668123E-04 5.672549E-04 5.662939E-04 + 6.319131E-04 6.214267E-04 6.183096E-04 6.169739E-04 6.140908E-04 + 6.885490E-04 6.767008E-04 6.720076E-04 6.689685E-04 6.644114E-04 + 7.499986E-04 7.352965E-04 7.284595E-04 7.237945E-04 7.179472E-04 + 8.164202E-04 7.976190E-04 7.880459E-04 7.816594E-04 7.747011E-04 + 8.870185E-04 8.637556E-04 8.508931E-04 8.425081E-04 8.343780E-04 + 9.621677E-04 9.335346E-04 9.172220E-04 9.064299E-04 8.969056E-04 + 1.041557E-03 1.007414E-03 9.869152E-04 9.736155E-04 9.623464E-04 + 1.125787E-03 1.085759E-03 1.060602E-03 1.044100E-03 1.030952E-03 + 1.215100E-03 1.168502E-03 1.138643E-03 1.118471E-03 1.102833E-03 + 1.309348E-03 1.255779E-03 1.220998E-03 1.196867E-03 1.178282E-03 + 1.408219E-03 1.347280E-03 1.307380E-03 1.279104E-03 1.257291E-03 + 1.511410E-03 1.442573E-03 1.397182E-03 1.364763E-03 1.339521E-03 + 1.618747E-03 1.541250E-03 1.489972E-03 1.453250E-03 1.424411E-03 + 1.729521E-03 1.642487E-03 1.584953E-03 1.543697E-03 1.511105E-03 + 1.843189E-03 1.745546E-03 1.681158E-03 1.635057E-03 1.598532E-03 + 1.958488E-03 1.849181E-03 1.777352E-03 1.726072E-03 1.685427E-03 + 2.072969E-03 1.951369E-03 1.871739E-03 1.814910E-03 1.770175E-03 + 2.183868E-03 2.049905E-03 1.962430E-03 1.900020E-03 1.851035E-03 + 2.287412E-03 2.141996E-03 2.047184E-03 1.979521E-03 1.926441E-03 + 2.382872E-03 2.226894E-03 2.125237E-03 2.052672E-03 1.995700E-03 + 2.471321E-03 2.305048E-03 2.196755E-03 2.119482E-03 2.058774E-03 + 2.553109E-03 2.376593E-03 2.261793E-03 2.179952E-03 2.115666E-03 + 2.627701E-03 2.441203E-03 2.320145E-03 2.233961E-03 2.166315E-03 + 2.692857E-03 2.497582E-03 2.371015E-03 2.280986E-03 2.210354E-03 + 2.744228E-03 2.543192E-03 2.412810E-03 2.319940E-03 2.246967E-03 + 2.784160E-03 2.579686E-03 2.446807E-03 2.351895E-03 2.277114E-03 + 2.816956E-03 2.609943E-03 2.475130E-03 2.378568E-03 2.302292E-03 + 2.831437E-03 2.627182E-03 2.493290E-03 2.396688E-03 2.319845E-03 + 2.795052E-03 2.610653E-03 2.486754E-03 2.395025E-03 2.320236E-03 + 2.740081E-03 2.579778E-03 2.468274E-03 2.382737E-03 2.310667E-03 + 2.689201E-03 2.549121E-03 2.448067E-03 2.367700E-03 2.297776E-03 + 2.642343E-03 2.518981E-03 2.426564E-03 2.350376E-03 2.282045E-03 + 2.599903E-03 2.489992E-03 2.404472E-03 2.331499E-03 2.264241E-03 + 2.561940E-03 2.462581E-03 2.382395E-03 2.311760E-03 2.245138E-03 + 2.526290E-03 2.435421E-03 2.359419E-03 2.290478E-03 2.224132E-03 + 2.493960E-03 2.409582E-03 2.336649E-03 2.268804E-03 2.202409E-03 + 2.475956E-03 2.394717E-03 2.323176E-03 2.255733E-03 2.189146E-03 + +Band: 2, gas: 1, k-terms: 14 + 2.091825E-06 2.251656E-06 2.523324E-06 2.982075E-06 3.692823E-06 + 2.556511E-06 2.752650E-06 3.086519E-06 3.649272E-06 4.519243E-06 + 3.124460E-06 3.365214E-06 3.775491E-06 4.465885E-06 5.531009E-06 + 3.818548E-06 4.113955E-06 4.618162E-06 5.465249E-06 6.769176E-06 + 4.666954E-06 5.029478E-06 5.649247E-06 6.688563E-06 8.285388E-06 + 5.703424E-06 6.148215E-06 6.910103E-06 8.184709E-06 1.014011E-05 + 6.970638E-06 7.516000E-06 8.452864E-06 1.001624E-05 1.241060E-05 + 8.519868E-06 9.188775E-06 1.034099E-05 1.225932E-05 1.519230E-05 + 1.041539E-05 1.123762E-05 1.265688E-05 1.501429E-05 1.861151E-05 + 1.275325E-05 1.377525E-05 1.554658E-05 1.847500E-05 2.292757E-05 + 1.567460E-05 1.697872E-05 1.925649E-05 2.298533E-05 2.860941E-05 + 1.933013E-05 2.104588E-05 2.405030E-05 2.889919E-05 3.612730E-05 + 2.386222E-05 2.615705E-05 3.014076E-05 3.647423E-05 4.579815E-05 + 2.948749E-05 3.257229E-05 3.785492E-05 4.612425E-05 5.815049E-05 + 3.649344E-05 4.064008E-05 4.763984E-05 5.843302E-05 7.393653E-05 + 4.523115E-05 5.077646E-05 6.001598E-05 7.406575E-05 9.399820E-05 + 5.614991E-05 6.358721E-05 7.576898E-05 9.403324E-05 1.196458E-04 + 6.982282E-05 7.979185E-05 9.584184E-05 1.195644E-04 1.524279E-04 + 8.696350E-05 1.002923E-04 1.213860E-04 1.521275E-04 1.941890E-04 + 1.085100E-04 1.262997E-04 1.539576E-04 1.937241E-04 2.474395E-04 + 1.357040E-04 1.594126E-04 1.956433E-04 2.469997E-04 3.155136E-04 + 1.700382E-04 2.014882E-04 2.487722E-04 3.149162E-04 4.020844E-04 + 2.131545E-04 2.545797E-04 3.158710E-04 4.005145E-04 5.108681E-04 + 2.651053E-04 3.181894E-04 3.958507E-04 5.020150E-04 6.392981E-04 + 3.228778E-04 3.871223E-04 4.810021E-04 6.090127E-04 7.740921E-04 + 3.877036E-04 4.624876E-04 5.724076E-04 7.227349E-04 9.166787E-04 + 4.632625E-04 5.488949E-04 6.757840E-04 8.502307E-04 1.075702E-03 + 5.525111E-04 6.496299E-04 7.948586E-04 9.955784E-04 1.256160E-03 + 6.594361E-04 7.690764E-04 9.346269E-04 1.164963E-03 1.465218E-03 + 7.878653E-04 9.110844E-04 1.099213E-03 1.362835E-03 1.707935E-03 + 9.420855E-04 1.080120E-03 1.293252E-03 1.594147E-03 1.989695E-03 + 1.127771E-03 1.282262E-03 1.523417E-03 1.866232E-03 2.318689E-03 + 1.351908E-03 1.524914E-03 1.797767E-03 2.187943E-03 2.705283E-03 + 1.622262E-03 1.816110E-03 2.124808E-03 2.568813E-03 3.159999E-03 + 1.947500E-03 2.164822E-03 2.513597E-03 3.018380E-03 3.693561E-03 + 2.338355E-03 2.582295E-03 2.975828E-03 3.549415E-03 4.321516E-03 + 2.808278E-03 3.080827E-03 3.523722E-03 4.175086E-03 5.059400E-03 + 3.372851E-03 3.676289E-03 4.174353E-03 4.914320E-03 5.931201E-03 + 4.053225E-03 4.391519E-03 4.953442E-03 5.798080E-03 6.975974E-03 + 4.875898E-03 5.255201E-03 5.894675E-03 6.867751E-03 8.246044E-03 + 5.875480E-03 6.307756E-03 7.046168E-03 8.184292E-03 9.819072E-03 + 7.094478E-03 7.592979E-03 8.457413E-03 9.806095E-03 1.176346E-02 + 8.581206E-03 9.161063E-03 1.018117E-02 1.178904E-02 1.413677E-02 + 1.039876E-02 1.107766E-02 1.228489E-02 1.420209E-02 1.701027E-02 + 1.262393E-02 1.342098E-02 1.485064E-02 1.713246E-02 2.048300E-02 + 1.534929E-02 1.629202E-02 1.799005E-02 2.071086E-02 2.471726E-02 + 1.869509E-02 1.982621E-02 2.186931E-02 2.514739E-02 2.998098E-02 + 2.279250E-02 2.416434E-02 2.664148E-02 3.061639E-02 3.648423E-02 + 2.778831E-02 2.945173E-02 3.245959E-02 3.728145E-02 4.440613E-02 + 3.393915E-02 3.602948E-02 3.977291E-02 4.573981E-02 5.453019E-02 + 4.187224E-02 4.478949E-02 4.990549E-02 5.788368E-02 6.945808E-02 + 5.197860E-02 5.633634E-02 6.361424E-02 7.463443E-02 9.031676E-02 + 6.482043E-02 7.126512E-02 8.154764E-02 9.672085E-02 1.179072E-01 + 8.132590E-02 9.067619E-02 1.050978E-01 1.258888E-01 1.544278E-01 + 1.025504E-01 1.159311E-01 1.359578E-01 1.642471E-01 2.025045E-01 + 1.298136E-01 1.486976E-01 1.761935E-01 2.143259E-01 2.651979E-01 + 1.651673E-01 1.915488E-01 2.290402E-01 2.801606E-01 3.474839E-01 + 2.106990E-01 2.470315E-01 2.976147E-01 3.655291E-01 4.537418E-01 + 2.519185E-01 2.970297E-01 3.590507E-01 4.416486E-01 5.481655E-01 + 6.734315E-06 9.609115E-06 1.443292E-05 2.186902E-05 3.276188E-05 + 8.248523E-06 1.177130E-05 1.766428E-05 2.673810E-05 3.999471E-05 + 1.010192E-05 1.441769E-05 2.162117E-05 3.269203E-05 4.882892E-05 + 1.237222E-05 1.765979E-05 2.646431E-05 3.996600E-05 5.961275E-05 + 1.515522E-05 2.163488E-05 3.239630E-05 4.886693E-05 7.278371E-05 + 1.855996E-05 2.649987E-05 3.964832E-05 5.973001E-05 8.883663E-05 + 2.273100E-05 3.246166E-05 4.852509E-05 7.300897E-05 1.084133E-04 + 2.784629E-05 3.977214E-05 5.939916E-05 8.926270E-05 1.323131E-04 + 3.414661E-05 4.879114E-05 7.280278E-05 1.092568E-04 1.616551E-04 + 4.218709E-05 6.041168E-05 9.009717E-05 1.349799E-04 1.992426E-04 + 5.306323E-05 7.641310E-05 1.140112E-04 1.703967E-04 2.505357E-04 + 6.792616E-05 9.853814E-05 1.471234E-04 2.191715E-04 3.204784E-04 + 8.755174E-05 1.278152E-04 1.908066E-04 2.831019E-04 4.112550E-04 + 1.132296E-04 1.661000E-04 2.476607E-04 3.657670E-04 5.274180E-04 + 1.468282E-04 2.161480E-04 3.215720E-04 4.723105E-04 6.755566E-04 + 1.905340E-04 2.809830E-04 4.166906E-04 6.080353E-04 8.620723E-04 + 2.478008E-04 3.656927E-04 5.398919E-04 7.817550E-04 1.097961E-03 + 3.227423E-04 4.760422E-04 6.987370E-04 1.003055E-03 1.394674E-03 + 4.202613E-04 6.185242E-04 9.018059E-04 1.282204E-03 1.764509E-03 + 5.472117E-04 8.024309E-04 1.160768E-03 1.633276E-03 2.225046E-03 + 7.127744E-04 1.039843E-03 1.490497E-03 2.074634E-03 2.799245E-03 + 9.263857E-04 1.342827E-03 1.905277E-03 2.624584E-03 3.512078E-03 + 1.197454E-03 1.722249E-03 2.418971E-03 3.301441E-03 4.391477E-03 + 1.510813E-03 2.156617E-03 3.004751E-03 4.076706E-03 5.410997E-03 + 1.812656E-03 2.574228E-03 3.573765E-03 4.845622E-03 6.448630E-03 + 2.103714E-03 2.977517E-03 4.132160E-03 5.618551E-03 7.521106E-03 + 2.410188E-03 3.402370E-03 4.727466E-03 6.459668E-03 8.709857E-03 + 2.744818E-03 3.865307E-03 5.382852E-03 7.399230E-03 1.005958E-02 + 3.124596E-03 4.390168E-03 6.131586E-03 8.488099E-03 1.163315E-02 + 3.559052E-03 4.990943E-03 6.996165E-03 9.758119E-03 1.347226E-02 + 4.058970E-03 5.682123E-03 7.998707E-03 1.124078E-02 1.561136E-02 + 4.643355E-03 6.489649E-03 9.177845E-03 1.298603E-02 1.811948E-02 + 5.336750E-03 7.448122E-03 1.058258E-02 1.505500E-02 2.108207E-02 + 6.165673E-03 8.593211E-03 1.225990E-02 1.750553E-02 2.458033E-02 + 7.155486E-03 9.957297E-03 1.424435E-02 2.038554E-02 2.868872E-02 + 8.343142E-03 1.158184E-02 1.658604E-02 2.376815E-02 3.351887E-02 + 9.766129E-03 1.349542E-02 1.931683E-02 2.770566E-02 3.914755E-02 + 1.146627E-02 1.574471E-02 2.249608E-02 3.228523E-02 4.570805E-02 + 1.352145E-02 1.842296E-02 2.625602E-02 3.769658E-02 5.345789E-02 + 1.602632E-02 2.165972E-02 3.077185E-02 4.418773E-02 6.275848E-02 + 1.912223E-02 2.565824E-02 3.633876E-02 5.217130E-02 7.418281E-02 + 2.291622E-02 3.054420E-02 4.313505E-02 6.188756E-02 8.806904E-02 + 2.749514E-02 3.640025E-02 5.124090E-02 7.345125E-02 1.045999E-01 + 3.300207E-02 4.337220E-02 6.083169E-02 8.709197E-02 1.240803E-01 + 3.963352E-02 5.169402E-02 7.222456E-02 1.032515E-01 1.471039E-01 + 4.772143E-02 6.181066E-02 8.604504E-02 1.228011E-01 1.748592E-01 + 5.777362E-02 7.450317E-02 1.034377E-01 1.473957E-01 2.096606E-01 + 7.015680E-02 9.026732E-02 1.250588E-01 1.779326E-01 2.526949E-01 + 8.519859E-02 1.093960E-01 1.512295E-01 2.148275E-01 3.046277E-01 + 1.043450E-01 1.343712E-01 1.857959E-01 2.635783E-01 3.730387E-01 + 1.330694E-01 1.747881E-01 2.434729E-01 3.453143E-01 4.864654E-01 + 1.749600E-01 2.351153E-01 3.299810E-01 4.671373E-01 6.535189E-01 + 2.326428E-01 3.183834E-01 4.486985E-01 6.324704E-01 8.777296E-01 + 3.124372E-01 4.332135E-01 6.109887E-01 8.557295E-01 1.177012E+00 + 4.223091E-01 5.902569E-01 8.301552E-01 1.153501E+00 1.572935E+00 + 5.715652E-01 8.014492E-01 1.121561E+00 1.545209E+00 2.089012E+00 + 7.759067E-01 1.087578E+00 1.511834E+00 2.064309E+00 2.763560E+00 + 1.049385E+00 1.466043E+00 2.022071E+00 2.736892E+00 3.625026E+00 + 1.292259E+00 1.799275E+00 2.469341E+00 3.321291E+00 4.367324E+00 + 4.729359E-05 8.568034E-05 1.452253E-04 2.313869E-04 3.524698E-04 + 5.792892E-05 1.046710E-04 1.768125E-04 2.809327E-04 4.265806E-04 + 7.092446E-05 1.278199E-04 2.152578E-04 3.411140E-04 5.161784E-04 + 8.679901E-05 1.560695E-04 2.619560E-04 4.141684E-04 6.242832E-04 + 1.062529E-04 1.905686E-04 3.188573E-04 5.026787E-04 7.550660E-04 + 1.299832E-04 2.325855E-04 3.879617E-04 6.098232E-04 9.128643E-04 + 1.591029E-04 2.837902E-04 4.719543E-04 7.397372E-04 1.102984E-03 + 1.948321E-04 3.463926E-04 5.742021E-04 8.968040E-04 1.331958E-03 + 2.389555E-04 4.234042E-04 6.994690E-04 1.087622E-03 1.608612E-03 + 2.972738E-04 5.237769E-04 8.608782E-04 1.330782E-03 1.958311E-03 + 3.818803E-04 6.666702E-04 1.085074E-03 1.663289E-03 2.429361E-03 + 5.041806E-04 8.689603E-04 1.395059E-03 2.115459E-03 3.061814E-03 + 6.693475E-04 1.137210E-03 1.799462E-03 2.697815E-03 3.870865E-03 + 8.877070E-04 1.486008E-03 2.318291E-03 3.437823E-03 4.896654E-03 + 1.176263E-03 1.938308E-03 2.981506E-03 4.378385E-03 6.204125E-03 + 1.551341E-03 2.515833E-03 3.822482E-03 5.569348E-03 7.873353E-03 + 2.042039E-03 3.259080E-03 4.901577E-03 7.105084E-03 1.003835E-02 + 2.680753E-03 4.215612E-03 6.295199E-03 9.100771E-03 1.284724E-02 + 3.506110E-03 5.447626E-03 8.104177E-03 1.169806E-02 1.645818E-02 + 4.577962E-03 7.051630E-03 1.047535E-02 1.507829E-02 2.109206E-02 + 5.983283E-03 9.172637E-03 1.360248E-02 1.947764E-02 2.703872E-02 + 7.828738E-03 1.197730E-02 1.767849E-02 2.513838E-02 3.463857E-02 + 1.024130E-02 1.561676E-02 2.289002E-02 3.232357E-02 4.421880E-02 + 1.310647E-02 1.990429E-02 2.900758E-02 4.074847E-02 5.546177E-02 + 1.584703E-02 2.408222E-02 3.507006E-02 4.921978E-02 6.692707E-02 + 1.842235E-02 2.813568E-02 4.106316E-02 5.777736E-02 7.871823E-02 + 2.108274E-02 3.239767E-02 4.746662E-02 6.705742E-02 9.158428E-02 + 2.391141E-02 3.700459E-02 5.450784E-02 7.733693E-02 1.059988E-01 + 2.706161E-02 4.217087E-02 6.251778E-02 8.909635E-02 1.225692E-01 + 3.057919E-02 4.800952E-02 7.165257E-02 1.025657E-01 1.417466E-01 + 3.449610E-02 5.459295E-02 8.206017E-02 1.180142E-01 1.638659E-01 + 3.896284E-02 6.213670E-02 9.402618E-02 1.359338E-01 1.896040E-01 + 4.413589E-02 7.086951E-02 1.079685E-01 1.569398E-01 2.197459E-01 + 5.014637E-02 8.100362E-02 1.242280E-01 1.815622E-01 2.552315E-01 + 5.706107E-02 9.273542E-02 1.430451E-01 2.102534E-01 2.967752E-01 + 6.500011E-02 1.062393E-01 1.647793E-01 2.436106E-01 3.453432E-01 + 7.394585E-02 1.215942E-01 1.896406E-01 2.818747E-01 4.014711E-01 + 8.403568E-02 1.389955E-01 2.179859E-01 3.257345E-01 4.662071E-01 + 9.572756E-02 1.591170E-01 2.508885E-01 3.766780E-01 5.417406E-01 + 1.096190E-01 1.830213E-01 2.898100E-01 4.368864E-01 6.307645E-01 + 1.267653E-01 2.125156E-01 3.374372E-01 5.102912E-01 7.388752E-01 + 1.476119E-01 2.481397E-01 3.947299E-01 5.985939E-01 8.684715E-01 + 1.719478E-01 2.898812E-01 4.617752E-01 7.019883E-01 1.020282E+00 + 1.998201E-01 3.378703E-01 5.393065E-01 8.213094E-01 1.196596E+00 + 2.318738E-01 3.931096E-01 6.287730E-01 9.591996E-01 1.401572E+00 + 2.700326E-01 4.589714E-01 7.354705E-01 1.122410E+00 1.642482E+00 + 3.189970E-01 5.419870E-01 8.689851E-01 1.325803E+00 1.939911E+00 + 3.801345E-01 6.446800E-01 1.032962E+00 1.575015E+00 2.303056E+00 + 4.537484E-01 7.669044E-01 1.227240E+00 1.870752E+00 2.730746E+00 + 5.562314E-01 9.338906E-01 1.487477E+00 2.261654E+00 3.292241E+00 + 7.540409E-01 1.244162E+00 1.954189E+00 2.941797E+00 4.242249E+00 + 1.068727E+00 1.726821E+00 2.665539E+00 3.957794E+00 5.632264E+00 + 1.508819E+00 2.388390E+00 3.626915E+00 5.309293E+00 7.453641E+00 + 2.115833E+00 3.282583E+00 4.906332E+00 7.074920E+00 9.805079E+00 + 2.935079E+00 4.468345E+00 6.576100E+00 9.348179E+00 1.278689E+01 + 4.019427E+00 6.011554E+00 8.708965E+00 1.220079E+01 1.645998E+01 + 5.440767E+00 7.994226E+00 1.138365E+01 1.572594E+01 2.095236E+01 + 7.203219E+00 1.040057E+01 1.459562E+01 1.991300E+01 2.623032E+01 + 8.622860E+00 1.233552E+01 1.714405E+01 2.319068E+01 3.031786E+01 + 3.128642E-04 5.826116E-04 9.999660E-04 1.619968E-03 2.531265E-03 + 3.797029E-04 7.022773E-04 1.196994E-03 1.922192E-03 2.973969E-03 + 4.608865E-04 8.464744E-04 1.431537E-03 2.277924E-03 3.496650E-03 + 5.592224E-04 1.020242E-03 1.710663E-03 2.697716E-03 4.111082E-03 + 6.787592E-04 1.228647E-03 2.043579E-03 3.195867E-03 4.839673E-03 + 8.226994E-04 1.477605E-03 2.438597E-03 3.786121E-03 5.708014E-03 + 9.969990E-04 1.775569E-03 2.908222E-03 4.488996E-03 6.753458E-03 + 1.207877E-03 2.132733E-03 3.467923E-03 5.330891E-03 8.019637E-03 + 1.464969E-03 2.563569E-03 4.143214E-03 6.355645E-03 9.574378E-03 + 1.801182E-03 3.118563E-03 5.006772E-03 7.675485E-03 1.158641E-02 + 2.281997E-03 3.895771E-03 6.210894E-03 9.518288E-03 1.437075E-02 + 2.965616E-03 4.980458E-03 7.897149E-03 1.209597E-02 1.819434E-02 + 3.871900E-03 6.410205E-03 1.013690E-02 1.549642E-02 2.314062E-02 + 5.052638E-03 8.291331E-03 1.308053E-02 1.988827E-02 2.945821E-02 + 6.604556E-03 1.077556E-02 1.693001E-02 2.553382E-02 3.751327E-02 + 8.640626E-03 1.404194E-02 2.188760E-02 3.273912E-02 4.770144E-02 + 1.137333E-02 1.834794E-02 2.831945E-02 4.201234E-02 6.066404E-02 + 1.501796E-02 2.398790E-02 3.663916E-02 5.391232E-02 7.715009E-02 + 1.983520E-02 3.129867E-02 4.733207E-02 6.910276E-02 9.804957E-02 + 2.614534E-02 4.081177E-02 6.110349E-02 8.853420E-02 1.245548E-01 + 3.445851E-02 5.322470E-02 7.888922E-02 1.134102E-01 1.583019E-01 + 4.534087E-02 6.927639E-02 1.017434E-01 1.450627E-01 2.010202E-01 + 5.935197E-02 8.977685E-02 1.306937E-01 1.848741E-01 2.544793E-01 + 7.565041E-02 1.136191E-01 1.643848E-01 2.311352E-01 3.164035E-01 + 9.109811E-02 1.365792E-01 1.972808E-01 2.767758E-01 3.781652E-01 + 1.055573E-01 1.586815E-01 2.295663E-01 3.221524E-01 4.407750E-01 + 1.204523E-01 1.819167E-01 2.641151E-01 3.713104E-01 5.086038E-01 + 1.364366E-01 2.071082E-01 3.021349E-01 4.259135E-01 5.846468E-01 + 1.543568E-01 2.355835E-01 3.451919E-01 4.883547E-01 6.714535E-01 + 1.746768E-01 2.678004E-01 3.943560E-01 5.601200E-01 7.718532E-01 + 1.975040E-01 3.042620E-01 4.501350E-01 6.420445E-01 8.873409E-01 + 2.233390E-01 3.461040E-01 5.144174E-01 7.368779E-01 1.021622E+00 + 2.529874E-01 3.950264E-01 5.889915E-01 8.469810E-01 1.178915E+00 + 2.873142E-01 4.521388E-01 6.758853E-01 9.750203E-01 1.362562E+00 + 3.267735E-01 5.176672E-01 7.764901E-01 1.123320E+00 1.574057E+00 + 3.716539E-01 5.926918E-01 8.933228E-01 1.295398E+00 1.818842E+00 + 4.219389E-01 6.779796E-01 1.026482E+00 1.492757E+00 2.101009E+00 + 4.783732E-01 7.745072E-01 1.177574E+00 1.717956E+00 2.422173E+00 + 5.425713E-01 8.855062E-01 1.352803E+00 1.979024E+00 2.794458E+00 + 6.172224E-01 1.016182E+00 1.559505E+00 2.286026E+00 3.235147E+00 + 7.093000E-01 1.174944E+00 1.810638E+00 2.656808E+00 3.765764E+00 + 8.196184E-01 1.365223E+00 2.111235E+00 3.100414E+00 4.397392E+00 + 9.470272E-01 1.585221E+00 2.461363E+00 3.617415E+00 5.131928E+00 + 1.091671E+00 1.836320E+00 2.860773E+00 4.213286E+00 5.976805E+00 + 1.258657E+00 2.125026E+00 3.321811E+00 4.902302E+00 6.952953E+00 + 1.459809E+00 2.470712E+00 3.865545E+00 5.718568E+00 8.123839E+00 + 1.720302E+00 2.908592E+00 4.546330E+00 6.728448E+00 9.567167E+00 + 2.041576E+00 3.445531E+00 5.382272E+00 7.952163E+00 1.131871E+01 + 2.417871E+00 4.079236E+00 6.367448E+00 9.386209E+00 1.336520E+01 + 2.933089E+00 4.934019E+00 7.667137E+00 1.127387E+01 1.598233E+01 + 3.943122E+00 6.504787E+00 9.954525E+00 1.444432E+01 2.025935E+01 + 5.549978E+00 8.894467E+00 1.332896E+01 1.900344E+01 2.628593E+01 + 7.723178E+00 1.204222E+01 1.767045E+01 2.476081E+01 3.371819E+01 + 1.055398E+01 1.605240E+01 2.310830E+01 3.191474E+01 4.280193E+01 + 1.412439E+01 2.105443E+01 2.979273E+01 4.050231E+01 5.344648E+01 + 1.842587E+01 2.699047E+01 3.758209E+01 5.034164E+01 6.569219E+01 + 2.361707E+01 3.401506E+01 4.672498E+01 6.181363E+01 7.973135E+01 + 2.970009E+01 4.205397E+01 5.678499E+01 7.433821E+01 9.489504E+01 + 3.399539E+01 4.764792E+01 6.391654E+01 8.321868E+01 1.056886E+02 + 2.202357E-03 4.306786E-03 8.002044E-03 1.450667E-02 2.545080E-02 + 2.613341E-03 5.049553E-03 9.345241E-03 1.686768E-02 2.926832E-02 + 3.100540E-03 5.933067E-03 1.096226E-02 1.967079E-02 3.373600E-02 + 3.682712E-03 6.991651E-03 1.290092E-02 2.297884E-02 3.897056E-02 + 4.371039E-03 8.264596E-03 1.522283E-02 2.687817E-02 4.513800E-02 + 5.195350E-03 9.808860E-03 1.798536E-02 3.144435E-02 5.230944E-02 + 6.180294E-03 1.167705E-02 2.129286E-02 3.681445E-02 6.068054E-02 + 7.379020E-03 1.394046E-02 2.523824E-02 4.320509E-02 7.053804E-02 + 8.865828E-03 1.670734E-02 2.995664E-02 5.082215E-02 8.226719E-02 + 1.086156E-02 2.033789E-02 3.606842E-02 6.060123E-02 9.715567E-02 + 1.381013E-02 2.553260E-02 4.472375E-02 7.425780E-02 1.177636E-01 + 1.813433E-02 3.296874E-02 5.687728E-02 9.307505E-02 1.458572E-01 + 2.395569E-02 4.286026E-02 7.270696E-02 1.173021E-01 1.818456E-01 + 3.160980E-02 5.569938E-02 9.306241E-02 1.481043E-01 2.269655E-01 + 4.177611E-02 7.235189E-02 1.190812E-01 1.871281E-01 2.834734E-01 + 5.494225E-02 9.366780E-02 1.519726E-01 2.362888E-01 3.538811E-01 + 7.224955E-02 1.212586E-01 1.941962E-01 2.989313E-01 4.431685E-01 + 9.493251E-02 1.570583E-01 2.485028E-01 3.785996E-01 5.556168E-01 + 1.243326E-01 2.033960E-01 3.180101E-01 4.790808E-01 6.966561E-01 + 1.629939E-01 2.632979E-01 4.068679E-01 6.067710E-01 8.736626E-01 + 2.137728E-01 3.412088E-01 5.218379E-01 7.692616E-01 1.096690E+00 + 2.796868E-01 4.415663E-01 6.685245E-01 9.755423E-01 1.376647E+00 + 3.644804E-01 5.686928E-01 8.532620E-01 1.232337E+00 1.721321E+00 + 4.622514E-01 7.142715E-01 1.064455E+00 1.524846E+00 2.111317E+00 + 5.524166E-01 8.495293E-01 1.261042E+00 1.804634E+00 2.487903E+00 + 6.348218E-01 9.736163E-01 1.444900E+00 2.071201E+00 2.856064E+00 + 7.181388E-01 1.102520E+00 1.636388E+00 2.347647E+00 3.245850E+00 + 8.049130E-01 1.240308E+00 1.839883E+00 2.645444E+00 3.668618E+00 + 9.004547E-01 1.394186E+00 2.070241E+00 2.978076E+00 4.145030E+00 + 1.006810E+00 1.567081E+00 2.332226E+00 3.360719E+00 4.680717E+00 + 1.126099E+00 1.758784E+00 2.628641E+00 3.795441E+00 5.288162E+00 + 1.260982E+00 1.979168E+00 2.966534E+00 4.292126E+00 5.992137E+00 + 1.416404E+00 2.234293E+00 3.358757E+00 4.869496E+00 6.819888E+00 + 1.595452E+00 2.526281E+00 3.809888E+00 5.545122E+00 7.782468E+00 + 1.794889E+00 2.863023E+00 4.330621E+00 6.309076E+00 8.885283E+00 + 2.023158E+00 3.247186E+00 4.928175E+00 7.190586E+00 1.014566E+01 + 2.277978E+00 3.677319E+00 5.600365E+00 8.187183E+00 1.157270E+01 + 2.555786E+00 4.156430E+00 6.360721E+00 9.312823E+00 1.318529E+01 + 2.870979E+00 4.699163E+00 7.232840E+00 1.062080E+01 1.504146E+01 + 3.240026E+00 5.333117E+00 8.244020E+00 1.214281E+01 1.721685E+01 + 3.694207E+00 6.102925E+00 9.464796E+00 1.398310E+01 1.987008E+01 + 4.242414E+00 7.022767E+00 1.091689E+01 1.617255E+01 2.303516E+01 + 4.872275E+00 8.084756E+00 1.257407E+01 1.868036E+01 2.667322E+01 + 5.573211E+00 9.270087E+00 1.446215E+01 2.151799E+01 3.085616E+01 + 6.349280E+00 1.061530E+01 1.659998E+01 2.472325E+01 3.556116E+01 + 7.239146E+00 1.220634E+01 1.909408E+01 2.845019E+01 4.087223E+01 + 8.342785E+00 1.420417E+01 2.220275E+01 3.297985E+01 4.717187E+01 + 9.677249E+00 1.659999E+01 2.588820E+01 3.832501E+01 5.449955E+01 + 1.111659E+01 1.915233E+01 2.995901E+01 4.411677E+01 6.246526E+01 + 1.297764E+01 2.219845E+01 3.491111E+01 5.109184E+01 7.212893E+01 + 1.663924E+01 2.779777E+01 4.322926E+01 6.254726E+01 8.727750E+01 + 2.192304E+01 3.559103E+01 5.444479E+01 7.765796E+01 1.070872E+02 + 2.820314E+01 4.474388E+01 6.748646E+01 9.531673E+01 1.300300E+02 + 3.563089E+01 5.552032E+01 8.252919E+01 1.149021E+02 1.551224E+02 + 4.417448E+01 6.710843E+01 9.824409E+01 1.360721E+02 1.826754E+02 + 5.313794E+01 7.901217E+01 1.149292E+02 1.582953E+02 2.098370E+02 + 6.249589E+01 9.199872E+01 1.325661E+02 1.803600E+02 2.376298E+02 + 7.208291E+01 1.048686E+02 1.491015E+02 2.015315E+02 2.635200E+02 + 7.779861E+01 1.120620E+02 1.583889E+02 2.136387E+02 2.797093E+02 + 1.646315E-02 3.780205E-02 8.149859E-02 1.698879E-01 3.409628E-01 + 1.915257E-02 4.331032E-02 9.140470E-02 1.872562E-01 3.690866E-01 + 2.232124E-02 4.958966E-02 1.029392E-01 2.071422E-01 4.016551E-01 + 2.608731E-02 5.689681E-02 1.162182E-01 2.303178E-01 4.397990E-01 + 3.044982E-02 6.545650E-02 1.317513E-01 2.571464E-01 4.842168E-01 + 3.565840E-02 7.552854E-02 1.496526E-01 2.884778E-01 5.354043E-01 + 4.182552E-02 8.737229E-02 1.707412E-01 3.246844E-01 5.950261E-01 + 4.927512E-02 1.012596E-01 1.955269E-01 3.669489E-01 6.653821E-01 + 5.835268E-02 1.183773E-01 2.252056E-01 4.172693E-01 7.469593E-01 + 7.034791E-02 1.407479E-01 2.641903E-01 4.827901E-01 8.528333E-01 + 8.822789E-02 1.737070E-01 3.213643E-01 5.784626E-01 1.005028E+00 + 1.142391E-01 2.216536E-01 4.025881E-01 7.137844E-01 1.216559E+00 + 1.491176E-01 2.844205E-01 5.080250E-01 8.864308E-01 1.480627E+00 + 1.948712E-01 3.654324E-01 6.422233E-01 1.100689E+00 1.803192E+00 + 2.549301E-01 4.695603E-01 8.127881E-01 1.365575E+00 2.196830E+00 + 3.325375E-01 6.015745E-01 1.025349E+00 1.689332E+00 2.671605E+00 + 4.346040E-01 7.713855E-01 1.291740E+00 2.089210E+00 3.251934E+00 + 5.667046E-01 9.876884E-01 1.626760E+00 2.585936E+00 3.966808E+00 + 7.368962E-01 1.259478E+00 2.043497E+00 3.198988E+00 4.828786E+00 + 9.572093E-01 1.604475E+00 2.566787E+00 3.956569E+00 5.884007E+00 + 1.242322E+00 2.042118E+00 3.227731E+00 4.898372E+00 7.182138E+00 + 1.607509E+00 2.598356E+00 4.045334E+00 6.061326E+00 8.750116E+00 + 2.064133E+00 3.289077E+00 5.044927E+00 7.466142E+00 1.064580E+01 + 2.578707E+00 4.054848E+00 6.147935E+00 8.993084E+00 1.271876E+01 + 3.022762E+00 4.727648E+00 7.130252E+00 1.036318E+01 1.454898E+01 + 3.402998E+00 5.317113E+00 8.010020E+00 1.159991E+01 1.622528E+01 + 3.783474E+00 5.910903E+00 8.879005E+00 1.286046E+01 1.794880E+01 + 4.196248E+00 6.538229E+00 9.813191E+00 1.421470E+01 1.989303E+01 + 4.654071E+00 7.225005E+00 1.085358E+01 1.573763E+01 2.201911E+01 + 5.167954E+00 8.011796E+00 1.201810E+01 1.744241E+01 2.439552E+01 + 5.743430E+00 8.921685E+00 1.334849E+01 1.938305E+01 2.712723E+01 + 6.394695E+00 9.944421E+00 1.490549E+01 2.160547E+01 3.028814E+01 + 7.133005E+00 1.114285E+01 1.672770E+01 2.419532E+01 3.387986E+01 + 7.966625E+00 1.251517E+01 1.883787E+01 2.730349E+01 3.811490E+01 + 8.893902E+00 1.406114E+01 2.123758E+01 3.086324E+01 4.302967E+01 + 9.948956E+00 1.583094E+01 2.397116E+01 3.493274E+01 4.878181E+01 + 1.107589E+01 1.779505E+01 2.704345E+01 3.957858E+01 5.542595E+01 + 1.231152E+01 1.995207E+01 3.041018E+01 4.469117E+01 6.286533E+01 + 1.370088E+01 2.239473E+01 3.414859E+01 5.040919E+01 7.136911E+01 + 1.530799E+01 2.511989E+01 3.851676E+01 5.712729E+01 8.123868E+01 + 1.724745E+01 2.847056E+01 4.382498E+01 6.487353E+01 9.252828E+01 + 1.957455E+01 3.243716E+01 5.001378E+01 7.382850E+01 1.053700E+02 + 2.202823E+01 3.693412E+01 5.705130E+01 8.399700E+01 1.195290E+02 + 2.462203E+01 4.175370E+01 6.467100E+01 9.502050E+01 1.344605E+02 + 2.708054E+01 4.648735E+01 7.262131E+01 1.063429E+02 1.500357E+02 + 2.965033E+01 5.085912E+01 8.069622E+01 1.182238E+02 1.666994E+02 + 3.263111E+01 5.552970E+01 8.889264E+01 1.309993E+02 1.843597E+02 + 3.603968E+01 5.992939E+01 9.611599E+01 1.433315E+02 2.018554E+02 + 3.938963E+01 6.410181E+01 1.017893E+02 1.546507E+02 2.186780E+02 + 4.339336E+01 6.958372E+01 1.087704E+02 1.663181E+02 2.361172E+02 + 5.187134E+01 8.150712E+01 1.240837E+02 1.874747E+02 2.664669E+02 + 6.398850E+01 9.738798E+01 1.447056E+02 2.158958E+02 3.061469E+02 + 7.679049E+01 1.140677E+02 1.666161E+02 2.461193E+02 3.444334E+02 + 9.000602E+01 1.313423E+02 1.895429E+02 2.749831E+02 3.806779E+02 + 1.030003E+02 1.494054E+02 2.115439E+02 3.012159E+02 4.137152E+02 + 1.158721E+02 1.659087E+02 2.310015E+02 3.260603E+02 4.480001E+02 + 1.272690E+02 1.802802E+02 2.506962E+02 3.555859E+02 4.824150E+02 + 1.380016E+02 1.955318E+02 2.732870E+02 3.817044E+02 5.141618E+02 + 1.453682E+02 2.058169E+02 2.828993E+02 3.937715E+02 5.293014E+02 + 1.596710E-01 4.090753E-01 1.057674E+00 2.556737E+00 5.612824E+00 + 1.795896E-01 4.451625E-01 1.117149E+00 2.641989E+00 5.729910E+00 + 2.034302E-01 4.859037E-01 1.184911E+00 2.740023E+00 5.863720E+00 + 2.307569E-01 5.352042E-01 1.263814E+00 2.851136E+00 6.012487E+00 + 2.616788E-01 5.930039E-01 1.355145E+00 2.983392E+00 6.182627E+00 + 2.985358E-01 6.605638E-01 1.460718E+00 3.140820E+00 6.382203E+00 + 3.417874E-01 7.394618E-01 1.583590E+00 3.333764E+00 6.624918E+00 + 3.917084E-01 8.283159E-01 1.730761E+00 3.551509E+00 6.911631E+00 + 4.526828E-01 9.378760E-01 1.903766E+00 3.804703E+00 7.276301E+00 + 5.336505E-01 1.083469E+00 2.140544E+00 4.167553E+00 7.821093E+00 + 6.558523E-01 1.300541E+00 2.500437E+00 4.744912E+00 8.724447E+00 + 8.345432E-01 1.606186E+00 3.012845E+00 5.584369E+00 1.004626E+01 + 1.068556E+00 1.995543E+00 3.660321E+00 6.631452E+00 1.169528E+01 + 1.366373E+00 2.477551E+00 4.460899E+00 7.902731E+00 1.368612E+01 + 1.739491E+00 3.085053E+00 5.438283E+00 9.445156E+00 1.605738E+01 + 2.209829E+00 3.828096E+00 6.626973E+00 1.128442E+01 1.879659E+01 + 2.810530E+00 4.747405E+00 8.099938E+00 1.350189E+01 2.205906E+01 + 3.567783E+00 5.913260E+00 9.925344E+00 1.617364E+01 2.596895E+01 + 4.513097E+00 7.368844E+00 1.213878E+01 1.938466E+01 3.063131E+01 + 5.691946E+00 9.197716E+00 1.482779E+01 2.331400E+01 3.612560E+01 + 7.197067E+00 1.147580E+01 1.815201E+01 2.810296E+01 4.285112E+01 + 9.065490E+00 1.428635E+01 2.231138E+01 3.385540E+01 5.086761E+01 + 1.137812E+01 1.773998E+01 2.731056E+01 4.067660E+01 6.031228E+01 + 1.391616E+01 2.153302E+01 3.264860E+01 4.792959E+01 7.022352E+01 + 1.612175E+01 2.472766E+01 3.714783E+01 5.397847E+01 7.861022E+01 + 1.802618E+01 2.749272E+01 4.094897E+01 5.933725E+01 8.549195E+01 + 1.990996E+01 3.015647E+01 4.480202E+01 6.494004E+01 9.233884E+01 + 2.179474E+01 3.298876E+01 4.895613E+01 7.080973E+01 9.988484E+01 + 2.380855E+01 3.629147E+01 5.370493E+01 7.747260E+01 1.090443E+02 + 2.604756E+01 4.007860E+01 5.916275E+01 8.485448E+01 1.202933E+02 + 2.837250E+01 4.408363E+01 6.530401E+01 9.348507E+01 1.329645E+02 + 3.094884E+01 4.869305E+01 7.210170E+01 1.034790E+02 1.469234E+02 + 3.393179E+01 5.370438E+01 8.026028E+01 1.147736E+02 1.627761E+02 + 3.718956E+01 5.943606E+01 8.933384E+01 1.282948E+02 1.812296E+02 + 4.095365E+01 6.584701E+01 9.964952E+01 1.437566E+02 2.028366E+02 + 4.515797E+01 7.296517E+01 1.110421E+02 1.604722E+02 2.270807E+02 + 4.987043E+01 8.042403E+01 1.236698E+02 1.787485E+02 2.535276E+02 + 5.498981E+01 8.893393E+01 1.373797E+02 1.989878E+02 2.815485E+02 + 6.045163E+01 9.839395E+01 1.527164E+02 2.215183E+02 3.101601E+02 + 6.593171E+01 1.091151E+02 1.692187E+02 2.460269E+02 3.413399E+02 + 7.178612E+01 1.205682E+02 1.867447E+02 2.719959E+02 3.777856E+02 + 7.728118E+01 1.309482E+02 2.054449E+02 2.993532E+02 4.162819E+02 + 8.278552E+01 1.395827E+02 2.217702E+02 3.247334E+02 4.512907E+02 + 8.777352E+01 1.457294E+02 2.324477E+02 3.451885E+02 4.841393E+02 + 9.253847E+01 1.499898E+02 2.375496E+02 3.631342E+02 5.130838E+02 + 9.647740E+01 1.550889E+02 2.416349E+02 3.733521E+02 5.331662E+02 + 1.001565E+02 1.615444E+02 2.465905E+02 3.757962E+02 5.489718E+02 + 1.036943E+02 1.685079E+02 2.520863E+02 3.753858E+02 5.571940E+02 + 1.056086E+02 1.715927E+02 2.552773E+02 3.714617E+02 5.519083E+02 + 1.086585E+02 1.755664E+02 2.598543E+02 3.735437E+02 5.463512E+02 + 1.211458E+02 1.905136E+02 2.816466E+02 3.986509E+02 5.706031E+02 + 1.365815E+02 2.116400E+02 3.099726E+02 4.310884E+02 6.085143E+02 + 1.525350E+02 2.303425E+02 3.326839E+02 4.604752E+02 6.548792E+02 + 1.677238E+02 2.473756E+02 3.561490E+02 4.986159E+02 7.061081E+02 + 1.851844E+02 2.688848E+02 3.896538E+02 5.405340E+02 7.549021E+02 + 2.071059E+02 2.993454E+02 4.272452E+02 5.844289E+02 7.998690E+02 + 2.394611E+02 3.370016E+02 4.691071E+02 6.265740E+02 8.367834E+02 + 2.711380E+02 3.720958E+02 5.051179E+02 6.603396E+02 8.645064E+02 + 2.850124E+02 3.863942E+02 5.181210E+02 6.665216E+02 8.601340E+02 + 1.774075E+00 5.534394E+00 1.372840E+01 3.019845E+01 6.223073E+01 + 1.869028E+00 5.696092E+00 1.401681E+01 3.059706E+01 6.294604E+01 + 1.979219E+00 5.893229E+00 1.435085E+01 3.102027E+01 6.369586E+01 + 2.104026E+00 6.134796E+00 1.470984E+01 3.153254E+01 6.448566E+01 + 2.235365E+00 6.396708E+00 1.511182E+01 3.219514E+01 6.534039E+01 + 2.383036E+00 6.682197E+00 1.559527E+01 3.291001E+01 6.623124E+01 + 2.543210E+00 7.019505E+00 1.617135E+01 3.368310E+01 6.725506E+01 + 2.744322E+00 7.377735E+00 1.679900E+01 3.465762E+01 6.859098E+01 + 2.978144E+00 7.824331E+00 1.755876E+01 3.588676E+01 7.027673E+01 + 3.337328E+00 8.514571E+00 1.878985E+01 3.780936E+01 7.330975E+01 + 3.948077E+00 9.709468E+00 2.095646E+01 4.139068E+01 7.942106E+01 + 4.893717E+00 1.154312E+01 2.432712E+01 4.691688E+01 8.919751E+01 + 6.108431E+00 1.383294E+01 2.852241E+01 5.375885E+01 1.008492E+02 + 7.695135E+00 1.667610E+01 3.328054E+01 6.188309E+01 1.139821E+02 + 9.652019E+00 2.013512E+01 3.896210E+01 7.122935E+01 1.290929E+02 + 1.197074E+01 2.427227E+01 4.561598E+01 8.214718E+01 1.457793E+02 + 1.494985E+01 2.932840E+01 5.369975E+01 9.511073E+01 1.644876E+02 + 1.868502E+01 3.539757E+01 6.333305E+01 1.103657E+02 1.868543E+02 + 2.325380E+01 4.277655E+01 7.489273E+01 1.277531E+02 2.125301E+02 + 2.879267E+01 5.181972E+01 8.833639E+01 1.480675E+02 2.434183E+02 + 3.576492E+01 6.291840E+01 1.046041E+02 1.728182E+02 2.789496E+02 + 4.438754E+01 7.625514E+01 1.235627E+02 2.025051E+02 3.218548E+02 + 5.506948E+01 9.196766E+01 1.466079E+02 2.372171E+02 3.699968E+02 + 6.615274E+01 1.081409E+02 1.701800E+02 2.711188E+02 4.178575E+02 + 7.467556E+01 1.202686E+02 1.870048E+02 2.933564E+02 4.498448E+02 + 8.092854E+01 1.300442E+02 2.001437E+02 3.082780E+02 4.699239E+02 + 8.558913E+01 1.394805E+02 2.145089E+02 3.227987E+02 4.856715E+02 + 9.018002E+01 1.492395E+02 2.295246E+02 3.388163E+02 5.053672E+02 + 9.582151E+01 1.592747E+02 2.456818E+02 3.606260E+02 5.278143E+02 + 1.011311E+02 1.696214E+02 2.629052E+02 3.870526E+02 5.520142E+02 + 1.080916E+02 1.815700E+02 2.823095E+02 4.158023E+02 5.852844E+02 + 1.167631E+02 1.938909E+02 3.028053E+02 4.471205E+02 6.261693E+02 + 1.261858E+02 2.082356E+02 3.249428E+02 4.806596E+02 6.780601E+02 + 1.384240E+02 2.257128E+02 3.552625E+02 5.163783E+02 7.332983E+02 + 1.520224E+02 2.453791E+02 3.843285E+02 5.606926E+02 7.885019E+02 + 1.645206E+02 2.681828E+02 4.138180E+02 6.121542E+02 8.505022E+02 + 1.763665E+02 2.907285E+02 4.443092E+02 6.586635E+02 9.157394E+02 + 1.827507E+02 3.107747E+02 4.744642E+02 6.977806E+02 9.839424E+02 + 1.891659E+02 3.248722E+02 5.017577E+02 7.311510E+02 1.054138E+03 + 1.967471E+02 3.319898E+02 5.187146E+02 7.628351E+02 1.102955E+03 + 2.055789E+02 3.357076E+02 5.296925E+02 8.014053E+02 1.145418E+03 + 2.158851E+02 3.435688E+02 5.350794E+02 8.190280E+02 1.175379E+03 + 2.216525E+02 3.492353E+02 5.340609E+02 8.202988E+02 1.204436E+03 + 2.226454E+02 3.558258E+02 5.304424E+02 8.063464E+02 1.198280E+03 + 2.210409E+02 3.578733E+02 5.297436E+02 7.747361E+02 1.163775E+03 + 2.177083E+02 3.521967E+02 5.219252E+02 7.472678E+02 1.112365E+03 + 2.140839E+02 3.434874E+02 5.146128E+02 7.352144E+02 1.062431E+03 + 2.072001E+02 3.313857E+02 5.012229E+02 7.236955E+02 9.994650E+02 + 1.980534E+02 3.150249E+02 4.800535E+02 6.923915E+02 9.440420E+02 + 1.938885E+02 3.028085E+02 4.575712E+02 6.580915E+02 9.129808E+02 + 2.055528E+02 3.125909E+02 4.638371E+02 6.745853E+02 9.523438E+02 + 2.295496E+02 3.424447E+02 5.014675E+02 7.335743E+02 1.021514E+03 + 2.597873E+02 3.904770E+02 5.668698E+02 8.075605E+02 1.101896E+03 + 3.031383E+02 4.536744E+02 6.376074E+02 8.833119E+02 1.174656E+03 + 3.435420E+02 5.085313E+02 6.995401E+02 9.488688E+02 1.238941E+03 + 3.748780E+02 5.429879E+02 7.341756E+02 9.751167E+02 1.255723E+03 + 3.981162E+02 5.652003E+02 7.506760E+02 9.791421E+02 1.246389E+03 + 4.158300E+02 5.756004E+02 7.551387E+02 9.697239E+02 1.219133E+03 + 4.209677E+02 5.714772E+02 7.442468E+02 9.424355E+02 1.163106E+03 + 9.285489E+00 3.244442E+01 9.780450E+01 2.561073E+02 5.668679E+02 + 9.468615E+00 3.301038E+01 9.927402E+01 2.592897E+02 5.722900E+02 + 9.659860E+00 3.359687E+01 1.007908E+02 2.625349E+02 5.778100E+02 + 9.867663E+00 3.420656E+01 1.022081E+02 2.658501E+02 5.834403E+02 + 1.018845E+01 3.485932E+01 1.038232E+02 2.693437E+02 5.893639E+02 + 1.063293E+01 3.552667E+01 1.054555E+02 2.728339E+02 5.952749E+02 + 1.110209E+01 3.622893E+01 1.071568E+02 2.764310E+02 6.013595E+02 + 1.171733E+01 3.713740E+01 1.090270E+02 2.803540E+02 6.079831E+02 + 1.244839E+01 3.832537E+01 1.113530E+02 2.852394E+02 6.162005E+02 + 1.372473E+01 4.111993E+01 1.163899E+02 2.965348E+02 6.352577E+02 + 1.615254E+01 4.662306E+01 1.287258E+02 3.232241E+02 6.780607E+02 + 2.003398E+01 5.561844E+01 1.491377E+02 3.651011E+02 7.460346E+02 + 2.501227E+01 6.734923E+01 1.752441E+02 4.156682E+02 8.257775E+02 + 3.119779E+01 8.185596E+01 2.070989E+02 4.729849E+02 9.117191E+02 + 3.901730E+01 9.939699E+01 2.448069E+02 5.391609E+02 1.008460E+03 + 4.891970E+01 1.203991E+02 2.884021E+02 6.115856E+02 1.109825E+03 + 6.141920E+01 1.457785E+02 3.395732E+02 6.902722E+02 1.222034E+03 + 7.728387E+01 1.783447E+02 3.978517E+02 7.785870E+02 1.341077E+03 + 9.618885E+01 2.177801E+02 4.635683E+02 8.749847E+02 1.473840E+03 + 1.196429E+02 2.647566E+02 5.400608E+02 9.842469E+02 1.615081E+03 + 1.500202E+02 3.215672E+02 6.287753E+02 1.104249E+03 1.766806E+03 + 1.877219E+02 3.875987E+02 7.283567E+02 1.231752E+03 1.931818E+03 + 2.312533E+02 4.623729E+02 8.354818E+02 1.364438E+03 2.098236E+03 + 2.726252E+02 5.305595E+02 9.299326E+02 1.478111E+03 2.230714E+03 + 2.933334E+02 5.651033E+02 9.715079E+02 1.521216E+03 2.277298E+03 + 3.001655E+02 5.713398E+02 9.808966E+02 1.511795E+03 2.261153E+03 + 3.063976E+02 5.617834E+02 9.811734E+02 1.498109E+03 2.223876E+03 + 3.118092E+02 5.542396E+02 9.770831E+02 1.495118E+03 2.192789E+03 + 3.199650E+02 5.585998E+02 9.735137E+02 1.498997E+03 2.164401E+03 + 3.347099E+02 5.700133E+02 9.608644E+02 1.503376E+03 2.158662E+03 + 3.546929E+02 5.779029E+02 9.589909E+02 1.505017E+03 2.181102E+03 + 3.699120E+02 5.934861E+02 9.779518E+02 1.504949E+03 2.199947E+03 + 3.854009E+02 6.227388E+02 9.960382E+02 1.535165E+03 2.212230E+03 + 4.008691E+02 6.569073E+02 1.009202E+03 1.561475E+03 2.226748E+03 + 4.116793E+02 6.768266E+02 1.031659E+03 1.575873E+03 2.276418E+03 + 4.170070E+02 6.867559E+02 1.056129E+03 1.581220E+03 2.335650E+03 + 4.157654E+02 6.863540E+02 1.077023E+03 1.602654E+03 2.343743E+03 + 4.157216E+02 6.764405E+02 1.074215E+03 1.602524E+03 2.329564E+03 + 4.289798E+02 6.600069E+02 1.060843E+03 1.586408E+03 2.289789E+03 + 4.334791E+02 6.513913E+02 1.047029E+03 1.569026E+03 2.275404E+03 + 4.315052E+02 6.625863E+02 1.031901E+03 1.515191E+03 2.212800E+03 + 4.241948E+02 6.679331E+02 1.011890E+03 1.464103E+03 2.141963E+03 + 4.145389E+02 6.613010E+02 9.858096E+02 1.412295E+03 2.050338E+03 + 4.032846E+02 6.400280E+02 9.584110E+02 1.364960E+03 1.940927E+03 + 3.782598E+02 6.053581E+02 9.155168E+02 1.315944E+03 1.808078E+03 + 3.526810E+02 5.631008E+02 8.628520E+02 1.243098E+03 1.679730E+03 + 3.334808E+02 5.224082E+02 8.024709E+02 1.155718E+03 1.578005E+03 + 3.154395E+02 4.911899E+02 7.352022E+02 1.067596E+03 1.523341E+03 + 2.943607E+02 4.679374E+02 6.903294E+02 1.005472E+03 1.471108E+03 + 2.807453E+02 4.630210E+02 6.930602E+02 1.006578E+03 1.442490E+03 + 3.038589E+02 5.136277E+02 7.692205E+02 1.086098E+03 1.512325E+03 + 3.574230E+02 5.790410E+02 8.598193E+02 1.188702E+03 1.621224E+03 + 4.098001E+02 6.293702E+02 9.186187E+02 1.249738E+03 1.669982E+03 + 4.594794E+02 6.686068E+02 9.539960E+02 1.273816E+03 1.669388E+03 + 5.062353E+02 6.976516E+02 9.763001E+02 1.284988E+03 1.662011E+03 + 5.358851E+02 7.289455E+02 9.927527E+02 1.295000E+03 1.634451E+03 + 5.474801E+02 7.466738E+02 9.820757E+02 1.258893E+03 1.549521E+03 + 5.393583E+02 7.327393E+02 9.349284E+02 1.176884E+03 1.446115E+03 + 5.140918E+02 6.920422E+02 8.746712E+02 1.100823E+03 1.362672E+03 + 4.639592E+01 1.659911E+02 4.531935E+02 9.577456E+02 1.775223E+03 + 4.763239E+01 1.690841E+02 4.586331E+02 9.669653E+02 1.788496E+03 + 4.894684E+01 1.723359E+02 4.642106E+02 9.764873E+02 1.801934E+03 + 5.034870E+01 1.757705E+02 4.696209E+02 9.863629E+02 1.815553E+03 + 5.187950E+01 1.794998E+02 4.763770E+02 9.969186E+02 1.829793E+03 + 5.348982E+01 1.833954E+02 4.833336E+02 1.007723E+03 1.843880E+03 + 5.522087E+01 1.875750E+02 4.907093E+02 1.019123E+03 1.858258E+03 + 5.635471E+01 1.922510E+02 4.989035E+02 1.031754E+03 1.873804E+03 + 5.842806E+01 1.965723E+02 5.090022E+02 1.047339E+03 1.893076E+03 + 6.269612E+01 2.078191E+02 5.296684E+02 1.079952E+03 1.942635E+03 + 7.249500E+01 2.323447E+02 5.762051E+02 1.151953E+03 2.056126E+03 + 8.793778E+01 2.724059E+02 6.491282E+02 1.271610E+03 2.233291E+03 + 1.080355E+02 3.240079E+02 7.359215E+02 1.410038E+03 2.438447E+03 + 1.334058E+02 3.840237E+02 8.350313E+02 1.556861E+03 2.656782E+03 + 1.667169E+02 4.527087E+02 9.476158E+02 1.717264E+03 2.896797E+03 + 2.063176E+02 5.266970E+02 1.068824E+03 1.898559E+03 3.159203E+03 + 2.530048E+02 6.121099E+02 1.198235E+03 2.109117E+03 3.471215E+03 + 3.091545E+02 7.120114E+02 1.353442E+03 2.340854E+03 3.820347E+03 + 3.756928E+02 8.259671E+02 1.519626E+03 2.590948E+03 4.190356E+03 + 4.537314E+02 9.496874E+02 1.703347E+03 2.852416E+03 4.591240E+03 + 5.441498E+02 1.079539E+03 1.905151E+03 3.151994E+03 5.051797E+03 + 6.482389E+02 1.228498E+03 2.123562E+03 3.513812E+03 5.551557E+03 + 7.594923E+02 1.387778E+03 2.370102E+03 3.901610E+03 6.048376E+03 + 8.605770E+02 1.511972E+03 2.558897E+03 4.208485E+03 6.446157E+03 + 9.078314E+02 1.538447E+03 2.577161E+03 4.247321E+03 6.514746E+03 + 9.181209E+02 1.505275E+03 2.477092E+03 4.114214E+03 6.366444E+03 + 9.194235E+02 1.492937E+03 2.358322E+03 3.952517E+03 6.107991E+03 + 9.300311E+02 1.497582E+03 2.263704E+03 3.754553E+03 5.821425E+03 + 9.218938E+02 1.505985E+03 2.223557E+03 3.581998E+03 5.600002E+03 + 9.036333E+02 1.495320E+03 2.250356E+03 3.453143E+03 5.388892E+03 + 8.795803E+02 1.505261E+03 2.253522E+03 3.415131E+03 5.205842E+03 + 8.640100E+02 1.501175E+03 2.232443E+03 3.392691E+03 5.100478E+03 + 8.536265E+02 1.488811E+03 2.230334E+03 3.362736E+03 5.116764E+03 + 8.440960E+02 1.423692E+03 2.218109E+03 3.367602E+03 5.075896E+03 + 8.171561E+02 1.363999E+03 2.215825E+03 3.331070E+03 4.902636E+03 + 8.001586E+02 1.310017E+03 2.164604E+03 3.288453E+03 4.665028E+03 + 8.045939E+02 1.256784E+03 2.065766E+03 3.158356E+03 4.537940E+03 + 8.045413E+02 1.224338E+03 1.948658E+03 3.025852E+03 4.304418E+03 + 7.824861E+02 1.219316E+03 1.822974E+03 2.817537E+03 4.100081E+03 + 7.442552E+02 1.201053E+03 1.697784E+03 2.626280E+03 3.846684E+03 + 7.111399E+02 1.135832E+03 1.632158E+03 2.484417E+03 3.600100E+03 + 6.739486E+02 1.082931E+03 1.571483E+03 2.383396E+03 3.268757E+03 + 6.246256E+02 1.019677E+03 1.500427E+03 2.215455E+03 2.936410E+03 + 5.783481E+02 9.257259E+02 1.392150E+03 2.017023E+03 2.678781E+03 + 5.379124E+02 8.324679E+02 1.264757E+03 1.830360E+03 2.513953E+03 + 4.956257E+02 7.710517E+02 1.132415E+03 1.651086E+03 2.396133E+03 + 4.559645E+02 7.280772E+02 1.066523E+03 1.548389E+03 2.313449E+03 + 4.172435E+02 7.086382E+02 1.072374E+03 1.547973E+03 2.234340E+03 + 3.897557E+02 7.073025E+02 1.075455E+03 1.562956E+03 2.161522E+03 + 3.882343E+02 6.865219E+02 1.062514E+03 1.549104E+03 2.103783E+03 + 4.408788E+02 7.242586E+02 1.079845E+03 1.559952E+03 2.114157E+03 + 5.126812E+02 7.945873E+02 1.117165E+03 1.583180E+03 2.096883E+03 + 5.717702E+02 8.587055E+02 1.169659E+03 1.606094E+03 2.117451E+03 + 6.129234E+02 8.945871E+02 1.218187E+03 1.622911E+03 2.107024E+03 + 6.317643E+02 8.993042E+02 1.225655E+03 1.581012E+03 2.004979E+03 + 6.280192E+02 8.745814E+02 1.180096E+03 1.489685E+03 1.855471E+03 + 6.140757E+02 8.297724E+02 1.101746E+03 1.404001E+03 1.725594E+03 + 5.953322E+02 7.959638E+02 1.036918E+03 1.330967E+03 1.646990E+03 + 5.720498E+02 7.714670E+02 9.840117E+02 1.230559E+03 1.724513E+03 + 2.839001E+02 6.725954E+02 1.369844E+03 2.596575E+03 4.337420E+03 + 2.879829E+02 6.799601E+02 1.381983E+03 2.616293E+03 4.365008E+03 + 2.921736E+02 6.802293E+02 1.394271E+03 2.636154E+03 4.392898E+03 + 2.996001E+02 6.874833E+02 1.406721E+03 2.656162E+03 4.421121E+03 + 3.040997E+02 6.951351E+02 1.419738E+03 2.676956E+03 4.450587E+03 + 3.086682E+02 7.028052E+02 1.432606E+03 2.697329E+03 4.479687E+03 + 3.134521E+02 7.107360E+02 1.445727E+03 2.717908E+03 4.509328E+03 + 3.133149E+02 7.193998E+02 1.459904E+03 2.739974E+03 4.541308E+03 + 3.216419E+02 7.252461E+02 1.477484E+03 2.767337E+03 4.580858E+03 + 3.382285E+02 7.528532E+02 1.518585E+03 2.832967E+03 4.672634E+03 + 3.743223E+02 8.136483E+02 1.622823E+03 2.995637E+03 4.886073E+03 + 4.258424E+02 9.156053E+02 1.791135E+03 3.242719E+03 5.215700E+03 + 4.962974E+02 1.035997E+03 1.987182E+03 3.533725E+03 5.597236E+03 + 5.773937E+02 1.173194E+03 2.216212E+03 3.858550E+03 5.993209E+03 + 6.691685E+02 1.313682E+03 2.469185E+03 4.182748E+03 6.447526E+03 + 7.620093E+02 1.473963E+03 2.734156E+03 4.528119E+03 6.866824E+03 + 8.695839E+02 1.666932E+03 3.042007E+03 4.916546E+03 7.313624E+03 + 1.008065E+03 1.879983E+03 3.368837E+03 5.343152E+03 7.781659E+03 + 1.164981E+03 2.118189E+03 3.720988E+03 5.759128E+03 8.261241E+03 + 1.338257E+03 2.392673E+03 4.092430E+03 6.218570E+03 8.776194E+03 + 1.518247E+03 2.726391E+03 4.488232E+03 6.713882E+03 9.336264E+03 + 1.732188E+03 3.096431E+03 4.931835E+03 7.197776E+03 9.952957E+03 + 1.979343E+03 3.486626E+03 5.384145E+03 7.673182E+03 1.059194E+04 + 2.189442E+03 3.807958E+03 5.719382E+03 8.027966E+03 1.107889E+04 + 2.225111E+03 3.878738E+03 5.807035E+03 8.084396E+03 1.107607E+04 + 2.137726E+03 3.739819E+03 5.709857E+03 7.925422E+03 1.078465E+04 + 1.992902E+03 3.505278E+03 5.553373E+03 7.685583E+03 1.040315E+04 + 1.839974E+03 3.236401E+03 5.287084E+03 7.435778E+03 9.990213E+03 + 1.742756E+03 2.973202E+03 4.952062E+03 7.079036E+03 9.577229E+03 + 1.682453E+03 2.771689E+03 4.624413E+03 6.660528E+03 9.148456E+03 + 1.601333E+03 2.610905E+03 4.359504E+03 6.256308E+03 8.668354E+03 + 1.549998E+03 2.484526E+03 4.164180E+03 5.916865E+03 8.117619E+03 + 1.511621E+03 2.386315E+03 4.000816E+03 5.641474E+03 7.578811E+03 + 1.490547E+03 2.281175E+03 3.832460E+03 5.469177E+03 7.220229E+03 + 1.496349E+03 2.238849E+03 3.520887E+03 5.286780E+03 7.053978E+03 + 1.472300E+03 2.173643E+03 3.320976E+03 4.915892E+03 6.926374E+03 + 1.383520E+03 2.138162E+03 3.090155E+03 4.582717E+03 6.575981E+03 + 1.284629E+03 2.023361E+03 2.900788E+03 4.281872E+03 6.139015E+03 + 1.191562E+03 1.927992E+03 2.728591E+03 3.968415E+03 5.713014E+03 + 1.106074E+03 1.783585E+03 2.604452E+03 3.688991E+03 5.232118E+03 + 1.029713E+03 1.650272E+03 2.437474E+03 3.437190E+03 4.873914E+03 + 9.561700E+02 1.498757E+03 2.246180E+03 3.191071E+03 4.611728E+03 + 8.861837E+02 1.359767E+03 2.025661E+03 2.946334E+03 4.364839E+03 + 8.096774E+02 1.252314E+03 1.864451E+03 2.713023E+03 4.047797E+03 + 7.325760E+02 1.180970E+03 1.750718E+03 2.558913E+03 3.757027E+03 + 6.555938E+02 1.131499E+03 1.718730E+03 2.487765E+03 3.513759E+03 + 6.127648E+02 1.092033E+03 1.680082E+03 2.464980E+03 3.341278E+03 + 5.912926E+02 1.043694E+03 1.600518E+03 2.339849E+03 3.158983E+03 + 5.750217E+02 9.916880E+02 1.505706E+03 2.163126E+03 2.922365E+03 + 5.573268E+02 9.691339E+02 1.432095E+03 2.002917E+03 2.731319E+03 + 5.884901E+02 1.003239E+03 1.457588E+03 2.000614E+03 2.668708E+03 + 6.367304E+02 1.042976E+03 1.483271E+03 2.028232E+03 2.637039E+03 + 6.769592E+02 1.051496E+03 1.465280E+03 1.991698E+03 2.530926E+03 + 7.085658E+02 1.035471E+03 1.408174E+03 1.888019E+03 2.384637E+03 + 7.298802E+02 1.006726E+03 1.345524E+03 1.764746E+03 2.250853E+03 + 7.404335E+02 9.659389E+02 1.295702E+03 1.651018E+03 2.093706E+03 + 7.353641E+02 9.195256E+02 1.253156E+03 1.553343E+03 2.086296E+03 + 7.073362E+02 8.824959E+02 1.165966E+03 1.463686E+03 2.271193E+03 + 6.662698E+02 8.478475E+02 1.066214E+03 1.476641E+03 2.306972E+03 + 8.469128E+02 1.889014E+03 3.593322E+03 6.024550E+03 9.422018E+03 + 8.564723E+02 1.905840E+03 3.621305E+03 6.059254E+03 9.473210E+03 + 8.661650E+02 1.911106E+03 3.649391E+03 6.093921E+03 9.524294E+03 + 8.846119E+02 1.929901E+03 3.677556E+03 6.128498E+03 9.575186E+03 + 8.953480E+02 1.949410E+03 3.706700E+03 6.164079E+03 9.627493E+03 + 9.058809E+02 1.968459E+03 3.735043E+03 6.198408E+03 9.677850E+03 + 9.165430E+02 1.987627E+03 3.763446E+03 6.232513E+03 9.727768E+03 + 9.279966E+02 2.008123E+03 3.793703E+03 6.268578E+03 9.780457E+03 + 9.422421E+02 2.033590E+03 3.831238E+03 6.313247E+03 9.845745E+03 + 9.767204E+02 2.095885E+03 3.923438E+03 6.424879E+03 1.001016E+04 + 1.059892E+03 2.246232E+03 4.144965E+03 6.693416E+03 1.040725E+04 + 1.193022E+03 2.484970E+03 4.492125E+03 7.164206E+03 1.102269E+04 + 1.354658E+03 2.735342E+03 4.888193E+03 7.679468E+03 1.174934E+04 + 1.541442E+03 3.005883E+03 5.286697E+03 8.241313E+03 1.253084E+04 + 1.746920E+03 3.343142E+03 5.697100E+03 8.889800E+03 1.342947E+04 + 1.955802E+03 3.705312E+03 6.125516E+03 9.552195E+03 1.442735E+04 + 2.221172E+03 4.097274E+03 6.599042E+03 1.025098E+04 1.545117E+04 + 2.511869E+03 4.517382E+03 7.127883E+03 1.099654E+04 1.651290E+04 + 2.791231E+03 4.947806E+03 7.686218E+03 1.180038E+04 1.746654E+04 + 3.093963E+03 5.367623E+03 8.312710E+03 1.266564E+04 1.843698E+04 + 3.474805E+03 5.806696E+03 8.998158E+03 1.368039E+04 1.943297E+04 + 3.876421E+03 6.251409E+03 9.696761E+03 1.473823E+04 2.042312E+04 + 4.272535E+03 6.705914E+03 1.041167E+04 1.574099E+04 2.135297E+04 + 4.534321E+03 7.001173E+03 1.089160E+04 1.629802E+04 2.206809E+04 + 4.553698E+03 6.934579E+03 1.076435E+04 1.611753E+04 2.183896E+04 + 4.400859E+03 6.714135E+03 1.022656E+04 1.543607E+04 2.100148E+04 + 4.258517E+03 6.493686E+03 9.535727E+03 1.455732E+04 1.992827E+04 + 4.064865E+03 6.263842E+03 8.958880E+03 1.359755E+04 1.880743E+04 + 3.887530E+03 6.010120E+03 8.533022E+03 1.285676E+04 1.765041E+04 + 3.710838E+03 5.644613E+03 8.114734E+03 1.225415E+04 1.674403E+04 + 3.471189E+03 5.232003E+03 7.569285E+03 1.159771E+04 1.596195E+04 + 3.219598E+03 4.853223E+03 6.917240E+03 1.074779E+04 1.521727E+04 + 2.990952E+03 4.503798E+03 6.281352E+03 9.735854E+03 1.435637E+04 + 2.802228E+03 4.326946E+03 5.757176E+03 8.722134E+03 1.325640E+04 + 2.631275E+03 4.160720E+03 5.551683E+03 7.929669E+03 1.187773E+04 + 2.536453E+03 3.930611E+03 5.345417E+03 7.499034E+03 1.069139E+04 + 2.381676E+03 3.612450E+03 5.102127E+03 7.102986E+03 9.803664E+03 + 2.192723E+03 3.369275E+03 4.764069E+03 6.491547E+03 9.197381E+03 + 1.970676E+03 3.016962E+03 4.427871E+03 6.019052E+03 8.441246E+03 + 1.808348E+03 2.721685E+03 4.021501E+03 5.524242E+03 7.864875E+03 + 1.655806E+03 2.503746E+03 3.732448E+03 5.132675E+03 7.350170E+03 + 1.501002E+03 2.379365E+03 3.507325E+03 4.841320E+03 6.910930E+03 + 1.366845E+03 2.246442E+03 3.407670E+03 4.686438E+03 6.520584E+03 + 1.249801E+03 2.144923E+03 3.227107E+03 4.587650E+03 6.270798E+03 + 1.155096E+03 2.012588E+03 3.026535E+03 4.341416E+03 5.881329E+03 + 1.074572E+03 1.860789E+03 2.811557E+03 4.003387E+03 5.435677E+03 + 9.854559E+02 1.742235E+03 2.607000E+03 3.624746E+03 4.975066E+03 + 8.871070E+02 1.595999E+03 2.424351E+03 3.321685E+03 4.568603E+03 + 8.014107E+02 1.417533E+03 2.187793E+03 3.005463E+03 4.140730E+03 + 7.542307E+02 1.288344E+03 1.958117E+03 2.708277E+03 3.697674E+03 + 7.994860E+02 1.273672E+03 1.857030E+03 2.511490E+03 3.365191E+03 + 8.755222E+02 1.297250E+03 1.799529E+03 2.367041E+03 3.174199E+03 + 9.255004E+02 1.307607E+03 1.724890E+03 2.274623E+03 2.946952E+03 + 9.464614E+02 1.295518E+03 1.638248E+03 2.192326E+03 2.741790E+03 + 9.382249E+02 1.247536E+03 1.544525E+03 2.055188E+03 2.549438E+03 + 9.037290E+02 1.170853E+03 1.474026E+03 1.860186E+03 2.642681E+03 + 8.528829E+02 1.078598E+03 1.371650E+03 1.786856E+03 2.822657E+03 + 7.883300E+02 9.758213E+02 1.256027E+03 1.923413E+03 2.945325E+03 + 7.247065E+02 8.906097E+02 1.237254E+03 1.991853E+03 2.961126E+03 + 4.632834E+03 7.462739E+03 1.101688E+04 1.558547E+04 2.189115E+04 + 4.665607E+03 7.498448E+03 1.106776E+04 1.564780E+04 2.198091E+04 + 4.698166E+03 7.533761E+03 1.111811E+04 1.570952E+04 2.206999E+04 + 4.730403E+03 7.568535E+03 1.116774E+04 1.577043E+04 2.215813E+04 + 4.763340E+03 7.603872E+03 1.121822E+04 1.583244E+04 2.224811E+04 + 4.794735E+03 7.637220E+03 1.126602E+04 1.589128E+04 2.233385E+04 + 4.825493E+03 7.669662E+03 1.131250E+04 1.594865E+04 2.241788E+04 + 4.857642E+03 7.703304E+03 1.136076E+04 1.600834E+04 2.250569E+04 + 4.897485E+03 7.744930E+03 1.142051E+04 1.608219E+04 2.261434E+04 + 5.001131E+03 7.855126E+03 1.157829E+04 1.627536E+04 2.289506E+04 + 5.254792E+03 8.124769E+03 1.196449E+04 1.674552E+04 2.357602E+04 + 5.647533E+03 8.536251E+03 1.255526E+04 1.746230E+04 2.461778E+04 + 6.084005E+03 9.070720E+03 1.320047E+04 1.853146E+04 2.576127E+04 + 6.537117E+03 9.708629E+03 1.399565E+04 1.966324E+04 2.693538E+04 + 7.002070E+03 1.036744E+04 1.481108E+04 2.083039E+04 2.827888E+04 + 7.460836E+03 1.102141E+04 1.561588E+04 2.199089E+04 2.984310E+04 + 7.927215E+03 1.168999E+04 1.643520E+04 2.318211E+04 3.128345E+04 + 8.394909E+03 1.236396E+04 1.725924E+04 2.439182E+04 3.279056E+04 + 8.958715E+03 1.309146E+04 1.844103E+04 2.558616E+04 3.462181E+04 + 9.597105E+03 1.389485E+04 1.960075E+04 2.677058E+04 3.647441E+04 + 1.024271E+04 1.470253E+04 2.077861E+04 2.838474E+04 3.836301E+04 + 1.086857E+04 1.548318E+04 2.193225E+04 2.969711E+04 4.022332E+04 + 1.146392E+04 1.618699E+04 2.299147E+04 3.098926E+04 4.194641E+04 + 1.182452E+04 1.673330E+04 2.359242E+04 3.198184E+04 4.295080E+04 + 1.158527E+04 1.642777E+04 2.320439E+04 3.151654E+04 4.237925E+04 + 1.093939E+04 1.546480E+04 2.213982E+04 3.005924E+04 4.072572E+04 + 1.012735E+04 1.449488E+04 2.078968E+04 2.820481E+04 3.861389E+04 + 9.231896E+03 1.339830E+04 1.928452E+04 2.620514E+04 3.624852E+04 + 8.454348E+03 1.226384E+04 1.773325E+04 2.425878E+04 3.379906E+04 + 7.780136E+03 1.139639E+04 1.618675E+04 2.226945E+04 3.129497E+04 + 7.326995E+03 1.073338E+04 1.518631E+04 2.046609E+04 2.874386E+04 + 7.010736E+03 1.016002E+04 1.447524E+04 1.921226E+04 2.619833E+04 + 6.663375E+03 9.556863E+03 1.380553E+04 1.845175E+04 2.408192E+04 + 6.229355E+03 8.901229E+03 1.301999E+04 1.751684E+04 2.267857E+04 + 5.710164E+03 8.166682E+03 1.210130E+04 1.648281E+04 2.146351E+04 + 4.972100E+03 7.437387E+03 1.105943E+04 1.525838E+04 2.014919E+04 + 4.561057E+03 6.800550E+03 1.013416E+04 1.410817E+04 1.861123E+04 + 4.144667E+03 6.225747E+03 9.399327E+03 1.332951E+04 1.688731E+04 + 3.817002E+03 5.844722E+03 8.680382E+03 1.238334E+04 1.593380E+04 + 3.462606E+03 5.513231E+03 8.096610E+03 1.158532E+04 1.514007E+04 + 3.157662E+03 5.211181E+03 7.491043E+03 1.080159E+04 1.411187E+04 + 2.838603E+03 4.806927E+03 7.021017E+03 9.935381E+03 1.313312E+04 + 2.539933E+03 4.331285E+03 6.407495E+03 8.924469E+03 1.190240E+04 + 2.257850E+03 3.845089E+03 5.754153E+03 7.949252E+03 1.058923E+04 + 1.957901E+03 3.385764E+03 5.065301E+03 6.911044E+03 9.380480E+03 + 1.720775E+03 2.941129E+03 4.425692E+03 6.038192E+03 8.140157E+03 + 1.563054E+03 2.586631E+03 3.853792E+03 5.254228E+03 7.019966E+03 + 1.432015E+03 2.313236E+03 3.365577E+03 4.550239E+03 5.982347E+03 + 1.279172E+03 2.086698E+03 2.961913E+03 3.926830E+03 5.098810E+03 + 1.149994E+03 1.874636E+03 2.660237E+03 3.446699E+03 4.407559E+03 + 1.130316E+03 1.782666E+03 2.478870E+03 3.160751E+03 4.101901E+03 + 1.142142E+03 1.722553E+03 2.326744E+03 2.910164E+03 3.735150E+03 + 1.130299E+03 1.635618E+03 2.149282E+03 2.644963E+03 3.460937E+03 + 1.097495E+03 1.529149E+03 1.958227E+03 2.451165E+03 3.414568E+03 + 1.045432E+03 1.408077E+03 1.761245E+03 2.277961E+03 3.679436E+03 + 9.771706E+02 1.277630E+03 1.564929E+03 2.367889E+03 3.856056E+03 + 9.019647E+02 1.147996E+03 1.457719E+03 2.496383E+03 3.940613E+03 + 8.202843E+02 1.019883E+03 1.527833E+03 2.554616E+03 3.918964E+03 + 7.469807E+02 9.169288E+02 1.523826E+03 2.494185E+03 3.764401E+03 + 1.757175E+04 3.121186E+04 4.669030E+04 6.225139E+04 7.660691E+04 + 1.772539E+04 3.139869E+04 4.688597E+04 6.243619E+04 7.676830E+04 + 1.787930E+04 3.158497E+04 4.708024E+04 6.261886E+04 7.692703E+04 + 1.803324E+04 3.177030E+04 4.727255E+04 6.279871E+04 7.708229E+04 + 1.819213E+04 3.196058E+04 4.746900E+04 6.298144E+04 7.723901E+04 + 1.834603E+04 3.214354E+04 4.765649E+04 6.315435E+04 7.738570E+04 + 1.849951E+04 3.232458E+04 4.784048E+04 6.332239E+04 7.752648E+04 + 1.866237E+04 3.251535E+04 4.803298E+04 6.349674E+04 7.767094E+04 + 1.886430E+04 3.275135E+04 4.826987E+04 6.371201E+04 7.784928E+04 + 1.936606E+04 3.334491E+04 4.887845E+04 6.427602E+04 7.833240E+04 + 2.057655E+04 3.477175E+04 5.034377E+04 6.564222E+04 7.951507E+04 + 2.246838E+04 3.696203E+04 5.256785E+04 6.770079E+04 8.128860E+04 + 2.461169E+04 3.938314E+04 5.498597E+04 6.991007E+04 8.317057E+04 + 2.688386E+04 4.188786E+04 5.744221E+04 7.212220E+04 8.503021E+04 + 2.926579E+04 4.445105E+04 5.991090E+04 7.431266E+04 8.684510E+04 + 3.167200E+04 4.697762E+04 6.229970E+04 7.639834E+04 8.934037E+04 + 3.417443E+04 4.954507E+04 6.468325E+04 7.844535E+04 9.299679E+04 + 3.674531E+04 5.212200E+04 6.703024E+04 8.042443E+04 9.668803E+04 + 3.931037E+04 5.463216E+04 6.926904E+04 8.227206E+04 1.003153E+05 + 4.187581E+04 5.708240E+04 7.140594E+04 8.399265E+04 1.038977E+05 + 4.445088E+04 5.948089E+04 7.344723E+04 8.594366E+04 1.074584E+05 + 4.693649E+04 6.173079E+04 7.530410E+04 8.957397E+04 1.108701E+05 + 4.917762E+04 6.368671E+04 7.684760E+04 9.290417E+04 1.139323E+05 + 5.041380E+04 6.464551E+04 7.746621E+04 9.484662E+04 1.156137E+05 + 4.956267E+04 6.361586E+04 7.630352E+04 9.381719E+04 1.144261E+05 + 4.728467E+04 6.120286E+04 7.387505E+04 9.073930E+04 1.112399E+05 + 4.438384E+04 5.813333E+04 7.079430E+04 8.675995E+04 1.071240E+05 + 4.112324E+04 5.463577E+04 6.724412E+04 8.224258E+04 1.024071E+05 + 3.772437E+04 5.090857E+04 6.338736E+04 7.749095E+04 9.736809E+04 + 3.423162E+04 4.698587E+04 5.924415E+04 7.254205E+04 9.203252E+04 + 3.066739E+04 4.288223E+04 5.481828E+04 6.738899E+04 8.638278E+04 + 2.711946E+04 3.868209E+04 5.018211E+04 6.211564E+04 8.049325E+04 + 2.366929E+04 3.447123E+04 4.541598E+04 5.679273E+04 7.442942E+04 + 2.036514E+04 3.030879E+04 4.058209E+04 5.143785E+04 6.820611E+04 + 1.723622E+04 2.624059E+04 3.573673E+04 4.604187E+04 6.181268E+04 + 1.536780E+04 2.260264E+04 3.098857E+04 4.067344E+04 5.532384E+04 + 1.348990E+04 2.027374E+04 2.725353E+04 3.537940E+04 4.879815E+04 + 1.156448E+04 1.778708E+04 2.431865E+04 3.063419E+04 4.238808E+04 + 9.717938E+03 1.529973E+04 2.128113E+04 2.716354E+04 3.632624E+04 + 8.045374E+03 1.294884E+04 1.830933E+04 2.366973E+04 3.078918E+04 + 6.628594E+03 1.085510E+04 1.556577E+04 2.034701E+04 2.592898E+04 + 5.757065E+03 9.018499E+03 1.308729E+04 1.727097E+04 2.178104E+04 + 4.896321E+03 7.770369E+03 1.087410E+04 1.447515E+04 1.850119E+04 + 4.083127E+03 6.587411E+03 9.293267E+03 1.199841E+04 1.549399E+04 + 3.354595E+03 5.495313E+03 7.843629E+03 1.019142E+04 1.283247E+04 + 2.740630E+03 4.545845E+03 6.550408E+03 8.576629E+03 1.057148E+04 + 2.257622E+03 3.769707E+03 5.461342E+03 7.183455E+03 8.824977E+03 + 1.870238E+03 3.130759E+03 4.546476E+03 5.993842E+03 7.379935E+03 + 1.547184E+03 2.592926E+03 3.770217E+03 4.977130E+03 6.136608E+03 + 1.315361E+03 2.187076E+03 3.164539E+03 4.164713E+03 5.125131E+03 + 1.244796E+03 1.991214E+03 2.807958E+03 3.630339E+03 4.472450E+03 + 1.224546E+03 1.865330E+03 2.544733E+03 3.214387E+03 4.370038E+03 + 1.188253E+03 1.731443E+03 2.291027E+03 2.831711E+03 4.504125E+03 + 1.137400E+03 1.592340E+03 2.048945E+03 2.575365E+03 4.583521E+03 + 1.072310E+03 1.449013E+03 1.818417E+03 2.688881E+03 4.595200E+03 + 9.948737E+02 1.303678E+03 1.600418E+03 2.749698E+03 4.529596E+03 + 9.134587E+02 1.164384E+03 1.586758E+03 2.777969E+03 4.421514E+03 + 8.276112E+02 1.030044E+03 1.637917E+03 2.755196E+03 4.251474E+03 + 7.520257E+02 9.238195E+02 1.606531E+03 2.641636E+03 4.004776E+03 + +Band: 2, gas: 6, k-terms: 1 + 4.935294E+00 5.993381E+00 7.024152E+00 7.999804E+00 8.897974E+00 + 4.957803E+00 6.014639E+00 7.043906E+00 8.017856E+00 8.914185E+00 + 4.982239E+00 6.037588E+00 7.065142E+00 8.037209E+00 8.931538E+00 + 5.008983E+00 6.062562E+00 7.088150E+00 8.058111E+00 8.950247E+00 + 5.038973E+00 6.090437E+00 7.113740E+00 8.081305E+00 8.970981E+00 + 5.071956E+00 6.120908E+00 7.141580E+00 8.106457E+00 8.993430E+00 + 5.109050E+00 6.155006E+00 7.172613E+00 8.134416E+00 9.018344E+00 + 5.151950E+00 6.194331E+00 7.208321E+00 8.166536E+00 9.046947E+00 + 5.204167E+00 6.242260E+00 7.251884E+00 8.205746E+00 9.081876E+00 + 5.288400E+00 6.321085E+00 7.324580E+00 8.271808E+00 9.140991E+00 + 5.437792E+00 6.463264E+00 7.457294E+00 8.393304E+00 9.250011E+00 + 5.647003E+00 6.663043E+00 7.644105E+00 8.564357E+00 9.403293E+00 + 5.880527E+00 6.885119E+00 7.850977E+00 8.753110E+00 9.571862E+00 + 6.130214E+00 7.121315E+00 8.069990E+00 8.952143E+00 9.748972E+00 + 6.396787E+00 7.372202E+00 8.301594E+00 9.161811E+00 9.934912E+00 + 6.676865E+00 7.634425E+00 8.542583E+00 9.379184E+00 1.012710E+01 + 6.978322E+00 7.915513E+00 8.799994E+00 9.610661E+00 1.033123E+01 + 7.302300E+00 8.216496E+00 9.074748E+00 9.857065E+00 1.054804E+01 + 7.647762E+00 8.536378E+00 9.365946E+00 1.011764E+01 1.077697E+01 + 8.018793E+00 8.879081E+00 9.677278E+00 1.039578E+01 1.102108E+01 + 8.419888E+00 9.248895E+00 1.001277E+01 1.069515E+01 1.128368E+01 + 8.849406E+00 9.644395E+00 1.037124E+01 1.101489E+01 1.156420E+01 + 9.303172E+00 1.006197E+01 1.074969E+01 1.135266E+01 1.186102E+01 + 9.746501E+00 1.047044E+01 1.112104E+01 1.168591E+01 1.215563E+01 + 1.013202E+01 1.082835E+01 1.145031E+01 1.198665E+01 1.242844E+01 + 1.050139E+01 1.117567E+01 1.177470E+01 1.228842E+01 1.270829E+01 + 1.089765E+01 1.155283E+01 1.213099E+01 1.262325E+01 1.302237E+01 + 1.133200E+01 1.197102E+01 1.252993E+01 1.300124E+01 1.337964E+01 + 1.181059E+01 1.243640E+01 1.297736E+01 1.342803E+01 1.378501E+01 + 1.232821E+01 1.294429E+01 1.346882E+01 1.390029E+01 1.423592E+01 + 1.287602E+01 1.348561E+01 1.399716E+01 1.441118E+01 1.472607E+01 + 1.344497E+01 1.405282E+01 1.455395E+01 1.495178E+01 1.524733E+01 + 1.402769E+01 1.463623E+01 1.512887E+01 1.551278E+01 1.579030E+01 + 1.461016E+01 1.522339E+01 1.571033E+01 1.608190E+01 1.634272E+01 + 1.518115E+01 1.580167E+01 1.628490E+01 1.664588E+01 1.689165E+01 + 1.573064E+01 1.636054E+01 1.684165E+01 1.719348E+01 1.742569E+01 + 1.624739E+01 1.688899E+01 1.736981E+01 1.771418E+01 1.793459E+01 + 1.672321E+01 1.737966E+01 1.786233E+01 1.820087E+01 1.841111E+01 + 1.715980E+01 1.783039E+01 1.831526E+01 1.864934E+01 1.885094E+01 + 1.756050E+01 1.824448E+01 1.873048E+01 1.905885E+01 1.925094E+01 + 1.793255E+01 1.862649E+01 1.911122E+01 1.943211E+01 1.961336E+01 + 1.827210E+01 1.897344E+01 1.945539E+01 1.976793E+01 1.993784E+01 + 1.857167E+01 1.928061E+01 1.976029E+01 2.006526E+01 2.022489E+01 + 1.883013E+01 1.954835E+01 2.002727E+01 2.032614E+01 2.047702E+01 + 1.905269E+01 1.978067E+01 2.025996E+01 2.055416E+01 2.069774E+01 + 1.925176E+01 1.998743E+01 2.046589E+01 2.075474E+01 2.089077E+01 + 1.944671E+01 2.018231E+01 2.065494E+01 2.093497E+01 2.106075E+01 + 1.963289E+01 2.036282E+01 2.082634E+01 2.109548E+01 2.120922E+01 + 1.979991E+01 2.052335E+01 2.097753E+01 2.123590E+01 2.133835E+01 + 1.999039E+01 2.069215E+01 2.112655E+01 2.136633E+01 2.145177E+01 + 2.031803E+01 2.093983E+01 2.131402E+01 2.150431E+01 2.154752E+01 + 2.067530E+01 2.119619E+01 2.149434E+01 2.162280E+01 2.161278E+01 + 2.098661E+01 2.141353E+01 2.163967E+01 2.170857E+01 2.164651E+01 + 2.125239E+01 2.159250E+01 2.175062E+01 2.176231E+01 2.164968E+01 + 2.147218E+01 2.173318E+01 2.182785E+01 2.178541E+01 2.162456E+01 + 2.164750E+01 2.183723E+01 2.187350E+01 2.178068E+01 2.157486E+01 + 2.178523E+01 2.190857E+01 2.188939E+01 2.174809E+01 2.149896E+01 + 2.188488E+01 2.194836E+01 2.187816E+01 2.169177E+01 2.140259E+01 + 2.193261E+01 2.196185E+01 2.186191E+01 2.164925E+01 2.133657E+01 + +Band: 2, gas: 12, k-terms: 1 + 4.030201E-01 5.156144E-01 6.360369E-01 7.620039E-01 8.906296E-01 + 4.051161E-01 5.177676E-01 6.382337E-01 7.642227E-01 8.928304E-01 + 4.073679E-01 5.200646E-01 6.405659E-01 7.665699E-01 8.951527E-01 + 4.098068E-01 5.225344E-01 6.430602E-01 7.690705E-01 8.976202E-01 + 4.125161E-01 5.252619E-01 6.458031E-01 7.718110E-01 9.003187E-01 + 4.154563E-01 5.281977E-01 6.487377E-01 7.747299E-01 9.031841E-01 + 4.187262E-01 5.314412E-01 6.519634E-01 7.779256E-01 9.063126E-01 + 4.224788E-01 5.351502E-01 6.556410E-01 7.815604E-01 9.098652E-01 + 4.270520E-01 5.396819E-01 6.601416E-01 7.860124E-01 9.142183E-01 + 4.347800E-01 5.475584E-01 6.681214E-01 7.940179E-01 9.221126E-01 + 4.491661E-01 5.625589E-01 6.835541E-01 8.096553E-01 9.376145E-01 + 4.698312E-01 5.842246E-01 7.059151E-01 8.323212E-01 9.600678E-01 + 4.931588E-01 6.086044E-01 7.310036E-01 8.576561E-01 9.850572E-01 + 5.183149E-01 6.347818E-01 7.578336E-01 8.846237E-01 1.011531E+00 + 5.453995E-01 6.628496E-01 7.864824E-01 9.132836E-01 1.039533E+00 + 5.740292E-01 6.923886E-01 8.164968E-01 9.431623E-01 1.068594E+00 + 6.051299E-01 7.243702E-01 8.488512E-01 9.752441E-01 1.099670E+00 + 6.388822E-01 7.589680E-01 8.837135E-01 1.009670E+00 1.132891E+00 + 6.751788E-01 7.960544E-01 9.209388E-01 1.046283E+00 1.168110E+00 + 7.145751E-01 8.361991E-01 9.610968E-01 1.085647E+00 1.205873E+00 + 7.577270E-01 8.800557E-01 1.004855E+00 1.128415E+00 1.246817E+00 + 8.044947E-01 9.274738E-01 1.052047E+00 1.174434E+00 1.290813E+00 + 8.542894E-01 9.778602E-01 1.102092E+00 1.223169E+00 1.337394E+00 + 9.013672E-01 1.025440E+00 1.149358E+00 1.269320E+00 1.381702E+00 + 9.366017E-01 1.061185E+00 1.185186E+00 1.304860E+00 1.416629E+00 + 9.651706E-01 1.090546E+00 1.215153E+00 1.335302E+00 1.447441E+00 + 9.936567E-01 1.120284E+00 1.246018E+00 1.367190E+00 1.480267E+00 + 1.023952E+00 1.152368E+00 1.279798E+00 1.402529E+00 1.517051E+00 + 1.057594E+00 1.188356E+00 1.318082E+00 1.442908E+00 1.559339E+00 + 1.094453E+00 1.228049E+00 1.360670E+00 1.488197E+00 1.607078E+00 + 1.134068E+00 1.270853E+00 1.406889E+00 1.537755E+00 1.659689E+00 + 1.176560E+00 1.316721E+00 1.456572E+00 1.591302E+00 1.716839E+00 + 1.221998E+00 1.365542E+00 1.509447E+00 1.648411E+00 1.777995E+00 + 1.269924E+00 1.416778E+00 1.564752E+00 1.708141E+00 1.842085E+00 + 1.319314E+00 1.469351E+00 1.621252E+00 1.769080E+00 1.907556E+00 + 1.369396E+00 1.522514E+00 1.678089E+00 1.830192E+00 1.973186E+00 + 1.418669E+00 1.574830E+00 1.733789E+00 1.889889E+00 2.037228E+00 + 1.466028E+00 1.625336E+00 1.787415E+00 1.947162E+00 2.098507E+00 + 1.511408E+00 1.674060E+00 1.839053E+00 2.002052E+00 2.156983E+00 + 1.554746E+00 1.720908E+00 1.888737E+00 2.054602E+00 2.212629E+00 + 1.596545E+00 1.766596E+00 1.937271E+00 2.105617E+00 2.266181E+00 + 1.635442E+00 1.809261E+00 1.982841E+00 2.153432E+00 2.316106E+00 + 1.669676E+00 1.846567E+00 2.022674E+00 2.195697E+00 2.360232E+00 + 1.698796E+00 1.878335E+00 2.056262E+00 2.230965E+00 2.397674E+00 + 1.723636E+00 1.905326E+00 2.084659E+00 2.260469E+00 2.428589E+00 + 1.746641E+00 1.929922E+00 2.110208E+00 2.286698E+00 2.455472E+00 + 1.771800E+00 1.956037E+00 2.136770E+00 2.313430E+00 2.482275E+00 + 1.798156E+00 1.982786E+00 2.163520E+00 2.339921E+00 2.508368E+00 + 1.823530E+00 2.008130E+00 2.188522E+00 2.364377E+00 2.532167E+00 + 1.857006E+00 2.040957E+00 2.220554E+00 2.395344E+00 2.561775E+00 + 1.925272E+00 2.107269E+00 2.285056E+00 2.457280E+00 2.620032E+00 + 2.010825E+00 2.190335E+00 2.365521E+00 2.533944E+00 2.691313E+00 + 2.097443E+00 2.274367E+00 2.446418E+00 2.610298E+00 2.761474E+00 + 2.184866E+00 2.358978E+00 2.527280E+00 2.685840E+00 2.830034E+00 + 2.271896E+00 2.442852E+00 2.606762E+00 2.759277E+00 2.895833E+00 + 2.357088E+00 2.524473E+00 2.683393E+00 2.829266E+00 2.957726E+00 + 2.442406E+00 2.605639E+00 2.758824E+00 2.897317E+00 3.016761E+00 + 2.525137E+00 2.683689E+00 2.830574E+00 2.961256E+00 3.071461E+00 + 2.577678E+00 2.732880E+00 2.875447E+00 3.000853E+00 3.105281E+00 + +Band: 3, gas: 1, k-terms: 5 + 9.971543E-08 1.088851E-07 1.311082E-07 1.634951E-07 2.045455E-07 + 1.217003E-07 1.329968E-07 1.602157E-07 1.997037E-07 2.499897E-07 + 1.484728E-07 1.624746E-07 1.958507E-07 2.440292E-07 3.055174E-07 + 1.811362E-07 1.985644E-07 2.393641E-07 2.981064E-07 3.733175E-07 + 2.210328E-07 2.424475E-07 2.925929E-07 3.642000E-07 4.562043E-07 + 2.694140E-07 2.962826E-07 3.576777E-07 4.449860E-07 5.574362E-07 + 3.293951E-07 3.621107E-07 4.373000E-07 5.435519E-07 6.810543E-07 + 4.016966E-07 4.423115E-07 5.346985E-07 6.640470E-07 8.323054E-07 + 4.903817E-07 5.408751E-07 6.542779E-07 8.121346E-07 1.017831E-06 + 5.993217E-07 6.632135E-07 8.053007E-07 9.984789E-07 1.251596E-06 + 7.363808E-07 8.205141E-07 1.003422E-06 1.241934E-06 1.559715E-06 + 9.072294E-07 1.023940E-06 1.264442E-06 1.562892E-06 1.966518E-06 + 1.121533E-06 1.282879E-06 1.595925E-06 1.974927E-06 2.487869E-06 + 1.390062E-06 1.612735E-06 2.013741E-06 2.498170E-06 3.152421E-06 + 1.728245E-06 2.036601E-06 2.543012E-06 3.162361E-06 3.998280E-06 + 2.154293E-06 2.584723E-06 3.210749E-06 4.003401E-06 5.070976E-06 + 2.692867E-06 3.282098E-06 4.059085E-06 5.079203E-06 6.439541E-06 + 3.378387E-06 4.166576E-06 5.141731E-06 6.452669E-06 8.184629E-06 + 4.251963E-06 5.282717E-06 6.523698E-06 8.200329E-06 1.040375E-05 + 5.366142E-06 6.689093E-06 8.280210E-06 1.042873E-05 1.323396E-05 + 6.817193E-06 8.475257E-06 1.051854E-05 1.328267E-05 1.685138E-05 + 8.685349E-06 1.074225E-05 1.337715E-05 1.692105E-05 2.146193E-05 + 1.103527E-05 1.360271E-05 1.699583E-05 2.151622E-05 2.729071E-05 + 1.383085E-05 1.703162E-05 2.131496E-05 2.698486E-05 3.422826E-05 + 1.683748E-05 2.072420E-05 2.592440E-05 3.280170E-05 4.159112E-05 + 2.010395E-05 2.473405E-05 3.087056E-05 3.903712E-05 4.946397E-05 + 2.378562E-05 2.932574E-05 3.649130E-05 4.606761E-05 5.832710E-05 + 2.799695E-05 3.467648E-05 4.298409E-05 5.413066E-05 6.848940E-05 + 3.289787E-05 4.098356E-05 5.063704E-05 6.358087E-05 8.039420E-05 + 3.889780E-05 4.844716E-05 5.965596E-05 7.470506E-05 9.437052E-05 + 4.606232E-05 5.720294E-05 7.028624E-05 8.779771E-05 1.107349E-04 + 5.470698E-05 6.748822E-05 8.283495E-05 1.032762E-04 1.300275E-04 + 6.509142E-05 7.962206E-05 9.791775E-05 1.216602E-04 1.529462E-04 + 7.759803E-05 9.393794E-05 1.159566E-04 1.436095E-04 1.802009E-04 + 9.267242E-05 1.109087E-04 1.374026E-04 1.695830E-04 2.124287E-04 + 1.108865E-04 1.308282E-04 1.628239E-04 2.004313E-04 2.504092E-04 + 1.326972E-04 1.550013E-04 1.928464E-04 2.367641E-04 2.949493E-04 + 1.589848E-04 1.836952E-04 2.278753E-04 2.794180E-04 3.470278E-04 + 1.906357E-04 2.179903E-04 2.690361E-04 3.296708E-04 4.084000E-04 + 2.288010E-04 2.590605E-04 3.177434E-04 3.890521E-04 4.810357E-04 + 2.749382E-04 3.089940E-04 3.762741E-04 4.607301E-04 5.679805E-04 + 3.305755E-04 3.689303E-04 4.461942E-04 5.460768E-04 6.713234E-04 + 3.970938E-04 4.399057E-04 5.280228E-04 6.458080E-04 7.915673E-04 + 4.753843E-04 5.234550E-04 6.231498E-04 7.614137E-04 9.302511E-04 + 5.661961E-04 6.219604E-04 7.335711E-04 8.945066E-04 1.088933E-03 + 6.742636E-04 7.381620E-04 8.632604E-04 1.049022E-03 1.272632E-03 + 8.020433E-04 8.762411E-04 1.018568E-03 1.232914E-03 1.488408E-03 + 9.512244E-04 1.039669E-03 1.202366E-03 1.447420E-03 1.739981E-03 + 1.124744E-03 1.229006E-03 1.414876E-03 1.694125E-03 2.026497E-03 + 1.330936E-03 1.456709E-03 1.674430E-03 1.991644E-03 2.372775E-03 + 1.591601E-03 1.760711E-03 2.040183E-03 2.409532E-03 2.864483E-03 + 1.919911E-03 2.151649E-03 2.511902E-03 2.953957E-03 3.511885E-03 + 2.328933E-03 2.634069E-03 3.082119E-03 3.627255E-03 4.318417E-03 + 2.834583E-03 3.241192E-03 3.786073E-03 4.463882E-03 5.338125E-03 + 3.462698E-03 3.990479E-03 4.657857E-03 5.521800E-03 6.652299E-03 + 4.241855E-03 4.919721E-03 5.768390E-03 6.890668E-03 8.388205E-03 + 5.248888E-03 6.103637E-03 7.214272E-03 8.719915E-03 1.075984E-02 + 6.522290E-03 7.629682E-03 9.126089E-03 1.118164E-02 1.396659E-02 + 7.665144E-03 9.025115E-03 1.089038E-02 1.345093E-02 1.688521E-02 + 2.643683E-06 5.219528E-06 1.010531E-05 1.884392E-05 3.425074E-05 + 3.219216E-06 6.308423E-06 1.209410E-05 2.221092E-05 3.972708E-05 + 3.912831E-06 7.615010E-06 1.447085E-05 2.614112E-05 4.606418E-05 + 4.771030E-06 9.186254E-06 1.726816E-05 3.083419E-05 5.336631E-05 + 5.815252E-06 1.109622E-05 2.060370E-05 3.640178E-05 6.199282E-05 + 7.062885E-06 1.340227E-05 2.466280E-05 4.310350E-05 7.198722E-05 + 8.619897E-06 1.617099E-05 2.953100E-05 5.079896E-05 8.351638E-05 + 1.048795E-05 1.952455E-05 3.529433E-05 5.993343E-05 9.706852E-05 + 1.281785E-05 2.352898E-05 4.223837E-05 7.074768E-05 1.128851E-04 + 1.587912E-05 2.889098E-05 5.123946E-05 8.459933E-05 1.325991E-04 + 2.033995E-05 3.664550E-05 6.383671E-05 1.034253E-04 1.588915E-04 + 2.681419E-05 4.765607E-05 8.125171E-05 1.286513E-04 1.931548E-04 + 3.545620E-05 6.228771E-05 1.034811E-04 1.598700E-04 2.345336E-04 + 4.685519E-05 8.093537E-05 1.309948E-04 1.976810E-04 2.830987E-04 + 6.193416E-05 1.043836E-04 1.647376E-04 2.426845E-04 3.398964E-04 + 8.133126E-05 1.339263E-04 2.053822E-04 2.955166E-04 4.052714E-04 + 1.059816E-04 1.704754E-04 2.541208E-04 3.575200E-04 4.809593E-04 + 1.374600E-04 2.150412E-04 3.120886E-04 4.298296E-04 5.682241E-04 + 1.767606E-04 2.685562E-04 3.801195E-04 5.134382E-04 6.682026E-04 + 2.250378E-04 3.321857E-04 4.597848E-04 6.104512E-04 7.835687E-04 + 2.837946E-04 4.075164E-04 5.527364E-04 7.229682E-04 9.169972E-04 + 3.543440E-04 4.958701E-04 6.608812E-04 8.528094E-04 1.070611E-03 + 4.367363E-04 5.972891E-04 7.844489E-04 1.000885E-03 1.245683E-03 + 5.234418E-04 7.041811E-04 9.144879E-04 1.157157E-03 1.431654E-03 + 5.987568E-04 7.984047E-04 1.030438E-03 1.298521E-03 1.602757E-03 + 6.655483E-04 8.835309E-04 1.136434E-03 1.429880E-03 1.764668E-03 + 7.316098E-04 9.689833E-04 1.244245E-03 1.564263E-03 1.932136E-03 + 8.007325E-04 1.058811E-03 1.357335E-03 1.706489E-03 2.110681E-03 + 8.764604E-04 1.157014E-03 1.481937E-03 1.863335E-03 2.308820E-03 + 9.620570E-04 1.265559E-03 1.619600E-03 2.037688E-03 2.529783E-03 + 1.057727E-03 1.385605E-03 1.772198E-03 2.232003E-03 2.777132E-03 + 1.166550E-03 1.520608E-03 1.944333E-03 2.450945E-03 3.058186E-03 + 1.291886E-03 1.675383E-03 2.141402E-03 2.702265E-03 3.381602E-03 + 1.436789E-03 1.852985E-03 2.367628E-03 2.991875E-03 3.757358E-03 + 1.605385E-03 2.057800E-03 2.626173E-03 3.324585E-03 4.191884E-03 + 1.801553E-03 2.293833E-03 2.923138E-03 3.709112E-03 4.701047E-03 + 2.029784E-03 2.568049E-03 3.264867E-03 4.153736E-03 5.295287E-03 + 2.296316E-03 2.885003E-03 3.657945E-03 4.670115E-03 5.997647E-03 + 2.614572E-03 3.258954E-03 4.121429E-03 5.283038E-03 6.844547E-03 + 2.999607E-03 3.707159E-03 4.679401E-03 6.028765E-03 7.890225E-03 + 3.472620E-03 4.259918E-03 5.372031E-03 6.966036E-03 9.215734E-03 + 4.050717E-03 4.937138E-03 6.230467E-03 8.142483E-03 1.088558E-02 + 4.751974E-03 5.760355E-03 7.282414E-03 9.595899E-03 1.292936E-02 + 5.602240E-03 6.764260E-03 8.573071E-03 1.137425E-02 1.538836E-02 + 6.641237E-03 7.998589E-03 1.016079E-02 1.353291E-02 1.832601E-02 + 7.931257E-03 9.535144E-03 1.213554E-02 1.617253E-02 2.190056E-02 + 9.550238E-03 1.148796E-02 1.463307E-02 1.949775E-02 2.637720E-02 + 1.157048E-02 1.392547E-02 1.773958E-02 2.361969E-02 3.193077E-02 + 1.403579E-02 1.689259E-02 2.151421E-02 2.861637E-02 3.865459E-02 + 1.716624E-02 2.071356E-02 2.640484E-02 3.513481E-02 4.743325E-02 + 2.163076E-02 2.650274E-02 3.410855E-02 4.560251E-02 6.154011E-02 + 2.787105E-02 3.478996E-02 4.534823E-02 6.089626E-02 8.205418E-02 + 3.625289E-02 4.592182E-02 6.062827E-02 8.153640E-02 1.095757E-01 + 4.751291E-02 6.098408E-02 8.123698E-02 1.091773E-01 1.462784E-01 + 6.252872E-02 8.129631E-02 1.086435E-01 1.457769E-01 1.946552E-01 + 8.223509E-02 1.082188E-01 1.447073E-01 1.935995E-01 2.574036E-01 + 1.085854E-01 1.438612E-01 1.921003E-01 2.561695E-01 3.390154E-01 + 1.430861E-01 1.897104E-01 2.527776E-01 3.359110E-01 4.422638E-01 + 1.732276E-01 2.293312E-01 3.048611E-01 4.040430E-01 5.301567E-01 + 1.215361E-03 2.330795E-03 4.199198E-03 7.662679E-03 1.547515E-02 + 1.336886E-03 2.533463E-03 4.560751E-03 8.387124E-03 1.700844E-02 + 1.470860E-03 2.760410E-03 4.971625E-03 9.230650E-03 1.871423E-02 + 1.627060E-03 3.018253E-03 5.433415E-03 1.027330E-02 2.063361E-02 + 1.795086E-03 3.318217E-03 5.981999E-03 1.152056E-02 2.292602E-02 + 1.987930E-03 3.666309E-03 6.678888E-03 1.308011E-02 2.554175E-02 + 2.211784E-03 4.059711E-03 7.511832E-03 1.481605E-02 2.849391E-02 + 2.461191E-03 4.534520E-03 8.493899E-03 1.689228E-02 3.203356E-02 + 2.762535E-03 5.078648E-03 9.711879E-03 1.930922E-02 3.620301E-02 + 3.164514E-03 5.851119E-03 1.140308E-02 2.257843E-02 4.166309E-02 + 3.755285E-03 7.049976E-03 1.398017E-02 2.729477E-02 4.939369E-02 + 4.667386E-03 8.888453E-03 1.780666E-02 3.403096E-02 6.023189E-02 + 5.840950E-03 1.154267E-02 2.285352E-02 4.264541E-02 7.407554E-02 + 7.442934E-03 1.512369E-02 2.935140E-02 5.360961E-02 9.111760E-02 + 9.726784E-03 1.981623E-02 3.766416E-02 6.725887E-02 1.122609E-01 + 1.290801E-02 2.604618E-02 4.825903E-02 8.427371E-02 1.381467E-01 + 1.716486E-02 3.401148E-02 6.164004E-02 1.053776E-01 1.700087E-01 + 2.293362E-02 4.431297E-02 7.880871E-02 1.317005E-01 2.091969E-01 + 3.065133E-02 5.747991E-02 1.001609E-01 1.645654E-01 2.575598E-01 + 4.086890E-02 7.461441E-02 1.276524E-01 2.061599E-01 3.180936E-01 + 5.425787E-02 9.683261E-02 1.624656E-01 2.585679E-01 3.934610E-01 + 7.178816E-02 1.255022E-01 2.070981E-01 3.236669E-01 4.863086E-01 + 9.408516E-02 1.616579E-01 2.622728E-01 4.039301E-01 6.000701E-01 + 1.191023E-01 2.024377E-01 3.231411E-01 4.926915E-01 7.244209E-01 + 1.402452E-01 2.367137E-01 3.764095E-01 5.716829E-01 8.348894E-01 + 1.574849E-01 2.651952E-01 4.229366E-01 6.408372E-01 9.347819E-01 + 1.729678E-01 2.920950E-01 4.687110E-01 7.116700E-01 1.037333E+00 + 1.889925E-01 3.202439E-01 5.143014E-01 7.855018E-01 1.146927E+00 + 2.059173E-01 3.513191E-01 5.658505E-01 8.670746E-01 1.270406E+00 + 2.258568E-01 3.854252E-01 6.228229E-01 9.568674E-01 1.409464E+00 + 2.471414E-01 4.231040E-01 6.844090E-01 1.058198E+00 1.565769E+00 + 2.713060E-01 4.653383E-01 7.558502E-01 1.170565E+00 1.743165E+00 + 2.980498E-01 5.156208E-01 8.395567E-01 1.302065E+00 1.942943E+00 + 3.267135E-01 5.714690E-01 9.315805E-01 1.448012E+00 2.167751E+00 + 3.601051E-01 6.340637E-01 1.038926E+00 1.614943E+00 2.419434E+00 + 3.935819E-01 7.065008E-01 1.155443E+00 1.802965E+00 2.708393E+00 + 4.323577E-01 7.836298E-01 1.293131E+00 2.015662E+00 3.028709E+00 + 4.700272E-01 8.642872E-01 1.436109E+00 2.247161E+00 3.374958E+00 + 5.148943E-01 9.583636E-01 1.598837E+00 2.502381E+00 3.763708E+00 + 5.677648E-01 1.061480E+00 1.793320E+00 2.811809E+00 4.211236E+00 + 6.332179E-01 1.192504E+00 2.023751E+00 3.165546E+00 4.734311E+00 + 7.093898E-01 1.345957E+00 2.292383E+00 3.581568E+00 5.342403E+00 + 7.949832E-01 1.515394E+00 2.589665E+00 4.047100E+00 6.014196E+00 + 8.862780E-01 1.699728E+00 2.909034E+00 4.550279E+00 6.741317E+00 + 9.855181E-01 1.897523E+00 3.246377E+00 5.096059E+00 7.495823E+00 + 1.097653E+00 2.108212E+00 3.619916E+00 5.665988E+00 8.332435E+00 + 1.226796E+00 2.373982E+00 4.056390E+00 6.356308E+00 9.286708E+00 + 1.390711E+00 2.667884E+00 4.560763E+00 7.138085E+00 1.036618E+01 + 1.546007E+00 2.980683E+00 5.092036E+00 7.929642E+00 1.153282E+01 + 1.787930E+00 3.403017E+00 5.716895E+00 8.892703E+00 1.287187E+01 + 2.315956E+00 4.234141E+00 6.950723E+00 1.057241E+01 1.508379E+01 + 3.127443E+00 5.444436E+00 8.631216E+00 1.283248E+01 1.802639E+01 + 4.091868E+00 6.859697E+00 1.059557E+01 1.543807E+01 2.133245E+01 + 5.188706E+00 8.416884E+00 1.270116E+01 1.819575E+01 2.486052E+01 + 6.369398E+00 1.003866E+01 1.484639E+01 2.095429E+01 2.836616E+01 + 7.561686E+00 1.163042E+01 1.692922E+01 2.363498E+01 3.181626E+01 + 8.788611E+00 1.323879E+01 1.907762E+01 2.632128E+01 3.500741E+01 + 9.998143E+00 1.490682E+01 2.114827E+01 2.873186E+01 3.781425E+01 + 1.069891E+01 1.585263E+01 2.235803E+01 3.008366E+01 3.927590E+01 + 4.406256E-01 1.524208E+00 4.164628E+00 9.567645E+00 2.034996E+01 + 4.557139E-01 1.551826E+00 4.220668E+00 9.675345E+00 2.055492E+01 + 4.722056E-01 1.581065E+00 4.279065E+00 9.793027E+00 2.076518E+01 + 4.902483E-01 1.612154E+00 4.340180E+00 9.915432E+00 2.098150E+01 + 4.960084E-01 1.651496E+00 4.405990E+00 1.004657E+01 2.121094E+01 + 5.174852E-01 1.696373E+00 4.484452E+00 1.018109E+01 2.144281E+01 + 5.329724E-01 1.717729E+00 4.563380E+00 1.032321E+01 2.168443E+01 + 5.527761E-01 1.778115E+00 4.651731E+00 1.048072E+01 2.194972E+01 + 5.790045E-01 1.850534E+00 4.765562E+00 1.067495E+01 2.227790E+01 + 6.403596E-01 1.978590E+00 4.995429E+00 1.108250E+01 2.299812E+01 + 7.346840E-01 2.182510E+00 5.482397E+00 1.199595E+01 2.447831E+01 + 9.496069E-01 2.579244E+00 6.254779E+00 1.346070E+01 2.713420E+01 + 1.185468E+00 3.079537E+00 7.230660E+00 1.522288E+01 3.027996E+01 + 1.480773E+00 3.670320E+00 8.477079E+00 1.732018E+01 3.388795E+01 + 1.840331E+00 4.449122E+00 9.829968E+00 1.975975E+01 3.778946E+01 + 2.277528E+00 5.367590E+00 1.137543E+01 2.244924E+01 4.234439E+01 + 2.762418E+00 6.309849E+00 1.304072E+01 2.535162E+01 4.742544E+01 + 3.409413E+00 7.523562E+00 1.517660E+01 2.874007E+01 5.332732E+01 + 4.224292E+00 8.902737E+00 1.740016E+01 3.291114E+01 5.971408E+01 + 5.217874E+00 1.068229E+01 2.030619E+01 3.750942E+01 6.702306E+01 + 6.484028E+00 1.279837E+01 2.383021E+01 4.306071E+01 7.554712E+01 + 8.029589E+00 1.520329E+01 2.793929E+01 4.930216E+01 8.486224E+01 + 9.774060E+00 1.812500E+01 3.234296E+01 5.599841E+01 9.516456E+01 + 1.159576E+01 2.095553E+01 3.633979E+01 6.169245E+01 1.034269E+02 + 1.280298E+01 2.236206E+01 3.802148E+01 6.357819E+01 1.054438E+02 + 1.341854E+01 2.287537E+01 3.815117E+01 6.331933E+01 1.033460E+02 + 1.371190E+01 2.356773E+01 3.836531E+01 6.256980E+01 1.001614E+02 + 1.408620E+01 2.423641E+01 3.877668E+01 6.182074E+01 9.722400E+01 + 1.435010E+01 2.485640E+01 3.946732E+01 6.125494E+01 9.539617E+01 + 1.499583E+01 2.563435E+01 4.059258E+01 6.174251E+01 9.460535E+01 + 1.550226E+01 2.647854E+01 4.183236E+01 6.352245E+01 9.457875E+01 + 1.604142E+01 2.745127E+01 4.343608E+01 6.549879E+01 9.612038E+01 + 1.647402E+01 2.881824E+01 4.605057E+01 6.853301E+01 9.915177E+01 + 1.716070E+01 3.002519E+01 4.793412E+01 7.149694E+01 1.034340E+02 + 1.810763E+01 3.153870E+01 5.104779E+01 7.576368E+01 1.078495E+02 + 1.838566E+01 3.336330E+01 5.346205E+01 8.047820E+01 1.132545E+02 + 1.919849E+01 3.463806E+01 5.649306E+01 8.514822E+01 1.196484E+02 + 1.960152E+01 3.587207E+01 5.861522E+01 8.928474E+01 1.255479E+02 + 2.026527E+01 3.726859E+01 6.075990E+01 9.207304E+01 1.316455E+02 + 2.079243E+01 3.808008E+01 6.285757E+01 9.619659E+01 1.372273E+02 + 2.150845E+01 3.925839E+01 6.477223E+01 9.891689E+01 1.426365E+02 + 2.197748E+01 4.018743E+01 6.646207E+01 1.012750E+02 1.472435E+02 + 2.198393E+01 4.035331E+01 6.662961E+01 1.022869E+02 1.489959E+02 + 2.151028E+01 3.978392E+01 6.566621E+01 1.014621E+02 1.477037E+02 + 2.052986E+01 3.849410E+01 6.352157E+01 9.821408E+01 1.440485E+02 + 1.923804E+01 3.640905E+01 6.132982E+01 9.473527E+01 1.397943E+02 + 1.806947E+01 3.409046E+01 5.844834E+01 9.145585E+01 1.358928E+02 + 1.690657E+01 3.175888E+01 5.521977E+01 8.815051E+01 1.323933E+02 + 1.576082E+01 2.943388E+01 5.207496E+01 8.498213E+01 1.266245E+02 + 1.495951E+01 2.796342E+01 5.013145E+01 8.155841E+01 1.205715E+02 + 1.588553E+01 2.962203E+01 5.213665E+01 8.268298E+01 1.207758E+02 + 1.787818E+01 3.310492E+01 5.540419E+01 8.571565E+01 1.232365E+02 + 2.052732E+01 3.600186E+01 5.819146E+01 8.810654E+01 1.249646E+02 + 2.300607E+01 3.868833E+01 6.077013E+01 9.049473E+01 1.270075E+02 + 2.534273E+01 4.120897E+01 6.358713E+01 9.371000E+01 1.309524E+02 + 2.769765E+01 4.393261E+01 6.722923E+01 9.890633E+01 1.363991E+02 + 3.013985E+01 4.734205E+01 7.263014E+01 1.045394E+02 1.408668E+02 + 3.275785E+01 5.193626E+01 7.836454E+01 1.095824E+02 1.443081E+02 + 3.437077E+01 5.461986E+01 8.041688E+01 1.106769E+02 1.441213E+02 + 1.170385E+02 2.892208E+02 5.224496E+02 8.801924E+02 1.318975E+03 + 1.185852E+02 2.920151E+02 5.264503E+02 8.853377E+02 1.324986E+03 + 1.201485E+02 2.948281E+02 5.304708E+02 8.904957E+02 1.331001E+03 + 1.217282E+02 2.976585E+02 5.345088E+02 8.956624E+02 1.337012E+03 + 1.233754E+02 3.005972E+02 5.386936E+02 9.010025E+02 1.343211E+03 + 1.249934E+02 3.034681E+02 5.427740E+02 9.061912E+02 1.349211E+03 + 1.293897E+02 3.063586E+02 5.468740E+02 9.113824E+02 1.355205E+03 + 1.312430E+02 3.094508E+02 5.512520E+02 9.169115E+02 1.361568E+03 + 1.335536E+02 3.132926E+02 5.566827E+02 9.237601E+02 1.369442E+03 + 1.391794E+02 3.226701E+02 5.699177E+02 9.405114E+02 1.388778E+03 + 1.528970E+02 3.175169E+02 6.016097E+02 9.804607E+02 1.434784E+03 + 1.752452E+02 3.525263E+02 6.512926E+02 1.042347E+03 1.505453E+03 + 2.020358E+02 3.935677E+02 7.081163E+02 1.112045E+03 1.586079E+03 + 2.321881E+02 4.389096E+02 7.691423E+02 1.185720E+03 1.672932E+03 + 2.657894E+02 4.882858E+02 8.341633E+02 1.263012E+03 1.763438E+03 + 3.018874E+02 5.402174E+02 9.011342E+02 1.341415E+03 1.854612E+03 + 3.149862E+02 5.965545E+02 9.723571E+02 1.423580E+03 1.949551E+03 + 3.578728E+02 6.571573E+02 1.047489E+03 1.509003E+03 2.047607E+03 + 4.045876E+02 7.207683E+02 1.124868E+03 1.595718E+03 2.146444E+03 + 4.552102E+02 7.879725E+02 1.205137E+03 1.687962E+03 2.246800E+03 + 5.104763E+02 8.595833E+02 1.289167E+03 1.784398E+03 2.349628E+03 + 5.690432E+02 9.337013E+02 1.374612E+03 1.881398E+03 2.467291E+03 + 6.279791E+02 1.006595E+03 1.457154E+03 1.973867E+03 2.582086E+03 + 6.693523E+02 1.056348E+03 1.512111E+03 2.033198E+03 2.656297E+03 + 6.651320E+02 1.049408E+03 1.502222E+03 2.016468E+03 2.639482E+03 + 6.301011E+02 1.004071E+03 1.448259E+03 1.947833E+03 2.559896E+03 + 5.841657E+02 9.443678E+02 1.377018E+03 1.858875E+03 2.454837E+03 + 5.339910E+02 8.782364E+02 1.297215E+03 1.768726E+03 2.336866E+03 + 4.862972E+02 8.118656E+02 1.215825E+03 1.675498E+03 2.217253E+03 + 4.420791E+02 7.460071E+02 1.133638E+03 1.579913E+03 2.097491E+03 + 4.007043E+02 6.824456E+02 1.050349E+03 1.481496E+03 1.974866E+03 + 3.655145E+02 6.233598E+02 9.674064E+02 1.381736E+03 1.851191E+03 + 3.324289E+02 5.695688E+02 8.970206E+02 1.286079E+03 1.737936E+03 + 3.031655E+02 5.262190E+02 8.261191E+02 1.199213E+03 1.641545E+03 + 2.726837E+02 4.805214E+02 7.532592E+02 1.108110E+03 1.545123E+03 + 2.412434E+02 4.326138E+02 6.893162E+02 1.021990E+03 1.441039E+03 + 2.116769E+02 3.836539E+02 6.223105E+02 9.337809E+02 1.331563E+03 + 1.835586E+02 3.364145E+02 5.521418E+02 8.492580E+02 1.234894E+03 + 1.604027E+02 2.905731E+02 4.932779E+02 7.734486E+02 1.129568E+03 + 1.389848E+02 2.541418E+02 4.408526E+02 6.980500E+02 1.023101E+03 + 1.189400E+02 2.227777E+02 3.920582E+02 6.226334E+02 9.240420E+02 + 1.004494E+02 1.926856E+02 3.447714E+02 5.545534E+02 8.269499E+02 + 8.478132E+01 1.677816E+02 3.012438E+02 4.871476E+02 7.339755E+02 + 7.166302E+01 1.445090E+02 2.596888E+02 4.209188E+02 6.396272E+02 + 5.976622E+01 1.231998E+02 2.239306E+02 3.636850E+02 5.586910E+02 + 4.983755E+01 1.050546E+02 1.927681E+02 3.171533E+02 4.895322E+02 + 4.234197E+01 9.113329E+01 1.695785E+02 2.795934E+02 4.343372E+02 + 3.637893E+01 7.882986E+01 1.492930E+02 2.512671E+02 3.914256E+02 + 3.115809E+01 6.761167E+01 1.308743E+02 2.250976E+02 3.586639E+02 + 2.746106E+01 5.941252E+01 1.176254E+02 2.086716E+02 3.361890E+02 + 2.773191E+01 6.024469E+01 1.209473E+02 2.164247E+02 3.423178E+02 + 3.018779E+01 6.705703E+01 1.340646E+02 2.302216E+02 3.536547E+02 + 3.388740E+01 7.649439E+01 1.447306E+02 2.389710E+02 3.568835E+02 + 3.994832E+01 8.484838E+01 1.523991E+02 2.424780E+02 3.524535E+02 + 4.599125E+01 9.132552E+01 1.564442E+02 2.405236E+02 3.408444E+02 + 5.093201E+01 9.533113E+01 1.565463E+02 2.333152E+02 3.230167E+02 + 5.499073E+01 9.753828E+01 1.540354E+02 2.229838E+02 3.019617E+02 + 5.752829E+01 9.734692E+01 1.484948E+02 2.094160E+02 2.779455E+02 + 5.670485E+01 9.349585E+01 1.398968E+02 1.944266E+02 2.551441E+02 + +Band: 3, gas: 2, k-terms: 8 + 8.604544E-03 1.785763E-02 3.357525E-02 8.070779E-02 2.404227E-01 + 8.741009E-03 1.813242E-02 3.434793E-02 8.425960E-02 2.480544E-01 + 8.886044E-03 1.843913E-02 3.524543E-02 8.833683E-02 2.566308E-01 + 8.886928E-03 1.878427E-02 3.629551E-02 9.301350E-02 2.663042E-01 + 9.058799E-03 1.918067E-02 3.754374E-02 9.841566E-02 2.773551E-01 + 9.242865E-03 1.962754E-02 3.901078E-02 1.045468E-01 2.897736E-01 + 9.445794E-03 2.014072E-02 4.075993E-02 1.115518E-01 3.038862E-01 + 9.678614E-03 2.074433E-02 4.288477E-02 1.196466E-01 3.201682E-01 + 9.968529E-03 2.130018E-02 4.557303E-02 1.293108E-01 3.396459E-01 + 1.052202E-02 2.255416E-02 4.994081E-02 1.438466E-01 3.693253E-01 + 1.169318E-02 2.502333E-02 5.857092E-02 1.696439E-01 4.219039E-01 + 1.354384E-02 2.932982E-02 7.384161E-02 2.096890E-01 5.018286E-01 + 1.590741E-02 3.493534E-02 9.588481E-02 2.615978E-01 6.021016E-01 + 1.883823E-02 4.317461E-02 1.251670E-01 3.262680E-01 7.229449E-01 + 2.258718E-02 5.543761E-02 1.631150E-01 4.064042E-01 8.680244E-01 + 2.745720E-02 7.342832E-02 2.109109E-01 5.035161E-01 1.038724E+00 + 3.422485E-02 9.915519E-02 2.722639E-01 6.235364E-01 1.243531E+00 + 4.396570E-02 1.340456E-01 3.503946E-01 7.710908E-01 1.488376E+00 + 5.913605E-02 1.797884E-01 4.482704E-01 9.498318E-01 1.776991E+00 + 8.204658E-02 2.396447E-01 5.711837E-01 1.167216E+00 2.119182E+00 + 1.149016E-01 3.181889E-01 7.261122E-01 1.432860E+00 2.527642E+00 + 1.594860E-01 4.191564E-01 9.178961E-01 1.751968E+00 3.007459E+00 + 2.172316E-01 5.442170E-01 1.147624E+00 2.124786E+00 3.555936E+00 + 2.770328E-01 6.705605E-01 1.375778E+00 2.489900E+00 4.087902E+00 + 3.095486E-01 7.431861E-01 1.513015E+00 2.718021E+00 4.430614E+00 + 3.169150E-01 7.682827E-01 1.572873E+00 2.833909E+00 4.626547E+00 + 3.128042E-01 7.721299E-01 1.599327E+00 2.903517E+00 4.763527E+00 + 3.020390E-01 7.631903E-01 1.605825E+00 2.946719E+00 4.870035E+00 + 2.887674E-01 7.494080E-01 1.605304E+00 2.986105E+00 4.973715E+00 + 2.720990E-01 7.308045E-01 1.597195E+00 3.013168E+00 5.067628E+00 + 2.557248E-01 7.062318E-01 1.578158E+00 3.019800E+00 5.140128E+00 + 2.353666E-01 6.774576E-01 1.550558E+00 3.016945E+00 5.196692E+00 + 2.153531E-01 6.444786E-01 1.514814E+00 3.000253E+00 5.233625E+00 + 1.954361E-01 6.062045E-01 1.464594E+00 2.960474E+00 5.238771E+00 + 1.746394E-01 5.620624E-01 1.398807E+00 2.880871E+00 5.180159E+00 + 1.512962E-01 5.112606E-01 1.309421E+00 2.765283E+00 5.044783E+00 + 1.265756E-01 4.515177E-01 1.200298E+00 2.594694E+00 4.831174E+00 + 1.035322E-01 3.862084E-01 1.069732E+00 2.381373E+00 4.522309E+00 + 8.154865E-02 3.250907E-01 9.331716E-01 2.137199E+00 4.152025E+00 + 6.422115E-02 2.676060E-01 7.998682E-01 1.885183E+00 3.742169E+00 + 5.148249E-02 2.200863E-01 6.801212E-01 1.646565E+00 3.337873E+00 + 4.135343E-02 1.816460E-01 5.744732E-01 1.418524E+00 2.926411E+00 + 3.303519E-02 1.470106E-01 4.770087E-01 1.201454E+00 2.520421E+00 + 2.614717E-02 1.170542E-01 3.891247E-01 9.992802E-01 2.125690E+00 + 2.060874E-02 9.235947E-02 3.139149E-01 8.203019E-01 1.772821E+00 + 1.645484E-02 7.355168E-02 2.541630E-01 6.733418E-01 1.469431E+00 + 1.372909E-02 6.087575E-02 2.113709E-01 5.634214E-01 1.236029E+00 + 1.182941E-02 5.188749E-02 1.794269E-01 4.785714E-01 1.050928E+00 + 1.029713E-02 4.473264E-02 1.534171E-01 4.086123E-01 8.966815E-01 + 9.793105E-03 4.148831E-02 1.391702E-01 3.657046E-01 7.947300E-01 + 1.269135E-02 4.945028E-02 1.551610E-01 3.861672E-01 8.060269E-01 + 1.859248E-02 6.593684E-02 1.891546E-01 4.390675E-01 8.705656E-01 + 2.677196E-02 8.723235E-02 2.292614E-01 4.983709E-01 9.406471E-01 + 3.806392E-02 1.139087E-01 2.758815E-01 5.653540E-01 1.015489E+00 + 5.319212E-02 1.458277E-01 3.279996E-01 6.352410E-01 1.092827E+00 + 7.231290E-02 1.821603E-01 3.836840E-01 7.064131E-01 1.168795E+00 + 9.658770E-02 2.247821E-01 4.466677E-01 7.834702E-01 1.250169E+00 + 1.249506E-01 2.712485E-01 5.109710E-01 8.602968E-01 1.328916E+00 + 1.426954E-01 2.979545E-01 5.446600E-01 8.960048E-01 1.358560E+00 + 6.487535E-01 2.846963E+00 8.792440E+00 2.146103E+01 4.355643E+01 + 6.631718E-01 2.894266E+00 8.905076E+00 2.167592E+01 4.390750E+01 + 6.778230E-01 2.942079E+00 9.018485E+00 2.189177E+01 4.425954E+01 + 6.707508E-01 2.990372E+00 9.132567E+00 2.210839E+01 4.461220E+01 + 6.861273E-01 3.040683E+00 9.250936E+00 2.233263E+01 4.497664E+01 + 7.012672E-01 3.089878E+00 9.366159E+00 2.255043E+01 4.533000E+01 + 7.166262E-01 3.139440E+00 9.481710E+00 2.276838E+01 4.568298E+01 + 7.331974E-01 3.192550E+00 9.604994E+00 2.300040E+01 4.605810E+01 + 7.540883E-01 3.181080E+00 9.758931E+00 2.328928E+01 4.652430E+01 + 8.072988E-01 3.347587E+00 1.014735E+01 2.401358E+01 4.768922E+01 + 9.450930E-01 3.768987E+00 1.112371E+01 2.581235E+01 5.052694E+01 + 1.186617E+00 4.570288E+00 1.273196E+01 2.871695E+01 5.506295E+01 + 1.512355E+00 5.396827E+00 1.468358E+01 3.215073E+01 6.034432E+01 + 1.918594E+00 6.473183E+00 1.690938E+01 3.596456E+01 6.610181E+01 + 2.419169E+00 7.745430E+00 1.942559E+01 4.019448E+01 7.232954E+01 + 3.011138E+00 9.184381E+00 2.216807E+01 4.470438E+01 7.891097E+01 + 3.723979E+00 1.085902E+01 2.529042E+01 4.966082E+01 8.602847E+01 + 4.521963E+00 1.278808E+01 2.877025E+01 5.511004E+01 9.373711E+01 + 5.545298E+00 1.494972E+01 3.257623E+01 6.091087E+01 1.018443E+02 + 6.747569E+00 1.738190E+01 3.675322E+01 6.711896E+01 1.103942E+02 + 8.166771E+00 2.016455E+01 4.136061E+01 7.393008E+01 1.194905E+02 + 9.785743E+00 2.324511E+01 4.629470E+01 8.108475E+01 1.288783E+02 + 1.152891E+01 2.646498E+01 5.132925E+01 8.830848E+01 1.380504E+02 + 1.280014E+01 2.872295E+01 5.484962E+01 9.315065E+01 1.440559E+02 + 1.256359E+01 2.827295E+01 5.411334E+01 9.199083E+01 1.425647E+02 + 1.135063E+01 2.603888E+01 5.056157E+01 8.688836E+01 1.362524E+02 + 9.874420E+00 2.328666E+01 4.616663E+01 8.061759E+01 1.279195E+02 + 8.400371E+00 2.041697E+01 4.153372E+01 7.384253E+01 1.187426E+02 + 7.122049E+00 1.785685E+01 3.713275E+01 6.754663E+01 1.100885E+02 + 5.983857E+00 1.563778E+01 3.325136E+01 6.130604E+01 1.014068E+02 + 5.107214E+00 1.366985E+01 2.976589E+01 5.555217E+01 9.291264E+01 + 4.284742E+00 1.184527E+01 2.651565E+01 5.051219E+01 8.583222E+01 + 3.706601E+00 1.045336E+01 2.358803E+01 4.585464E+01 7.921206E+01 + 3.272280E+00 9.332793E+00 2.147051E+01 4.183471E+01 7.280249E+01 + 2.977472E+00 8.505934E+00 1.974233E+01 3.872915E+01 6.771211E+01 + 2.574592E+00 7.702626E+00 1.796047E+01 3.580340E+01 6.268471E+01 + 2.130514E+00 6.761819E+00 1.630024E+01 3.261183E+01 5.778512E+01 + 1.804977E+00 5.705953E+00 1.440191E+01 2.956802E+01 5.254024E+01 + 1.411484E+00 4.924509E+00 1.247935E+01 2.625234E+01 4.764460E+01 + 1.142956E+00 4.077445E+00 1.080798E+01 2.299154E+01 4.241587E+01 + 9.511257E-01 3.397360E+00 9.223444E+00 2.020960E+01 3.767858E+01 + 7.811429E-01 2.896090E+00 7.928959E+00 1.745189E+01 3.310374E+01 + 6.298053E-01 2.412165E+00 6.710690E+00 1.502262E+01 2.865653E+01 + 4.969963E-01 1.967076E+00 5.603491E+00 1.268580E+01 2.446959E+01 + 3.863083E-01 1.577688E+00 4.601182E+00 1.061094E+01 2.072810E+01 + 3.015162E-01 1.263637E+00 3.757536E+00 8.799682E+00 1.733192E+01 + 2.441545E-01 1.036579E+00 3.114294E+00 7.356488E+00 1.459856E+01 + 2.027283E-01 8.639782E-01 2.605554E+00 6.177717E+00 1.230445E+01 + 1.687796E-01 7.200197E-01 2.174911E+00 5.166721E+00 1.031310E+01 + 1.521886E-01 6.361248E-01 1.896311E+00 4.465421E+00 8.860353E+00 + 1.852658E-01 7.045745E-01 1.969462E+00 4.430545E+00 8.501502E+00 + 2.532285E-01 8.544387E-01 2.198248E+00 4.658123E+00 8.572866E+00 + 3.363389E-01 1.017307E+00 2.423109E+00 4.853300E+00 8.582577E+00 + 4.337378E-01 1.187836E+00 2.635054E+00 5.034472E+00 8.509213E+00 + 5.401681E-01 1.353724E+00 2.815652E+00 5.125811E+00 8.350985E+00 + 6.471617E-01 1.500336E+00 2.946721E+00 5.136692E+00 8.094250E+00 + 7.576410E-01 1.636450E+00 3.065102E+00 5.105357E+00 7.797427E+00 + 8.580590E-01 1.741841E+00 3.113219E+00 5.003281E+00 7.436701E+00 + 8.884486E-01 1.742275E+00 3.033347E+00 4.777412E+00 6.994861E+00 + 1.111999E-09 6.190580E-09 2.562597E-08 8.513132E-08 2.389318E-07 + 1.376938E-09 7.597287E-09 3.116218E-08 1.027334E-07 2.857941E-07 + 1.705852E-09 9.314063E-09 3.790029E-08 1.240133E-07 3.422899E-07 + 2.114237E-09 1.143749E-08 4.609764E-08 1.497909E-07 4.100089E-07 + 2.623080E-09 1.405966E-08 5.612664E-08 1.810833E-07 4.917623E-07 + 3.251733E-09 1.726994E-08 6.834526E-08 2.188812E-07 5.900475E-07 + 4.032422E-09 2.121127E-08 8.323806E-08 2.644886E-07 7.085121E-07 + 5.004562E-09 2.610280E-08 1.015087E-07 3.201562E-07 8.515633E-07 + 6.254376E-09 3.231066E-08 1.244191E-07 3.889059E-07 1.026862E-06 + 8.155459E-09 4.141370E-08 1.570859E-07 4.848058E-07 1.266607E-06 + 1.173467E-08 5.746871E-08 2.118761E-07 6.391337E-07 1.639863E-06 + 1.832666E-08 8.508215E-08 3.023098E-07 8.837843E-07 2.212510E-06 + 2.907360E-08 1.277551E-07 4.359234E-07 1.234586E-06 3.012322E-06 + 4.596980E-08 1.916236E-07 6.287780E-07 1.725941E-06 4.105165E-06 + 7.242472E-08 2.868937E-07 9.061362E-07 2.410961E-06 5.595924E-06 + 1.128758E-07 4.261188E-07 1.297209E-06 3.351550E-06 7.595627E-06 + 1.755850E-07 6.323333E-07 1.857260E-06 4.660710E-06 1.031470E-05 + 2.723118E-07 9.364650E-07 2.656821E-06 6.477467E-06 1.400540E-05 + 4.184089E-07 1.377836E-06 3.779223E-06 8.968373E-06 1.895784E-05 + 6.396249E-07 2.020929E-06 5.361937E-06 1.239050E-05 2.562605E-05 + 9.758839E-07 2.959971E-06 7.602955E-06 1.711128E-05 3.464891E-05 + 1.476848E-06 4.308612E-06 1.073130E-05 2.355635E-05 4.672310E-05 + 2.199760E-06 6.190732E-06 1.498300E-05 3.213387E-05 6.250646E-05 + 3.053996E-06 8.389980E-06 1.989751E-05 4.197806E-05 8.056279E-05 + 3.662554E-06 1.003870E-05 2.376271E-05 5.001085E-05 9.578093E-05 + 3.977620E-06 1.106078E-05 2.643653E-05 5.601401E-05 1.079148E-04 + 4.144513E-06 1.178826E-05 2.856887E-05 6.121467E-05 1.190026E-04 + 4.219796E-06 1.232466E-05 3.039748E-05 6.604566E-05 1.297114E-04 + 4.266587E-06 1.281164E-05 3.223940E-05 7.104198E-05 1.410902E-04 + 4.292369E-06 1.327566E-05 3.411873E-05 7.634105E-05 1.533718E-04 + 4.291977E-06 1.369484E-05 3.605008E-05 8.195057E-05 1.666512E-04 + 4.293964E-06 1.413779E-05 3.810010E-05 8.815801E-05 1.813730E-04 + 4.319834E-06 1.466426E-05 4.044110E-05 9.519368E-05 1.981816E-04 + 4.364062E-06 1.529176E-05 4.310185E-05 1.031999E-04 2.174794E-04 + 4.415619E-06 1.596356E-05 4.600772E-05 1.120148E-04 2.390447E-04 + 4.467053E-06 1.668135E-05 4.917032E-05 1.217227E-04 2.630346E-04 + 4.496551E-06 1.736616E-05 5.240154E-05 1.318925E-04 2.887420E-04 + 4.501485E-06 1.801539E-05 5.570028E-05 1.424876E-04 3.159362E-04 + 4.523512E-06 1.874472E-05 5.931904E-05 1.543552E-04 3.463406E-04 + 4.613391E-06 1.971278E-05 6.372837E-05 1.685724E-04 3.822548E-04 + 4.860889E-06 2.122699E-05 6.985932E-05 1.870502E-04 4.276327E-04 + 5.231134E-06 2.325349E-05 7.758206E-05 2.096692E-04 4.827607E-04 + 5.646051E-06 2.550438E-05 8.626309E-05 2.351404E-04 5.453556E-04 + 6.054359E-06 2.789020E-05 9.551193E-05 2.628927E-04 6.136545E-04 + 6.486166E-06 3.048572E-05 1.057092E-04 2.936330E-04 6.889331E-04 + 7.050611E-06 3.371481E-05 1.180102E-04 3.300910E-04 7.789051E-04 + 8.031474E-06 3.867113E-05 1.356375E-04 3.805071E-04 8.991387E-04 + 9.411765E-06 4.536452E-05 1.589759E-04 4.456232E-04 1.050519E-03 + 1.107584E-05 5.336212E-05 1.866431E-04 5.219655E-04 1.227250E-03 + 1.415689E-05 6.703965E-05 2.310642E-04 6.382926E-04 1.484673E-03 + 2.504454E-05 1.082823E-04 3.500361E-04 9.225912E-04 2.064637E-03 + 5.031147E-05 1.936535E-04 5.779710E-04 1.431901E-03 3.045023E-03 + 9.819167E-05 3.405876E-04 9.422741E-04 2.196627E-03 4.442364E-03 + 1.865308E-04 5.872586E-04 1.510430E-03 3.318371E-03 6.388738E-03 + 3.414160E-04 9.842107E-04 2.362560E-03 4.902372E-03 8.998323E-03 + 5.970472E-04 1.589158E-03 3.575152E-03 7.035233E-03 1.236242E-02 + 1.012667E-03 2.497112E-03 5.286888E-03 9.885757E-03 1.668587E-02 + 1.640796E-03 3.775599E-03 7.551444E-03 1.348623E-02 2.199951E-02 + 2.196048E-03 4.848437E-03 9.380276E-03 1.631466E-02 2.616146E-02 + 1.524060E-08 8.057846E-08 3.127323E-07 1.029437E-06 3.025380E-06 + 1.867799E-08 9.735842E-08 3.736339E-07 1.210094E-06 3.496984E-06 + 2.288770E-08 1.175702E-07 4.469290E-07 1.425857E-06 4.052263E-06 + 2.801493E-08 1.422760E-07 5.347617E-07 1.682224E-06 4.706035E-06 + 3.437134E-08 1.724546E-07 6.413350E-07 1.988021E-06 5.477944E-06 + 4.216798E-08 2.090149E-07 7.702198E-07 2.352612E-06 6.390129E-06 + 5.174039E-08 2.534360E-07 9.250640E-07 2.788353E-06 7.469480E-06 + 6.355693E-08 3.081756E-07 1.113036E-06 3.314898E-06 8.754571E-06 + 7.853266E-08 3.767378E-07 1.345930E-06 3.961103E-06 1.031406E-05 + 1.010365E-07 4.761492E-07 1.675049E-06 4.855687E-06 1.244434E-05 + 1.427139E-07 6.488354E-07 2.218035E-06 6.283716E-06 1.577157E-05 + 2.182001E-07 9.399313E-07 3.096330E-06 8.513048E-06 2.081868E-05 + 3.381018E-07 1.378566E-06 4.366321E-06 1.164478E-05 2.774545E-05 + 5.233451E-07 2.021721E-06 6.157022E-06 1.593855E-05 3.699653E-05 + 8.076737E-07 2.961413E-06 8.678959E-06 2.180569E-05 4.936873E-05 + 1.232068E-06 4.300904E-06 1.215729E-05 2.969157E-05 6.561565E-05 + 1.872734E-06 6.240541E-06 1.702985E-05 4.046017E-05 8.726004E-05 + 2.837608E-06 9.041368E-06 2.383254E-05 5.510518E-05 1.160543E-04 + 4.258392E-06 1.301382E-05 3.321192E-05 7.480669E-05 1.539668E-04 + 6.362347E-06 1.866171E-05 4.616941E-05 1.013587E-04 2.039818E-04 + 9.487826E-06 2.672201E-05 6.413756E-05 1.373812E-04 2.704180E-04 + 1.403536E-05 3.805856E-05 8.873085E-05 1.855851E-04 3.575351E-04 + 2.043506E-05 5.352392E-05 1.215155E-04 2.485228E-04 4.690260E-04 + 2.787794E-05 7.134645E-05 1.588329E-04 3.194387E-04 5.935142E-04 + 3.319619E-05 8.474931E-05 1.881151E-04 3.763902E-04 6.953935E-04 + 3.606246E-05 9.320820E-05 2.085754E-04 4.189355E-04 7.749296E-04 + 3.770863E-05 9.932651E-05 2.254249E-04 4.563139E-04 8.473797E-04 + 3.858902E-05 1.040980E-04 2.401020E-04 4.914308E-04 9.186483E-04 + 3.925517E-05 1.085912E-04 2.547780E-04 5.279951E-04 9.954040E-04 + 3.966416E-05 1.128976E-04 2.699252E-04 5.672630E-04 1.078212E-03 + 3.981558E-05 1.170762E-04 2.856095E-04 6.084257E-04 1.167329E-03 + 3.995783E-05 1.214692E-04 3.025488E-04 6.533044E-04 1.266537E-03 + 4.016962E-05 1.263553E-04 3.215500E-04 7.047226E-04 1.379250E-03 + 4.060768E-05 1.319336E-04 3.430981E-04 7.629606E-04 1.507839E-03 + 4.114638E-05 1.376770E-04 3.663323E-04 8.273220E-04 1.650730E-03 + 4.177023E-05 1.436411E-04 3.911883E-04 8.981684E-04 1.809448E-03 + 4.209407E-05 1.489103E-04 4.161953E-04 9.723912E-04 1.980198E-03 + 4.219223E-05 1.538107E-04 4.409499E-04 1.047937E-03 2.163155E-03 + 4.240394E-05 1.597367E-04 4.675116E-04 1.130312E-03 2.366857E-03 + 4.317322E-05 1.678169E-04 4.998721E-04 1.227968E-03 2.602795E-03 + 4.524592E-05 1.805211E-04 5.452131E-04 1.352114E-03 2.894726E-03 + 4.811373E-05 1.964276E-04 6.025467E-04 1.505728E-03 3.239328E-03 + 5.131002E-05 2.135733E-04 6.670267E-04 1.679313E-03 3.621786E-03 + 5.413338E-05 2.307146E-04 7.347148E-04 1.866434E-03 4.038420E-03 + 5.711220E-05 2.484969E-04 8.056083E-04 2.071699E-03 4.501025E-03 + 6.112539E-05 2.700348E-04 8.893686E-04 2.311914E-03 5.045870E-03 + 6.876998E-05 3.044333E-04 1.006855E-03 2.634353E-03 5.761453E-03 + 7.969590E-05 3.509160E-04 1.158050E-03 3.042570E-03 6.644722E-03 + 9.281186E-05 4.070166E-04 1.334233E-03 3.504820E-03 7.651840E-03 + 1.167066E-04 5.023365E-04 1.617436E-03 4.184288E-03 9.069102E-03 + 1.978645E-04 7.843377E-04 2.366064E-03 5.820682E-03 1.216375E-02 + 3.775592E-04 1.343278E-03 3.737288E-03 8.622312E-03 1.715590E-02 + 6.999084E-04 2.251638E-03 5.792105E-03 1.257459E-02 2.392642E-02 + 1.254345E-03 3.669993E-03 8.767030E-03 1.800280E-02 3.296622E-02 + 2.147425E-03 5.766695E-03 1.290112E-02 2.521532E-02 4.472070E-02 + 3.476043E-03 8.674466E-03 1.834581E-02 3.444317E-02 5.941616E-02 + 5.444621E-03 1.269923E-02 2.554261E-02 4.632942E-02 7.767763E-02 + 8.154384E-03 1.792914E-02 3.461331E-02 6.091666E-02 9.932207E-02 + 1.032803E-02 2.199829E-02 4.160016E-02 7.200306E-02 1.154921E-01 + 3.160235E-07 1.936991E-06 9.196257E-06 3.573362E-05 1.202564E-04 + 3.720290E-07 2.221409E-06 1.027377E-05 3.896751E-05 1.280641E-04 + 4.411080E-07 2.562777E-06 1.154507E-05 4.272228E-05 1.369404E-04 + 5.234790E-07 2.967919E-06 1.299716E-05 4.702012E-05 1.473166E-04 + 6.217677E-07 3.445636E-06 1.473040E-05 5.201861E-05 1.591404E-04 + 7.405178E-07 4.009787E-06 1.675767E-05 5.772392E-05 1.727408E-04 + 8.842453E-07 4.671028E-06 1.909653E-05 6.443223E-05 1.883866E-04 + 1.059313E-06 5.485872E-06 2.186216E-05 7.230330E-05 2.066063E-04 + 1.276041E-06 6.475752E-06 2.521997E-05 8.169753E-05 2.284507E-04 + 1.606461E-06 7.923700E-06 3.010188E-05 9.515986E-05 2.596363E-04 + 2.220898E-06 1.049904E-05 3.848349E-05 1.175505E-04 3.116134E-04 + 3.324588E-06 1.484577E-05 5.205355E-05 1.529990E-04 3.907403E-04 + 5.029445E-06 2.126846E-05 7.120884E-05 2.008264E-04 4.951398E-04 + 7.621746E-06 3.044561E-05 9.737988E-05 2.636952E-04 6.279364E-04 + 1.149414E-05 4.351721E-05 1.328525E-04 3.459266E-04 7.976709E-04 + 1.715940E-05 6.164972E-05 1.799839E-04 4.517114E-04 1.008696E-03 + 2.554279E-05 8.699774E-05 2.439376E-04 5.901976E-04 1.276587E-03 + 3.784904E-05 1.225178E-04 3.300420E-04 7.713989E-04 1.615800E-03 + 5.550558E-05 1.714319E-04 4.443243E-04 1.003735E-03 2.039591E-03 + 8.105155E-05 2.390101E-04 5.967488E-04 1.302575E-03 2.568818E-03 + 1.179887E-04 3.330025E-04 7.997355E-04 1.689813E-03 3.234570E-03 + 1.701720E-04 4.607410E-04 1.066333E-03 2.184126E-03 4.059233E-03 + 2.415735E-04 6.286743E-04 1.407248E-03 2.795880E-03 5.053211E-03 + 3.216379E-04 8.130391E-04 1.773910E-03 3.441604E-03 6.080004E-03 + 3.740005E-04 9.388291E-04 2.033949E-03 3.907422E-03 6.824739E-03 + 3.979465E-04 1.007344E-03 2.191742E-03 4.213345E-03 7.339256E-03 + 4.086989E-04 1.050187E-03 2.308264E-03 4.459649E-03 7.778122E-03 + 4.124557E-04 1.077401E-03 2.399787E-03 4.679781E-03 8.193100E-03 + 4.149792E-04 1.101081E-03 2.489144E-03 4.907499E-03 8.636011E-03 + 4.161629E-04 1.125792E-03 2.580426E-03 5.141833E-03 9.116614E-03 + 4.152554E-04 1.149782E-03 2.674739E-03 5.388225E-03 9.626966E-03 + 4.164612E-04 1.179499E-03 2.779184E-03 5.658091E-03 1.018721E-02 + 4.194587E-04 1.215880E-03 2.903448E-03 5.965014E-03 1.082475E-02 + 4.243445E-04 1.260724E-03 3.051755E-03 6.317985E-03 1.154398E-02 + 4.295438E-04 1.310055E-03 3.215183E-03 6.707100E-03 1.232158E-02 + 4.326351E-04 1.358061E-03 3.390164E-03 7.128358E-03 1.316203E-02 + 4.330906E-04 1.399072E-03 3.566582E-03 7.566300E-03 1.404342E-02 + 4.309031E-04 1.433498E-03 3.737435E-03 8.014683E-03 1.496400E-02 + 4.294826E-04 1.473898E-03 3.926689E-03 8.517154E-03 1.598224E-02 + 4.333436E-04 1.525511E-03 4.138619E-03 9.103166E-03 1.717007E-02 + 4.509217E-04 1.613280E-03 4.432171E-03 9.847995E-03 1.866168E-02 + 4.800046E-04 1.731753E-03 4.786733E-03 1.071859E-02 2.040936E-02 + 5.131019E-04 1.861379E-03 5.175341E-03 1.164764E-02 2.232305E-02 + 5.456899E-04 1.996953E-03 5.573271E-03 1.258896E-02 2.433382E-02 + 5.788677E-04 2.140509E-03 5.993160E-03 1.356979E-02 2.641984E-02 + 6.193553E-04 2.315327E-03 6.491890E-03 1.468565E-02 2.875412E-02 + 6.861952E-04 2.572844E-03 7.184647E-03 1.618974E-02 3.174003E-02 + 7.769373E-04 2.900569E-03 8.050654E-03 1.804071E-02 3.531842E-02 + 8.799542E-04 3.265172E-03 9.009020E-03 2.005202E-02 3.923456E-02 + 1.065979E-03 3.864342E-03 1.048662E-02 2.300070E-02 4.474535E-02 + 1.680042E-03 5.590747E-03 1.423712E-02 3.001233E-02 5.727451E-02 + 2.923340E-03 8.734484E-03 2.055697E-02 4.152450E-02 7.714484E-02 + 4.934900E-03 1.332384E-02 2.935040E-02 5.729911E-02 1.030507E-01 + 8.056762E-03 1.988886E-02 4.156388E-02 7.858194E-02 1.361674E-01 + 1.267669E-02 2.908444E-02 5.837245E-02 1.062870E-01 1.774948E-01 + 1.919128E-02 4.164196E-02 8.070212E-02 1.412554E-01 2.278436E-01 + 2.844763E-02 5.912110E-02 1.100962E-01 1.854380E-01 2.896394E-01 + 4.110995E-02 8.218710E-02 1.467875E-01 2.387966E-01 3.621417E-01 + 5.162949E-02 1.007084E-01 1.754209E-01 2.792779E-01 4.158419E-01 + 1.352240E-04 7.776424E-04 2.695937E-03 6.302472E-03 1.236399E-02 + 1.393836E-04 7.948196E-04 2.737415E-03 6.377999E-03 1.249006E-02 + 1.443719E-04 8.142789E-04 2.784430E-03 6.460291E-03 1.262268E-02 + 1.492622E-04 8.357012E-04 2.830777E-03 6.544047E-03 1.277234E-02 + 1.550376E-04 8.584439E-04 2.885528E-03 6.638042E-03 1.293482E-02 + 1.614108E-04 8.828023E-04 2.944412E-03 6.734820E-03 1.311233E-02 + 1.687031E-04 9.081527E-04 3.006371E-03 6.849988E-03 1.330904E-02 + 1.771818E-04 9.379185E-04 3.072232E-03 6.980817E-03 1.353353E-02 + 1.877410E-04 9.760561E-04 3.158838E-03 7.139528E-03 1.381400E-02 + 2.088524E-04 1.052147E-03 3.330983E-03 7.444721E-03 1.434310E-02 + 2.561403E-04 1.223834E-03 3.705021E-03 8.072321E-03 1.546109E-02 + 3.436803E-04 1.511927E-03 4.295869E-03 9.090285E-03 1.723138E-02 + 4.667497E-04 1.886367E-03 5.021185E-03 1.032713E-02 1.942783E-02 + 6.332017E-04 2.348160E-03 5.873957E-03 1.178409E-02 2.206740E-02 + 8.524922E-04 2.912632E-03 6.879380E-03 1.352397E-02 2.526057E-02 + 1.129177E-03 3.572071E-03 8.033611E-03 1.554397E-02 2.905386E-02 + 1.496350E-03 4.364323E-03 9.431729E-03 1.799056E-02 3.375493E-02 + 1.971061E-03 5.328995E-03 1.111972E-02 2.101637E-02 3.966038E-02 + 2.573327E-03 6.483291E-03 1.312662E-02 2.469274E-02 4.701093E-02 + 3.323598E-03 7.888288E-03 1.559382E-02 2.926439E-02 5.623238E-02 + 4.278580E-03 9.625817E-03 1.865543E-02 3.508396E-02 6.781892E-02 + 5.455126E-03 1.174213E-02 2.244938E-02 4.248191E-02 8.199679E-02 + 6.876150E-03 1.426820E-02 2.708909E-02 5.167221E-02 9.862821E-02 + 8.246241E-03 1.676646E-02 3.177733E-02 6.094786E-02 1.146842E-01 + 8.922472E-03 1.815909E-02 3.448965E-02 6.631533E-02 1.236811E-01 + 9.054660E-03 1.864811E-02 3.556958E-02 6.850286E-02 1.272945E-01 + 8.962033E-03 1.876927E-02 3.612140E-02 6.963925E-02 1.291888E-01 + 8.745463E-03 1.868533E-02 3.640406E-02 7.044099E-02 1.306147E-01 + 8.515143E-03 1.863182E-02 3.673503E-02 7.153696E-02 1.327277E-01 + 8.278499E-03 1.863018E-02 3.721477E-02 7.303189E-02 1.356951E-01 + 8.008923E-03 1.853078E-02 3.783843E-02 7.491077E-02 1.394213E-01 + 7.796390E-03 1.851286E-02 3.860241E-02 7.724576E-02 1.442004E-01 + 7.627029E-03 1.852277E-02 3.943507E-02 8.019199E-02 1.503923E-01 + 7.510037E-03 1.860795E-02 4.048348E-02 8.375199E-02 1.577280E-01 + 7.434392E-03 1.874749E-02 4.155987E-02 8.742916E-02 1.660636E-01 + 7.326239E-03 1.886750E-02 4.266614E-02 9.112344E-02 1.749803E-01 + 7.159648E-03 1.889211E-02 4.355129E-02 9.449262E-02 1.836047E-01 + 6.986436E-03 1.886141E-02 4.421042E-02 9.754344E-02 1.915641E-01 + 6.806799E-03 1.891322E-02 4.506963E-02 1.004316E-01 1.991451E-01 + 6.708829E-03 1.906374E-02 4.600821E-02 1.035794E-01 2.070520E-01 + 6.738126E-03 1.956888E-02 4.778958E-02 1.081971E-01 2.168790E-01 + 6.847987E-03 2.032835E-02 5.011079E-02 1.137668E-01 2.281486E-01 + 6.920090E-03 2.101211E-02 5.260574E-02 1.198299E-01 2.396799E-01 + 6.930193E-03 2.146305E-02 5.485552E-02 1.254726E-01 2.509166E-01 + 6.861565E-03 2.179457E-02 5.690218E-02 1.307148E-01 2.619215E-01 + 6.808990E-03 2.223498E-02 5.897591E-02 1.364394E-01 2.735866E-01 + 6.967266E-03 2.310607E-02 6.207927E-02 1.445054E-01 2.898868E-01 + 7.266966E-03 2.434413E-02 6.614962E-02 1.542753E-01 3.093232E-01 + 7.585923E-03 2.553908E-02 7.012603E-02 1.641984E-01 3.296313E-01 + 8.442460E-03 2.813407E-02 7.747362E-02 1.805041E-01 3.594699E-01 + 1.211250E-02 3.800268E-02 1.015886E-01 2.273668E-01 4.367337E-01 + 1.918005E-02 5.681641E-02 1.435841E-01 3.020882E-01 5.538388E-01 + 3.002382E-02 8.471331E-02 1.983300E-01 3.940391E-01 6.918549E-01 + 4.684031E-02 1.230334E-01 2.674629E-01 5.044716E-01 8.502243E-01 + 7.140543E-02 1.730686E-01 3.519109E-01 6.317205E-01 1.025809E+00 + 1.045037E-01 2.346014E-01 4.511349E-01 7.729973E-01 1.213163E+00 + 1.488104E-01 3.111597E-01 5.682508E-01 9.335315E-01 1.417575E+00 + 2.042208E-01 4.013300E-01 6.984837E-01 1.107030E+00 1.632224E+00 + 2.440796E-01 4.640774E-01 7.860499E-01 1.220414E+00 1.768842E+00 + 9.962385E-03 4.015303E-02 1.501576E-01 4.425422E-01 1.086996E+00 + 1.015300E-02 4.087411E-02 1.524891E-01 4.480441E-01 1.098325E+00 + 1.034511E-02 4.159541E-02 1.548549E-01 4.535985E-01 1.109730E+00 + 1.049805E-02 4.235439E-02 1.572561E-01 4.592040E-01 1.121204E+00 + 1.071073E-02 4.315575E-02 1.597701E-01 4.650196E-01 1.132077E+00 + 1.092331E-02 4.395422E-02 1.622499E-01 4.707593E-01 1.143701E+00 + 1.114667E-02 4.476756E-02 1.647719E-01 4.765508E-01 1.155382E+00 + 1.138604E-02 4.550406E-02 1.670830E-01 4.827614E-01 1.167862E+00 + 1.168943E-02 4.664046E-02 1.704919E-01 4.911703E-01 1.183412E+00 + 1.241113E-02 4.941591E-02 1.789479E-01 5.117872E-01 1.223692E+00 + 1.418030E-02 5.648365E-02 2.001223E-01 5.586106E-01 1.318572E+00 + 1.743657E-02 6.896465E-02 2.364743E-01 6.406088E-01 1.473144E+00 + 2.177178E-02 8.539831E-02 2.810971E-01 7.399218E-01 1.656592E+00 + 2.757455E-02 1.065204E-01 3.338115E-01 8.511247E-01 1.867945E+00 + 3.503785E-02 1.328880E-01 3.965570E-01 9.868104E-01 2.100021E+00 + 4.439616E-02 1.620975E-01 4.678925E-01 1.131429E+00 2.352087E+00 + 5.689213E-02 1.981367E-01 5.499963E-01 1.296977E+00 2.633432E+00 + 7.311049E-02 2.426771E-01 6.500052E-01 1.483773E+00 2.947467E+00 + 9.437319E-02 2.939848E-01 7.615630E-01 1.689908E+00 3.290186E+00 + 1.195007E-01 3.544467E-01 8.894494E-01 1.919858E+00 3.667657E+00 + 1.517731E-01 4.271868E-01 1.038095E+00 2.178692E+00 4.083541E+00 + 1.889854E-01 5.136854E-01 1.203664E+00 2.458535E+00 4.531072E+00 + 2.332282E-01 6.091844E-01 1.381156E+00 2.748540E+00 4.983675E+00 + 2.696990E-01 6.853977E-01 1.508918E+00 2.953835E+00 5.293353E+00 + 2.721517E-01 6.877862E-01 1.497115E+00 2.920415E+00 5.226913E+00 + 2.539473E-01 6.422090E-01 1.400612E+00 2.733997E+00 4.908358E+00 + 2.321590E-01 5.828233E-01 1.284055E+00 2.503621E+00 4.522690E+00 + 2.094089E-01 5.244546E-01 1.163946E+00 2.276332E+00 4.124369E+00 + 1.909093E-01 4.782411E-01 1.052853E+00 2.069948E+00 3.762286E+00 + 1.733946E-01 4.391459E-01 9.641962E-01 1.890058E+00 3.435641E+00 + 1.566714E-01 4.005046E-01 8.862539E-01 1.736357E+00 3.142177E+00 + 1.438986E-01 3.742059E-01 8.216649E-01 1.604791E+00 2.908886E+00 + 1.320228E-01 3.490478E-01 7.701093E-01 1.504395E+00 2.717392E+00 + 1.225380E-01 3.264983E-01 7.311894E-01 1.436051E+00 2.563244E+00 + 1.143359E-01 3.059518E-01 6.888928E-01 1.374755E+00 2.462610E+00 + 1.070848E-01 2.863977E-01 6.493928E-01 1.316312E+00 2.400904E+00 + 9.892293E-02 2.704534E-01 6.180087E-01 1.262125E+00 2.347688E+00 + 9.173027E-02 2.560360E-01 5.928891E-01 1.235916E+00 2.310299E+00 + 8.446139E-02 2.453057E-01 5.817117E-01 1.228326E+00 2.298139E+00 + 8.003820E-02 2.385805E-01 5.840424E-01 1.241224E+00 2.331029E+00 + 7.787274E-02 2.403402E-01 6.120227E-01 1.298555E+00 2.416022E+00 + 7.562545E-02 2.492041E-01 6.505548E-01 1.389390E+00 2.571189E+00 + 7.459054E-02 2.640200E-01 6.908078E-01 1.481568E+00 2.746989E+00 + 7.530410E-02 2.708940E-01 7.289428E-01 1.574694E+00 2.921043E+00 + 7.671053E-02 2.801262E-01 7.593585E-01 1.658793E+00 3.098346E+00 + 7.782341E-02 2.920252E-01 7.972888E-01 1.748964E+00 3.272647E+00 + 7.981077E-02 3.037228E-01 8.358533E-01 1.856127E+00 3.484725E+00 + 8.316640E-02 3.158979E-01 8.770275E-01 1.937402E+00 3.663987E+00 + 8.540973E-02 3.226047E-01 8.944883E-01 1.990177E+00 3.761495E+00 + 9.175014E-02 3.429910E-01 9.366357E-01 2.066015E+00 3.893962E+00 + 1.285534E-01 4.411840E-01 1.132464E+00 2.392581E+00 4.366440E+00 + 1.966389E-01 6.028747E-01 1.442164E+00 2.872698E+00 5.025362E+00 + 2.888178E-01 7.965286E-01 1.773366E+00 3.359462E+00 5.647077E+00 + 4.035449E-01 1.021705E+00 2.119288E+00 3.829570E+00 6.205444E+00 + 5.368938E-01 1.257825E+00 2.463467E+00 4.242103E+00 6.644333E+00 + 6.834797E-01 1.484773E+00 2.765474E+00 4.581824E+00 6.944130E+00 + 8.436158E-01 1.707815E+00 3.029554E+00 4.842220E+00 7.133601E+00 + 9.950269E-01 1.907247E+00 3.227533E+00 4.987164E+00 7.164460E+00 + 1.057990E+00 1.969069E+00 3.256715E+00 4.930651E+00 6.973660E+00 + 1.345904E-01 4.313502E-01 1.075426E+00 2.342200E+00 4.819061E+00 + 1.367435E-01 4.367934E-01 1.086677E+00 2.363201E+00 4.861668E+00 + 1.389253E-01 4.422614E-01 1.097944E+00 2.384194E+00 4.904315E+00 + 1.411363E-01 4.477466E-01 1.109207E+00 2.405139E+00 4.946931E+00 + 1.434470E-01 4.534216E-01 1.120818E+00 2.426692E+00 4.990858E+00 + 1.457202E-01 4.589203E-01 1.132016E+00 2.447428E+00 5.033242E+00 + 1.480252E-01 4.644068E-01 1.143134E+00 2.467963E+00 5.075347E+00 + 1.505071E-01 4.702349E-01 1.154891E+00 2.489631E+00 5.119897E+00 + 1.536101E-01 4.775097E-01 1.169544E+00 2.516603E+00 5.175343E+00 + 1.612620E-01 4.961108E-01 1.209076E+00 2.604440E+00 5.347375E+00 + 1.802712E-01 5.426459E-01 1.304044E+00 2.762541E+00 5.712926E+00 + 2.121035E-01 6.192710E-01 1.471319E+00 3.076239E+00 6.308141E+00 + 2.507585E-01 7.118220E-01 1.665047E+00 3.466719E+00 7.007768E+00 + 3.039221E-01 8.302575E-01 1.882163E+00 3.871311E+00 7.780064E+00 + 3.692164E-01 9.688760E-01 2.123383E+00 4.375164E+00 8.603775E+00 + 4.450941E-01 1.099670E+00 2.398476E+00 4.916693E+00 9.514236E+00 + 5.237877E-01 1.261038E+00 2.680761E+00 5.564696E+00 1.054285E+01 + 6.135349E-01 1.454132E+00 3.045787E+00 6.267112E+00 1.168745E+01 + 7.246786E-01 1.661375E+00 3.468075E+00 7.023081E+00 1.292012E+01 + 8.380256E-01 1.888818E+00 3.914513E+00 7.840985E+00 1.425586E+01 + 9.804046E-01 2.140108E+00 4.441753E+00 8.748332E+00 1.570025E+01 + 1.120503E+00 2.429188E+00 5.058754E+00 9.749163E+00 1.725050E+01 + 1.274584E+00 2.725690E+00 5.675731E+00 1.076873E+01 1.879470E+01 + 1.388483E+00 2.952894E+00 6.090556E+00 1.146583E+01 1.980434E+01 + 1.346300E+00 2.875007E+00 5.954860E+00 1.125319E+01 1.948799E+01 + 1.201230E+00 2.603780E+00 5.452521E+00 1.043343E+01 1.826299E+01 + 1.041385E+00 2.272136E+00 4.837252E+00 9.419586E+00 1.673997E+01 + 8.946358E-01 1.953019E+00 4.226115E+00 8.371386E+00 1.512164E+01 + 7.633875E-01 1.674734E+00 3.643254E+00 7.379311E+00 1.354120E+01 + 6.544669E-01 1.439016E+00 3.151544E+00 6.442146E+00 1.202178E+01 + 5.730034E-01 1.248731E+00 2.712785E+00 5.631715E+00 1.056905E+01 + 5.139107E-01 1.131391E+00 2.412869E+00 4.914556E+00 9.333846E+00 + 4.751870E-01 1.050259E+00 2.224933E+00 4.413345E+00 8.273936E+00 + 4.507841E-01 9.846721E-01 2.138654E+00 4.131806E+00 7.519047E+00 + 4.311176E-01 1.016841E+00 2.135910E+00 3.996667E+00 7.135877E+00 + 4.398205E-01 1.101519E+00 2.224558E+00 4.109106E+00 6.996537E+00 + 4.573824E-01 1.187988E+00 2.463567E+00 4.371023E+00 7.177354E+00 + 4.690104E-01 1.270996E+00 2.710395E+00 4.896360E+00 7.816081E+00 + 4.757345E-01 1.349773E+00 2.956375E+00 5.451118E+00 8.844567E+00 + 4.787852E-01 1.420629E+00 3.200104E+00 6.016169E+00 9.927364E+00 + 4.915245E-01 1.489095E+00 3.443433E+00 6.592526E+00 1.101250E+01 + 4.830812E-01 1.538492E+00 3.653266E+00 7.134379E+00 1.207531E+01 + 4.724536E-01 1.566436E+00 3.772334E+00 7.515253E+00 1.291528E+01 + 4.528319E-01 1.504074E+00 3.801096E+00 7.699658E+00 1.347362E+01 + 4.139762E-01 1.420590E+00 3.672118E+00 7.616594E+00 1.352510E+01 + 3.707479E-01 1.318536E+00 3.463555E+00 7.317653E+00 1.322439E+01 + 3.321219E-01 1.219644E+00 3.260261E+00 6.981543E+00 1.267588E+01 + 3.034539E-01 1.120087E+00 3.019369E+00 6.511631E+00 1.200560E+01 + 2.730881E-01 1.004884E+00 2.729409E+00 5.947463E+00 1.101416E+01 + 2.614265E-01 9.450943E-01 2.524360E+00 5.479066E+00 1.016673E+01 + 3.243683E-01 1.081041E+00 2.718382E+00 5.669798E+00 1.019945E+01 + 4.412571E-01 1.326055E+00 3.119766E+00 6.123287E+00 1.057434E+01 + 5.794506E-01 1.582521E+00 3.483203E+00 6.520104E+00 1.083741E+01 + 7.340150E-01 1.839302E+00 3.804582E+00 6.817385E+00 1.096655E+01 + 8.967298E-01 2.076605E+00 4.058593E+00 6.980408E+00 1.089571E+01 + 1.053674E+00 2.273089E+00 4.222739E+00 7.004423E+00 1.062082E+01 + 1.206686E+00 2.441555E+00 4.332302E+00 6.936199E+00 1.025004E+01 + 1.335949E+00 2.557441E+00 4.354939E+00 6.764927E+00 9.758599E+00 + 1.363919E+00 2.531324E+00 4.215636E+00 6.440191E+00 9.173095E+00 + +Band: 3, gas: 3, k-terms: 1 + 3.603405E-01 4.876526E-01 6.118785E-01 7.292923E-01 8.379374E-01 + 3.620110E-01 4.893225E-01 6.134799E-01 7.307886E-01 8.393093E-01 + 3.636931E-01 4.910040E-01 6.150923E-01 7.322951E-01 8.406906E-01 + 3.653860E-01 4.926961E-01 6.167143E-01 7.338098E-01 8.420787E-01 + 3.671463E-01 4.944554E-01 6.184008E-01 7.353846E-01 8.435217E-01 + 3.688756E-01 4.961844E-01 6.200589E-01 7.369329E-01 8.449401E-01 + 3.706262E-01 4.979354E-01 6.217379E-01 7.384999E-01 8.463748E-01 + 3.725069E-01 4.998169E-01 6.235420E-01 7.401840E-01 8.479163E-01 + 3.748300E-01 5.021389E-01 6.257674E-01 7.422606E-01 8.498170E-01 + 3.802523E-01 5.075293E-01 6.309187E-01 7.470608E-01 8.542086E-01 + 3.927728E-01 5.199099E-01 6.427122E-01 7.580307E-01 8.642344E-01 + 4.117091E-01 5.385217E-01 6.603752E-01 7.744194E-01 8.791850E-01 + 4.325689E-01 5.588871E-01 6.796254E-01 7.922276E-01 8.953906E-01 + 4.541666E-01 5.798377E-01 6.993475E-01 8.104170E-01 9.119027E-01 + 4.763909E-01 6.012634E-01 7.194377E-01 8.288893E-01 9.286283E-01 + 4.985753E-01 6.225310E-01 7.393018E-01 8.471008E-01 9.450741E-01 + 5.214740E-01 6.443652E-01 7.596199E-01 8.656743E-01 9.618030E-01 + 5.449754E-01 6.666592E-01 7.802901E-01 8.845131E-01 9.787247E-01 + 5.686347E-01 6.889965E-01 8.009271E-01 9.032673E-01 9.955252E-01 + 5.926974E-01 7.116153E-01 8.217523E-01 9.221372E-01 1.012382E+00 + 6.174777E-01 7.348042E-01 8.430303E-01 9.413611E-01 1.029507E+00 + 6.424419E-01 7.580676E-01 8.643071E-01 9.605280E-01 1.046532E+00 + 6.666578E-01 7.805513E-01 8.848088E-01 9.789447E-01 1.062843E+00 + 6.843789E-01 7.969921E-01 8.997781E-01 9.923636E-01 1.074699E+00 + 6.870366E-01 7.995948E-01 9.022074E-01 9.945573E-01 1.076635E+00 + 6.796652E-01 7.930538E-01 8.963978E-01 9.894070E-01 1.072102E+00 + 6.685364E-01 7.831591E-01 8.876159E-01 9.816366E-01 1.065277E+00 + 6.556038E-01 7.717360E-01 8.775417E-01 9.727685E-01 1.057514E+00 + 6.425553E-01 7.603656E-01 8.676390E-01 9.641397E-01 1.050016E+00 + 6.295318E-01 7.492007E-01 8.580777E-01 9.559325E-01 1.042972E+00 + 6.163482E-01 7.380804E-01 8.487349E-01 9.480662E-01 1.036338E+00 + 6.033474E-01 7.273125E-01 8.398985E-01 9.408164E-01 1.030381E+00 + 5.908125E-01 7.171174E-01 8.317578E-01 9.343593E-01 1.025270E+00 + 5.786101E-01 7.073085E-01 8.241047E-01 9.284937E-01 1.020830E+00 + 5.662218E-01 6.973368E-01 8.163887E-01 9.226928E-01 1.016577E+00 + 5.535488E-01 6.870367E-01 8.083948E-01 9.167150E-01 1.012263E+00 + 5.400405E-01 6.758366E-01 7.995427E-01 9.099865E-01 1.007338E+00 + 5.257357E-01 6.637243E-01 7.897652E-01 9.023930E-01 1.001651E+00 + 5.116339E-01 6.515963E-01 7.798328E-01 8.945742E-01 9.957205E-01 + 4.986759E-01 6.403362E-01 7.705284E-01 8.871961E-01 9.900951E-01 + 4.884074E-01 6.314125E-01 7.631930E-01 8.814379E-01 9.857844E-01 + 4.799717E-01 6.240529E-01 7.571362E-01 8.766992E-01 9.822636E-01 + 4.717466E-01 6.167642E-01 7.510286E-01 8.718074E-01 9.785142E-01 + 4.631942E-01 6.090553E-01 7.444331E-01 8.663822E-01 9.742052E-01 + 4.546567E-01 6.012568E-01 7.376624E-01 8.607128E-01 9.695988E-01 + 4.476215E-01 5.947957E-01 7.320303E-01 8.559835E-01 9.657465E-01 + 4.447169E-01 5.922063E-01 7.298719E-01 8.542887E-01 9.644995E-01 + 4.445956E-01 5.922269E-01 7.300526E-01 8.546267E-01 9.649823E-01 + 4.450525E-01 5.927595E-01 7.306619E-01 8.553033E-01 9.657152E-01 + 4.529588E-01 6.003635E-01 7.377051E-01 8.616873E-01 9.714256E-01 + 4.896212E-01 6.351047E-01 7.694138E-01 8.899865E-01 9.963126E-01 + 5.409498E-01 6.830635E-01 8.128022E-01 9.284641E-01 1.029972E+00 + 5.933943E-01 7.313933E-01 8.561496E-01 9.666763E-01 1.063235E+00 + 6.462342E-01 7.795136E-01 8.989805E-01 1.004225E+00 1.095762E+00 + 6.981012E-01 8.262714E-01 9.403205E-01 1.040281E+00 1.126844E+00 + 7.476724E-01 8.705722E-01 9.792549E-01 1.074070E+00 1.155828E+00 + 7.963014E-01 9.137126E-01 1.016966E+00 1.106642E+00 1.183621E+00 + 8.419182E-01 9.539198E-01 1.051935E+00 1.136697E+00 1.209119E+00 + 8.683668E-01 9.771091E-01 1.072010E+00 1.153869E+00 1.223600E+00 + +Band: 3, gas: 4, k-terms: 2 + 9.098135E-03 1.629384E-02 2.719891E-02 4.220354E-02 6.180852E-02 + 9.842975E-03 1.729967E-02 2.835063E-02 4.334863E-02 6.291475E-02 + 1.069918E-02 1.844467E-02 2.965029E-02 4.467137E-02 6.419764E-02 + 1.167165E-02 1.970534E-02 3.115046E-02 4.620372E-02 6.567225E-02 + 1.277701E-02 2.111346E-02 3.285670E-02 4.799375E-02 6.738392E-02 + 1.404458E-02 2.267730E-02 3.475940E-02 5.001910E-02 6.937161E-02 + 1.547349E-02 2.445540E-02 3.693323E-02 5.231133E-02 7.167800E-02 + 1.714627E-02 2.647595E-02 3.937303E-02 5.499667E-02 7.436890E-02 + 1.907515E-02 2.884952E-02 4.212946E-02 5.811795E-02 7.751636E-02 + 2.150870E-02 3.181813E-02 4.559814E-02 6.204990E-02 8.160082E-02 + 2.482067E-02 3.589745E-02 5.035158E-02 6.744364E-02 8.745923E-02 + 2.912383E-02 4.115402E-02 5.647774E-02 7.440492E-02 9.503509E-02 + 3.420871E-02 4.726458E-02 6.356900E-02 8.237490E-02 1.036802E-01 + 4.015067E-02 5.427004E-02 7.157891E-02 9.126274E-02 1.132959E-01 + 4.706492E-02 6.227242E-02 8.059663E-02 1.011359E-01 1.239557E-01 + 5.503586E-02 7.125181E-02 9.056534E-02 1.120095E-01 1.355720E-01 + 6.424882E-02 8.148969E-02 1.018248E-01 1.241677E-01 1.484044E-01 + 7.474927E-02 9.314648E-02 1.145666E-01 1.376718E-01 1.625650E-01 + 8.674325E-02 1.063262E-01 1.288282E-01 1.526080E-01 1.781584E-01 + 1.005780E-01 1.212581E-01 1.448040E-01 1.692272E-01 1.953050E-01 + 1.163571E-01 1.382208E-01 1.625947E-01 1.878388E-01 2.144361E-01 + 1.343279E-01 1.572840E-01 1.824440E-01 2.083635E-01 2.355289E-01 + 1.545145E-01 1.783904E-01 2.043437E-01 2.309783E-01 2.586787E-01 + 1.759303E-01 2.005213E-01 2.270787E-01 2.544355E-01 2.825488E-01 + 1.970661E-01 2.216635E-01 2.487875E-01 2.767730E-01 3.050625E-01 + 2.193762E-01 2.433561E-01 2.706744E-01 2.993245E-01 3.277010E-01 + 2.442012E-01 2.672707E-01 2.945715E-01 3.232833E-01 3.522865E-01 + 2.726165E-01 2.945998E-01 3.211996E-01 3.499040E-01 3.793623E-01 + 3.054838E-01 3.259715E-01 3.511539E-01 3.799409E-01 4.095885E-01 + 3.429480E-01 3.615393E-01 3.852264E-01 4.135811E-01 4.435005E-01 + 3.853968E-01 4.018009E-01 4.240485E-01 4.510791E-01 4.811074E-01 + 4.331506E-01 4.471872E-01 4.676070E-01 4.934080E-01 5.228521E-01 + 4.861544E-01 4.977382E-01 5.163794E-01 5.406748E-01 5.692540E-01 + 5.439509E-01 5.540456E-01 5.705700E-01 5.933665E-01 6.209552E-01 + 6.063957E-01 6.154804E-01 6.303031E-01 6.516083E-01 6.779279E-01 + 6.733626E-01 6.822996E-01 6.957083E-01 7.152737E-01 7.402698E-01 + 7.461621E-01 7.541094E-01 7.664741E-01 7.843915E-01 8.077794E-01 + 8.274496E-01 8.308000E-01 8.420958E-01 8.585574E-01 8.805148E-01 + 9.179875E-01 9.146872E-01 9.226858E-01 9.375357E-01 9.581240E-01 + 1.018362E+00 1.006921E+00 1.009804E+00 1.021517E+00 1.040205E+00 + 1.129506E+00 1.107939E+00 1.104258E+00 1.111955E+00 1.127641E+00 + 1.250935E+00 1.218401E+00 1.206730E+00 1.208770E+00 1.221076E+00 + 1.384133E+00 1.339008E+00 1.317223E+00 1.312934E+00 1.320240E+00 + 1.529749E+00 1.470024E+00 1.437171E+00 1.424335E+00 1.425730E+00 + 1.688717E+00 1.612646E+00 1.566641E+00 1.544202E+00 1.538097E+00 + 1.860025E+00 1.766535E+00 1.706513E+00 1.672636E+00 1.658131E+00 + 2.042146E+00 1.930519E+00 1.855352E+00 1.809374E+00 1.785396E+00 + 2.234204E+00 2.103700E+00 2.013255E+00 1.954349E+00 1.919808E+00 + 2.438019E+00 2.287468E+00 2.180302E+00 2.107416E+00 2.061271E+00 + 2.644090E+00 2.474649E+00 2.351791E+00 2.265464E+00 2.207795E+00 + 2.817887E+00 2.639371E+00 2.508077E+00 2.414016E+00 2.349100E+00 + 2.970947E+00 2.788739E+00 2.653356E+00 2.554723E+00 2.484744E+00 + 3.117921E+00 2.933438E+00 2.794529E+00 2.691552E+00 2.616527E+00 + 3.256513E+00 3.070992E+00 2.929126E+00 2.822287E+00 2.742728E+00 + 3.385150E+00 3.199354E+00 3.055343E+00 2.945375E+00 2.861661E+00 + 3.502758E+00 3.316318E+00 3.170380E+00 3.057309E+00 2.969385E+00 + 3.601510E+00 3.419118E+00 3.273648E+00 3.158882E+00 3.067789E+00 + 3.689557E+00 3.512672E+00 3.367769E+00 3.251747E+00 3.157904E+00 + 3.760562E+00 3.585793E+00 3.440699E+00 3.322686E+00 3.226054E+00 + 1.534483E+01 1.979636E+01 2.570507E+01 3.390115E+01 4.524359E+01 + 1.552527E+01 1.995210E+01 2.586475E+01 3.407452E+01 4.545723E+01 + 1.573568E+01 2.013743E+01 2.603225E+01 3.426332E+01 4.568186E+01 + 1.597623E+01 2.036109E+01 2.623129E+01 3.447139E+01 4.592215E+01 + 1.625416E+01 2.062754E+01 2.646545E+01 3.470199E+01 4.618927E+01 + 1.658577E+01 2.093227E+01 2.674184E+01 3.496822E+01 4.647397E+01 + 1.696508E+01 2.129578E+01 2.706412E+01 3.528357E+01 4.679215E+01 + 1.742399E+01 2.172438E+01 2.746610E+01 3.564875E+01 4.716150E+01 + 1.795242E+01 2.224694E+01 2.796578E+01 3.611841E+01 4.763958E+01 + 1.866716E+01 2.297178E+01 2.872467E+01 3.691559E+01 4.851948E+01 + 1.969899E+01 2.407412E+01 2.997797E+01 3.836782E+01 5.022609E+01 + 2.105717E+01 2.557375E+01 3.171931E+01 4.047732E+01 5.275945E+01 + 2.261931E+01 2.733630E+01 3.377338E+01 4.295187E+01 5.568876E+01 + 2.439371E+01 2.933044E+01 3.610926E+01 4.573865E+01 5.889942E+01 + 2.641274E+01 3.160324E+01 3.876837E+01 4.886143E+01 6.241864E+01 + 2.868760E+01 3.418790E+01 4.175356E+01 5.230352E+01 6.621815E+01 + 3.130600E+01 3.717087E+01 4.516934E+01 5.617245E+01 7.042519E+01 + 3.432798E+01 4.058952E+01 4.904126E+01 6.051088E+01 7.506841E+01 + 3.781588E+01 4.449994E+01 5.340770E+01 6.532718E+01 8.011634E+01 + 4.183597E+01 4.900394E+01 5.834309E+01 7.067599E+01 8.568198E+01 + 4.653918E+01 5.417001E+01 6.399528E+01 7.662071E+01 9.180713E+01 + 5.195944E+01 6.005675E+01 7.030406E+01 8.322276E+01 9.849820E+01 + 5.812762E+01 6.668868E+01 7.727728E+01 9.036512E+01 1.056380E+02 + 6.474942E+01 7.363363E+01 8.441586E+01 9.745030E+01 1.125687E+02 + 7.117729E+01 8.023919E+01 9.086407E+01 1.035420E+02 1.182816E+02 + 7.772087E+01 8.695093E+01 9.734625E+01 1.094443E+02 1.236805E+02 + 8.503348E+01 9.440891E+01 1.046100E+02 1.163408E+02 1.297722E+02 + 9.319683E+01 1.027921E+02 1.130058E+02 1.243752E+02 1.370811E+02 + 1.025050E+02 1.123809E+02 1.229222E+02 1.338375E+02 1.459412E+02 + 1.131645E+02 1.234776E+02 1.342447E+02 1.449618E+02 1.563498E+02 + 1.253743E+02 1.360619E+02 1.470340E+02 1.578814E+02 1.685774E+02 + 1.393747E+02 1.504428E+02 1.615434E+02 1.723994E+02 1.827369E+02 + 1.556601E+02 1.668918E+02 1.779278E+02 1.887473E+02 1.986519E+02 + 1.750905E+02 1.855381E+02 1.963705E+02 2.066976E+02 2.160251E+02 + 1.983526E+02 2.068138E+02 2.167801E+02 2.262236E+02 2.347308E+02 + 2.257939E+02 2.312518E+02 2.392675E+02 2.473599E+02 2.548445E+02 + 2.559797E+02 2.594962E+02 2.642441E+02 2.702340E+02 2.759755E+02 + 2.871635E+02 2.903832E+02 2.923312E+02 2.952917E+02 2.985930E+02 + 3.179805E+02 3.214592E+02 3.225901E+02 3.228395E+02 3.228579E+02 + 3.465581E+02 3.508275E+02 3.521639E+02 3.510846E+02 3.491836E+02 + 3.715793E+02 3.770753E+02 3.787658E+02 3.773670E+02 3.743144E+02 + 3.909233E+02 3.981451E+02 4.008842E+02 3.999828E+02 3.962163E+02 + 4.037366E+02 4.131928E+02 4.171507E+02 4.172876E+02 4.137210E+02 + 4.098700E+02 4.210716E+02 4.271606E+02 4.284123E+02 4.256852E+02 + 4.095417E+02 4.220281E+02 4.300058E+02 4.327156E+02 4.311453E+02 + 4.034704E+02 4.169848E+02 4.262421E+02 4.306400E+02 4.305440E+02 + 3.933538E+02 4.078056E+02 4.172632E+02 4.230487E+02 4.244207E+02 + 3.805543E+02 3.951905E+02 4.048658E+02 4.116021E+02 4.142182E+02 + 3.663089E+02 3.813513E+02 3.909287E+02 3.979868E+02 4.017184E+02 + 3.531495E+02 3.676191E+02 3.770064E+02 3.839816E+02 3.883767E+02 + 3.433917E+02 3.561938E+02 3.647474E+02 3.715071E+02 3.760173E+02 + 3.363220E+02 3.473235E+02 3.550069E+02 3.616420E+02 3.660635E+02 + 3.314995E+02 3.410681E+02 3.484106E+02 3.549379E+02 3.591613E+02 + 3.301444E+02 3.383765E+02 3.457070E+02 3.521265E+02 3.560353E+02 + 3.329605E+02 3.400784E+02 3.474661E+02 3.527736E+02 3.553845E+02 + 3.402692E+02 3.457976E+02 3.508698E+02 3.540217E+02 3.548866E+02 + 3.484763E+02 3.506936E+02 3.528500E+02 3.537579E+02 3.528929E+02 + 3.544570E+02 3.539881E+02 3.532233E+02 3.519706E+02 3.494904E+02 + 3.574868E+02 3.557759E+02 3.527173E+02 3.498684E+02 3.462632E+02 + +Band: 3, gas: 6, k-terms: 1 + 2.910715E+00 3.233791E+00 3.537799E+00 3.822464E+00 4.082823E+00 + 2.918209E+00 3.240546E+00 3.543933E+00 3.827993E+00 4.087726E+00 + 2.926392E+00 3.247897E+00 3.550579E+00 3.833962E+00 4.093009E+00 + 2.935396E+00 3.255952E+00 3.557829E+00 3.840449E+00 4.098736E+00 + 2.945546E+00 3.265007E+00 3.565949E+00 3.847692E+00 4.105120E+00 + 2.956793E+00 3.274998E+00 3.574866E+00 3.855614E+00 4.112087E+00 + 2.969517E+00 3.286263E+00 3.584878E+00 3.864480E+00 4.119868E+00 + 2.984298E+00 3.299325E+00 3.596458E+00 3.874714E+00 4.128841E+00 + 3.002283E+00 3.315236E+00 3.610580E+00 3.887202E+00 4.139794E+00 + 3.030550E+00 3.340617E+00 3.633463E+00 3.907686E+00 4.157872E+00 + 3.079209E+00 3.384984E+00 3.674071E+00 3.944417E+00 4.190439E+00 + 3.146247E+00 3.446524E+00 3.730637E+00 3.995665E+00 4.235825E+00 + 3.220626E+00 3.514846E+00 3.793292E+00 4.052229E+00 4.285713E+00 + 3.299941E+00 3.587629E+00 3.859796E+00 4.111998E+00 4.338195E+00 + 3.384533E+00 3.665127E+00 3.930329E+00 4.175116E+00 4.393383E+00 + 3.473575E+00 3.746482E+00 4.004052E+00 4.240805E+00 4.450595E+00 + 3.569505E+00 3.833959E+00 4.083048E+00 4.310934E+00 4.511469E+00 + 3.672789E+00 3.927944E+00 4.167644E+00 4.385784E+00 4.576256E+00 + 3.783333E+00 4.028307E+00 4.257702E+00 4.465238E+00 4.644885E+00 + 3.902443E+00 4.136264E+00 4.354346E+00 4.550314E+00 4.718261E+00 + 4.031531E+00 4.253136E+00 4.458805E+00 4.642120E+00 4.797371E+00 + 4.170307E+00 4.378665E+00 4.570870E+00 4.740521E+00 4.882167E+00 + 4.317883E+00 4.512070E+00 4.689899E+00 4.845066E+00 4.972402E+00 + 4.466011E+00 4.645806E+00 4.809335E+00 4.950448E+00 5.064194E+00 + 4.604742E+00 4.770997E+00 4.921747E+00 5.051039E+00 5.153959E+00 + 4.746675E+00 4.899760E+00 5.038336E+00 5.156783E+00 5.250158E+00 + 4.903265E+00 5.043134E+00 5.169238E+00 5.276499E+00 5.360011E+00 + 5.077206E+00 5.204127E+00 5.317473E+00 5.413018E+00 5.486018E+00 + 5.268902E+00 5.383629E+00 5.484202E+00 5.567542E+00 5.629269E+00 + 5.475484E+00 5.579344E+00 5.667647E+00 5.738744E+00 5.788810E+00 + 5.692825E+00 5.787682E+00 5.864715E+00 5.923987E+00 5.962458E+00 + 5.916408E+00 6.004429E+00 6.071535E+00 6.119749E+00 6.146996E+00 + 6.141313E+00 6.224722E+00 6.283416E+00 6.321579E+00 6.338250E+00 + 6.362244E+00 6.443224E+00 6.495099E+00 6.524385E+00 6.531220E+00 + 6.574044E+00 6.654733E+00 6.701418E+00 6.723129E+00 6.720743E+00 + 6.772582E+00 6.854954E+00 6.897968E+00 6.912984E+00 6.902998E+00 + 6.953995E+00 7.040270E+00 7.081157E+00 7.090733E+00 7.074476E+00 + 7.116060E+00 7.208146E+00 7.248569E+00 7.254104E+00 7.232664E+00 + 7.258911E+00 7.357931E+00 7.398782E+00 7.401583E+00 7.375841E+00 + 7.383503E+00 7.490083E+00 7.531930E+00 7.532650E+00 7.503207E+00 + 7.492347E+00 7.605873E+00 7.648644E+00 7.647397E+00 7.614473E+00 + 7.586182E+00 7.706138E+00 7.749531E+00 7.746542E+00 7.710727E+00 + 7.664791E+00 7.791565E+00 7.835853E+00 7.831601E+00 7.793191E+00 + 7.729144E+00 7.862938E+00 7.909382E+00 7.904503E+00 7.864135E+00 + 7.781139E+00 7.922509E+00 7.971668E+00 7.966710E+00 7.924907E+00 + 7.823708E+00 7.972692E+00 8.024375E+00 8.019429E+00 7.976382E+00 + 7.863496E+00 8.016345E+00 8.069239E+00 8.063497E+00 8.018719E+00 + 7.900252E+00 8.054516E+00 8.107159E+00 8.100273E+00 8.053574E+00 + 7.931904E+00 8.087039E+00 8.139262E+00 8.131180E+00 8.082844E+00 + 7.969895E+00 8.119154E+00 8.167321E+00 8.155838E+00 8.104381E+00 + 8.041795E+00 8.161532E+00 8.192204E+00 8.168826E+00 8.107981E+00 + 8.116420E+00 8.200091E+00 8.209035E+00 8.170593E+00 8.097671E+00 + 8.175432E+00 8.227777E+00 8.217083E+00 8.164446E+00 8.079623E+00 + 8.220233E+00 8.245453E+00 8.216951E+00 8.150832E+00 8.054242E+00 + 8.252187E+00 8.254141E+00 8.209571E+00 8.130668E+00 8.022645E+00 + 8.273241E+00 8.255249E+00 8.196241E+00 8.105226E+00 7.986311E+00 + 8.285121E+00 8.249230E+00 8.176571E+00 8.073686E+00 7.943966E+00 + 8.289207E+00 8.237595E+00 8.152279E+00 8.038146E+00 7.898001E+00 + 8.290353E+00 8.229824E+00 8.136993E+00 8.016113E+00 7.869626E+00 + +Band: 3, gas: 12, k-terms: 1 + 5.014418E-04 1.725457E-03 4.355324E-03 8.836717E-03 1.528282E-02 + 5.109536E-04 1.749644E-03 4.401603E-03 8.909138E-03 1.538063E-02 + 5.206599E-04 1.774219E-03 4.448500E-03 8.982406E-03 1.547952E-02 + 5.305734E-04 1.799208E-03 4.496057E-03 9.056588E-03 1.557956E-02 + 5.410208E-04 1.825431E-03 4.545826E-03 9.134105E-03 1.568405E-02 + 5.514199E-04 1.851422E-03 4.595039E-03 9.210677E-03 1.578726E-02 + 5.620970E-04 1.877995E-03 4.645231E-03 9.288688E-03 1.589243E-02 + 5.737275E-04 1.906815E-03 4.699526E-03 9.372970E-03 1.600602E-02 + 5.883373E-04 1.942827E-03 4.767124E-03 9.477622E-03 1.614679E-02 + 6.236595E-04 2.028957E-03 4.927327E-03 9.723463E-03 1.647442E-02 + 7.115155E-04 2.238309E-03 5.310221E-03 1.030327E-02 1.723836E-02 + 8.619039E-04 2.583253E-03 5.924401E-03 1.121510E-02 1.842182E-02 + 1.054193E-03 3.004748E-03 6.651331E-03 1.226962E-02 1.976718E-02 + 1.285752E-03 3.489742E-03 7.461399E-03 1.341767E-02 2.120688E-02 + 1.562007E-03 4.043465E-03 8.357832E-03 1.465961E-02 2.273847E-02 + 1.879903E-03 4.654563E-03 9.318186E-03 1.596173E-02 2.431923E-02 + 2.256474E-03 5.350099E-03 1.038050E-02 1.737257E-02 2.600614E-02 + 2.698838E-03 6.136189E-03 1.154839E-02 1.889281E-02 2.779785E-02 + 3.206205E-03 7.005252E-03 1.280615E-02 2.049950E-02 2.966611E-02 + 3.791642E-03 7.973658E-03 1.417321E-02 2.221490E-02 3.163583E-02 + 4.473302E-03 9.064095E-03 1.567617E-02 2.406892E-02 3.373966E-02 + 5.246949E-03 1.026307E-02 1.729206E-02 2.603115E-02 3.594281E-02 + 6.086245E-03 1.152698E-02 1.896194E-02 2.803211E-02 3.817106E-02 + 6.754005E-03 1.251499E-02 2.025609E-02 2.958102E-02 3.990477E-02 + 6.838720E-03 1.265729E-02 2.047413E-02 2.989180E-02 4.032166E-02 + 6.517126E-03 1.221407E-02 1.995086E-02 2.935378E-02 3.984099E-02 + 6.060999E-03 1.156723E-02 1.916098E-02 2.850445E-02 3.902932E-02 + 5.561674E-03 1.084326E-02 1.825910E-02 2.751578E-02 3.806479E-02 + 5.087130E-03 1.014139E-02 1.737149E-02 2.653253E-02 3.710068E-02 + 4.642953E-03 9.470896E-03 1.651009E-02 2.556727E-02 3.614817E-02 + 4.223821E-03 8.824306E-03 1.566463E-02 2.460595E-02 3.518855E-02 + 3.839222E-03 8.217941E-03 1.485780E-02 2.367530E-02 3.424900E-02 + 3.493453E-03 7.660804E-03 1.410356E-02 2.279275E-02 3.334755E-02 + 3.179159E-03 7.142429E-03 1.338834E-02 2.194133E-02 3.246301E-02 + 2.882741E-03 6.640005E-03 1.267887E-02 2.107765E-02 3.154257E-02 + 2.602583E-03 6.150788E-03 1.197035E-02 2.019281E-02 3.057186E-02 + 2.330858E-03 5.660304E-03 1.123993E-02 1.925552E-02 2.951067E-02 + 2.072475E-03 5.177320E-03 1.049995E-02 1.828036E-02 2.837454E-02 + 1.844625E-03 4.736190E-03 9.805621E-03 1.734349E-02 2.725730E-02 + 1.657263E-03 4.360585E-03 9.199408E-03 1.650849E-02 2.624254E-02 + 1.522852E-03 4.081372E-03 8.738555E-03 1.586337E-02 2.544888E-02 + 1.423529E-03 3.867227E-03 8.377543E-03 1.535047E-02 2.481055E-02 + 1.337710E-03 3.675456E-03 8.047622E-03 1.487437E-02 2.420923E-02 + 1.259042E-03 3.492871E-03 7.727094E-03 1.440468E-02 2.360714E-02 + 1.190739E-03 3.326260E-03 7.427770E-03 1.395918E-02 2.302843E-02 + 1.145440E-03 3.203681E-03 7.199442E-03 1.361295E-02 2.257336E-02 + 1.143779E-03 3.172144E-03 7.126859E-03 1.349514E-02 2.241579E-02 + 1.172788E-03 3.202945E-03 7.160379E-03 1.353311E-02 2.246173E-02 + 1.214343E-03 3.254318E-03 7.225525E-03 1.361509E-02 2.256317E-02 + 1.331094E-03 3.463227E-03 7.561681E-03 1.409739E-02 2.319081E-02 + 1.765275E-03 4.329485E-03 9.005260E-03 1.618477E-02 2.589633E-02 + 2.526517E-03 5.770462E-03 1.130223E-02 1.939199E-02 2.994027E-02 + 3.559981E-03 7.591885E-03 1.405361E-02 2.308060E-02 3.444739E-02 + 4.925602E-03 9.844295E-03 1.728957E-02 2.725591E-02 3.939926E-02 + 6.657859E-03 1.253236E-02 2.097653E-02 3.184640E-02 4.469323E-02 + 8.758392E-03 1.561709E-02 2.503316E-02 3.673471E-02 5.018739E-02 + 1.132304E-02 1.920252E-02 2.957205E-02 4.204307E-02 5.601271E-02 + 1.428166E-02 2.315643E-02 3.440520E-02 4.754192E-02 6.191433E-02 + 1.634366E-02 2.581238E-02 3.756245E-02 5.105786E-02 6.562436E-02 + +Band: 3, gas: 10, k-terms: 1 + 1.786655E+01 2.141185E+01 2.605861E+01 3.039269E+01 3.567211E+01 + 1.788709E+01 2.145154E+01 2.610366E+01 3.044966E+01 3.576638E+01 + 1.790739E+01 2.149126E+01 2.614864E+01 3.050674E+01 3.585996E+01 + 1.792744E+01 2.153102E+01 2.619357E+01 3.056391E+01 3.595284E+01 + 1.794868E+01 2.157263E+01 2.624037E+01 3.062303E+01 3.604787E+01 + 1.796825E+01 2.161248E+01 2.628515E+01 3.068038E+01 3.613931E+01 + 1.798758E+01 2.165237E+01 2.597853E+01 3.073781E+01 3.623000E+01 + 1.800947E+01 2.169595E+01 2.602456E+01 3.079906E+01 3.632561E+01 + 1.804225E+01 2.175416E+01 2.608483E+01 3.087535E+01 3.644298E+01 + 1.815767E+01 2.192212E+01 2.625198E+01 3.106417E+01 3.672827E+01 + 1.845921E+01 2.234393E+01 2.666618E+01 3.151346E+01 3.564557E+01 + 1.891707E+01 2.299760E+01 2.730565E+01 3.205098E+01 3.449692E+01 + 1.940530E+01 2.372408E+01 2.874278E+01 3.268684E+01 3.538536E+01 + 1.987157E+01 2.448195E+01 2.955597E+01 3.379016E+01 3.630510E+01 + 2.062249E+01 2.526812E+01 3.040178E+01 3.492804E+01 3.725246E+01 + 2.137516E+01 2.605813E+01 3.060772E+01 3.606638E+01 3.761335E+01 + 2.215760E+01 2.650311E+01 3.142151E+01 3.568424E+01 4.015232E+01 + 2.296685E+01 2.728726E+01 3.213360E+01 3.458724E+01 2.950979E+01 + 2.378657E+01 2.889192E+01 3.302847E+01 3.555360E+01 2.966101E+01 + 2.462623E+01 2.979297E+01 3.420554E+01 3.653834E+01 2.980788E+01 + 2.549727E+01 3.013364E+01 3.542281E+01 3.721485E+01 2.995302E+01 + 2.604990E+01 3.101022E+01 3.665282E+01 3.785827E+01 3.009146E+01 + 2.684130E+01 3.175586E+01 3.641242E+01 2.908326E+01 3.021514E+01 + 2.818982E+01 3.233402E+01 3.481140E+01 2.916941E+01 3.027498E+01 + 2.814586E+01 3.229818E+01 3.477116E+01 2.909465E+01 3.019936E+01 + 2.687864E+01 3.184517E+01 3.659697E+01 2.891133E+01 3.003236E+01 + 2.627151E+01 3.131166E+01 3.706415E+01 4.005920E+01 2.982731E+01 + 2.587124E+01 3.060307E+01 3.610823E+01 3.749896E+01 2.960089E+01 + 2.512790E+01 3.045459E+01 3.516468E+01 3.717208E+01 2.936839E+01 + 2.438665E+01 2.968350E+01 3.424820E+01 3.636846E+01 2.913219E+01 + 2.364622E+01 2.891674E+01 3.335803E+01 3.558665E+01 2.889217E+01 + 2.292627E+01 2.817505E+01 3.236627E+01 3.484805E+01 2.865342E+01 + 2.224286E+01 2.663817E+01 3.171259E+01 3.661018E+01 2.842052E+01 + 2.159533E+01 2.603333E+01 3.115545E+01 3.684357E+01 3.787605E+01 + 2.096803E+01 2.571450E+01 3.055333E+01 3.607411E+01 3.738873E+01 + 2.035869E+01 2.511297E+01 2.997266E+01 3.535158E+01 3.690995E+01 + 1.974790E+01 2.451298E+01 2.992002E+01 3.465104E+01 3.656346E+01 + 1.913532E+01 2.391379E+01 2.930247E+01 3.397187E+01 3.596345E+01 + 1.872971E+01 2.334525E+01 2.872002E+01 3.334876E+01 3.541187E+01 + 1.838472E+01 2.283378E+01 2.819994E+01 3.243603E+01 3.493256E+01 + 2.077954E+01 2.478598E+01 2.716357E+01 3.212749E+01 3.552414E+01 + 2.056231E+01 2.401290E+01 2.684478E+01 3.179884E+01 3.741665E+01 + 2.035401E+01 2.354791E+01 2.644090E+01 3.148860E+01 3.709718E+01 + 1.866729E+01 2.187680E+01 2.641144E+01 3.114718E+01 3.681778E+01 + 1.948762E+01 2.123507E+01 2.567240E+01 3.091698E+01 3.662705E+01 + 1.804044E+01 2.068101E+01 2.533602E+01 3.058546E+01 3.632279E+01 + 1.757978E+01 2.129395E+01 2.551981E+01 3.044816E+01 3.612938E+01 + 1.920846E+01 2.259820E+01 2.572102E+01 3.044883E+01 3.614774E+01 + 1.926227E+01 2.250419E+01 2.544834E+01 3.005697E+01 3.592461E+01 + 1.928773E+01 2.264022E+01 2.541128E+01 3.047095E+01 3.618910E+01 + 2.058766E+01 2.383976E+01 2.653591E+01 3.187267E+01 3.545128E+01 + 2.048493E+01 2.546100E+01 2.851455E+01 3.427074E+01 3.653892E+01 + 2.369944E+01 2.722856E+01 3.069713E+01 3.617367E+01 3.640769E+01 + 2.497554E+01 2.736915E+01 3.230893E+01 3.576974E+01 3.525597E+01 + 2.654641E+01 2.931187E+01 3.460291E+01 3.701464E+01 3.640000E+01 + 2.818184E+01 3.212708E+01 3.705995E+01 3.820378E+01 3.802626E+01 + 2.976459E+01 3.446288E+01 3.739853E+01 3.902079E+01 4.044698E+01 + 3.138685E+01 3.510348E+01 3.808771E+01 3.977820E+01 4.112440E+01 + 3.256131E+01 3.573365E+01 3.847905E+01 3.939125E+01 4.066948E+01 + +Band: 4, gas: 1, k-terms: 4 + 2.023251E-07 2.139113E-07 2.564120E-07 3.363935E-07 4.614752E-07 + 2.470384E-07 2.615280E-07 3.137725E-07 4.115970E-07 5.643803E-07 + 3.016487E-07 3.197328E-07 3.839595E-07 5.036697E-07 6.902447E-07 + 3.683289E-07 3.908898E-07 4.698297E-07 6.163661E-07 8.441769E-07 + 4.497614E-07 4.779371E-07 5.749659E-07 7.543296E-07 1.032547E-06 + 5.492395E-07 5.843153E-07 7.034810E-07 9.231934E-07 1.262725E-06 + 6.708229E-07 7.143985E-07 8.608398E-07 1.130017E-06 1.544429E-06 + 8.192522E-07 8.735338E-07 1.053594E-06 1.383570E-06 1.889440E-06 + 1.000555E-06 1.068698E-06 1.290653E-06 1.695499E-06 2.314044E-06 + 1.222335E-06 1.311745E-06 1.590236E-06 2.092665E-06 2.856035E-06 + 1.494868E-06 1.622973E-06 1.987043E-06 2.626114E-06 3.587595E-06 + 1.832784E-06 2.026269E-06 2.516494E-06 3.346453E-06 4.577656E-06 + 2.254066E-06 2.542330E-06 3.202686E-06 4.284999E-06 5.868201E-06 + 2.782310E-06 3.201526E-06 4.087134E-06 5.497002E-06 7.531752E-06 + 3.447954E-06 4.046871E-06 5.229011E-06 7.064849E-06 9.678348E-06 + 4.287751E-06 5.128625E-06 6.694724E-06 9.078098E-06 1.242875E-05 + 5.356917E-06 6.524151E-06 8.593788E-06 1.168523E-05 1.598107E-05 + 6.719102E-06 8.328972E-06 1.105508E-05 1.506061E-05 2.056578E-05 + 8.458763E-06 1.065323E-05 1.423324E-05 1.941238E-05 2.645628E-05 + 1.069102E-05 1.365743E-05 1.835126E-05 2.503496E-05 3.403840E-05 + 1.357334E-05 1.755942E-05 2.370613E-05 3.232543E-05 4.383669E-05 + 1.729185E-05 2.261098E-05 3.063335E-05 4.173192E-05 5.643374E-05 + 2.205162E-05 2.908636E-05 3.949662E-05 5.372984E-05 7.243844E-05 + 2.777247E-05 3.680852E-05 5.003406E-05 6.796453E-05 9.140178E-05 + 3.381540E-05 4.478741E-05 6.084022E-05 8.260258E-05 1.109921E-04 + 4.024810E-05 5.306642E-05 7.195942E-05 9.771504E-05 1.313556E-04 + 4.755196E-05 6.225449E-05 8.419245E-05 1.143751E-04 1.538681E-04 + 5.603492E-05 7.271555E-05 9.799167E-05 1.331548E-04 1.793083E-04 + 6.615347E-05 8.495459E-05 1.140282E-04 1.548698E-04 2.087772E-04 + 7.829032E-05 9.936660E-05 1.327276E-04 1.801000E-04 2.430796E-04 + 9.288126E-05 1.163568E-04 1.545846E-04 2.094255E-04 2.829488E-04 + 1.105538E-04 1.366100E-04 1.803616E-04 2.439019E-04 3.296350E-04 + 1.320566E-04 1.609947E-04 2.110614E-04 2.846908E-04 3.848497E-04 + 1.582275E-04 1.903349E-04 2.476770E-04 3.331215E-04 4.502163E-04 + 1.901085E-04 2.256099E-04 2.912385E-04 3.903983E-04 5.272919E-04 + 2.289866E-04 2.680313E-04 3.431023E-04 4.581530E-04 6.181675E-04 + 2.763610E-04 3.189169E-04 4.045235E-04 5.377709E-04 7.245554E-04 + 3.341520E-04 3.799427E-04 4.771928E-04 6.313721E-04 8.489930E-04 + 4.049546E-04 4.538596E-04 5.641469E-04 7.428832E-04 9.964691E-04 + 4.916997E-04 5.439177E-04 6.693254E-04 8.770176E-04 1.173173E-03 + 5.979680E-04 6.546081E-04 7.987121E-04 1.041463E-03 1.389035E-03 + 7.280070E-04 7.898708E-04 9.564456E-04 1.241580E-03 1.650514E-03 + 8.863915E-04 9.537636E-04 1.146286E-03 1.480564E-03 1.961155E-03 + 1.079319E-03 1.151707E-03 1.373245E-03 1.763790E-03 2.327490E-03 + 1.314399E-03 1.391465E-03 1.645634E-03 2.100159E-03 2.759326E-03 + 1.600931E-03 1.683332E-03 1.975839E-03 2.505440E-03 3.275563E-03 + 1.949217E-03 2.042207E-03 2.384302E-03 3.006887E-03 3.910998E-03 + 2.372228E-03 2.480747E-03 2.885787E-03 3.620127E-03 4.682039E-03 + 2.884910E-03 3.012104E-03 3.491690E-03 4.354374E-03 5.596024E-03 + 3.505788E-03 3.672030E-03 4.259021E-03 5.290161E-03 6.752302E-03 + 4.265875E-03 4.569432E-03 5.381570E-03 6.704315E-03 8.493433E-03 + 5.232257E-03 5.786330E-03 6.930460E-03 8.644228E-03 1.084642E-02 + 6.482786E-03 7.372422E-03 8.926534E-03 1.108564E-02 1.375446E-02 + 8.113164E-03 9.424440E-03 1.145863E-02 1.411921E-02 1.732559E-02 + 1.022493E-02 1.203358E-02 1.461259E-02 1.784423E-02 2.170438E-02 + 1.290450E-02 1.528540E-02 1.847722E-02 2.239521E-02 2.710352E-02 + 1.629128E-02 1.933808E-02 2.326780E-02 2.808809E-02 3.397914E-02 + 2.049200E-02 2.432549E-02 2.920732E-02 3.526924E-02 4.284765E-02 + 2.414368E-02 2.865093E-02 3.440977E-02 4.166705E-02 5.087000E-02 + 1.783230E-05 5.223065E-05 1.306214E-04 2.856784E-04 5.161695E-04 + 2.075586E-05 5.939686E-05 1.449866E-04 3.085120E-04 5.473816E-04 + 2.426447E-05 6.787794E-05 1.613990E-04 3.346164E-04 5.824670E-04 + 2.844662E-05 7.750321E-05 1.804313E-04 3.645706E-04 6.220256E-04 + 3.355371E-05 8.908671E-05 2.026779E-04 3.985585E-04 6.678768E-04 + 3.948835E-05 1.028718E-04 2.281034E-04 4.366796E-04 7.194280E-04 + 4.652681E-05 1.189584E-04 2.574977E-04 4.802627E-04 7.773341E-04 + 5.488840E-05 1.379600E-04 2.909911E-04 5.303479E-04 8.433253E-04 + 6.487489E-05 1.603866E-04 3.297082E-04 5.885713E-04 9.188820E-04 + 7.885526E-05 1.891409E-04 3.805756E-04 6.609381E-04 1.013007E-03 + 1.009281E-04 2.329960E-04 4.531043E-04 7.624682E-04 1.141150E-03 + 1.348224E-04 2.968575E-04 5.523555E-04 8.966869E-04 1.306490E-03 + 1.806121E-04 3.780184E-04 6.741592E-04 1.055477E-03 1.500981E-03 + 2.393748E-04 4.774760E-04 8.173344E-04 1.239390E-03 1.723200E-03 + 3.148904E-04 5.984094E-04 9.854443E-04 1.449449E-03 1.977278E-03 + 4.090916E-04 7.431110E-04 1.178982E-03 1.688404E-03 2.264649E-03 + 5.275932E-04 9.159303E-04 1.403549E-03 1.964484E-03 2.594378E-03 + 6.732634E-04 1.120594E-03 1.664544E-03 2.281620E-03 2.972675E-03 + 8.480088E-04 1.358854E-03 1.963121E-03 2.643047E-03 3.403967E-03 + 1.058254E-03 1.638416E-03 2.308363E-03 3.058069E-03 3.897178E-03 + 1.309919E-03 1.962855E-03 2.707047E-03 3.536673E-03 4.465796E-03 + 1.604204E-03 2.339366E-03 3.165578E-03 4.086450E-03 5.118579E-03 + 1.943061E-03 2.765376E-03 3.685612E-03 4.710846E-03 5.860527E-03 + 2.289052E-03 3.201691E-03 4.223122E-03 5.360337E-03 6.637636E-03 + 2.560489E-03 3.559371E-03 4.677828E-03 5.927208E-03 7.332451E-03 + 2.769963E-03 3.854735E-03 5.071849E-03 6.433824E-03 7.967189E-03 + 2.960926E-03 4.135159E-03 5.457613E-03 6.938522E-03 8.610067E-03 + 3.143306E-03 4.411033E-03 5.848523E-03 7.460157E-03 9.286080E-03 + 3.334298E-03 4.702838E-03 6.265027E-03 8.024123E-03 1.002571E-02 + 3.535939E-03 5.012705E-03 6.713015E-03 8.640686E-03 1.083362E-02 + 3.746667E-03 5.341967E-03 7.195264E-03 9.310728E-03 1.172460E-02 + 3.973892E-03 5.697754E-03 7.722131E-03 1.004676E-02 1.271737E-02 + 4.224793E-03 6.097329E-03 8.306301E-03 1.086862E-02 1.384346E-02 + 4.500168E-03 6.536801E-03 8.958208E-03 1.179676E-02 1.511731E-02 + 4.802966E-03 7.019398E-03 9.676707E-03 1.282812E-02 1.655265E-02 + 5.134218E-03 7.548843E-03 1.047107E-02 1.397744E-02 1.817795E-02 + 5.485863E-03 8.118674E-03 1.133561E-02 1.524927E-02 2.001551E-02 + 5.860058E-03 8.730111E-03 1.227148E-02 1.665755E-02 2.208795E-02 + 6.280006E-03 9.413316E-03 1.332346E-02 1.825561E-02 2.448797E-02 + 6.767640E-03 1.019763E-02 1.453673E-02 2.011888E-02 2.733829E-02 + 7.367063E-03 1.114747E-02 1.601012E-02 2.237958E-02 3.085944E-02 + 8.087524E-03 1.226984E-02 1.775722E-02 2.510671E-02 3.519768E-02 + 8.897869E-03 1.355076E-02 1.977516E-02 2.832053E-02 4.044048E-02 + 9.803586E-03 1.498613E-02 2.208619E-02 3.210848E-02 4.673186E-02 + 1.083568E-02 1.663003E-02 2.477935E-02 3.662305E-02 5.430193E-02 + 1.207221E-02 1.858442E-02 2.803935E-02 4.222813E-02 6.360001E-02 + 1.365848E-02 2.108836E-02 3.226998E-02 4.955867E-02 7.545632E-02 + 1.562711E-02 2.422190E-02 3.770361E-02 5.900172E-02 9.021823E-02 + 1.797350E-02 2.803257E-02 4.446983E-02 7.059719E-02 1.079824E-01 + 2.120278E-02 3.340908E-02 5.407122E-02 8.642201E-02 1.317115E-01 + 2.739451E-02 4.410752E-02 7.259125E-02 1.150161E-01 1.727263E-01 + 3.764213E-02 6.231426E-02 1.020902E-01 1.587117E-01 2.337889E-01 + 5.317382E-02 8.904721E-02 1.431982E-01 2.181139E-01 3.155251E-01 + 7.649025E-02 1.267913E-01 1.996185E-01 2.979994E-01 4.234906E-01 + 1.098140E-01 1.785632E-01 2.754539E-01 4.030972E-01 5.632040E-01 + 1.554685E-01 2.476165E-01 3.742919E-01 5.374970E-01 7.390926E-01 + 2.176383E-01 3.392851E-01 5.023035E-01 7.082157E-01 9.590483E-01 + 2.980192E-01 4.549240E-01 6.609118E-01 9.164942E-01 1.223982E+00 + 3.638164E-01 5.488410E-01 7.884948E-01 1.083311E+00 1.435499E+00 + 1.852751E-02 4.332050E-02 1.168881E-01 2.927821E-01 6.750332E-01 + 1.909709E-02 4.511650E-02 1.201781E-01 2.985678E-01 6.850738E-01 + 1.982799E-02 4.735375E-02 1.241481E-01 3.055539E-01 6.954357E-01 + 2.074707E-02 4.957261E-02 1.295398E-01 3.141004E-01 7.074123E-01 + 2.189700E-02 5.251251E-02 1.358008E-01 3.237307E-01 7.233087E-01 + 2.308944E-02 5.608607E-02 1.427286E-01 3.348002E-01 7.403537E-01 + 2.448828E-02 6.025236E-02 1.510786E-01 3.489283E-01 7.585590E-01 + 2.618893E-02 6.528521E-02 1.603424E-01 3.656585E-01 7.827906E-01 + 2.820894E-02 7.120714E-02 1.714243E-01 3.854371E-01 8.122290E-01 + 3.135707E-02 7.922978E-02 1.890873E-01 4.137663E-01 8.624600E-01 + 3.672703E-02 9.374835E-02 2.185723E-01 4.655136E-01 9.568203E-01 + 4.590258E-02 1.168750E-01 2.623057E-01 5.452115E-01 1.098403E+00 + 5.896852E-02 1.470660E-01 3.190934E-01 6.459648E-01 1.278725E+00 + 7.652982E-02 1.844034E-01 3.878201E-01 7.706216E-01 1.492672E+00 + 1.001160E-01 2.312949E-01 4.725160E-01 9.167101E-01 1.747908E+00 + 1.308525E-01 2.914272E-01 5.787319E-01 1.092933E+00 2.049940E+00 + 1.709741E-01 3.666786E-01 7.082369E-01 1.314027E+00 2.407392E+00 + 2.229497E-01 4.623570E-01 8.720719E-01 1.582762E+00 2.838202E+00 + 2.887293E-01 5.820537E-01 1.073173E+00 1.908411E+00 3.347055E+00 + 3.750974E-01 7.388088E-01 1.323321E+00 2.306253E+00 3.955522E+00 + 4.883016E-01 9.337110E-01 1.635950E+00 2.789138E+00 4.684214E+00 + 6.326451E-01 1.181832E+00 2.022225E+00 3.371774E+00 5.558393E+00 + 8.153048E-01 1.484417E+00 2.482140E+00 4.063717E+00 6.576278E+00 + 1.013930E+00 1.807760E+00 2.967723E+00 4.776017E+00 7.588748E+00 + 1.163223E+00 2.050477E+00 3.343438E+00 5.299073E+00 8.293291E+00 + 1.262171E+00 2.235999E+00 3.632829E+00 5.695548E+00 8.784822E+00 + 1.346206E+00 2.403858E+00 3.923378E+00 6.087566E+00 9.269658E+00 + 1.418123E+00 2.561257E+00 4.219294E+00 6.531764E+00 9.826556E+00 + 1.501392E+00 2.738254E+00 4.545996E+00 7.041392E+00 1.050251E+01 + 1.589936E+00 2.930870E+00 4.911565E+00 7.635920E+00 1.130111E+01 + 1.682507E+00 3.134301E+00 5.295322E+00 8.287717E+00 1.226618E+01 + 1.776472E+00 3.351024E+00 5.731016E+00 9.026332E+00 1.337188E+01 + 1.895736E+00 3.613501E+00 6.204198E+00 9.853084E+00 1.465564E+01 + 2.022303E+00 3.903179E+00 6.755345E+00 1.079213E+01 1.608712E+01 + 2.156745E+00 4.202545E+00 7.350782E+00 1.180962E+01 1.766517E+01 + 2.292870E+00 4.537020E+00 7.982538E+00 1.287838E+01 1.938348E+01 + 2.403020E+00 4.849749E+00 8.636571E+00 1.403254E+01 2.116564E+01 + 2.499926E+00 5.130814E+00 9.218421E+00 1.515467E+01 2.295036E+01 + 2.588900E+00 5.385671E+00 9.800470E+00 1.617798E+01 2.472064E+01 + 2.662011E+00 5.622386E+00 1.031751E+01 1.718078E+01 2.640288E+01 + 2.744313E+00 5.870600E+00 1.083949E+01 1.818446E+01 2.805555E+01 + 2.838427E+00 6.063303E+00 1.134101E+01 1.909184E+01 2.962463E+01 + 2.884646E+00 6.194288E+00 1.164921E+01 1.977908E+01 3.090071E+01 + 2.888323E+00 6.236824E+00 1.177559E+01 2.014952E+01 3.171667E+01 + 2.854824E+00 6.200715E+00 1.174777E+01 2.022535E+01 3.203758E+01 + 2.803603E+00 6.160910E+00 1.171702E+01 2.014115E+01 3.205595E+01 + 2.804022E+00 6.182858E+00 1.173707E+01 2.012368E+01 3.206927E+01 + 2.819179E+00 6.203468E+00 1.182508E+01 2.013431E+01 3.195402E+01 + 2.839347E+00 6.185338E+00 1.175686E+01 2.001189E+01 3.156572E+01 + 2.939367E+00 6.305814E+00 1.185056E+01 2.012544E+01 3.166092E+01 + 3.500971E+00 7.199221E+00 1.319664E+01 2.204318E+01 3.398463E+01 + 4.380976E+00 8.639686E+00 1.541674E+01 2.486051E+01 3.742221E+01 + 5.415845E+00 1.033502E+01 1.776586E+01 2.781403E+01 4.093812E+01 + 6.648399E+00 1.221789E+01 2.027170E+01 3.095887E+01 4.466651E+01 + 7.997573E+00 1.409753E+01 2.283470E+01 3.423792E+01 4.836498E+01 + 9.291019E+00 1.595371E+01 2.522038E+01 3.698520E+01 5.151917E+01 + 1.069162E+01 1.783410E+01 2.747672E+01 3.945153E+01 5.398500E+01 + 1.207226E+01 1.955623E+01 2.933425E+01 4.119127E+01 5.547023E+01 + 1.265422E+01 2.013939E+01 2.983565E+01 4.153773E+01 5.541852E+01 + 1.524514E+01 4.207525E+01 9.117203E+01 1.727353E+02 2.930224E+02 + 1.548843E+01 4.256916E+01 9.199536E+01 1.739931E+02 2.948981E+02 + 1.573667E+01 4.306989E+01 9.282675E+01 1.752583E+02 2.967842E+02 + 1.599027E+01 4.357784E+01 9.366654E+01 1.765311E+02 2.986804E+02 + 1.625756E+01 4.410945E+01 9.480462E+01 1.778517E+02 3.006473E+02 + 1.652425E+01 4.463507E+01 9.567498E+01 1.791418E+02 3.025687E+02 + 1.679864E+01 4.517098E+01 9.655692E+01 1.804408E+02 3.045033E+02 + 1.709755E+01 4.575023E+01 9.750527E+01 1.818298E+02 3.065727E+02 + 1.747055E+01 4.647078E+01 9.868317E+01 1.835530E+02 3.091372E+02 + 1.834609E+01 4.818037E+01 1.015021E+02 1.878959E+02 3.153314E+02 + 2.008048E+01 5.227696E+01 1.088311E+02 1.975311E+02 3.300681E+02 + 2.360533E+01 5.887258E+01 1.197141E+02 2.142928E+02 3.526580E+02 + 2.795162E+01 6.670634E+01 1.328474E+02 2.338994E+02 3.796566E+02 + 3.299231E+01 7.518010E+01 1.468861E+02 2.553296E+02 4.085217E+02 + 3.878220E+01 8.515322E+01 1.618929E+02 2.784402E+02 4.392602E+02 + 4.519680E+01 9.586620E+01 1.787549E+02 3.021619E+02 4.709284E+02 + 5.250824E+01 1.079120E+02 1.966867E+02 3.285404E+02 5.043528E+02 + 6.076215E+01 1.214349E+02 2.175269E+02 3.563633E+02 5.408562E+02 + 6.948711E+01 1.360020E+02 2.399940E+02 3.868140E+02 5.786353E+02 + 7.982854E+01 1.527145E+02 2.640897E+02 4.189131E+02 6.183298E+02 + 9.135919E+01 1.699065E+02 2.897136E+02 4.531643E+02 6.613500E+02 + 1.038456E+02 1.891201E+02 3.175870E+02 4.884801E+02 7.055829E+02 + 1.176724E+02 2.104997E+02 3.450308E+02 5.245896E+02 7.489102E+02 + 1.281393E+02 2.262946E+02 3.656859E+02 5.498995E+02 7.788334E+02 + 1.281725E+02 2.260900E+02 3.656369E+02 5.490601E+02 7.763700E+02 + 1.223521E+02 2.161810E+02 3.515410E+02 5.300817E+02 7.524663E+02 + 1.143568E+02 2.022684E+02 3.324003E+02 5.044476E+02 7.201631E+02 + 1.053322E+02 1.896165E+02 3.106311E+02 4.757889E+02 6.855543E+02 + 9.772224E+01 1.762707E+02 2.911743E+02 4.487691E+02 6.512176E+02 + 8.917911E+01 1.642848E+02 2.733528E+02 4.227880E+02 6.179853E+02 + 8.169751E+01 1.528540E+02 2.555972E+02 3.984927E+02 5.846300E+02 + 7.466924E+01 1.407212E+02 2.392044E+02 3.749865E+02 5.533931E+02 + 6.932572E+01 1.309343E+02 2.232516E+02 3.523550E+02 5.242877E+02 + 6.409658E+01 1.225376E+02 2.088222E+02 3.305082E+02 4.950478E+02 + 5.910498E+01 1.139761E+02 1.951983E+02 3.097506E+02 4.661763E+02 + 5.355150E+01 1.057060E+02 1.822328E+02 2.891375E+02 4.379855E+02 + 4.793034E+01 9.729284E+01 1.687221E+02 2.693389E+02 4.100409E+02 + 4.361108E+01 8.831660E+01 1.545229E+02 2.501041E+02 3.816955E+02 + 3.947625E+01 7.963088E+01 1.418620E+02 2.311851E+02 3.531270E+02 + 3.540059E+01 7.189945E+01 1.295867E+02 2.141778E+02 3.262244E+02 + 3.196487E+01 6.565140E+01 1.189957E+02 1.974310E+02 3.038626E+02 + 2.904361E+01 5.944690E+01 1.098534E+02 1.823763E+02 2.819479E+02 + 2.634407E+01 5.414111E+01 9.992440E+01 1.690651E+02 2.609057E+02 + 2.364181E+01 4.867475E+01 9.097824E+01 1.544084E+02 2.398514E+02 + 2.090602E+01 4.396304E+01 8.219070E+01 1.396912E+02 2.196783E+02 + 1.844285E+01 3.948671E+01 7.360139E+01 1.260558E+02 1.994367E+02 + 1.649041E+01 3.547044E+01 6.638335E+01 1.141254E+02 1.815688E+02 + 1.491740E+01 3.205007E+01 6.049048E+01 1.041211E+02 1.650054E+02 + 1.337372E+01 2.903071E+01 5.477270E+01 9.422540E+01 1.486578E+02 + 1.245462E+01 2.717882E+01 5.051769E+01 8.592384E+01 1.359634E+02 + 1.364672E+01 2.851062E+01 5.109944E+01 8.516552E+01 1.341063E+02 + 1.598986E+01 3.115534E+01 5.371134E+01 8.840629E+01 1.365563E+02 + 1.830397E+01 3.364003E+01 5.647518E+01 9.098839E+01 1.376318E+02 + 2.062460E+01 3.611173E+01 5.922085E+01 9.304970E+01 1.378836E+02 + 2.296066E+01 3.872478E+01 6.133089E+01 9.356602E+01 1.357745E+02 + 2.524900E+01 4.065466E+01 6.193302E+01 9.195925E+01 1.312403E+02 + 2.700904E+01 4.168249E+01 6.137030E+01 8.912473E+01 1.255566E+02 + 2.793967E+01 4.163763E+01 5.953307E+01 8.510213E+01 1.191703E+02 + 2.747837E+01 4.023192E+01 5.640440E+01 8.010161E+01 1.124562E+02 + +Band: 4, gas: 3, k-terms: 4 + 7.507974E-02 1.269314E-01 2.024846E-01 3.005469E-01 4.174876E-01 + 7.623287E-02 1.283146E-01 2.041536E-01 3.024668E-01 4.195615E-01 + 7.750637E-02 1.298472E-01 2.059390E-01 3.044368E-01 4.216954E-01 + 7.895933E-02 1.315602E-01 2.078666E-01 3.065833E-01 4.240010E-01 + 8.060386E-02 1.334905E-01 2.100249E-01 3.089342E-01 4.265107E-01 + 8.255609E-02 1.356074E-01 2.124045E-01 3.114260E-01 4.291955E-01 + 8.473733E-02 1.379619E-01 2.150375E-01 3.142059E-01 4.320312E-01 + 8.733834E-02 1.408282E-01 2.180684E-01 3.173613E-01 4.353199E-01 + 9.051560E-02 1.442175E-01 2.217235E-01 3.212290E-01 4.393266E-01 + 9.513110E-02 1.497243E-01 2.280355E-01 3.281793E-01 4.467405E-01 + 1.028675E-01 1.596305E-01 2.399841E-01 3.417828E-01 4.617567E-01 + 1.139824E-01 1.739655E-01 2.575187E-01 3.618895E-01 4.838111E-01 + 1.272207E-01 1.907171E-01 2.774767E-01 3.846702E-01 5.086621E-01 + 1.423412E-01 2.094017E-01 2.994512E-01 4.093261E-01 5.352714E-01 + 1.594945E-01 2.302137E-01 3.235051E-01 4.358970E-01 5.636487E-01 + 1.787050E-01 2.530015E-01 3.491907E-01 4.639736E-01 5.932280E-01 + 2.007538E-01 2.784803E-01 3.775460E-01 4.944801E-01 6.248912E-01 + 2.257340E-01 3.067098E-01 4.087742E-01 5.275412E-01 6.588973E-01 + 2.538038E-01 3.382086E-01 4.425558E-01 5.630058E-01 6.949935E-01 + 2.857269E-01 3.729710E-01 4.796584E-01 6.014102E-01 7.336114E-01 + 3.220395E-01 4.120427E-01 5.207582E-01 6.433844E-01 7.755206E-01 + 3.630999E-01 4.553632E-01 5.656373E-01 6.887537E-01 8.204241E-01 + 4.084744E-01 5.027846E-01 6.138821E-01 7.370646E-01 8.676956E-01 + 4.541958E-01 5.497076E-01 6.603739E-01 7.824546E-01 9.113452E-01 + 4.944864E-01 5.887671E-01 6.971048E-01 8.164764E-01 9.427857E-01 + 5.345530E-01 6.260214E-01 7.307440E-01 8.461336E-01 9.690612E-01 + 5.790776E-01 6.677480E-01 7.686822E-01 8.798823E-01 9.985274E-01 + 6.319966E-01 7.169692E-01 8.140811E-01 9.209148E-01 1.034923E+00 + 6.957383E-01 7.768479E-01 8.697955E-01 9.718959E-01 1.080971E+00 + 7.705840E-01 8.485573E-01 9.371344E-01 1.034433E+00 1.138138E+00 + 8.575072E-01 9.327763E-01 1.016631E+00 1.109242E+00 1.207604E+00 + 9.579844E-01 1.029412E+00 1.109989E+00 1.197263E+00 1.290352E+00 + 1.072587E+00 1.140919E+00 1.216496E+00 1.299255E+00 1.386959E+00 + 1.200686E+00 1.266400E+00 1.337129E+00 1.414289E+00 1.496529E+00 + 1.338156E+00 1.405057E+00 1.471407E+00 1.542436E+00 1.618475E+00 + 1.484819E+00 1.552177E+00 1.617586E+00 1.683160E+00 1.752125E+00 + 1.639102E+00 1.707065E+00 1.771142E+00 1.833427E+00 1.896031E+00 + 1.797210E+00 1.866458E+00 1.928810E+00 1.989085E+00 2.046740E+00 + 1.957761E+00 2.030045E+00 2.090696E+00 2.147107E+00 2.201975E+00 + 2.115269E+00 2.192620E+00 2.254334E+00 2.307608E+00 2.358221E+00 + 2.270687E+00 2.352540E+00 2.415160E+00 2.467209E+00 2.513500E+00 + 2.420435E+00 2.505710E+00 2.569805E+00 2.621204E+00 2.664786E+00 + 2.559128E+00 2.649978E+00 2.715395E+00 2.766088E+00 2.807385E+00 + 2.686887E+00 2.782360E+00 2.849960E+00 2.900507E+00 2.939824E+00 + 2.801537E+00 2.902480E+00 2.972074E+00 3.022542E+00 3.060517E+00 + 2.901386E+00 3.007815E+00 3.080789E+00 3.131948E+00 3.169338E+00 + 2.991057E+00 3.102287E+00 3.177605E+00 3.230069E+00 3.267192E+00 + 3.071411E+00 3.186026E+00 3.263240E+00 3.316626E+00 3.353654E+00 + 3.145029E+00 3.259839E+00 3.338863E+00 3.392799E+00 3.430148E+00 + 3.216383E+00 3.330841E+00 3.408463E+00 3.461994E+00 3.498704E+00 + 3.305453E+00 3.410160E+00 3.480849E+00 3.529903E+00 3.563144E+00 + 3.396376E+00 3.487701E+00 3.549533E+00 3.592184E+00 3.620577E+00 + 3.476907E+00 3.556106E+00 3.609183E+00 3.645672E+00 3.669433E+00 + 3.547479E+00 3.616542E+00 3.661527E+00 3.692029E+00 3.711205E+00 + 3.610312E+00 3.668907E+00 3.707504E+00 3.732514E+00 3.746788E+00 + 3.664126E+00 3.714518E+00 3.746696E+00 3.766939E+00 3.777121E+00 + 3.710882E+00 3.752755E+00 3.780030E+00 3.795811E+00 3.802318E+00 + 3.750306E+00 3.785688E+00 3.807918E+00 3.819894E+00 3.822711E+00 + 3.775063E+00 3.806389E+00 3.825475E+00 3.834790E+00 3.835312E+00 + 4.384697E+01 5.538582E+01 6.488935E+01 7.228541E+01 7.766035E+01 + 4.403698E+01 5.553184E+01 6.500540E+01 7.236985E+01 7.771920E+01 + 4.423966E+01 5.568724E+01 6.512315E+01 7.244960E+01 7.777488E+01 + 4.443863E+01 5.585353E+01 6.523110E+01 7.253700E+01 7.783364E+01 + 4.461777E+01 5.602931E+01 6.536186E+01 7.262673E+01 7.789441E+01 + 4.485942E+01 5.619974E+01 6.549244E+01 7.271246E+01 7.795888E+01 + 4.510923E+01 5.636216E+01 6.563076E+01 7.280729E+01 7.801271E+01 + 4.536948E+01 5.658086E+01 6.578052E+01 7.290692E+01 7.808044E+01 + 4.566185E+01 5.679908E+01 6.595115E+01 7.302267E+01 7.815767E+01 + 4.623173E+01 5.729584E+01 6.632865E+01 7.329089E+01 7.833570E+01 + 4.747752E+01 5.834054E+01 6.713983E+01 7.386321E+01 7.873392E+01 + 4.934725E+01 5.985984E+01 6.833542E+01 7.472075E+01 7.930651E+01 + 5.139589E+01 6.147123E+01 6.956437E+01 7.560624E+01 7.987785E+01 + 5.342429E+01 6.307954E+01 7.077669E+01 7.646525E+01 8.042769E+01 + 5.545385E+01 6.465621E+01 7.195149E+01 7.728591E+01 8.093685E+01 + 5.744337E+01 6.621175E+01 7.305049E+01 7.804602E+01 8.139179E+01 + 5.948045E+01 6.773115E+01 7.412361E+01 7.876112E+01 8.180451E+01 + 6.142122E+01 6.921687E+01 7.517264E+01 7.943461E+01 8.218014E+01 + 6.336763E+01 7.068372E+01 7.616242E+01 8.004939E+01 8.249053E+01 + 6.531673E+01 7.203343E+01 7.709248E+01 8.059630E+01 8.272343E+01 + 6.720941E+01 7.335005E+01 7.796949E+01 8.107407E+01 8.289937E+01 + 6.906754E+01 7.458967E+01 7.875291E+01 8.147217E+01 8.299150E+01 + 7.081844E+01 7.575649E+01 7.941448E+01 8.178262E+01 8.298558E+01 + 7.216292E+01 7.662052E+01 7.985174E+01 8.189735E+01 8.284929E+01 + 7.294799E+01 7.696987E+01 7.994072E+01 8.178593E+01 8.259658E+01 + 7.358407E+01 7.717994E+01 7.988291E+01 8.156754E+01 8.228652E+01 + 7.428248E+01 7.749791E+01 7.984402E+01 8.133708E+01 8.195912E+01 + 7.521351E+01 7.794234E+01 7.993112E+01 8.115665E+01 8.161819E+01 + 7.647262E+01 7.862587E+01 8.016489E+01 8.104976E+01 8.128305E+01 + 7.798958E+01 7.946935E+01 8.049929E+01 8.100810E+01 8.095629E+01 + 7.964204E+01 8.047790E+01 8.089087E+01 8.098911E+01 8.061488E+01 + 8.122666E+01 8.151518E+01 8.140414E+01 8.094998E+01 8.014396E+01 + 8.267519E+01 8.240106E+01 8.176104E+01 8.081301E+01 7.956661E+01 + 8.387973E+01 8.301204E+01 8.188441E+01 8.048170E+01 7.886875E+01 + 8.438983E+01 8.298378E+01 8.158344E+01 7.985368E+01 7.791167E+01 + 8.406617E+01 8.239503E+01 8.062460E+01 7.870880E+01 7.657887E+01 + 8.283668E+01 8.106527E+01 7.907038E+01 7.697279E+01 7.472058E+01 + 8.064603E+01 7.886974E+01 7.692387E+01 7.469790E+01 7.234582E+01 + 7.785729E+01 7.589083E+01 7.395637E+01 7.176532E+01 6.936086E+01 + 7.431931E+01 7.227003E+01 7.026343E+01 6.812020E+01 6.582469E+01 + 7.002451E+01 6.807515E+01 6.609019E+01 6.400804E+01 6.185132E+01 + 6.542950E+01 6.355829E+01 6.166693E+01 5.973014E+01 5.767403E+01 + 6.066586E+01 5.888858E+01 5.708487E+01 5.525523E+01 5.338782E+01 + 5.596959E+01 5.419395E+01 5.252156E+01 5.085542E+01 4.917539E+01 + 5.153442E+01 4.979085E+01 4.826596E+01 4.672141E+01 4.518956E+01 + 4.741912E+01 4.567692E+01 4.419187E+01 4.283224E+01 4.146386E+01 + 4.367662E+01 4.189204E+01 4.041704E+01 3.911322E+01 3.790268E+01 + 4.039238E+01 3.859514E+01 3.713690E+01 3.583630E+01 3.468812E+01 + 3.760191E+01 3.579397E+01 3.428382E+01 3.297989E+01 3.182983E+01 + 3.492367E+01 3.322434E+01 3.172913E+01 3.041162E+01 2.924302E+01 + 3.217089E+01 3.064598E+01 2.926192E+01 2.796142E+01 2.682445E+01 + 2.958739E+01 2.818943E+01 2.691964E+01 2.575321E+01 2.468583E+01 + 2.731334E+01 2.606232E+01 2.493125E+01 2.385819E+01 2.286899E+01 + 2.532476E+01 2.419776E+01 2.317169E+01 2.220400E+01 2.128778E+01 + 2.361074E+01 2.257725E+01 2.162604E+01 2.074805E+01 1.991608E+01 + 2.216086E+01 2.119746E+01 2.031579E+01 1.948658E+01 1.869115E+01 + 2.093548E+01 2.003191E+01 1.919739E+01 1.838503E+01 1.759743E+01 + 1.990720E+01 1.905749E+01 1.821735E+01 1.740562E+01 1.662491E+01 + 1.924479E+01 1.842168E+01 1.760313E+01 1.679396E+01 1.602425E+01 + 3.086098E+02 3.152290E+02 3.134761E+02 3.053681E+02 2.928245E+02 + 3.087324E+02 3.152147E+02 3.133536E+02 3.051622E+02 2.926029E+02 + 3.089211E+02 3.151891E+02 3.132276E+02 3.049719E+02 2.923855E+02 + 3.090201E+02 3.151471E+02 3.130433E+02 3.047673E+02 2.921432E+02 + 3.090142E+02 3.150891E+02 3.129007E+02 3.045432E+02 2.918817E+02 + 3.090871E+02 3.150661E+02 3.127046E+02 3.042797E+02 2.915887E+02 + 3.090867E+02 3.150698E+02 3.125139E+02 3.040158E+02 2.912924E+02 + 3.092730E+02 3.149277E+02 3.123350E+02 3.037157E+02 2.909598E+02 + 3.091922E+02 3.147113E+02 3.120219E+02 3.033292E+02 2.905483E+02 + 3.093657E+02 3.145052E+02 3.115602E+02 3.026533E+02 2.897972E+02 + 3.101521E+02 3.142181E+02 3.106744E+02 3.012510E+02 2.880963E+02 + 3.109667E+02 3.138545E+02 3.093354E+02 2.992993E+02 2.856044E+02 + 3.116482E+02 3.132596E+02 3.076359E+02 2.969930E+02 2.828008E+02 + 3.118800E+02 3.123958E+02 3.056298E+02 2.943987E+02 2.797331E+02 + 3.118190E+02 3.108668E+02 3.034004E+02 2.915557E+02 2.764378E+02 + 3.116345E+02 3.092393E+02 3.009551E+02 2.885484E+02 2.729362E+02 + 3.109829E+02 3.072199E+02 2.982393E+02 2.852132E+02 2.691742E+02 + 3.095899E+02 3.049351E+02 2.951640E+02 2.816123E+02 2.650847E+02 + 3.079681E+02 3.022984E+02 2.918376E+02 2.777935E+02 2.608188E+02 + 3.058460E+02 2.991632E+02 2.879666E+02 2.735100E+02 2.562965E+02 + 3.029868E+02 2.955285E+02 2.837097E+02 2.688121E+02 2.514495E+02 + 2.994711E+02 2.912893E+02 2.790320E+02 2.637373E+02 2.463012E+02 + 2.956425E+02 2.867055E+02 2.740357E+02 2.583972E+02 2.410163E+02 + 2.914149E+02 2.821416E+02 2.692130E+02 2.535403E+02 2.364282E+02 + 2.875355E+02 2.783790E+02 2.657893E+02 2.503827E+02 2.335958E+02 + 2.834493E+02 2.750035E+02 2.627925E+02 2.479519E+02 2.316795E+02 + 2.787060E+02 2.709412E+02 2.593563E+02 2.451287E+02 2.295624E+02 + 2.728851E+02 2.657923E+02 2.550828E+02 2.415729E+02 2.267968E+02 + 2.664683E+02 2.595390E+02 2.495283E+02 2.369324E+02 2.229545E+02 + 2.592062E+02 2.524802E+02 2.428201E+02 2.310306E+02 2.179846E+02 + 2.504115E+02 2.440820E+02 2.348667E+02 2.237476E+02 2.117239E+02 + 2.405296E+02 2.342426E+02 2.253688E+02 2.152896E+02 2.043222E+02 + 2.296487E+02 2.231374E+02 2.148993E+02 2.055834E+02 1.955146E+02 + 2.175990E+02 2.107351E+02 2.028408E+02 1.947367E+02 1.856879E+02 + 2.043744E+02 1.975350E+02 1.899598E+02 1.826419E+02 1.747607E+02 + 1.904035E+02 1.839241E+02 1.768693E+02 1.697743E+02 1.626950E+02 + 1.754926E+02 1.699602E+02 1.632212E+02 1.566985E+02 1.502536E+02 + 1.608771E+02 1.555392E+02 1.495824E+02 1.437261E+02 1.379558E+02 + 1.463182E+02 1.415583E+02 1.362587E+02 1.310773E+02 1.259534E+02 + 1.318569E+02 1.276524E+02 1.233685E+02 1.188860E+02 1.144276E+02 + 1.189256E+02 1.145288E+02 1.105530E+02 1.067785E+02 1.031643E+02 + 1.069076E+02 1.028743E+02 9.896337E+01 9.543049E+01 9.228754E+01 + 9.618905E+01 9.240000E+01 8.894205E+01 8.568798E+01 8.271849E+01 + 8.706026E+01 8.338672E+01 8.013758E+01 7.723175E+01 7.452270E+01 + 7.944653E+01 7.597709E+01 7.259928E+01 6.965483E+01 6.697914E+01 + 7.285747E+01 6.955009E+01 6.627970E+01 6.317116E+01 6.049143E+01 + 6.679898E+01 6.385276E+01 6.081867E+01 5.779664E+01 5.499723E+01 + 6.095835E+01 5.865558E+01 5.591852E+01 5.315747E+01 5.047208E+01 + 5.561850E+01 5.389034E+01 5.162184E+01 4.917995E+01 4.670512E+01 + 5.085218E+01 4.942511E+01 4.760617E+01 4.553003E+01 4.336768E+01 + 4.621439E+01 4.489679E+01 4.338099E+01 4.175607E+01 3.993102E+01 + 4.202504E+01 4.091832E+01 3.952289E+01 3.803889E+01 3.648666E+01 + 3.842515E+01 3.738443E+01 3.604088E+01 3.463592E+01 3.319159E+01 + 3.524801E+01 3.423016E+01 3.290980E+01 3.154187E+01 3.015297E+01 + 3.245425E+01 3.132300E+01 3.008096E+01 2.870974E+01 2.735129E+01 + 2.997878E+01 2.878582E+01 2.749080E+01 2.616698E+01 2.487225E+01 + 2.775223E+01 2.655471E+01 2.526474E+01 2.397990E+01 2.275155E+01 + 2.567565E+01 2.454606E+01 2.338411E+01 2.216419E+01 2.098619E+01 + 2.422398E+01 2.317342E+01 2.210496E+01 2.098147E+01 1.984863E+01 + 9.548485E+02 8.555054E+02 7.657342E+02 6.865113E+02 6.164593E+02 + 9.532433E+02 8.540257E+02 7.644525E+02 6.854079E+02 6.154846E+02 + 9.515717E+02 8.524946E+02 7.631299E+02 6.842723E+02 6.144843E+02 + 9.498098E+02 8.508937E+02 7.617521E+02 6.830929E+02 6.134485E+02 + 9.479077E+02 8.491771E+02 7.602797E+02 6.818353E+02 6.123470E+02 + 9.459248E+02 8.476028E+02 7.587661E+02 6.804812E+02 6.111723E+02 + 9.431958E+02 8.460921E+02 7.571560E+02 6.791224E+02 6.099934E+02 + 9.413160E+02 8.439941E+02 7.555271E+02 6.776158E+02 6.086899E+02 + 9.383833E+02 8.414251E+02 7.532717E+02 6.757695E+02 6.070923E+02 + 9.326589E+02 8.364061E+02 7.490533E+02 6.720614E+02 6.038981E+02 + 9.217525E+02 8.261006E+02 7.403130E+02 6.642620E+02 5.970188E+02 + 9.050734E+02 8.111942E+02 7.275482E+02 6.530117E+02 5.870478E+02 + 8.872684E+02 7.953709E+02 7.134112E+02 6.405547E+02 5.763617E+02 + 8.687129E+02 7.787636E+02 6.987589E+02 6.278988E+02 5.654615E+02 + 8.494097E+02 7.617263E+02 6.839222E+02 6.149893E+02 5.543207E+02 + 8.305226E+02 7.448690E+02 6.692161E+02 6.021798E+02 5.432790E+02 + 8.104379E+02 7.275492E+02 6.540396E+02 5.889091E+02 5.320644E+02 + 7.895795E+02 7.096036E+02 6.383493E+02 5.752804E+02 5.204801E+02 + 7.682704E+02 6.913282E+02 6.226106E+02 5.617327E+02 5.088055E+02 + 7.464884E+02 6.723707E+02 6.063122E+02 5.478203E+02 4.968146E+02 + 7.239394E+02 6.527194E+02 5.895262E+02 5.334895E+02 4.844302E+02 + 7.005401E+02 6.327194E+02 5.721550E+02 5.187263E+02 4.716236E+02 + 6.771505E+02 6.125958E+02 5.548303E+02 5.040109E+02 4.587534E+02 + 6.567246E+02 5.952650E+02 5.398616E+02 4.913799E+02 4.478260E+02 + 6.430224E+02 5.838528E+02 5.306241E+02 4.837085E+02 4.414912E+02 + 6.319694E+02 5.751908E+02 5.239528E+02 4.784863E+02 4.374471E+02 + 6.192963E+02 5.654652E+02 5.165967E+02 4.727766E+02 4.330616E+02 + 6.038585E+02 5.531915E+02 5.070658E+02 4.655189E+02 4.273056E+02 + 5.840464E+02 5.370983E+02 4.944510E+02 4.555410E+02 4.192847E+02 + 5.592948E+02 5.169772E+02 4.782451E+02 4.424937E+02 4.086287E+02 + 5.308748E+02 4.934278E+02 4.587659E+02 4.262796E+02 3.953024E+02 + 4.984409E+02 4.662394E+02 4.360235E+02 4.072265E+02 3.790723E+02 + 4.621664E+02 4.356625E+02 4.099618E+02 3.846578E+02 3.597701E+02 + 4.251167E+02 4.024719E+02 3.810359E+02 3.595017E+02 3.378437E+02 + 3.866740E+02 3.683624E+02 3.503366E+02 3.322930E+02 3.137906E+02 + 3.484387E+02 3.336844E+02 3.190421E+02 3.041314E+02 2.887611E+02 + 3.118041E+02 2.996583E+02 2.880840E+02 2.760033E+02 2.635249E+02 + 2.788093E+02 2.684125E+02 2.583130E+02 2.482706E+02 2.380146E+02 + 2.482907E+02 2.393953E+02 2.308666E+02 2.223566E+02 2.137694E+02 + 2.209772E+02 2.133604E+02 2.058714E+02 1.986502E+02 1.911055E+02 + 1.965700E+02 1.901240E+02 1.836728E+02 1.771955E+02 1.704758E+02 + 1.743246E+02 1.689432E+02 1.633538E+02 1.576599E+02 1.518290E+02 + 1.542094E+02 1.499746E+02 1.451417E+02 1.400846E+02 1.349358E+02 + 1.365507E+02 1.330825E+02 1.290247E+02 1.245288E+02 1.198430E+02 + 1.206835E+02 1.176608E+02 1.144281E+02 1.108312E+02 1.068847E+02 + 1.063847E+02 1.040711E+02 1.015389E+02 9.857799E+01 9.521176E+01 + 9.402545E+01 9.202905E+01 9.002013E+01 8.762256E+01 8.486217E+01 + 8.377670E+01 8.173351E+01 7.992853E+01 7.791554E+01 7.553416E+01 + 7.541114E+01 7.314196E+01 7.129896E+01 6.939026E+01 6.733253E+01 + 6.833223E+01 6.602871E+01 6.395704E+01 6.204197E+01 6.005279E+01 + 6.222567E+01 5.993899E+01 5.773047E+01 5.561284E+01 5.359171E+01 + 5.690327E+01 5.449299E+01 5.231759E+01 5.012419E+01 4.806189E+01 + 5.205230E+01 4.966768E+01 4.758357E+01 4.553414E+01 4.348820E+01 + 4.776578E+01 4.541049E+01 4.345989E+01 4.156069E+01 3.963849E+01 + 4.373630E+01 4.158117E+01 3.972367E+01 3.798659E+01 3.625024E+01 + 3.997791E+01 3.802152E+01 3.632732E+01 3.473158E+01 3.316648E+01 + 3.642067E+01 3.465795E+01 3.311635E+01 3.169971E+01 3.031106E+01 + 3.308862E+01 3.152948E+01 3.013788E+01 2.888111E+01 2.766357E+01 + 3.080148E+01 2.938306E+01 2.812142E+01 2.695977E+01 2.586204E+01 + +Band: 4, gas: 6, k-terms: 1 + 9.455832E-02 1.515629E-01 2.195064E-01 2.953081E-01 3.754048E-01 + 9.524539E-02 1.524238E-01 2.205038E-01 2.963946E-01 3.765306E-01 + 9.594350E-02 1.532994E-01 2.215187E-01 2.975004E-01 3.776769E-01 + 9.665364E-02 1.541912E-01 2.225528E-01 2.986276E-01 3.788459E-01 + 9.739965E-02 1.551291E-01 2.236412E-01 2.998144E-01 3.800772E-01 + 9.814327E-02 1.560667E-01 2.247308E-01 3.010037E-01 3.813124E-01 + 9.890778E-02 1.570330E-01 2.258554E-01 3.022324E-01 3.825900E-01 + 9.973978E-02 1.580864E-01 2.270823E-01 3.035736E-01 3.839856E-01 + 1.007711E-01 1.593893E-01 2.285978E-01 3.052285E-01 3.857061E-01 + 1.031118E-01 1.622997E-01 2.319480E-01 3.088590E-01 3.894540E-01 + 1.085071E-01 1.689199E-01 2.394978E-01 3.169813E-01 3.977851E-01 + 1.168756E-01 1.790664E-01 2.509644E-01 3.292272E-01 4.102690E-01 + 1.264545E-01 1.905415E-01 2.638097E-01 3.428400E-01 4.240582E-01 + 1.367936E-01 2.027801E-01 2.773790E-01 3.571093E-01 4.384220E-01 + 1.478977E-01 2.157690E-01 2.916446E-01 3.719981E-01 4.533160E-01 + 1.594830E-01 2.291690E-01 3.062301E-01 3.871122E-01 4.683484E-01 + 1.719769E-01 2.434589E-01 3.216468E-01 4.029753E-01 4.840365E-01 + 1.853914E-01 2.586343E-01 3.378778E-01 4.195625E-01 5.003511E-01 + 1.995419E-01 2.744774E-01 3.546867E-01 4.366319E-01 5.170576E-01 + 2.146243E-01 2.911958E-01 3.722873E-01 4.543983E-01 5.343663E-01 + 2.308898E-01 3.090502E-01 3.909448E-01 4.731226E-01 5.525296E-01 + 2.480833E-01 3.277560E-01 4.103622E-01 4.925118E-01 5.712698E-01 + 2.656305E-01 3.467100E-01 4.299368E-01 5.119903E-01 5.900570E-01 + 2.795551E-01 3.618006E-01 4.455927E-01 5.276654E-01 6.052953E-01 + 2.835219E-01 3.665820E-01 4.510266E-01 5.335891E-01 6.115520E-01 + 2.806120E-01 3.643538E-01 4.496161E-01 5.330849E-01 6.119877E-01 + 2.750371E-01 3.594954E-01 4.457358E-01 5.303689E-01 6.105373E-01 + 2.680453E-01 3.532901E-01 4.406630E-01 5.266741E-01 6.083577E-01 + 2.606881E-01 3.468146E-01 4.354682E-01 5.230322E-01 6.064157E-01 + 2.529646E-01 3.400274E-01 4.300891E-01 5.193727E-01 6.046419E-01 + 2.446953E-01 3.326774E-01 4.242255E-01 5.153708E-01 6.027090E-01 + 2.361178E-01 3.249409E-01 4.179886E-01 5.110781E-01 6.006144E-01 + 2.274792E-01 3.170061E-01 4.114929E-01 5.065336E-01 5.983275E-01 + 2.187970E-01 3.088249E-01 4.046096E-01 5.015284E-01 5.955681E-01 + 2.098889E-01 3.001429E-01 3.970042E-01 4.956500E-01 5.918568E-01 + 2.008672E-01 2.910482E-01 3.887127E-01 4.888655E-01 5.870839E-01 + 1.915577E-01 2.813406E-01 3.794940E-01 4.808866E-01 5.809144E-01 + 1.821203E-01 2.712032E-01 3.695438E-01 4.718931E-01 5.734886E-01 + 1.732039E-01 2.614084E-01 3.596942E-01 4.627482E-01 5.656532E-01 + 1.653144E-01 2.525990E-01 3.506925E-01 4.542317E-01 5.581986E-01 + 1.592124E-01 2.457267E-01 3.436319E-01 4.475346E-01 5.523307E-01 + 1.543281E-01 2.401798E-01 3.378998E-01 4.420744E-01 5.475337E-01 + 1.497454E-01 2.349044E-01 3.323672E-01 4.367118E-01 5.427106E-01 + 1.451642E-01 2.295576E-01 3.266701E-01 4.310801E-01 5.375141E-01 + 1.407462E-01 2.243420E-01 3.210455E-01 4.254402E-01 5.322145E-01 + 1.372091E-01 2.201396E-01 3.164915E-01 4.208569E-01 5.278935E-01 + 1.358021E-01 2.184940E-01 3.147594E-01 4.191953E-01 5.264376E-01 + 1.358135E-01 2.185603E-01 3.149230E-01 4.194970E-01 5.269151E-01 + 1.361405E-01 2.190006E-01 3.154890E-01 4.201987E-01 5.277647E-01 + 1.402005E-01 2.239653E-01 3.211033E-01 4.261961E-01 5.338952E-01 + 1.593259E-01 2.469002E-01 3.465634E-01 4.528625E-01 5.605449E-01 + 1.881254E-01 2.805440E-01 3.831880E-01 4.906120E-01 5.977429E-01 + 2.201438E-01 3.169255E-01 4.219672E-01 5.299035E-01 6.358852E-01 + 2.551750E-01 3.557184E-01 4.624915E-01 5.702809E-01 6.745043E-01 + 2.923986E-01 3.959676E-01 5.037415E-01 6.107177E-01 7.126220E-01 + 3.307194E-01 4.365051E-01 5.445522E-01 6.501017E-01 7.492318E-01 + 3.710311E-01 4.782916E-01 5.859097E-01 6.894151E-01 7.852663E-01 + 4.114142E-01 5.193681E-01 6.259069E-01 7.268858E-01 8.191345E-01 + 4.361189E-01 5.441371E-01 6.497214E-01 7.489443E-01 8.388510E-01 + +Band: 5, gas: 1, k-terms: 6 + 7.488588E-09 7.629622E-09 8.247125E-09 9.306290E-09 1.099290E-08 + 9.140779E-09 9.319665E-09 1.007680E-08 1.137871E-08 1.345352E-08 + 1.116192E-08 1.138483E-08 1.231353E-08 1.391400E-08 1.646574E-08 + 1.362834E-08 1.390517E-08 1.504549E-08 1.701372E-08 2.015185E-08 + 1.663684E-08 1.698331E-08 1.838608E-08 2.080313E-08 2.466446E-08 + 2.031142E-08 2.074357E-08 2.246807E-08 2.543408E-08 3.018630E-08 + 2.479651E-08 2.533822E-08 2.745658E-08 3.109860E-08 3.694446E-08 + 3.027349E-08 3.094896E-08 3.355675E-08 3.802994E-08 4.522062E-08 + 3.696331E-08 3.780851E-08 4.102008E-08 4.652713E-08 5.539200E-08 + 4.514488E-08 4.623604E-08 5.025707E-08 5.710881E-08 6.820603E-08 + 5.516667E-08 5.670425E-08 6.209120E-08 7.069784E-08 8.502523E-08 + 6.753595E-08 7.018632E-08 7.742179E-08 8.823240E-08 1.072641E-07 + 8.255330E-08 8.688860E-08 9.647742E-08 1.104894E-07 1.360265E-07 + 1.005771E-07 1.074900E-07 1.198245E-07 1.387595E-07 1.729087E-07 + 1.234900E-07 1.331134E-07 1.490042E-07 1.747799E-07 2.204694E-07 + 1.522966E-07 1.648924E-07 1.862488E-07 2.207941E-07 2.815428E-07 + 1.875006E-07 2.047139E-07 2.329978E-07 2.797388E-07 3.607171E-07 + 2.323870E-07 2.566791E-07 2.923475E-07 3.556561E-07 4.634906E-07 + 2.880840E-07 3.202593E-07 3.673176E-07 4.531681E-07 5.965766E-07 + 3.570413E-07 3.985620E-07 4.628024E-07 5.788462E-07 7.695763E-07 + 4.430319E-07 4.971009E-07 5.851721E-07 7.416849E-07 9.951482E-07 + 5.497600E-07 6.238797E-07 7.428701E-07 9.529031E-07 1.288222E-06 + 6.859805E-07 7.819478E-07 9.434815E-07 1.223991E-06 1.665287E-06 + 8.534521E-07 9.730033E-07 1.185260E-06 1.548536E-06 2.115987E-06 + 1.040680E-06 1.186018E-06 1.443516E-06 1.884811E-06 2.574849E-06 + 1.250641E-06 1.425920E-06 1.721585E-06 2.234700E-06 3.042507E-06 + 1.498963E-06 1.706319E-06 2.039542E-06 2.624361E-06 3.558132E-06 + 1.805989E-06 2.036384E-06 2.409540E-06 3.070436E-06 4.138266E-06 + 2.174375E-06 2.435859E-06 2.853085E-06 3.596250E-06 4.811337E-06 + 2.618651E-06 2.922393E-06 3.384499E-06 4.217032E-06 5.596305E-06 + 3.156477E-06 3.507186E-06 4.024501E-06 4.951093E-06 6.514132E-06 + 3.803497E-06 4.206399E-06 4.796146E-06 5.828793E-06 7.600750E-06 + 4.583325E-06 5.025704E-06 5.725940E-06 6.887231E-06 8.902535E-06 + 5.565122E-06 6.040006E-06 6.854750E-06 8.160895E-06 1.046070E-05 + 6.738314E-06 7.290484E-06 8.199483E-06 9.697104E-06 1.232255E-05 + 8.160730E-06 8.800926E-06 9.856727E-06 1.155086E-05 1.454953E-05 + 9.918936E-06 1.062659E-05 1.186479E-05 1.377572E-05 1.718082E-05 + 1.213069E-05 1.282961E-05 1.428280E-05 1.645372E-05 2.031409E-05 + 1.482168E-05 1.549723E-05 1.719936E-05 1.969607E-05 2.408767E-05 + 1.807835E-05 1.874754E-05 2.072890E-05 2.363529E-05 2.867142E-05 + 2.204518E-05 2.269629E-05 2.500009E-05 2.845180E-05 3.431766E-05 + 2.686831E-05 2.757064E-05 3.017567E-05 3.436066E-05 4.122326E-05 + 3.274643E-05 3.354762E-05 3.651930E-05 4.151976E-05 4.955478E-05 + 3.991702E-05 4.080382E-05 4.428806E-05 5.013198E-05 5.959856E-05 + 4.864436E-05 4.960048E-05 5.372484E-05 6.048768E-05 7.171133E-05 + 5.931416E-05 6.024829E-05 6.518479E-05 7.321790E-05 8.645548E-05 + 7.229625E-05 7.324331E-05 7.926759E-05 8.896760E-05 1.047923E-04 + 8.809918E-05 8.921314E-05 9.652774E-05 1.083068E-04 1.274120E-04 + 1.072720E-04 1.086416E-04 1.175443E-04 1.318256E-04 1.548737E-04 + 1.306050E-04 1.327054E-04 1.438360E-04 1.613834E-04 1.899809E-04 + 1.597116E-04 1.638730E-04 1.788699E-04 2.032153E-04 2.422052E-04 + 1.947466E-04 2.042328E-04 2.268648E-04 2.604309E-04 3.168371E-04 + 2.372474E-04 2.574173E-04 2.878033E-04 3.360977E-04 4.183384E-04 + 2.953596E-04 3.232590E-04 3.671519E-04 4.377389E-04 5.569309E-04 + 3.692202E-04 4.108787E-04 4.717517E-04 5.747354E-04 7.444526E-04 + 4.650976E-04 5.211732E-04 6.090949E-04 7.583551E-04 9.960048E-04 + 5.825511E-04 6.633473E-04 7.925565E-04 1.005660E-03 1.334424E-03 + 7.400880E-04 8.501468E-04 1.034638E-03 1.332876E-03 1.779371E-03 + 8.792895E-04 1.018281E-03 1.252692E-03 1.624810E-03 2.172588E-03 + 2.187072E-08 2.558702E-08 4.024871E-08 7.657606E-08 1.448890E-07 + 2.670188E-08 3.128118E-08 4.916762E-08 9.327362E-08 1.758581E-07 + 3.260870E-08 3.823422E-08 6.001960E-08 1.136837E-07 2.134315E-07 + 3.982004E-08 4.674292E-08 7.333838E-08 1.384583E-07 2.590880E-07 + 4.862530E-08 5.717000E-08 8.964045E-08 1.687267E-07 3.144219E-07 + 5.937195E-08 6.990618E-08 1.095630E-07 2.054003E-07 3.816260E-07 + 7.249173E-08 8.545355E-08 1.337691E-07 2.500715E-07 4.631358E-07 + 8.851029E-08 1.045095E-07 1.635325E-07 3.050631E-07 5.623202E-07 + 1.081000E-07 1.279203E-07 2.002148E-07 3.726101E-07 6.843413E-07 + 1.322487E-07 1.577355E-07 2.483587E-07 4.617126E-07 8.440414E-07 + 1.625169E-07 1.979423E-07 3.185149E-07 5.925698E-07 1.075256E-06 + 2.013435E-07 2.543752E-07 4.235222E-07 7.832602E-07 1.408359E-06 + 2.507405E-07 3.306385E-07 5.683610E-07 1.041333E-06 1.854754E-06 + 3.129623E-07 4.329722E-07 7.601704E-07 1.386242E-06 2.445676E-06 + 3.945332E-07 5.713119E-07 1.017103E-06 1.848130E-06 3.225580E-06 + 5.020725E-07 7.561340E-07 1.365912E-06 2.459459E-06 4.245913E-06 + 6.427886E-07 1.006777E-06 1.835329E-06 3.274132E-06 5.589854E-06 + 8.327527E-07 1.362704E-06 2.471100E-06 4.359171E-06 7.359215E-06 + 1.087899E-06 1.841819E-06 3.314313E-06 5.796042E-06 9.669442E-06 + 1.434477E-06 2.482595E-06 4.447300E-06 7.695855E-06 1.270644E-05 + 1.907898E-06 3.352347E-06 5.971227E-06 1.022219E-05 1.670680E-05 + 2.545509E-06 4.550885E-06 8.015291E-06 1.356471E-05 2.193813E-05 + 3.413744E-06 6.124889E-06 1.068696E-05 1.789296E-05 2.864792E-05 + 4.470512E-06 7.970749E-06 1.380573E-05 2.291240E-05 3.645791E-05 + 5.404602E-06 9.615426E-06 1.661222E-05 2.753034E-05 4.370573E-05 + 6.188274E-06 1.102461E-05 1.907535E-05 3.166785E-05 5.037725E-05 + 6.993858E-06 1.238538E-05 2.151627E-05 3.582530E-05 5.722523E-05 + 7.910671E-06 1.376151E-05 2.404317E-05 4.021463E-05 6.452787E-05 + 8.949601E-06 1.531793E-05 2.681730E-05 4.511457E-05 7.262630E-05 + 1.017861E-05 1.709826E-05 2.993281E-05 5.055777E-05 8.170479E-05 + 1.164908E-05 1.907622E-05 3.340851E-05 5.665931E-05 9.197456E-05 + 1.343585E-05 2.135514E-05 3.736987E-05 6.363407E-05 1.037277E-04 + 1.562124E-05 2.394168E-05 4.194755E-05 7.172427E-05 1.174684E-04 + 1.837755E-05 2.720788E-05 4.726493E-05 8.112373E-05 1.335489E-04 + 2.168302E-05 3.118394E-05 5.327988E-05 9.200852E-05 1.519765E-04 + 2.572741E-05 3.586108E-05 6.055170E-05 1.045796E-04 1.732595E-04 + 3.069959E-05 4.135852E-05 6.881134E-05 1.187888E-04 1.973357E-04 + 3.686763E-05 4.787385E-05 7.815724E-05 1.349233E-04 2.247330E-04 + 4.437132E-05 5.576111E-05 8.904243E-05 1.536148E-04 2.565034E-04 + 5.350917E-05 6.543928E-05 1.021505E-04 1.757997E-04 2.940202E-04 + 6.476404E-05 7.748519E-05 1.183628E-04 2.030587E-04 3.403476E-04 + 7.853743E-05 9.247653E-05 1.381666E-04 2.365377E-04 3.962220E-04 + 9.532262E-05 1.106285E-04 1.621817E-04 2.755668E-04 4.616417E-04 + 1.157661E-04 1.323543E-04 1.907418E-04 3.203735E-04 5.374748E-04 + 1.405370E-04 1.584632E-04 2.240818E-04 3.720406E-04 6.250386E-04 + 1.707245E-04 1.901744E-04 2.646078E-04 4.353358E-04 7.298080E-04 + 2.076058E-04 2.296278E-04 3.163437E-04 5.171476E-04 8.629085E-04 + 2.525461E-04 2.784334E-04 3.808724E-04 6.182813E-04 1.027083E-03 + 3.070979E-04 3.375639E-04 4.583685E-04 7.393774E-04 1.221477E-03 + 3.740987E-04 4.131870E-04 5.629591E-04 9.047750E-04 1.486680E-03 + 4.614456E-04 5.266584E-04 7.464613E-04 1.216927E-03 1.971434E-03 + 5.745427E-04 6.963586E-04 1.047474E-03 1.709314E-03 2.711050E-03 + 7.235451E-04 9.493421E-04 1.479004E-03 2.385555E-03 3.710955E-03 + 9.383162E-04 1.306489E-03 2.082832E-03 3.303304E-03 5.045258E-03 + 1.241301E-03 1.830866E-03 2.915851E-03 4.531949E-03 6.783099E-03 + 1.683203E-03 2.562534E-03 4.026628E-03 6.127639E-03 8.995098E-03 + 2.293188E-03 3.550027E-03 5.503565E-03 8.201537E-03 1.182928E-02 + 3.156148E-03 4.875824E-03 7.403365E-03 1.082772E-02 1.535541E-02 + 3.918948E-03 6.001620E-03 8.990544E-03 1.299191E-02 1.826892E-02 + 1.673096E-06 8.584958E-06 3.161811E-05 9.495849E-05 2.414828E-04 + 1.865354E-06 9.247074E-06 3.332327E-05 9.814177E-05 2.476195E-04 + 2.102987E-06 1.001065E-05 3.513087E-05 1.017330E-04 2.543926E-04 + 2.381630E-06 1.090227E-05 3.740555E-05 1.059004E-04 2.621511E-04 + 2.702551E-06 1.189404E-05 3.982934E-05 1.112872E-04 2.712654E-04 + 3.072178E-06 1.311823E-05 4.273534E-05 1.166455E-04 2.814682E-04 + 3.488926E-06 1.448521E-05 4.610173E-05 1.231774E-04 2.926005E-04 + 4.045895E-06 1.610776E-05 4.976711E-05 1.306241E-04 3.059834E-04 + 4.740801E-06 1.802173E-05 5.474999E-05 1.393838E-04 3.216167E-04 + 5.593086E-06 2.097491E-05 6.125027E-05 1.532715E-04 3.476248E-04 + 7.207624E-06 2.584010E-05 7.208932E-05 1.774041E-04 3.894691E-04 + 1.013254E-05 3.344060E-05 8.992825E-05 2.141819E-04 4.560508E-04 + 1.416940E-05 4.405231E-05 1.134523E-04 2.602411E-04 5.373755E-04 + 1.978248E-05 5.776496E-05 1.419822E-04 3.164148E-04 6.342923E-04 + 2.747320E-05 7.522276E-05 1.790911E-04 3.843984E-04 7.493061E-04 + 3.738502E-05 9.808507E-05 2.252443E-04 4.679395E-04 8.836163E-04 + 5.048089E-05 1.279316E-04 2.813552E-04 5.684927E-04 1.045020E-03 + 6.807370E-05 1.661766E-04 3.537198E-04 6.940934E-04 1.239251E-03 + 9.196359E-05 2.144892E-04 4.418994E-04 8.418736E-04 1.458391E-03 + 1.231734E-04 2.770530E-04 5.514881E-04 1.021375E-03 1.719853E-03 + 1.641273E-04 3.547319E-04 6.903731E-04 1.235035E-03 2.028246E-03 + 2.171246E-04 4.548402E-04 8.578041E-04 1.491269E-03 2.386700E-03 + 2.855622E-04 5.778535E-04 1.052446E-03 1.788335E-03 2.793402E-03 + 3.588108E-04 7.028231E-04 1.255388E-03 2.079655E-03 3.189869E-03 + 4.086442E-04 7.913014E-04 1.396030E-03 2.285516E-03 3.466433E-03 + 4.380868E-04 8.483270E-04 1.486957E-03 2.415902E-03 3.651830E-03 + 4.574261E-04 8.963438E-04 1.566833E-03 2.526972E-03 3.814977E-03 + 4.732539E-04 9.339349E-04 1.636774E-03 2.638516E-03 3.976720E-03 + 4.914704E-04 9.760171E-04 1.715448E-03 2.764680E-03 4.161209E-03 + 5.119983E-04 1.020312E-03 1.800292E-03 2.905169E-03 4.371902E-03 + 5.307150E-04 1.069095E-03 1.900962E-03 3.058047E-03 4.598775E-03 + 5.578274E-04 1.128776E-03 2.005825E-03 3.245473E-03 4.866087E-03 + 5.820013E-04 1.195314E-03 2.136000E-03 3.451301E-03 5.178982E-03 + 6.146002E-04 1.270240E-03 2.286585E-03 3.696756E-03 5.538241E-03 + 6.509932E-04 1.355494E-03 2.458519E-03 3.977000E-03 5.949766E-03 + 6.903553E-04 1.457654E-03 2.656699E-03 4.288127E-03 6.406031E-03 + 7.252645E-04 1.558882E-03 2.862374E-03 4.628410E-03 6.911357E-03 + 7.606179E-04 1.671651E-03 3.071630E-03 4.992727E-03 7.451568E-03 + 8.031760E-04 1.789805E-03 3.314109E-03 5.396826E-03 8.058991E-03 + 8.479782E-04 1.930941E-03 3.592210E-03 5.849586E-03 8.750108E-03 + 9.146558E-04 2.094901E-03 3.926772E-03 6.402685E-03 9.585912E-03 + 9.941030E-04 2.317983E-03 4.316295E-03 7.047001E-03 1.054671E-02 + 1.082689E-03 2.545254E-03 4.744307E-03 7.737916E-03 1.160163E-02 + 1.167257E-03 2.785063E-03 5.207909E-03 8.498899E-03 1.278694E-02 + 1.247131E-03 3.052269E-03 5.684522E-03 9.312346E-03 1.408159E-02 + 1.328686E-03 3.349524E-03 6.259817E-03 1.023782E-02 1.553467E-02 + 1.464087E-03 3.748336E-03 6.969479E-03 1.139456E-02 1.732759E-02 + 1.642225E-03 4.235131E-03 7.830509E-03 1.274034E-02 1.940628E-02 + 1.869094E-03 4.754519E-03 8.776863E-03 1.421953E-02 2.174329E-02 + 2.224472E-03 5.506979E-03 1.002859E-02 1.618957E-02 2.489997E-02 + 3.283512E-03 7.159193E-03 1.255875E-02 2.007358E-02 3.089575E-02 + 4.935630E-03 9.736062E-03 1.648361E-02 2.596973E-02 4.008314E-02 + 7.045883E-03 1.304531E-02 2.150178E-02 3.378668E-02 5.260920E-02 + 9.860162E-03 1.729788E-02 2.812743E-02 4.442755E-02 6.940905E-02 + 1.337114E-02 2.283827E-02 3.686091E-02 5.851980E-02 9.060655E-02 + 1.782193E-02 2.984511E-02 4.805846E-02 7.621270E-02 1.161883E-01 + 2.347472E-02 3.873056E-02 6.258429E-02 9.822942E-02 1.475134E-01 + 3.030095E-02 5.013964E-02 8.047997E-02 1.244254E-01 1.836655E-01 + 3.572646E-02 5.920390E-02 9.419147E-02 1.435350E-01 2.099122E-01 + 4.174134E-03 9.223152E-03 1.741301E-02 3.269377E-02 6.688434E-02 + 4.224823E-03 9.325351E-03 1.762000E-02 3.298683E-02 6.764214E-02 + 4.294963E-03 9.436888E-03 1.780017E-02 3.328662E-02 6.841636E-02 + 4.367854E-03 9.480768E-03 1.804973E-02 3.363291E-02 6.923071E-02 + 4.434331E-03 9.587429E-03 1.825927E-02 3.418198E-02 7.024912E-02 + 4.502242E-03 9.738212E-03 1.850691E-02 3.458136E-02 7.128268E-02 + 4.557121E-03 9.872428E-03 1.869909E-02 3.510858E-02 7.222328E-02 + 4.670315E-03 1.002294E-02 1.890791E-02 3.561148E-02 7.345334E-02 + 4.810720E-03 1.020329E-02 1.935891E-02 3.613495E-02 7.470270E-02 + 4.957382E-03 1.061487E-02 1.994276E-02 3.753247E-02 7.806888E-02 + 5.391391E-03 1.135968E-02 2.116759E-02 4.054050E-02 8.409147E-02 + 6.198547E-03 1.267135E-02 2.342207E-02 4.555514E-02 9.448404E-02 + 7.208237E-03 1.425133E-02 2.621960E-02 5.165543E-02 1.068541E-01 + 8.294577E-03 1.602238E-02 2.931864E-02 5.896267E-02 1.212864E-01 + 9.537201E-03 1.800356E-02 3.336087E-02 6.766411E-02 1.378594E-01 + 1.086177E-02 2.037321E-02 3.815435E-02 7.857641E-02 1.564452E-01 + 1.235401E-02 2.308693E-02 4.375448E-02 9.106769E-02 1.781611E-01 + 1.415364E-02 2.641241E-02 5.126237E-02 1.061063E-01 2.043254E-01 + 1.639396E-02 3.036229E-02 6.029041E-02 1.225101E-01 2.317005E-01 + 1.893282E-02 3.545696E-02 7.115310E-02 1.429647E-01 2.646983E-01 + 2.198010E-02 4.157883E-02 8.506709E-02 1.661460E-01 3.031562E-01 + 2.560452E-02 4.959401E-02 1.007629E-01 1.931447E-01 3.473473E-01 + 3.010581E-02 5.958642E-02 1.178783E-01 2.230973E-01 3.960023E-01 + 3.470335E-02 6.860209E-02 1.343861E-01 2.493779E-01 4.370476E-01 + 3.682043E-02 7.268854E-02 1.416890E-01 2.605701E-01 4.517503E-01 + 3.728912E-02 7.335222E-02 1.422638E-01 2.582064E-01 4.465146E-01 + 3.674434E-02 7.332380E-02 1.408993E-01 2.533039E-01 4.363733E-01 + 3.605697E-02 7.206769E-02 1.378344E-01 2.484953E-01 4.253317E-01 + 3.544720E-02 7.137412E-02 1.366269E-01 2.461279E-01 4.186186E-01 + 3.502672E-02 7.052357E-02 1.346966E-01 2.451484E-01 4.160350E-01 + 3.459044E-02 7.025688E-02 1.349617E-01 2.435878E-01 4.131651E-01 + 3.473136E-02 7.093975E-02 1.357491E-01 2.467175E-01 4.168713E-01 + 3.453356E-02 7.180663E-02 1.381014E-01 2.481738E-01 4.243827E-01 + 3.487796E-02 7.378897E-02 1.420237E-01 2.546656E-01 4.326854E-01 + 3.558726E-02 7.523007E-02 1.479148E-01 2.653765E-01 4.484889E-01 + 3.673532E-02 7.831986E-02 1.548498E-01 2.754787E-01 4.674149E-01 + 3.752757E-02 8.047925E-02 1.610931E-01 2.882868E-01 4.900387E-01 + 3.811329E-02 8.286035E-02 1.651010E-01 3.012889E-01 5.090885E-01 + 3.892005E-02 8.641788E-02 1.713697E-01 3.145803E-01 5.320132E-01 + 3.904582E-02 8.929731E-02 1.801372E-01 3.272978E-01 5.560616E-01 + 4.008253E-02 9.183246E-02 1.892634E-01 3.450578E-01 5.880712E-01 + 4.079319E-02 9.741615E-02 1.997911E-01 3.641679E-01 6.215086E-01 + 4.199543E-02 1.001212E-01 2.082515E-01 3.807667E-01 6.477963E-01 + 4.248413E-02 1.013791E-01 2.133810E-01 3.969855E-01 6.763659E-01 + 4.258913E-02 1.020335E-01 2.153168E-01 4.076430E-01 7.005236E-01 + 4.221734E-02 1.019385E-01 2.184492E-01 4.162171E-01 7.225816E-01 + 4.261592E-02 1.039506E-01 2.219084E-01 4.272259E-01 7.483282E-01 + 4.318354E-02 1.072617E-01 2.281539E-01 4.390932E-01 7.665196E-01 + 4.485016E-02 1.099824E-01 2.344039E-01 4.454742E-01 7.787692E-01 + 4.740217E-02 1.163103E-01 2.448614E-01 4.599613E-01 8.045313E-01 + 6.004339E-02 1.410938E-01 2.870783E-01 5.304205E-01 9.150507E-01 + 8.280388E-02 1.829873E-01 3.610720E-01 6.433024E-01 1.080509E+00 + 1.117968E-01 2.358139E-01 4.491675E-01 7.681474E-01 1.262536E+00 + 1.544736E-01 3.064495E-01 5.545658E-01 9.260767E-01 1.478763E+00 + 2.090598E-01 3.956819E-01 6.874829E-01 1.103100E+00 1.708600E+00 + 2.832410E-01 5.093593E-01 8.262616E-01 1.291711E+00 1.939110E+00 + 3.796685E-01 6.258469E-01 9.836088E-01 1.490835E+00 2.179294E+00 + 4.814927E-01 7.618794E-01 1.142695E+00 1.687232E+00 2.402459E+00 + 5.508309E-01 8.463616E-01 1.242878E+00 1.798356E+00 2.509003E+00 + 5.863830E-01 1.722898E+00 3.668348E+00 6.934067E+00 1.210547E+01 + 5.951450E-01 1.741218E+00 3.700711E+00 6.988167E+00 1.219027E+01 + 6.040027E-01 1.759646E+00 3.728695E+00 7.042445E+00 1.227528E+01 + 6.129516E-01 1.725209E+00 3.761613E+00 7.096853E+00 1.236043E+01 + 6.222805E-01 1.744562E+00 3.795700E+00 7.153121E+00 1.244842E+01 + 6.314252E-01 1.763416E+00 3.828855E+00 7.207768E+00 1.253379E+01 + 6.394433E-01 1.782342E+00 3.775947E+00 7.262452E+00 1.261915E+01 + 6.494014E-01 1.802546E+00 3.811800E+00 7.320654E+00 1.270990E+01 + 6.618530E-01 1.827718E+00 3.856397E+00 7.342890E+00 1.282258E+01 + 6.927794E-01 1.890363E+00 3.967128E+00 7.525696E+00 1.307991E+01 + 7.828506E-01 2.016486E+00 4.237411E+00 7.968661E+00 1.381579E+01 + 9.101792E-01 2.324880E+00 4.702718E+00 8.670101E+00 1.478925E+01 + 1.114402E+00 2.635989E+00 5.254446E+00 9.461835E+00 1.594462E+01 + 1.302162E+00 2.983449E+00 5.855309E+00 1.030154E+01 1.736086E+01 + 1.556512E+00 3.370803E+00 6.513057E+00 1.130576E+01 1.888347E+01 + 1.791936E+00 3.785330E+00 7.130798E+00 1.240869E+01 2.050950E+01 + 2.045842E+00 4.171358E+00 7.857914E+00 1.363634E+01 2.207373E+01 + 2.342996E+00 4.740260E+00 8.659164E+00 1.484889E+01 2.386099E+01 + 2.690972E+00 5.348028E+00 9.599057E+00 1.615605E+01 2.555750E+01 + 3.074720E+00 6.009676E+00 1.052795E+01 1.770791E+01 2.773321E+01 + 3.502595E+00 6.736086E+00 1.162494E+01 1.940681E+01 3.015509E+01 + 3.970077E+00 7.389803E+00 1.286930E+01 2.124403E+01 3.289897E+01 + 4.416112E+00 8.197524E+00 1.418917E+01 2.290662E+01 3.549282E+01 + 4.795275E+00 8.857104E+00 1.497295E+01 2.424922E+01 3.761305E+01 + 4.746003E+00 8.778697E+00 1.485575E+01 2.428802E+01 3.741369E+01 + 4.501291E+00 8.350259E+00 1.416725E+01 2.310411E+01 3.581252E+01 + 4.085105E+00 7.716766E+00 1.311801E+01 2.160727E+01 3.413211E+01 + 3.699802E+00 7.028754E+00 1.207943E+01 1.996528E+01 3.178325E+01 + 3.272651E+00 6.409837E+00 1.121401E+01 1.855166E+01 2.943846E+01 + 2.897641E+00 5.749807E+00 1.019863E+01 1.717709E+01 2.731871E+01 + 2.687547E+00 5.165521E+00 9.117191E+00 1.568470E+01 2.520666E+01 + 2.415861E+00 4.703427E+00 8.438673E+00 1.445347E+01 2.337235E+01 + 2.131197E+00 4.192763E+00 7.747080E+00 1.300505E+01 2.177248E+01 + 1.856693E+00 3.953643E+00 7.103470E+00 1.198468E+01 2.008948E+01 + 1.650442E+00 3.542874E+00 6.659293E+00 1.127275E+01 1.858565E+01 + 1.514991E+00 3.260884E+00 6.130637E+00 1.041176E+01 1.761842E+01 + 1.369107E+00 2.961709E+00 5.604526E+00 9.650987E+00 1.656697E+01 + 1.220534E+00 2.619437E+00 5.059671E+00 9.047173E+00 1.529319E+01 + 1.114492E+00 2.522453E+00 4.603807E+00 8.471618E+00 1.433614E+01 + 9.724589E-01 2.263572E+00 4.499358E+00 8.078569E+00 1.343497E+01 + 9.080529E-01 2.157364E+00 4.357156E+00 7.862264E+00 1.286848E+01 + 8.302248E-01 2.198183E+00 4.371196E+00 7.665691E+00 1.271885E+01 + 8.477168E-01 2.171342E+00 4.531593E+00 7.662495E+00 1.240406E+01 + 8.511601E-01 2.182941E+00 4.502103E+00 7.644053E+00 1.223970E+01 + 7.959901E-01 2.127518E+00 4.426528E+00 7.842332E+00 1.198283E+01 + 7.422483E-01 2.037125E+00 4.327640E+00 7.747400E+00 1.217963E+01 + 6.986631E-01 1.941619E+00 4.195022E+00 7.557167E+00 1.203804E+01 + 6.659499E-01 1.839749E+00 3.990962E+00 7.252784E+00 1.164800E+01 + 6.328324E-01 1.718043E+00 3.714125E+00 6.807289E+00 1.100308E+01 + 6.197588E-01 1.673046E+00 3.529355E+00 6.413393E+00 1.033771E+01 + 7.383960E-01 1.868316E+00 3.783080E+00 6.584249E+00 1.036475E+01 + 9.444997E-01 2.198484E+00 4.212703E+00 7.013146E+00 1.067913E+01 + 1.177677E+00 2.543218E+00 4.631902E+00 7.451702E+00 1.098223E+01 + 1.445275E+00 2.911358E+00 5.052481E+00 7.859216E+00 1.124950E+01 + 1.711387E+00 3.230939E+00 5.358388E+00 8.074748E+00 1.130363E+01 + 1.953070E+00 3.473861E+00 5.526571E+00 8.080020E+00 1.106704E+01 + 2.177896E+00 3.660414E+00 5.595238E+00 7.945099E+00 1.064619E+01 + 2.363370E+00 3.771213E+00 5.550675E+00 7.664495E+00 1.006033E+01 + 2.393807E+00 3.732832E+00 5.361022E+00 7.273629E+00 9.417911E+00 + 4.383686E+00 1.593402E+01 3.410263E+01 6.282660E+01 1.010720E+02 + 4.437498E+00 1.611278E+01 3.438959E+01 6.325703E+01 1.016143E+02 + 4.491736E+00 1.629273E+01 3.467766E+01 6.368876E+01 1.021573E+02 + 4.546338E+00 1.647375E+01 3.496659E+01 6.412146E+01 1.027005E+02 + 4.603061E+00 1.666164E+01 3.526558E+01 6.456892E+01 1.032613E+02 + 4.658362E+00 1.684488E+01 3.555622E+01 6.500374E+01 1.038050E+02 + 4.713895E+00 1.702902E+01 3.584731E+01 6.543916E+01 1.043482E+02 + 4.773243E+00 1.722580E+01 3.615739E+01 6.590277E+01 1.049254E+02 + 4.847447E+00 1.747096E+01 3.654265E+01 6.647790E+01 1.056404E+02 + 5.034607E+00 1.807903E+01 3.749611E+01 6.789271E+01 1.074002E+02 + 6.029278E+00 1.956731E+01 3.980487E+01 7.129089E+01 1.116066E+02 + 6.977287E+00 2.197166E+01 4.324021E+01 7.660815E+01 1.181192E+02 + 8.138826E+00 2.481813E+01 4.861720E+01 8.266639E+01 1.254415E+02 + 9.476384E+00 2.798291E+01 5.356666E+01 8.914931E+01 1.331700E+02 + 1.434040E+01 3.147094E+01 5.892017E+01 9.603441E+01 1.412677E+02 + 1.663675E+01 3.518074E+01 6.451493E+01 1.031042E+02 1.494735E+02 + 1.923846E+01 3.925090E+01 7.055156E+01 1.106046E+02 1.580695E+02 + 2.215696E+01 4.444339E+01 7.701404E+01 1.185012E+02 1.670055E+02 + 2.534547E+01 4.953467E+01 8.376832E+01 1.266218E+02 1.634952E+02 + 2.884596E+01 5.501032E+01 9.087996E+01 1.350380E+02 1.734575E+02 + 3.271806E+01 6.095131E+01 9.844005E+01 1.438495E+02 1.837908E+02 + 3.737994E+01 6.721461E+01 1.062520E+02 1.528166E+02 1.942048E+02 + 4.198843E+01 7.349066E+01 1.139307E+02 1.615005E+02 2.041717E+02 + 4.528328E+01 7.786341E+01 1.191689E+02 1.673132E+02 2.106758E+02 + 4.495247E+01 7.733633E+01 1.184181E+02 1.663290E+02 2.091794E+02 + 4.217602E+01 7.349808E+01 1.136111E+02 1.607280E+02 2.022286E+02 + 3.858972E+01 6.848920E+01 1.072963E+02 1.533391E+02 2.044304E+02 + 3.475374E+01 6.303398E+01 1.003245E+02 1.450937E+02 1.952224E+02 + 3.108042E+01 5.768913E+01 9.337153E+01 1.367502E+02 1.857887E+02 + 2.762415E+01 5.253532E+01 8.653689E+01 1.284165E+02 1.762370E+02 + 2.437850E+01 4.756823E+01 7.981467E+01 1.200805E+02 1.665443E+02 + 2.141115E+01 4.289708E+01 7.335038E+01 1.119137E+02 1.568933E+02 + 1.875042E+01 3.858014E+01 6.723060E+01 1.040237E+02 1.474021E+02 + 1.635581E+01 3.457115E+01 6.140371E+01 9.635215E+01 1.380032E+02 + 1.415211E+01 3.076239E+01 5.572835E+01 8.872512E+01 1.284921E+02 + 1.212013E+01 2.712983E+01 5.017281E+01 8.109949E+01 1.188107E+02 + 1.047063E+01 2.360212E+01 4.463460E+01 7.333883E+01 1.087881E+02 + 8.828532E+00 2.055843E+01 3.915906E+01 6.549394E+01 9.847159E+01 + 7.499007E+00 1.769380E+01 3.441475E+01 5.782827E+01 8.817295E+01 + 6.366000E+00 1.534851E+01 3.004094E+01 5.122884E+01 7.816386E+01 + 5.407143E+00 1.339513E+01 2.655902E+01 4.521928E+01 6.981116E+01 + 4.567885E+00 1.159554E+01 2.339938E+01 4.030142E+01 6.206859E+01 + 3.795238E+00 9.869974E+00 2.027190E+01 3.548069E+01 5.522721E+01 + 3.142600E+00 8.210658E+00 1.729031E+01 3.083098E+01 4.842821E+01 + 2.609763E+00 7.012432E+00 1.482349E+01 2.660066E+01 4.238154E+01 + 2.191210E+00 5.909429E+00 1.272728E+01 2.297968E+01 3.677640E+01 + 1.909979E+00 5.149531E+00 1.092903E+01 1.990756E+01 3.197539E+01 + 1.690665E+00 4.534812E+00 9.584066E+00 1.718107E+01 2.766366E+01 + 1.475164E+00 3.983673E+00 8.382824E+00 1.497074E+01 2.378401E+01 + 1.341773E+00 3.588691E+00 7.515887E+00 1.331294E+01 2.097050E+01 + 1.487143E+00 3.728883E+00 7.487363E+00 1.288996E+01 1.986400E+01 + 1.771189E+00 4.085609E+00 7.756862E+00 1.284352E+01 1.924777E+01 + 2.053608E+00 4.389123E+00 7.909134E+00 1.262017E+01 1.841023E+01 + 2.319659E+00 4.626150E+00 7.943515E+00 1.224213E+01 1.740511E+01 + 2.545773E+00 4.773612E+00 7.846328E+00 1.171218E+01 1.625714E+01 + 2.709647E+00 4.814419E+00 7.612528E+00 1.104107E+01 1.499501E+01 + 2.828914E+00 4.787200E+00 7.304956E+00 1.031560E+01 1.372556E+01 + 2.878173E+00 4.668040E+00 6.902911E+00 9.518307E+00 1.243286E+01 + 2.793235E+00 4.425668E+00 6.431395E+00 8.750946E+00 1.131234E+01 + +Band: 5, gas: 2, k-terms: 3 + 3.222123E-10 2.229045E-09 1.142553E-08 4.774243E-08 1.740471E-07 + 3.908602E-10 2.640748E-09 1.323709E-08 5.398986E-08 1.919332E-07 + 4.741288E-10 3.138087E-09 1.537180E-08 6.121791E-08 2.124208E-07 + 5.761597E-10 3.733609E-09 1.791358E-08 6.966421E-08 2.362439E-07 + 7.016295E-10 4.455333E-09 2.094418E-08 7.969305E-08 2.640891E-07 + 8.526608E-10 5.324477E-09 2.452322E-08 9.136845E-08 2.962778E-07 + 1.038515E-09 6.366883E-09 2.878303E-08 1.052701E-07 3.337553E-07 + 1.268002E-09 7.644028E-09 3.389379E-08 1.216211E-07 3.774712E-07 + 1.558210E-09 9.229705E-09 4.017167E-08 1.413554E-07 4.301831E-07 + 2.009503E-09 1.158660E-08 4.926692E-08 1.694977E-07 5.043764E-07 + 2.882918E-09 1.585671E-08 6.497080E-08 2.166407E-07 6.273042E-07 + 4.505837E-09 2.328963E-08 9.099538E-08 2.921483E-07 8.185522E-07 + 7.149914E-09 3.464613E-08 1.290109E-07 3.982156E-07 1.079311E-06 + 1.130822E-08 5.147788E-08 1.829735E-07 5.434864E-07 1.426081E-06 + 1.780155E-08 7.630812E-08 2.590398E-07 7.415280E-07 1.883093E-06 + 2.764115E-08 1.120295E-07 3.642286E-07 1.006009E-06 2.477725E-06 + 4.276922E-08 1.643462E-07 5.119705E-07 1.365549E-06 3.263402E-06 + 6.591004E-08 2.403433E-07 7.181073E-07 1.851517E-06 4.300280E-06 + 1.005904E-07 3.490354E-07 1.002579E-06 2.502551E-06 5.652743E-06 + 1.526477E-07 5.049687E-07 1.395767E-06 3.378072E-06 7.422715E-06 + 2.306694E-07 7.288293E-07 1.941671E-06 4.557611E-06 9.752192E-06 + 3.458102E-07 1.045961E-06 2.689736E-06 6.128484E-06 1.278397E-05 + 5.091009E-07 1.479702E-06 3.681644E-06 8.166472E-06 1.662100E-05 + 6.978576E-07 1.970111E-06 4.789739E-06 1.040143E-05 2.077633E-05 + 8.232405E-07 2.311589E-06 5.585687E-06 1.204902E-05 2.385646E-05 + 8.798387E-07 2.493777E-06 6.068405E-06 1.312150E-05 2.594766E-05 + 9.049057E-07 2.604949E-06 6.409293E-06 1.396536E-05 2.768601E-05 + 9.106223E-07 2.674794E-06 6.681291E-06 1.470337E-05 2.931573E-05 + 9.113142E-07 2.740758E-06 6.948684E-06 1.547079E-05 3.107730E-05 + 9.082280E-07 2.808328E-06 7.232060E-06 1.628965E-05 3.299818E-05 + 9.006449E-07 2.873059E-06 7.531939E-06 1.716229E-05 3.508765E-05 + 8.932065E-07 2.946832E-06 7.870827E-06 1.814861E-05 3.742882E-05 + 8.900954E-07 3.035444E-06 8.278295E-06 1.932397E-05 4.019774E-05 + 8.910435E-07 3.145027E-06 8.766831E-06 2.071480E-05 4.339622E-05 + 8.935184E-07 3.263657E-06 9.309271E-06 2.229382E-05 4.703997E-05 + 8.976033E-07 3.387996E-06 9.904359E-06 2.407469E-05 5.120836E-05 + 8.971645E-07 3.503037E-06 1.050393E-05 2.596126E-05 5.577899E-05 + 8.920215E-07 3.605831E-06 1.109422E-05 2.792303E-05 6.068678E-05 + 8.918696E-07 3.728149E-06 1.173874E-05 3.009457E-05 6.617490E-05 + 9.051635E-07 3.907261E-06 1.253289E-05 3.265380E-05 7.260204E-05 + 9.477691E-07 4.203165E-06 1.367794E-05 3.596566E-05 8.068272E-05 + 1.013000E-06 4.596452E-06 1.514291E-05 4.009175E-05 9.044417E-05 + 1.083139E-06 5.036138E-06 1.681865E-05 4.479782E-05 1.014223E-04 + 1.151263E-06 5.496105E-06 1.862287E-05 4.996874E-05 1.134549E-04 + 1.219519E-06 5.975429E-06 2.057494E-05 5.566169E-05 1.268119E-04 + 1.309149E-06 6.563599E-06 2.290400E-05 6.243098E-05 1.426984E-04 + 1.476287E-06 7.459883E-06 2.620241E-05 7.161013E-05 1.635412E-04 + 1.725016E-06 8.684002E-06 3.048674E-05 8.326402E-05 1.895052E-04 + 2.035174E-06 1.015065E-05 3.548403E-05 9.665032E-05 2.193006E-04 + 2.627701E-06 1.268849E-05 4.353859E-05 1.167636E-04 2.619670E-04 + 4.698443E-06 2.041761E-05 6.518297E-05 1.658107E-04 3.566239E-04 + 9.500780E-06 3.626319E-05 1.055488E-04 2.511004E-04 5.120713E-04 + 1.856377E-05 6.289493E-05 1.678166E-04 3.746665E-04 7.263952E-04 + 3.509007E-05 1.066315E-04 2.621426E-04 5.504533E-04 1.016671E-03 + 6.369210E-05 1.755108E-04 4.000826E-04 7.916601E-04 1.396490E-03 + 1.103288E-04 2.787426E-04 5.934421E-04 1.110472E-03 1.874266E-03 + 1.850436E-04 4.315980E-04 8.626860E-04 1.531190E-03 2.474219E-03 + 2.967296E-04 6.443699E-04 1.216200E-03 2.057673E-03 3.194979E-03 + 3.952868E-04 8.244364E-04 1.504010E-03 2.473602E-03 3.749263E-03 + 3.143285E-08 2.682421E-07 1.636927E-06 7.907816E-06 3.104266E-05 + 3.611542E-08 2.979863E-07 1.772565E-06 8.387893E-06 3.238716E-05 + 4.161189E-08 3.341625E-07 1.924624E-06 8.908848E-06 3.388520E-05 + 4.800166E-08 3.749845E-07 2.104590E-06 9.513393E-06 3.558502E-05 + 5.581821E-08 4.233759E-07 2.306518E-06 1.019479E-05 3.750669E-05 + 6.470740E-08 4.784375E-07 2.541023E-06 1.096143E-05 3.958959E-05 + 7.557780E-08 5.426213E-07 2.812904E-06 1.183972E-05 4.198068E-05 + 8.861349E-08 6.204873E-07 3.135700E-06 1.286550E-05 4.470399E-05 + 1.047579E-07 7.160855E-07 3.525768E-06 1.410020E-05 4.800272E-05 + 1.311764E-07 8.632216E-07 4.121346E-06 1.601084E-05 5.312365E-05 + 1.842314E-07 1.145466E-06 5.221575E-06 1.954680E-05 6.272934E-05 + 2.831776E-07 1.640995E-06 7.076288E-06 2.532711E-05 7.815171E-05 + 4.419221E-07 2.383374E-06 9.717677E-06 3.322741E-05 9.853937E-05 + 6.887691E-07 3.456742E-06 1.337287E-05 4.361023E-05 1.246029E-04 + 1.068950E-06 5.003854E-06 1.835691E-05 5.725843E-05 1.576503E-04 + 1.634505E-06 7.163249E-06 2.499290E-05 7.478093E-05 1.987017E-04 + 2.490228E-06 1.025882E-05 3.407675E-05 9.785539E-05 2.509144E-04 + 3.783553E-06 1.465877E-05 4.638771E-05 1.280771E-04 3.172807E-04 + 5.691976E-06 2.079567E-05 6.299225E-05 1.670314E-04 4.003378E-04 + 8.493079E-06 2.938850E-05 8.520836E-05 2.178862E-04 5.046441E-04 + 1.261516E-05 4.145408E-05 1.152294E-04 2.842602E-04 6.370249E-04 + 1.859616E-05 5.813257E-05 1.552731E-04 3.695763E-04 8.021602E-04 + 2.688460E-05 8.049147E-05 2.068164E-04 4.761613E-04 1.001725E-03 + 3.617969E-05 1.047478E-04 2.614865E-04 5.851427E-04 1.201496E-03 + 4.178921E-05 1.197879E-04 2.956349E-04 6.531783E-04 1.320046E-03 + 4.355407E-05 1.260856E-04 3.115093E-04 6.854692E-04 1.376067E-03 + 4.358122E-05 1.285276E-04 3.198258E-04 7.052194E-04 1.412331E-03 + 4.256655E-05 1.288828E-04 3.245150E-04 7.191548E-04 1.441209E-03 + 4.134388E-05 1.285256E-04 3.292768E-04 7.343416E-04 1.477798E-03 + 4.008632E-05 1.278805E-04 3.344763E-04 7.527050E-04 1.520784E-03 + 3.883158E-05 1.269019E-04 3.391918E-04 7.739374E-04 1.571568E-03 + 3.781640E-05 1.263246E-04 3.443481E-04 7.977048E-04 1.631856E-03 + 3.712747E-05 1.267615E-04 3.514057E-04 8.274584E-04 1.707619E-03 + 3.671353E-05 1.285013E-04 3.615587E-04 8.624771E-04 1.796609E-03 + 3.631844E-05 1.311942E-04 3.738750E-04 9.000943E-04 1.895890E-03 + 3.597381E-05 1.340383E-04 3.886464E-04 9.435533E-04 2.003383E-03 + 3.522359E-05 1.366173E-04 4.035528E-04 9.883539E-04 2.111507E-03 + 3.413555E-05 1.377641E-04 4.175570E-04 1.035893E-03 2.223550E-03 + 3.301458E-05 1.389279E-04 4.324219E-04 1.087941E-03 2.352862E-03 + 3.216113E-05 1.408156E-04 4.510066E-04 1.151386E-03 2.506995E-03 + 3.237898E-05 1.460156E-04 4.773353E-04 1.236154E-03 2.703668E-03 + 3.336139E-05 1.534968E-04 5.096248E-04 1.336265E-03 2.940152E-03 + 3.477280E-05 1.614011E-04 5.432721E-04 1.439592E-03 3.189681E-03 + 3.639420E-05 1.694175E-04 5.764967E-04 1.542041E-03 3.432370E-03 + 3.822536E-05 1.790571E-04 6.100049E-04 1.643331E-03 3.680811E-03 + 4.084184E-05 1.924306E-04 6.523219E-04 1.762548E-03 3.959489E-03 + 4.582957E-05 2.157432E-04 7.238993E-04 1.929784E-03 4.331805E-03 + 5.334430E-05 2.488651E-04 8.248935E-04 2.163796E-03 4.795220E-03 + 6.254104E-05 2.897723E-04 9.477847E-04 2.451107E-03 5.336047E-03 + 7.968490E-05 3.599414E-04 1.148511E-03 2.901624E-03 6.188823E-03 + 1.387503E-04 5.670526E-04 1.680044E-03 3.998769E-03 8.130804E-03 + 2.710207E-04 9.751337E-04 2.635980E-03 5.838767E-03 1.120752E-02 + 5.093739E-04 1.631651E-03 4.054044E-03 8.384249E-03 1.525396E-02 + 9.153906E-04 2.637315E-03 6.071580E-03 1.180359E-02 2.045922E-02 + 1.561035E-03 4.093668E-03 8.789688E-03 1.621659E-02 2.697834E-02 + 2.511354E-03 6.069563E-03 1.226815E-02 2.169690E-02 3.494400E-02 + 3.867874E-03 8.682076E-03 1.664637E-02 2.842245E-02 4.466110E-02 + 5.649867E-03 1.190639E-02 2.182338E-02 3.616691E-02 5.567326E-02 + 6.983826E-03 1.423007E-02 2.548996E-02 4.157482E-02 6.324487E-02 + 4.342499E-04 9.438831E-04 1.798474E-03 3.389452E-03 5.983635E-03 + 4.409751E-04 9.531614E-04 1.817288E-03 3.421681E-03 6.030954E-03 + 4.479557E-04 9.651825E-04 1.834864E-03 3.452081E-03 6.080470E-03 + 4.541401E-04 9.760350E-04 1.855722E-03 3.487806E-03 6.133424E-03 + 4.617000E-04 9.875751E-04 1.875022E-03 3.521411E-03 6.189975E-03 + 4.679479E-04 9.976756E-04 1.895738E-03 3.557931E-03 6.243990E-03 + 4.752411E-04 1.008219E-03 1.917580E-03 3.594876E-03 6.304434E-03 + 4.823819E-04 1.020451E-03 1.942952E-03 3.637251E-03 6.370740E-03 + 4.908182E-04 1.036356E-03 1.972175E-03 3.689968E-03 6.452601E-03 + 5.119627E-04 1.069333E-03 2.033676E-03 3.799475E-03 6.620476E-03 + 5.599557E-04 1.144924E-03 2.175031E-03 4.044428E-03 7.001057E-03 + 6.346638E-04 1.265645E-03 2.405226E-03 4.432415E-03 7.602531E-03 + 7.217693E-04 1.412711E-03 2.684385E-03 4.895283E-03 8.317094E-03 + 8.198237E-04 1.584430E-03 3.009271E-03 5.416561E-03 9.125552E-03 + 9.307404E-04 1.786944E-03 3.380817E-03 6.006884E-03 1.003938E-02 + 1.053583E-03 2.016930E-03 3.792939E-03 6.660404E-03 1.105545E-02 + 1.196745E-03 2.291172E-03 4.273947E-03 7.415552E-03 1.222796E-02 + 1.367128E-03 2.617607E-03 4.829209E-03 8.287479E-03 1.358778E-02 + 1.567448E-03 2.999368E-03 5.470334E-03 9.272164E-03 1.514093E-02 + 1.805219E-03 3.449537E-03 6.202483E-03 1.041303E-02 1.693573E-02 + 2.096491E-03 3.983992E-03 7.058239E-03 1.175036E-02 1.905735E-02 + 2.448007E-03 4.606161E-03 8.048006E-03 1.329861E-02 2.153612E-02 + 2.852835E-03 5.316552E-03 9.163255E-03 1.504536E-02 2.437584E-02 + 3.219647E-03 5.945562E-03 1.015680E-02 1.660903E-02 2.700119E-02 + 3.349054E-03 6.178913E-03 1.056552E-02 1.728452E-02 2.815303E-02 + 3.300942E-03 6.126635E-03 1.054670E-02 1.729805E-02 2.819593E-02 + 3.192789E-03 5.968968E-03 1.037511E-02 1.709300E-02 2.789846E-02 + 3.057707E-03 5.777234E-03 1.013211E-02 1.680800E-02 2.748761E-02 + 2.932083E-03 5.585257E-03 9.904518E-03 1.655676E-02 2.716537E-02 + 2.817816E-03 5.418153E-03 9.703778E-03 1.635180E-02 2.692278E-02 + 2.709201E-03 5.263262E-03 9.523869E-03 1.618424E-02 2.682070E-02 + 2.613072E-03 5.126108E-03 9.377291E-03 1.607760E-02 2.683197E-02 + 2.531072E-03 5.026497E-03 9.278699E-03 1.609205E-02 2.703008E-02 + 2.460502E-03 4.960170E-03 9.227671E-03 1.617454E-02 2.736918E-02 + 2.387877E-03 4.926790E-03 9.209696E-03 1.628939E-02 2.782413E-02 + 2.314766E-03 4.895995E-03 9.232717E-03 1.645486E-02 2.836683E-02 + 2.219244E-03 4.875873E-03 9.265178E-03 1.660875E-02 2.891171E-02 + 2.099707E-03 4.837488E-03 9.294829E-03 1.678557E-02 2.944217E-02 + 1.964684E-03 4.808717E-03 9.372602E-03 1.701029E-02 3.010048E-02 + 1.820962E-03 4.789093E-03 9.540979E-03 1.737412E-02 3.099653E-02 + 1.699957E-03 4.814256E-03 9.830850E-03 1.799409E-02 3.224477E-02 + 1.591007E-03 4.849562E-03 1.021384E-02 1.883764E-02 3.390040E-02 + 1.477030E-03 4.837924E-03 1.057917E-02 1.977330E-02 3.581111E-02 + 1.352395E-03 4.766553E-03 1.088098E-02 2.071706E-02 3.780211E-02 + 1.223981E-03 4.643844E-03 1.111900E-02 2.162961E-02 3.990190E-02 + 1.118263E-03 4.501568E-03 1.137084E-02 2.267596E-02 4.230001E-02 + 1.061704E-03 4.452165E-03 1.177100E-02 2.409140E-02 4.553679E-02 + 1.034227E-03 4.446437E-03 1.219678E-02 2.571194E-02 4.937959E-02 + 1.008248E-03 4.421472E-03 1.252999E-02 2.719006E-02 5.314913E-02 + 1.062637E-03 4.622727E-03 1.326924E-02 2.934475E-02 5.810155E-02 + 1.524998E-03 6.033543E-03 1.644719E-02 3.582926E-02 7.043447E-02 + 2.454441E-03 8.578293E-03 2.179158E-02 4.619164E-02 8.841982E-02 + 3.811169E-03 1.193198E-02 2.852446E-02 5.868682E-02 1.083531E-01 + 5.690496E-03 1.615966E-02 3.663867E-02 7.275750E-02 1.292921E-01 + 8.129434E-03 2.123917E-02 4.585312E-02 8.745184E-02 1.499094E-01 + 1.104571E-02 2.687252E-02 5.543237E-02 1.015545E-01 1.683387E-01 + 1.451893E-02 3.311049E-02 6.525436E-02 1.149810E-01 1.847115E-01 + 1.823789E-02 3.930450E-02 7.417303E-02 1.260985E-01 1.970028E-01 + 2.020916E-02 4.218156E-02 7.768765E-02 1.294682E-01 1.991437E-01 + +Band: 5, gas: 4, k-terms: 2 + 1.974024E-05 4.296170E-05 9.075662E-05 1.862553E-04 3.734120E-04 + 2.336552E-05 4.963749E-05 1.026206E-04 2.053436E-04 4.013492E-04 + 2.770406E-05 5.760169E-05 1.163833E-04 2.277913E-04 4.340867E-04 + 3.296829E-05 6.717712E-05 1.327041E-04 2.535027E-04 4.723255E-04 + 3.933962E-05 7.848467E-05 1.509422E-04 2.839167E-04 5.156575E-04 + 4.685240E-05 9.198530E-05 1.727525E-04 3.184449E-04 5.662574E-04 + 5.589487E-05 1.074725E-04 1.995056E-04 3.578920E-04 6.245412E-04 + 6.693694E-05 1.256545E-04 2.297163E-04 4.041980E-04 6.914917E-04 + 8.024412E-05 1.477181E-04 2.659428E-04 4.602035E-04 7.704903E-04 + 9.799777E-05 1.764333E-04 3.140442E-04 5.313434E-04 8.718244E-04 + 1.231890E-04 2.179638E-04 3.810873E-04 6.318829E-04 1.014770E-03 + 1.585578E-04 2.768015E-04 4.728098E-04 7.700652E-04 1.208738E-03 + 2.056451E-04 3.526893E-04 5.898951E-04 9.424535E-04 1.447110E-03 + 2.660048E-04 4.502048E-04 7.358730E-04 1.152015E-03 1.734798E-03 + 3.446515E-04 5.732110E-04 9.182495E-04 1.408107E-03 2.080617E-03 + 4.447495E-04 7.273050E-04 1.140882E-03 1.719632E-03 2.492555E-03 + 5.723078E-04 9.207155E-04 1.418746E-03 2.099399E-03 2.984019E-03 + 7.367096E-04 1.164246E-03 1.762782E-03 2.562007E-03 3.576036E-03 + 9.448663E-04 1.467958E-03 2.185284E-03 3.120154E-03 4.285430E-03 + 1.207441E-03 1.847507E-03 2.704657E-03 3.800415E-03 5.142128E-03 + 1.543796E-03 2.325668E-03 3.344235E-03 4.628443E-03 6.167131E-03 + 1.967354E-03 2.917038E-03 4.128837E-03 5.627841E-03 7.400800E-03 + 2.493222E-03 3.636725E-03 5.076294E-03 6.827669E-03 8.850858E-03 + 3.082195E-03 4.432289E-03 6.115947E-03 8.141561E-03 1.044682E-02 + 3.625645E-03 5.161573E-03 7.084621E-03 9.369814E-03 1.197258E-02 + 4.144661E-03 5.845383E-03 8.029970E-03 1.057694E-02 1.348014E-02 + 4.692442E-03 6.566192E-03 9.010922E-03 1.184538E-02 1.508495E-02 + 5.295825E-03 7.372207E-03 1.003802E-02 1.322954E-02 1.684893E-02 + 5.968382E-03 8.287355E-03 1.121776E-02 1.482148E-02 1.887084E-02 + 6.764150E-03 9.340257E-03 1.257875E-02 1.658202E-02 2.112511E-02 + 7.634820E-03 1.057736E-02 1.416754E-02 1.857734E-02 2.373836E-02 + 8.646520E-03 1.200300E-02 1.603006E-02 2.090071E-02 2.669354E-02 + 9.804338E-03 1.368001E-02 1.822716E-02 2.368540E-02 3.007714E-02 + 1.107038E-02 1.559243E-02 2.081238E-02 2.695067E-02 3.408644E-02 + 1.249839E-02 1.775953E-02 2.379150E-02 3.074581E-02 3.879594E-02 + 1.415200E-02 2.019836E-02 2.716379E-02 3.514558E-02 4.425786E-02 + 1.603704E-02 2.279409E-02 3.098142E-02 4.013313E-02 5.048407E-02 + 1.817727E-02 2.572535E-02 3.516146E-02 4.571063E-02 5.751614E-02 + 2.059510E-02 2.913217E-02 3.962984E-02 5.200381E-02 6.548416E-02 + 2.337885E-02 3.308521E-02 4.474820E-02 5.886697E-02 7.445077E-02 + 2.667900E-02 3.779974E-02 5.088822E-02 6.653723E-02 8.468070E-02 + 3.051581E-02 4.331628E-02 5.811380E-02 7.545295E-02 9.585502E-02 + 3.477923E-02 4.954767E-02 6.638061E-02 8.575240E-02 1.082240E-01 + 3.951807E-02 5.659185E-02 7.587870E-02 9.766081E-02 1.224754E-01 + 4.478279E-02 6.450364E-02 8.668378E-02 1.113801E-01 1.389800E-01 + 5.078092E-02 7.352709E-02 9.902551E-02 1.272056E-01 1.581222E-01 + 5.837664E-02 8.419055E-02 1.135085E-01 1.456863E-01 1.806525E-01 + 6.783502E-02 9.649576E-02 1.300527E-01 1.667134E-01 2.062409E-01 + 7.906469E-02 1.108784E-01 1.481984E-01 1.897447E-01 2.342055E-01 + 9.376956E-02 1.295175E-01 1.703077E-01 2.167794E-01 2.666376E-01 + 1.182830E-01 1.592866E-01 2.048610E-01 2.561106E-01 3.120704E-01 + 1.518849E-01 1.989012E-01 2.499531E-01 3.061833E-01 3.677406E-01 + 1.921675E-01 2.454488E-01 3.020826E-01 3.631797E-01 4.291069E-01 + 2.395985E-01 2.992205E-01 3.613808E-01 4.271947E-01 4.970329E-01 + 2.935741E-01 3.593979E-01 4.270144E-01 4.972476E-01 5.705577E-01 + 3.529498E-01 4.247372E-01 4.975386E-01 5.718684E-01 6.482101E-01 + 4.178023E-01 4.951212E-01 5.726123E-01 6.507306E-01 7.296760E-01 + 4.857197E-01 5.680251E-01 6.496829E-01 7.311677E-01 8.123043E-01 + 5.338864E-01 6.196567E-01 7.041839E-01 7.878594E-01 8.705527E-01 + 5.553776E+00 6.668143E+00 7.930139E+00 9.427766E+00 1.114716E+01 + 5.583148E+00 6.704327E+00 7.972522E+00 9.461944E+00 1.117783E+01 + 5.613510E+00 6.747173E+00 8.014913E+00 9.503718E+00 1.121425E+01 + 5.650488E+00 6.801825E+00 8.065850E+00 9.545670E+00 1.125558E+01 + 5.692603E+00 6.858567E+00 8.100761E+00 9.595928E+00 1.129410E+01 + 5.727405E+00 6.923413E+00 8.146888E+00 9.641339E+00 1.133672E+01 + 5.763098E+00 6.971333E+00 8.217847E+00 9.681057E+00 1.138035E+01 + 5.811678E+00 7.015319E+00 8.271281E+00 9.726821E+00 1.142306E+01 + 5.860811E+00 7.070765E+00 8.334971E+00 9.791372E+00 1.147926E+01 + 5.953856E+00 7.156752E+00 8.455277E+00 9.891700E+00 1.157874E+01 + 6.104378E+00 7.321306E+00 8.640087E+00 1.008431E+01 1.177997E+01 + 6.310343E+00 7.561689E+00 8.886949E+00 1.036558E+01 1.207695E+01 + 6.555346E+00 7.823704E+00 9.167845E+00 1.067842E+01 1.240885E+01 + 6.809450E+00 8.114668E+00 9.468135E+00 1.100263E+01 1.276133E+01 + 7.093880E+00 8.417747E+00 9.793096E+00 1.134536E+01 1.312976E+01 + 7.390759E+00 8.737490E+00 1.012249E+01 1.170720E+01 1.350874E+01 + 7.700599E+00 9.069402E+00 1.048013E+01 1.208711E+01 1.389855E+01 + 8.043757E+00 9.426759E+00 1.086157E+01 1.248761E+01 1.431293E+01 + 8.406719E+00 9.802920E+00 1.126141E+01 1.290201E+01 1.474590E+01 + 8.786740E+00 1.020561E+01 1.168286E+01 1.334483E+01 1.520697E+01 + 9.211829E+00 1.065003E+01 1.213232E+01 1.381489E+01 1.568532E+01 + 9.664923E+00 1.111895E+01 1.261388E+01 1.430508E+01 1.619733E+01 + 1.014513E+01 1.160250E+01 1.311597E+01 1.481874E+01 1.671034E+01 + 1.058020E+01 1.203230E+01 1.355084E+01 1.525536E+01 1.714377E+01 + 1.086989E+01 1.230125E+01 1.380915E+01 1.547798E+01 1.734515E+01 + 1.110272E+01 1.249072E+01 1.400089E+01 1.561147E+01 1.742110E+01 + 1.136169E+01 1.268950E+01 1.419763E+01 1.574048E+01 1.748232E+01 + 1.169074E+01 1.295173E+01 1.438375E+01 1.590752E+01 1.757783E+01 + 1.209471E+01 1.328373E+01 1.465352E+01 1.617498E+01 1.776977E+01 + 1.265439E+01 1.369917E+01 1.502278E+01 1.650199E+01 1.803693E+01 + 1.328632E+01 1.424964E+01 1.549038E+01 1.690140E+01 1.843018E+01 + 1.408412E+01 1.490472E+01 1.605860E+01 1.739858E+01 1.889907E+01 + 1.502744E+01 1.571287E+01 1.674246E+01 1.803480E+01 1.944512E+01 + 1.604175E+01 1.665454E+01 1.756726E+01 1.878359E+01 2.013389E+01 + 1.715385E+01 1.775100E+01 1.852632E+01 1.964408E+01 2.093813E+01 + 1.838951E+01 1.901570E+01 1.963391E+01 2.063244E+01 2.185890E+01 + 1.973721E+01 2.029270E+01 2.092862E+01 2.174066E+01 2.287138E+01 + 2.122825E+01 2.168165E+01 2.235967E+01 2.299402E+01 2.398944E+01 + 2.282964E+01 2.318308E+01 2.378323E+01 2.444496E+01 2.522784E+01 + 2.454529E+01 2.479034E+01 2.529212E+01 2.596991E+01 2.661409E+01 + 2.634869E+01 2.647375E+01 2.688510E+01 2.747855E+01 2.815794E+01 + 2.822867E+01 2.821955E+01 2.852023E+01 2.902597E+01 2.967611E+01 + 3.010698E+01 2.996449E+01 3.012901E+01 3.054012E+01 3.109689E+01 + 3.194395E+01 3.165738E+01 3.168977E+01 3.197634E+01 3.242618E+01 + 3.369906E+01 3.325040E+01 3.314559E+01 3.328129E+01 3.361480E+01 + 3.528394E+01 3.470142E+01 3.442971E+01 3.442421E+01 3.460622E+01 + 3.653473E+01 3.594653E+01 3.550154E+01 3.533109E+01 3.535757E+01 + 3.738646E+01 3.689105E+01 3.631773E+01 3.597194E+01 3.582475E+01 + 3.779129E+01 3.740067E+01 3.685264E+01 3.632662E+01 3.600130E+01 + 3.768244E+01 3.741320E+01 3.695467E+01 3.635056E+01 3.585565E+01 + 3.706356E+01 3.687416E+01 3.647626E+01 3.591372E+01 3.529877E+01 + 3.597996E+01 3.584881E+01 3.550633E+01 3.498814E+01 3.435378E+01 + 3.450751E+01 3.441956E+01 3.413128E+01 3.366371E+01 3.306642E+01 + 3.268365E+01 3.261730E+01 3.237530E+01 3.196767E+01 3.142531E+01 + 3.057167E+01 3.052148E+01 3.032747E+01 2.997984E+01 2.950446E+01 + 2.828037E+01 2.823887E+01 2.807468E+01 2.778371E+01 2.737684E+01 + 2.588793E+01 2.585282E+01 2.570836E+01 2.546650E+01 2.512484E+01 + 2.348729E+01 2.345206E+01 2.332582E+01 2.312112E+01 2.283817E+01 + 2.170311E+01 2.166692E+01 2.155686E+01 2.137770E+01 2.113731E+01 + +Band: 5, gas: 6, k-terms: 1 + 1.312711E+00 1.889682E+00 2.483862E+00 3.062885E+00 3.605680E+00 + 1.320471E+00 1.897949E+00 2.492110E+00 3.070769E+00 3.612948E+00 + 1.328388E+00 1.906375E+00 2.500513E+00 3.078797E+00 3.620349E+00 + 1.336486E+00 1.914983E+00 2.509091E+00 3.086989E+00 3.627898E+00 + 1.345033E+00 1.924061E+00 2.518133E+00 3.095621E+00 3.635852E+00 + 1.353631E+00 1.933185E+00 2.527216E+00 3.104290E+00 3.643844E+00 + 1.362554E+00 1.942644E+00 2.536626E+00 3.113269E+00 3.652121E+00 + 1.372325E+00 1.952992E+00 2.546916E+00 3.123085E+00 3.661171E+00 + 1.384383E+00 1.965747E+00 2.559589E+00 3.135167E+00 3.672304E+00 + 1.410574E+00 1.993369E+00 2.586964E+00 3.161203E+00 3.696221E+00 + 1.468946E+00 2.054588E+00 2.647385E+00 3.218469E+00 3.748637E+00 + 1.557197E+00 2.146345E+00 2.737380E+00 3.303348E+00 3.825990E+00 + 1.655806E+00 2.247827E+00 2.836185E+00 3.396002E+00 3.910013E+00 + 1.759686E+00 2.353641E+00 2.938446E+00 3.491336E+00 3.996033E+00 + 1.868534E+00 2.463241E+00 3.043766E+00 3.588952E+00 4.083670E+00 + 1.979439E+00 2.573762E+00 3.149326E+00 3.686250E+00 4.170603E+00 + 2.096166E+00 2.689029E+00 3.258675E+00 3.786491E+00 4.259734E+00 + 2.218487E+00 2.808761E+00 3.371510E+00 3.889366E+00 4.350774E+00 + 2.344581E+00 2.931173E+00 3.486141E+00 3.993343E+00 4.442393E+00 + 2.475887E+00 3.057729E+00 3.603942E+00 4.099673E+00 4.535681E+00 + 2.614127E+00 3.190191E+00 3.726527E+00 4.209783E+00 4.631904E+00 + 2.757383E+00 3.326502E+00 3.852002E+00 4.322003E+00 4.729620E+00 + 2.901545E+00 3.462871E+00 3.976982E+00 4.433411E+00 4.826397E+00 + 3.018868E+00 3.573831E+00 4.078806E+00 4.524459E+00 4.905909E+00 + 3.067723E+00 3.621785E+00 4.124501E+00 4.567090E+00 4.945069E+00 + 3.073474E+00 3.630939E+00 4.136335E+00 4.581133E+00 4.960995E+00 + 3.067532E+00 3.630651E+00 4.140861E+00 4.589866E+00 4.973460E+00 + 3.059828E+00 3.630486E+00 4.146964E+00 4.601274E+00 4.989416E+00 + 3.058712E+00 3.638570E+00 4.162299E+00 4.622336E+00 5.015030E+00 + 3.064585E+00 3.655675E+00 4.187953E+00 4.654350E+00 5.051725E+00 + 3.075829E+00 3.680635E+00 4.223221E+00 4.697038E+00 5.099582E+00 + 3.092965E+00 3.714082E+00 4.268880E+00 4.751298E+00 5.159572E+00 + 3.115843E+00 3.755742E+00 4.324700E+00 4.817024E+00 5.231711E+00 + 3.141852E+00 3.802836E+00 4.387957E+00 4.891717E+00 5.313836E+00 + 3.166095E+00 3.850302E+00 4.453721E+00 4.970778E+00 5.401806E+00 + 3.185697E+00 3.894732E+00 4.518309E+00 5.050480E+00 5.492021E+00 + 3.195408E+00 3.930507E+00 4.576000E+00 5.125224E+00 5.579177E+00 + 3.193068E+00 3.955091E+00 4.623718E+00 5.191586E+00 5.659656E+00 + 3.183152E+00 3.971476E+00 4.663220E+00 5.250199E+00 5.733149E+00 + 3.170697E+00 3.983546E+00 4.697204E+00 5.302603E+00 5.800156E+00 + 3.165151E+00 3.998866E+00 4.732282E+00 5.353822E+00 5.864163E+00 + 3.162426E+00 4.014258E+00 4.764967E+00 5.400731E+00 5.922356E+00 + 3.153412E+00 4.021618E+00 4.787764E+00 5.437466E+00 5.969883E+00 + 3.135833E+00 4.018868E+00 4.799298E+00 5.462027E+00 6.005625E+00 + 3.112498E+00 4.008841E+00 4.802496E+00 5.477085E+00 6.031046E+00 + 3.093445E+00 4.000898E+00 4.805646E+00 5.490191E+00 6.052584E+00 + 3.096207E+00 4.011145E+00 4.822790E+00 5.513241E+00 6.080366E+00 + 3.113474E+00 4.033277E+00 4.848829E+00 5.542174E+00 6.111255E+00 + 3.131860E+00 4.055322E+00 4.873588E+00 5.568761E+00 6.138901E+00 + 3.195904E+00 4.117848E+00 4.932318E+00 5.622562E+00 6.187308E+00 + 3.441766E+00 4.342648E+00 5.129260E+00 5.789682E+00 6.325191E+00 + 3.776253E+00 4.641884E+00 5.386477E+00 6.003758E+00 6.497906E+00 + 4.111557E+00 4.936405E+00 5.635813E+00 6.208216E+00 6.660003E+00 + 4.442463E+00 5.222188E+00 5.874183E+00 6.400685E+00 6.809721E+00 + 4.760167E+00 5.492285E+00 6.096191E+00 6.577038E+00 6.944074E+00 + 5.056693E+00 5.740645E+00 6.297375E+00 6.734048E+00 7.060964E+00 + 5.339934E+00 5.974419E+00 6.483791E+00 6.876689E+00 7.164195E+00 + 5.598217E+00 6.184513E+00 6.648518E+00 6.999986E+00 7.250420E+00 + 5.745041E+00 6.302542E+00 6.739655E+00 7.066801E+00 7.295549E+00 + +Band: 5, gas: 12, k-terms: 1 + 6.095079E-01 6.848189E-01 7.598196E-01 8.342917E-01 9.064523E-01 + 6.118906E-01 6.869057E-01 7.617037E-01 8.360130E-01 9.080197E-01 + 6.145702E-01 6.892320E-01 7.637862E-01 8.379020E-01 9.097315E-01 + 6.176065E-01 6.918461E-01 7.661068E-01 8.399922E-01 9.116161E-01 + 6.211039E-01 6.948394E-01 7.687477E-01 8.423581E-01 9.137414E-01 + 6.250904E-01 6.982254E-01 7.717109E-01 8.449940E-01 9.160974E-01 + 6.296995E-01 7.021195E-01 7.750982E-01 8.479907E-01 9.187654E-01 + 6.351103E-01 7.066825E-01 7.790563E-01 8.514825E-01 9.218678E-01 + 6.416326E-01 7.122060E-01 7.838624E-01 8.557314E-01 9.256484E-01 + 6.508471E-01 7.202812E-01 7.911150E-01 8.623081E-01 9.316015E-01 + 6.649295E-01 7.331505E-01 8.030975E-01 8.734660E-01 9.418710E-01 + 6.834453E-01 7.504239E-01 8.194247E-01 8.888061E-01 9.560533E-01 + 7.040812E-01 7.697442E-01 8.376838E-01 9.059190E-01 9.718302E-01 + 7.263815E-01 7.906306E-01 8.573643E-01 9.242854E-01 9.887012E-01 + 7.504834E-01 8.132078E-01 8.785719E-01 9.439980E-01 1.006712E+00 + 7.762885E-01 8.373459E-01 9.011527E-01 9.648985E-01 1.025722E+00 + 8.044105E-01 8.636638E-01 9.257199E-01 9.875808E-01 1.046322E+00 + 8.350523E-01 8.923501E-01 9.524488E-01 1.012212E+00 1.068673E+00 + 8.683207E-01 9.234829E-01 9.814037E-01 1.038856E+00 1.092847E+00 + 9.046330E-01 9.574798E-01 1.013001E+00 1.067916E+00 1.119239E+00 + 9.444562E-01 9.948124E-01 1.047715E+00 1.099789E+00 1.148301E+00 + 9.879392E-01 1.035609E+00 1.085670E+00 1.134689E+00 1.180190E+00 + 1.035141E+00 1.079900E+00 1.126906E+00 1.172680E+00 1.215003E+00 + 1.084623E+00 1.126057E+00 1.169786E+00 1.212272E+00 1.251457E+00 + 1.134814E+00 1.172168E+00 1.212344E+00 1.251679E+00 1.288045E+00 + 1.189274E+00 1.221821E+00 1.258082E+00 1.294208E+00 1.327836E+00 + 1.251358E+00 1.278490E+00 1.310432E+00 1.343108E+00 1.373836E+00 + 1.322649E+00 1.343770E+00 1.370967E+00 1.399896E+00 1.427498E+00 + 1.404338E+00 1.418896E+00 1.440934E+00 1.465803E+00 1.490023E+00 + 1.497157E+00 1.504560E+00 1.521010E+00 1.541502E+00 1.562103E+00 + 1.601801E+00 1.601367E+00 1.611753E+00 1.627531E+00 1.644277E+00 + 1.718874E+00 1.709844E+00 1.713663E+00 1.724372E+00 1.737013E+00 + 1.848905E+00 1.830407E+00 1.827096E+00 1.832346E+00 1.840617E+00 + 1.992436E+00 1.963408E+00 1.952275E+00 1.951497E+00 1.955180E+00 + 2.150225E+00 2.109302E+00 2.089438E+00 2.081899E+00 2.080520E+00 + 2.323076E+00 2.268631E+00 2.238878E+00 2.223779E+00 2.216765E+00 + 2.512152E+00 2.442192E+00 2.400903E+00 2.377336E+00 2.363926E+00 + 2.718475E+00 2.630778E+00 2.576139E+00 2.542826E+00 2.522030E+00 + 2.942215E+00 2.834552E+00 2.764816E+00 2.720361E+00 2.691006E+00 + 3.182904E+00 3.053461E+00 2.966983E+00 2.909824E+00 2.870648E+00 + 3.438265E+00 3.286015E+00 3.181596E+00 3.110343E+00 3.060187E+00 + 3.707866E+00 3.532029E+00 3.408394E+00 3.321693E+00 3.259223E+00 + 3.992475E+00 3.791859E+00 3.647507E+00 3.543802E+00 3.467484E+00 + 4.291135E+00 4.064725E+00 3.898259E+00 3.776028E+00 3.684333E+00 + 4.600542E+00 4.348024E+00 4.158496E+00 4.016607E+00 3.908226E+00 + 4.913623E+00 4.636096E+00 4.423708E+00 4.261785E+00 4.135998E+00 + 5.218826E+00 4.919455E+00 4.686145E+00 4.505149E+00 4.362231E+00 + 5.511876E+00 5.193937E+00 4.941847E+00 4.743003E+00 4.583519E+00 + 5.791019E+00 5.457408E+00 5.188428E+00 4.972868E+00 4.797436E+00 + 6.033229E+00 5.690257E+00 5.409471E+00 5.180923E+00 4.992202E+00 + 6.179446E+00 5.841909E+00 5.562277E+00 5.330951E+00 5.136523E+00 + 6.263037E+00 5.938135E+00 5.665897E+00 5.436828E+00 5.240583E+00 + 6.316904E+00 6.005711E+00 5.741674E+00 5.515783E+00 5.318595E+00 + 6.342521E+00 6.045572E+00 5.790251E+00 5.568224E+00 5.370857E+00 + 6.343894E+00 6.061024E+00 5.814503E+00 5.596696E+00 5.399813E+00 + 6.325562E+00 6.056050E+00 5.818088E+00 5.604621E+00 5.408813E+00 + 6.286805E+00 6.030166E+00 5.800717E+00 5.591915E+00 5.397826E+00 + 6.234974E+00 5.990089E+00 5.768542E+00 5.564343E+00 5.372272E+00 + 6.202277E+00 5.964221E+00 5.747249E+00 5.545760E+00 5.354886E+00 + +Band: 5, gas: 7, k-terms: 1 + 1.731249E+02 1.616199E+02 1.554668E+02 1.438981E+02 1.385164E+02 + 1.729643E+02 1.614857E+02 1.555034E+02 1.438685E+02 1.384124E+02 + 1.728041E+02 1.613517E+02 1.555400E+02 1.438389E+02 1.383086E+02 + 1.726442E+02 1.611792E+02 1.555765E+02 1.438094E+02 1.382049E+02 + 1.724798E+02 1.609988E+02 1.556141E+02 1.437791E+02 1.380982E+02 + 1.723206E+02 1.608241E+02 1.556506E+02 1.437499E+02 1.379948E+02 + 1.721618E+02 1.606496E+02 1.556869E+02 1.437207E+02 1.378917E+02 + 1.719935E+02 1.604645E+02 1.556268E+02 1.436898E+02 1.377822E+02 + 1.717862E+02 1.602362E+02 1.552977E+02 1.436517E+02 1.376473E+02 + 1.712852E+02 1.596833E+02 1.545018E+02 1.435601E+02 1.373209E+02 + 1.701205E+02 1.583911E+02 1.526465E+02 1.433402E+02 1.365595E+02 + 1.683916E+02 1.564547E+02 1.498781E+02 1.424522E+02 1.356026E+02 + 1.665429E+02 1.554319E+02 1.468974E+02 1.415001E+02 1.350956E+02 + 1.646890E+02 1.548191E+02 1.445831E+02 1.405424E+02 1.345810E+02 + 1.628424E+02 1.551352E+02 1.441694E+02 1.394603E+02 1.335049E+02 + 1.609715E+02 1.556198E+02 1.437746E+02 1.380820E+02 1.328385E+02 + 1.586164E+02 1.529694E+02 1.433849E+02 1.366921E+02 1.321662E+02 + 1.562436E+02 1.495772E+02 1.423558E+02 1.355515E+02 1.299742E+02 + 1.553000E+02 1.462500E+02 1.412939E+02 1.349852E+02 1.290920E+02 + 1.547925E+02 1.444544E+02 1.402462E+02 1.344210E+02 1.282214E+02 + 1.553360E+02 1.440046E+02 1.388884E+02 1.332281E+02 1.273518E+02 + 1.546186E+02 1.435735E+02 1.373688E+02 1.324946E+02 1.265039E+02 + 1.511415E+02 1.428570E+02 1.359413E+02 1.303905E+02 1.257116E+02 + 1.488053E+02 1.421090E+02 1.354203E+02 1.297691E+02 1.251808E+02 + 1.489548E+02 1.421568E+02 1.354458E+02 1.298088E+02 1.252147E+02 + 1.507924E+02 1.427450E+02 1.357979E+02 1.302975E+02 1.256322E+02 + 1.533317E+02 1.434261E+02 1.368408E+02 1.322385E+02 1.262103E+02 + 1.556335E+02 1.437636E+02 1.380432E+02 1.328198E+02 1.268797E+02 + 1.551954E+02 1.441198E+02 1.392888E+02 1.334218E+02 1.275761E+02 + 1.547502E+02 1.444899E+02 1.403279E+02 1.344652E+02 1.282894E+02 + 1.552448E+02 1.459787E+02 1.412075E+02 1.349389E+02 1.290202E+02 + 1.558041E+02 1.487231E+02 1.420827E+02 1.354064E+02 1.297473E+02 + 1.574992E+02 1.513696E+02 1.429302E+02 1.360351E+02 1.304513E+02 + 1.592728E+02 1.539116E+02 1.434924E+02 1.370788E+02 1.323541E+02 + 1.610042E+02 1.556130E+02 1.437800E+02 1.381014E+02 1.328478E+02 + 1.632946E+02 1.530503E+02 1.455073E+02 1.383784E+02 1.332955E+02 + 1.639318E+02 1.535681E+02 1.461164E+02 1.399296E+02 1.339582E+02 + 1.645803E+02 1.531324E+02 1.468377E+02 1.405241E+02 1.346067E+02 + 1.651672E+02 1.534974E+02 1.466080E+02 1.410362E+02 1.352424E+02 + 1.656242E+02 1.538034E+02 1.473258E+02 1.414391E+02 1.357728E+02 + 1.658337E+02 1.559344E+02 1.492121E+02 1.416925E+02 1.361359E+02 + 1.677916E+02 1.559107E+02 1.492225E+02 1.419823E+02 1.359329E+02 + 1.687273E+02 1.567771E+02 1.494054E+02 1.426988E+02 1.362496E+02 + 1.680853E+02 1.541348E+02 1.496999E+02 1.430907E+02 1.365542E+02 + 1.702626E+02 1.540675E+02 1.506181E+02 1.434921E+02 1.369921E+02 + 1.714267E+02 1.501037E+02 1.514826E+02 1.436442E+02 1.372572E+02 + 1.716005E+02 1.455737E+02 1.512951E+02 1.437072E+02 1.373113E+02 + 1.626505E+02 1.496084E+02 1.503224E+02 1.430103E+02 1.368347E+02 + 1.702112E+02 1.474637E+02 1.510045E+02 1.439975E+02 1.375115E+02 + 1.699870E+02 1.449029E+02 1.495797E+02 1.434790E+02 1.371221E+02 + 1.682678E+02 1.501715E+02 1.485024E+02 1.415509E+02 1.362258E+02 + 1.656183E+02 1.507634E+02 1.463171E+02 1.393909E+02 1.345624E+02 + 1.509931E+02 1.498716E+02 1.432399E+02 1.372807E+02 1.327177E+02 + 1.440963E+02 1.482657E+02 1.412229E+02 1.354411E+02 1.292511E+02 + 1.524630E+02 1.450130E+02 1.384306E+02 1.338123E+02 1.272025E+02 + 1.500606E+02 1.420795E+02 1.366011E+02 1.321182E+02 1.252560E+02 + 1.469664E+02 1.399824E+02 1.350090E+02 1.298955E+02 1.253691E+02 + 1.441963E+02 1.376504E+02 1.333014E+02 1.270996E+02 1.228769E+02 + 1.428781E+02 1.365441E+02 1.323654E+02 1.276057E+02 1.234550E+02 + +Band: 5, gas: 8, k-terms: 1 + 1.305409E+02 1.367576E+02 1.425637E+02 1.466278E+02 1.500184E+02 + 1.306328E+02 1.368261E+02 1.426416E+02 1.466956E+02 1.500571E+02 + 1.307244E+02 1.342642E+02 1.427192E+02 1.467632E+02 1.500956E+02 + 1.308155E+02 1.376249E+02 1.427965E+02 1.468306E+02 1.501340E+02 + 1.309092E+02 1.376745E+02 1.428758E+02 1.468999E+02 1.501735E+02 + 1.309997E+02 1.377221E+02 1.429524E+02 1.469669E+02 1.502115E+02 + 1.310898E+02 1.377695E+02 1.430061E+02 1.470336E+02 1.502494E+02 + 1.311851E+02 1.378195E+02 1.430416E+02 1.471044E+02 1.502896E+02 + 1.313024E+02 1.378807E+02 1.430851E+02 1.471914E+02 1.503389E+02 + 1.315846E+02 1.380272E+02 1.431886E+02 1.474014E+02 1.504575E+02 + 1.322350E+02 1.383591E+02 1.434206E+02 1.478674E+02 1.507306E+02 + 1.331861E+02 1.388296E+02 1.437419E+02 1.482961E+02 1.521155E+02 + 1.341849E+02 1.396954E+02 1.443792E+02 1.487475E+02 1.538787E+02 + 1.351682E+02 1.407519E+02 1.450983E+02 1.491926E+02 1.556076E+02 + 1.361301E+02 1.418466E+02 1.460083E+02 1.496630E+02 1.551490E+02 + 1.376819E+02 1.428878E+02 1.469104E+02 1.501794E+02 1.562196E+02 + 1.383023E+02 1.433812E+02 1.478032E+02 1.506835E+02 1.572777E+02 + 1.388790E+02 1.437750E+02 1.483421E+02 1.522957E+02 1.534611E+02 + 1.399233E+02 1.445355E+02 1.488441E+02 1.542548E+02 1.538093E+02 + 1.410855E+02 1.453583E+02 1.493284E+02 1.561326E+02 1.541509E+02 + 1.422832E+02 1.463846E+02 1.498793E+02 1.555958E+02 1.544901E+02 + 1.431736E+02 1.473706E+02 1.504402E+02 1.567653E+02 1.548191E+02 + 1.435990E+02 1.481016E+02 1.509485E+02 1.532961E+02 1.551248E+02 + 1.439127E+02 1.484598E+02 1.527558E+02 1.535422E+02 1.553287E+02 + 1.438758E+02 1.484370E+02 1.526669E+02 1.535265E+02 1.553157E+02 + 1.436391E+02 1.481555E+02 1.509985E+02 1.533330E+02 1.551553E+02 + 1.433365E+02 1.477085E+02 1.506304E+02 1.571656E+02 1.549325E+02 + 1.429165E+02 1.469355E+02 1.501937E+02 1.562494E+02 1.546735E+02 + 1.419782E+02 1.461214E+02 1.497282E+02 1.552833E+02 1.544028E+02 + 1.409903E+02 1.452774E+02 1.492910E+02 1.559881E+02 1.541243E+02 + 1.400186E+02 1.446008E+02 1.488844E+02 1.544117E+02 1.538375E+02 + 1.390504E+02 1.439330E+02 1.484723E+02 1.528045E+02 1.535509E+02 + 1.385799E+02 1.435725E+02 1.480662E+02 1.509157E+02 1.532720E+02 + 1.381342E+02 1.432639E+02 1.475565E+02 1.505449E+02 1.569856E+02 + 1.376730E+02 1.428734E+02 1.468978E+02 1.501723E+02 1.562046E+02 + 1.374980E+02 1.420789E+02 1.466936E+02 1.499057E+02 1.547688E+02 + 1.360946E+02 1.411653E+02 1.463824E+02 1.494435E+02 1.546333E+02 + 1.346705E+02 1.399995E+02 1.451187E+02 1.493018E+02 1.546577E+02 + 1.332642E+02 1.390104E+02 1.448404E+02 1.491611E+02 1.545839E+02 + 1.319130E+02 1.379461E+02 1.445537E+02 1.490341E+02 1.545227E+02 + 1.306822E+02 1.381198E+02 1.449080E+02 1.489553E+02 1.545100E+02 + 1.316292E+02 1.367103E+02 1.446041E+02 1.482508E+02 1.519179E+02 + 1.311408E+02 1.365776E+02 1.445383E+02 1.483888E+02 1.518814E+02 + 1.337988E+02 1.368041E+02 1.447561E+02 1.491453E+02 1.519376E+02 + 1.333753E+02 1.362929E+02 1.442376E+02 1.488123E+02 1.518113E+02 + 1.325516E+02 1.356102E+02 1.433793E+02 1.488858E+02 1.518773E+02 + 1.310571E+02 1.351941E+02 1.429386E+02 1.483249E+02 1.515802E+02 + 1.320617E+02 1.372071E+02 1.440791E+02 1.492068E+02 1.521005E+02 + 1.340557E+02 1.361345E+02 1.437165E+02 1.491276E+02 1.521828E+02 + 1.344308E+02 1.360552E+02 1.453569E+02 1.493675E+02 1.523882E+02 + 1.362537E+02 1.393570E+02 1.462595E+02 1.506212E+02 1.536953E+02 + 1.381470E+02 1.415665E+02 1.474086E+02 1.519438E+02 1.558863E+02 + 1.368965E+02 1.425660E+02 1.489647E+02 1.524382E+02 1.563301E+02 + 1.384187E+02 1.473446E+02 1.506823E+02 1.550034E+02 1.566137E+02 + 1.418845E+02 1.480425E+02 1.529105E+02 1.559906E+02 1.557865E+02 + 1.463833E+02 1.500569E+02 1.535996E+02 1.570739E+02 1.571954E+02 + 1.477735E+02 1.519375E+02 1.555117E+02 1.577812E+02 1.595202E+02 + 1.495573E+02 1.534310E+02 1.567279E+02 1.579307E+02 1.595545E+02 + 1.510573E+02 1.547238E+02 1.573295E+02 1.592211E+02 1.607547E+02 + +Band: 5, gas: 10, k-terms: 1 + 1.088154E+02 1.062774E+02 1.048683E+02 1.037758E+02 1.042159E+02 + 1.087846E+02 1.062650E+02 1.048769E+02 1.037756E+02 1.042229E+02 + 1.087541E+02 1.062530E+02 1.048859E+02 1.037754E+02 1.042298E+02 + 1.087240E+02 1.060093E+02 1.048951E+02 1.037753E+02 1.042367E+02 + 1.086929E+02 1.059979E+02 1.049045E+02 1.037749E+02 1.042435E+02 + 1.086637E+02 1.059876E+02 1.049143E+02 1.037749E+02 1.042504E+02 + 1.086349E+02 1.059778E+02 1.037460E+02 1.037749E+02 1.042572E+02 + 1.086036E+02 1.059670E+02 1.037110E+02 1.037744E+02 1.042638E+02 + 1.085616E+02 1.059515E+02 1.036658E+02 1.037711E+02 1.042693E+02 + 1.084383E+02 1.058982E+02 1.035462E+02 1.037479E+02 1.042666E+02 + 1.081408E+02 1.057664E+02 1.032480E+02 1.036791E+02 1.047014E+02 + 1.077213E+02 1.055856E+02 1.027656E+02 1.036446E+02 1.030210E+02 + 1.073104E+02 1.054186E+02 1.044175E+02 1.045129E+02 1.028386E+02 + 1.070689E+02 1.052792E+02 1.041849E+02 1.044626E+02 1.026514E+02 + 1.066983E+02 1.051681E+02 1.044658E+02 1.044133E+02 1.024594E+02 + 1.061298E+02 1.050875E+02 1.038924E+02 1.043660E+02 1.022684E+02 + 1.058702E+02 1.033308E+02 1.037591E+02 1.047263E+02 1.016867E+02 + 1.056500E+02 1.027367E+02 1.036980E+02 1.029502E+02 1.060264E+02 + 1.054717E+02 1.044471E+02 1.045649E+02 1.027528E+02 1.061322E+02 + 1.053303E+02 1.046176E+02 1.045094E+02 1.025532E+02 1.062419E+02 + 1.052226E+02 1.040308E+02 1.044552E+02 1.022798E+02 1.063568E+02 + 1.036311E+02 1.038844E+02 1.044028E+02 1.021908E+02 1.064740E+02 + 1.030425E+02 1.038167E+02 1.047231E+02 1.060290E+02 1.065886E+02 + 1.047133E+02 1.037325E+02 1.028509E+02 1.061042E+02 1.066709E+02 + 1.047384E+02 1.037496E+02 1.028491E+02 1.061091E+02 1.066760E+02 + 1.029936E+02 1.038354E+02 1.047257E+02 1.060663E+02 1.066284E+02 + 1.034428E+02 1.038850E+02 1.044360E+02 1.015903E+02 1.065605E+02 + 1.052857E+02 1.040205E+02 1.044969E+02 1.021862E+02 1.064830E+02 + 1.053814E+02 1.046515E+02 1.045582E+02 1.023514E+02 1.064049E+02 + 1.054992E+02 1.047712E+02 1.046205E+02 1.024962E+02 1.063279E+02 + 1.056412E+02 1.045891E+02 1.046844E+02 1.026353E+02 1.062521E+02 + 1.058049E+02 1.048180E+02 1.038176E+02 1.027657E+02 1.061802E+02 + 1.059855E+02 1.031289E+02 1.039356E+02 1.047446E+02 1.061141E+02 + 1.061810E+02 1.035810E+02 1.039874E+02 1.045243E+02 1.020767E+02 + 1.063938E+02 1.054056E+02 1.041047E+02 1.045756E+02 1.021389E+02 + 1.069216E+02 1.054833E+02 1.042211E+02 1.046252E+02 1.022020E+02 + 1.072009E+02 1.055750E+02 1.048362E+02 1.046751E+02 1.023967E+02 + 1.075052E+02 1.056815E+02 1.045627E+02 1.047256E+02 1.024984E+02 + 1.077019E+02 1.057979E+02 1.047479E+02 1.047748E+02 1.025900E+02 + 1.079852E+02 1.059165E+02 1.049131E+02 1.038969E+02 1.026674E+02 + 1.096787E+02 1.074470E+02 1.030464E+02 1.038514E+02 1.028663E+02 + 1.097732E+02 1.075367E+02 1.033516E+02 1.039503E+02 1.046221E+02 + 1.093990E+02 1.071790E+02 1.035619E+02 1.040369E+02 1.046785E+02 + 1.071608E+02 1.060278E+02 1.032187E+02 1.037805E+02 1.043797E+02 + 1.069811E+02 1.059103E+02 1.033092E+02 1.039325E+02 1.044797E+02 + 1.093593E+02 1.066123E+02 1.039133E+02 1.041228E+02 1.045559E+02 + 1.094486E+02 1.069817E+02 1.033933E+02 1.039875E+02 1.044059E+02 + 1.076824E+02 1.057945E+02 1.029880E+02 1.034846E+02 1.041694E+02 + 1.060661E+02 1.065861E+02 1.036913E+02 1.032070E+02 1.040459E+02 + 1.063336E+02 1.056981E+02 1.035530E+02 1.037171E+02 1.043479E+02 + 1.061028E+02 1.059800E+02 1.035262E+02 1.038679E+02 1.029766E+02 + 1.075548E+02 1.052545E+02 1.038870E+02 1.042259E+02 1.025996E+02 + 1.066716E+02 1.051281E+02 1.041442E+02 1.045377E+02 1.023804E+02 + 1.058616E+02 1.033883E+02 1.039732E+02 1.029141E+02 1.051576E+02 + 1.054450E+02 1.036883E+02 1.040964E+02 1.025533E+02 1.050830E+02 + 1.049065E+02 1.044724E+02 1.045478E+02 1.029119E+02 1.053127E+02 + 1.036742E+02 1.043090E+02 1.037981E+02 1.052034E+02 1.057506E+02 + 1.035992E+02 1.032011E+02 1.034067E+02 1.039912E+02 1.045655E+02 + 1.028480E+02 1.021811E+02 1.033367E+02 1.026621E+02 1.032876E+02 + +Band: 5, gas: 11, k-terms: 1 + 4.709831E+01 5.669799E+01 6.525496E+01 7.336582E+01 8.034306E+01 + 4.722568E+01 5.682256E+01 6.538492E+01 7.344285E+01 8.040470E+01 + 4.735307E+01 5.694708E+01 6.551511E+01 7.351934E+01 8.046616E+01 + 4.748047E+01 5.624045E+01 6.564554E+01 7.359531E+01 8.052744E+01 + 4.761178E+01 5.636774E+01 6.578017E+01 7.367314E+01 8.059044E+01 + 4.773921E+01 5.649125E+01 6.591107E+01 7.374805E+01 8.065138E+01 + 4.786666E+01 5.661487E+01 6.604220E+01 7.382244E+01 8.071215E+01 + 4.800189E+01 5.674636E+01 6.618151E+01 7.390102E+01 8.077649E+01 + 4.816822E+01 5.690902E+01 6.635295E+01 7.399772E+01 8.085554E+01 + 4.856766E+01 5.730483E+01 6.676413E+01 7.423188E+01 8.104542E+01 + 4.950245E+01 5.823635E+01 6.772820E+01 7.565234E+01 8.172717E+01 + 5.091524E+01 5.964756E+01 6.919337E+01 7.666049E+01 8.298575E+01 + 5.246120E+01 6.082204E+01 7.020145E+01 7.787015E+01 8.413082E+01 + 5.404855E+01 6.246258E+01 7.094397E+01 7.865748E+01 8.528447E+01 + 5.566695E+01 6.415316E+01 7.263835E+01 7.980232E+01 8.685438E+01 + 5.637999E+01 6.584222E+01 7.366895E+01 8.060818E+01 8.797435E+01 + 5.807523E+01 6.758985E+01 7.554040E+01 8.158798E+01 8.902899E+01 + 5.981021E+01 6.938834E+01 7.677285E+01 8.309885E+01 9.096049E+01 + 6.117082E+01 7.037736E+01 7.802577E+01 8.437816E+01 9.207318E+01 + 6.298957E+01 7.188672E+01 7.888379E+01 8.564255E+01 9.318121E+01 + 6.486679E+01 7.306573E+01 8.014159E+01 8.738024E+01 9.429801E+01 + 6.675817E+01 7.417534E+01 8.102597E+01 8.853059E+01 9.539686E+01 + 6.858250E+01 7.620988E+01 8.226274E+01 9.048147E+01 9.643292E+01 + 6.965730E+01 7.705450E+01 8.339296E+01 9.126365E+01 9.713450E+01 + 6.964487E+01 7.700110E+01 8.333465E+01 9.122187E+01 9.709873E+01 + 6.878444E+01 7.633847E+01 8.238560E+01 9.062039E+01 9.656207E+01 + 6.745062E+01 7.453959E+01 8.133421E+01 8.894277E+01 9.581899E+01 + 6.593862E+01 7.367906E+01 8.063888E+01 8.804008E+01 9.496255E+01 + 6.440100E+01 7.276036E+01 7.991204E+01 8.704892E+01 9.407712E+01 + 6.286145E+01 7.179975E+01 7.878513E+01 8.554425E+01 9.317615E+01 + 6.131968E+01 7.045111E+01 7.806183E+01 8.447879E+01 9.225938E+01 + 5.982005E+01 6.969832E+01 7.708778E+01 8.341909E+01 9.135390E+01 + 5.890174E+01 6.851604E+01 7.613533E+01 8.214327E+01 9.048353E+01 + 5.760058E+01 6.718230E+01 7.435826E+01 8.120179E+01 8.878402E+01 + 5.634212E+01 6.589490E+01 7.362618E+01 8.060936E+01 8.801953E+01 + 5.616154E+01 6.464958E+01 7.289209E+01 8.002354E+01 8.727006E+01 + 5.499706E+01 6.340563E+01 7.213522E+01 7.900211E+01 8.637015E+01 + 5.382952E+01 6.216287E+01 7.079698E+01 7.843032E+01 8.505755E+01 + 5.272137E+01 6.098643E+01 7.031211E+01 7.787757E+01 8.424231E+01 + 5.172830E+01 5.993363E+01 6.975108E+01 7.717439E+01 8.350163E+01 + 5.007442E+01 5.930226E+01 6.928112E+01 7.610804E+01 8.255298E+01 + 4.938086E+01 5.864985E+01 6.857684E+01 7.558832E+01 8.204855E+01 + 4.872287E+01 5.801107E+01 6.790395E+01 7.509086E+01 8.153945E+01 + 4.806284E+01 5.735452E+01 6.722445E+01 7.433071E+01 8.113392E+01 + 4.773759E+01 5.703142E+01 6.616478E+01 7.405427E+01 8.092130E+01 + 4.757041E+01 5.676310E+01 6.550681E+01 7.372929E+01 8.068286E+01 + 4.702482E+01 5.616534E+01 6.518642E+01 7.330233E+01 8.036399E+01 + 4.699420E+01 5.615702E+01 6.513465E+01 7.330164E+01 8.035443E+01 + 4.678243E+01 5.618023E+01 6.484789E+01 7.346323E+01 8.045994E+01 + 4.766379E+01 5.687780E+01 6.552745E+01 7.380980E+01 8.075468E+01 + 4.979602E+01 5.891336E+01 6.798444E+01 7.588528E+01 8.232571E+01 + 5.313441E+01 6.221249E+01 7.058302E+01 7.826472E+01 8.510698E+01 + 5.630444E+01 6.516443E+01 7.344065E+01 8.042849E+01 8.776244E+01 + 5.986432E+01 6.834606E+01 7.647914E+01 8.296319E+01 8.919594E+01 + 6.304916E+01 7.167404E+01 7.892105E+01 8.618666E+01 9.178905E+01 + 6.644185E+01 7.472008E+01 8.110779E+01 8.872268E+01 9.400504E+01 + 6.960287E+01 7.732283E+01 8.400457E+01 9.053682E+01 9.617842E+01 + 7.280824E+01 7.965236E+01 8.716370E+01 9.261801E+01 9.801981E+01 + 7.476047E+01 8.101330E+01 8.870421E+01 9.471097E+01 1.000144E+02 + +Band: 6, gas: 3, k-terms: 10 + 1.317705E-04 1.664092E-04 2.005625E-04 2.366515E-04 2.774309E-04 + 1.592257E-04 2.007282E-04 2.409928E-04 2.828005E-04 3.300126E-04 + 1.924734E-04 2.418244E-04 2.896517E-04 3.381813E-04 3.926304E-04 + 2.327358E-04 2.910808E-04 3.482390E-04 4.046212E-04 4.674631E-04 + 2.812518E-04 3.506083E-04 4.184431E-04 4.846775E-04 5.571544E-04 + 3.401579E-04 4.224309E-04 5.028945E-04 5.808473E-04 6.642955E-04 + 4.114459E-04 5.086055E-04 6.038450E-04 6.960019E-04 7.924569E-04 + 4.975711E-04 6.121599E-04 7.253177E-04 8.338389E-04 9.452409E-04 + 6.021420E-04 7.376241E-04 8.718919E-04 1.000099E-03 1.128080E-03 + 7.318136E-04 8.933055E-04 1.051849E-03 1.203989E-03 1.351495E-03 + 9.006784E-04 1.092371E-03 1.279497E-03 1.458349E-03 1.629737E-03 + 1.119655E-03 1.344527E-03 1.566685E-03 1.775070E-03 1.974024E-03 + 1.393085E-03 1.657776E-03 1.918231E-03 2.162259E-03 2.394556E-03 + 1.731467E-03 2.043815E-03 2.348510E-03 2.632073E-03 2.903235E-03 + 2.147327E-03 2.518759E-03 2.873372E-03 3.202670E-03 3.521007E-03 + 2.662017E-03 3.098155E-03 3.512249E-03 3.896054E-03 4.266392E-03 + 3.297361E-03 3.805818E-03 4.291093E-03 4.737944E-03 5.169134E-03 + 4.074842E-03 4.670127E-03 5.235554E-03 5.761498E-03 6.258114E-03 + 5.035354E-03 5.732843E-03 6.385951E-03 6.997111E-03 7.570145E-03 + 6.211288E-03 7.023910E-03 7.786551E-03 8.495453E-03 9.153003E-03 + 7.652808E-03 8.597732E-03 9.493251E-03 1.030788E-02 1.105927E-02 + 9.412014E-03 1.051218E-02 1.155960E-02 1.250116E-02 1.336166E-02 + 1.155034E-02 1.282894E-02 1.405811E-02 1.514044E-02 1.612986E-02 + 1.406067E-02 1.555984E-02 1.699675E-02 1.826081E-02 1.938955E-02 + 1.687895E-02 1.862106E-02 2.032382E-02 2.182380E-02 2.312866E-02 + 2.007573E-02 2.209281E-02 2.412017E-02 2.592482E-02 2.745387E-02 + 2.380757E-02 2.615607E-02 2.852631E-02 3.070312E-02 3.252197E-02 + 2.820301E-02 3.093473E-02 3.366252E-02 3.625945E-02 3.846542E-02 + 3.338496E-02 3.658095E-02 3.971436E-02 4.275754E-02 4.543047E-02 + 3.948748E-02 4.324315E-02 4.684750E-02 5.039415E-02 5.358577E-02 + 4.672094E-02 5.110750E-02 5.521401E-02 5.927654E-02 6.310270E-02 + 5.528247E-02 6.037660E-02 6.507379E-02 6.971807E-02 7.420934E-02 + 6.536052E-02 7.132185E-02 7.667089E-02 8.194604E-02 8.721270E-02 + 7.717902E-02 8.418529E-02 9.030238E-02 9.629553E-02 1.023599E-01 + 9.102818E-02 9.925637E-02 1.062795E-01 1.131077E-01 1.200497E-01 + 1.072887E-01 1.169726E-01 1.249685E-01 1.327839E-01 1.406732E-01 + 1.262033E-01 1.376785E-01 1.466996E-01 1.555465E-01 1.645167E-01 + 1.480211E-01 1.616929E-01 1.720590E-01 1.817923E-01 1.919195E-01 + 1.732435E-01 1.895413E-01 2.014208E-01 2.121599E-01 2.233686E-01 + 2.024279E-01 2.220054E-01 2.354640E-01 2.473471E-01 2.595835E-01 + 2.365350E-01 2.598194E-01 2.750079E-01 2.881401E-01 3.013919E-01 + 2.760281E-01 3.034927E-01 3.210163E-01 3.351456E-01 3.492637E-01 + 3.214378E-01 3.538157E-01 3.736049E-01 3.888793E-01 4.037377E-01 + 3.729596E-01 4.110004E-01 4.332488E-01 4.499917E-01 4.655558E-01 + 4.309194E-01 4.759943E-01 5.008818E-01 5.192152E-01 5.357000E-01 + 4.964071E-01 5.499499E-01 5.776949E-01 5.976790E-01 6.151550E-01 + 5.718103E-01 6.350097E-01 6.654332E-01 6.866005E-01 7.051201E-01 + 6.586503E-01 7.320537E-01 7.646706E-01 7.868450E-01 8.058963E-01 + 7.570508E-01 8.406819E-01 8.752165E-01 8.977836E-01 9.174309E-01 + 8.727272E-01 9.633782E-01 9.988255E-01 1.021269E+00 1.040798E+00 + 1.025700E+00 1.109591E+00 1.139726E+00 1.160877E+00 1.178258E+00 + 1.205027E+00 1.269098E+00 1.295030E+00 1.313059E+00 1.326913E+00 + 1.392842E+00 1.438067E+00 1.459597E+00 1.472662E+00 1.483084E+00 + 1.586057E+00 1.613483E+00 1.628402E+00 1.636460E+00 1.642958E+00 + 1.774902E+00 1.791930E+00 1.799299E+00 1.802827E+00 1.805622E+00 + 1.961999E+00 1.969892E+00 1.972134E+00 1.972213E+00 1.971388E+00 + 2.144857E+00 2.147912E+00 2.146734E+00 2.142626E+00 2.136991E+00 + 2.324711E+00 2.324552E+00 2.317723E+00 2.309132E+00 2.299776E+00 + 2.458618E+00 2.454853E+00 2.444242E+00 2.432721E+00 2.421050E+00 + 2.254380E-03 4.057094E-03 7.021076E-03 1.171264E-02 1.876206E-02 + 2.603342E-03 4.617216E-03 7.859851E-03 1.288942E-02 2.029469E-02 + 3.004248E-03 5.249580E-03 8.809231E-03 1.421691E-02 2.200800E-02 + 3.470652E-03 5.979855E-03 9.885073E-03 1.570945E-02 2.393791E-02 + 4.012415E-03 6.825362E-03 1.111318E-02 1.739049E-02 2.611975E-02 + 4.637580E-03 7.801067E-03 1.252857E-02 1.930170E-02 2.854765E-02 + 5.369551E-03 8.914542E-03 1.413075E-02 2.146429E-02 3.128871E-02 + 6.225675E-03 1.019199E-02 1.596642E-02 2.391246E-02 3.435726E-02 + 7.232136E-03 1.167577E-02 1.808691E-02 2.670220E-02 3.785430E-02 + 8.493287E-03 1.354579E-02 2.069880E-02 3.014407E-02 4.211207E-02 + 1.024807E-02 1.609109E-02 2.420356E-02 3.468905E-02 4.769498E-02 + 1.263609E-02 1.949805E-02 2.878470E-02 4.053731E-02 5.480784E-02 + 1.562328E-02 2.365911E-02 3.429772E-02 4.746793E-02 6.318973E-02 + 1.930004E-02 2.868061E-02 4.080596E-02 5.548274E-02 7.290113E-02 + 2.377259E-02 3.466324E-02 4.844150E-02 6.485714E-02 8.412032E-02 + 2.915521E-02 4.170572E-02 5.731938E-02 7.568169E-02 9.694867E-02 + 3.570995E-02 5.006792E-02 6.772649E-02 8.831216E-02 1.117884E-01 + 4.358719E-02 6.000171E-02 7.993144E-02 1.030143E-01 1.288887E-01 + 5.296046E-02 7.169683E-02 9.425163E-02 1.199674E-01 1.484471E-01 + 6.418245E-02 8.551299E-02 1.109864E-01 1.396325E-01 1.709042E-01 + 7.762058E-02 1.019805E-01 1.306889E-01 1.624634E-01 1.967607E-01 + 9.361002E-02 1.212989E-01 1.535399E-01 1.888495E-01 2.263763E-01 + 1.124139E-01 1.439034E-01 1.797622E-01 2.188294E-01 2.600895E-01 + 1.328314E-01 1.681471E-01 2.078212E-01 2.508414E-01 2.960351E-01 + 1.520740E-01 1.907037E-01 2.341612E-01 2.813887E-01 3.303209E-01 + 1.708952E-01 2.126585E-01 2.601156E-01 3.113918E-01 3.644026E-01 + 1.911572E-01 2.363837E-01 2.876836E-01 3.431724E-01 4.007652E-01 + 2.138684E-01 2.629317E-01 3.181802E-01 3.782675E-01 4.405908E-01 + 2.399021E-01 2.930712E-01 3.531709E-01 4.180010E-01 4.852571E-01 + 2.697722E-01 3.280905E-01 3.932957E-01 4.632707E-01 5.359884E-01 + 3.041264E-01 3.682912E-01 4.392278E-01 5.148996E-01 5.932300E-01 + 3.437824E-01 4.149379E-01 4.919658E-01 5.741251E-01 6.583272E-01 + 3.895334E-01 4.683208E-01 5.529998E-01 6.417052E-01 7.331551E-01 + 4.420372E-01 5.295644E-01 6.223746E-01 7.187312E-01 8.188678E-01 + 5.014079E-01 5.985898E-01 7.008208E-01 8.067285E-01 9.160447E-01 + 5.688105E-01 6.764443E-01 7.896347E-01 9.074366E-01 1.026793E+00 + 6.428384E-01 7.647064E-01 8.904826E-01 1.020422E+00 1.150794E+00 + 7.238998E-01 8.625885E-01 1.004509E+00 1.147726E+00 1.289804E+00 + 8.138368E-01 9.717325E-01 1.131928E+00 1.291330E+00 1.446145E+00 + 9.128410E-01 1.094204E+00 1.274381E+00 1.450691E+00 1.620224E+00 + 1.023275E+00 1.231262E+00 1.433907E+00 1.628804E+00 1.813463E+00 + 1.146101E+00 1.380828E+00 1.609172E+00 1.823649E+00 2.024373E+00 + 1.276949E+00 1.540071E+00 1.798148E+00 2.034299E+00 2.250060E+00 + 1.415460E+00 1.707208E+00 1.998040E+00 2.257905E+00 2.488342E+00 + 1.560307E+00 1.879740E+00 2.201982E+00 2.488472E+00 2.734813E+00 + 1.711811E+00 2.059782E+00 2.413471E+00 2.724840E+00 2.985915E+00 + 1.877014E+00 2.253026E+00 2.633355E+00 2.968339E+00 3.241453E+00 + 2.049496E+00 2.450955E+00 2.857902E+00 3.213460E+00 3.495366E+00 + 2.223921E+00 2.644208E+00 3.077596E+00 3.445487E+00 3.736472E+00 + 2.409716E+00 2.855943E+00 3.306881E+00 3.679148E+00 3.969891E+00 + 2.678791E+00 3.154317E+00 3.598038E+00 3.956742E+00 4.224005E+00 + 2.999220E+00 3.478056E+00 3.902220E+00 4.226618E+00 4.465036E+00 + 3.319214E+00 3.785034E+00 4.173057E+00 4.454021E+00 4.663672E+00 + 3.622145E+00 4.064143E+00 4.396525E+00 4.637103E+00 4.822086E+00 + 3.895631E+00 4.294160E+00 4.569384E+00 4.777903E+00 4.957785E+00 + 4.140595E+00 4.459756E+00 4.695990E+00 4.894681E+00 5.062744E+00 + 4.325076E+00 4.589878E+00 4.802749E+00 4.987905E+00 5.147708E+00 + 4.456090E+00 4.685067E+00 4.888657E+00 5.064944E+00 5.215847E+00 + 4.527059E+00 4.738781E+00 4.936928E+00 5.105768E+00 5.250216E+00 + 9.873915E-03 1.739306E-02 3.044386E-02 5.105604E-02 8.127750E-02 + 1.128851E-02 1.946034E-02 3.328533E-02 5.467038E-02 8.540378E-02 + 1.291739E-02 2.181380E-02 3.646657E-02 5.875109E-02 9.010739E-02 + 1.480767E-02 2.448390E-02 4.006771E-02 6.335377E-02 9.539701E-02 + 1.697342E-02 2.752930E-02 4.419504E-02 6.857100E-02 1.014676E-01 + 1.945296E-02 3.103344E-02 4.888156E-02 7.437612E-02 1.082850E-01 + 2.230118E-02 3.503597E-02 5.415012E-02 8.095768E-02 1.160623E-01 + 2.555651E-02 3.958057E-02 6.011291E-02 8.832217E-02 1.249406E-01 + 2.935819E-02 4.486923E-02 6.684939E-02 9.678267E-02 1.351906E-01 + 3.409307E-02 5.138207E-02 7.512662E-02 1.072098E-01 1.478714E-01 + 4.052793E-02 6.011373E-02 8.618750E-02 1.211073E-01 1.650172E-01 + 4.907173E-02 7.147549E-02 1.005136E-01 1.389932E-01 1.872562E-01 + 5.957025E-02 8.512205E-02 1.176229E-01 1.602249E-01 2.133271E-01 + 7.218614E-02 1.012121E-01 1.376595E-01 1.851419E-01 2.434118E-01 + 8.716549E-02 1.201494E-01 1.611520E-01 2.142044E-01 2.778470E-01 + 1.049212E-01 1.424220E-01 1.884918E-01 2.476742E-01 3.169430E-01 + 1.259720E-01 1.687497E-01 2.208456E-01 2.867033E-01 3.621950E-01 + 1.510769E-01 2.000818E-01 2.589518E-01 3.315651E-01 4.142605E-01 + 1.808658E-01 2.369291E-01 3.035994E-01 3.836766E-01 4.740984E-01 + 2.163972E-01 2.806712E-01 3.557623E-01 4.442892E-01 5.440396E-01 + 2.591048E-01 3.324136E-01 4.170144E-01 5.157675E-01 6.253283E-01 + 3.101760E-01 3.933123E-01 4.884568E-01 5.986881E-01 7.191972E-01 + 3.701491E-01 4.646433E-01 5.721810E-01 6.946970E-01 8.265813E-01 + 4.355682E-01 5.422676E-01 6.636505E-01 7.989158E-01 9.415091E-01 + 4.975940E-01 6.175775E-01 7.526872E-01 8.992378E-01 1.053211E+00 + 5.585473E-01 6.933693E-01 8.418605E-01 1.000975E+00 1.167974E+00 + 6.236525E-01 7.752881E-01 9.387437E-01 1.112590E+00 1.294263E+00 + 6.951393E-01 8.660690E-01 1.046947E+00 1.238855E+00 1.437693E+00 + 7.766687E-01 9.675594E-01 1.170175E+00 1.382245E+00 1.602467E+00 + 8.688211E-01 1.082397E+00 1.309938E+00 1.546346E+00 1.791403E+00 + 9.725319E-01 1.210863E+00 1.465117E+00 1.731768E+00 2.008404E+00 + 1.089349E+00 1.355711E+00 1.640327E+00 1.943649E+00 2.259219E+00 + 1.223330E+00 1.521121E+00 1.839931E+00 2.189073E+00 2.549846E+00 + 1.377465E+00 1.711235E+00 2.071727E+00 2.475347E+00 2.883643E+00 + 1.548182E+00 1.926501E+00 2.342508E+00 2.798750E+00 3.267232E+00 + 1.737056E+00 2.172271E+00 2.655394E+00 3.167410E+00 3.700364E+00 + 1.943262E+00 2.447180E+00 2.999796E+00 3.580217E+00 4.185147E+00 + 2.163642E+00 2.747438E+00 3.371558E+00 4.035399E+00 4.719908E+00 + 2.406146E+00 3.068485E+00 3.774325E+00 4.533045E+00 5.307525E+00 + 2.668009E+00 3.406067E+00 4.211568E+00 5.064071E+00 5.942184E+00 + 2.948962E+00 3.771068E+00 4.687494E+00 5.638346E+00 6.626977E+00 + 3.249040E+00 4.155422E+00 5.168914E+00 6.247558E+00 7.356210E+00 + 3.543927E+00 4.538920E+00 5.650764E+00 6.860547E+00 8.103674E+00 + 3.841716E+00 4.906612E+00 6.116032E+00 7.439673E+00 8.834972E+00 + 4.120937E+00 5.251333E+00 6.538785E+00 7.974723E+00 9.515605E+00 + 4.374765E+00 5.574987E+00 6.927537E+00 8.483413E+00 1.015658E+01 + 4.627126E+00 5.882812E+00 7.302645E+00 8.957526E+00 1.076156E+01 + 4.862339E+00 6.161516E+00 7.638226E+00 9.363335E+00 1.131024E+01 + 5.047906E+00 6.369518E+00 7.881284E+00 9.670687E+00 1.174038E+01 + 5.230484E+00 6.560730E+00 8.098959E+00 9.972496E+00 1.213354E+01 + 5.606042E+00 6.965561E+00 8.600316E+00 1.058705E+01 1.287280E+01 + 6.068369E+00 7.485148E+00 9.272788E+00 1.141709E+01 1.395963E+01 + 6.521672E+00 8.092120E+00 1.004743E+01 1.244783E+01 1.530977E+01 + 6.990153E+00 8.770761E+00 1.097635E+01 1.376131E+01 1.699479E+01 + 7.580829E+00 9.568312E+00 1.218274E+01 1.537787E+01 1.895432E+01 + 8.262131E+00 1.061857E+01 1.366239E+01 1.723662E+01 2.111117E+01 + 9.150858E+00 1.197254E+01 1.545089E+01 1.933631E+01 2.344748E+01 + 1.032220E+01 1.356532E+01 1.738268E+01 2.151112E+01 2.586058E+01 + 1.119096E+01 1.469252E+01 1.868075E+01 2.298183E+01 2.749531E+01 + 2.972102E-02 5.278487E-02 8.991804E-02 1.458190E-01 2.279117E-01 + 3.308471E-02 5.725293E-02 9.547649E-02 1.524135E-01 2.355029E-01 + 3.695074E-02 6.234705E-02 1.016929E-01 1.598243E-01 2.440969E-01 + 4.135550E-02 6.813122E-02 1.086242E-01 1.682561E-01 2.539109E-01 + 4.640367E-02 7.471602E-02 1.165326E-01 1.777526E-01 2.651878E-01 + 5.223305E-02 8.221986E-02 1.255088E-01 1.885516E-01 2.778177E-01 + 5.888711E-02 9.073325E-02 1.357992E-01 2.008160E-01 2.923254E-01 + 6.659284E-02 1.004872E-01 1.476424E-01 2.146685E-01 3.087202E-01 + 7.551684E-02 1.117276E-01 1.612968E-01 2.308715E-01 3.276533E-01 + 8.667230E-02 1.257147E-01 1.785972E-01 2.514580E-01 3.521107E-01 + 1.015917E-01 1.444258E-01 2.020210E-01 2.800254E-01 3.864922E-01 + 1.209761E-01 1.686152E-01 2.323512E-01 3.174582E-01 4.318963E-01 + 1.442490E-01 1.976596E-01 2.685620E-01 3.618868E-01 4.852401E-01 + 1.719693E-01 2.319728E-01 3.107627E-01 4.133254E-01 5.466801E-01 + 2.048164E-01 2.724445E-01 3.601823E-01 4.729734E-01 6.168143E-01 + 2.436633E-01 3.198854E-01 4.174100E-01 5.416681E-01 6.964477E-01 + 2.898343E-01 3.761972E-01 4.850082E-01 6.211112E-01 7.882253E-01 + 3.451086E-01 4.428860E-01 5.641094E-01 7.131889E-01 8.942009E-01 + 4.108983E-01 5.218205E-01 6.567246E-01 8.201123E-01 1.015337E+00 + 4.892922E-01 6.152040E-01 7.649310E-01 9.442618E-01 1.154506E+00 + 5.836591E-01 7.258338E-01 8.923577E-01 1.088614E+00 1.314761E+00 + 6.954550E-01 8.562759E-01 1.041883E+00 1.255477E+00 1.500358E+00 + 8.271328E-01 1.008989E+00 1.214566E+00 1.447314E+00 1.713654E+00 + 9.729011E-01 1.176150E+00 1.401946E+00 1.655210E+00 1.944486E+00 + 1.116686E+00 1.340391E+00 1.585793E+00 1.859410E+00 2.169405E+00 + 1.264481E+00 1.508906E+00 1.775567E+00 2.071097E+00 2.399520E+00 + 1.427375E+00 1.693547E+00 1.987506E+00 2.306318E+00 2.654784E+00 + 1.611932E+00 1.903039E+00 2.227686E+00 2.574417E+00 2.949019E+00 + 1.823601E+00 2.146495E+00 2.504622E+00 2.886244E+00 3.291551E+00 + 2.067619E+00 2.429602E+00 2.823706E+00 3.247901E+00 3.691387E+00 + 2.346823E+00 2.755995E+00 3.193932E+00 3.666714E+00 4.154703E+00 + 2.667328E+00 3.129640E+00 3.625513E+00 4.150240E+00 4.693666E+00 + 3.027695E+00 3.561409E+00 4.123690E+00 4.709302E+00 5.316998E+00 + 3.428028E+00 4.052752E+00 4.695490E+00 5.353442E+00 6.032485E+00 + 3.868686E+00 4.605457E+00 5.340259E+00 6.083802E+00 6.846448E+00 + 4.348208E+00 5.214462E+00 6.057929E+00 6.909399E+00 7.768209E+00 + 4.862663E+00 5.866012E+00 6.849758E+00 7.829114E+00 8.804160E+00 + 5.405140E+00 6.555130E+00 7.708234E+00 8.841254E+00 9.952213E+00 + 5.975868E+00 7.286593E+00 8.630780E+00 9.945728E+00 1.122223E+01 + 6.574808E+00 8.051916E+00 9.611444E+00 1.114374E+01 1.261991E+01 + 7.203206E+00 8.864514E+00 1.065518E+01 1.244866E+01 1.415427E+01 + 7.841193E+00 9.710897E+00 1.174411E+01 1.381725E+01 1.581739E+01 + 8.448628E+00 1.056305E+01 1.284571E+01 1.520954E+01 1.752908E+01 + 9.012219E+00 1.136851E+01 1.391823E+01 1.659143E+01 1.926544E+01 + 9.522830E+00 1.210542E+01 1.495307E+01 1.793766E+01 2.097632E+01 + 1.001038E+01 1.281648E+01 1.595546E+01 1.927011E+01 2.268350E+01 + 1.051099E+01 1.356476E+01 1.702236E+01 2.069252E+01 2.450429E+01 + 1.105254E+01 1.436861E+01 1.814095E+01 2.222015E+01 2.646943E+01 + 1.157990E+01 1.514653E+01 1.927552E+01 2.381635E+01 2.853891E+01 + 1.224267E+01 1.616582E+01 2.068882E+01 2.574231E+01 3.100489E+01 + 1.369971E+01 1.808232E+01 2.318278E+01 2.886840E+01 3.478416E+01 + 1.571326E+01 2.072411E+01 2.659839E+01 3.303090E+01 3.960810E+01 + 1.808329E+01 2.388531E+01 3.052321E+01 3.770201E+01 4.489571E+01 + 2.091640E+01 2.749790E+01 3.493825E+01 4.279091E+01 5.051561E+01 + 2.419619E+01 3.155578E+01 3.972005E+01 4.810450E+01 5.629420E+01 + 2.778024E+01 3.597156E+01 4.472026E+01 5.349969E+01 6.203707E+01 + 3.179926E+01 4.070435E+01 4.991238E+01 5.901097E+01 6.775251E+01 + 3.605528E+01 4.559756E+01 5.513297E+01 6.438237E+01 7.323966E+01 + 3.892720E+01 4.878625E+01 5.855223E+01 6.788679E+01 7.676010E+01 + 2.786043E-01 4.736962E-01 7.711497E-01 1.198679E+00 1.778203E+00 + 2.955350E-01 4.932934E-01 7.919036E-01 1.219380E+00 1.798665E+00 + 3.145711E-01 5.155621E-01 8.158658E-01 1.243379E+00 1.821958E+00 + 3.361167E-01 5.406650E-01 8.432556E-01 1.271470E+00 1.849261E+00 + 3.606719E-01 5.693896E-01 8.749486E-01 1.303888E+00 1.881023E+00 + 3.884366E-01 6.016876E-01 9.110307E-01 1.341734E+00 1.917860E+00 + 4.197240E-01 6.388134E-01 9.519191E-01 1.385147E+00 1.961202E+00 + 4.563791E-01 6.817040E-01 9.992002E-01 1.435798E+00 2.012300E+00 + 4.983783E-01 7.308831E-01 1.054288E+00 1.495212E+00 2.073770E+00 + 5.514020E-01 7.937816E-01 1.126331E+00 1.576018E+00 2.160950E+00 + 6.244220E-01 8.813635E-01 1.229948E+00 1.695774E+00 2.295463E+00 + 7.190633E-01 9.957466E-01 1.366987E+00 1.856164E+00 2.477575E+00 + 8.305380E-01 1.130109E+00 1.526387E+00 2.042203E+00 2.687262E+00 + 9.601686E-01 1.283779E+00 1.707226E+00 2.250892E+00 2.920925E+00 + 1.109884E+00 1.460001E+00 1.912601E+00 2.484771E+00 3.180767E+00 + 1.281355E+00 1.660190E+00 2.143090E+00 2.743822E+00 3.467148E+00 + 1.479384E+00 1.889524E+00 2.404977E+00 3.034559E+00 3.790679E+00 + 1.708789E+00 2.152767E+00 2.700969E+00 3.362694E+00 4.154017E+00 + 1.973036E+00 2.453181E+00 3.036320E+00 3.733087E+00 4.558344E+00 + 2.279983E+00 2.796500E+00 3.417411E+00 4.151358E+00 5.013977E+00 + 2.636061E+00 3.191691E+00 3.852380E+00 4.627877E+00 5.532079E+00 + 3.044613E+00 3.643595E+00 4.348264E+00 5.169226E+00 6.118852E+00 + 3.512137E+00 4.157023E+00 4.908019E+00 5.778133E+00 6.774340E+00 + 4.015377E+00 4.703255E+00 5.500464E+00 6.418796E+00 7.455114E+00 + 4.504772E+00 5.229033E+00 6.065974E+00 7.018545E+00 8.087961E+00 + 5.008851E+00 5.769627E+00 6.639509E+00 7.624215E+00 8.721245E+00 + 5.569675E+00 6.375164E+00 7.280896E+00 8.298866E+00 9.431099E+00 + 6.209491E+00 7.067566E+00 8.018298E+00 9.073414E+00 1.024485E+01 + 6.947515E+00 7.873770E+00 8.881695E+00 9.987207E+00 1.120201E+01 + 7.798357E+00 8.811506E+00 9.895693E+00 1.106049E+01 1.232164E+01 + 8.774877E+00 9.897082E+00 1.107148E+01 1.231166E+01 1.363892E+01 + 9.901843E+00 1.114557E+01 1.243409E+01 1.377449E+01 1.518016E+01 + 1.120242E+01 1.257801E+01 1.401464E+01 1.547238E+01 1.697069E+01 + 1.268904E+01 1.422123E+01 1.582100E+01 1.742583E+01 1.904995E+01 + 1.438088E+01 1.607914E+01 1.786317E+01 1.964092E+01 2.142635E+01 + 1.628971E+01 1.816467E+01 2.015539E+01 2.215163E+01 2.412548E+01 + 1.841421E+01 2.048474E+01 2.270654E+01 2.494567E+01 2.714020E+01 + 2.076415E+01 2.307257E+01 2.550719E+01 2.802086E+01 3.048141E+01 + 2.335064E+01 2.592417E+01 2.860733E+01 3.139966E+01 3.416692E+01 + 2.624526E+01 2.913219E+01 3.206196E+01 3.512327E+01 3.821560E+01 + 2.956150E+01 3.274036E+01 3.593938E+01 3.925807E+01 4.266269E+01 + 3.333761E+01 3.681000E+01 4.031320E+01 4.388085E+01 4.755732E+01 + 3.763203E+01 4.140095E+01 4.521679E+01 4.905189E+01 5.296197E+01 + 4.242978E+01 4.660301E+01 5.073158E+01 5.485015E+01 5.895897E+01 + 4.773585E+01 5.249812E+01 5.696277E+01 6.136271E+01 6.565517E+01 + 5.367037E+01 5.914521E+01 6.404760E+01 6.871904E+01 7.321977E+01 + 6.035224E+01 6.665150E+01 7.210587E+01 7.708133E+01 8.173283E+01 + 6.784602E+01 7.491627E+01 8.093921E+01 8.625362E+01 9.105627E+01 + 7.585301E+01 8.371753E+01 9.035736E+01 9.599390E+01 1.009974E+02 + 8.461576E+01 9.337431E+01 1.005377E+02 1.064813E+02 1.115644E+02 + 9.559769E+01 1.049187E+02 1.123918E+02 1.183380E+02 1.232949E+02 + 1.080360E+02 1.177453E+02 1.251584E+02 1.308389E+02 1.354684E+02 + 1.212245E+02 1.307655E+02 1.378497E+02 1.431291E+02 1.473023E+02 + 1.344564E+02 1.435853E+02 1.502088E+02 1.549487E+02 1.584761E+02 + 1.472110E+02 1.557815E+02 1.618280E+02 1.659818E+02 1.688278E+02 + 1.590724E+02 1.671136E+02 1.724603E+02 1.760093E+02 1.782004E+02 + 1.699723E+02 1.772936E+02 1.818938E+02 1.849216E+02 1.863863E+02 + 1.795316E+02 1.859978E+02 1.900861E+02 1.924433E+02 1.933030E+02 + 1.854509E+02 1.914683E+02 1.951869E+02 1.972115E+02 1.977673E+02 + 4.623568E+00 7.018995E+00 1.031439E+01 1.471594E+01 2.036641E+01 + 4.701643E+00 7.093544E+00 1.039237E+01 1.480560E+01 2.046867E+01 + 4.789121E+00 7.178079E+00 1.047737E+01 1.490536E+01 2.057660E+01 + 4.891839E+00 7.275889E+00 1.057225E+01 1.501141E+01 2.069323E+01 + 5.011704E+00 7.390938E+00 1.068526E+01 1.512801E+01 2.081941E+01 + 5.146963E+00 7.524170E+00 1.081698E+01 1.525740E+01 2.095448E+01 + 5.303805E+00 7.685901E+00 1.096652E+01 1.540132E+01 2.110124E+01 + 5.490765E+00 7.874720E+00 1.115078E+01 1.557776E+01 2.127247E+01 + 5.708773E+00 8.101544E+00 1.138011E+01 1.579874E+01 2.148723E+01 + 6.010273E+00 8.432171E+00 1.174129E+01 1.617584E+01 2.188796E+01 + 6.470984E+00 8.964328E+00 1.236910E+01 1.688380E+01 2.267812E+01 + 7.088147E+00 9.702171E+00 1.325682E+01 1.790894E+01 2.385235E+01 + 7.809738E+00 1.057063E+01 1.428297E+01 1.908926E+01 2.519182E+01 + 8.634348E+00 1.155071E+01 1.542324E+01 2.039224E+01 2.665337E+01 + 9.563385E+00 1.265736E+01 1.668968E+01 2.182748E+01 2.824474E+01 + 1.060882E+01 1.388800E+01 1.807501E+01 2.337867E+01 2.993235E+01 + 1.181373E+01 1.526546E+01 1.962050E+01 2.508915E+01 3.179991E+01 + 1.318339E+01 1.682441E+01 2.134398E+01 2.698660E+01 3.383553E+01 + 1.472727E+01 1.855884E+01 2.325934E+01 2.907387E+01 3.604595E+01 + 1.648781E+01 2.050640E+01 2.539955E+01 3.136569E+01 3.848016E+01 + 1.848391E+01 2.270186E+01 2.779823E+01 3.391732E+01 4.117455E+01 + 2.073052E+01 2.515930E+01 3.045704E+01 3.673716E+01 4.411383E+01 + 2.322852E+01 2.788335E+01 3.335795E+01 3.979326E+01 4.728150E+01 + 2.579736E+01 3.062993E+01 3.623630E+01 4.278860E+01 5.032570E+01 + 2.810275E+01 3.301891E+01 3.867692E+01 4.520775E+01 5.267825E+01 + 3.035867E+01 3.527944E+01 4.095133E+01 4.739704E+01 5.474360E+01 + 3.281584E+01 3.774722E+01 4.342460E+01 4.983037E+01 5.704696E+01 + 3.560887E+01 4.056316E+01 4.624539E+01 5.264285E+01 5.975978E+01 + 3.888015E+01 4.385245E+01 4.955724E+01 5.598405E+01 6.308750E+01 + 4.270624E+01 4.769344E+01 5.349499E+01 5.993613E+01 6.707327E+01 + 4.713215E+01 5.217474E+01 5.803931E+01 6.454987E+01 7.175697E+01 + 5.230819E+01 5.742480E+01 6.333284E+01 6.995783E+01 7.719332E+01 + 5.841008E+01 6.355676E+01 6.952838E+01 7.622641E+01 8.352391E+01 + 6.558456E+01 7.068620E+01 7.669533E+01 8.344415E+01 9.078370E+01 + 7.393219E+01 7.900560E+01 8.494828E+01 9.169244E+01 9.901133E+01 + 8.369445E+01 8.874640E+01 9.448775E+01 1.011007E+02 1.083419E+02 + 9.508402E+01 9.995226E+01 1.054737E+02 1.118333E+02 1.188505E+02 + 1.083625E+02 1.129386E+02 1.181864E+02 1.241103E+02 1.307175E+02 + 1.237289E+02 1.280422E+02 1.328375E+02 1.382162E+02 1.442950E+02 + 1.414115E+02 1.455319E+02 1.498166E+02 1.544963E+02 1.596914E+02 + 1.615146E+02 1.654053E+02 1.691441E+02 1.730319E+02 1.772592E+02 + 1.834212E+02 1.872774E+02 1.905695E+02 1.937560E+02 1.969307E+02 + 2.068377E+02 2.105928E+02 2.134434E+02 2.159795E+02 2.182380E+02 + 2.312587E+02 2.347527E+02 2.372714E+02 2.390933E+02 2.404767E+02 + 2.561147E+02 2.591587E+02 2.611393E+02 2.623802E+02 2.628872E+02 + 2.809961E+02 2.833988E+02 2.844966E+02 2.850059E+02 2.847103E+02 + 3.050982E+02 3.065773E+02 3.068691E+02 3.061262E+02 3.050294E+02 + 3.275365E+02 3.279732E+02 3.271962E+02 3.252375E+02 3.228163E+02 + 3.476425E+02 3.468185E+02 3.447180E+02 3.417395E+02 3.379023E+02 + 3.653341E+02 3.625947E+02 3.593162E+02 3.549434E+02 3.500066E+02 + 3.793591E+02 3.748248E+02 3.698445E+02 3.639544E+02 3.577679E+02 + 3.891436E+02 3.826499E+02 3.758588E+02 3.685338E+02 3.611694E+02 + 3.942888E+02 3.860388E+02 3.778139E+02 3.694304E+02 3.610321E+02 + 3.951138E+02 3.855020E+02 3.762759E+02 3.671660E+02 3.583256E+02 + 3.926264E+02 3.820792E+02 3.721316E+02 3.625266E+02 3.532633E+02 + 3.880334E+02 3.767863E+02 3.664111E+02 3.563419E+02 3.467248E+02 + 3.821163E+02 3.705151E+02 3.597469E+02 3.492680E+02 3.393325E+02 + 3.753953E+02 3.638360E+02 3.526908E+02 3.419669E+02 3.318340E+02 + 3.707999E+02 3.591511E+02 3.480272E+02 3.370539E+02 3.266527E+02 + 6.392274E+01 9.265869E+01 1.305537E+02 1.784252E+02 2.332239E+02 + 6.432368E+01 9.319277E+01 1.311876E+02 1.791582E+02 2.340165E+02 + 6.474537E+01 9.373073E+01 1.318215E+02 1.799333E+02 2.348024E+02 + 6.521533E+01 9.428472E+01 1.325101E+02 1.807312E+02 2.356387E+02 + 6.573231E+01 9.486476E+01 1.332314E+02 1.815638E+02 2.365258E+02 + 6.627593E+01 9.549369E+01 1.339894E+02 1.824113E+02 2.374109E+02 + 6.687522E+01 9.617944E+01 1.347687E+02 1.832816E+02 2.383129E+02 + 6.756926E+01 9.694126E+01 1.356543E+02 1.842592E+02 2.393255E+02 + 6.843102E+01 9.790483E+01 1.367891E+02 1.854710E+02 2.405716E+02 + 7.005478E+01 9.976449E+01 1.390430E+02 1.879215E+02 2.432819E+02 + 7.328445E+01 1.036638E+02 1.439268E+02 1.935018E+02 2.492588E+02 + 7.809000E+01 1.095455E+02 1.512300E+02 2.017719E+02 2.581693E+02 + 8.357912E+01 1.163983E+02 1.595290E+02 2.111543E+02 2.680189E+02 + 8.972875E+01 1.239031E+02 1.684966E+02 2.210834E+02 2.784273E+02 + 9.644026E+01 1.321017E+02 1.780988E+02 2.315264E+02 2.893760E+02 + 1.036887E+02 1.408901E+02 1.881152E+02 2.421978E+02 3.004268E+02 + 1.118929E+02 1.503474E+02 1.988065E+02 2.534379E+02 3.121061E+02 + 1.210027E+02 1.608493E+02 2.101654E+02 2.653973E+02 3.242165E+02 + 1.310738E+02 1.721992E+02 2.222507E+02 2.777978E+02 3.367376E+02 + 1.422987E+02 1.844681E+02 2.350248E+02 2.907665E+02 3.496509E+02 + 1.550070E+02 1.977432E+02 2.487023E+02 3.046522E+02 3.631156E+02 + 1.691194E+02 2.122798E+02 2.630599E+02 3.191700E+02 3.768447E+02 + 1.843715E+02 2.274847E+02 2.780731E+02 3.339230E+02 3.906058E+02 + 1.988071E+02 2.412806E+02 2.911117E+02 3.461249E+02 4.016816E+02 + 2.097905E+02 2.507226E+02 2.987629E+02 3.520161E+02 4.062784E+02 + 2.200157E+02 2.586211E+02 3.040981E+02 3.548008E+02 4.074021E+02 + 2.317414E+02 2.678604E+02 3.105696E+02 3.583726E+02 4.085386E+02 + 2.461853E+02 2.799211E+02 3.198459E+02 3.641939E+02 4.113615E+02 + 2.642271E+02 2.959793E+02 3.328917E+02 3.736792E+02 4.174978E+02 + 2.869666E+02 3.166144E+02 3.503246E+02 3.875336E+02 4.275556E+02 + 3.150081E+02 3.415201E+02 3.724558E+02 4.060665E+02 4.419807E+02 + 3.496603E+02 3.721263E+02 3.994778E+02 4.295436E+02 4.614445E+02 + 3.899891E+02 4.094229E+02 4.322388E+02 4.584627E+02 4.862990E+02 + 4.364368E+02 4.531039E+02 4.713200E+02 4.930112E+02 5.163813E+02 + 4.883291E+02 5.024940E+02 5.170020E+02 5.331689E+02 5.511743E+02 + 5.436080E+02 5.556994E+02 5.674264E+02 5.788618E+02 5.909832E+02 + 6.004657E+02 6.110997E+02 6.203832E+02 6.282942E+02 6.356962E+02 + 6.592189E+02 6.667906E+02 6.736842E+02 6.786673E+02 6.819247E+02 + 7.171589E+02 7.213782E+02 7.252032E+02 7.280879E+02 7.276055E+02 + 7.713075E+02 7.731608E+02 7.738445E+02 7.735764E+02 7.706802E+02 + 8.205353E+02 8.188144E+02 8.161324E+02 8.124792E+02 8.075221E+02 + 8.622106E+02 8.565845E+02 8.509998E+02 8.435214E+02 8.355552E+02 + 8.953139E+02 8.843455E+02 8.755936E+02 8.651418E+02 8.538436E+02 + 9.169334E+02 9.025483E+02 8.889706E+02 8.762398E+02 8.623166E+02 + 9.270294E+02 9.100349E+02 8.928856E+02 8.771241E+02 8.611900E+02 + 9.262552E+02 9.070188E+02 8.877642E+02 8.684583E+02 8.504417E+02 + 9.139715E+02 8.939788E+02 8.731018E+02 8.517740E+02 8.308842E+02 + 8.920182E+02 8.707782E+02 8.502525E+02 8.284706E+02 8.064217E+02 + 8.625829E+02 8.410696E+02 8.201432E+02 7.991424E+02 7.772853E+02 + 8.278579E+02 8.048009E+02 7.835292E+02 7.638989E+02 7.430134E+02 + 7.850951E+02 7.616728E+02 7.403232E+02 7.210804E+02 7.015047E+02 + 7.392520E+02 7.164109E+02 6.955540E+02 6.763571E+02 6.575474E+02 + 6.963088E+02 6.741879E+02 6.536827E+02 6.347351E+02 6.163887E+02 + 6.579900E+02 6.356339E+02 6.153874E+02 5.970136E+02 5.787971E+02 + 6.240247E+02 6.019470E+02 5.819173E+02 5.639489E+02 5.460862E+02 + 5.945040E+02 5.727701E+02 5.534096E+02 5.353248E+02 5.176319E+02 + 5.678718E+02 5.464510E+02 5.273540E+02 5.094688E+02 4.920139E+02 + 5.436319E+02 5.220213E+02 5.031164E+02 4.854518E+02 4.684995E+02 + 5.279534E+02 5.068319E+02 4.877505E+02 4.700633E+02 4.536033E+02 + 8.150857E+02 1.128299E+03 1.444184E+03 1.721745E+03 1.949686E+03 + 8.198172E+02 1.133193E+03 1.448386E+03 1.725305E+03 1.952501E+03 + 8.241968E+02 1.138028E+03 1.452898E+03 1.728909E+03 1.955215E+03 + 8.290645E+02 1.142565E+03 1.457243E+03 1.732558E+03 1.957891E+03 + 8.342007E+02 1.147794E+03 1.461809E+03 1.736293E+03 1.960885E+03 + 8.395687E+02 1.153238E+03 1.466379E+03 1.740096E+03 1.963983E+03 + 8.449312E+02 1.158579E+03 1.471090E+03 1.743882E+03 1.966928E+03 + 8.508412E+02 1.164401E+03 1.476333E+03 1.748387E+03 1.970204E+03 + 8.584740E+02 1.171971E+03 1.482659E+03 1.753565E+03 1.974319E+03 + 8.737636E+02 1.187845E+03 1.496109E+03 1.764677E+03 1.983244E+03 + 9.053880E+02 1.221713E+03 1.525678E+03 1.789595E+03 2.002766E+03 + 9.565963E+02 1.271026E+03 1.569482E+03 1.824384E+03 2.031228E+03 + 1.010614E+03 1.324602E+03 1.615878E+03 1.862403E+03 2.060560E+03 + 1.067860E+03 1.379723E+03 1.662631E+03 1.899603E+03 2.089188E+03 + 1.126556E+03 1.434959E+03 1.710137E+03 1.937908E+03 2.117709E+03 + 1.188708E+03 1.489694E+03 1.756541E+03 1.974573E+03 2.144471E+03 + 1.252779E+03 1.546278E+03 1.802828E+03 2.010319E+03 2.170688E+03 + 1.318370E+03 1.602199E+03 1.848431E+03 2.046692E+03 2.195782E+03 + 1.383964E+03 1.658401E+03 1.892827E+03 2.080336E+03 2.219972E+03 + 1.449557E+03 1.714059E+03 1.936572E+03 2.113368E+03 2.242804E+03 + 1.518678E+03 1.769818E+03 1.980623E+03 2.145854E+03 2.264343E+03 + 1.586116E+03 1.826037E+03 2.022786E+03 2.176766E+03 2.283957E+03 + 1.652798E+03 1.877858E+03 2.063822E+03 2.205017E+03 2.301370E+03 + 1.706132E+03 1.919427E+03 2.094174E+03 2.224876E+03 2.312976E+03 + 1.734477E+03 1.937879E+03 2.105176E+03 2.230596E+03 2.315108E+03 + 1.748844E+03 1.944101E+03 2.105948E+03 2.229212E+03 2.312306E+03 + 1.762050E+03 1.949063E+03 2.106139E+03 2.226664E+03 2.308661E+03 + 1.780860E+03 1.958256E+03 2.108382E+03 2.225195E+03 2.304848E+03 + 1.812086E+03 1.973761E+03 2.114411E+03 2.226569E+03 2.302307E+03 + 1.855174E+03 2.002240E+03 2.129089E+03 2.230572E+03 2.301783E+03 + 1.911772E+03 2.037881E+03 2.151218E+03 2.240693E+03 2.303491E+03 + 1.980663E+03 2.082471E+03 2.180009E+03 2.255940E+03 2.308100E+03 + 2.050910E+03 2.137476E+03 2.212570E+03 2.275506E+03 2.316871E+03 + 2.127916E+03 2.193175E+03 2.250115E+03 2.296390E+03 2.325092E+03 + 2.201532E+03 2.244559E+03 2.283835E+03 2.312567E+03 2.327617E+03 + 2.268248E+03 2.289092E+03 2.306426E+03 2.319700E+03 2.322110E+03 + 2.315350E+03 2.320021E+03 2.321383E+03 2.317683E+03 2.307038E+03 + 2.339172E+03 2.334394E+03 2.320549E+03 2.304336E+03 2.282588E+03 + 2.340968E+03 2.326271E+03 2.303318E+03 2.275106E+03 2.245253E+03 + 2.312879E+03 2.289705E+03 2.263687E+03 2.227947E+03 2.188489E+03 + 2.259720E+03 2.228205E+03 2.196160E+03 2.158145E+03 2.114374E+03 + 2.171928E+03 2.141481E+03 2.105869E+03 2.069961E+03 2.023172E+03 + 2.071070E+03 2.033708E+03 2.000036E+03 1.960846E+03 1.919087E+03 + 1.958507E+03 1.917439E+03 1.879461E+03 1.843125E+03 1.800625E+03 + 1.834022E+03 1.795927E+03 1.755366E+03 1.715816E+03 1.675169E+03 + 1.704282E+03 1.664336E+03 1.625923E+03 1.587035E+03 1.546046E+03 + 1.573762E+03 1.530794E+03 1.493395E+03 1.457129E+03 1.418844E+03 + 1.447080E+03 1.402908E+03 1.364313E+03 1.329504E+03 1.294643E+03 + 1.329261E+03 1.285150E+03 1.246847E+03 1.211748E+03 1.178560E+03 + 1.218602E+03 1.178430E+03 1.142292E+03 1.106952E+03 1.073450E+03 + 1.111441E+03 1.075930E+03 1.043960E+03 1.010459E+03 9.769325E+02 + 1.016603E+03 9.846257E+02 9.533827E+02 9.226022E+02 8.910762E+02 + 9.384207E+02 9.075857E+02 8.764703E+02 8.462582E+02 8.168603E+02 + 8.705771E+02 8.426386E+02 8.125393E+02 7.822558E+02 7.526694E+02 + 8.099667E+02 7.844706E+02 7.560661E+02 7.267748E+02 6.975115E+02 + 7.525227E+02 7.304114E+02 7.049770E+02 6.778428E+02 6.505325E+02 + 7.064928E+02 6.858891E+02 6.633468E+02 6.377030E+02 6.122314E+02 + 6.739209E+02 6.545865E+02 6.334955E+02 6.086134E+02 5.829665E+02 + 6.541948E+02 6.352368E+02 6.145651E+02 5.902936E+02 5.645966E+02 + 6.622160E+03 7.269332E+03 7.580170E+03 7.645400E+03 7.545408E+03 + 6.632974E+03 7.275090E+03 7.582072E+03 7.644518E+03 7.542630E+03 + 6.645895E+03 7.280751E+03 7.585135E+03 7.643494E+03 7.539711E+03 + 6.656574E+03 7.286241E+03 7.586304E+03 7.642249E+03 7.535632E+03 + 6.667542E+03 7.291778E+03 7.587765E+03 7.641287E+03 7.532252E+03 + 6.677249E+03 7.298173E+03 7.588940E+03 7.638766E+03 7.528687E+03 + 6.686898E+03 7.303975E+03 7.589803E+03 7.636734E+03 7.524773E+03 + 6.699386E+03 7.307345E+03 7.591020E+03 7.635095E+03 7.520334E+03 + 6.713199E+03 7.315291E+03 7.591777E+03 7.632177E+03 7.515335E+03 + 6.744227E+03 7.332876E+03 7.595092E+03 7.626327E+03 7.505038E+03 + 6.814677E+03 7.366996E+03 7.604200E+03 7.618092E+03 7.483075E+03 + 6.917183E+03 7.414207E+03 7.615059E+03 7.601955E+03 7.450521E+03 + 7.020889E+03 7.461258E+03 7.621075E+03 7.579682E+03 7.409540E+03 + 7.116831E+03 7.502665E+03 7.619141E+03 7.554850E+03 7.366722E+03 + 7.203189E+03 7.528326E+03 7.610011E+03 7.523364E+03 7.319528E+03 + 7.279393E+03 7.549676E+03 7.595490E+03 7.485038E+03 7.270350E+03 + 7.341784E+03 7.566016E+03 7.575569E+03 7.441381E+03 7.215282E+03 + 7.393861E+03 7.566816E+03 7.548187E+03 7.391230E+03 7.151796E+03 + 7.433198E+03 7.561488E+03 7.511488E+03 7.336017E+03 7.084634E+03 + 7.459087E+03 7.548180E+03 7.466721E+03 7.274636E+03 7.011783E+03 + 7.474044E+03 7.520363E+03 7.410831E+03 7.206736E+03 6.929826E+03 + 7.472381E+03 7.477746E+03 7.345496E+03 7.130127E+03 6.842678E+03 + 7.453083E+03 7.426426E+03 7.275452E+03 7.045120E+03 6.752203E+03 + 7.421302E+03 7.370985E+03 7.205063E+03 6.967950E+03 6.673304E+03 + 7.377012E+03 7.320236E+03 7.152143E+03 6.918231E+03 6.626719E+03 + 7.318997E+03 7.268629E+03 7.106152E+03 6.881562E+03 6.597767E+03 + 7.243937E+03 7.205805E+03 7.056212E+03 6.839747E+03 6.566581E+03 + 7.162026E+03 7.133311E+03 6.990779E+03 6.787262E+03 6.524228E+03 + 7.067446E+03 7.042759E+03 6.912163E+03 6.717790E+03 6.465034E+03 + 6.951071E+03 6.932291E+03 6.811617E+03 6.627246E+03 6.383787E+03 + 6.821362E+03 6.796977E+03 6.688494E+03 6.510694E+03 6.281144E+03 + 6.671555E+03 6.640028E+03 6.539002E+03 6.366544E+03 6.147261E+03 + 6.499614E+03 6.451305E+03 6.351724E+03 6.189941E+03 5.981922E+03 + 6.315710E+03 6.240923E+03 6.130393E+03 5.979571E+03 5.782504E+03 + 6.110753E+03 6.009073E+03 5.881932E+03 5.729196E+03 5.549629E+03 + 5.866973E+03 5.752545E+03 5.614834E+03 5.462955E+03 5.289048E+03 + 5.574529E+03 5.462335E+03 5.319171E+03 5.176442E+03 5.011786E+03 + 5.243498E+03 5.140074E+03 5.009439E+03 4.861629E+03 4.707855E+03 + 4.892952E+03 4.786679E+03 4.668513E+03 4.532695E+03 4.381722E+03 + 4.518317E+03 4.418301E+03 4.307799E+03 4.182865E+03 4.048129E+03 + 4.139829E+03 4.038676E+03 3.937715E+03 3.825577E+03 3.702486E+03 + 3.765496E+03 3.665044E+03 3.566417E+03 3.466328E+03 3.358134E+03 + 3.391586E+03 3.305274E+03 3.208657E+03 3.116275E+03 3.018743E+03 + 3.026584E+03 2.953725E+03 2.874851E+03 2.788019E+03 2.701939E+03 + 2.697756E+03 2.627020E+03 2.556510E+03 2.484971E+03 2.408184E+03 + 2.404963E+03 2.334268E+03 2.270985E+03 2.203987E+03 2.138215E+03 + 2.145405E+03 2.078198E+03 2.014453E+03 1.954556E+03 1.893432E+03 + 1.924717E+03 1.857984E+03 1.798454E+03 1.739007E+03 1.682605E+03 + 1.739967E+03 1.672059E+03 1.614127E+03 1.559495E+03 1.504405E+03 + 1.583093E+03 1.515591E+03 1.459352E+03 1.407489E+03 1.355311E+03 + 1.438448E+03 1.372827E+03 1.320470E+03 1.271063E+03 1.222422E+03 + 1.303554E+03 1.247692E+03 1.197266E+03 1.149698E+03 1.104271E+03 + 1.178361E+03 1.130634E+03 1.087151E+03 1.045176E+03 1.002216E+03 + 1.069482E+03 1.026380E+03 9.888272E+02 9.527991E+02 9.138099E+02 + 9.787537E+02 9.380165E+02 9.044763E+02 8.727729E+02 8.392791E+02 + 9.083005E+02 8.674991E+02 8.351319E+02 8.058952E+02 7.756230E+02 + 8.443796E+02 8.053651E+02 7.741411E+02 7.477094E+02 7.196222E+02 + 7.869728E+02 7.492456E+02 7.191188E+02 6.943233E+02 6.694769E+02 + 7.487884E+02 7.123152E+02 6.829247E+02 6.591510E+02 6.359895E+02 + 2.886258E+04 2.580958E+04 2.305315E+04 2.067676E+04 1.856065E+04 + 2.881460E+04 2.576680E+04 2.301664E+04 2.064443E+04 1.853244E+04 + 2.877630E+04 2.572296E+04 2.297928E+04 2.061144E+04 1.850370E+04 + 2.872551E+04 2.567759E+04 2.293897E+04 2.057748E+04 1.847418E+04 + 2.867135E+04 2.562945E+04 2.289820E+04 2.054159E+04 1.844303E+04 + 2.861592E+04 2.558048E+04 2.285684E+04 2.050233E+04 1.841165E+04 + 2.855714E+04 2.553338E+04 2.281338E+04 2.046463E+04 1.837891E+04 + 2.849863E+04 2.547695E+04 2.276783E+04 2.042322E+04 1.834303E+04 + 2.841956E+04 2.540775E+04 2.270921E+04 2.037243E+04 1.829900E+04 + 2.825995E+04 2.526568E+04 2.258604E+04 2.026590E+04 1.820576E+04 + 2.791272E+04 2.496240E+04 2.233428E+04 2.003868E+04 1.800310E+04 + 2.742891E+04 2.452308E+04 2.196040E+04 1.970207E+04 1.770435E+04 + 2.688951E+04 2.404014E+04 2.155040E+04 1.933751E+04 1.737796E+04 + 2.633626E+04 2.354389E+04 2.112732E+04 1.896917E+04 1.704704E+04 + 2.576899E+04 2.303938E+04 2.069345E+04 1.859512E+04 1.671162E+04 + 2.520122E+04 2.255675E+04 2.026129E+04 1.821766E+04 1.637951E+04 + 2.462156E+04 2.207088E+04 1.982113E+04 1.783124E+04 1.604489E+04 + 2.402659E+04 2.156281E+04 1.937491E+04 1.743364E+04 1.569960E+04 + 2.342864E+04 2.104481E+04 1.892105E+04 1.703253E+04 1.535556E+04 + 2.280048E+04 2.052193E+04 1.846457E+04 1.662330E+04 1.500490E+04 + 2.217185E+04 1.996827E+04 1.798647E+04 1.620675E+04 1.464219E+04 + 2.154278E+04 1.940404E+04 1.749952E+04 1.578461E+04 1.427651E+04 + 2.090364E+04 1.884692E+04 1.701337E+04 1.536540E+04 1.391212E+04 + 2.036189E+04 1.838287E+04 1.660647E+04 1.502053E+04 1.361304E+04 + 2.004596E+04 1.811998E+04 1.639324E+04 1.484575E+04 1.346720E+04 + 1.984001E+04 1.796863E+04 1.627949E+04 1.476161E+04 1.340610E+04 + 1.961396E+04 1.780531E+04 1.616612E+04 1.467878E+04 1.334650E+04 + 1.931544E+04 1.758413E+04 1.600319E+04 1.455524E+04 1.325686E+04 + 1.890415E+04 1.726619E+04 1.575760E+04 1.436320E+04 1.310871E+04 + 1.835815E+04 1.683314E+04 1.540956E+04 1.408926E+04 1.289177E+04 + 1.767674E+04 1.627883E+04 1.495811E+04 1.371927E+04 1.259478E+04 + 1.684153E+04 1.559386E+04 1.439366E+04 1.325091E+04 1.220706E+04 + 1.584721E+04 1.477972E+04 1.370503E+04 1.267848E+04 1.172281E+04 + 1.471899E+04 1.383172E+04 1.289989E+04 1.200426E+04 1.114611E+04 + 1.352370E+04 1.277407E+04 1.200150E+04 1.123188E+04 1.048230E+04 + 1.229680E+04 1.166983E+04 1.104071E+04 1.039012E+04 9.748067E+03 + 1.105729E+04 1.055408E+04 1.003544E+04 9.497689E+03 8.962215E+03 + 9.858456E+03 9.446990E+03 9.027737E+03 8.593588E+03 8.151268E+03 + 8.713085E+03 8.368041E+03 8.033558E+03 7.688641E+03 7.330323E+03 + 7.672654E+03 7.373577E+03 7.083286E+03 6.808505E+03 6.520122E+03 + 6.715584E+03 6.464122E+03 6.216504E+03 5.978001E+03 5.743268E+03 + 5.854956E+03 5.637304E+03 5.434109E+03 5.223743E+03 5.021368E+03 + 5.100411E+03 4.911083E+03 4.734593E+03 4.559871E+03 4.384193E+03 + 4.458974E+03 4.281995E+03 4.125854E+03 3.974911E+03 3.829069E+03 + 3.900981E+03 3.743793E+03 3.602905E+03 3.471067E+03 3.347892E+03 + 3.410418E+03 3.282434E+03 3.158773E+03 3.044974E+03 2.937814E+03 + 2.993141E+03 2.881614E+03 2.777969E+03 2.677566E+03 2.586619E+03 + 2.637415E+03 2.542330E+03 2.449596E+03 2.364907E+03 2.282369E+03 + 2.335103E+03 2.250879E+03 2.169289E+03 2.094765E+03 2.022786E+03 + 2.080632E+03 2.000811E+03 1.924835E+03 1.858843E+03 1.796417E+03 + 1.855860E+03 1.781878E+03 1.709447E+03 1.647159E+03 1.591902E+03 + 1.660428E+03 1.588585E+03 1.522459E+03 1.464917E+03 1.411494E+03 + 1.495014E+03 1.425605E+03 1.362082E+03 1.307278E+03 1.257762E+03 + 1.352613E+03 1.287997E+03 1.226461E+03 1.173122E+03 1.127065E+03 + 1.228128E+03 1.169012E+03 1.111716E+03 1.062092E+03 1.015376E+03 + 1.116382E+03 1.063415E+03 1.011065E+03 9.640538E+02 9.203997E+02 + 1.017085E+03 9.710912E+02 9.238350E+02 8.773822E+02 8.358294E+02 + 9.325539E+02 8.903810E+02 8.468241E+02 8.029142E+02 7.626992E+02 + 8.774448E+02 8.381810E+02 7.973507E+02 7.560027E+02 7.165253E+02 + +Band: 6, gas: 2, k-terms: 3 + 6.564490E-02 3.063509E-01 9.800005E-01 2.403721E+00 4.875521E+00 + 6.711854E-02 3.116522E-01 9.928682E-01 2.428277E+00 4.915010E+00 + 6.862941E-02 3.170357E-01 1.005879E+00 2.453031E+00 4.954721E+00 + 7.017882E-02 3.225036E-01 1.019036E+00 2.477977E+00 4.994639E+00 + 7.181767E-02 3.282328E-01 1.032759E+00 2.503914E+00 5.036039E+00 + 7.345092E-02 3.338859E-01 1.046233E+00 2.529287E+00 5.076419E+00 + 7.512881E-02 3.396373E-01 1.059873E+00 2.554874E+00 5.117017E+00 + 7.695929E-02 3.458522E-01 1.074541E+00 2.582291E+00 5.160395E+00 + 7.927653E-02 3.536466E-01 1.092859E+00 2.616430E+00 5.214297E+00 + 8.506884E-02 3.728847E-01 1.137880E+00 2.700164E+00 5.346419E+00 + 1.000584E-01 4.210353E-01 1.248669E+00 2.903878E+00 5.665331E+00 + 1.269413E-01 5.029550E-01 1.431302E+00 3.232349E+00 6.171371E+00 + 1.629847E-01 6.065693E-01 1.653585E+00 3.621370E+00 6.758830E+00 + 2.084019E-01 7.299206E-01 1.908146E+00 4.054704E+00 7.399958E+00 + 2.649913E-01 8.754381E-01 2.197349E+00 4.533809E+00 8.094645E+00 + 3.327686E-01 1.040915E+00 2.514572E+00 5.045743E+00 8.822459E+00 + 4.161539E-01 1.234712E+00 2.873474E+00 5.610533E+00 9.610227E+00 + 5.176501E-01 1.459645E+00 3.276247E+00 6.228888E+00 1.045660E+01 + 6.378110E-01 1.714105E+00 3.717346E+00 6.890002E+00 1.134506E+01 + 7.804716E-01 2.003444E+00 4.203568E+00 7.602029E+00 1.228492E+01 + 9.509150E-01 2.335099E+00 4.744393E+00 8.376246E+00 1.328919E+01 + 1.148377E+00 2.704342E+00 5.329105E+00 9.195022E+00 1.433290E+01 + 1.365030E+00 3.094571E+00 5.930109E+00 1.001871E+01 1.536498E+01 + 1.530334E+00 3.382279E+00 6.361321E+00 1.059639E+01 1.607442E+01 + 1.521871E+00 3.362480E+00 6.323326E+00 1.053321E+01 1.598008E+01 + 1.395471E+00 3.134537E+00 5.967985E+00 1.003640E+01 1.534114E+01 + 1.234971E+00 2.841084E+00 5.506171E+00 9.386480E+00 1.450145E+01 + 1.069123E+00 2.530748E+00 5.009172E+00 8.677377E+00 1.357503E+01 + 9.167547E-01 2.237504E+00 4.529233E+00 7.980472E+00 1.265097E+01 + 7.792372E-01 1.964738E+00 4.072325E+00 7.304448E+00 1.174026E+01 + 6.553235E-01 1.710912E+00 3.636596E+00 6.646974E+00 1.083981E+01 + 5.467214E-01 1.480468E+00 3.230294E+00 6.020613E+00 9.966338E+00 + 4.534530E-01 1.274838E+00 2.857089E+00 5.431752E+00 9.128933E+00 + 3.732348E-01 1.090582E+00 2.512202E+00 4.874050E+00 8.319453E+00 + 3.031074E-01 9.223252E-01 2.186854E+00 4.334380E+00 7.519687E+00 + 2.422734E-01 7.692840E-01 1.880277E+00 3.811633E+00 6.727540E+00 + 1.892713E-01 6.290814E-01 1.588729E+00 3.299943E+00 5.934077E+00 + 1.443279E-01 5.035691E-01 1.316900E+00 2.807537E+00 5.150984E+00 + 1.084111E-01 3.971363E-01 1.075722E+00 2.354731E+00 4.409616E+00 + 8.105686E-02 3.108857E-01 8.706495E-01 1.954553E+00 3.733233E+00 + 6.148796E-02 2.450008E-01 7.057336E-01 1.618915E+00 3.145635E+00 + 4.706016E-02 1.935209E-01 5.709585E-01 1.334305E+00 2.631668E+00 + 3.580569E-02 1.515336E-01 4.572404E-01 1.087319E+00 2.174877E+00 + 2.697112E-02 1.173334E-01 3.619170E-01 8.752982E-01 1.774667E+00 + 2.021567E-02 9.026833E-02 2.843353E-01 6.987142E-01 1.434722E+00 + 1.535409E-02 7.002814E-02 2.243890E-01 5.586257E-01 1.158983E+00 + 1.220429E-02 5.617908E-02 1.814459E-01 4.546281E-01 9.482427E-01 + 1.000922E-02 4.612693E-02 1.491915E-01 3.744941E-01 7.824965E-01 + 8.260572E-03 3.804459E-02 1.229848E-01 3.088649E-01 6.458117E-01 + 7.431373E-03 3.348214E-02 1.065673E-01 2.648760E-01 5.497611E-01 + 9.181382E-03 3.748159E-02 1.114536E-01 2.638072E-01 5.282064E-01 + 1.282529E-02 4.623979E-02 1.260091E-01 2.799378E-01 5.346865E-01 + 1.739360E-02 5.599765E-02 1.407084E-01 2.945533E-01 5.380232E-01 + 2.287647E-02 6.645318E-02 1.549491E-01 3.069089E-01 5.375440E-01 + 2.900501E-02 7.685341E-02 1.674897E-01 3.154110E-01 5.314707E-01 + 3.529403E-02 8.625186E-02 1.770393E-01 3.186560E-01 5.185008E-01 + 4.188807E-02 9.510604E-02 1.847777E-01 3.189534E-01 5.023359E-01 + 4.795862E-02 1.020909E-01 1.889556E-01 3.142293E-01 4.806223E-01 + 4.984162E-02 1.023747E-01 1.844283E-01 3.003598E-01 4.519001E-01 + 1.466894E-09 9.308084E-09 4.484104E-08 1.797256E-07 6.358919E-07 + 1.772794E-09 1.097331E-08 5.163215E-08 2.017457E-07 6.960860E-07 + 2.145508E-09 1.296632E-08 5.965060E-08 2.278634E-07 7.661292E-07 + 2.600880E-09 1.536384E-08 6.918329E-08 2.581915E-07 8.470917E-07 + 3.158989E-09 1.826858E-08 8.053004E-08 2.935778E-07 9.411837E-07 + 3.840513E-09 2.174699E-08 9.394383E-08 3.350820E-07 1.050309E-06 + 4.673765E-09 2.595297E-08 1.098507E-07 3.839930E-07 1.176968E-06 + 5.702819E-09 3.106879E-08 1.290038E-07 4.417485E-07 1.326248E-06 + 7.009735E-09 3.749715E-08 1.525432E-07 5.120483E-07 1.505512E-06 + 9.008742E-09 4.694257E-08 1.865472E-07 6.116064E-07 1.757049E-06 + 1.278004E-08 6.372136E-08 2.445637E-07 7.771807E-07 2.168966E-06 + 1.965608E-08 9.248062E-08 3.396708E-07 1.039971E-06 2.807908E-06 + 3.067433E-08 1.359738E-07 4.769742E-07 1.406439E-06 3.671749E-06 + 4.773680E-08 1.997567E-07 6.698492E-07 1.901770E-06 4.809370E-06 + 7.391607E-08 2.924852E-07 9.393714E-07 2.571330E-06 6.298781E-06 + 1.131222E-07 4.246273E-07 1.308688E-06 3.459158E-06 8.215559E-06 + 1.726065E-07 6.155959E-07 1.821867E-06 4.657162E-06 1.073210E-05 + 2.621471E-07 8.901054E-07 2.530187E-06 6.259891E-06 1.401260E-05 + 3.944534E-07 1.277956E-06 3.497842E-06 8.384797E-06 1.825662E-05 + 5.899963E-07 1.828127E-06 4.821421E-06 1.120807E-05 2.374131E-05 + 8.793021E-07 2.609375E-06 6.638742E-06 1.497517E-05 3.090339E-05 + 1.300365E-06 3.700042E-06 9.099986E-06 1.993256E-05 4.011442E-05 + 1.890801E-06 5.179014E-06 1.234001E-05 2.630799E-05 5.172870E-05 + 2.569997E-06 6.845336E-06 1.594147E-05 3.329285E-05 6.425782E-05 + 3.034645E-06 8.031067E-06 1.855607E-05 3.850902E-05 7.367254E-05 + 3.262767E-06 8.710457E-06 2.019895E-05 4.201380E-05 8.025704E-05 + 3.376006E-06 9.164384E-06 2.144111E-05 4.490249E-05 8.592321E-05 + 3.420875E-06 9.484031E-06 2.249027E-05 4.750703E-05 9.134629E-05 + 3.442684E-06 9.779821E-06 2.355507E-05 5.021100E-05 9.722048E-05 + 3.448242E-06 1.006951E-05 2.467557E-05 5.313794E-05 1.036574E-04 + 3.437114E-06 1.034407E-05 2.581554E-05 5.629097E-05 1.106246E-04 + 3.428244E-06 1.064646E-05 2.708548E-05 5.976437E-05 1.183873E-04 + 3.437112E-06 1.102316E-05 2.859876E-05 6.389188E-05 1.274966E-04 + 3.463793E-06 1.146452E-05 3.038005E-05 6.875955E-05 1.382603E-04 + 3.499317E-06 1.192775E-05 3.234195E-05 7.418415E-05 1.503912E-04 + 3.543486E-06 1.241729E-05 3.445531E-05 8.020732E-05 1.640450E-04 + 3.576770E-06 1.289627E-05 3.657599E-05 8.655327E-05 1.787816E-04 + 3.595613E-06 1.335640E-05 3.867236E-05 9.314953E-05 1.944066E-04 + 3.630035E-06 1.390626E-05 4.102604E-05 1.003917E-04 2.120538E-04 + 3.710485E-06 1.465276E-05 4.396693E-05 1.088926E-04 2.326645E-04 + 3.902168E-06 1.581333E-05 4.810534E-05 1.200257E-04 2.582176E-04 + 4.185959E-06 1.733998E-05 5.334711E-05 1.337572E-04 2.885944E-04 + 4.490887E-06 1.902073E-05 5.923101E-05 1.492853E-04 3.225910E-04 + 4.785773E-06 2.073356E-05 6.547258E-05 1.660552E-04 3.594179E-04 + 5.074945E-06 2.251059E-05 7.210653E-05 1.843389E-04 4.001328E-04 + 5.444996E-06 2.466718E-05 7.999012E-05 2.059939E-04 4.479458E-04 + 6.117769E-06 2.793286E-05 9.111254E-05 2.350166E-04 5.102757E-04 + 7.090496E-06 3.223344E-05 1.052444E-04 2.710847E-04 5.868333E-04 + 8.277725E-06 3.729463E-05 1.216808E-04 3.131402E-04 6.753033E-04 + 1.055804E-05 4.621183E-05 1.476380E-04 3.759543E-04 8.015039E-04 + 1.834906E-05 7.284423E-05 2.166946E-04 5.243694E-04 1.074413E-03 + 3.592438E-05 1.262964E-04 3.436420E-04 7.760084E-04 1.507706E-03 + 6.823516E-05 2.143632E-04 5.360424E-04 1.130975E-03 2.083040E-03 + 1.252896E-04 3.549044E-04 8.191133E-04 1.619242E-03 2.829032E-03 + 2.205579E-04 5.685459E-04 1.218259E-03 2.265730E-03 3.768214E-03 + 3.698143E-04 8.756565E-04 1.752713E-03 3.084328E-03 4.908344E-03 + 5.987851E-04 1.310795E-03 2.462136E-03 4.116608E-03 6.294840E-03 + 9.252592E-04 1.887051E-03 3.349045E-03 5.353794E-03 7.910607E-03 + 1.201607E-03 2.353556E-03 4.043105E-03 6.299208E-03 9.129598E-03 + 1.667706E-04 4.367934E-04 9.793335E-04 1.847785E-03 3.083131E-03 + 1.693975E-04 4.423172E-04 9.899281E-04 1.862869E-03 3.105037E-03 + 1.720443E-04 4.479303E-04 1.000700E-03 1.880651E-03 3.129321E-03 + 1.747861E-04 4.538522E-04 1.012006E-03 1.898493E-03 3.154474E-03 + 1.776405E-04 4.603703E-04 1.023995E-03 1.916593E-03 3.181821E-03 + 1.805419E-04 4.668191E-04 1.036198E-03 1.935285E-03 3.210316E-03 + 1.834710E-04 4.735064E-04 1.048652E-03 1.955819E-03 3.240154E-03 + 1.866586E-04 4.807681E-04 1.062734E-03 1.978228E-03 3.274180E-03 + 1.907123E-04 4.903997E-04 1.080080E-03 2.006430E-03 3.316730E-03 + 1.998940E-04 5.108820E-04 1.117918E-03 2.063624E-03 3.399903E-03 + 2.217914E-04 5.583354E-04 1.202222E-03 2.187553E-03 3.579867E-03 + 2.580734E-04 6.357590E-04 1.335001E-03 2.381037E-03 3.860466E-03 + 3.037057E-04 7.312110E-04 1.492307E-03 2.609404E-03 4.192529E-03 + 3.583430E-04 8.424021E-04 1.670614E-03 2.866133E-03 4.567826E-03 + 4.236154E-04 9.707270E-04 1.871443E-03 3.157828E-03 4.990187E-03 + 5.000744E-04 1.115485E-03 2.093036E-03 3.478985E-03 5.455803E-03 + 5.923535E-04 1.282879E-03 2.345540E-03 3.848699E-03 5.987801E-03 + 7.034415E-04 1.476364E-03 2.633427E-03 4.269846E-03 6.590254E-03 + 8.344927E-04 1.696301E-03 2.960141E-03 4.748296E-03 7.271893E-03 + 9.905757E-04 1.950753E-03 3.335941E-03 5.298081E-03 8.044104E-03 + 1.177481E-03 2.247432E-03 3.773773E-03 5.934954E-03 8.937052E-03 + 1.398173E-03 2.589516E-03 4.279051E-03 6.662738E-03 9.953921E-03 + 1.648437E-03 2.973236E-03 4.844176E-03 7.474414E-03 1.108922E-02 + 1.871212E-03 3.317867E-03 5.358431E-03 8.211810E-03 1.213217E-02 + 1.959035E-03 3.471339E-03 5.603322E-03 8.586013E-03 1.268184E-02 + 1.943146E-03 3.481742E-03 5.652050E-03 8.688793E-03 1.287072E-02 + 1.887585E-03 3.439995E-03 5.632104E-03 8.700838E-03 1.294245E-02 + 1.815752E-03 3.373260E-03 5.583177E-03 8.679070E-03 1.297920E-02 + 1.745808E-03 3.307002E-03 5.545293E-03 8.678679E-03 1.304949E-02 + 1.680385E-03 3.244701E-03 5.519784E-03 8.706640E-03 1.316452E-02 + 1.618082E-03 3.186750E-03 5.501271E-03 8.753806E-03 1.332385E-02 + 1.565874E-03 3.136646E-03 5.504443E-03 8.838633E-03 1.355265E-02 + 1.524898E-03 3.106435E-03 5.534708E-03 8.978056E-03 1.385620E-02 + 1.493338E-03 3.090723E-03 5.589715E-03 9.165230E-03 1.424653E-02 + 1.464676E-03 3.084842E-03 5.657306E-03 9.381370E-03 1.470124E-02 + 1.436008E-03 3.086386E-03 5.735310E-03 9.628894E-03 1.521089E-02 + 1.399958E-03 3.086973E-03 5.808951E-03 9.878050E-03 1.575190E-02 + 1.354129E-03 3.083473E-03 5.875867E-03 1.012733E-02 1.631084E-02 + 1.304542E-03 3.088729E-03 5.961200E-03 1.040411E-02 1.693736E-02 + 1.256053E-03 3.111112E-03 6.088817E-03 1.074212E-02 1.767563E-02 + 1.223908E-03 3.172171E-03 6.294844E-03 1.119961E-02 1.862770E-02 + 1.200043E-03 3.258798E-03 6.561146E-03 1.175438E-02 1.975518E-02 + 1.167049E-03 3.338342E-03 6.843722E-03 1.234657E-02 2.096930E-02 + 1.120542E-03 3.392405E-03 7.121043E-03 1.294799E-02 2.222076E-02 + 1.065048E-03 3.425752E-03 7.401952E-03 1.358685E-02 2.354696E-02 + 1.017102E-03 3.465229E-03 7.724543E-03 1.434033E-02 2.503305E-02 + 1.006710E-03 3.572544E-03 8.190225E-03 1.536681E-02 2.700022E-02 + 1.019325E-03 3.720921E-03 8.747643E-03 1.658976E-02 2.933043E-02 + 1.028558E-03 3.853917E-03 9.307889E-03 1.788628E-02 3.184813E-02 + 1.116706E-03 4.177850E-03 1.021477E-02 1.979655E-02 3.544089E-02 + 1.612224E-03 5.497092E-03 1.284473E-02 2.452909E-02 4.388175E-02 + 2.586777E-03 7.811114E-03 1.716701E-02 3.221335E-02 5.721752E-02 + 4.012971E-03 1.090853E-02 2.284594E-02 4.240693E-02 7.418093E-02 + 6.016885E-03 1.497302E-02 3.022222E-02 5.546800E-02 9.461145E-02 + 8.679879E-03 2.011355E-02 3.947385E-02 7.108828E-02 1.176329E-01 + 1.201535E-02 2.632503E-02 5.037772E-02 8.831335E-02 1.417327E-01 + 1.618032E-02 3.381370E-02 6.290448E-02 1.067140E-01 1.663635E-01 + 2.096738E-02 4.205749E-02 7.582124E-02 1.245589E-01 1.892742E-01 + 2.395976E-02 4.700645E-02 8.304021E-02 1.339613E-01 2.006205E-01 + +Band: 6, gas: 1, k-terms: 3 + 2.714407E-09 3.931963E-09 7.524555E-09 1.565968E-08 3.178901E-08 + 3.318840E-09 4.812313E-09 9.191856E-09 1.904847E-08 3.853029E-08 + 4.057767E-09 5.888807E-09 1.122772E-08 2.316501E-08 4.666867E-08 + 4.960593E-09 7.205587E-09 1.371410E-08 2.819498E-08 5.653854E-08 + 6.064772E-09 8.823459E-09 1.675851E-08 3.430092E-08 6.853730E-08 + 7.415071E-09 1.080237E-08 2.046860E-08 4.173987E-08 8.300816E-08 + 9.067673E-09 1.322758E-08 2.500179E-08 5.080823E-08 1.005494E-07 + 1.108971E-08 1.620046E-08 3.056351E-08 6.184732E-08 1.219695E-07 + 1.357404E-08 1.988171E-08 3.744252E-08 7.548994E-08 1.482528E-07 + 1.670031E-08 2.471657E-08 4.667717E-08 9.371193E-08 1.829695E-07 + 2.082805E-08 3.170041E-08 6.041631E-08 1.208615E-07 2.338828E-07 + 2.642955E-08 4.193024E-08 8.092046E-08 1.609467E-07 3.081187E-07 + 3.394759E-08 5.615661E-08 1.094329E-07 2.162248E-07 4.085939E-07 + 4.403833E-08 7.568233E-08 1.484504E-07 2.907116E-07 5.426251E-07 + 5.772521E-08 1.024907E-07 2.016096E-07 3.909984E-07 7.204984E-07 + 7.624048E-08 1.389760E-07 2.733446E-07 5.244339E-07 9.541879E-07 + 1.015761E-07 1.893622E-07 3.712661E-07 7.039680E-07 1.263956E-06 + 1.364773E-07 2.588677E-07 5.047005E-07 9.447462E-07 1.675298E-06 + 1.845002E-07 3.538944E-07 6.849079E-07 1.265301E-06 2.215077E-06 + 2.507660E-07 4.841501E-07 9.284399E-07 1.693511E-06 2.926716E-06 + 3.431142E-07 6.642359E-07 1.259962E-06 2.267492E-06 3.867756E-06 + 4.706736E-07 9.099449E-07 1.706122E-06 3.028936E-06 5.103805E-06 + 6.433109E-07 1.238753E-06 2.295766E-06 4.022004E-06 6.696787E-06 + 8.467489E-07 1.622674E-06 2.980409E-06 5.172161E-06 8.533039E-06 + 1.022273E-06 1.954970E-06 3.585920E-06 6.206404E-06 1.021011E-05 + 1.164832E-06 2.226816E-06 4.097334E-06 7.113797E-06 1.171463E-05 + 1.299071E-06 2.481077E-06 4.585450E-06 8.004546E-06 1.323087E-05 + 1.435914E-06 2.731657E-06 5.077144E-06 8.927748E-06 1.482963E-05 + 1.588108E-06 3.004511E-06 5.609786E-06 9.938416E-06 1.660677E-05 + 1.760932E-06 3.306844E-06 6.194698E-06 1.105058E-05 1.859198E-05 + 1.957981E-06 3.642729E-06 6.843003E-06 1.228187E-05 2.080184E-05 + 2.190523E-06 4.024866E-06 7.574363E-06 1.367326E-05 2.332683E-05 + 2.471613E-06 4.472943E-06 8.423083E-06 1.528991E-05 2.625708E-05 + 2.813589E-06 4.997634E-06 9.412421E-06 1.716633E-05 2.965371E-05 + 3.223155E-06 5.608491E-06 1.054186E-05 1.931883E-05 3.353311E-05 + 3.718281E-06 6.317483E-06 1.183379E-05 2.176999E-05 3.799785E-05 + 4.309980E-06 7.128373E-06 1.327699E-05 2.453131E-05 4.302791E-05 + 5.019781E-06 8.060807E-06 1.489070E-05 2.760820E-05 4.868372E-05 + 5.886317E-06 9.167579E-06 1.675913E-05 3.114183E-05 5.518426E-05 + 6.960051E-06 1.052147E-05 1.900684E-05 3.533899E-05 6.289552E-05 + 8.303509E-06 1.222831E-05 2.183185E-05 4.055011E-05 7.233838E-05 + 9.958979E-06 1.432635E-05 2.530416E-05 4.686307E-05 8.379792E-05 + 1.196490E-05 1.681842E-05 2.935348E-05 5.416792E-05 9.699335E-05 + 1.438986E-05 1.974942E-05 3.398294E-05 6.247351E-05 1.119223E-04 + 1.733336E-05 2.321944E-05 3.933783E-05 7.198521E-05 1.290263E-04 + 2.093533E-05 2.743886E-05 4.581697E-05 8.336603E-05 1.493588E-04 + 2.538095E-05 3.281229E-05 5.417136E-05 9.802755E-05 1.752444E-04 + 3.083304E-05 3.952496E-05 6.468526E-05 1.164531E-04 2.074002E-04 + 3.745883E-05 4.763773E-05 7.734106E-05 1.385514E-04 2.456211E-04 + 4.572481E-05 5.848440E-05 9.503711E-05 1.693944E-04 2.983282E-04 + 5.728571E-05 7.762465E-05 1.297493E-04 2.308146E-04 4.006475E-04 + 7.445898E-05 1.089363E-04 1.874145E-04 3.306656E-04 5.620669E-04 + 9.985383E-05 1.558746E-04 2.718788E-04 4.728442E-04 7.848405E-04 + 1.378750E-04 2.259378E-04 3.946508E-04 6.732019E-04 1.087275E-03 + 1.945999E-04 3.290994E-04 5.688205E-04 9.457330E-04 1.485747E-03 + 2.776977E-04 4.748745E-04 8.055502E-04 1.303943E-03 1.993118E-03 + 3.992902E-04 6.802347E-04 1.127872E-03 1.774852E-03 2.638746E-03 + 5.682455E-04 9.578216E-04 1.549005E-03 2.369115E-03 3.430118E-03 + 7.170015E-04 1.195736E-03 1.899783E-03 2.854304E-03 4.067403E-03 + 1.966447E-04 4.738003E-04 8.240190E-04 1.249869E-03 1.773265E-03 + 1.997780E-04 4.782924E-04 8.299963E-04 1.257318E-03 1.782921E-03 + 2.029174E-04 4.828147E-04 8.361868E-04 1.264657E-03 1.792697E-03 + 2.060222E-04 4.872994E-04 8.424323E-04 1.273197E-03 1.803128E-03 + 2.092349E-04 4.922259E-04 8.491061E-04 1.281206E-03 1.814770E-03 + 2.124780E-04 4.970445E-04 8.555685E-04 1.289860E-03 1.825936E-03 + 2.158378E-04 5.022229E-04 8.622897E-04 1.299555E-03 1.837708E-03 + 2.194164E-04 5.077238E-04 8.699690E-04 1.309742E-03 1.852089E-03 + 2.239685E-04 5.147705E-04 8.791396E-04 1.322433E-03 1.869534E-03 + 2.344455E-04 5.298480E-04 8.992619E-04 1.347628E-03 1.903190E-03 + 2.591879E-04 5.638168E-04 9.427769E-04 1.402779E-03 1.974823E-03 + 2.987079E-04 6.177325E-04 1.010444E-03 1.486557E-03 2.085236E-03 + 3.453335E-04 6.788211E-04 1.088170E-03 1.585176E-03 2.211357E-03 + 3.963594E-04 7.469361E-04 1.172908E-03 1.694222E-03 2.353836E-03 + 4.547234E-04 8.201776E-04 1.266990E-03 1.813945E-03 2.511877E-03 + 5.172183E-04 8.989090E-04 1.366525E-03 1.945019E-03 2.683183E-03 + 5.829401E-04 9.862878E-04 1.478604E-03 2.093187E-03 2.875606E-03 + 6.574098E-04 1.084465E-03 1.604032E-03 2.261106E-03 3.094716E-03 + 7.384071E-04 1.191422E-03 1.744338E-03 2.447425E-03 3.336055E-03 + 8.299883E-04 1.310509E-03 1.902154E-03 2.660939E-03 3.609200E-03 + 9.339150E-04 1.448758E-03 2.086917E-03 2.905503E-03 3.920243E-03 + 1.050365E-03 1.603539E-03 2.296819E-03 3.183686E-03 4.272126E-03 + 1.179129E-03 1.774252E-03 2.529087E-03 3.490641E-03 4.660659E-03 + 1.291021E-03 1.928622E-03 2.744031E-03 3.774237E-03 5.023036E-03 + 1.338552E-03 2.005334E-03 2.859595E-03 3.937577E-03 5.245350E-03 + 1.338070E-03 2.024618E-03 2.903115E-03 4.015098E-03 5.366350E-03 + 1.319150E-03 2.023708E-03 2.922035E-03 4.062775E-03 5.458988E-03 + 1.292745E-03 2.013604E-03 2.933070E-03 4.104834E-03 5.545772E-03 + 1.265925E-03 2.008998E-03 2.950160E-03 4.155763E-03 5.647118E-03 + 1.239421E-03 2.006542E-03 2.975114E-03 4.218548E-03 5.768891E-03 + 1.213617E-03 2.006788E-03 3.010149E-03 4.298673E-03 5.908604E-03 + 1.192707E-03 2.014692E-03 3.056934E-03 4.396567E-03 6.080312E-03 + 1.172589E-03 2.030933E-03 3.121381E-03 4.519241E-03 6.288734E-03 + 1.164369E-03 2.054336E-03 3.202817E-03 4.670266E-03 6.535483E-03 + 1.152464E-03 2.084460E-03 3.295783E-03 4.844382E-03 6.813739E-03 + 1.142289E-03 2.119121E-03 3.399537E-03 5.034440E-03 7.126499E-03 + 1.128868E-03 2.149715E-03 3.505554E-03 5.240304E-03 7.459733E-03 + 1.109318E-03 2.177547E-03 3.614227E-03 5.461267E-03 7.824275E-03 + 1.088105E-03 2.205101E-03 3.733214E-03 5.706065E-03 8.232119E-03 + 1.073525E-03 2.242091E-03 3.871403E-03 5.989015E-03 8.707709E-03 + 1.070789E-03 2.307148E-03 4.050117E-03 6.334625E-03 9.271691E-03 + 1.075706E-03 2.382754E-03 4.259016E-03 6.733736E-03 9.938428E-03 + 1.079523E-03 2.460059E-03 4.480760E-03 7.164866E-03 1.065958E-02 + 1.075114E-03 2.528895E-03 4.697888E-03 7.619762E-03 1.143252E-02 + 1.068631E-03 2.589749E-03 4.908436E-03 8.088153E-03 1.226580E-02 + 1.071657E-03 2.660575E-03 5.144469E-03 8.603685E-03 1.319740E-02 + 1.101541E-03 2.781978E-03 5.463669E-03 9.246213E-03 1.433869E-02 + 1.155322E-03 2.942059E-03 5.848857E-03 1.000570E-02 1.567962E-02 + 1.212451E-03 3.113314E-03 6.253069E-03 1.082170E-02 1.714966E-02 + 1.339951E-03 3.417884E-03 6.875927E-03 1.195417E-02 1.911738E-02 + 1.805100E-03 4.341512E-03 8.464998E-03 1.452065E-02 2.320477E-02 + 2.622633E-03 5.860069E-03 1.099119E-02 1.851039E-02 2.950398E-02 + 3.741810E-03 7.863391E-03 1.425379E-02 2.369450E-02 3.787011E-02 + 5.248133E-03 1.045507E-02 1.845375E-02 3.051137E-02 4.897425E-02 + 7.213005E-03 1.377239E-02 2.384592E-02 3.937672E-02 6.308792E-02 + 9.698306E-03 1.788199E-02 3.059137E-02 5.048709E-02 7.996750E-02 + 1.287727E-02 2.307656E-02 3.921324E-02 6.426762E-02 9.974990E-02 + 1.675151E-02 2.938909E-02 4.960779E-02 8.004848E-02 1.214912E-01 + 1.960245E-02 3.404819E-02 5.705850E-02 9.088648E-02 1.362011E-01 + 1.256397E-01 4.654888E-01 1.327038E+00 3.036098E+00 6.062699E+00 + 1.280144E-01 4.724816E-01 1.342570E+00 3.065933E+00 6.112042E+00 + 1.304240E-01 4.795540E-01 1.358231E+00 3.095971E+00 6.161637E+00 + 1.328676E-01 4.867035E-01 1.374013E+00 3.126202E+00 6.211461E+00 + 1.354246E-01 4.941606E-01 1.390422E+00 3.157585E+00 6.263098E+00 + 1.379400E-01 5.014742E-01 1.406463E+00 3.188230E+00 6.313409E+00 + 1.404899E-01 5.088667E-01 1.422623E+00 3.219068E+00 6.363930E+00 + 1.432381E-01 5.168101E-01 1.439931E+00 3.252053E+00 6.417862E+00 + 1.466905E-01 5.267486E-01 1.461516E+00 3.293117E+00 6.484896E+00 + 1.553530E-01 5.514579E-01 1.514927E+00 3.394306E+00 6.649913E+00 + 1.773168E-01 6.129495E-01 1.647732E+00 3.640685E+00 7.040089E+00 + 2.151337E-01 7.226751E-01 1.868301E+00 4.036934E+00 7.687896E+00 + 2.635190E-01 8.524552E-01 2.133634E+00 4.510912E+00 8.401629E+00 + 3.217179E-01 1.013364E+00 2.433781E+00 5.043198E+00 9.255622E+00 + 4.004068E-01 1.192460E+00 2.799631E+00 5.630727E+00 1.019555E+01 + 4.954242E-01 1.392017E+00 3.162101E+00 6.265061E+00 1.118735E+01 + 6.017460E-01 1.622997E+00 3.595671E+00 6.961203E+00 1.226875E+01 + 7.348800E-01 1.892457E+00 4.079797E+00 7.751580E+00 1.355079E+01 + 8.825987E-01 2.192839E+00 4.617602E+00 8.564183E+00 1.481188E+01 + 1.065164E+00 2.529553E+00 5.212493E+00 9.516152E+00 1.615924E+01 + 1.270025E+00 2.930633E+00 5.933549E+00 1.056644E+01 1.761415E+01 + 1.501910E+00 3.375322E+00 6.678750E+00 1.179605E+01 1.914356E+01 + 1.759603E+00 3.842834E+00 7.405451E+00 1.295959E+01 2.067537E+01 + 1.951506E+00 4.217564E+00 8.044589E+00 1.378900E+01 2.174931E+01 + 1.935494E+00 4.194912E+00 8.006264E+00 1.371697E+01 2.164193E+01 + 1.779197E+00 3.915301E+00 7.565700E+00 1.303553E+01 2.073490E+01 + 1.589571E+00 3.555705E+00 6.985205E+00 1.214642E+01 1.954382E+01 + 1.392707E+00 3.176724E+00 6.364406E+00 1.128542E+01 1.824194E+01 + 1.210443E+00 2.864814E+00 5.772606E+00 1.039292E+01 1.696378E+01 + 1.044821E+00 2.547356E+00 5.223770E+00 9.582705E+00 1.572815E+01 + 8.946152E-01 2.241445E+00 4.755072E+00 8.797402E+00 1.453313E+01 + 7.741079E-01 1.997376E+00 4.303677E+00 8.067443E+00 1.353990E+01 + 6.534006E-01 1.769065E+00 3.898969E+00 7.472405E+00 1.266255E+01 + 5.810301E-01 1.565357E+00 3.532750E+00 6.895119E+00 1.176145E+01 + 5.105889E-01 1.377858E+00 3.189775E+00 6.344881E+00 1.097101E+01 + 4.465223E-01 1.244036E+00 2.899407E+00 5.811974E+00 1.017383E+01 + 3.887218E-01 1.111723E+00 2.599017E+00 5.277144E+00 9.360399E+00 + 3.402529E-01 9.805616E-01 2.340604E+00 4.764075E+00 8.540094E+00 + 2.988778E-01 8.743450E-01 2.087897E+00 4.262337E+00 7.755496E+00 + 2.707064E-01 7.725203E-01 1.853683E+00 3.821458E+00 6.991568E+00 + 2.439912E-01 7.051229E-01 1.661445E+00 3.415055E+00 6.280765E+00 + 2.179609E-01 6.356718E-01 1.490555E+00 3.065589E+00 5.671176E+00 + 1.948113E-01 5.745381E-01 1.353871E+00 2.751890E+00 5.068353E+00 + 1.703013E-01 5.064870E-01 1.207426E+00 2.448393E+00 4.485341E+00 + 1.472598E-01 4.382529E-01 1.055591E+00 2.163024E+00 3.938616E+00 + 1.282908E-01 3.755616E-01 9.173737E-01 1.901684E+00 3.486384E+00 + 1.135904E-01 3.265256E-01 8.011190E-01 1.682987E+00 3.108209E+00 + 1.026957E-01 2.858539E-01 7.002184E-01 1.491787E+00 2.801149E+00 + 9.287043E-02 2.510197E-01 6.089245E-01 1.316372E+00 2.514519E+00 + 8.769299E-02 2.295298E-01 5.485973E-01 1.186477E+00 2.290336E+00 + 1.001290E-01 2.478854E-01 5.708354E-01 1.216070E+00 2.359828E+00 + 1.213829E-01 2.838639E-01 6.340419E-01 1.347426E+00 2.560929E+00 + 1.421824E-01 3.205784E-01 7.146325E-01 1.491539E+00 2.720461E+00 + 1.625171E-01 3.607093E-01 8.152445E-01 1.615103E+00 2.833003E+00 + 1.837771E-01 4.168182E-01 9.054610E-01 1.708174E+00 2.890885E+00 + 2.067663E-01 4.769058E-01 9.756908E-01 1.762279E+00 2.887518E+00 + 2.381487E-01 5.330504E-01 1.032571E+00 1.790990E+00 2.845929E+00 + 2.755275E-01 5.769366E-01 1.065568E+00 1.783829E+00 2.759865E+00 + 2.883769E-01 5.808719E-01 1.044062E+00 1.713892E+00 2.613820E+00 + +Band: 6, gas: 6, k-terms: 1 + 9.166776E-01 1.229196E+00 1.554180E+00 1.882234E+00 2.204694E+00 + 9.207897E-01 1.233541E+00 1.558620E+00 1.886648E+00 2.208972E+00 + 9.249599E-01 1.237944E+00 1.563118E+00 1.891116E+00 2.213299E+00 + 9.291919E-01 1.242408E+00 1.567674E+00 1.895638E+00 2.217676E+00 + 9.336283E-01 1.247085E+00 1.572443E+00 1.900368E+00 2.222252E+00 + 9.380430E-01 1.251735E+00 1.577181E+00 1.905064E+00 2.226790E+00 + 9.425714E-01 1.256501E+00 1.582031E+00 1.909865E+00 2.231426E+00 + 9.474877E-01 1.261671E+00 1.587288E+00 1.915065E+00 2.236443E+00 + 9.535581E-01 1.268051E+00 1.593774E+00 1.921478E+00 2.242629E+00 + 9.671886E-01 1.282372E+00 1.608345E+00 1.935900E+00 2.256553E+00 + 9.981078E-01 1.314789E+00 1.641290E+00 1.968483E+00 2.287984E+00 + 1.044953E+00 1.363700E+00 1.690833E+00 2.017333E+00 2.334978E+00 + 1.097094E+00 1.417855E+00 1.745438E+00 2.070956E+00 2.386366E+00 + 1.151773E+00 1.474335E+00 1.802111E+00 2.126373E+00 2.439186E+00 + 1.208829E+00 1.532940E+00 1.860632E+00 2.183345E+00 2.493238E+00 + 1.266684E+00 1.592030E+00 1.919354E+00 2.240256E+00 2.546996E+00 + 1.327341E+00 1.653654E+00 1.980291E+00 2.299048E+00 2.602303E+00 + 1.390659E+00 1.717622E+00 2.043232E+00 2.359504E+00 2.658927E+00 + 1.455607E+00 1.782875E+00 2.107126E+00 2.420542E+00 2.715893E+00 + 1.522956E+00 1.850175E+00 2.172697E+00 2.482844E+00 2.773848E+00 + 1.593668E+00 1.920452E+00 2.240844E+00 2.547301E+00 2.833555E+00 + 1.666467E+00 1.992419E+00 2.310294E+00 2.612693E+00 2.893885E+00 + 1.738904E+00 2.063668E+00 2.378726E+00 2.676869E+00 2.952864E+00 + 1.794983E+00 2.118618E+00 2.431241E+00 2.726057E+00 2.997993E+00 + 1.810449E+00 2.133855E+00 2.445862E+00 2.739885E+00 3.010909E+00 + 1.799378E+00 2.123353E+00 2.436074E+00 2.731061E+00 3.003302E+00 + 1.779575E+00 2.104584E+00 2.418579E+00 2.715187E+00 2.989394E+00 + 1.756660E+00 2.083156E+00 2.398807E+00 2.697385E+00 2.973895E+00 + 1.735298E+00 2.063775E+00 2.381375E+00 2.682072E+00 2.960922E+00 + 1.715744E+00 2.046830E+00 2.366796E+00 2.669846E+00 2.951130E+00 + 1.697242E+00 2.031707E+00 2.354606E+00 2.660390E+00 2.944338E+00 + 1.680307E+00 2.018984E+00 2.345460E+00 2.654417E+00 2.941286E+00 + 1.665168E+00 2.008849E+00 2.339569E+00 2.652195E+00 2.942291E+00 + 1.650872E+00 2.000248E+00 2.335865E+00 2.652698E+00 2.946426E+00 + 1.635468E+00 1.991074E+00 2.332202E+00 2.653827E+00 2.951696E+00 + 1.618176E+00 1.980320E+00 2.327412E+00 2.654326E+00 2.956828E+00 + 1.597141E+00 1.965907E+00 2.319282E+00 2.651920E+00 2.959554E+00 + 1.572230E+00 1.947435E+00 2.307187E+00 2.645804E+00 2.958929E+00 + 1.545999E+00 1.927203E+00 2.293080E+00 2.637593E+00 2.956236E+00 + 1.521003E+00 1.907589E+00 2.279086E+00 2.629098E+00 2.952966E+00 + 1.501539E+00 1.892715E+00 2.269079E+00 2.623854E+00 2.952240E+00 + 1.485533E+00 1.880605E+00 2.261119E+00 2.620038E+00 2.952355E+00 + 1.468828E+00 1.867251E+00 2.251418E+00 2.614100E+00 2.950034E+00 + 1.450146E+00 1.851459E+00 2.238901E+00 2.605028E+00 2.944382E+00 + 1.430578E+00 1.834337E+00 2.224675E+00 2.593882E+00 2.936431E+00 + 1.414334E+00 1.820059E+00 2.212770E+00 2.584531E+00 2.929692E+00 + 1.408740E+00 1.815894E+00 2.210198E+00 2.583586E+00 2.930336E+00 + 1.410291E+00 1.818474E+00 2.213806E+00 2.588156E+00 2.935766E+00 + 1.413091E+00 1.822052E+00 2.218137E+00 2.593172E+00 2.941371E+00 + 1.436070E+00 1.845235E+00 2.241016E+00 2.615364E+00 2.962562E+00 + 1.538068E+00 1.945359E+00 2.337007E+00 2.705622E+00 3.045900E+00 + 1.681484E+00 2.084730E+00 2.469470E+00 2.829119E+00 3.158902E+00 + 1.829738E+00 2.227472E+00 2.604065E+00 2.953656E+00 3.271916E+00 + 1.981320E+00 2.372157E+00 2.739433E+00 3.077939E+00 3.383740E+00 + 2.132683E+00 2.515451E+00 2.872473E+00 3.199108E+00 3.491811E+00 + 2.280055E+00 2.653867E+00 3.000024E+00 3.314315E+00 3.593673E+00 + 2.427454E+00 2.791249E+00 3.125639E+00 3.426816E+00 3.692197E+00 + 2.568550E+00 2.921766E+00 3.244020E+00 3.531925E+00 3.783311E+00 + 2.651991E+00 2.998488E+00 3.313146E+00 3.592870E+00 3.835685E+00 + +Band: 6, gas: 12, k-terms: 1 + 6.095180E-01 7.286619E-01 8.600882E-01 1.000661E+00 1.147014E+00 + 6.115963E-01 7.308300E-01 8.623272E-01 1.002948E+00 1.149309E+00 + 6.138168E-01 7.331211E-01 8.646754E-01 1.005333E+00 1.151692E+00 + 6.162077E-01 7.355589E-01 8.671531E-01 1.007834E+00 1.154181E+00 + 6.188512E-01 7.382276E-01 8.698456E-01 1.010537E+00 1.156861E+00 + 6.217019E-01 7.410645E-01 8.726778E-01 1.013358E+00 1.159641E+00 + 6.248560E-01 7.441648E-01 8.757438E-01 1.016390E+00 1.162613E+00 + 6.284673E-01 7.476862E-01 8.792045E-01 1.019795E+00 1.165939E+00 + 6.328800E-01 7.519987E-01 8.834488E-01 1.023975E+00 1.170025E+00 + 6.405053E-01 7.597987E-01 8.913862E-01 1.031987E+00 1.177989E+00 + 6.549716E-01 7.751385E-01 9.073842E-01 1.048408E+00 1.194489E+00 + 6.759080E-01 7.975259E-01 9.308523E-01 1.072560E+00 1.218768E+00 + 6.995616E-01 8.226844E-01 9.571169E-01 1.099478E+00 1.245710E+00 + 7.250390E-01 8.495832E-01 9.850370E-01 1.127929E+00 1.274049E+00 + 7.524090E-01 8.782719E-01 1.014640E+00 1.157883E+00 1.303771E+00 + 7.812247E-01 9.082335E-01 1.045349E+00 1.188766E+00 1.334241E+00 + 8.124133E-01 9.404589E-01 1.078191E+00 1.221614E+00 1.366489E+00 + 8.461146E-01 9.750665E-01 1.113261E+00 1.256499E+00 1.400565E+00 + 8.821635E-01 1.011842E+00 1.150300E+00 1.293136E+00 1.436159E+00 + 9.210969E-01 1.051337E+00 1.189800E+00 1.332067E+00 1.473805E+00 + 9.635635E-01 1.094217E+00 1.232483E+00 1.373944E+00 1.514147E+00 + 1.009393E+00 1.140260E+00 1.278090E+00 1.418491E+00 1.556909E+00 + 1.057987E+00 1.188799E+00 1.325918E+00 1.465000E+00 1.601416E+00 + 1.103565E+00 1.233622E+00 1.369631E+00 1.507197E+00 1.641667E+00 + 1.137418E+00 1.265503E+00 1.399768E+00 1.535759E+00 1.668800E+00 + 1.166012E+00 1.291268E+00 1.423295E+00 1.557618E+00 1.689515E+00 + 1.197081E+00 1.319082E+00 1.448578E+00 1.581073E+00 1.711806E+00 + 1.233463E+00 1.351967E+00 1.478749E+00 1.609276E+00 1.738753E+00 + 1.277419E+00 1.392382E+00 1.516421E+00 1.644921E+00 1.773049E+00 + 1.329511E+00 1.440954E+00 1.562325E+00 1.688841E+00 1.815614E+00 + 1.389948E+00 1.497888E+00 1.616725E+00 1.741396E+00 1.866913E+00 + 1.459250E+00 1.563718E+00 1.680217E+00 1.803269E+00 1.927716E+00 + 1.537766E+00 1.638749E+00 1.753119E+00 1.874840E+00 1.998477E+00 + 1.625427E+00 1.722784E+00 1.835142E+00 1.955803E+00 2.078938E+00 + 1.721854E+00 1.815247E+00 1.925528E+00 2.045291E+00 2.168202E+00 + 1.826871E+00 1.915835E+00 2.023785E+00 2.142654E+00 2.265515E+00 + 1.939811E+00 2.023788E+00 2.128914E+00 2.246665E+00 2.369490E+00 + 2.060167E+00 2.138546E+00 2.240268E+00 2.356464E+00 2.479058E+00 + 2.187523E+00 2.259915E+00 2.357724E+00 2.471838E+00 2.593819E+00 + 2.320740E+00 2.387216E+00 2.480712E+00 2.592271E+00 2.713128E+00 + 2.458170E+00 2.519386E+00 2.608607E+00 2.717311E+00 2.836486E+00 + 2.597022E+00 2.653691E+00 2.738798E+00 2.844347E+00 2.961439E+00 + 2.734159E+00 2.786837E+00 2.867925E+00 2.970074E+00 3.084641E+00 + 2.866828E+00 2.916116E+00 2.993359E+00 3.091968E+00 3.203644E+00 + 2.992640E+00 3.039295E+00 3.113072E+00 3.208199E+00 3.316774E+00 + 3.109791E+00 3.154859E+00 3.225879E+00 3.317893E+00 3.423411E+00 + 3.217275E+00 3.262165E+00 3.331560E+00 3.421187E+00 3.524024E+00 + 3.313897E+00 3.359590E+00 3.428214E+00 3.516057E+00 3.616571E+00 + 3.398782E+00 3.445766E+00 3.514082E+00 3.600502E+00 3.698921E+00 + 3.473880E+00 3.523447E+00 3.592739E+00 3.678805E+00 3.775810E+00 + 3.546549E+00 3.602307E+00 3.676087E+00 3.764424E+00 3.861421E+00 + 3.616118E+00 3.679361E+00 3.758671E+00 3.849825E+00 3.946803E+00 + 3.680044E+00 3.750295E+00 3.834421E+00 3.927637E+00 4.023857E+00 + 3.739099E+00 3.815729E+00 3.903868E+00 3.998325E+00 4.093027E+00 + 3.793645E+00 3.875852E+00 3.967083E+00 4.061893E+00 4.154329E+00 + 3.843673E+00 3.930512E+00 4.023889E+00 4.118199E+00 4.207751E+00 + 3.890763E+00 3.981365E+00 4.075988E+00 4.168973E+00 4.254941E+00 + 3.934158E+00 4.027518E+00 4.122454E+00 4.213393E+00 4.295198E+00 + 3.959920E+00 4.054575E+00 4.149327E+00 4.238706E+00 4.317709E+00 + +Band: 6, gas: 7, k-terms: 1 + 7.330218E+01 7.631606E+01 7.662394E+01 7.911832E+01 7.998497E+01 + 7.334660E+01 7.634941E+01 7.667476E+01 7.916595E+01 7.997789E+01 + 7.339084E+01 7.638264E+01 7.672551E+01 7.921352E+01 7.997074E+01 + 7.343492E+01 7.634445E+01 7.677617E+01 7.926105E+01 7.996355E+01 + 7.348019E+01 7.629995E+01 7.682834E+01 7.931001E+01 7.995607E+01 + 7.352392E+01 7.625659E+01 7.687885E+01 7.935744E+01 7.994875E+01 + 7.356748E+01 7.621303E+01 7.692928E+01 7.940482E+01 7.994138E+01 + 7.361357E+01 7.616653E+01 7.697326E+01 7.945511E+01 7.993349E+01 + 7.367025E+01 7.610877E+01 7.700287E+01 7.951717E+01 7.992366E+01 + 7.380672E+01 7.596707E+01 7.707402E+01 7.966752E+01 7.989938E+01 + 7.412134E+01 7.562580E+01 7.723723E+01 8.001258E+01 7.984006E+01 + 7.458181E+01 7.508785E+01 7.747363E+01 8.003948E+01 7.987639E+01 + 7.506588E+01 7.517641E+01 7.771898E+01 8.005906E+01 8.029737E+01 + 7.554308E+01 7.552803E+01 7.804582E+01 8.006881E+01 8.072458E+01 + 7.601064E+01 7.616299E+01 7.868751E+01 8.004613E+01 8.086732E+01 + 7.629319E+01 7.683624E+01 7.931743E+01 7.995493E+01 8.120016E+01 + 7.568631E+01 7.720912E+01 7.995805E+01 7.985066E+01 8.153688E+01 + 7.502728E+01 7.749883E+01 8.004190E+01 7.991881E+01 8.084646E+01 + 7.525290E+01 7.777099E+01 8.006202E+01 8.038903E+01 8.100898E+01 + 7.568570E+01 7.824353E+01 8.006975E+01 8.085753E+01 8.116877E+01 + 7.644225E+01 7.894827E+01 8.000974E+01 8.100530E+01 8.132784E+01 + 7.706362E+01 7.964544E+01 7.990299E+01 8.137282E+01 8.148244E+01 + 7.736676E+01 8.002824E+01 7.978912E+01 8.076957E+01 8.162646E+01 + 7.756304E+01 8.004766E+01 8.002772E+01 8.088430E+01 8.172270E+01 + 7.755065E+01 8.004659E+01 8.000661E+01 8.087697E+01 8.171655E+01 + 7.739646E+01 8.003152E+01 7.977694E+01 8.078676E+01 8.164087E+01 + 7.717741E+01 7.988925E+01 7.986242E+01 8.150081E+01 8.153585E+01 + 7.685518E+01 7.933521E+01 7.995219E+01 8.120954E+01 8.141399E+01 + 7.624669E+01 7.876559E+01 8.003544E+01 8.090867E+01 8.128688E+01 + 7.562678E+01 7.818886E+01 8.006959E+01 8.082078E+01 8.115632E+01 + 7.528481E+01 7.779265E+01 8.006312E+01 8.042746E+01 8.102217E+01 + 7.495796E+01 7.756984E+01 8.004823E+01 8.003932E+01 8.088832E+01 + 7.538199E+01 7.734728E+01 8.002602E+01 7.979701E+01 8.075833E+01 + 7.586018E+01 7.712635E+01 7.977925E+01 7.988093E+01 8.144310E+01 + 7.630130E+01 7.682676E+01 7.930853E+01 7.995629E+01 8.119547E+01 + 7.507177E+01 7.633747E+01 7.936346E+01 7.956872E+01 8.153859E+01 + 7.452036E+01 7.576431E+01 7.895898E+01 8.000996E+01 8.137102E+01 + 7.396039E+01 7.551513E+01 7.863473E+01 7.984393E+01 8.105626E+01 + 7.340946E+01 7.494415E+01 7.794884E+01 7.965743E+01 8.085452E+01 + 7.288535E+01 7.440878E+01 7.768681E+01 7.946043E+01 8.063028E+01 + 7.241922E+01 7.534671E+01 7.787363E+01 7.927536E+01 8.038536E+01 + 7.301416E+01 7.500102E+01 7.782489E+01 7.903470E+01 7.981745E+01 + 7.329395E+01 7.542824E+01 7.783408E+01 7.898834E+01 7.976348E+01 + 7.145554E+01 7.447256E+01 7.710929E+01 7.926750E+01 7.967117E+01 + 7.185292E+01 7.450468E+01 7.716214E+01 7.918651E+01 7.971148E+01 + 7.186920E+01 7.386176E+01 7.712836E+01 7.897019E+01 7.968299E+01 + 7.182910E+01 7.321508E+01 7.683175E+01 7.886995E+01 7.962674E+01 + 7.068829E+01 7.336978E+01 7.675036E+01 7.883291E+01 7.961114E+01 + 7.131498E+01 7.337034E+01 7.706005E+01 7.896573E+01 7.971242E+01 + 7.196827E+01 7.329299E+01 7.693219E+01 7.892277E+01 7.969946E+01 + 7.291562E+01 7.472856E+01 7.737757E+01 7.905072E+01 8.040911E+01 + 7.403753E+01 7.588883E+01 7.806476E+01 7.959034E+01 8.077851E+01 + 7.350251E+01 7.622129E+01 7.838648E+01 7.962279E+01 8.133964E+01 + 7.423052E+01 7.767882E+01 7.909798E+01 8.038341E+01 8.126927E+01 + 7.582288E+01 7.776986E+01 7.966910E+01 8.097933E+01 8.134453E+01 + 7.704620E+01 7.835015E+01 7.983618E+01 8.143181E+01 8.160718E+01 + 7.766609E+01 7.907766E+01 8.054038E+01 8.158761E+01 8.240772E+01 + 7.814995E+01 7.973600E+01 8.119497E+01 8.175977E+01 8.253280E+01 + 7.889692E+01 8.037983E+01 8.154321E+01 8.240293E+01 8.314002E+01 + +Band: 6, gas: 8, k-terms: 1 + 1.161111E+02 1.234681E+02 1.300702E+02 1.358007E+02 1.389329E+02 + 1.162176E+02 1.235510E+02 1.301265E+02 1.358787E+02 1.390208E+02 + 1.163238E+02 1.188680E+02 1.301825E+02 1.359565E+02 1.391086E+02 + 1.164296E+02 1.227377E+02 1.302382E+02 1.360342E+02 1.391963E+02 + 1.165383E+02 1.228549E+02 1.302954E+02 1.361141E+02 1.392866E+02 + 1.166434E+02 1.229682E+02 1.303506E+02 1.361914E+02 1.393740E+02 + 1.167482E+02 1.230813E+02 1.304055E+02 1.362686E+02 1.394613E+02 + 1.168591E+02 1.232012E+02 1.304635E+02 1.363504E+02 1.395540E+02 + 1.169955E+02 1.233488E+02 1.305347E+02 1.364513E+02 1.396683E+02 + 1.173244E+02 1.237053E+02 1.307059E+02 1.366950E+02 1.399449E+02 + 1.180846E+02 1.245334E+02 1.310989E+02 1.372156E+02 1.405912E+02 + 1.192025E+02 1.257607E+02 1.316694E+02 1.373828E+02 1.405032E+02 + 1.203842E+02 1.271664E+02 1.327587E+02 1.375411E+02 1.412425E+02 + 1.215559E+02 1.286283E+02 1.339987E+02 1.376774E+02 1.419850E+02 + 1.227104E+02 1.295519E+02 1.350913E+02 1.381363E+02 1.421631E+02 + 1.228726E+02 1.303041E+02 1.361262E+02 1.393003E+02 1.427992E+02 + 1.243895E+02 1.310311E+02 1.371634E+02 1.404786E+02 1.434368E+02 + 1.258935E+02 1.317302E+02 1.373998E+02 1.405781E+02 1.426316E+02 + 1.274810E+02 1.330260E+02 1.375724E+02 1.414026E+02 1.431068E+02 + 1.290002E+02 1.343530E+02 1.377148E+02 1.422144E+02 1.435751E+02 + 1.298676E+02 1.355215E+02 1.386187E+02 1.424275E+02 1.440426E+02 + 1.306809E+02 1.366592E+02 1.399043E+02 1.431268E+02 1.444980E+02 + 1.314114E+02 1.373089E+02 1.411170E+02 1.424073E+02 1.449233E+02 + 1.319688E+02 1.374424E+02 1.407698E+02 1.427421E+02 1.452081E+02 + 1.319067E+02 1.374343E+02 1.407327E+02 1.427207E+02 1.451899E+02 + 1.314831E+02 1.373297E+02 1.412391E+02 1.424574E+02 1.449659E+02 + 1.309547E+02 1.370528E+02 1.403523E+02 1.433687E+02 1.446556E+02 + 1.303248E+02 1.361552E+02 1.393331E+02 1.428170E+02 1.442962E+02 + 1.296471E+02 1.352203E+02 1.382808E+02 1.422424E+02 1.439221E+02 + 1.289311E+02 1.342616E+02 1.377047E+02 1.421511E+02 1.435386E+02 + 1.276128E+02 1.331379E+02 1.375852E+02 1.414696E+02 1.431454E+02 + 1.262780E+02 1.320028E+02 1.374469E+02 1.407902E+02 1.427539E+02 + 1.251007E+02 1.313644E+02 1.372951E+02 1.410372E+02 1.423745E+02 + 1.239692E+02 1.308318E+02 1.368755E+02 1.401503E+02 1.432598E+02 + 1.228513E+02 1.302937E+02 1.361117E+02 1.392839E+02 1.427903E+02 + 1.251802E+02 1.287628E+02 1.345875E+02 1.394664E+02 1.428942E+02 + 1.230360E+02 1.275182E+02 1.337673E+02 1.387471E+02 1.424142E+02 + 1.208665E+02 1.261531E+02 1.329497E+02 1.380013E+02 1.421071E+02 + 1.187183E+02 1.247288E+02 1.321183E+02 1.372537E+02 1.415868E+02 + 1.166343E+02 1.233095E+02 1.313278E+02 1.365380E+02 1.409952E+02 + 1.146901E+02 1.244855E+02 1.314217E+02 1.359162E+02 1.403472E+02 + 1.174484E+02 1.228518E+02 1.311277E+02 1.359104E+02 1.408138E+02 + 1.163613E+02 1.227490E+02 1.308487E+02 1.353547E+02 1.404617E+02 + 1.184947E+02 1.222586E+02 1.313869E+02 1.360093E+02 1.401170E+02 + 1.180895E+02 1.216582E+02 1.308214E+02 1.357296E+02 1.399075E+02 + 1.168307E+02 1.205380E+02 1.299283E+02 1.354316E+02 1.395965E+02 + 1.139388E+02 1.196965E+02 1.290997E+02 1.346065E+02 1.392484E+02 + 1.155164E+02 1.216269E+02 1.299625E+02 1.356423E+02 1.395249E+02 + 1.172620E+02 1.203923E+02 1.289067E+02 1.355314E+02 1.395015E+02 + 1.173347E+02 1.204257E+02 1.302285E+02 1.357542E+02 1.396454E+02 + 1.194388E+02 1.236851E+02 1.313709E+02 1.359796E+02 1.404440E+02 + 1.216199E+02 1.261683E+02 1.328050E+02 1.370122E+02 1.418516E+02 + 1.209598E+02 1.275069E+02 1.345660E+02 1.389065E+02 1.425322E+02 + 1.228630E+02 1.321726E+02 1.367008E+02 1.408785E+02 1.434308E+02 + 1.267535E+02 1.332526E+02 1.371335E+02 1.419563E+02 1.437181E+02 + 1.306602E+02 1.349183E+02 1.394708E+02 1.431997E+02 1.442930E+02 + 1.325403E+02 1.368281E+02 1.412951E+02 1.441645E+02 1.465876E+02 + 1.340105E+02 1.385862E+02 1.425561E+02 1.445452E+02 1.468286E+02 + 1.355829E+02 1.399223E+02 1.433425E+02 1.459403E+02 1.481321E+02 + +Band: 6, gas: 10, k-terms: 1 + 1.569596E+02 1.652864E+02 1.772614E+02 1.868837E+02 1.968291E+02 + 1.571317E+02 1.654430E+02 1.774200E+02 1.870256E+02 1.969980E+02 + 1.573034E+02 1.655999E+02 1.775787E+02 1.871678E+02 1.971663E+02 + 1.574745E+02 1.657618E+02 1.777375E+02 1.873105E+02 1.973340E+02 + 1.576502E+02 1.659194E+02 1.779010E+02 1.874572E+02 1.975052E+02 + 1.578204E+02 1.660724E+02 1.780599E+02 1.876006E+02 1.976716E+02 + 1.579900E+02 1.662258E+02 1.781951E+02 1.877444E+02 1.978373E+02 + 1.581693E+02 1.663896E+02 1.782944E+02 1.878959E+02 1.980107E+02 + 1.583881E+02 1.665937E+02 1.784146E+02 1.880771E+02 1.982162E+02 + 1.589051E+02 1.670979E+02 1.786928E+02 1.884786E+02 1.986659E+02 + 1.600914E+02 1.682869E+02 1.793154E+02 1.893838E+02 1.991687E+02 + 1.618350E+02 1.700773E+02 1.801920E+02 1.907339E+02 1.999297E+02 + 1.636818E+02 1.720247E+02 1.824572E+02 1.925616E+02 2.015313E+02 + 1.615093E+02 1.740147E+02 1.838636E+02 1.943417E+02 2.031620E+02 + 1.637335E+02 1.760373E+02 1.861608E+02 1.961388E+02 2.048143E+02 + 1.658651E+02 1.780309E+02 1.877685E+02 1.978990E+02 2.063892E+02 + 1.680608E+02 1.792504E+02 1.894067E+02 1.992374E+02 2.076636E+02 + 1.702793E+02 1.803258E+02 1.910668E+02 2.002762E+02 1.991801E+02 + 1.724767E+02 1.828440E+02 1.932022E+02 2.020251E+02 1.999254E+02 + 1.746785E+02 1.851571E+02 1.951265E+02 2.037755E+02 2.006603E+02 + 1.769125E+02 1.869690E+02 1.970705E+02 2.057105E+02 2.013943E+02 + 1.787371E+02 1.887631E+02 1.989887E+02 2.071238E+02 2.021091E+02 + 1.798784E+02 1.904661E+02 2.003884E+02 1.986496E+02 2.027748E+02 + 1.817095E+02 1.916308E+02 2.008562E+02 1.991648E+02 2.032099E+02 + 1.816515E+02 1.915897E+02 2.008119E+02 1.990970E+02 2.031471E+02 + 1.800088E+02 1.907277E+02 2.006744E+02 1.986334E+02 2.027460E+02 + 1.792015E+02 1.895282E+02 1.997996E+02 2.076981E+02 2.022034E+02 + 1.782021E+02 1.881431E+02 1.983547E+02 2.065821E+02 2.015804E+02 + 1.764054E+02 1.867091E+02 1.968775E+02 2.051995E+02 2.009337E+02 + 1.745777E+02 1.852461E+02 1.953922E+02 2.038295E+02 2.002722E+02 + 1.727153E+02 1.831478E+02 1.938978E+02 2.024649E+02 1.995953E+02 + 1.708693E+02 1.818561E+02 1.919251E+02 2.011444E+02 1.989217E+02 + 1.690855E+02 1.798766E+02 1.906630E+02 2.006545E+02 1.982684E+02 + 1.673664E+02 1.790623E+02 1.894547E+02 1.997235E+02 2.075967E+02 + 1.656725E+02 1.781839E+02 1.882714E+02 1.985228E+02 2.066258E+02 + 1.641488E+02 1.767344E+02 1.871099E+02 1.973611E+02 2.056690E+02 + 1.624651E+02 1.752661E+02 1.859315E+02 1.961998E+02 2.044232E+02 + 1.607480E+02 1.737769E+02 1.839643E+02 1.950384E+02 2.033694E+02 + 1.640841E+02 1.723450E+02 1.829817E+02 1.939404E+02 2.023805E+02 + 1.629155E+02 1.710439E+02 1.820788E+02 1.922929E+02 2.015053E+02 + 1.601005E+02 1.703594E+02 1.802587E+02 1.914805E+02 2.009685E+02 + 1.588137E+02 1.703786E+02 1.798610E+02 1.908894E+02 2.013882E+02 + 1.569467E+02 1.700786E+02 1.795273E+02 1.905751E+02 2.009366E+02 + 1.591170E+02 1.682896E+02 1.770444E+02 1.890779E+02 1.998550E+02 + 1.562039E+02 1.672737E+02 1.766603E+02 1.886857E+02 1.993977E+02 + 1.565604E+02 1.668685E+02 1.770262E+02 1.886111E+02 1.990924E+02 + 1.572564E+02 1.666843E+02 1.729387E+02 1.888716E+02 1.991117E+02 + 1.551922E+02 1.662554E+02 1.737872E+02 1.870138E+02 1.982183E+02 + 1.572601E+02 1.667990E+02 1.766924E+02 1.869956E+02 1.983190E+02 + 1.576838E+02 1.678214E+02 1.772495E+02 1.886280E+02 1.992968E+02 + 1.614979E+02 1.702089E+02 1.807650E+02 1.911634E+02 2.001708E+02 + 1.635574E+02 1.750598E+02 1.838790E+02 1.950620E+02 2.035100E+02 + 1.683066E+02 1.780409E+02 1.879172E+02 1.987030E+02 2.045463E+02 + 1.723653E+02 1.820422E+02 1.924955E+02 2.012887E+02 2.019099E+02 + 1.746532E+02 1.866811E+02 1.974888E+02 2.041832E+02 2.052001E+02 + 1.811035E+02 1.916842E+02 2.008705E+02 2.058149E+02 2.081791E+02 + 1.862359E+02 1.956230E+02 2.031703E+02 2.070358E+02 2.111145E+02 + 1.909780E+02 1.995582E+02 2.059693E+02 2.110139E+02 2.148744E+02 + 1.928892E+02 2.006477E+02 2.077093E+02 2.122015E+02 2.159272E+02 + +Band: 6, gas: 11, k-terms: 1 + 5.767443E+01 6.048215E+01 6.014023E+01 6.161581E+01 6.144328E+01 + 5.774154E+01 6.054128E+01 6.025463E+01 6.156361E+01 6.140881E+01 + 5.780854E+01 6.060033E+01 6.037022E+01 6.151042E+01 6.137436E+01 + 5.787543E+01 5.412233E+01 6.048698E+01 6.145627E+01 6.133994E+01 + 5.794348E+01 5.419653E+01 6.060795E+01 6.139936E+01 6.130436E+01 + 5.801015E+01 5.426925E+01 6.072702E+01 6.134331E+01 6.127000E+01 + 5.807673E+01 5.434301E+01 6.084720E+01 6.128635E+01 6.123569E+01 + 5.814569E+01 5.442297E+01 6.097473E+01 6.122474E+01 6.119905E+01 + 5.822446E+01 5.452489E+01 6.112854E+01 6.114684E+01 6.115296E+01 + 5.837700E+01 5.478580E+01 6.147423E+01 6.094968E+01 6.103536E+01 + 5.869493E+01 5.541768E+01 6.227130E+01 6.275236E+01 6.168975E+01 + 5.915009E+01 5.639761E+01 6.350218E+01 6.251398E+01 6.385809E+01 + 5.963001E+01 5.697883E+01 6.254312E+01 6.252640E+01 6.372377E+01 + 6.010634E+01 5.820462E+01 6.060719E+01 6.209656E+01 6.357537E+01 + 6.057636E+01 5.950947E+01 6.215641E+01 6.181703E+01 6.480218E+01 + 5.410979E+01 6.085492E+01 6.141804E+01 6.133730E+01 6.534759E+01 + 5.529356E+01 6.228902E+01 6.281424E+01 6.166156E+01 6.543652E+01 + 5.653539E+01 6.380737E+01 6.251047E+01 6.393127E+01 6.772294E+01 + 5.725415E+01 6.221384E+01 6.242386E+01 6.378589E+01 6.794731E+01 + 5.866427E+01 6.266214E+01 6.194888E+01 6.362647E+01 6.816925E+01 + 6.016218E+01 6.188602E+01 6.163446E+01 6.543608E+01 6.839102E+01 + 6.171315E+01 6.100070E+01 6.110247E+01 6.552717E+01 6.860834E+01 + 6.324734E+01 6.268401E+01 6.134032E+01 6.784220E+01 6.881418E+01 + 6.331466E+01 6.245685E+01 6.398270E+01 6.801278E+01 6.896588E+01 + 6.363093E+01 6.247631E+01 6.400349E+01 6.804571E+01 6.900053E+01 + 6.348653E+01 6.266550E+01 6.125384E+01 6.798502E+01 6.895558E+01 + 6.239194E+01 6.066957E+01 6.093278E+01 6.567298E+01 6.887712E+01 + 6.115844E+01 6.142589E+01 6.136285E+01 6.565655E+01 6.877951E+01 + 5.991093E+01 6.214039E+01 6.178340E+01 6.519545E+01 6.867605E+01 + 5.866484E+01 6.280777E+01 6.196038E+01 6.381279E+01 6.856880E+01 + 5.741561E+01 6.213668E+01 6.234825E+01 6.396093E+01 6.845765E+01 + 5.619506E+01 6.329830E+01 6.247957E+01 6.409181E+01 6.834699E+01 + 5.589315E+01 6.342269E+01 6.275834E+01 6.122961E+01 6.824088E+01 + 5.488201E+01 6.231969E+01 6.083609E+01 6.105001E+01 6.585075E+01 + 5.389435E+01 6.125729E+01 6.147923E+01 6.140371E+01 6.584970E+01 + 6.126196E+01 6.022869E+01 6.207266E+01 6.173317E+01 6.584868E+01 + 6.097130E+01 5.919681E+01 6.264105E+01 6.180036E+01 6.544229E+01 + 6.067182E+01 5.815868E+01 6.112843E+01 6.211008E+01 6.400434E+01 + 6.038104E+01 5.716681E+01 6.261102E+01 6.239441E+01 6.410671E+01 + 6.011627E+01 5.626862E+01 6.295200E+01 6.248560E+01 6.419196E+01 + 5.220463E+01 5.876756E+01 6.443255E+01 6.074961E+01 6.285763E+01 + 5.278224E+01 5.765697E+01 6.431861E+01 6.066128E+01 6.063503E+01 + 5.336357E+01 5.711590E+01 6.426725E+01 6.059540E+01 6.058440E+01 + 5.393767E+01 5.700738E+01 6.424833E+01 6.054485E+01 6.059084E+01 + 5.805623E+01 5.773075E+01 6.289219E+01 6.096279E+01 6.100202E+01 + 5.760329E+01 5.796225E+01 6.068441E+01 6.111089E+01 6.110208E+01 + 5.394308E+01 5.641811E+01 5.893714E+01 6.041017E+01 6.058793E+01 + 5.459266E+01 5.661610E+01 5.903861E+01 6.047501E+01 6.066878E+01 + 5.458374E+01 5.652626E+01 5.931479E+01 6.064832E+01 6.077222E+01 + 5.542730E+01 5.727620E+01 6.098240E+01 6.068129E+01 6.081576E+01 + 5.671382E+01 5.767371E+01 6.067601E+01 6.121516E+01 6.304235E+01 + 5.620514E+01 5.705714E+01 6.115654E+01 6.140375E+01 6.400179E+01 + 5.675285E+01 5.943227E+01 6.062620E+01 6.078715E+01 6.510889E+01 + 5.480546E+01 6.126779E+01 6.115379E+01 6.295283E+01 6.332804E+01 + 5.899237E+01 6.082833E+01 6.155527E+01 6.502788E+01 6.440560E+01 + 6.049456E+01 6.084647E+01 6.098280E+01 6.556251E+01 6.407828E+01 + 6.131044E+01 6.108154E+01 6.276816E+01 6.400666E+01 6.488607E+01 + 6.100292E+01 6.226912E+01 6.510631E+01 6.441526E+01 6.524679E+01 + 6.143152E+01 6.264867E+01 6.552668E+01 6.679465E+01 6.760151E+01 + +Band: 7, gas: 1, k-terms: 5 + 5.420470E-08 6.899643E-08 8.977829E-08 1.202349E-07 1.641486E-07 + 6.633271E-08 8.442095E-08 1.098358E-07 1.470543E-07 2.006562E-07 + 8.118271E-08 1.032944E-07 1.343928E-07 1.798439E-07 2.453126E-07 + 9.937012E-08 1.263991E-07 1.644182E-07 2.199407E-07 2.998667E-07 + 1.216256E-07 1.546876E-07 2.011838E-07 2.690012E-07 3.666444E-07 + 1.488410E-07 1.892769E-07 2.461717E-07 3.290059E-07 4.481272E-07 + 1.821729E-07 2.316487E-07 3.012291E-07 4.024659E-07 5.476957E-07 + 2.229356E-07 2.835323E-07 3.686701E-07 4.923877E-07 6.695320E-07 + 2.731622E-07 3.472958E-07 4.516306E-07 6.029731E-07 8.191715E-07 + 3.367025E-07 4.278874E-07 5.569866E-07 7.438194E-07 1.010019E-06 + 4.204641E-07 5.344682E-07 6.976889E-07 9.328135E-07 1.266823E-06 + 5.315147E-07 6.766331E-07 8.860951E-07 1.187453E-06 1.612824E-06 + 6.733841E-07 8.597499E-07 1.130566E-06 1.518323E-06 2.062331E-06 + 8.541613E-07 1.095039E-06 1.445143E-06 1.944901E-06 2.641425E-06 + 1.085746E-06 1.397615E-06 1.850063E-06 2.494897E-06 3.386574E-06 + 1.380217E-06 1.784531E-06 2.369074E-06 3.199143E-06 4.340466E-06 + 1.755637E-06 2.283315E-06 3.039743E-06 4.106097E-06 5.571299E-06 + 2.239405E-06 2.925875E-06 3.906193E-06 5.277381E-06 7.158675E-06 + 2.859559E-06 3.752001E-06 5.021418E-06 6.783983E-06 9.199904E-06 + 3.657855E-06 4.817685E-06 6.462496E-06 8.725403E-06 1.183066E-05 + 4.688909E-06 6.200282E-06 8.328973E-06 1.124096E-05 1.523312E-05 + 6.017547E-06 7.982230E-06 1.073219E-05 1.448114E-05 1.960849E-05 + 7.714067E-06 1.025906E-05 1.379523E-05 1.861307E-05 2.518330E-05 + 9.734964E-06 1.296966E-05 1.743723E-05 2.351403E-05 3.178500E-05 + 1.184755E-05 1.577319E-05 2.119395E-05 2.855554E-05 3.855635E-05 + 1.406793E-05 1.868719E-05 2.508981E-05 3.376435E-05 4.553018E-05 + 1.654693E-05 2.192552E-05 2.939995E-05 3.951490E-05 5.322646E-05 + 1.938394E-05 2.559627E-05 3.428075E-05 4.601917E-05 6.192431E-05 + 2.270708E-05 2.988046E-05 3.995188E-05 5.358557E-05 7.203055E-05 + 2.661965E-05 3.489290E-05 4.657483E-05 6.240305E-05 8.380566E-05 + 3.123596E-05 4.077649E-05 5.429669E-05 7.270638E-05 9.753529E-05 + 3.670079E-05 4.775029E-05 6.339537E-05 8.484089E-05 1.136885E-04 + 4.324739E-05 5.604563E-05 7.422325E-05 9.924219E-05 1.328872E-04 + 5.110628E-05 6.594101E-05 8.710867E-05 1.163469E-04 1.557113E-04 + 6.046129E-05 7.771659E-05 1.023991E-04 1.366291E-04 1.827063E-04 + 7.156804E-05 9.174247E-05 1.205136E-04 1.606742E-04 2.146692E-04 + 8.481032E-05 1.083430E-04 1.419002E-04 1.889296E-04 2.522472E-04 + 1.005576E-04 1.280228E-04 1.670845E-04 2.221180E-04 2.963418E-04 + 1.194695E-04 1.515593E-04 1.971444E-04 2.616465E-04 3.486562E-04 + 1.420723E-04 1.800033E-04 2.333384E-04 3.090386E-04 4.114808E-04 + 1.699033E-04 2.149967E-04 2.778146E-04 3.670927E-04 4.884033E-04 + 2.037396E-04 2.577350E-04 3.320582E-04 4.377556E-04 5.817022E-04 + 2.443429E-04 3.090068E-04 3.969802E-04 5.221778E-04 6.928795E-04 + 2.929700E-04 3.703227E-04 4.742917E-04 6.224248E-04 8.244125E-04 + 3.512996E-04 4.435609E-04 5.666205E-04 7.415121E-04 9.802959E-04 + 4.222866E-04 5.325452E-04 6.784761E-04 8.852236E-04 1.168320E-03 + 5.105760E-04 6.432474E-04 8.178651E-04 1.064413E-03 1.401661E-03 + 6.194572E-04 7.796516E-04 9.898083E-04 1.285295E-03 1.688074E-03 + 7.511294E-04 9.445697E-04 1.197184E-03 1.550968E-03 2.033061E-03 + 9.192701E-04 1.156306E-03 1.463943E-03 1.893376E-03 2.477532E-03 + 1.172433E-03 1.478730E-03 1.874112E-03 2.429144E-03 3.174395E-03 + 1.533653E-03 1.929979E-03 2.461469E-03 3.192832E-03 4.165396E-03 + 2.007801E-03 2.524942E-03 3.236883E-03 4.198603E-03 5.460930E-03 + 2.625860E-03 3.311420E-03 4.256856E-03 5.515142E-03 7.142926E-03 + 3.429436E-03 4.339435E-03 5.580962E-03 7.214451E-03 9.290204E-03 + 4.462669E-03 5.666311E-03 7.276614E-03 9.363239E-03 1.197535E-02 + 5.806351E-03 7.373814E-03 9.441141E-03 1.207442E-02 1.533257E-02 + 7.507462E-03 9.518716E-03 1.212956E-02 1.541042E-02 1.945195E-02 + 8.975527E-03 1.134740E-02 1.439004E-02 1.820003E-02 2.288838E-02 + 3.513644E-06 8.456488E-06 2.024039E-05 4.627502E-05 9.748570E-05 + 4.138491E-06 9.745292E-06 2.268837E-05 5.060861E-05 1.046448E-04 + 4.882612E-06 1.125187E-05 2.551285E-05 5.556816E-05 1.127638E-04 + 5.765144E-06 1.298535E-05 2.877546E-05 6.130183E-05 1.220507E-04 + 6.830947E-06 1.506350E-05 3.259370E-05 6.802423E-05 1.326943E-04 + 8.107578E-06 1.750704E-05 3.705188E-05 7.565675E-05 1.448653E-04 + 9.611554E-06 2.040541E-05 4.229490E-05 8.443217E-05 1.587009E-04 + 1.142679E-05 2.383335E-05 4.839454E-05 9.463673E-05 1.749464E-04 + 1.363252E-05 2.794614E-05 5.568843E-05 1.067042E-04 1.937662E-04 + 1.658891E-05 3.332845E-05 6.514586E-05 1.224425E-04 2.183469E-04 + 2.096638E-05 4.128561E-05 7.911697E-05 1.454485E-04 2.543610E-04 + 2.732798E-05 5.280926E-05 9.888919E-05 1.775323E-04 3.041834E-04 + 3.580322E-05 6.783256E-05 1.243095E-04 2.180643E-04 3.662342E-04 + 4.686334E-05 8.717573E-05 1.562388E-04 2.682526E-04 4.415135E-04 + 6.142220E-05 1.118442E-04 1.961019E-04 3.300209E-04 5.321103E-04 + 8.005279E-05 1.430627E-04 2.454925E-04 4.047144E-04 6.395339E-04 + 1.042975E-04 1.823858E-04 3.073240E-04 4.967582E-04 7.690425E-04 + 1.358037E-04 2.322746E-04 3.846562E-04 6.091650E-04 9.249265E-04 + 1.756880E-04 2.955279E-04 4.798140E-04 7.450108E-04 1.110875E-03 + 2.271390E-04 3.752624E-04 5.973707E-04 9.099073E-04 1.332294E-03 + 2.934223E-04 4.760767E-04 7.426618E-04 1.110122E-03 1.595684E-03 + 3.775340E-04 6.018290E-04 9.206749E-04 1.350539E-03 1.905598E-03 + 4.822344E-04 7.553326E-04 1.134323E-03 1.633470E-03 2.263488E-03 + 5.981805E-04 9.230843E-04 1.363947E-03 1.932093E-03 2.636915E-03 + 6.992098E-04 1.067013E-03 1.561022E-03 2.188263E-03 2.955504E-03 + 7.850218E-04 1.192816E-03 1.733899E-03 2.412466E-03 3.235746E-03 + 8.700149E-04 1.316317E-03 1.905486E-03 2.638944E-03 3.518424E-03 + 9.586600E-04 1.445193E-03 2.084829E-03 2.876709E-03 3.817155E-03 + 1.056643E-03 1.589582E-03 2.283609E-03 3.138879E-03 4.148623E-03 + 1.165863E-03 1.748919E-03 2.504359E-03 3.430672E-03 4.517813E-03 + 1.286663E-03 1.925362E-03 2.749859E-03 3.752662E-03 4.926501E-03 + 1.422860E-03 2.124394E-03 3.023546E-03 4.113737E-03 5.384921E-03 + 1.579046E-03 2.353051E-03 3.334453E-03 4.520653E-03 5.900242E-03 + 1.757453E-03 2.611475E-03 3.685537E-03 4.980376E-03 6.482040E-03 + 1.960528E-03 2.898600E-03 4.077228E-03 5.491880E-03 7.129876E-03 + 2.186733E-03 3.219628E-03 4.511963E-03 6.060817E-03 7.852626E-03 + 2.437276E-03 3.573822E-03 4.989070E-03 6.684429E-03 8.649358E-03 + 2.715009E-03 3.962082E-03 5.510206E-03 7.368329E-03 9.525274E-03 + 3.028520E-03 4.395141E-03 6.092190E-03 8.130423E-03 1.050701E-02 + 3.384778E-03 4.887158E-03 6.750781E-03 8.992290E-03 1.161920E-02 + 3.812372E-03 5.468857E-03 7.518228E-03 9.994354E-03 1.291477E-02 + 4.304928E-03 6.139328E-03 8.400650E-03 1.114806E-02 1.440669E-02 + 4.855550E-03 6.888135E-03 9.380433E-03 1.243535E-02 1.608633E-02 + 5.465791E-03 7.709961E-03 1.046496E-02 1.386194E-02 1.797163E-02 + 6.142363E-03 8.618163E-03 1.166363E-02 1.545072E-02 2.009597E-02 + 6.914468E-03 9.647343E-03 1.302792E-02 1.727637E-02 2.255461E-02 + 7.838788E-03 1.088106E-02 1.465955E-02 1.946458E-02 2.553456E-02 + 8.927890E-03 1.232256E-02 1.657089E-02 2.206278E-02 2.912412E-02 + 1.015742E-02 1.395013E-02 1.875295E-02 2.506107E-02 3.333585E-02 + 1.172614E-02 1.602336E-02 2.152986E-02 2.891845E-02 3.884520E-02 + 1.435715E-02 1.947018E-02 2.619970E-02 3.547614E-02 4.822804E-02 + 1.807142E-02 2.435902E-02 3.306808E-02 4.527210E-02 6.228311E-02 + 2.274189E-02 3.076153E-02 4.230358E-02 5.860559E-02 8.100675E-02 + 2.874496E-02 3.937525E-02 5.487465E-02 7.649416E-02 1.053815E-01 + 3.663226E-02 5.099612E-02 7.167874E-02 9.973581E-02 1.365432E-01 + 4.712999E-02 6.645807E-02 9.343245E-02 1.292953E-01 1.759514E-01 + 6.141775E-02 8.689644E-02 1.216130E-01 1.673409E-01 2.264249E-01 + 8.000499E-02 1.130195E-01 1.573973E-01 2.154875E-01 2.900075E-01 + 9.582804E-02 1.351150E-01 1.877763E-01 2.563762E-01 3.437228E-01 + 6.612397E-03 1.033587E-02 1.580130E-02 2.418169E-02 3.892875E-02 + 6.714673E-03 1.048186E-02 1.602051E-02 2.452241E-02 3.954598E-02 + 6.824849E-03 1.064823E-02 1.625649E-02 2.489409E-02 4.023565E-02 + 6.939507E-03 1.081227E-02 1.651681E-02 2.532635E-02 4.104327E-02 + 7.080115E-03 1.102557E-02 1.681628E-02 2.584125E-02 4.193354E-02 + 7.238873E-03 1.125807E-02 1.715605E-02 2.639380E-02 4.294176E-02 + 7.400922E-03 1.152213E-02 1.755444E-02 2.702115E-02 4.405763E-02 + 7.589381E-03 1.181798E-02 1.799054E-02 2.774629E-02 4.544627E-02 + 7.809031E-03 1.216739E-02 1.853214E-02 2.864165E-02 4.705218E-02 + 8.154022E-03 1.268055E-02 1.931781E-02 2.998520E-02 4.960015E-02 + 8.767686E-03 1.357074E-02 2.071673E-02 3.235301E-02 5.418901E-02 + 9.641559E-03 1.489796E-02 2.277517E-02 3.594075E-02 6.119407E-02 + 1.071573E-02 1.648622E-02 2.534471E-02 4.053252E-02 6.996409E-02 + 1.195516E-02 1.839388E-02 2.846920E-02 4.633546E-02 8.049044E-02 + 1.343831E-02 2.063764E-02 3.226645E-02 5.354492E-02 9.292226E-02 + 1.513492E-02 2.334744E-02 3.693484E-02 6.221959E-02 1.071196E-01 + 1.717627E-02 2.660014E-02 4.283867E-02 7.301773E-02 1.237684E-01 + 1.966413E-02 3.066674E-02 5.035166E-02 8.605923E-02 1.435154E-01 + 2.259808E-02 3.581336E-02 5.975089E-02 1.015348E-01 1.666973E-01 + 2.625737E-02 4.235547E-02 7.159393E-02 1.200787E-01 1.937091E-01 + 3.094571E-02 5.084974E-02 8.604780E-02 1.422237E-01 2.252443E-01 + 3.688957E-02 6.176795E-02 1.036435E-01 1.683114E-01 2.619025E-01 + 4.445416E-02 7.509838E-02 1.243737E-01 1.984920E-01 3.035823E-01 + 5.267944E-02 8.897547E-02 1.452492E-01 2.281618E-01 3.444033E-01 + 5.879538E-02 9.878667E-02 1.596909E-01 2.486127E-01 3.720683E-01 + 6.279077E-02 1.056054E-01 1.694945E-01 2.617250E-01 3.900017E-01 + 6.638711E-02 1.110156E-01 1.779270E-01 2.735966E-01 4.058395E-01 + 6.990822E-02 1.165499E-01 1.860511E-01 2.851839E-01 4.218427E-01 + 7.389995E-02 1.228934E-01 1.956426E-01 2.984485E-01 4.403305E-01 + 7.846801E-02 1.300176E-01 2.065068E-01 3.144982E-01 4.620381E-01 + 8.370663E-02 1.381184E-01 2.189353E-01 3.323353E-01 4.870184E-01 + 8.970068E-02 1.476529E-01 2.333725E-01 3.534107E-01 5.166922E-01 + 9.690887E-02 1.591649E-01 2.504266E-01 3.782820E-01 5.518704E-01 + 1.049817E-01 1.728005E-01 2.702186E-01 4.075279E-01 5.930048E-01 + 1.143733E-01 1.877691E-01 2.931620E-01 4.408781E-01 6.395092E-01 + 1.247096E-01 2.045179E-01 3.188164E-01 4.785900E-01 6.922597E-01 + 1.355431E-01 2.228711E-01 3.471823E-01 5.202880E-01 7.507431E-01 + 1.470679E-01 2.421622E-01 3.776423E-01 5.653598E-01 8.145838E-01 + 1.593986E-01 2.634340E-01 4.109442E-01 6.153088E-01 8.865362E-01 + 1.729141E-01 2.870310E-01 4.487857E-01 6.715094E-01 9.680001E-01 + 1.887442E-01 3.144327E-01 4.926911E-01 7.369035E-01 1.064230E+00 + 2.060469E-01 3.446946E-01 5.420171E-01 8.118405E-01 1.172653E+00 + 2.238846E-01 3.764732E-01 5.933343E-01 8.921459E-01 1.290349E+00 + 2.415919E-01 4.082549E-01 6.475832E-01 9.776324E-01 1.420635E+00 + 2.589003E-01 4.406700E-01 7.028205E-01 1.066979E+00 1.562104E+00 + 2.768401E-01 4.738805E-01 7.625876E-01 1.169367E+00 1.723753E+00 + 2.974507E-01 5.137961E-01 8.352864E-01 1.293828E+00 1.923341E+00 + 3.213381E-01 5.602520E-01 9.208173E-01 1.442665E+00 2.164880E+00 + 3.456861E-01 6.089326E-01 1.016208E+00 1.610623E+00 2.436146E+00 + 3.820462E-01 6.804354E-01 1.146620E+00 1.833246E+00 2.799995E+00 + 4.718395E-01 8.414229E-01 1.421999E+00 2.275817E+00 3.459768E+00 + 6.185965E-01 1.104018E+00 1.856565E+00 2.934508E+00 4.383009E+00 + 8.217600E-01 1.461622E+00 2.420314E+00 3.740829E+00 5.487138E+00 + 1.102382E+00 1.926140E+00 3.107495E+00 4.712059E+00 6.777161E+00 + 1.469154E+00 2.488276E+00 3.923121E+00 5.833279E+00 8.238653E+00 + 1.914498E+00 3.146921E+00 4.847334E+00 7.066348E+00 9.820106E+00 + 2.449157E+00 3.908448E+00 5.882491E+00 8.406687E+00 1.146746E+01 + 3.051867E+00 4.727870E+00 6.948017E+00 9.735998E+00 1.309831E+01 + 3.449907E+00 5.244764E+00 7.587491E+00 1.052463E+01 1.405739E+01 + 2.126783E+00 3.865521E+00 6.450139E+00 1.092355E+01 1.852066E+01 + 2.147960E+00 3.888702E+00 6.499204E+00 1.099744E+01 1.865712E+01 + 2.167519E+00 3.917513E+00 6.543195E+00 1.107190E+01 1.879482E+01 + 2.187270E+00 3.946519E+00 6.587461E+00 1.114693E+01 1.893381E+01 + 2.207853E+00 3.990038E+00 6.633190E+00 1.127013E+01 1.908461E+01 + 2.228107E+00 4.019857E+00 6.674015E+00 1.134765E+01 1.919391E+01 + 2.248649E+00 4.048333E+00 6.720149E+00 1.141796E+01 1.930950E+01 + 2.270740E+00 4.081211E+00 6.765415E+00 1.150318E+01 1.947895E+01 + 2.298086E+00 4.121565E+00 6.827432E+00 1.160887E+01 1.968032E+01 + 2.350523E+00 4.216455E+00 6.975099E+00 1.188395E+01 2.015953E+01 + 2.510809E+00 4.431717E+00 7.381169E+00 1.248257E+01 2.128045E+01 + 2.750968E+00 4.783730E+00 7.985520E+00 1.345152E+01 2.312593E+01 + 3.017184E+00 5.202025E+00 8.689355E+00 1.459946E+01 2.534160E+01 + 3.326890E+00 5.633697E+00 9.494320E+00 1.596678E+01 2.790872E+01 + 3.668766E+00 6.153592E+00 1.036522E+01 1.758985E+01 3.091417E+01 + 4.041599E+00 6.699252E+00 1.140275E+01 1.930641E+01 3.398047E+01 + 4.437691E+00 7.379731E+00 1.252530E+01 2.130976E+01 3.731095E+01 + 4.887979E+00 8.163680E+00 1.372613E+01 2.360889E+01 4.139259E+01 + 5.372281E+00 9.013931E+00 1.511550E+01 2.627998E+01 4.592054E+01 + 5.895804E+00 9.960114E+00 1.682938E+01 2.932694E+01 5.081065E+01 + 6.577238E+00 1.107607E+01 1.874055E+01 3.285424E+01 5.625743E+01 + 7.341921E+00 1.236143E+01 2.096539E+01 3.659812E+01 6.223692E+01 + 8.157005E+00 1.369207E+01 2.342105E+01 4.077897E+01 6.842188E+01 + 8.831249E+00 1.482531E+01 2.539639E+01 4.418110E+01 7.305951E+01 + 8.945723E+00 1.503276E+01 2.574258E+01 4.452810E+01 7.335971E+01 + 8.673427E+00 1.462350E+01 2.488649E+01 4.281365E+01 7.081214E+01 + 8.366615E+00 1.394419E+01 2.372136E+01 4.076416E+01 6.747868E+01 + 7.980563E+00 1.338974E+01 2.241510E+01 3.853267E+01 6.388920E+01 + 7.689667E+00 1.285022E+01 2.150614E+01 3.656573E+01 6.079298E+01 + 7.415347E+00 1.237448E+01 2.078481E+01 3.516671E+01 5.809075E+01 + 7.292726E+00 1.197447E+01 2.019372E+01 3.411075E+01 5.576447E+01 + 7.059954E+00 1.175958E+01 1.988604E+01 3.335768E+01 5.410149E+01 + 6.938871E+00 1.167037E+01 1.971587E+01 3.306287E+01 5.323828E+01 + 6.784033E+00 1.173215E+01 1.962977E+01 3.299571E+01 5.285216E+01 + 6.688320E+00 1.174113E+01 1.990118E+01 3.329845E+01 5.293293E+01 + 6.606922E+00 1.175667E+01 2.017134E+01 3.370769E+01 5.340883E+01 + 6.513074E+00 1.183266E+01 2.077591E+01 3.431801E+01 5.385506E+01 + 6.369978E+00 1.187439E+01 2.119990E+01 3.511471E+01 5.464685E+01 + 6.206258E+00 1.191867E+01 2.159485E+01 3.583788E+01 5.568571E+01 + 6.058374E+00 1.193060E+01 2.194814E+01 3.641081E+01 5.666269E+01 + 6.006770E+00 1.207866E+01 2.223040E+01 3.711896E+01 5.809406E+01 + 6.008698E+00 1.223242E+01 2.263443E+01 3.790564E+01 5.938307E+01 + 6.094629E+00 1.232090E+01 2.271598E+01 3.828184E+01 6.009300E+01 + 6.150603E+00 1.240452E+01 2.278059E+01 3.841759E+01 6.033304E+01 + 6.177079E+00 1.239862E+01 2.264882E+01 3.807016E+01 5.955969E+01 + 6.267717E+00 1.243600E+01 2.250672E+01 3.767992E+01 5.836245E+01 + 6.485952E+00 1.270322E+01 2.247922E+01 3.736254E+01 5.766423E+01 + 6.868310E+00 1.305874E+01 2.269987E+01 3.700841E+01 5.693816E+01 + 7.080839E+00 1.324096E+01 2.271587E+01 3.647348E+01 5.572677E+01 + 7.458195E+00 1.371249E+01 2.305399E+01 3.635281E+01 5.451711E+01 + 8.593516E+00 1.524925E+01 2.497827E+01 3.834428E+01 5.625817E+01 + 1.014609E+01 1.731053E+01 2.750323E+01 4.122462E+01 5.932732E+01 + 1.160246E+01 1.908429E+01 2.968176E+01 4.392645E+01 6.217308E+01 + 1.284150E+01 2.061164E+01 3.168038E+01 4.636858E+01 6.512596E+01 + 1.392431E+01 2.199181E+01 3.336887E+01 4.873699E+01 6.872010E+01 + 1.484978E+01 2.302006E+01 3.502528E+01 5.184346E+01 7.367364E+01 + 1.578909E+01 2.439390E+01 3.770923E+01 5.644951E+01 7.944718E+01 + 1.668757E+01 2.619878E+01 4.086605E+01 6.034569E+01 8.364043E+01 + 1.713629E+01 2.717622E+01 4.172698E+01 6.089346E+01 8.368442E+01 + 2.469849E+01 5.311652E+01 1.127903E+02 2.076339E+02 3.475252E+02 + 2.494707E+01 5.363073E+01 1.137518E+02 2.090627E+02 3.495266E+02 + 2.519490E+01 5.414858E+01 1.147186E+02 2.104965E+02 3.515328E+02 + 2.544447E+01 5.466979E+01 1.156902E+02 2.119349E+02 3.535426E+02 + 2.570383E+01 5.521113E+01 1.166977E+02 2.151963E+02 3.556198E+02 + 2.595752E+01 5.572898E+01 1.176804E+02 2.166691E+02 3.576378E+02 + 2.621327E+01 5.627499E+01 1.186680E+02 2.181463E+02 3.596579E+02 + 2.648721E+01 5.685951E+01 1.197229E+02 2.197212E+02 3.618080E+02 + 2.682795E+01 5.760860E+01 1.210339E+02 2.216752E+02 3.644730E+02 + 2.736340E+01 5.944041E+01 1.242498E+02 2.274853E+02 3.710087E+02 + 2.960459E+01 6.367515E+01 1.337391E+02 2.400389E+02 3.866380E+02 + 3.365477E+01 7.125413E+01 1.464173E+02 2.589219E+02 4.109367E+02 + 3.771998E+01 8.147735E+01 1.611345E+02 2.808368E+02 4.384192E+02 + 4.295859E+01 9.179577E+01 1.771901E+02 3.042039E+02 4.683567E+02 + 4.861003E+01 1.044361E+02 1.949252E+02 3.294255E+02 5.012843E+02 + 5.538699E+01 1.168946E+02 2.153973E+02 3.555129E+02 5.339034E+02 + 6.311069E+01 1.323376E+02 2.379025E+02 3.833931E+02 5.683843E+02 + 7.222598E+01 1.478218E+02 2.609646E+02 4.129704E+02 6.045743E+02 + 8.372453E+01 1.641813E+02 2.852401E+02 4.436303E+02 6.438867E+02 + 9.528929E+01 1.823657E+02 3.112551E+02 4.762760E+02 6.832804E+02 + 1.095115E+02 2.040363E+02 3.392062E+02 5.124857E+02 7.248329E+02 + 1.252727E+02 2.272078E+02 3.683668E+02 5.485375E+02 7.669472E+02 + 1.403295E+02 2.498222E+02 3.973298E+02 5.838785E+02 8.090262E+02 + 1.511522E+02 2.658657E+02 4.174315E+02 6.096329E+02 8.403459E+02 + 1.502398E+02 2.645394E+02 4.152125E+02 6.049347E+02 8.361660E+02 + 1.415098E+02 2.514803E+02 3.978910E+02 5.830149E+02 8.089822E+02 + 1.306635E+02 2.348017E+02 3.750953E+02 5.539940E+02 7.730032E+02 + 1.182608E+02 2.167263E+02 3.502171E+02 5.227598E+02 7.327049E+02 + 1.071677E+02 1.991410E+02 3.268542E+02 4.923053E+02 6.950277E+02 + 9.584275E+01 1.818047E+02 3.040911E+02 4.625889E+02 6.570033E+02 + 8.816323E+01 1.662173E+02 2.818609E+02 4.332093E+02 6.201638E+02 + 7.985271E+01 1.521058E+02 2.606315E+02 4.058411E+02 5.851626E+02 + 7.394360E+01 1.399886E+02 2.417500E+02 3.795648E+02 5.523373E+02 + 6.898626E+01 1.298077E+02 2.244203E+02 3.538455E+02 5.208547E+02 + 6.417721E+01 1.196390E+02 2.081207E+02 3.311147E+02 4.895388E+02 + 6.014427E+01 1.120946E+02 1.923233E+02 3.083876E+02 4.591468E+02 + 5.622010E+01 1.050319E+02 1.786875E+02 2.857714E+02 4.280068E+02 + 5.267952E+01 9.711541E+01 1.667243E+02 2.669962E+02 4.014752E+02 + 4.927085E+01 9.035726E+01 1.560463E+02 2.468521E+02 3.727567E+02 + 4.611531E+01 8.559321E+01 1.450357E+02 2.293609E+02 3.453289E+02 + 4.454889E+01 8.168803E+01 1.354926E+02 2.145732E+02 3.218153E+02 + 4.220028E+01 7.675493E+01 1.280741E+02 1.999718E+02 2.989205E+02 + 4.000635E+01 7.261322E+01 1.195013E+02 1.855809E+02 2.755343E+02 + 3.637932E+01 6.705127E+01 1.100594E+02 1.700585E+02 2.517249E+02 + 3.274851E+01 6.087140E+01 1.002006E+02 1.544733E+02 2.281082E+02 + 2.910965E+01 5.425092E+01 9.012185E+01 1.400078E+02 2.074724E+02 + 2.596003E+01 4.862120E+01 8.104331E+01 1.266336E+02 1.885059E+02 + 2.327099E+01 4.366038E+01 7.273047E+01 1.143393E+02 1.713226E+02 + 2.053467E+01 3.894834E+01 6.533433E+01 1.025185E+02 1.545406E+02 + 1.858327E+01 3.596699E+01 5.982943E+01 9.344697E+01 1.421882E+02 + 1.940603E+01 3.645497E+01 5.964119E+01 9.258857E+01 1.416805E+02 + 2.138742E+01 3.862298E+01 6.194114E+01 9.635212E+01 1.468804E+02 + 2.348578E+01 4.080123E+01 6.513964E+01 1.007043E+02 1.488766E+02 + 2.587265E+01 4.359410E+01 6.915173E+01 1.029074E+02 1.479828E+02 + 2.874062E+01 4.704150E+01 7.138610E+01 1.028491E+02 1.442340E+02 + 3.133502E+01 4.925415E+01 7.176471E+01 1.004864E+02 1.378992E+02 + 3.308988E+01 5.027263E+01 7.078117E+01 9.660152E+01 1.301956E+02 + 3.383109E+01 4.987194E+01 6.830613E+01 9.110899E+01 1.212943E+02 + 3.300998E+01 4.787384E+01 6.463244E+01 8.491403E+01 1.124325E+02 + +Band: 7, gas: 4, k-terms: 6 + 8.279085E+04 8.032134E+04 7.611737E+04 7.105802E+04 6.567428E+04 + 8.276282E+04 8.026464E+04 7.604654E+04 7.098166E+04 6.559749E+04 + 8.273161E+04 8.020527E+04 7.597350E+04 7.090349E+04 6.551922E+04 + 8.269634E+04 8.014236E+04 7.589745E+04 7.082279E+04 6.543878E+04 + 8.265600E+04 8.007412E+04 7.581614E+04 7.073724E+04 6.535395E+04 + 8.261077E+04 8.000264E+04 7.573286E+04 7.065043E+04 6.526852E+04 + 8.255874E+04 7.992518E+04 7.564446E+04 7.055934E+04 6.517944E+04 + 8.249766E+04 7.983788E+04 7.554630E+04 7.045895E+04 6.508184E+04 + 8.242230E+04 7.973049E+04 7.542565E+04 7.033567E+04 6.496189E+04 + 8.229724E+04 7.952355E+04 7.518042E+04 7.007770E+04 6.470609E+04 + 8.205551E+04 7.909133E+04 7.465522E+04 6.951762E+04 6.414574E+04 + 8.166686E+04 7.843373E+04 7.386738E+04 6.868206E+04 6.331201E+04 + 8.117214E+04 7.767358E+04 7.298228E+04 6.775587E+04 6.239469E+04 + 8.058552E+04 7.684454E+04 7.204377E+04 6.678734E+04 6.144288E+04 + 7.990627E+04 7.594801E+04 7.105448E+04 6.577980E+04 6.046046E+04 + 7.915098E+04 7.500657E+04 7.004026E+04 6.475982E+04 5.947372E+04 + 7.829840E+04 7.399127E+04 6.896851E+04 6.369408E+04 5.844975E+04 + 7.734779E+04 7.290310E+04 6.784083E+04 6.258476E+04 5.739109E+04 + 7.631045E+04 7.175656E+04 6.667381E+04 6.144872E+04 5.631433E+04 + 7.517503E+04 7.053831E+04 6.545327E+04 6.027206E+04 5.520620E+04 + 7.392634E+04 6.923196E+04 6.416302E+04 5.903926E+04 5.405200E+04 + 7.257745E+04 6.785392E+04 6.282086E+04 5.776844E+04 5.286959E+04 + 7.115788E+04 6.643722E+04 6.146089E+04 5.649328E+04 5.169152E+04 + 6.988089E+04 6.521306E+04 6.031787E+04 5.544328E+04 5.073689E+04 + 6.905142E+04 6.451128E+04 5.972693E+04 5.494666E+04 5.031967E+04 + 6.841589E+04 6.406800E+04 5.942780E+04 5.475464E+04 5.020668E+04 + 6.767005E+04 6.356822E+04 5.911012E+04 5.457029E+04 5.011912E+04 + 6.667739E+04 6.287696E+04 5.864494E+04 5.427308E+04 4.994587E+04 + 6.532097E+04 6.187543E+04 5.791692E+04 5.375396E+04 4.958559E+04 + 6.353814E+04 6.050322E+04 5.686947E+04 5.296111E+04 4.899133E+04 + 6.127974E+04 5.871183E+04 5.545681E+04 5.185224E+04 4.812472E+04 + 5.850235E+04 5.644959E+04 5.362397E+04 5.037247E+04 4.693297E+04 + 5.519376E+04 5.368910E+04 5.133491E+04 4.848151E+04 4.537447E+04 + 5.138391E+04 5.044050E+04 4.858660E+04 4.616791E+04 4.343273E+04 + 4.714266E+04 4.675029E+04 4.540829E+04 4.344851E+04 4.111582E+04 + 4.257742E+04 4.269458E+04 4.185151E+04 4.035613E+04 3.844275E+04 + 3.782902E+04 3.838652E+04 3.800459E+04 3.695830E+04 3.546415E+04 + 3.306228E+04 3.396434E+04 3.397914E+04 3.334261E+04 3.224711E+04 + 2.845539E+04 2.958568E+04 2.990836E+04 2.961763E+04 2.887758E+04 + 2.416535E+04 2.540607E+04 2.593683E+04 2.591203E+04 2.546653E+04 + 2.031282E+04 2.155878E+04 2.219938E+04 2.235462E+04 2.213212E+04 + 1.693522E+04 1.811512E+04 1.878974E+04 1.905166E+04 1.898539E+04 + 1.402216E+04 1.509786E+04 1.575684E+04 1.607087E+04 1.610618E+04 + 1.154676E+04 1.250185E+04 1.311517E+04 1.344307E+04 1.353776E+04 + 9.472106E+03 1.030339E+04 1.085496E+04 1.117165E+04 1.129498E+04 + 7.757926E+03 8.468908E+03 8.951255E+03 9.240990E+03 9.371497E+03 + 6.361907E+03 6.958677E+03 7.369127E+03 7.622394E+03 7.745437E+03 + 5.222274E+03 5.717064E+03 6.060222E+03 6.275414E+03 6.384498E+03 + 4.286504E+03 4.694601E+03 4.979177E+03 5.159516E+03 5.253405E+03 + 3.536591E+03 3.866778E+03 4.097098E+03 4.243195E+03 4.319490E+03 + 2.975560E+03 3.225632E+03 3.397373E+03 3.503391E+03 3.555161E+03 + 2.520621E+03 2.702437E+03 2.823956E+03 2.895157E+03 2.925108E+03 + 2.129240E+03 2.259496E+03 2.343561E+03 2.389322E+03 2.403854E+03 + 1.793989E+03 1.885743E+03 1.942286E+03 1.969825E+03 1.973846E+03 + 1.507681E+03 1.571163E+03 1.607919E+03 1.622808E+03 1.620053E+03 + 1.264349E+03 1.307432E+03 1.330308E+03 1.336742E+03 1.329963E+03 + 1.059630E+03 1.087907E+03 1.101001E+03 1.101808E+03 1.092780E+03 + 8.880046E+02 9.058444E+02 9.123247E+02 9.096532E+02 8.997002E+02 + 7.757866E+02 7.883797E+02 7.917962E+02 7.878355E+02 7.780363E+02 + 5.687436E+03 7.804830E+03 9.680149E+03 1.120060E+04 1.233404E+04 + 5.726391E+03 7.839501E+03 9.708843E+03 1.122285E+04 1.235014E+04 + 5.767724E+03 7.876017E+03 9.738955E+03 1.124618E+04 1.236705E+04 + 5.811919E+03 7.914749E+03 9.770757E+03 1.127079E+04 1.238493E+04 + 5.860474E+03 7.957015E+03 9.805340E+03 1.129754E+04 1.240440E+04 + 5.912403E+03 8.001806E+03 9.841825E+03 1.132574E+04 1.242502E+04 + 5.969460E+03 8.050618E+03 9.881415E+03 1.135631E+04 1.244743E+04 + 6.034442E+03 8.105911E+03 9.926135E+03 1.139083E+04 1.247279E+04 + 6.113735E+03 8.173414E+03 9.980726E+03 1.143296E+04 1.250372E+04 + 6.252694E+03 8.294577E+03 1.007970E+04 1.150913E+04 1.255868E+04 + 6.517236E+03 8.528658E+03 1.027167E+04 1.165602E+04 1.266275E+04 + 6.893656E+03 8.860153E+03 1.054175E+04 1.186074E+04 1.280558E+04 + 7.306941E+03 9.218962E+03 1.083078E+04 1.207734E+04 1.295462E+04 + 7.737853E+03 9.587391E+03 1.112395E+04 1.229450E+04 1.310200E+04 + 8.184904E+03 9.963954E+03 1.141999E+04 1.251126E+04 1.324707E+04 + 8.638703E+03 1.034068E+04 1.171269E+04 1.272329E+04 1.338722E+04 + 9.111341E+03 1.072792E+04 1.201023E+04 1.293647E+04 1.352624E+04 + 9.601754E+03 1.112461E+04 1.231174E+04 1.315019E+04 1.366373E+04 + 1.010495E+04 1.152673E+04 1.261435E+04 1.336271E+04 1.379897E+04 + 1.062538E+04 1.193798E+04 1.292096E+04 1.357613E+04 1.393326E+04 + 1.116745E+04 1.236191E+04 1.323424E+04 1.379224E+04 1.406767E+04 + 1.172590E+04 1.279452E+04 1.355152E+04 1.400970E+04 1.420193E+04 + 1.229346E+04 1.323101E+04 1.387027E+04 1.422779E+04 1.433691E+04 + 1.282777E+04 1.364273E+04 1.417498E+04 1.444281E+04 1.447883E+04 + 1.329024E+04 1.400863E+04 1.446087E+04 1.466421E+04 1.464914E+04 + 1.376170E+04 1.439158E+04 1.477312E+04 1.492108E+04 1.486306E+04 + 1.431369E+04 1.484513E+04 1.514729E+04 1.523274E+04 1.512598E+04 + 1.497468E+04 1.539222E+04 1.560035E+04 1.561028E+04 1.544388E+04 + 1.576083E+04 1.604679E+04 1.614286E+04 1.606065E+04 1.581992E+04 + 1.666816E+04 1.680835E+04 1.677599E+04 1.658544E+04 1.625570E+04 + 1.767660E+04 1.766443E+04 1.749239E+04 1.718053E+04 1.674888E+04 + 1.874609E+04 1.858563E+04 1.827038E+04 1.782971E+04 1.728703E+04 + 1.981043E+04 1.952063E+04 1.907036E+04 1.850230E+04 1.784615E+04 + 2.077727E+04 2.039566E+04 1.983407E+04 1.915261E+04 1.839050E+04 + 2.153435E+04 2.111821E+04 2.048679E+04 1.972104E+04 1.887292E+04 + 2.195955E+04 2.158160E+04 2.093799E+04 2.013223E+04 1.923140E+04 + 2.194172E+04 2.168168E+04 2.109497E+04 2.030622E+04 1.939842E+04 + 2.140487E+04 2.133344E+04 2.087294E+04 2.016368E+04 1.930250E+04 + 2.033795E+04 2.049626E+04 2.021529E+04 1.964117E+04 1.887933E+04 + 1.880999E+04 1.919749E+04 1.911984E+04 1.871729E+04 1.809611E+04 + 1.696182E+04 1.753474E+04 1.764728E+04 1.742373E+04 1.696322E+04 + 1.495145E+04 1.564570E+04 1.591049E+04 1.584894E+04 1.554741E+04 + 1.292015E+04 1.367136E+04 1.404000E+04 1.410795E+04 1.394658E+04 + 1.098247E+04 1.173522E+04 1.215885E+04 1.231653E+04 1.226539E+04 + 9.217722E+03 9.930820E+03 1.036738E+04 1.057595E+04 1.060137E+04 + 7.671625E+03 8.318114E+03 8.735815E+03 8.962271E+03 9.032656E+03 + 6.360548E+03 6.924979E+03 7.302210E+03 7.521621E+03 7.610923E+03 + 5.260328E+03 5.741053E+03 6.069358E+03 6.268547E+03 6.360637E+03 + 4.339828E+03 4.743654E+03 5.023501E+03 5.197972E+03 5.284737E+03 + 3.592723E+03 3.923628E+03 4.154346E+03 4.299906E+03 4.374444E+03 + 3.029270E+03 3.282355E+03 3.456769E+03 3.564576E+03 3.617074E+03 + 2.570158E+03 2.755784E+03 2.880687E+03 2.954469E+03 2.986044E+03 + 2.173851E+03 2.307911E+03 2.395310E+03 2.443680E+03 2.460006E+03 + 1.833518E+03 1.928685E+03 1.988162E+03 2.017995E+03 2.023619E+03 + 1.542294E+03 1.608647E+03 1.647814E+03 1.664558E+03 1.663081E+03 + 1.294384E+03 1.339773E+03 1.364532E+03 1.372374E+03 1.366526E+03 + 1.085558E+03 1.115610E+03 1.130102E+03 1.131906E+03 1.123486E+03 + 9.102966E+02 9.294474E+02 9.369105E+02 9.348875E+02 9.252652E+02 + 7.955610E+02 8.091746E+02 8.133204E+02 8.097984E+02 8.001668E+02 + 1.267772E-03 1.745973E-03 2.547581E-03 3.981167E-03 6.439056E-03 + 1.515744E-03 2.063182E-03 2.962013E-03 4.535263E-03 7.181812E-03 + 1.813443E-03 2.443257E-03 3.451776E-03 5.180443E-03 8.038798E-03 + 2.170541E-03 2.895064E-03 4.028732E-03 5.929733E-03 9.032369E-03 + 2.601124E-03 3.434252E-03 4.710067E-03 6.808112E-03 1.017922E-02 + 3.117572E-03 4.075587E-03 5.517326E-03 7.840979E-03 1.150164E-02 + 3.738868E-03 4.841686E-03 6.476013E-03 9.048996E-03 1.304597E-02 + 4.494610E-03 5.762347E-03 7.613807E-03 1.046898E-02 1.484514E-02 + 5.404274E-03 6.868840E-03 8.970500E-03 1.215858E-02 1.696742E-02 + 6.536641E-03 8.239891E-03 1.065843E-02 1.424706E-02 1.959089E-02 + 7.997458E-03 1.001866E-02 1.284935E-02 1.699870E-02 2.306130E-02 + 9.883298E-03 1.231628E-02 1.569358E-02 2.055997E-02 2.756791E-02 + 1.224082E-02 1.518004E-02 1.920958E-02 2.495362E-02 3.307680E-02 + 1.515534E-02 1.871011E-02 2.351798E-02 3.029868E-02 3.968216E-02 + 1.877616E-02 2.305997E-02 2.878807E-02 3.676199E-02 4.762783E-02 + 2.322930E-02 2.838049E-02 3.518634E-02 4.456482E-02 5.707418E-02 + 2.874545E-02 3.491861E-02 4.301690E-02 5.399773E-02 6.844891E-02 + 3.556446E-02 4.294641E-02 5.259012E-02 6.546098E-02 8.210653E-02 + 4.396727E-02 5.278787E-02 6.424791E-02 7.929640E-02 9.843226E-02 + 5.432681E-02 6.487038E-02 7.842194E-02 9.604510E-02 1.180728E-01 + 6.711336E-02 7.973720E-02 9.575247E-02 1.163138E-01 1.417108E-01 + 8.279088E-02 9.789303E-02 1.167789E-01 1.407968E-01 1.699009E-01 + 1.019924E-01 1.199195E-01 1.421354E-01 1.699641E-01 2.033763E-01 + 1.244133E-01 1.455061E-01 1.712267E-01 2.030834E-01 2.410580E-01 + 1.486262E-01 1.729849E-01 2.021018E-01 2.375534E-01 2.799431E-01 + 1.754360E-01 2.031387E-01 2.357958E-01 2.747114E-01 3.214694E-01 + 2.064997E-01 2.379556E-01 2.745429E-01 3.174287E-01 3.685793E-01 + 2.428783E-01 2.785036E-01 3.197383E-01 3.673416E-01 4.232080E-01 + 2.860443E-01 3.263970E-01 3.733129E-01 4.265167E-01 4.880296E-01 + 3.376093E-01 3.830548E-01 4.364769E-01 4.966797E-01 5.647561E-01 + 3.991225E-01 4.503076E-01 5.107631E-01 5.793009E-01 6.556765E-01 + 4.724047E-01 5.304375E-01 5.989083E-01 6.771795E-01 7.635143E-01 + 5.605765E-01 6.261768E-01 7.032727E-01 7.921979E-01 8.904718E-01 + 6.656827E-01 7.412032E-01 8.279164E-01 9.281397E-01 1.040536E+00 + 7.904093E-01 8.785630E-01 9.763569E-01 1.088935E+00 1.216562E+00 + 9.390308E-01 1.041644E+00 1.153051E+00 1.279278E+00 1.422952E+00 + 1.115470E+00 1.234183E+00 1.362627E+00 1.504635E+00 1.665690E+00 + 1.324909E+00 1.460033E+00 1.609706E+00 1.771438E+00 1.950875E+00 + 1.573950E+00 1.727113E+00 1.901376E+00 2.087007E+00 2.288511E+00 + 1.871641E+00 2.043004E+00 2.242787E+00 2.458857E+00 2.687847E+00 + 2.226261E+00 2.419602E+00 2.645722E+00 2.896349E+00 3.160518E+00 + 2.645154E+00 2.866968E+00 3.119882E+00 3.406652E+00 3.713060E+00 + 3.133323E+00 3.389879E+00 3.671270E+00 3.993617E+00 4.347905E+00 + 3.696097E+00 3.995648E+00 4.309958E+00 4.667187E+00 5.067269E+00 + 4.337831E+00 4.687937E+00 5.045615E+00 5.438342E+00 5.884444E+00 + 5.079560E+00 5.487123E+00 5.898092E+00 6.332822E+00 6.820278E+00 + 5.947935E+00 6.420763E+00 6.893883E+00 7.381149E+00 7.914941E+00 + 6.957863E+00 7.513037E+00 8.054350E+00 8.608698E+00 9.195332E+00 + 8.114912E+00 8.778011E+00 9.398807E+00 1.002721E+01 1.067755E+01 + 9.479060E+00 1.026446E+01 1.097902E+01 1.168842E+01 1.241635E+01 + 1.121664E+01 1.211734E+01 1.293697E+01 1.373392E+01 1.455058E+01 + 1.330521E+01 1.432346E+01 1.525718E+01 1.614787E+01 1.705515E+01 + 1.569978E+01 1.683166E+01 1.788524E+01 1.887676E+01 1.987040E+01 + 1.840159E+01 1.964380E+01 2.081657E+01 2.191531E+01 2.299359E+01 + 2.140337E+01 2.273512E+01 2.403058E+01 2.523038E+01 2.638833E+01 + 2.466275E+01 2.606729E+01 2.746921E+01 2.876635E+01 3.000415E+01 + 2.815174E+01 2.962759E+01 3.111077E+01 3.250809E+01 3.382069E+01 + 3.181213E+01 3.335971E+01 3.488846E+01 3.637133E+01 3.774528E+01 + 3.458004E+01 3.618226E+01 3.774530E+01 3.926060E+01 4.068594E+01 + 2.833524E-01 5.651055E-01 1.071900E+00 1.930431E+00 3.213716E+00 + 3.087937E-01 5.980961E-01 1.110090E+00 1.971387E+00 3.257966E+00 + 3.381668E-01 6.360105E-01 1.153705E+00 2.018482E+00 3.307463E+00 + 3.708006E-01 6.798804E-01 1.203990E+00 2.071305E+00 3.364451E+00 + 4.079162E-01 7.302482E-01 1.262614E+00 2.133197E+00 3.429000E+00 + 4.508682E-01 7.864755E-01 1.328418E+00 2.205656E+00 3.502222E+00 + 4.999665E-01 8.502233E-01 1.405784E+00 2.289582E+00 3.587138E+00 + 5.576838E-01 9.223578E-01 1.495796E+00 2.387935E+00 3.686902E+00 + 6.228061E-01 1.007023E+00 1.602571E+00 2.506202E+00 3.809926E+00 + 7.073347E-01 1.115658E+00 1.740716E+00 2.665865E+00 3.990478E+00 + 8.237066E-01 1.270114E+00 1.939877E+00 2.909525E+00 4.280245E+00 + 9.779176E-01 1.475331E+00 2.207149E+00 3.240503E+00 4.682924E+00 + 1.167280E+00 1.723536E+00 2.519847E+00 3.631742E+00 5.151518E+00 + 1.389956E+00 2.014860E+00 2.882669E+00 4.071731E+00 5.675723E+00 + 1.656779E+00 2.352678E+00 3.300574E+00 4.571157E+00 6.264792E+00 + 1.968489E+00 2.742210E+00 3.773233E+00 5.134268E+00 6.913027E+00 + 2.338736E+00 3.196598E+00 4.316778E+00 5.770298E+00 7.647056E+00 + 2.778708E+00 3.724388E+00 4.939752E+00 6.496374E+00 8.474242E+00 + 3.292892E+00 4.337836E+00 5.652136E+00 7.310512E+00 9.401298E+00 + 3.893953E+00 5.040660E+00 6.463768E+00 8.232128E+00 1.044008E+01 + 4.606433E+00 5.860814E+00 7.398957E+00 9.289940E+00 1.161502E+01 + 5.418879E+00 6.806646E+00 8.456973E+00 1.048856E+01 1.293018E+01 + 6.370159E+00 7.878142E+00 9.665158E+00 1.182059E+01 1.439334E+01 + 7.393838E+00 9.015160E+00 1.092435E+01 1.319160E+01 1.586322E+01 + 8.368713E+00 1.009141E+01 1.208410E+01 1.441486E+01 1.713932E+01 + 9.357852E+00 1.115944E+01 1.322177E+01 1.561054E+01 1.834158E+01 + 1.046991E+01 1.233226E+01 1.448032E+01 1.691848E+01 1.967295E+01 + 1.174321E+01 1.366120E+01 1.589482E+01 1.840160E+01 2.119734E+01 + 1.326381E+01 1.522107E+01 1.755058E+01 2.014186E+01 2.302753E+01 + 1.507647E+01 1.704212E+01 1.945302E+01 2.219129E+01 2.513205E+01 + 1.724225E+01 1.918695E+01 2.166938E+01 2.454080E+01 2.759053E+01 + 1.982682E+01 2.171471E+01 2.425986E+01 2.724421E+01 3.044785E+01 + 2.284228E+01 2.473707E+01 2.727338E+01 3.034612E+01 3.374651E+01 + 2.632433E+01 2.825264E+01 3.076713E+01 3.391236E+01 3.750981E+01 + 3.031425E+01 3.231196E+01 3.482846E+01 3.805601E+01 4.174403E+01 + 3.482248E+01 3.694823E+01 3.949875E+01 4.277613E+01 4.658214E+01 + 3.989754E+01 4.215417E+01 4.485789E+01 4.817326E+01 5.215320E+01 + 4.554903E+01 4.802089E+01 5.093605E+01 5.439278E+01 5.850382E+01 + 5.182913E+01 5.470760E+01 5.787919E+01 6.153156E+01 6.578441E+01 + 5.888930E+01 6.224943E+01 6.578041E+01 6.967498E+01 7.409388E+01 + 6.685921E+01 7.070493E+01 7.468889E+01 7.888651E+01 8.355737E+01 + 7.608047E+01 8.005709E+01 8.465645E+01 8.925542E+01 9.420063E+01 + 8.672693E+01 9.054295E+01 9.558944E+01 1.007135E+02 1.060175E+02 + 9.914354E+01 1.024994E+02 1.076422E+02 1.133437E+02 1.190444E+02 + 1.133141E+02 1.160193E+02 1.210234E+02 1.270049E+02 1.331917E+02 + 1.295061E+02 1.313568E+02 1.359561E+02 1.420634E+02 1.484791E+02 + 1.477522E+02 1.486039E+02 1.526316E+02 1.585376E+02 1.651569E+02 + 1.679536E+02 1.677195E+02 1.708991E+02 1.763866E+02 1.829618E+02 + 1.901350E+02 1.886000E+02 1.906592E+02 1.953433E+02 2.015166E+02 + 2.142856E+02 2.109615E+02 2.118554E+02 2.156004E+02 2.210008E+02 + 2.385793E+02 2.340401E+02 2.341714E+02 2.371093E+02 2.416235E+02 + 2.623525E+02 2.570370E+02 2.564446E+02 2.585500E+02 2.621649E+02 + 2.853464E+02 2.792066E+02 2.775548E+02 2.785859E+02 2.811186E+02 + 3.062429E+02 2.995623E+02 2.966585E+02 2.963491E+02 2.976474E+02 + 3.240669E+02 3.170705E+02 3.128685E+02 3.110700E+02 3.109439E+02 + 3.377311E+02 3.308491E+02 3.255035E+02 3.222709E+02 3.206913E+02 + 3.465244E+02 3.398304E+02 3.339056E+02 3.292238E+02 3.261357E+02 + 3.495783E+02 3.432706E+02 3.372703E+02 3.317059E+02 3.273257E+02 + 3.486877E+02 3.427180E+02 3.368422E+02 3.311714E+02 3.259229E+02 + 5.959131E+01 8.366967E+01 1.130014E+02 1.491029E+02 1.933204E+02 + 6.012811E+01 8.416833E+01 1.135311E+02 1.496835E+02 1.940351E+02 + 6.074873E+01 8.468371E+01 1.140641E+02 1.503169E+02 1.947488E+02 + 6.137599E+01 8.527939E+01 1.146561E+02 1.509488E+02 1.955094E+02 + 6.205909E+01 8.597475E+01 1.153356E+02 1.516136E+02 1.963089E+02 + 6.289164E+01 8.673283E+01 1.160179E+02 1.523308E+02 1.971196E+02 + 6.383693E+01 8.760831E+01 1.168408E+02 1.531447E+02 1.979552E+02 + 6.501652E+01 8.860405E+01 1.177469E+02 1.540384E+02 1.989053E+02 + 6.636641E+01 8.983906E+01 1.189169E+02 1.551912E+02 2.001107E+02 + 6.852381E+01 9.191277E+01 1.208525E+02 1.574536E+02 2.026893E+02 + 7.203667E+01 9.567406E+01 1.249086E+02 1.620738E+02 2.081602E+02 + 7.687325E+01 1.009765E+02 1.309387E+02 1.689306E+02 2.165550E+02 + 8.244513E+01 1.069491E+02 1.377135E+02 1.769587E+02 2.261131E+02 + 8.842597E+01 1.136249E+02 1.451696E+02 1.854423E+02 2.363540E+02 + 9.505588E+01 1.207964E+02 1.534067E+02 1.947780E+02 2.476002E+02 + 1.021920E+02 1.285854E+02 1.620957E+02 2.048611E+02 2.592793E+02 + 1.100628E+02 1.371031E+02 1.716655E+02 2.158565E+02 2.719427E+02 + 1.188229E+02 1.464943E+02 1.821740E+02 2.279296E+02 2.856930E+02 + 1.284640E+02 1.569850E+02 1.937480E+02 2.411995E+02 3.006022E+02 + 1.390695E+02 1.684033E+02 2.065273E+02 2.555749E+02 3.169154E+02 + 1.511800E+02 1.813059E+02 2.209343E+02 2.716710E+02 3.346376E+02 + 1.641772E+02 1.958391E+02 2.366635E+02 2.892004E+02 3.539813E+02 + 1.787332E+02 2.114773E+02 2.538039E+02 3.079676E+02 3.747881E+02 + 1.934089E+02 2.267019E+02 2.699735E+02 3.251028E+02 3.934448E+02 + 2.057524E+02 2.390065E+02 2.818652E+02 3.362986E+02 4.043194E+02 + 2.177343E+02 2.499896E+02 2.916597E+02 3.446725E+02 4.109485E+02 + 2.312793E+02 2.622456E+02 3.023868E+02 3.539960E+02 4.182052E+02 + 2.468253E+02 2.769990E+02 3.152320E+02 3.651162E+02 4.277915E+02 + 2.655573E+02 2.957018E+02 3.319427E+02 3.797803E+02 4.410010E+02 + 2.872454E+02 3.177337E+02 3.529292E+02 3.990464E+02 4.584524E+02 + 3.126069E+02 3.434681E+02 3.791048E+02 4.242237E+02 4.806829E+02 + 3.423973E+02 3.745984E+02 4.114052E+02 4.548802E+02 5.093960E+02 + 3.770468E+02 4.120049E+02 4.493529E+02 4.933312E+02 5.463650E+02 + 4.176416E+02 4.555207E+02 4.946945E+02 5.397975E+02 5.904598E+02 + 4.662873E+02 5.046836E+02 5.481240E+02 5.937902E+02 6.447643E+02 + 5.234738E+02 5.628508E+02 6.094260E+02 6.565012E+02 7.077290E+02 + 5.909948E+02 6.299074E+02 6.781725E+02 7.269782E+02 7.785131E+02 + 6.726978E+02 7.064968E+02 7.525614E+02 8.041037E+02 8.547661E+02 + 7.693877E+02 7.935917E+02 8.342683E+02 8.844314E+02 9.353417E+02 + 8.875578E+02 8.936351E+02 9.255295E+02 9.693013E+02 1.017859E+03 + 1.027122E+03 1.010509E+03 1.026594E+03 1.059724E+03 1.102639E+03 + 1.182261E+03 1.143070E+03 1.138447E+03 1.157900E+03 1.189772E+03 + 1.339939E+03 1.292704E+03 1.262937E+03 1.262515E+03 1.279509E+03 + 1.495022E+03 1.445299E+03 1.400530E+03 1.374773E+03 1.372349E+03 + 1.636768E+03 1.586647E+03 1.537255E+03 1.495298E+03 1.469154E+03 + 1.754506E+03 1.706444E+03 1.659180E+03 1.609603E+03 1.567261E+03 + 1.838159E+03 1.795247E+03 1.750743E+03 1.702488E+03 1.653148E+03 + 1.882851E+03 1.846920E+03 1.808606E+03 1.764895E+03 1.717116E+03 + 1.886723E+03 1.859947E+03 1.826995E+03 1.789158E+03 1.745114E+03 + 1.845812E+03 1.827457E+03 1.802228E+03 1.770784E+03 1.732843E+03 + 1.767452E+03 1.755989E+03 1.736890E+03 1.710670E+03 1.677764E+03 + 1.661896E+03 1.654789E+03 1.639999E+03 1.618087E+03 1.589377E+03 + 1.537468E+03 1.532945E+03 1.521532E+03 1.503563E+03 1.479308E+03 + 1.400608E+03 1.397778E+03 1.388683E+03 1.374575E+03 1.354278E+03 + 1.260080E+03 1.257655E+03 1.250002E+03 1.238005E+03 1.221498E+03 + 1.120390E+03 1.118165E+03 1.111403E+03 1.101078E+03 1.087663E+03 + 9.868681E+02 9.841709E+02 9.779955E+02 9.690049E+02 9.579394E+02 + 8.629950E+02 8.597374E+02 8.536726E+02 8.457580E+02 8.363473E+02 + 7.767153E+02 7.730555E+02 7.669021E+02 7.596463E+02 7.513067E+02 + 2.470059E+03 3.944429E+03 5.479656E+03 6.950816E+03 8.241913E+03 + 2.488548E+03 3.964846E+03 5.499599E+03 6.968691E+03 8.256893E+03 + 2.507283E+03 3.985392E+03 5.519591E+03 6.986549E+03 8.271796E+03 + 2.526299E+03 4.006077E+03 5.539620E+03 7.004359E+03 8.286566E+03 + 2.542763E+03 4.027563E+03 5.560335E+03 7.022702E+03 8.301708E+03 + 2.559385E+03 4.048649E+03 5.580531E+03 7.040474E+03 8.316258E+03 + 2.580064E+03 4.067265E+03 5.600815E+03 7.058199E+03 8.330629E+03 + 2.602719E+03 4.094632E+03 5.622450E+03 7.076996E+03 8.345755E+03 + 2.637080E+03 4.123134E+03 5.649098E+03 7.100141E+03 8.364385E+03 + 2.701066E+03 4.189237E+03 5.701593E+03 7.155814E+03 8.410305E+03 + 2.846086E+03 4.340245E+03 5.848291E+03 7.288673E+03 8.526000E+03 + 3.070096E+03 4.577978E+03 6.067276E+03 7.474226E+03 8.686376E+03 + 3.311945E+03 4.808217E+03 6.309956E+03 7.681218E+03 8.860227E+03 + 3.557192E+03 5.068064E+03 6.547545E+03 7.888895E+03 9.023238E+03 + 3.819161E+03 5.333852E+03 6.795539E+03 8.100576E+03 9.193078E+03 + 4.088317E+03 5.602846E+03 7.030876E+03 8.301089E+03 9.353669E+03 + 4.364364E+03 5.860904E+03 7.262398E+03 8.497432E+03 9.503310E+03 + 4.641830E+03 6.119461E+03 7.493130E+03 8.689769E+03 9.655845E+03 + 4.942379E+03 6.385366E+03 7.725996E+03 8.879571E+03 9.798563E+03 + 5.241576E+03 6.645070E+03 7.951270E+03 9.054837E+03 9.936964E+03 + 5.536593E+03 6.909187E+03 8.177132E+03 9.229555E+03 1.005637E+04 + 5.838282E+03 7.180766E+03 8.390465E+03 9.389773E+03 1.017653E+04 + 6.126387E+03 7.426637E+03 8.581865E+03 9.531057E+03 1.027282E+04 + 6.347849E+03 7.590967E+03 8.716423E+03 9.622048E+03 1.033265E+04 + 6.391178E+03 7.599142E+03 8.710511E+03 9.600293E+03 1.030238E+04 + 6.355616E+03 7.516246E+03 8.612597E+03 9.500095E+03 1.021558E+04 + 6.301104E+03 7.435784E+03 8.483339E+03 9.375702E+03 1.009116E+04 + 6.331208E+03 7.366961E+03 8.368193E+03 9.245753E+03 9.979460E+03 + 6.471387E+03 7.369001E+03 8.276514E+03 9.137280E+03 9.865402E+03 + 6.694562E+03 7.474687E+03 8.278235E+03 9.054699E+03 9.762817E+03 + 7.005661E+03 7.642439E+03 8.351203E+03 9.060738E+03 9.677676E+03 + 7.387142E+03 7.888916E+03 8.498902E+03 9.102313E+03 9.656330E+03 + 7.859822E+03 8.215368E+03 8.686739E+03 9.194929E+03 9.676067E+03 + 8.402652E+03 8.590010E+03 8.933792E+03 9.331581E+03 9.717138E+03 + 8.894445E+03 9.012838E+03 9.191685E+03 9.487627E+03 9.784061E+03 + 9.421928E+03 9.425406E+03 9.489321E+03 9.662663E+03 9.887182E+03 + 9.958105E+03 9.793154E+03 9.814672E+03 9.842965E+03 9.970134E+03 + 1.044580E+04 1.015461E+04 1.004863E+04 1.002242E+04 1.001696E+04 + 1.081675E+04 1.044325E+04 1.020554E+04 1.010719E+04 1.003415E+04 + 1.101197E+04 1.060895E+04 1.031281E+04 1.011314E+04 1.000516E+04 + 1.099493E+04 1.058965E+04 1.028466E+04 1.003195E+04 9.867951E+03 + 1.079271E+04 1.034744E+04 1.005643E+04 9.822014E+03 9.612398E+03 + 1.033724E+04 9.989003E+03 9.703128E+03 9.452835E+03 9.245781E+03 + 9.669165E+03 9.443753E+03 9.179883E+03 8.964705E+03 8.768502E+03 + 8.848531E+03 8.731846E+03 8.565044E+03 8.361636E+03 8.183676E+03 + 7.924898E+03 7.906936E+03 7.820152E+03 7.670555E+03 7.512290E+03 + 6.973651E+03 7.014510E+03 6.983449E+03 6.908778E+03 6.779495E+03 + 6.040730E+03 6.117104E+03 6.137837E+03 6.100941E+03 6.021105E+03 + 5.182540E+03 5.269847E+03 5.309094E+03 5.301399E+03 5.257289E+03 + 4.407821E+03 4.495868E+03 4.542380E+03 4.549701E+03 4.523268E+03 + 3.740574E+03 3.815640E+03 3.854884E+03 3.864568E+03 3.846558E+03 + 3.168113E+03 3.226237E+03 3.256700E+03 3.261824E+03 3.244998E+03 + 2.673495E+03 2.716331E+03 2.736656E+03 2.738505E+03 2.722475E+03 + 2.250144E+03 2.280260E+03 2.293108E+03 2.290358E+03 2.274327E+03 + 1.890276E+03 1.910427E+03 1.916266E+03 1.910032E+03 1.893280E+03 + 1.587102E+03 1.598653E+03 1.599384E+03 1.590575E+03 1.574196E+03 + 1.331741E+03 1.337555E+03 1.334639E+03 1.324442E+03 1.307983E+03 + 1.117148E+03 1.118811E+03 1.113794E+03 1.103226E+03 1.087798E+03 + 9.777008E+02 9.772691E+02 9.713981E+02 9.609283E+02 9.465244E+02 + +Band: 7, gas: 5, k-terms: 8 + 3.374511E+04 3.285918E+04 3.114930E+04 2.909322E+04 2.693970E+04 + 3.373992E+04 3.283919E+04 3.112269E+04 2.906439E+04 2.691077E+04 + 3.373410E+04 3.281871E+04 3.109570E+04 2.903525E+04 2.688160E+04 + 3.372728E+04 3.279744E+04 3.106808E+04 2.900560E+04 2.685200E+04 + 3.371946E+04 3.277487E+04 3.103910E+04 2.897463E+04 2.682116E+04 + 3.371077E+04 3.275205E+04 3.101021E+04 2.894394E+04 2.679070E+04 + 3.370064E+04 3.272802E+04 3.098032E+04 2.891243E+04 2.675956E+04 + 3.368877E+04 3.270157E+04 3.094780E+04 2.887831E+04 2.672595E+04 + 3.367393E+04 3.266890E+04 3.090774E+04 2.883629E+04 2.668456E+04 + 3.364607E+04 3.259820E+04 3.081859E+04 2.874159E+04 2.659049E+04 + 3.358263E+04 3.243835E+04 3.061693E+04 2.852701E+04 2.637694E+04 + 3.346663E+04 3.218858E+04 3.031028E+04 2.820387E+04 2.605678E+04 + 3.330726E+04 3.189881E+04 2.996706E+04 2.784714E+04 2.570592E+04 + 3.311001E+04 3.158366E+04 2.960585E+04 2.747667E+04 2.534426E+04 + 3.287602E+04 3.124502E+04 2.922871E+04 2.709420E+04 2.497383E+04 + 3.261332E+04 3.089348E+04 2.884706E+04 2.671090E+04 2.460560E+04 + 3.231512E+04 3.051781E+04 2.844787E+04 2.631409E+04 2.422663E+04 + 3.198265E+04 3.011944E+04 2.803263E+04 2.590538E+04 2.383838E+04 + 3.162272E+04 2.970603E+04 2.760902E+04 2.549232E+04 2.344794E+04 + 3.123251E+04 2.927329E+04 2.717226E+04 2.507022E+04 2.305070E+04 + 3.080837E+04 2.881666E+04 2.671671E+04 2.463411E+04 2.264155E+04 + 3.035792E+04 2.834420E+04 2.625114E+04 2.419209E+04 2.222838E+04 + 2.989625E+04 2.787150E+04 2.579120E+04 2.375872E+04 2.182514E+04 + 2.952046E+04 2.749936E+04 2.543658E+04 2.342908E+04 2.152152E+04 + 2.937467E+04 2.737642E+04 2.533344E+04 2.334259E+04 2.144903E+04 + 2.936360E+04 2.740373E+04 2.538463E+04 2.340712E+04 2.152143E+04 + 2.936640E+04 2.745809E+04 2.547019E+04 2.350926E+04 2.163264E+04 + 2.933416E+04 2.749159E+04 2.554467E+04 2.360682E+04 2.174376E+04 + 2.922315E+04 2.746074E+04 2.556637E+04 2.366096E+04 2.181888E+04 + 2.901224E+04 2.734625E+04 2.551746E+04 2.365622E+04 2.184407E+04 + 2.868197E+04 2.713102E+04 2.538300E+04 2.357969E+04 2.180817E+04 + 2.820510E+04 2.678866E+04 2.513873E+04 2.340872E+04 2.169092E+04 + 2.755678E+04 2.629463E+04 2.476142E+04 2.312175E+04 2.147267E+04 + 2.671841E+04 2.563090E+04 2.423430E+04 2.270335E+04 2.113953E+04 + 2.567673E+04 2.478512E+04 2.354610E+04 2.214337E+04 2.068251E+04 + 2.442085E+04 2.374423E+04 2.268314E+04 2.142823E+04 2.008863E+04 + 2.295060E+04 2.250494E+04 2.164046E+04 2.055207E+04 1.935186E+04 + 2.127723E+04 2.106995E+04 2.041544E+04 1.950870E+04 1.846445E+04 + 1.943261E+04 1.945455E+04 1.901249E+04 1.829580E+04 1.741905E+04 + 1.747281E+04 1.769669E+04 1.745591E+04 1.692775E+04 1.622271E+04 + 1.547533E+04 1.585509E+04 1.578865E+04 1.543485E+04 1.489580E+04 + 1.351161E+04 1.399743E+04 1.407098E+04 1.386913E+04 1.348239E+04 + 1.164008E+04 1.218632E+04 1.236373E+04 1.228670E+04 1.203274E+04 + 9.909493E+03 1.047568E+04 1.072082E+04 1.073847E+04 1.059319E+04 + 8.355713E+03 8.908534E+03 9.188042E+03 9.269909E+03 9.206903E+03 + 7.001427E+03 7.515017E+03 7.800358E+03 7.918256E+03 7.911300E+03 + 5.854103E+03 6.310005E+03 6.578696E+03 6.708796E+03 6.734277E+03 + 4.891157E+03 5.283651E+03 5.524027E+03 5.651271E+03 5.692425E+03 + 4.085151E+03 4.417310E+03 4.626004E+03 4.742765E+03 4.789256E+03 + 3.430329E+03 3.702602E+03 3.875932E+03 3.975624E+03 4.018810E+03 + 2.934803E+03 3.139193E+03 3.268505E+03 3.341849E+03 3.371722E+03 + 2.529043E+03 2.674823E+03 2.765223E+03 2.814049E+03 2.830122E+03 + 2.177884E+03 2.280113E+03 2.341496E+03 2.371777E+03 2.377674E+03 + 1.875767E+03 1.945981E+03 1.986024E+03 2.002662E+03 2.001310E+03 + 1.616798E+03 1.663819E+03 1.688445E+03 1.695455E+03 1.689154E+03 + 1.395853E+03 1.426336E+03 1.439944E+03 1.440499E+03 1.430962E+03 + 1.208727E+03 1.227259E+03 1.233037E+03 1.229182E+03 1.217603E+03 + 1.050440E+03 1.060525E+03 1.061007E+03 1.054286E+03 1.041635E+03 + 9.460771E+02 9.519277E+02 9.499810E+02 9.420945E+02 9.293189E+02 + 2.244557E+03 3.392578E+03 4.519700E+03 5.537742E+03 6.400596E+03 + 2.259015E+03 3.407491E+03 4.533610E+03 5.549834E+03 6.410479E+03 + 2.273533E+03 3.422430E+03 4.547518E+03 5.561907E+03 6.420330E+03 + 2.288097E+03 3.437378E+03 4.561403E+03 5.573934E+03 6.430121E+03 + 2.303185E+03 3.452822E+03 4.575721E+03 5.586313E+03 6.440181E+03 + 2.317910E+03 3.467847E+03 4.589614E+03 5.598295E+03 6.449889E+03 + 2.332717E+03 3.482902E+03 4.603495E+03 5.610231E+03 6.459528E+03 + 2.348535E+03 3.498938E+03 4.618242E+03 5.622880E+03 6.469717E+03 + 2.368093E+03 3.518733E+03 4.636429E+03 5.638471E+03 6.482268E+03 + 2.414904E+03 3.566210E+03 4.680185E+03 5.676140E+03 6.512762E+03 + 2.524699E+03 3.676996E+03 4.782028E+03 5.763705E+03 6.583614E+03 + 2.692151E+03 3.843812E+03 4.934076E+03 5.893563E+03 6.688057E+03 + 2.877442E+03 4.025412E+03 5.097736E+03 6.032020E+03 6.798434E+03 + 3.069626E+03 4.210684E+03 5.262814E+03 6.170211E+03 6.907522E+03 + 3.267206E+03 4.398156E+03 5.427928E+03 6.306916E+03 7.014398E+03 + 3.463554E+03 4.581660E+03 5.587688E+03 6.437637E+03 7.115596E+03 + 3.664934E+03 4.767120E+03 5.747286E+03 6.566816E+03 7.214414E+03 + 3.869669E+03 4.952971E+03 5.905316E+03 6.693266E+03 7.309866E+03 + 4.072990E+03 5.134944E+03 6.058127E+03 6.814063E+03 7.399683E+03 + 4.276398E+03 5.314512E+03 6.206997E+03 6.930221E+03 7.484596E+03 + 4.481787E+03 5.493343E+03 6.353205E+03 7.042904E+03 7.565299E+03 + 4.683479E+03 5.666475E+03 6.492677E+03 7.148785E+03 7.639311E+03 + 4.872526E+03 5.826245E+03 6.619356E+03 7.243132E+03 7.703267E+03 + 4.999169E+03 5.930722E+03 6.699878E+03 7.300751E+03 7.739744E+03 + 4.991497E+03 5.919964E+03 6.686967E+03 7.286534E+03 7.724947E+03 + 4.893610E+03 5.831407E+03 6.610570E+03 7.223041E+03 7.674494E+03 + 4.759124E+03 5.709879E+03 6.505961E+03 7.136384E+03 7.605901E+03 + 4.605128E+03 5.569388E+03 6.383868E+03 7.034196E+03 7.523972E+03 + 4.446796E+03 5.422681E+03 6.254254E+03 6.923759E+03 7.433435E+03 + 4.286257E+03 5.271447E+03 6.118138E+03 6.805607E+03 7.334209E+03 + 4.122798E+03 5.114899E+03 5.974564E+03 6.678622E+03 7.225025E+03 + 3.959761E+03 4.955857E+03 5.825722E+03 6.544040E+03 7.106382E+03 + 3.799031E+03 4.795917E+03 5.672740E+03 6.402368E+03 6.978173E+03 + 3.637992E+03 4.632551E+03 5.513181E+03 6.251206E+03 6.838010E+03 + 3.470157E+03 4.459489E+03 5.341200E+03 6.085240E+03 6.681116E+03 + 3.291727E+03 4.272492E+03 5.152498E+03 5.900216E+03 6.503355E+03 + 3.095631E+03 4.063909E+03 4.939476E+03 5.688906E+03 6.298078E+03 + 2.880064E+03 3.830559E+03 4.698085E+03 5.446693E+03 6.060535E+03 + 2.651178E+03 3.576499E+03 4.430406E+03 5.174095E+03 5.789744E+03 + 2.415963E+03 3.306992E+03 4.139737E+03 4.872607E+03 5.485684E+03 + 2.186158E+03 3.032809E+03 3.834847E+03 4.548823E+03 5.152811E+03 + 1.959940E+03 2.752581E+03 3.514337E+03 4.201150E+03 4.789358E+03 + 1.734381E+03 2.464584E+03 3.177247E+03 3.829009E+03 4.394965E+03 + 1.514556E+03 2.175903E+03 2.831716E+03 3.440664E+03 3.977472E+03 + 1.309104E+03 1.898221E+03 2.491342E+03 3.050420E+03 3.550984E+03 + 1.127896E+03 1.645227E+03 2.172617E+03 2.676444E+03 3.134146E+03 + 9.790401E+02 1.428778E+03 1.890692E+03 2.336405E+03 2.746130E+03 + 8.549508E+02 1.243149E+03 1.642946E+03 2.031233E+03 2.391356E+03 + 7.477930E+02 1.081238E+03 1.424369E+03 1.758720E+03 2.070735E+03 + 6.686907E+02 9.551794E+02 1.248065E+03 1.532893E+03 1.799069E+03 + 6.450714E+02 8.926853E+02 1.141215E+03 1.380068E+03 1.601535E+03 + 6.391761E+02 8.520791E+02 1.061148E+03 1.258974E+03 1.440197E+03 + 6.277012E+02 8.090797E+02 9.836085E+02 1.146146E+03 1.293293E+03 + 6.112918E+02 7.645295E+02 9.092119E+02 1.041817E+03 1.160477E+03 + 5.900867E+02 7.186151E+02 8.378321E+02 9.454264E+02 1.040554E+03 + 5.646656E+02 6.718786E+02 7.696148E+02 8.566444E+02 9.325306E+02 + 5.377983E+02 6.267433E+02 7.064722E+02 7.765379E+02 8.367073E+02 + 5.090751E+02 5.826105E+02 6.475207E+02 7.037808E+02 7.513237E+02 + 4.829554E+02 5.468930E+02 6.027955E+02 6.507468E+02 6.908185E+02 + 4.491957E-04 7.442574E-04 1.295110E-03 2.271602E-03 3.936429E-03 + 5.250503E-04 8.510728E-04 1.449754E-03 2.491174E-03 4.241576E-03 + 6.143018E-04 9.757901E-04 1.627880E-03 2.739524E-03 4.586973E-03 + 7.197499E-04 1.122058E-03 1.831467E-03 3.024781E-03 4.975743E-03 + 8.444215E-04 1.293855E-03 2.066293E-03 3.352403E-03 5.418939E-03 + 9.922478E-04 1.495342E-03 2.337388E-03 3.725776E-03 5.922184E-03 + 1.167636E-03 1.731987E-03 2.651290E-03 4.155559E-03 6.493523E-03 + 1.376877E-03 2.010592E-03 3.017508E-03 4.650648E-03 7.148890E-03 + 1.626490E-03 2.339910E-03 3.448686E-03 5.225781E-03 7.909521E-03 + 1.940352E-03 2.754244E-03 3.988880E-03 5.946986E-03 8.864208E-03 + 2.358614E-03 3.304998E-03 4.717330E-03 6.927913E-03 1.016105E-02 + 2.905929E-03 4.030992E-03 5.683982E-03 8.223174E-03 1.187951E-02 + 3.592074E-03 4.932243E-03 6.874045E-03 9.803986E-03 1.395295E-02 + 4.439735E-03 6.034754E-03 8.314977E-03 1.169325E-02 1.640019E-02 + 5.482004E-03 7.380932E-03 1.005719E-02 1.395471E-02 1.929467E-02 + 6.759188E-03 9.012103E-03 1.214502E-02 1.662623E-02 2.267220E-02 + 8.329185E-03 1.099893E-02 1.466909E-02 1.983155E-02 2.667059E-02 + 1.026532E-02 1.342276E-02 1.771636E-02 2.366102E-02 3.138712E-02 + 1.262592E-02 1.636248E-02 2.138545E-02 2.820693E-02 3.692274E-02 + 1.553399E-02 1.993724E-02 2.579554E-02 3.361537E-02 4.345465E-02 + 1.909811E-02 2.428332E-02 3.111007E-02 4.008238E-02 5.120739E-02 + 2.344605E-02 2.954007E-02 3.750543E-02 4.776996E-02 6.035700E-02 + 2.868703E-02 3.583552E-02 4.508985E-02 5.680855E-02 7.101564E-02 + 3.466013E-02 4.292384E-02 5.346984E-02 6.671502E-02 8.259546E-02 + 4.075977E-02 5.005070E-02 6.173319E-02 7.628891E-02 9.373839E-02 + 4.722242E-02 5.742842E-02 7.016417E-02 8.598517E-02 1.048810E-01 + 5.452365E-02 6.575352E-02 7.961842E-02 9.673377E-02 1.171524E-01 + 6.302620E-02 7.536761E-02 9.051072E-02 1.089772E-01 1.310846E-01 + 7.308477E-02 8.667937E-02 1.033143E-01 1.233962E-01 1.474173E-01 + 8.504372E-02 1.000997E-01 1.184055E-01 1.403943E-01 1.665114E-01 + 9.924263E-02 1.159763E-01 1.362582E-01 1.605436E-01 1.890645E-01 + 1.161219E-01 1.349710E-01 1.574556E-01 1.843891E-01 2.157668E-01 + 1.363337E-01 1.574934E-01 1.828733E-01 2.127599E-01 2.475273E-01 + 1.604199E-01 1.843320E-01 2.130915E-01 2.465972E-01 2.854237E-01 + 1.891702E-01 2.162612E-01 2.488210E-01 2.866634E-01 3.302198E-01 + 2.234974E-01 2.539935E-01 2.912802E-01 3.343068E-01 3.832487E-01 + 2.642769E-01 2.986350E-01 3.409581E-01 3.902717E-01 4.457995E-01 + 3.129673E-01 3.514609E-01 3.992704E-01 4.556355E-01 5.193802E-01 + 3.711407E-01 4.140952E-01 4.678967E-01 5.326804E-01 6.058419E-01 + 4.409129E-01 4.891107E-01 5.494009E-01 6.232852E-01 7.074321E-01 + 5.249682E-01 5.786733E-01 6.464403E-01 7.302230E-01 8.277505E-01 + 6.257750E-01 6.859855E-01 7.614958E-01 8.565645E-01 9.690568E-01 + 7.458969E-01 8.136888E-01 8.976889E-01 1.003588E+00 1.132714E+00 + 8.881458E-01 9.656374E-01 1.058121E+00 1.175760E+00 1.321479E+00 + 1.057038E+00 1.145624E+00 1.248012E+00 1.376915E+00 1.538613E+00 + 1.255407E+00 1.360048E+00 1.472561E+00 1.613410E+00 1.792139E+00 + 1.490479E+00 1.614665E+00 1.740754E+00 1.894367E+00 2.089569E+00 + 1.767327E+00 1.916249E+00 2.057328E+00 2.225000E+00 2.437000E+00 + 2.092205E+00 2.266927E+00 2.428911E+00 2.610775E+00 2.838098E+00 + 2.478588E+00 2.683685E+00 2.869505E+00 3.069377E+00 3.314720E+00 + 2.977010E+00 3.209182E+00 3.422510E+00 3.647846E+00 3.920776E+00 + 3.585383E+00 3.844489E+00 4.087588E+00 4.344625E+00 4.651290E+00 + 4.296498E+00 4.584395E+00 4.860000E+00 5.149245E+00 5.491571E+00 + 5.117720E+00 5.434807E+00 5.743787E+00 6.068665E+00 6.447524E+00 + 6.048325E+00 6.401350E+00 6.746403E+00 7.110155E+00 7.528799E+00 + 7.114479E+00 7.509577E+00 7.893937E+00 8.302172E+00 8.754310E+00 + 8.334887E+00 8.772522E+00 9.202441E+00 9.654661E+00 1.014389E+01 + 9.714250E+00 1.020464E+01 1.068216E+01 1.117616E+01 1.170290E+01 + 1.084910E+01 1.138384E+01 1.189615E+01 1.242298E+01 1.297379E+01 + 1.266480E-02 2.381589E-02 4.684570E-02 9.116755E-02 1.700171E-01 + 1.438753E-02 2.627353E-02 5.041220E-02 9.608093E-02 1.761043E-01 + 1.637746E-02 2.913194E-02 5.446356E-02 1.015190E-01 1.830093E-01 + 1.869862E-02 3.239551E-02 5.909011E-02 1.076751E-01 1.906801E-01 + 2.136458E-02 3.612691E-02 6.429411E-02 1.146471E-01 1.994282E-01 + 2.452684E-02 4.040370E-02 7.014778E-02 1.224290E-01 2.094267E-01 + 2.820255E-02 4.538957E-02 7.688548E-02 1.313666E-01 2.204857E-01 + 3.251930E-02 5.112693E-02 8.458889E-02 1.415062E-01 2.331833E-01 + 3.762195E-02 5.781834E-02 9.349251E-02 1.530922E-01 2.476666E-01 + 4.400377E-02 6.631764E-02 1.049254E-01 1.681690E-01 2.668912E-01 + 5.260481E-02 7.797150E-02 1.209353E-01 1.899612E-01 2.953812E-01 + 6.384455E-02 9.339861E-02 1.424177E-01 2.191614E-01 3.340957E-01 + 7.771935E-02 1.123421E-01 1.683614E-01 2.541770E-01 3.798395E-01 + 9.457761E-02 1.350686E-01 1.990244E-01 2.948019E-01 4.322154E-01 + 1.150164E-01 1.623279E-01 2.350723E-01 3.416572E-01 4.923428E-01 + 1.395216E-01 1.945296E-01 2.772027E-01 3.955514E-01 5.600351E-01 + 1.692007E-01 2.331269E-01 3.265615E-01 4.582187E-01 6.377815E-01 + 2.049767E-01 2.789473E-01 3.849207E-01 5.311150E-01 7.268432E-01 + 2.479325E-01 3.330801E-01 4.530123E-01 6.146721E-01 8.286174E-01 + 2.994074E-01 3.972206E-01 5.324787E-01 7.116146E-01 9.451135E-01 + 3.612632E-01 4.738130E-01 6.259439E-01 8.246984E-01 1.078715E+00 + 4.352207E-01 5.640675E-01 7.354735E-01 9.556488E-01 1.231116E+00 + 5.217276E-01 6.691049E-01 8.618369E-01 1.103573E+00 1.402847E+00 + 6.169151E-01 7.820556E-01 9.957209E-01 1.257915E+00 1.578279E+00 + 7.078684E-01 8.876564E-01 1.117708E+00 1.395313E+00 1.730219E+00 + 8.006785E-01 9.904226E-01 1.233389E+00 1.525960E+00 1.872184E+00 + 9.031648E-01 1.103714E+00 1.358995E+00 1.668272E+00 2.026805E+00 + 1.022216E+00 1.230784E+00 1.499907E+00 1.827486E+00 2.203225E+00 + 1.162472E+00 1.379441E+00 1.663515E+00 2.011090E+00 2.411408E+00 + 1.327934E+00 1.554879E+00 1.855731E+00 2.223836E+00 2.652989E+00 + 1.525410E+00 1.762996E+00 2.078608E+00 2.470806E+00 2.931888E+00 + 1.763941E+00 2.009951E+00 2.340802E+00 2.761193E+00 3.257445E+00 + 2.051947E+00 2.301049E+00 2.650025E+00 3.102815E+00 3.637540E+00 + 2.401248E+00 2.650176E+00 3.017851E+00 3.499521E+00 4.083883E+00 + 2.823192E+00 3.068114E+00 3.449334E+00 3.959348E+00 4.599916E+00 + 3.335048E+00 3.569012E+00 3.959486E+00 4.501424E+00 5.192466E+00 + 3.956552E+00 4.172724E+00 4.563108E+00 5.130792E+00 5.872738E+00 + 4.708738E+00 4.899648E+00 5.280911E+00 5.863792E+00 6.654403E+00 + 5.611706E+00 5.781304E+00 6.139515E+00 6.730578E+00 7.553062E+00 + 6.693641E+00 6.845789E+00 7.172787E+00 7.755405E+00 8.599869E+00 + 7.983972E+00 8.122174E+00 8.413903E+00 8.974319E+00 9.835715E+00 + 9.498429E+00 9.636073E+00 9.893354E+00 1.042289E+01 1.127899E+01 + 1.127081E+01 1.141284E+01 1.164179E+01 1.212364E+01 1.295002E+01 + 1.335088E+01 1.350616E+01 1.370565E+01 1.412252E+01 1.489302E+01 + 1.576546E+01 1.590692E+01 1.610339E+01 1.646842E+01 1.715197E+01 + 1.855948E+01 1.869250E+01 1.889507E+01 1.920814E+01 1.980293E+01 + 2.178802E+01 2.189716E+01 2.210275E+01 2.238341E+01 2.288586E+01 + 2.543440E+01 2.555194E+01 2.574571E+01 2.603123E+01 2.645177E+01 + 2.955395E+01 2.964869E+01 2.984394E+01 3.011470E+01 3.049067E+01 + 3.411475E+01 3.417457E+01 3.438165E+01 3.469429E+01 3.509548E+01 + 3.924724E+01 3.929851E+01 3.957403E+01 3.995664E+01 4.039912E+01 + 4.498653E+01 4.507661E+01 4.545100E+01 4.591709E+01 4.644443E+01 + 5.144600E+01 5.162631E+01 5.209232E+01 5.266286E+01 5.331904E+01 + 5.871115E+01 5.903526E+01 5.957681E+01 6.030612E+01 6.109126E+01 + 6.680509E+01 6.734928E+01 6.803206E+01 6.893162E+01 6.987021E+01 + 7.598525E+01 7.663794E+01 7.743934E+01 7.839290E+01 7.948125E+01 + 8.584463E+01 8.658154E+01 8.737935E+01 8.844746E+01 8.958734E+01 + 9.613907E+01 9.688890E+01 9.768754E+01 9.872098E+01 9.990625E+01 + 1.039455E+02 1.046629E+02 1.054707E+02 1.063330E+02 1.075648E+02 + 2.330335E-01 4.759013E-01 9.806226E-01 1.904485E+00 3.413099E+00 + 2.509951E-01 4.977760E-01 1.004706E+00 1.931206E+00 3.446019E+00 + 2.716202E-01 5.237310E-01 1.031406E+00 1.960640E+00 3.480789E+00 + 2.950412E-01 5.522792E-01 1.063093E+00 1.993999E+00 3.517796E+00 + 3.213004E-01 5.851369E-01 1.100213E+00 2.032990E+00 3.559325E+00 + 3.527284E-01 6.224999E-01 1.141826E+00 2.076632E+00 3.607755E+00 + 3.880518E-01 6.658261E-01 1.191588E+00 2.127133E+00 3.660435E+00 + 4.289311E-01 7.155732E-01 1.249011E+00 2.186277E+00 3.723289E+00 + 4.766247E-01 7.730766E-01 1.317001E+00 2.258045E+00 3.800282E+00 + 5.353304E-01 8.480322E-01 1.412041E+00 2.371635E+00 3.935024E+00 + 6.174009E-01 9.588811E-01 1.561622E+00 2.567556E+00 4.192205E+00 + 7.256233E-01 1.107755E+00 1.770258E+00 2.851346E+00 4.576612E+00 + 8.556003E-01 1.287087E+00 2.013730E+00 3.186873E+00 5.024133E+00 + 1.009843E+00 1.493077E+00 2.293509E+00 3.570400E+00 5.523463E+00 + 1.191973E+00 1.734060E+00 2.614957E+00 3.996796E+00 6.081670E+00 + 1.401079E+00 2.009494E+00 2.979605E+00 4.473073E+00 6.684540E+00 + 1.648132E+00 2.327573E+00 3.398305E+00 5.013665E+00 7.357044E+00 + 1.937104E+00 2.695079E+00 3.878606E+00 5.624602E+00 8.104606E+00 + 2.274963E+00 3.118267E+00 4.421689E+00 6.305298E+00 8.924323E+00 + 2.665118E+00 3.606210E+00 5.041293E+00 7.070114E+00 9.831010E+00 + 3.126841E+00 4.177621E+00 5.748221E+00 7.929198E+00 1.084526E+01 + 3.664367E+00 4.835928E+00 6.551131E+00 8.890845E+00 1.196145E+01 + 4.277043E+00 5.576193E+00 7.436644E+00 9.935966E+00 1.316839E+01 + 4.925349E+00 6.323280E+00 8.304606E+00 1.093655E+01 1.429310E+01 + 5.512307E+00 6.949882E+00 8.968926E+00 1.165804E+01 1.502964E+01 + 6.101743E+00 7.514331E+00 9.523879E+00 1.220034E+01 1.555410E+01 + 6.768069E+00 8.130508E+00 1.012097E+01 1.275775E+01 1.607761E+01 + 7.563973E+00 8.858519E+00 1.080529E+01 1.339218E+01 1.667327E+01 + 8.547985E+00 9.756587E+00 1.162493E+01 1.416453E+01 1.741729E+01 + 9.749218E+00 1.085927E+01 1.263864E+01 1.513263E+01 1.833310E+01 + 1.119937E+01 1.220563E+01 1.388782E+01 1.631337E+01 1.944321E+01 + 1.295788E+01 1.386285E+01 1.541409E+01 1.774317E+01 2.081431E+01 + 1.506240E+01 1.586715E+01 1.725886E+01 1.947149E+01 2.249480E+01 + 1.754684E+01 1.829970E+01 1.953499E+01 2.159116E+01 2.451222E+01 + 2.049822E+01 2.115807E+01 2.225102E+01 2.415154E+01 2.691519E+01 + 2.394638E+01 2.456623E+01 2.550294E+01 2.719183E+01 2.979889E+01 + 2.796183E+01 2.856551E+01 2.939322E+01 3.085200E+01 3.321426E+01 + 3.263122E+01 3.325029E+01 3.393101E+01 3.517182E+01 3.728398E+01 + 3.800097E+01 3.866672E+01 3.931542E+01 4.032949E+01 4.214792E+01 + 4.428601E+01 4.497653E+01 4.562380E+01 4.641688E+01 4.790773E+01 + 5.161313E+01 5.235307E+01 5.293512E+01 5.356722E+01 5.478473E+01 + 6.000416E+01 6.081616E+01 6.141536E+01 6.197042E+01 6.286016E+01 + 6.964981E+01 7.050342E+01 7.119753E+01 7.170252E+01 7.236375E+01 + 8.081460E+01 8.181012E+01 8.250195E+01 8.307721E+01 8.355048E+01 + 9.367635E+01 9.476942E+01 9.562285E+01 9.622895E+01 9.660174E+01 + 1.083918E+02 1.096851E+02 1.106415E+02 1.113909E+02 1.118696E+02 + 1.253690E+02 1.267635E+02 1.279653E+02 1.287979E+02 1.293918E+02 + 1.447276E+02 1.462355E+02 1.476489E+02 1.486825E+02 1.493974E+02 + 1.665612E+02 1.683281E+02 1.699097E+02 1.712799E+02 1.720078E+02 + 1.911451E+02 1.934755E+02 1.949681E+02 1.964201E+02 1.976199E+02 + 2.190143E+02 2.212963E+02 2.227859E+02 2.241814E+02 2.252706E+02 + 2.484154E+02 2.505527E+02 2.522464E+02 2.533358E+02 2.541409E+02 + 2.781245E+02 2.802307E+02 2.819042E+02 2.826029E+02 2.830737E+02 + 3.067833E+02 3.087095E+02 3.102403E+02 3.105636E+02 3.108212E+02 + 3.328642E+02 3.345310E+02 3.354911E+02 3.357961E+02 3.354091E+02 + 3.547982E+02 3.555879E+02 3.562130E+02 3.563310E+02 3.555628E+02 + 3.706979E+02 3.708049E+02 3.712700E+02 3.706455E+02 3.696116E+02 + 3.798702E+02 3.796720E+02 3.790356E+02 3.783159E+02 3.763945E+02 + 3.823545E+02 3.814564E+02 3.804328E+02 3.792302E+02 3.771474E+02 + 1.009881E+01 1.637801E+01 2.457363E+01 3.524712E+01 4.941518E+01 + 1.023617E+01 1.652332E+01 2.474108E+01 3.542322E+01 4.964386E+01 + 1.040825E+01 1.670537E+01 2.488623E+01 3.560909E+01 4.986966E+01 + 1.060961E+01 1.686894E+01 2.504076E+01 3.579596E+01 5.009445E+01 + 1.081610E+01 1.705630E+01 2.522870E+01 3.600193E+01 5.033137E+01 + 1.109169E+01 1.727465E+01 2.541777E+01 3.622789E+01 5.058838E+01 + 1.138577E+01 1.752805E+01 2.563542E+01 3.645008E+01 5.085444E+01 + 1.173218E+01 1.782833E+01 2.590568E+01 3.669572E+01 5.113382E+01 + 1.215328E+01 1.818607E+01 2.624885E+01 3.701240E+01 5.148846E+01 + 1.273224E+01 1.875666E+01 2.681531E+01 3.767286E+01 5.227568E+01 + 1.369360E+01 1.983989E+01 2.799407E+01 3.906386E+01 5.400175E+01 + 1.502195E+01 2.132982E+01 2.970941E+01 4.118976E+01 5.674213E+01 + 1.652765E+01 2.305589E+01 3.169229E+01 4.361195E+01 5.982417E+01 + 1.820127E+01 2.493511E+01 3.384795E+01 4.634257E+01 6.316073E+01 + 2.007848E+01 2.696036E+01 3.622630E+01 4.923708E+01 6.680598E+01 + 2.209937E+01 2.921279E+01 3.877498E+01 5.229664E+01 7.057992E+01 + 2.441458E+01 3.170352E+01 4.166075E+01 5.574537E+01 7.465947E+01 + 2.699597E+01 3.444929E+01 4.483069E+01 5.944206E+01 7.909141E+01 + 2.984500E+01 3.745951E+01 4.825623E+01 6.344970E+01 8.382628E+01 + 3.292104E+01 4.088060E+01 5.207451E+01 6.784608E+01 8.891935E+01 + 3.653012E+01 4.476912E+01 5.636456E+01 7.267395E+01 9.443519E+01 + 4.054852E+01 4.906306E+01 6.113079E+01 7.795057E+01 1.003795E+02 + 4.495562E+01 5.381625E+01 6.619384E+01 8.350861E+01 1.065062E+02 + 4.956249E+01 5.851160E+01 7.098779E+01 8.843184E+01 1.116409E+02 + 5.387045E+01 6.252661E+01 7.448367E+01 9.130505E+01 1.138117E+02 + 5.851173E+01 6.648360E+01 7.760598E+01 9.330253E+01 1.145437E+02 + 6.384280E+01 7.107371E+01 8.140954E+01 9.574453E+01 1.155116E+02 + 7.025203E+01 7.684664E+01 8.634153E+01 9.926876E+01 1.174486E+02 + 7.810180E+01 8.418435E+01 9.276687E+01 1.044190E+02 1.208145E+02 + 8.779654E+01 9.331627E+01 1.007958E+02 1.112275E+02 1.261375E+02 + 9.897008E+01 1.043696E+02 1.109525E+02 1.203450E+02 1.336272E+02 + 1.124755E+02 1.177671E+02 1.237635E+02 1.319190E+02 1.434576E+02 + 1.285143E+02 1.334978E+02 1.389281E+02 1.462776E+02 1.562962E+02 + 1.477702E+02 1.524355E+02 1.572564E+02 1.637287E+02 1.722522E+02 + 1.707550E+02 1.742340E+02 1.790755E+02 1.845476E+02 1.918307E+02 + 1.977757E+02 2.003781E+02 2.045160E+02 2.091065E+02 2.155320E+02 + 2.292482E+02 2.306121E+02 2.342671E+02 2.385264E+02 2.436783E+02 + 2.659799E+02 2.663340E+02 2.685670E+02 2.726014E+02 2.769451E+02 + 3.088337E+02 3.081964E+02 3.088936E+02 3.123961E+02 3.161233E+02 + 3.594222E+02 3.558750E+02 3.557900E+02 3.583732E+02 3.614841E+02 + 4.190428E+02 4.118648E+02 4.103217E+02 4.112719E+02 4.146493E+02 + 4.893137E+02 4.772896E+02 4.734056E+02 4.740089E+02 4.757180E+02 + 5.718311E+02 5.535380E+02 5.465339E+02 5.446457E+02 5.452322E+02 + 6.676982E+02 6.430446E+02 6.290589E+02 6.245759E+02 6.233592E+02 + 7.759162E+02 7.418893E+02 7.220093E+02 7.118798E+02 7.071725E+02 + 8.908344E+02 8.505114E+02 8.221470E+02 8.043169E+02 7.965680E+02 + 1.003582E+03 9.602791E+02 9.244327E+02 9.012731E+02 8.856064E+02 + 1.111636E+03 1.065654E+03 1.026094E+03 9.950345E+02 9.737736E+02 + 1.210568E+03 1.159779E+03 1.118655E+03 1.083451E+03 1.055205E+03 + 1.289580E+03 1.236260E+03 1.193242E+03 1.156686E+03 1.124961E+03 + 1.335872E+03 1.281506E+03 1.238508E+03 1.203765E+03 1.170483E+03 + 1.351187E+03 1.298774E+03 1.257236E+03 1.223375E+03 1.191760E+03 + 1.340580E+03 1.293066E+03 1.251283E+03 1.218216E+03 1.188747E+03 + 1.308481E+03 1.265427E+03 1.224638E+03 1.191206E+03 1.162121E+03 + 1.258337E+03 1.220146E+03 1.182103E+03 1.147488E+03 1.118676E+03 + 1.195508E+03 1.160437E+03 1.126441E+03 1.093057E+03 1.063129E+03 + 1.123823E+03 1.092791E+03 1.062243E+03 1.031953E+03 1.002986E+03 + 1.054511E+03 1.024714E+03 9.972346E+02 9.703545E+02 9.430329E+02 + 1.008162E+03 9.790543E+02 9.529001E+02 9.277298E+02 9.022257E+02 + 2.550508E+02 3.774190E+02 5.191415E+02 6.866776E+02 8.896948E+02 + 2.563019E+02 3.793123E+02 5.215637E+02 6.892679E+02 8.927122E+02 + 2.580153E+02 3.815553E+02 5.238023E+02 6.918553E+02 8.957644E+02 + 2.602683E+02 3.835409E+02 5.260800E+02 6.945391E+02 8.988552E+02 + 2.619479E+02 3.856336E+02 5.285257E+02 6.973054E+02 9.020862E+02 + 2.641641E+02 3.877919E+02 5.309274E+02 7.003406E+02 9.051282E+02 + 2.663001E+02 3.899749E+02 5.329838E+02 7.032033E+02 9.084182E+02 + 2.686444E+02 3.923583E+02 5.357313E+02 7.061432E+02 9.120184E+02 + 2.717099E+02 3.950289E+02 5.395414E+02 7.102049E+02 9.164449E+02 + 2.775388E+02 4.013021E+02 5.464545E+02 7.193219E+02 9.264515E+02 + 2.904196E+02 4.162996E+02 5.628962E+02 7.393414E+02 9.480080E+02 + 3.095226E+02 4.374557E+02 5.866814E+02 7.688306E+02 9.822181E+02 + 3.315544E+02 4.617521E+02 6.150562E+02 8.022162E+02 1.019354E+03 + 3.538474E+02 4.879778E+02 6.456616E+02 8.375254E+02 1.059971E+03 + 3.781940E+02 5.141917E+02 6.783022E+02 8.761211E+02 1.103006E+03 + 4.025085E+02 5.425977E+02 7.112607E+02 9.150534E+02 1.147018E+03 + 4.302091E+02 5.736963E+02 7.486348E+02 9.575444E+02 1.191825E+03 + 4.602501E+02 6.065070E+02 7.879777E+02 1.000210E+03 1.240925E+03 + 4.901168E+02 6.406616E+02 8.288246E+02 1.045803E+03 1.291356E+03 + 5.210351E+02 6.779491E+02 8.719530E+02 1.095026E+03 1.344730E+03 + 5.564499E+02 7.197571E+02 9.195244E+02 1.146396E+03 1.399434E+03 + 5.943778E+02 7.637424E+02 9.692415E+02 1.200970E+03 1.455808E+03 + 6.341818E+02 8.099590E+02 1.019115E+03 1.256614E+03 1.510929E+03 + 6.699027E+02 8.484334E+02 1.060150E+03 1.300128E+03 1.552083E+03 + 6.892515E+02 8.642873E+02 1.075035E+03 1.312489E+03 1.563334E+03 + 7.022603E+02 8.671194E+02 1.072965E+03 1.308391E+03 1.555592E+03 + 7.156098E+02 8.692448E+02 1.066870E+03 1.298970E+03 1.544115E+03 + 7.358511E+02 8.794663E+02 1.068436E+03 1.294253E+03 1.535369E+03 + 7.660448E+02 8.998887E+02 1.079306E+03 1.293740E+03 1.530256E+03 + 8.141737E+02 9.345667E+02 1.099652E+03 1.302653E+03 1.533545E+03 + 8.732512E+02 9.825571E+02 1.134129E+03 1.329353E+03 1.545881E+03 + 9.585080E+02 1.050484E+03 1.189393E+03 1.368844E+03 1.572455E+03 + 1.063889E+03 1.140589E+03 1.268052E+03 1.427590E+03 1.618236E+03 + 1.205127E+03 1.259558E+03 1.366226E+03 1.509187E+03 1.677310E+03 + 1.390751E+03 1.407922E+03 1.491209E+03 1.615439E+03 1.762417E+03 + 1.617252E+03 1.598354E+03 1.646607E+03 1.742318E+03 1.872051E+03 + 1.900380E+03 1.826726E+03 1.837727E+03 1.904814E+03 2.004165E+03 + 2.236983E+03 2.106975E+03 2.072863E+03 2.096765E+03 2.159082E+03 + 2.630410E+03 2.445535E+03 2.346398E+03 2.324501E+03 2.346664E+03 + 3.050950E+03 2.819723E+03 2.656867E+03 2.592042E+03 2.564092E+03 + 3.481604E+03 3.210847E+03 3.006319E+03 2.876693E+03 2.807675E+03 + 3.902412E+03 3.601672E+03 3.367000E+03 3.181483E+03 3.066374E+03 + 4.278909E+03 3.964154E+03 3.706374E+03 3.489406E+03 3.320886E+03 + 4.586354E+03 4.264460E+03 3.995195E+03 3.761150E+03 3.567984E+03 + 4.787810E+03 4.477186E+03 4.206334E+03 3.973335E+03 3.764197E+03 + 4.882332E+03 4.583454E+03 4.322795E+03 4.096290E+03 3.890362E+03 + 4.856954E+03 4.570197E+03 4.328227E+03 4.117613E+03 3.922330E+03 + 4.718371E+03 4.460068E+03 4.233656E+03 4.035727E+03 3.863991E+03 + 4.504426E+03 4.266992E+03 4.061310E+03 3.881482E+03 3.717978E+03 + 4.221775E+03 4.007837E+03 3.821016E+03 3.660067E+03 3.511486E+03 + 3.876429E+03 3.685160E+03 3.522142E+03 3.378542E+03 3.247915E+03 + 3.521008E+03 3.350400E+03 3.203292E+03 3.078575E+03 2.964298E+03 + 3.187145E+03 3.032118E+03 2.907035E+03 2.794920E+03 2.695793E+03 + 2.882181E+03 2.742905E+03 2.634834E+03 2.535272E+03 2.445637E+03 + 2.621015E+03 2.492723E+03 2.395512E+03 2.308233E+03 2.227280E+03 + 2.418286E+03 2.298504E+03 2.205151E+03 2.124497E+03 2.048352E+03 + 2.271673E+03 2.158211E+03 2.068434E+03 1.988312E+03 1.911242E+03 + 2.146698E+03 2.044943E+03 1.956773E+03 1.879135E+03 1.806927E+03 + 2.061665E+03 1.967504E+03 1.883738E+03 1.807335E+03 1.735216E+03 + 3.215019E+03 4.128223E+03 5.136849E+03 5.964156E+03 6.569683E+03 + 3.229871E+03 4.143970E+03 5.149782E+03 5.974372E+03 6.577986E+03 + 3.245198E+03 4.160056E+03 5.162969E+03 5.984769E+03 6.586403E+03 + 3.261076E+03 4.176534E+03 5.176446E+03 5.995365E+03 6.594937E+03 + 3.278047E+03 4.193957E+03 5.190669E+03 6.006524E+03 6.603883E+03 + 3.295490E+03 4.211568E+03 5.205010E+03 6.017743E+03 6.612817E+03 + 3.313958E+03 4.229922E+03 5.219917E+03 6.029364E+03 6.622004E+03 + 3.334468E+03 4.250069E+03 5.236249E+03 6.042065E+03 6.631991E+03 + 3.359591E+03 4.274795E+03 5.256276E+03 6.057635E+03 6.644238E+03 + 3.398634E+03 4.326512E+03 5.298280E+03 6.090492E+03 6.670605E+03 + 3.504724E+03 4.437621E+03 5.388312E+03 6.160970E+03 6.727721E+03 + 3.638389E+03 4.599433E+03 5.527886E+03 6.262158E+03 6.809580E+03 + 3.823244E+03 4.773050E+03 5.666740E+03 6.368510E+03 6.894991E+03 + 3.984060E+03 4.948366E+03 5.805324E+03 6.433890E+03 6.980546E+03 + 4.189583E+03 5.124246E+03 5.948403E+03 6.543541E+03 7.065783E+03 + 4.361204E+03 5.295868E+03 6.084160E+03 6.655789E+03 7.151619E+03 + 4.573898E+03 5.468518E+03 6.219289E+03 6.764741E+03 7.223503E+03 + 4.789632E+03 5.641206E+03 6.352971E+03 6.871419E+03 7.304021E+03 + 5.004932E+03 5.837156E+03 6.483050E+03 6.974032E+03 7.380401E+03 + 5.221827E+03 6.008244E+03 6.610855E+03 7.074934E+03 7.453405E+03 + 5.442571E+03 6.180514E+03 6.738911E+03 7.176808E+03 7.523739E+03 + 5.694966E+03 6.351186E+03 6.851437E+03 7.274929E+03 7.590052E+03 + 5.915093E+03 6.520530E+03 6.979168E+03 7.366820E+03 7.651323E+03 + 6.100780E+03 6.669984E+03 7.080808E+03 7.443876E+03 7.694356E+03 + 6.214822E+03 6.758712E+03 7.149735E+03 7.473552E+03 7.717698E+03 + 6.333790E+03 6.826632E+03 7.208219E+03 7.500435E+03 7.727419E+03 + 6.483170E+03 6.930441E+03 7.276849E+03 7.523584E+03 7.742042E+03 + 6.639893E+03 7.045439E+03 7.361170E+03 7.596107E+03 7.781811E+03 + 6.865482E+03 7.237595E+03 7.502809E+03 7.694305E+03 7.820904E+03 + 7.174247E+03 7.468169E+03 7.667478E+03 7.841734E+03 7.911748E+03 + 7.572402E+03 7.758353E+03 7.909572E+03 8.015567E+03 8.059094E+03 + 8.121273E+03 8.146491E+03 8.204137E+03 8.244216E+03 8.224963E+03 + 8.744253E+03 8.642372E+03 8.573541E+03 8.522342E+03 8.456658E+03 + 9.514328E+03 9.230193E+03 9.026740E+03 8.848388E+03 8.721089E+03 + 1.038275E+04 9.921164E+03 9.561125E+03 9.259231E+03 9.021315E+03 + 1.134326E+04 1.070050E+04 1.016575E+04 9.719306E+03 9.361227E+03 + 1.243974E+04 1.152933E+04 1.082244E+04 1.022918E+04 9.759355E+03 + 1.355808E+04 1.237900E+04 1.153316E+04 1.078376E+04 1.017891E+04 + 1.460294E+04 1.326008E+04 1.219413E+04 1.134262E+04 1.061450E+04 + 1.544275E+04 1.396269E+04 1.278126E+04 1.182176E+04 1.100265E+04 + 1.598834E+04 1.444163E+04 1.321960E+04 1.218649E+04 1.130306E+04 + 1.619821E+04 1.459984E+04 1.337763E+04 1.235091E+04 1.145938E+04 + 1.605640E+04 1.452112E+04 1.329191E+04 1.231206E+04 1.145173E+04 + 1.555050E+04 1.407848E+04 1.295186E+04 1.202735E+04 1.123695E+04 + 1.473033E+04 1.340033E+04 1.234475E+04 1.151098E+04 1.081637E+04 + 1.366381E+04 1.249516E+04 1.154050E+04 1.079821E+04 1.019641E+04 + 1.239191E+04 1.140545E+04 1.060238E+04 9.966434E+03 9.435675E+03 + 1.110346E+04 1.028049E+04 9.603285E+03 9.068209E+03 8.647968E+03 + 9.860511E+03 9.185015E+03 8.621597E+03 8.167957E+03 7.792589E+03 + 8.709126E+03 8.119484E+03 7.645480E+03 7.263574E+03 6.968513E+03 + 7.573967E+03 7.079842E+03 6.695130E+03 6.394527E+03 6.159005E+03 + 6.569438E+03 6.188779E+03 5.882818E+03 5.636421E+03 5.434770E+03 + 5.715188E+03 5.425982E+03 5.178328E+03 4.970970E+03 4.774860E+03 + 4.970035E+03 4.735308E+03 4.528066E+03 4.360666E+03 4.197817E+03 + 4.324709E+03 4.127880E+03 3.955005E+03 3.816436E+03 3.683665E+03 + 3.786697E+03 3.614787E+03 3.472505E+03 3.355516E+03 3.246462E+03 + 3.334606E+03 3.200980E+03 3.077246E+03 2.978603E+03 2.889450E+03 + 2.985467E+03 2.881541E+03 2.783178E+03 2.703758E+03 2.629376E+03 + 2.816505E+03 2.728763E+03 2.637459E+03 2.553056E+03 2.475844E+03 + +Band: 7, gas: 6, k-terms: 1 + 1.275625E+00 1.847433E+00 2.535200E+00 3.326636E+00 4.209214E+00 + 1.282373E+00 1.855763E+00 2.544965E+00 3.337723E+00 4.221404E+00 + 1.289188E+00 1.864169E+00 2.554816E+00 3.348906E+00 4.233699E+00 + 1.296067E+00 1.872650E+00 2.564751E+00 3.360182E+00 4.246096E+00 + 1.303240E+00 1.881487E+00 2.575100E+00 3.371926E+00 4.259009E+00 + 1.310309E+00 1.890191E+00 2.585289E+00 3.383491E+00 4.271727E+00 + 1.317487E+00 1.899023E+00 2.595626E+00 3.395225E+00 4.284636E+00 + 1.325222E+00 1.908534E+00 2.606755E+00 3.407857E+00 4.298536E+00 + 1.334806E+00 1.920312E+00 2.620528E+00 3.423482E+00 4.315721E+00 + 1.357288E+00 1.947907E+00 2.652724E+00 3.459909E+00 4.355657E+00 + 1.409940E+00 2.012328E+00 2.727627E+00 3.544376E+00 4.447963E+00 + 1.491652E+00 2.111754E+00 2.842640E+00 3.673517E+00 4.588556E+00 + 1.584678E+00 2.224163E+00 2.971885E+00 3.817919E+00 4.745099E+00 + 1.684445E+00 2.343299E+00 3.108645E+00 3.969943E+00 4.909194E+00 + 1.790896E+00 2.469250E+00 3.252625E+00 4.129198E+00 5.080348E+00 + 1.901118E+00 2.598681E+00 3.399775E+00 4.291178E+00 5.253705E+00 + 2.019207E+00 2.736372E+00 3.555441E+00 4.461712E+00 5.435473E+00 + 2.145136E+00 2.882202E+00 3.719385E+00 4.640469E+00 5.625253E+00 + 2.276931E+00 3.033810E+00 3.888920E+00 4.824509E+00 5.819892E+00 + 2.415561E+00 3.193213E+00 4.066266E+00 5.016187E+00 6.021883E+00 + 2.564092E+00 3.363060E+00 4.254288E+00 5.218557E+00 6.234389E+00 + 2.719998E+00 3.540339E+00 4.449632E+00 5.427987E+00 6.453616E+00 + 2.877515E+00 3.718589E+00 4.645295E+00 5.637116E+00 6.671996E+00 + 2.996550E+00 3.853298E+00 4.793335E+00 5.795673E+00 6.838039E+00 + 3.013458E+00 3.874344E+00 4.818755E+00 5.825505E+00 6.872142E+00 + 2.961167E+00 3.818717E+00 4.761864E+00 5.769384E+00 6.818637E+00 + 2.884273E+00 3.735960E+00 4.676108E+00 5.683497E+00 6.735273E+00 + 2.797225E+00 3.642132E+00 4.578845E+00 5.586150E+00 6.640946E+00 + 2.711862E+00 3.550574E+00 4.484690E+00 5.492949E+00 6.551944E+00 + 2.629340E+00 3.462680E+00 4.395326E+00 5.405893E+00 6.470601E+00 + 2.548704E+00 3.377384E+00 4.309701E+00 5.324060E+00 6.396214E+00 + 2.472175E+00 3.297213E+00 4.230635E+00 5.250600E+00 6.332277E+00 + 2.400981E+00 3.223791E+00 4.159920E+00 5.187519E+00 6.281032E+00 + 2.334352E+00 3.155549E+00 4.095627E+00 5.132687E+00 6.240305E+00 + 2.268971E+00 3.088300E+00 4.032692E+00 5.080320E+00 6.203839E+00 + 2.204010E+00 3.020668E+00 3.969028E+00 5.027644E+00 6.168286E+00 + 2.136337E+00 2.948543E+00 3.899325E+00 4.968143E+00 6.126086E+00 + 2.066193E+00 2.871868E+00 3.822864E+00 4.900200E+00 6.074649E+00 + 1.998660E+00 2.796627E+00 3.746110E+00 4.830260E+00 6.020008E+00 + 1.938119E+00 2.728248E+00 3.675288E+00 4.764877E+00 5.968557E+00 + 1.891437E+00 2.675447E+00 3.620721E+00 4.715441E+00 5.932132E+00 + 1.853968E+00 2.632873E+00 3.576774E+00 4.675994E+00 5.904308E+00 + 1.817867E+00 2.591073E+00 3.532349E+00 4.634092E+00 5.871563E+00 + 1.780661E+00 2.547184E+00 3.484111E+00 4.585996E+00 5.829750E+00 + 1.744003E+00 2.503373E+00 3.434821E+00 4.535029E+00 5.782605E+00 + 1.714596E+00 2.468096E+00 3.394857E+00 4.493494E+00 5.744045E+00 + 1.703994E+00 2.455922E+00 3.382048E+00 4.482583E+00 5.738154E+00 + 1.706050E+00 2.459313E+00 3.387691E+00 4.492332E+00 5.754219E+00 + 1.711011E+00 2.466141E+00 3.397194E+00 4.505853E+00 5.773710E+00 + 1.750010E+00 2.515317E+00 3.457845E+00 4.578559E+00 5.858638E+00 + 1.925868E+00 2.734654E+00 3.723549E+00 4.888607E+00 6.207502E+00 + 2.191441E+00 3.063214E+00 4.116721E+00 5.341444E+00 6.710210E+00 + 2.491725E+00 3.430614E+00 4.550414E+00 5.834053E+00 7.250058E+00 + 2.828836E+00 3.837856E+00 5.024118E+00 6.364554E+00 7.824045E+00 + 3.199211E+00 4.278906E+00 5.529474E+00 6.922625E+00 8.420413E+00 + 3.595639E+00 4.743879E+00 6.054356E+00 7.494440E+00 9.024326E+00 + 4.030622E+00 5.246201E+00 6.613094E+00 8.095168E+00 9.651492E+00 + 4.486901E+00 5.764954E+00 7.181878E+00 8.699062E+00 1.027505E+01 + 4.779478E+00 6.093363E+00 7.537916E+00 9.073509E+00 1.065857E+01 + +Band: 7, gas: 10, k-terms: 1 + 3.636276E+01 3.865430E+01 4.046708E+01 4.193300E+01 4.342608E+01 + 3.639587E+01 3.868018E+01 4.048781E+01 4.194993E+01 4.344815E+01 + 3.642887E+01 3.870599E+01 4.050848E+01 4.196682E+01 4.347018E+01 + 3.646176E+01 3.873172E+01 4.052910E+01 4.198367E+01 4.349217E+01 + 3.649556E+01 3.875818E+01 4.055030E+01 4.200101E+01 4.351482E+01 + 3.652823E+01 3.878376E+01 4.057081E+01 4.201777E+01 4.353674E+01 + 3.656079E+01 3.880926E+01 4.059126E+01 4.203449E+01 4.355863E+01 + 3.659527E+01 3.883627E+01 4.061293E+01 4.205222E+01 4.358185E+01 + 3.663770E+01 3.886952E+01 4.063961E+01 4.207405E+01 4.361047E+01 + 3.673998E+01 3.894974E+01 4.070402E+01 4.212677E+01 4.367975E+01 + 3.697647E+01 3.913555E+01 4.085342E+01 4.224922E+01 4.382573E+01 + 3.732439E+01 3.940973E+01 4.107443E+01 4.243074E+01 4.394071E+01 + 3.769246E+01 3.970087E+01 4.130985E+01 4.262686E+01 4.406224E+01 + 3.805766E+01 3.999087E+01 4.154508E+01 4.292570E+01 4.418262E+01 + 3.841779E+01 4.027795E+01 4.177869E+01 4.322588E+01 4.430102E+01 + 3.876218E+01 4.055351E+01 4.200363E+01 4.351824E+01 4.445121E+01 + 3.910332E+01 4.082749E+01 4.222796E+01 4.381219E+01 4.460715E+01 + 3.943931E+01 4.109832E+01 4.245038E+01 4.395308E+01 4.476249E+01 + 3.976355E+01 4.136063E+01 4.269108E+01 4.408832E+01 4.491408E+01 + 4.008001E+01 4.161754E+01 4.301844E+01 4.421947E+01 4.506366E+01 + 4.039277E+01 4.187233E+01 4.334718E+01 4.436028E+01 4.521310E+01 + 4.069458E+01 4.211905E+01 4.366958E+01 4.453135E+01 4.535885E+01 + 4.097386E+01 4.234808E+01 4.388849E+01 4.469095E+01 4.549508E+01 + 4.115947E+01 4.250070E+01 4.398472E+01 4.479773E+01 4.558637E+01 + 4.114764E+01 4.249096E+01 4.397861E+01 4.479090E+01 4.558053E+01 + 4.100170E+01 4.237095E+01 4.390296E+01 4.470693E+01 4.550874E+01 + 4.079836E+01 4.220408E+01 4.378166E+01 4.459051E+01 4.540932E+01 + 4.056120E+01 4.200992E+01 4.352647E+01 4.445557E+01 4.529425E+01 + 4.031244E+01 4.180681E+01 4.326224E+01 4.431519E+01 4.517456E+01 + 4.005543E+01 4.159755E+01 4.299282E+01 4.420932E+01 4.505198E+01 + 3.978976E+01 4.138187E+01 4.271800E+01 4.409921E+01 4.492640E+01 + 3.952305E+01 4.116597E+01 4.250605E+01 4.398808E+01 4.480148E+01 + 3.926246E+01 4.095564E+01 4.233312E+01 4.387901E+01 4.468050E+01 + 3.900902E+01 4.075165E+01 4.216579E+01 4.373114E+01 4.456386E+01 + 3.875738E+01 4.054966E+01 4.200048E+01 4.351413E+01 4.444903E+01 + 3.850723E+01 4.034942E+01 4.183696E+01 4.330130E+01 4.433583E+01 + 3.825058E+01 4.014452E+01 4.167002E+01 4.308581E+01 4.424609E+01 + 3.798718E+01 3.993482E+01 4.149956E+01 4.286760E+01 4.415941E+01 + 3.773117E+01 3.973156E+01 4.133470E+01 4.265828E+01 4.407501E+01 + 3.749643E+01 3.954567E+01 4.118426E+01 4.252111E+01 4.399753E+01 + 3.730748E+01 3.939638E+01 4.106366E+01 4.242188E+01 4.393512E+01 + 3.715106E+01 3.927301E+01 4.096415E+01 4.234011E+01 4.388344E+01 + 3.700078E+01 3.915467E+01 4.086881E+01 4.226185E+01 4.383377E+01 + 3.684711E+01 3.903386E+01 4.077162E+01 4.218215E+01 4.375272E+01 + 3.669499E+01 3.891444E+01 4.067567E+01 4.210356E+01 4.364923E+01 + 3.656892E+01 3.881562E+01 4.059636E+01 4.203867E+01 4.356410E+01 + 3.651395E+01 3.877258E+01 4.056184E+01 4.201044E+01 4.352715E+01 + 3.650782E+01 3.876778E+01 4.055800E+01 4.200730E+01 4.352304E+01 + 3.651293E+01 3.877178E+01 4.056120E+01 4.200992E+01 4.352647E+01 + 3.664475E+01 3.887505E+01 4.064405E+01 4.207768E+01 4.361524E+01 + 3.724144E+01 3.934427E+01 4.102161E+01 4.238731E+01 4.391330E+01 + 3.802727E+01 3.996670E+01 4.152545E+01 4.290063E+01 4.417261E+01 + 3.877976E+01 4.056761E+01 4.201515E+01 4.353332E+01 4.445920E+01 + 3.949523E+01 4.114349E+01 4.248755E+01 4.397646E+01 4.478851E+01 + 4.016276E+01 4.168487E+01 4.310490E+01 4.425361E+01 4.510304E+01 + 4.077349E+01 4.218369E+01 4.375474E+01 4.457632E+01 4.539720E+01 + 4.135084E+01 4.267870E+01 4.408330E+01 4.490840E+01 4.568112E+01 + 4.187607E+01 4.335204E+01 4.436287E+01 4.521530E+01 4.594447E+01 + 4.217551E+01 4.374395E+01 4.457063E+01 4.539235E+01 4.609683E+01 + +Band: 7, gas: 11, k-terms: 1 + 2.063383E+02 2.106706E+02 2.103498E+02 2.136998E+02 2.160129E+02 + 2.064370E+02 2.107559E+02 2.105161E+02 2.136593E+02 2.160067E+02 + 2.065354E+02 2.108410E+02 2.106839E+02 2.136179E+02 2.160000E+02 + 2.066337E+02 2.052592E+02 2.108533E+02 2.135755E+02 2.159929E+02 + 2.067337E+02 2.053588E+02 2.110288E+02 2.135306E+02 2.159850E+02 + 2.068315E+02 2.054563E+02 2.112012E+02 2.134865E+02 2.159770E+02 + 2.069292E+02 2.055548E+02 2.113752E+02 2.134414E+02 2.159686E+02 + 2.070306E+02 2.056603E+02 2.115599E+02 2.133921E+02 2.159592E+02 + 2.071471E+02 2.057910E+02 2.117831E+02 2.133279E+02 2.159469E+02 + 2.073775E+02 2.061061E+02 2.122889E+02 2.131542E+02 2.159155E+02 + 2.078632E+02 2.068446E+02 2.134558E+02 2.160379E+02 2.165842E+02 + 2.085599E+02 2.079627E+02 2.152491E+02 2.160782E+02 2.188934E+02 + 2.092939E+02 2.055562E+02 2.138008E+02 2.167872E+02 2.189547E+02 + 2.100212E+02 2.074069E+02 2.108882E+02 2.168248E+02 2.190031E+02 + 2.107378E+02 2.093583E+02 2.142758E+02 2.161245E+02 2.201124E+02 + 2.053902E+02 2.113519E+02 2.136228E+02 2.159925E+02 2.206618E+02 + 2.067674E+02 2.134585E+02 2.161492E+02 2.165172E+02 2.208724E+02 + 2.081743E+02 2.156700E+02 2.161924E+02 2.189652E+02 2.223518E+02 + 2.059541E+02 2.132790E+02 2.168359E+02 2.190367E+02 2.226564E+02 + 2.080755E+02 2.147535E+02 2.168574E+02 2.190915E+02 2.229571E+02 + 2.103063E+02 2.140778E+02 2.160792E+02 2.206439E+02 2.232575E+02 + 2.125936E+02 2.132857E+02 2.159163E+02 2.208721E+02 2.235512E+02 + 2.148358E+02 2.162826E+02 2.163059E+02 2.223671E+02 2.238275E+02 + 2.152608E+02 2.163078E+02 2.190471E+02 2.225907E+02 2.240225E+02 + 2.155926E+02 2.163272E+02 2.190547E+02 2.226074E+02 2.240417E+02 + 2.151728E+02 2.163432E+02 2.162363E+02 2.224833E+02 2.239413E+02 + 2.135702E+02 2.130186E+02 2.158512E+02 2.210378E+02 2.237907E+02 + 2.117528E+02 2.137139E+02 2.159923E+02 2.208998E+02 2.236113E+02 + 2.099013E+02 2.143612E+02 2.161284E+02 2.204256E+02 2.234231E+02 + 2.080378E+02 2.149566E+02 2.168855E+02 2.192204E+02 2.232293E+02 + 2.061551E+02 2.131064E+02 2.168957E+02 2.191853E+02 2.230295E+02 + 2.043008E+02 2.153038E+02 2.164636E+02 2.191357E+02 2.228305E+02 + 2.076229E+02 2.150528E+02 2.164805E+02 2.161579E+02 2.226383E+02 + 2.065064E+02 2.134365E+02 2.132217E+02 2.158757E+02 2.211487E+02 + 2.054013E+02 2.118702E+02 2.138121E+02 2.159988E+02 2.210399E+02 + 2.116746E+02 2.103445E+02 2.143521E+02 2.161116E+02 2.209312E+02 + 2.112243E+02 2.088048E+02 2.148649E+02 2.168882E+02 2.205172E+02 + 2.107602E+02 2.072463E+02 2.115495E+02 2.169064E+02 2.193004E+02 + 2.103091E+02 2.057481E+02 2.137840E+02 2.169218E+02 2.192653E+02 + 2.098977E+02 2.043834E+02 2.150144E+02 2.166219E+02 2.192267E+02 + 2.019715E+02 2.047710E+02 2.162493E+02 2.139898E+02 2.174430E+02 + 2.001238E+02 2.037469E+02 2.151608E+02 2.137380E+02 2.155084E+02 + 1.982965E+02 2.024127E+02 2.139983E+02 2.135077E+02 2.152855E+02 + 1.964670E+02 2.008253E+02 2.127296E+02 2.128707E+02 2.151790E+02 + 2.014869E+02 2.031696E+02 2.094977E+02 2.131392E+02 2.156895E+02 + 2.039409E+02 2.045644E+02 2.066929E+02 2.133172E+02 2.156806E+02 + 1.970157E+02 2.005836E+02 2.048071E+02 2.117963E+02 2.146967E+02 + 2.001309E+02 2.020497E+02 2.069796E+02 2.122061E+02 2.149719E+02 + 1.975663E+02 2.010046E+02 2.051602E+02 2.123105E+02 2.152270E+02 + 2.019627E+02 2.036355E+02 2.064330E+02 2.128938E+02 2.153347E+02 + 2.008779E+02 2.030959E+02 2.099706E+02 2.134016E+02 2.173398E+02 + 2.037098E+02 2.067370E+02 2.093520E+02 2.158855E+02 2.191594E+02 + 2.022575E+02 2.068663E+02 2.120224E+02 2.148653E+02 2.194910E+02 + 2.055997E+02 2.090362E+02 2.142298E+02 2.179365E+02 2.175272E+02 + 2.074700E+02 2.119686E+02 2.166426E+02 2.199266E+02 2.189622E+02 + 2.096710E+02 2.149792E+02 2.160563E+02 2.207406E+02 2.204393E+02 + 2.105418E+02 2.132670E+02 2.179864E+02 2.202060E+02 2.215367E+02 + 2.136605E+02 2.183517E+02 2.206312E+02 2.217893E+02 2.230721E+02 + 2.139959E+02 2.182000E+02 2.209324E+02 2.225872E+02 2.237384E+02 + +Band: 8, gas: 1, k-terms: 5 + 2.721972E-05 3.543687E-05 4.471941E-05 5.520865E-05 6.681339E-05 + 3.314944E-05 4.305292E-05 5.417879E-05 6.674472E-05 8.062443E-05 + 4.037179E-05 5.231563E-05 6.565525E-05 8.068884E-05 9.722138E-05 + 4.918251E-05 6.352833E-05 7.955440E-05 9.753270E-05 1.172090E-04 + 5.993015E-05 7.720983E-05 9.640918E-05 1.179575E-04 1.412906E-04 + 7.299904E-05 9.378293E-05 1.168847E-04 1.425568E-04 1.703538E-04 + 8.893348E-05 1.139726E-04 1.416620E-04 1.722244E-04 2.053709E-04 + 1.083739E-04 1.384784E-04 1.717127E-04 2.081007E-04 2.473818E-04 + 1.321053E-04 1.683155E-04 2.082449E-04 2.514679E-04 2.983153E-04 + 1.620053E-04 2.056831E-04 2.536586E-04 3.051968E-04 3.612027E-04 + 2.015304E-04 2.543235E-04 3.121205E-04 3.736578E-04 4.405648E-04 + 2.535402E-04 3.176926E-04 3.872501E-04 4.610925E-04 5.408621E-04 + 3.194439E-04 3.972805E-04 4.807977E-04 5.691737E-04 6.646289E-04 + 4.024584E-04 4.962577E-04 5.963573E-04 7.023790E-04 8.162174E-04 + 5.057296E-04 6.193252E-04 7.392558E-04 8.659241E-04 1.001486E-03 + 6.338862E-04 7.707330E-04 9.141299E-04 1.065291E-03 1.226402E-03 + 7.938910E-04 9.582680E-04 1.129052E-03 1.309526E-03 1.500530E-03 + 9.926239E-04 1.189340E-03 1.392709E-03 1.607776E-03 1.834045E-03 + 1.238387E-03 1.472281E-03 1.714238E-03 1.969498E-03 2.236511E-03 + 1.541195E-03 1.819083E-03 2.105662E-03 2.407200E-03 2.720808E-03 + 1.913946E-03 2.242817E-03 2.581972E-03 2.935787E-03 3.302131E-03 + 2.368894E-03 2.756276E-03 3.154948E-03 3.569537E-03 3.995506E-03 + 2.917471E-03 3.371156E-03 3.839399E-03 4.322191E-03 4.815649E-03 + 3.549697E-03 4.079257E-03 4.623415E-03 5.181536E-03 5.751040E-03 + 4.220788E-03 4.837711E-03 5.464633E-03 6.106446E-03 6.758487E-03 + 4.942530E-03 5.657596E-03 6.377537E-03 7.112052E-03 7.856482E-03 + 5.742759E-03 6.570664E-03 7.399182E-03 8.235497E-03 9.084081E-03 + 6.636511E-03 7.592170E-03 8.544742E-03 9.499977E-03 1.046397E-02 + 7.639669E-03 8.746415E-03 9.841297E-03 1.093326E-02 1.203057E-02 + 8.769346E-03 1.004526E-02 1.130611E-02 1.255781E-02 1.381017E-02 + 1.003322E-02 1.150542E-02 1.295906E-02 1.439671E-02 1.583587E-02 + 1.145530E-02 1.314749E-02 1.482621E-02 1.648914E-02 1.814946E-02 + 1.303644E-02 1.500006E-02 1.694480E-02 1.888024E-02 2.081349E-02 + 1.481923E-02 1.709508E-02 1.936041E-02 2.162839E-02 2.390217E-02 + 1.681122E-02 1.946562E-02 2.212070E-02 2.480037E-02 2.750817E-02 + 1.904868E-02 2.216356E-02 2.529701E-02 2.850033E-02 3.176076E-02 + 2.157294E-02 2.523914E-02 2.897967E-02 3.284847E-02 3.682663E-02 + 2.441904E-02 2.878177E-02 3.329053E-02 3.802061E-02 4.293975E-02 + 2.769804E-02 3.292813E-02 3.843355E-02 4.428696E-02 5.043313E-02 + 3.155729E-02 3.789501E-02 4.470106E-02 5.201986E-02 5.972430E-02 + 3.624978E-02 4.403043E-02 5.252971E-02 6.170336E-02 7.134301E-02 + 4.201423E-02 5.166293E-02 6.232546E-02 7.377174E-02 8.567843E-02 + 4.908362E-02 6.108548E-02 7.439067E-02 8.851736E-02 1.030833E-01 + 5.775637E-02 7.264155E-02 8.907010E-02 1.062900E-01 1.239666E-01 + 6.842832E-02 8.668952E-02 1.067162E-01 1.275889E-01 1.489949E-01 + 8.163031E-02 1.037554E-01 1.279810E-01 1.531823E-01 1.790554E-01 + 9.814202E-02 1.248599E-01 1.540508E-01 1.844114E-01 2.156883E-01 + 1.183789E-01 1.504681E-01 1.856049E-01 2.222059E-01 2.599621E-01 + 1.424242E-01 1.809804E-01 2.231778E-01 2.672809E-01 3.127322E-01 + 1.729791E-01 2.195792E-01 2.703599E-01 3.235022E-01 3.782574E-01 + 2.198270E-01 2.772423E-01 3.390891E-01 4.031734E-01 4.694499E-01 + 2.851842E-01 3.563412E-01 4.318519E-01 5.093766E-01 5.893469E-01 + 3.697780E-01 4.573096E-01 5.491222E-01 6.429432E-01 7.391162E-01 + 4.788429E-01 5.860373E-01 6.974660E-01 8.104957E-01 9.258847E-01 + 6.185188E-01 7.488245E-01 8.828972E-01 1.018937E+00 1.157104E+00 + 7.952882E-01 9.530489E-01 1.113466E+00 1.276206E+00 1.441179E+00 + 1.020282E+00 1.210433E+00 1.401479E+00 1.595013E+00 1.790728E+00 + 1.302366E+00 1.529840E+00 1.756150E+00 1.985075E+00 2.216432E+00 + 1.549287E+00 1.808760E+00 2.065737E+00 2.325074E+00 2.586621E+00 + 4.914526E-03 6.143977E-03 7.440178E-03 8.818185E-03 1.033548E-02 + 5.283648E-03 6.569857E-03 7.921717E-03 9.359496E-03 1.094211E-02 + 5.698905E-03 7.051233E-03 8.464837E-03 9.970293E-03 1.162158E-02 + 6.167941E-03 7.590028E-03 9.072723E-03 1.066025E-02 1.238887E-02 + 6.704096E-03 8.204029E-03 9.760989E-03 1.144289E-02 1.325534E-02 + 7.305409E-03 8.887547E-03 1.054813E-02 1.232518E-02 1.424413E-02 + 7.982097E-03 9.671655E-03 1.143525E-02 1.332638E-02 1.537571E-02 + 8.752809E-03 1.056531E-02 1.244919E-02 1.447856E-02 1.666038E-02 + 9.629759E-03 1.157916E-02 1.361826E-02 1.579352E-02 1.815635E-02 + 1.067816E-02 1.279835E-02 1.500848E-02 1.737813E-02 1.997745E-02 + 1.200691E-02 1.432744E-02 1.675502E-02 1.935288E-02 2.226122E-02 + 1.367938E-02 1.623598E-02 1.893574E-02 2.184671E-02 2.512521E-02 + 1.565493E-02 1.851119E-02 2.154742E-02 2.484305E-02 2.864885E-02 + 1.801206E-02 2.122517E-02 2.468158E-02 2.850608E-02 3.298667E-02 + 2.080511E-02 2.450254E-02 2.853728E-02 3.303424E-02 3.839649E-02 + 2.416237E-02 2.849846E-02 3.326361E-02 3.870109E-02 4.517177E-02 + 2.832539E-02 3.350231E-02 3.924335E-02 4.588517E-02 5.377986E-02 + 3.355792E-02 3.984298E-02 4.692010E-02 5.507695E-02 6.464102E-02 + 4.022635E-02 4.795287E-02 5.671212E-02 6.666576E-02 7.806701E-02 + 4.881910E-02 5.838497E-02 6.913986E-02 8.104382E-02 9.445160E-02 + 5.991956E-02 7.166712E-02 8.470192E-02 9.873588E-02 1.144123E-01 + 7.402724E-02 8.823538E-02 1.037247E-01 1.202746E-01 1.385022E-01 + 9.153803E-02 1.084898E-01 1.268395E-01 1.463575E-01 1.674903E-01 + 1.121032E-01 1.322067E-01 1.537778E-01 1.764636E-01 2.010139E-01 + 1.341165E-01 1.577828E-01 1.829760E-01 2.092196E-01 2.374072E-01 + 1.581679E-01 1.858914E-01 2.151064E-01 2.455804E-01 2.778036E-01 + 1.855434E-01 2.180649E-01 2.522203E-01 2.873406E-01 3.243505E-01 + 2.172156E-01 2.552822E-01 2.950131E-01 3.360402E-01 3.784531E-01 + 2.541161E-01 2.989231E-01 3.452731E-01 3.931327E-01 4.421916E-01 + 2.977593E-01 3.501040E-01 4.045032E-01 4.605551E-01 5.174042E-01 + 3.488782E-01 4.102416E-01 4.744443E-01 5.397232E-01 6.062775E-01 + 4.098412E-01 4.813890E-01 5.568026E-01 6.335178E-01 7.112285E-01 + 4.804333E-01 5.653358E-01 6.539478E-01 7.446336E-01 8.352948E-01 + 5.647687E-01 6.644793E-01 7.688206E-01 8.759613E-01 9.826472E-01 + 6.634210E-01 7.814861E-01 9.043777E-01 1.030650E+00 1.157025E+00 + 7.784056E-01 9.197871E-01 1.064246E+00 1.213612E+00 1.362671E+00 + 9.140732E-01 1.081882E+00 1.252016E+00 1.428440E+00 1.604056E+00 + 1.069868E+00 1.272042E+00 1.471393E+00 1.679968E+00 1.887139E+00 + 1.251664E+00 1.493712E+00 1.728567E+00 1.973956E+00 2.219840E+00 + 1.464345E+00 1.753791E+00 2.031483E+00 2.321026E+00 2.611862E+00 + 1.715554E+00 2.063910E+00 2.392442E+00 2.732733E+00 3.079318E+00 + 2.012590E+00 2.431126E+00 2.822302E+00 3.223046E+00 3.631735E+00 + 2.358428E+00 2.862151E+00 3.329341E+00 3.802123E+00 4.283154E+00 + 2.759426E+00 3.368538E+00 3.933901E+00 4.487887E+00 5.050843E+00 + 3.230391E+00 3.965170E+00 4.653439E+00 5.308846E+00 5.969224E+00 + 3.802180E+00 4.682342E+00 5.517368E+00 6.297184E+00 7.071127E+00 + 4.506366E+00 5.573697E+00 6.577302E+00 7.502145E+00 8.417840E+00 + 5.371348E+00 6.646856E+00 7.861342E+00 8.964293E+00 1.004106E+01 + 6.394107E+00 7.916645E+00 9.379831E+00 1.071314E+01 1.197369E+01 + 7.687030E+00 9.507907E+00 1.124781E+01 1.285533E+01 1.435025E+01 + 9.646431E+00 1.180031E+01 1.384783E+01 1.571155E+01 1.748579E+01 + 1.226580E+01 1.481874E+01 1.721631E+01 1.936652E+01 2.141694E+01 + 1.549224E+01 1.849662E+01 2.128346E+01 2.378780E+01 2.612993E+01 + 1.941652E+01 2.292689E+01 2.618869E+01 2.905539E+01 3.170752E+01 + 2.411560E+01 2.815129E+01 3.188076E+01 3.517310E+01 3.818400E+01 + 2.956259E+01 3.417597E+01 3.837117E+01 4.214792E+01 4.553674E+01 + 3.579499E+01 4.100715E+01 4.568173E+01 4.993200E+01 5.370366E+01 + 4.270615E+01 4.848868E+01 5.362338E+01 5.832653E+01 6.251859E+01 + 4.805649E+01 5.422107E+01 5.973883E+01 6.479890E+01 6.932156E+01 + 3.230918E+00 5.050709E+00 7.490064E+00 1.091799E+01 1.588521E+01 + 3.314887E+00 5.128869E+00 7.571332E+00 1.100371E+01 1.600566E+01 + 3.402442E+00 5.230413E+00 7.662308E+00 1.110799E+01 1.611226E+01 + 3.508406E+00 5.351733E+00 7.760495E+00 1.122773E+01 1.623271E+01 + 3.652036E+00 5.495481E+00 7.881530E+00 1.135173E+01 1.635223E+01 + 3.800690E+00 5.633889E+00 8.035318E+00 1.148487E+01 1.650893E+01 + 3.957758E+00 5.807357E+00 8.211425E+00 1.165197E+01 1.671579E+01 + 4.135984E+00 6.015405E+00 8.408048E+00 1.188303E+01 1.693202E+01 + 4.347360E+00 6.233661E+00 8.666116E+00 1.211676E+01 1.719266E+01 + 4.635122E+00 6.578662E+00 9.014149E+00 1.252721E+01 1.770546E+01 + 5.037679E+00 7.067783E+00 9.599683E+00 1.319408E+01 1.858434E+01 + 5.610958E+00 7.697572E+00 1.042218E+01 1.420499E+01 1.987217E+01 + 6.254845E+00 8.445764E+00 1.135295E+01 1.537708E+01 2.151512E+01 + 7.014155E+00 9.316612E+00 1.239086E+01 1.672816E+01 2.335485E+01 + 7.869659E+00 1.028381E+01 1.363064E+01 1.827351E+01 2.549282E+01 + 8.792318E+00 1.139378E+01 1.498401E+01 2.016521E+01 2.790876E+01 + 9.897345E+00 1.274967E+01 1.657518E+01 2.222375E+01 3.080861E+01 + 1.122403E+01 1.426047E+01 1.849226E+01 2.473278E+01 3.406001E+01 + 1.272497E+01 1.605246E+01 2.071127E+01 2.769206E+01 3.777264E+01 + 1.444556E+01 1.812710E+01 2.344597E+01 3.112233E+01 4.199616E+01 + 1.652805E+01 2.063513E+01 2.668233E+01 3.512181E+01 4.703636E+01 + 1.901503E+01 2.371677E+01 3.040250E+01 3.975791E+01 5.268682E+01 + 2.196663E+01 2.734627E+01 3.467882E+01 4.523580E+01 5.911605E+01 + 2.519238E+01 3.122918E+01 3.934204E+01 5.063383E+01 6.559975E+01 + 2.834389E+01 3.479205E+01 4.353677E+01 5.519290E+01 7.064660E+01 + 3.135760E+01 3.844788E+01 4.746654E+01 5.937887E+01 7.490645E+01 + 3.467362E+01 4.249536E+01 5.209608E+01 6.386890E+01 7.963700E+01 + 3.853513E+01 4.739794E+01 5.727235E+01 6.950168E+01 8.516401E+01 + 4.297971E+01 5.299900E+01 6.348436E+01 7.614190E+01 9.185821E+01 + 4.836230E+01 5.964830E+01 7.102995E+01 8.433309E+01 1.003995E+02 + 5.451155E+01 6.709825E+01 8.016936E+01 9.399855E+01 1.104580E+02 + 6.176310E+01 7.614760E+01 9.096937E+01 1.059005E+02 1.231714E+02 + 6.991333E+01 8.676248E+01 1.032189E+02 1.204748E+02 1.380550E+02 + 7.973479E+01 9.901079E+01 1.179047E+02 1.374798E+02 1.563643E+02 + 9.178310E+01 1.131884E+02 1.351627E+02 1.571137E+02 1.783974E+02 + 1.042707E+02 1.298441E+02 1.555070E+02 1.804172E+02 2.047619E+02 + 1.188877E+02 1.487125E+02 1.783973E+02 2.070362E+02 2.347524E+02 + 1.346275E+02 1.697605E+02 2.040425E+02 2.377146E+02 2.691993E+02 + 1.521596E+02 1.936437E+02 2.337064E+02 2.725979E+02 3.092488E+02 + 1.730658E+02 2.198868E+02 2.671385E+02 3.120947E+02 3.547708E+02 + 1.959878E+02 2.497874E+02 3.045465E+02 3.567034E+02 4.059554E+02 + 2.230440E+02 2.831870E+02 3.458555E+02 4.053383E+02 4.634470E+02 + 2.505027E+02 3.206138E+02 3.903560E+02 4.581049E+02 5.223866E+02 + 2.795820E+02 3.592386E+02 4.369005E+02 5.125084E+02 5.833391E+02 + 3.098347E+02 3.968293E+02 4.846955E+02 5.671739E+02 6.451669E+02 + 3.425127E+02 4.354556E+02 5.312960E+02 6.235125E+02 7.079528E+02 + 3.757113E+02 4.786272E+02 5.772710E+02 6.760829E+02 7.713916E+02 + 4.074501E+02 5.192902E+02 6.247788E+02 7.248647E+02 8.244736E+02 + 4.341233E+02 5.530415E+02 6.661361E+02 7.701910E+02 8.683727E+02 + 4.646791E+02 5.859072E+02 7.039311E+02 8.111190E+02 9.091431E+02 + 5.175946E+02 6.364207E+02 7.517402E+02 8.591991E+02 9.554230E+02 + 5.775765E+02 6.918678E+02 8.026385E+02 9.036861E+02 9.960725E+02 + 6.294502E+02 7.400445E+02 8.401003E+02 9.353280E+02 1.020891E+03 + 6.678644E+02 7.741491E+02 8.647277E+02 9.487452E+02 1.027093E+03 + 6.934232E+02 7.905327E+02 8.745186E+02 9.476283E+02 1.017083E+03 + 7.026414E+02 7.926588E+02 8.692735E+02 9.337766E+02 9.930009E+02 + 7.017773E+02 7.812796E+02 8.506149E+02 9.081027E+02 9.584182E+02 + 6.902043E+02 7.586395E+02 8.203035E+02 8.719572E+02 9.173992E+02 + 6.714962E+02 7.353224E+02 7.910390E+02 8.387419E+02 8.812990E+02 + 2.834277E+02 5.855500E+02 1.032839E+03 1.644579E+03 2.364534E+03 + 2.869825E+02 5.907488E+02 1.040058E+03 1.653456E+03 2.374433E+03 + 2.881451E+02 5.960099E+02 1.047346E+03 1.662400E+03 2.384391E+03 + 2.915336E+02 6.036687E+02 1.054709E+03 1.671414E+03 2.394413E+03 + 2.950894E+02 6.092711E+02 1.061033E+03 1.680789E+03 2.404820E+03 + 2.977675E+02 6.148077E+02 1.068600E+03 1.689997E+03 2.415298E+03 + 3.013861E+02 6.204501E+02 1.076287E+03 1.699323E+03 2.425672E+03 + 3.053117E+02 6.258189E+02 1.084567E+03 1.710607E+03 2.436798E+03 + 3.101885E+02 6.334346E+02 1.094819E+03 1.723077E+03 2.450544E+03 + 3.216446E+02 6.542425E+02 1.124968E+03 1.752311E+03 2.482876E+03 + 3.496707E+02 6.950539E+02 1.184287E+03 1.820362E+03 2.557986E+03 + 3.915372E+02 7.538741E+02 1.271449E+03 1.921374E+03 2.670709E+03 + 4.426848E+02 8.250644E+02 1.367682E+03 2.038495E+03 2.795908E+03 + 5.031617E+02 9.036062E+02 1.475410E+03 2.161694E+03 2.916843E+03 + 5.674911E+02 9.946078E+02 1.589559E+03 2.293363E+03 3.053634E+03 + 6.331949E+02 1.089313E+03 1.701737E+03 2.424264E+03 3.182940E+03 + 7.115103E+02 1.195965E+03 1.826020E+03 2.561559E+03 3.325471E+03 + 7.974604E+02 1.306965E+03 1.956565E+03 2.702853E+03 3.478798E+03 + 8.936959E+02 1.431090E+03 2.088920E+03 2.842513E+03 3.618338E+03 + 9.964170E+02 1.555282E+03 2.231711E+03 2.993834E+03 3.772315E+03 + 1.119323E+03 1.684141E+03 2.383944E+03 3.150976E+03 3.927290E+03 + 1.243182E+03 1.829950E+03 2.534946E+03 3.312631E+03 4.087443E+03 + 1.367586E+03 1.972364E+03 2.693699E+03 3.469608E+03 4.239505E+03 + 1.465390E+03 2.087371E+03 2.810471E+03 3.578873E+03 4.355497E+03 + 1.504525E+03 2.122096E+03 2.835635E+03 3.600241E+03 4.365317E+03 + 1.489218E+03 2.105600E+03 2.788972E+03 3.553074E+03 4.315149E+03 + 1.463505E+03 2.065111E+03 2.738384E+03 3.479386E+03 4.243994E+03 + 1.444789E+03 2.026877E+03 2.687990E+03 3.413672E+03 4.160904E+03 + 1.440593E+03 2.002904E+03 2.651715E+03 3.355707E+03 4.093898E+03 + 1.438136E+03 2.000453E+03 2.625002E+03 3.307310E+03 4.052814E+03 + 1.460121E+03 1.992847E+03 2.614495E+03 3.278390E+03 3.993776E+03 + 1.503174E+03 2.014492E+03 2.629603E+03 3.274795E+03 3.967874E+03 + 1.548120E+03 2.067751E+03 2.633278E+03 3.288071E+03 3.956068E+03 + 1.605943E+03 2.128402E+03 2.701659E+03 3.335763E+03 3.976039E+03 + 1.698871E+03 2.193300E+03 2.777405E+03 3.382676E+03 4.007960E+03 + 1.779843E+03 2.295071E+03 2.855736E+03 3.452838E+03 4.069700E+03 + 1.878082E+03 2.396579E+03 2.941354E+03 3.525734E+03 4.127814E+03 + 1.984585E+03 2.494883E+03 3.043876E+03 3.601757E+03 4.183930E+03 + 2.069424E+03 2.608355E+03 3.150596E+03 3.695147E+03 4.248930E+03 + 2.156955E+03 2.696752E+03 3.244473E+03 3.784712E+03 4.324264E+03 + 2.208692E+03 2.785355E+03 3.341379E+03 3.881674E+03 4.384543E+03 + 2.281159E+03 2.840350E+03 3.409773E+03 3.930771E+03 4.449178E+03 + 2.338972E+03 2.887859E+03 3.436031E+03 3.958645E+03 4.446793E+03 + 2.365857E+03 2.916822E+03 3.445582E+03 3.944930E+03 4.412697E+03 + 2.388138E+03 2.931463E+03 3.424192E+03 3.865266E+03 4.317088E+03 + 2.376510E+03 2.886497E+03 3.383578E+03 3.801330E+03 4.193675E+03 + 2.357115E+03 2.814870E+03 3.279692E+03 3.689979E+03 4.043553E+03 + 2.344484E+03 2.737128E+03 3.141854E+03 3.538962E+03 3.875249E+03 + 2.256898E+03 2.653335E+03 2.982815E+03 3.338944E+03 3.656840E+03 + 2.141629E+03 2.543587E+03 2.850668E+03 3.129425E+03 3.419204E+03 + 2.067661E+03 2.440871E+03 2.727914E+03 2.971693E+03 3.209703E+03 + 1.998877E+03 2.326337E+03 2.585105E+03 2.806200E+03 3.019201E+03 + 1.907437E+03 2.192753E+03 2.426001E+03 2.624841E+03 2.827039E+03 + 1.800825E+03 2.053295E+03 2.263321E+03 2.448610E+03 2.636778E+03 + 1.679330E+03 1.904014E+03 2.102434E+03 2.266696E+03 2.431028E+03 + 1.555625E+03 1.752703E+03 1.926025E+03 2.072236E+03 2.213740E+03 + 1.430960E+03 1.599097E+03 1.749728E+03 1.882693E+03 2.006101E+03 + 1.309243E+03 1.456067E+03 1.582150E+03 1.693203E+03 1.798450E+03 + 1.216921E+03 1.343647E+03 1.452653E+03 1.548593E+03 1.643034E+03 + 1.293767E+04 1.753242E+04 2.178401E+04 2.540312E+04 2.817729E+04 + 1.302881E+04 1.758880E+04 2.183235E+04 2.544211E+04 2.820661E+04 + 1.309201E+04 1.764486E+04 2.188033E+04 2.548073E+04 2.823557E+04 + 1.315490E+04 1.770043E+04 2.192781E+04 2.551888E+04 2.826401E+04 + 1.321952E+04 1.775733E+04 2.197633E+04 2.555780E+04 2.829290E+04 + 1.328185E+04 1.781194E+04 2.202276E+04 2.559495E+04 2.832028E+04 + 1.334370E+04 1.786583E+04 2.206845E+04 2.563137E+04 2.834689E+04 + 1.340905E+04 1.792251E+04 2.211637E+04 2.566945E+04 2.837452E+04 + 1.348970E+04 1.799238E+04 2.217536E+04 2.571636E+04 2.840853E+04 + 1.368816E+04 1.816596E+04 2.232275E+04 2.583414E+04 2.849578E+04 + 1.415564E+04 1.871290E+04 2.279511E+04 2.611105E+04 2.870229E+04 + 1.485658E+04 1.933075E+04 2.331573E+04 2.650963E+04 2.900369E+04 + 1.561129E+04 1.986021E+04 2.386064E+04 2.694528E+04 2.928329E+04 + 1.637079E+04 2.052376E+04 2.442067E+04 2.736981E+04 2.947178E+04 + 1.712736E+04 2.126113E+04 2.496698E+04 2.781741E+04 2.978458E+04 + 1.768402E+04 2.202118E+04 2.548105E+04 2.820392E+04 3.007133E+04 + 1.855806E+04 2.265834E+04 2.598011E+04 2.857409E+04 3.034191E+04 + 1.916694E+04 2.327746E+04 2.645560E+04 2.892355E+04 3.063861E+04 + 1.988530E+04 2.387566E+04 2.691548E+04 2.912783E+04 3.076428E+04 + 2.076290E+04 2.445679E+04 2.734638E+04 2.940563E+04 3.099507E+04 + 2.149296E+04 2.501373E+04 2.778889E+04 2.970460E+04 3.120195E+04 + 2.215847E+04 2.552858E+04 2.816105E+04 3.000699E+04 3.137617E+04 + 2.280407E+04 2.597504E+04 2.847414E+04 3.023111E+04 3.151149E+04 + 2.312360E+04 2.623569E+04 2.855635E+04 3.032928E+04 3.154915E+04 + 2.300123E+04 2.610674E+04 2.842508E+04 3.019912E+04 3.141832E+04 + 2.264553E+04 2.570621E+04 2.808408E+04 2.990366E+04 3.116172E+04 + 2.205085E+04 2.527995E+04 2.763104E+04 2.951371E+04 3.082601E+04 + 2.138588E+04 2.467897E+04 2.718943E+04 2.906052E+04 3.042621E+04 + 2.084128E+04 2.405081E+04 2.670217E+04 2.855527E+04 3.001666E+04 + 2.010865E+04 2.349721E+04 2.608430E+04 2.804120E+04 2.963636E+04 + 1.961396E+04 2.279961E+04 2.541005E+04 2.751700E+04 2.907415E+04 + 1.904954E+04 2.220867E+04 2.484414E+04 2.688436E+04 2.853322E+04 + 1.858189E+04 2.158784E+04 2.414576E+04 2.622756E+04 2.788460E+04 + 1.804069E+04 2.104894E+04 2.353135E+04 2.552577E+04 2.715751E+04 + 1.732634E+04 2.029792E+04 2.287851E+04 2.479600E+04 2.635225E+04 + 1.667471E+04 1.961352E+04 2.201853E+04 2.396555E+04 2.549997E+04 + 1.582437E+04 1.872062E+04 2.102865E+04 2.303304E+04 2.460932E+04 + 1.497168E+04 1.771629E+04 2.003706E+04 2.188944E+04 2.352811E+04 + 1.415289E+04 1.667310E+04 1.886086E+04 2.065284E+04 2.223132E+04 + 1.358908E+04 1.548910E+04 1.759593E+04 1.934464E+04 2.076509E+04 + 1.270276E+04 1.470106E+04 1.635387E+04 1.802242E+04 1.936680E+04 + 1.172743E+04 1.372687E+04 1.529791E+04 1.660474E+04 1.787397E+04 + 1.067638E+04 1.258275E+04 1.411878E+04 1.528768E+04 1.637547E+04 + 9.517032E+03 1.133523E+04 1.284915E+04 1.400369E+04 1.500186E+04 + 8.432412E+03 1.006880E+04 1.145979E+04 1.261088E+04 1.358425E+04 + 7.441084E+03 8.903885E+03 1.018887E+04 1.131246E+04 1.218784E+04 + 6.559834E+03 7.837537E+03 9.037689E+03 1.007493E+04 1.097594E+04 + 5.817327E+03 6.865785E+03 7.961587E+03 8.928046E+03 9.722721E+03 + 5.108448E+03 5.973584E+03 6.947407E+03 7.819568E+03 8.546411E+03 + 4.470292E+03 5.274229E+03 6.065964E+03 6.814001E+03 7.478045E+03 + 4.052693E+03 4.765488E+03 5.412865E+03 6.046853E+03 6.609794E+03 + 3.735141E+03 4.331910E+03 4.878596E+03 5.400343E+03 5.839711E+03 + 3.435367E+03 3.925598E+03 4.373071E+03 4.795336E+03 5.154877E+03 + 3.166598E+03 3.562593E+03 3.907555E+03 4.239623E+03 4.528864E+03 + 2.884915E+03 3.216425E+03 3.475487E+03 3.718288E+03 3.938010E+03 + 2.582762E+03 2.856882E+03 3.065080E+03 3.242010E+03 3.400848E+03 + 2.287715E+03 2.506635E+03 2.678450E+03 2.808287E+03 2.927046E+03 + 2.005750E+03 2.179888E+03 2.316183E+03 2.419639E+03 2.503961E+03 + 1.797754E+03 1.944589E+03 2.060362E+03 2.148621E+03 2.215169E+03 + +Band: 8, gas: 4, k-terms: 1 + 1.391510E-04 8.012386E-04 2.958033E-03 7.785088E-03 1.599633E-02 + 1.427926E-04 8.168281E-04 3.000778E-03 7.868332E-03 1.612530E-02 + 1.465156E-04 8.326642E-04 3.043993E-03 7.952232E-03 1.625509E-02 + 1.503212E-04 8.487466E-04 3.087673E-03 8.036780E-03 1.638570E-02 + 1.543341E-04 8.655958E-04 3.133221E-03 8.124684E-03 1.652132E-02 + 1.583132E-04 8.821954E-04 3.177894E-03 8.210686E-03 1.665391E-02 + 1.623798E-04 8.990522E-04 3.223058E-03 8.297434E-03 1.678757E-02 + 1.667983E-04 9.172497E-04 3.271596E-03 8.390417E-03 1.693072E-02 + 1.723967E-04 9.401376E-04 3.332294E-03 8.506216E-03 1.710853E-02 + 1.866458E-04 9.975836E-04 3.482707E-03 8.789901E-03 1.753983E-02 + 2.241344E-04 1.143773E-03 3.855328E-03 9.478714E-03 1.857276E-02 + 2.929901E-04 1.397304E-03 4.473147E-03 1.058559E-02 2.020039E-02 + 3.882567E-04 1.724498E-03 5.228529E-03 1.189055E-02 2.207677E-02 + 5.123073E-04 2.121318E-03 6.096050E-03 1.333674E-02 2.411095E-02 + 6.718902E-04 2.597173E-03 7.082780E-03 1.492720E-02 2.630168E-02 + 8.687936E-04 3.145748E-03 8.164956E-03 1.661824E-02 2.858631E-02 + 1.117939E-03 3.795628E-03 9.388136E-03 1.847528E-02 3.105015E-02 + 1.429280E-03 4.557089E-03 1.075900E-02 2.050101E-02 3.369260E-02 + 1.806774E-03 5.425138E-03 1.225880E-02 2.266292E-02 3.646987E-02 + 2.264803E-03 6.418572E-03 1.391175E-02 2.499176E-02 3.942073E-02 + 2.823169E-03 7.564092E-03 1.575237E-02 2.753057E-02 4.259807E-02 + 3.482098E-03 8.847549E-03 1.775039E-02 3.023463E-02 4.594697E-02 + 4.217476E-03 1.021565E-02 1.982337E-02 3.299653E-02 4.934195E-02 + 4.787292E-03 1.124682E-02 2.136780E-02 3.505070E-02 5.188139E-02 + 4.761650E-03 1.122790E-02 2.139018E-02 3.515577E-02 5.211369E-02 + 4.328428E-03 1.048692E-02 2.036553E-02 3.392220E-02 5.076606E-02 + 3.779761E-03 9.510768E-03 1.897591E-02 3.220742E-02 4.884635E-02 + 3.218223E-03 8.467824E-03 1.745193E-02 3.029700E-02 4.668727E-02 + 2.711594E-03 7.482164E-03 1.597411E-02 2.842373E-02 4.456771E-02 + 2.266074E-03 6.570560E-03 1.456729E-02 2.662001E-02 4.252776E-02 + 1.877909E-03 5.731789E-03 1.322895E-02 2.488093E-02 4.056160E-02 + 1.552176E-03 4.986786E-03 1.199661E-02 2.325911E-02 3.873732E-02 + 1.287061E-03 4.344545E-03 1.089327E-02 2.179033E-02 3.710484E-02 + 1.072327E-03 3.793328E-03 9.906869E-03 2.045951E-02 3.564841E-02 + 8.949842E-04 3.310315E-03 9.001643E-03 1.921150E-02 3.429458E-02 + 7.489610E-04 2.887814E-03 8.169149E-03 1.803010E-02 3.301684E-02 + 6.256515E-04 2.507976E-03 7.377636E-03 1.685746E-02 3.172411E-02 + 5.226973E-04 2.169418E-03 6.629503E-03 1.569072E-02 3.039518E-02 + 4.423835E-04 1.886073E-03 5.966640E-03 1.460487E-02 2.912528E-02 + 3.840529E-04 1.662998E-03 5.415380E-03 1.366058E-02 2.800166E-02 + 3.483838E-04 1.509503E-03 5.015403E-03 1.295638E-02 2.718886E-02 + 3.273277E-04 1.400729E-03 4.714392E-03 1.240926E-02 2.656918E-02 + 3.134377E-04 1.310165E-03 4.446590E-03 1.189453E-02 2.594114E-02 + 3.048147E-04 1.230336E-03 4.193023E-03 1.137584E-02 2.524094E-02 + 3.026084E-04 1.164961E-03 3.964813E-03 1.088039E-02 2.451634E-02 + 3.106990E-04 1.128143E-03 3.803519E-03 1.050569E-02 2.395088E-02 + 3.355385E-04 1.142785E-03 3.777034E-03 1.041322E-02 2.385932E-02 + 3.746863E-04 1.195116E-03 3.843885E-03 1.051402E-02 2.409390E-02 + 4.243850E-04 1.266052E-03 3.944740E-03 1.067188E-02 2.440490E-02 + 5.071890E-04 1.429547E-03 4.284776E-03 1.134863E-02 2.565971E-02 + 7.198313E-04 1.989468E-03 5.662252E-03 1.426137E-02 3.097569E-02 + 1.114116E-03 3.030795E-03 8.125434E-03 1.924127E-02 3.969678E-02 + 1.731890E-03 4.574251E-03 1.153651E-02 2.574592E-02 5.056755E-02 + 2.684773E-03 6.812149E-03 1.616664E-02 3.409693E-02 6.391378E-02 + 4.104785E-03 9.936359E-03 2.223443E-02 4.448020E-02 7.982081E-02 + 6.127694E-03 1.410644E-02 2.986729E-02 5.691914E-02 9.814194E-02 + 9.011279E-03 1.970250E-02 3.957064E-02 7.203680E-02 1.196051E-01 + 1.288612E-02 2.679025E-02 5.124636E-02 8.947454E-02 1.435261E-01 + 1.597491E-02 3.212727E-02 5.964928E-02 1.015907E-01 1.597073E-01 + +Band: 8, gas: 5, k-terms: 3 + 5.600504E-04 1.184684E-03 2.504305E-03 5.090327E-03 9.656437E-03 + 6.211250E-04 1.281683E-03 2.651886E-03 5.303442E-03 9.946011E-03 + 6.927636E-04 1.390128E-03 2.817089E-03 5.545221E-03 1.026949E-02 + 7.761755E-04 1.512419E-03 3.004220E-03 5.813654E-03 1.062122E-02 + 8.714294E-04 1.653289E-03 3.212982E-03 6.107656E-03 1.101648E-02 + 9.803088E-04 1.811062E-03 3.447020E-03 6.435017E-03 1.145992E-02 + 1.107022E-03 1.993306E-03 3.707766E-03 6.800494E-03 1.195104E-02 + 1.256445E-03 2.203620E-03 4.003770E-03 7.215176E-03 1.250112E-02 + 1.430783E-03 2.451786E-03 4.347241E-03 7.692647E-03 1.313192E-02 + 1.653422E-03 2.767888E-03 4.797184E-03 8.332375E-03 1.400422E-02 + 1.961392E-03 3.222215E-03 5.476514E-03 9.315850E-03 1.537091E-02 + 2.381423E-03 3.848749E-03 6.411844E-03 1.067513E-02 1.726136E-02 + 2.904230E-03 4.621206E-03 7.554743E-03 1.230196E-02 1.950155E-02 + 3.539449E-03 5.552284E-03 8.899912E-03 1.418834E-02 2.206430E-02 + 4.314254E-03 6.666880E-03 1.048641E-02 1.636151E-02 2.498314E-02 + 5.251666E-03 7.985204E-03 1.231266E-02 1.883396E-02 2.827004E-02 + 6.383211E-03 9.559181E-03 1.447924E-02 2.171740E-02 3.201566E-02 + 7.762210E-03 1.143976E-02 1.698980E-02 2.504599E-02 3.626695E-02 + 9.421709E-03 1.366086E-02 1.993021E-02 2.884979E-02 4.107342E-02 + 1.141676E-02 1.629142E-02 2.335269E-02 3.323084E-02 4.652704E-02 + 1.382855E-02 1.943224E-02 2.738642E-02 3.831721E-02 5.279649E-02 + 1.670396E-02 2.313204E-02 3.208171E-02 4.416463E-02 5.993153E-02 + 2.012083E-02 2.743215E-02 3.748206E-02 5.077993E-02 6.785130E-02 + 2.377062E-02 3.196946E-02 4.303417E-02 5.744384E-02 7.572946E-02 + 2.712653E-02 3.590847E-02 4.765706E-02 6.277299E-02 8.185282E-02 + 3.037151E-02 3.955607E-02 5.177469E-02 6.739479E-02 8.700394E-02 + 3.391902E-02 4.348483E-02 5.611368E-02 7.227992E-02 9.232460E-02 + 3.791350E-02 4.794904E-02 6.103078E-02 7.773049E-02 9.837268E-02 + 4.256927E-02 5.325675E-02 6.680451E-02 8.420273E-02 1.055625E-01 + 4.796863E-02 5.957370E-02 7.379955E-02 9.186452E-02 1.141924E-01 + 5.428427E-02 6.690877E-02 8.211913E-02 1.009891E-01 1.244022E-01 + 6.182984E-02 7.553186E-02 9.204289E-02 1.119761E-01 1.365138E-01 + 7.074712E-02 8.566316E-02 1.037243E-01 1.250650E-01 1.510565E-01 + 8.132601E-02 9.767533E-02 1.176928E-01 1.409065E-01 1.686292E-01 + 9.374894E-02 1.119606E-01 1.339231E-01 1.594417E-01 1.891577E-01 + 1.083870E-01 1.288262E-01 1.529562E-01 1.813860E-01 2.136284E-01 + 1.255342E-01 1.483217E-01 1.751272E-01 2.069431E-01 2.423695E-01 + 1.455910E-01 1.710174E-01 2.011068E-01 2.362440E-01 2.757320E-01 + 1.690254E-01 1.978969E-01 2.315125E-01 2.707663E-01 3.146452E-01 + 1.964787E-01 2.293759E-01 2.670870E-01 3.108571E-01 3.603884E-01 + 2.292221E-01 2.665686E-01 3.092668E-01 3.581766E-01 4.134647E-01 + 2.675552E-01 3.100899E-01 3.584349E-01 4.135216E-01 4.754521E-01 + 3.114830E-01 3.605167E-01 4.147748E-01 4.769699E-01 5.462652E-01 + 3.618015E-01 4.175998E-01 4.789309E-01 5.484031E-01 6.259726E-01 + 4.187557E-01 4.827169E-01 5.515181E-01 6.288614E-01 7.159508E-01 + 4.838219E-01 5.577654E-01 6.346481E-01 7.206535E-01 8.171243E-01 + 5.588049E-01 6.437479E-01 7.306436E-01 8.256839E-01 9.313935E-01 + 6.442258E-01 7.414473E-01 8.383908E-01 9.440294E-01 1.060862E+00 + 7.393499E-01 8.505412E-01 9.599575E-01 1.075920E+00 1.203829E+00 + 8.520840E-01 9.798510E-01 1.102040E+00 1.229496E+00 1.369194E+00 + 1.010762E+00 1.151954E+00 1.288746E+00 1.429007E+00 1.583057E+00 + 1.208564E+00 1.361551E+00 1.511207E+00 1.667664E+00 1.837449E+00 + 1.433537E+00 1.599603E+00 1.761957E+00 1.934209E+00 2.121788E+00 + 1.687362E+00 1.864898E+00 2.040506E+00 2.229900E+00 2.434091E+00 + 1.963902E+00 2.155512E+00 2.348276E+00 2.552070E+00 2.773575E+00 + 2.270359E+00 2.476786E+00 2.685575E+00 2.904152E+00 3.140472E+00 + 2.605055E+00 2.827192E+00 3.052050E+00 3.287509E+00 3.537945E+00 + 2.972166E+00 3.208942E+00 3.449136E+00 3.700373E+00 3.963695E+00 + 3.261935E+00 3.505031E+00 3.755936E+00 4.018441E+00 4.290913E+00 + 1.926038E+00 2.642688E+00 3.450452E+00 4.396904E+00 5.505921E+00 + 1.932985E+00 2.651564E+00 3.459487E+00 4.407849E+00 5.520170E+00 + 1.944098E+00 2.660297E+00 3.469766E+00 4.420987E+00 5.534311E+00 + 1.958752E+00 2.670885E+00 3.480873E+00 4.433916E+00 5.549396E+00 + 1.974046E+00 2.686019E+00 3.495772E+00 4.447859E+00 5.566348E+00 + 1.991062E+00 2.700763E+00 3.512088E+00 4.463907E+00 5.585850E+00 + 2.010672E+00 2.719922E+00 3.529840E+00 4.482047E+00 5.605807E+00 + 2.038445E+00 2.743446E+00 3.551686E+00 4.504474E+00 5.627476E+00 + 2.071884E+00 2.772728E+00 3.579025E+00 4.533270E+00 5.656645E+00 + 2.127223E+00 2.825087E+00 3.631328E+00 4.590588E+00 5.719800E+00 + 2.218711E+00 2.924273E+00 3.742703E+00 4.710361E+00 5.854983E+00 + 2.357254E+00 3.072096E+00 3.903112E+00 4.893137E+00 6.054869E+00 + 2.512094E+00 3.240008E+00 4.090904E+00 5.102314E+00 6.284291E+00 + 2.684468E+00 3.422709E+00 4.291043E+00 5.324032E+00 6.530171E+00 + 2.871720E+00 3.620227E+00 4.510015E+00 5.565786E+00 6.794688E+00 + 3.068505E+00 3.831056E+00 4.740766E+00 5.818529E+00 7.073303E+00 + 3.284385E+00 4.062680E+00 4.995608E+00 6.098639E+00 7.371234E+00 + 3.520401E+00 4.314133E+00 5.272058E+00 6.401498E+00 7.690684E+00 + 3.777883E+00 4.590017E+00 5.571017E+00 6.724108E+00 8.033570E+00 + 4.056861E+00 4.889261E+00 5.896930E+00 7.073995E+00 8.399544E+00 + 4.361500E+00 5.222366E+00 6.252945E+00 7.455188E+00 8.802240E+00 + 4.695322E+00 5.583064E+00 6.640966E+00 7.866424E+00 9.234921E+00 + 5.058631E+00 5.971318E+00 7.057502E+00 8.303584E+00 9.685218E+00 + 5.404317E+00 6.337097E+00 7.439687E+00 8.696879E+00 1.009380E+01 + 5.682246E+00 6.605295E+00 7.700637E+00 8.952077E+00 1.034443E+01 + 5.926123E+00 6.826556E+00 7.899499E+00 9.135240E+00 1.051511E+01 + 6.181535E+00 7.064165E+00 8.105593E+00 9.323288E+00 1.068095E+01 + 6.466426E+00 7.333219E+00 8.351345E+00 9.543945E+00 1.088677E+01 + 6.807962E+00 7.655511E+00 8.655119E+00 9.820737E+00 1.114980E+01 + 7.197391E+00 8.044035E+00 9.029048E+00 1.017194E+01 1.148063E+01 + 7.656316E+00 8.492108E+00 9.472495E+00 1.060190E+01 1.189523E+01 + 8.195225E+00 9.021826E+00 9.997723E+00 1.111978E+01 1.240395E+01 + 8.804133E+00 9.637096E+00 1.061169E+01 1.173333E+01 1.301683E+01 + 9.509143E+00 1.035415E+01 1.133164E+01 1.247275E+01 1.375306E+01 + 1.029538E+01 1.117009E+01 1.215319E+01 1.330538E+01 1.460069E+01 + 1.116875E+01 1.210265E+01 1.310254E+01 1.427564E+01 1.559583E+01 + 1.214481E+01 1.314032E+01 1.417613E+01 1.537666E+01 1.673411E+01 + 1.322540E+01 1.429637E+01 1.539832E+01 1.661612E+01 1.802091E+01 + 1.441092E+01 1.561012E+01 1.678218E+01 1.805107E+01 1.948615E+01 + 1.572706E+01 1.705969E+01 1.833596E+01 1.967002E+01 2.118553E+01 + 1.721047E+01 1.869820E+01 2.010567E+01 2.153310E+01 2.311623E+01 + 1.885186E+01 2.054114E+01 2.210446E+01 2.365835E+01 2.534931E+01 + 2.064892E+01 2.260301E+01 2.433785E+01 2.607511E+01 2.788022E+01 + 2.262589E+01 2.486401E+01 2.685977E+01 2.877150E+01 3.072288E+01 + 2.479782E+01 2.740312E+01 2.970085E+01 3.182205E+01 3.398704E+01 + 2.723816E+01 3.029321E+01 3.294168E+01 3.536813E+01 3.774083E+01 + 3.001601E+01 3.353976E+01 3.667361E+01 3.945016E+01 4.207284E+01 + 3.320310E+01 3.729031E+01 4.087677E+01 4.415222E+01 4.715947E+01 + 3.679561E+01 4.154266E+01 4.577637E+01 4.954441E+01 5.297682E+01 + 4.117067E+01 4.673187E+01 5.161473E+01 5.596545E+01 5.985050E+01 + 4.763086E+01 5.383745E+01 5.939600E+01 6.418243E+01 6.840231E+01 + 5.589639E+01 6.264035E+01 6.868579E+01 7.392097E+01 7.842818E+01 + 6.536939E+01 7.270652E+01 7.912967E+01 8.463745E+01 8.949399E+01 + 7.599656E+01 8.382728E+01 9.055073E+01 9.638418E+01 1.014501E+02 + 8.742292E+01 9.583376E+01 1.029835E+02 1.089318E+02 1.142059E+02 + 1.000632E+02 1.087939E+02 1.161843E+02 1.222940E+02 1.274695E+02 + 1.132907E+02 1.222491E+02 1.297194E+02 1.358873E+02 1.409882E+02 + 1.269946E+02 1.360200E+02 1.432719E+02 1.492231E+02 1.541623E+02 + 1.370914E+02 1.457409E+02 1.528515E+02 1.585457E+02 1.633275E+02 + 1.277291E+03 1.867196E+03 2.488569E+03 3.095414E+03 3.722134E+03 + 1.284855E+03 1.878376E+03 2.498131E+03 3.104341E+03 3.730500E+03 + 1.292501E+03 1.886881E+03 2.507077E+03 3.113323E+03 3.729689E+03 + 1.302261E+03 1.893388E+03 2.506160E+03 3.115206E+03 3.738164E+03 + 1.310433E+03 1.904999E+03 2.515576E+03 3.124624E+03 3.746956E+03 + 1.318512E+03 1.913890E+03 2.524851E+03 3.133873E+03 3.755571E+03 + 1.321286E+03 1.922933E+03 2.534267E+03 3.143235E+03 3.764269E+03 + 1.330249E+03 1.930831E+03 2.544401E+03 3.153286E+03 3.767908E+03 + 1.341285E+03 1.933020E+03 2.548563E+03 3.165669E+03 3.779422E+03 + 1.366016E+03 1.959708E+03 2.571067E+03 3.194314E+03 3.808418E+03 + 1.407680E+03 2.017504E+03 2.633792E+03 3.247255E+03 3.869809E+03 + 1.494475E+03 2.116367E+03 2.721876E+03 3.348717E+03 3.964569E+03 + 1.586206E+03 2.223582E+03 2.830322E+03 3.463797E+03 4.066201E+03 + 1.698814E+03 2.329846E+03 2.929135E+03 3.559123E+03 4.167125E+03 + 1.815891E+03 2.433806E+03 3.036373E+03 3.667395E+03 4.274230E+03 + 1.918096E+03 2.532841E+03 3.146685E+03 3.757145E+03 4.372739E+03 + 2.036318E+03 2.645057E+03 3.253105E+03 3.873457E+03 4.465687E+03 + 2.150856E+03 2.750470E+03 3.384118E+03 3.990160E+03 4.566872E+03 + 2.275034E+03 2.866019E+03 3.497057E+03 4.106646E+03 4.666781E+03 + 2.393663E+03 2.984364E+03 3.619024E+03 4.225047E+03 4.760200E+03 + 2.499551E+03 3.112415E+03 3.726678E+03 4.339053E+03 4.857582E+03 + 2.628022E+03 3.239521E+03 3.855249E+03 4.446145E+03 4.951118E+03 + 2.745367E+03 3.373938E+03 3.982718E+03 4.552673E+03 5.038117E+03 + 2.828948E+03 3.460896E+03 4.072628E+03 4.622054E+03 5.098281E+03 + 2.853220E+03 3.470314E+03 4.085273E+03 4.629838E+03 5.099578E+03 + 2.827174E+03 3.441269E+03 4.050127E+03 4.598561E+03 5.067779E+03 + 2.778207E+03 3.393560E+03 4.003251E+03 4.550293E+03 5.019754E+03 + 2.730359E+03 3.342585E+03 3.940910E+03 4.499484E+03 4.974848E+03 + 2.701593E+03 3.286646E+03 3.898952E+03 4.444832E+03 4.927744E+03 + 2.676061E+03 3.265270E+03 3.860500E+03 4.407960E+03 4.887225E+03 + 2.706567E+03 3.257638E+03 3.844008E+03 4.373289E+03 4.854551E+03 + 2.744362E+03 3.278744E+03 3.835550E+03 4.359788E+03 4.833515E+03 + 2.821011E+03 3.334534E+03 3.864252E+03 4.365925E+03 4.824187E+03 + 2.934836E+03 3.423877E+03 3.908449E+03 4.395249E+03 4.832532E+03 + 3.082216E+03 3.533796E+03 3.986431E+03 4.438926E+03 4.852685E+03 + 3.239241E+03 3.667455E+03 4.103791E+03 4.508178E+03 4.889759E+03 + 3.418384E+03 3.832154E+03 4.226743E+03 4.591566E+03 4.934429E+03 + 3.606290E+03 3.993081E+03 4.350042E+03 4.702347E+03 4.993921E+03 + 3.798288E+03 4.163273E+03 4.490790E+03 4.796258E+03 5.069055E+03 + 3.988433E+03 4.321625E+03 4.624383E+03 4.886950E+03 5.135817E+03 + 4.149686E+03 4.469940E+03 4.741069E+03 4.978868E+03 5.176480E+03 + 4.271091E+03 4.589673E+03 4.827992E+03 5.036438E+03 5.204362E+03 + 4.363884E+03 4.641334E+03 4.874737E+03 5.048025E+03 5.192254E+03 + 4.377124E+03 4.645949E+03 4.856659E+03 5.015280E+03 5.129599E+03 + 4.342314E+03 4.592691E+03 4.776522E+03 4.914704E+03 5.014857E+03 + 4.248028E+03 4.469432E+03 4.639569E+03 4.757437E+03 4.839103E+03 + 4.103156E+03 4.303629E+03 4.441993E+03 4.549093E+03 4.611789E+03 + 3.921174E+03 4.085393E+03 4.205071E+03 4.283794E+03 4.342197E+03 + 3.693333E+03 3.837004E+03 3.928082E+03 3.993247E+03 4.028375E+03 + 3.434973E+03 3.565377E+03 3.632655E+03 3.680024E+03 3.701141E+03 + 3.191575E+03 3.283652E+03 3.335626E+03 3.356486E+03 3.365851E+03 + 2.941157E+03 2.996799E+03 3.026679E+03 3.032059E+03 3.027203E+03 + 2.677580E+03 2.712477E+03 2.721010E+03 2.712783E+03 2.695920E+03 + 2.415509E+03 2.432770E+03 2.430021E+03 2.411319E+03 2.383781E+03 + 2.166294E+03 2.166415E+03 2.156381E+03 2.132848E+03 2.100270E+03 + 1.934605E+03 1.922348E+03 1.904939E+03 1.879440E+03 1.845863E+03 + 1.727137E+03 1.702836E+03 1.681018E+03 1.653815E+03 1.620638E+03 + 1.554305E+03 1.515376E+03 1.487066E+03 1.458565E+03 1.427412E+03 + 1.450454E+03 1.398469E+03 1.364145E+03 1.333992E+03 1.304624E+03 + +Band: 8, gas: 6, k-terms: 4 + 3.040918E-04 5.232157E-04 7.809382E-04 1.023667E-03 1.229150E-03 + 3.652293E-04 6.269868E-04 9.352830E-04 1.231318E-03 1.480773E-03 + 4.379988E-04 7.504753E-04 1.119950E-03 1.481510E-03 1.783464E-03 + 5.262364E-04 8.986549E-04 1.339257E-03 1.781209E-03 2.147699E-03 + 6.311685E-04 1.074891E-03 1.604395E-03 2.138007E-03 2.586861E-03 + 7.585839E-04 1.284479E-03 1.917761E-03 2.565790E-03 3.115497E-03 + 9.115908E-04 1.536416E-03 2.295274E-03 3.076039E-03 3.750530E-03 + 1.093816E-03 1.837731E-03 2.746780E-03 3.689251E-03 4.516397E-03 + 1.318353E-03 2.206324E-03 3.289663E-03 4.428187E-03 5.436863E-03 + 1.609962E-03 2.674672E-03 3.976279E-03 5.342368E-03 6.572853E-03 + 2.029466E-03 3.321981E-03 4.893296E-03 6.532757E-03 8.013952E-03 + 2.625275E-03 4.215859E-03 6.118212E-03 8.077173E-03 9.847124E-03 + 3.406257E-03 5.368239E-03 7.675986E-03 1.001023E-02 1.212061E-02 + 4.416065E-03 6.835085E-03 9.614253E-03 1.240555E-02 1.491655E-02 + 5.716062E-03 8.690032E-03 1.204478E-02 1.537077E-02 1.835168E-02 + 7.370033E-03 1.102307E-02 1.505221E-02 1.899686E-02 2.254850E-02 + 9.497483E-03 1.396370E-02 1.879801E-02 2.350151E-02 2.770981E-02 + 1.223337E-02 1.767080E-02 2.346227E-02 2.905159E-02 3.406123E-02 + 1.569905E-02 2.230231E-02 2.924749E-02 3.589321E-02 4.181739E-02 + 2.010675E-02 2.811803E-02 3.642189E-02 4.432586E-02 5.129462E-02 + 2.571711E-02 3.542798E-02 4.535121E-02 5.470050E-02 6.294762E-02 + 3.282334E-02 4.453451E-02 5.635051E-02 6.741673E-02 7.717490E-02 + 4.167140E-02 5.572832E-02 6.983991E-02 8.292515E-02 9.449226E-02 + 5.178428E-02 6.866454E-02 8.546794E-02 1.011201E-01 1.148713E-01 + 6.165331E-02 8.185841E-02 1.019534E-01 1.207602E-01 1.375683E-01 + 7.147352E-02 9.531043E-02 1.195179E-01 1.421805E-01 1.628989E-01 + 8.167713E-02 1.099028E-01 1.389350E-01 1.664531E-01 1.918409E-01 + 9.259872E-02 1.259530E-01 1.606692E-01 1.939581E-01 2.248004E-01 + 1.048543E-01 1.440021E-01 1.853476E-01 2.256266E-01 2.630264E-01 + 1.184612E-01 1.642236E-01 2.131314E-01 2.616622E-01 3.069485E-01 + 1.336098E-01 1.868709E-01 2.445264E-01 3.030630E-01 3.578113E-01 + 1.507906E-01 2.123877E-01 2.802902E-01 3.500501E-01 4.160711E-01 + 1.702701E-01 2.410852E-01 3.207520E-01 4.034967E-01 4.836395E-01 + 1.920344E-01 2.743049E-01 3.671403E-01 4.646529E-01 5.604808E-01 + 2.162539E-01 3.119389E-01 4.193698E-01 5.336135E-01 6.476543E-01 + 2.431449E-01 3.542081E-01 4.780346E-01 6.113428E-01 7.450321E-01 + 2.722758E-01 4.006418E-01 5.436298E-01 6.980547E-01 8.548134E-01 + 3.029513E-01 4.517219E-01 6.165861E-01 7.943594E-01 9.765152E-01 + 3.345480E-01 5.072761E-01 6.974368E-01 9.014554E-01 1.112222E+00 + 3.684872E-01 5.673886E-01 7.870121E-01 1.022437E+00 1.263037E+00 + 4.059725E-01 6.339124E-01 8.891369E-01 1.158714E+00 1.434790E+00 + 4.476355E-01 7.060799E-01 9.993373E-01 1.308338E+00 1.626189E+00 + 4.916358E-01 7.803700E-01 1.112027E+00 1.467566E+00 1.828340E+00 + 5.361573E-01 8.561859E-01 1.225626E+00 1.626375E+00 2.036715E+00 + 5.788807E-01 9.339172E-01 1.338993E+00 1.784103E+00 2.246347E+00 + 6.207480E-01 1.016630E+00 1.455492E+00 1.942100E+00 2.452211E+00 + 6.723554E-01 1.110940E+00 1.588576E+00 2.111606E+00 2.663314E+00 + 7.259312E-01 1.209837E+00 1.731374E+00 2.290351E+00 2.875746E+00 + 7.830754E-01 1.307286E+00 1.877394E+00 2.468507E+00 3.085405E+00 + 8.598668E-01 1.431657E+00 2.052304E+00 2.680207E+00 3.325957E+00 + 1.046654E+00 1.682841E+00 2.355505E+00 3.020495E+00 3.693733E+00 + 1.317707E+00 2.029760E+00 2.738682E+00 3.435226E+00 4.132476E+00 + 1.637688E+00 2.404244E+00 3.143556E+00 3.867001E+00 4.575433E+00 + 1.993829E+00 2.810114E+00 3.572872E+00 4.306844E+00 5.017891E+00 + 2.367732E+00 3.221523E+00 4.013717E+00 4.752021E+00 5.469306E+00 + 2.773738E+00 3.653580E+00 4.462387E+00 5.197741E+00 5.916060E+00 + 3.205285E+00 4.100962E+00 4.914810E+00 5.655541E+00 6.368919E+00 + 3.654265E+00 4.539256E+00 5.366009E+00 6.113008E+00 6.816069E+00 + 3.931021E+00 4.833320E+00 5.666493E+00 6.415347E+00 7.113097E+00 + 2.174599E-02 2.936022E-02 3.789052E-02 4.750559E-02 5.762010E-02 + 2.607274E-02 3.513693E-02 4.511906E-02 5.628542E-02 6.810589E-02 + 3.128293E-02 4.202731E-02 5.373499E-02 6.669582E-02 8.049745E-02 + 3.752934E-02 5.027730E-02 6.400917E-02 7.908132E-02 9.516687E-02 + 4.505580E-02 6.014949E-02 7.627939E-02 9.375221E-02 1.125551E-01 + 5.409682E-02 7.198042E-02 9.083964E-02 1.112754E-01 1.331307E-01 + 6.496828E-02 8.621525E-02 1.082693E-01 1.320926E-01 1.575545E-01 + 7.800195E-02 1.032391E-01 1.291436E-01 1.569623E-01 1.864879E-01 + 9.384589E-02 1.238135E-01 1.542005E-01 1.866619E-01 2.208427E-01 + 1.137393E-01 1.492827E-01 1.851281E-01 2.230512E-01 2.627849E-01 + 1.401276E-01 1.823252E-01 2.247441E-01 2.692125E-01 3.152560E-01 + 1.749249E-01 2.250857E-01 2.752036E-01 3.274292E-01 3.807991E-01 + 2.188691E-01 2.783103E-01 3.375936E-01 3.987462E-01 4.605076E-01 + 2.736703E-01 3.440116E-01 4.138349E-01 4.854733E-01 5.569035E-01 + 3.417333E-01 4.249324E-01 5.070874E-01 5.909414E-01 6.733870E-01 + 4.258532E-01 5.239660E-01 6.203688E-01 7.182753E-01 8.133718E-01 + 5.301321E-01 6.455006E-01 7.584782E-01 8.727875E-01 9.824488E-01 + 6.592018E-01 7.948115E-01 9.267732E-01 1.059648E+00 1.186259E+00 + 8.178573E-01 9.769385E-01 1.131178E+00 1.285356E+00 1.431125E+00 + 1.013339E+00 1.199663E+00 1.379476E+00 1.557748E+00 1.725073E+00 + 1.254340E+00 1.471968E+00 1.680955E+00 1.886649E+00 2.078550E+00 + 1.549639E+00 1.803146E+00 2.045596E+00 2.282604E+00 2.501294E+00 + 1.908735E+00 2.203805E+00 2.483971E+00 2.756683E+00 3.005628E+00 + 2.325901E+00 2.671251E+00 2.994041E+00 3.309030E+00 3.592151E+00 + 2.777100E+00 3.183499E+00 3.558986E+00 3.921801E+00 4.250811E+00 + 3.274041E+00 3.753390E+00 4.194018E+00 4.613583E+00 4.998937E+00 + 3.841831E+00 4.406235E+00 4.928194E+00 5.415494E+00 5.869289E+00 + 4.497730E+00 5.165896E+00 5.783679E+00 6.349593E+00 6.876254E+00 + 5.264218E+00 6.054668E+00 6.783857E+00 7.446667E+00 8.058960E+00 + 6.154674E+00 7.101951E+00 7.960162E+00 8.741905E+00 9.448889E+00 + 7.195620E+00 8.323307E+00 9.340733E+00 1.025690E+01 1.108178E+01 + 8.404355E+00 9.752907E+00 1.097122E+01 1.203947E+01 1.300304E+01 + 9.808943E+00 1.142947E+01 1.287996E+01 1.414011E+01 1.525486E+01 + 1.142426E+01 1.338167E+01 1.511328E+01 1.661681E+01 1.789911E+01 + 1.326368E+01 1.564776E+01 1.771022E+01 1.950167E+01 2.099726E+01 + 1.535587E+01 1.823902E+01 2.070402E+01 2.283829E+01 2.460844E+01 + 1.769485E+01 2.115819E+01 2.414007E+01 2.668331E+01 2.877670E+01 + 2.027621E+01 2.441184E+01 2.801834E+01 3.105947E+01 3.356068E+01 + 2.311938E+01 2.802280E+01 3.234638E+01 3.599171E+01 3.898716E+01 + 2.627485E+01 3.203198E+01 3.713591E+01 4.145401E+01 4.503397E+01 + 2.978490E+01 3.649835E+01 4.242985E+01 4.748052E+01 5.172658E+01 + 3.357855E+01 4.132674E+01 4.820320E+01 5.404696E+01 5.893838E+01 + 3.748197E+01 4.639371E+01 5.428873E+01 6.102282E+01 6.661365E+01 + 4.129727E+01 5.151720E+01 6.055302E+01 6.826622E+01 7.460006E+01 + 4.494550E+01 5.650492E+01 6.683712E+01 7.563603E+01 8.283976E+01 + 4.840654E+01 6.124159E+01 7.304892E+01 8.310645E+01 9.122753E+01 + 5.195619E+01 6.590607E+01 7.919681E+01 9.059004E+01 9.992377E+01 + 5.543733E+01 7.047520E+01 8.518289E+01 9.807629E+01 1.086542E+02 + 5.884147E+01 7.472200E+01 9.074408E+01 1.051444E+02 1.171968E+02 + 6.273083E+01 7.958685E+01 9.662776E+01 1.123369E+02 1.257934E+02 + 6.994534E+01 8.767910E+01 1.055449E+02 1.220670E+02 1.362109E+02 + 7.929227E+01 9.779339E+01 1.162039E+02 1.331426E+02 1.475067E+02 + 8.927226E+01 1.084203E+02 1.271452E+02 1.441749E+02 1.584799E+02 + 9.992717E+01 1.194571E+02 1.381638E+02 1.551336E+02 1.692894E+02 + 1.109729E+02 1.306174E+02 1.490715E+02 1.659403E+02 1.797562E+02 + 1.222064E+02 1.416249E+02 1.598052E+02 1.762685E+02 1.895815E+02 + 1.334034E+02 1.524251E+02 1.703410E+02 1.860564E+02 1.987381E+02 + 1.441152E+02 1.627677E+02 1.800858E+02 1.950009E+02 2.069290E+02 + 1.509525E+02 1.692988E+02 1.859749E+02 2.004186E+02 2.120060E+02 + 8.393303E-01 1.761308E+00 3.365721E+00 5.730970E+00 8.862190E+00 + 9.009849E-01 1.828368E+00 3.437849E+00 5.809223E+00 8.944413E+00 + 9.734388E-01 1.906471E+00 3.520424E+00 5.897037E+00 9.035373E+00 + 1.057584E+00 1.997789E+00 3.615853E+00 5.997006E+00 9.138656E+00 + 1.156214E+00 2.105576E+00 3.726891E+00 6.111346E+00 9.256684E+00 + 1.271620E+00 2.231071E+00 3.856111E+00 6.244042E+00 9.389190E+00 + 1.405685E+00 2.379523E+00 4.007720E+00 6.396919E+00 9.541843E+00 + 1.562419E+00 2.554701E+00 4.188051E+00 6.579602E+00 9.721320E+00 + 1.748185E+00 2.765402E+00 4.406838E+00 6.799788E+00 9.941166E+00 + 1.984502E+00 3.043978E+00 4.712366E+00 7.124650E+00 1.028231E+01 + 2.308167E+00 3.442836E+00 5.179312E+00 7.652560E+00 1.085875E+01 + 2.735853E+00 3.975516E+00 5.812418E+00 8.383251E+00 1.166803E+01 + 3.253631E+00 4.608434E+00 6.557933E+00 9.234355E+00 1.259785E+01 + 3.862049E+00 5.342448E+00 7.410097E+00 1.018778E+01 1.363144E+01 + 4.579951E+00 6.191673E+00 8.381888E+00 1.125576E+01 1.478417E+01 + 5.415574E+00 7.164141E+00 9.473874E+00 1.243998E+01 1.603395E+01 + 6.400912E+00 8.292783E+00 1.072099E+01 1.377739E+01 1.743574E+01 + 7.560150E+00 9.600179E+00 1.214616E+01 1.529047E+01 1.899998E+01 + 8.910432E+00 1.110354E+01 1.376927E+01 1.699427E+01 2.073931E+01 + 1.048818E+01 1.283821E+01 1.561956E+01 1.891482E+01 2.269273E+01 + 1.233969E+01 1.484667E+01 1.774328E+01 2.110296E+01 2.489695E+01 + 1.449721E+01 1.716302E+01 2.017126E+01 2.357412E+01 2.736739E+01 + 1.698823E+01 1.980527E+01 2.291834E+01 2.634866E+01 3.012677E+01 + 1.971801E+01 2.266841E+01 2.585821E+01 2.929288E+01 3.302314E+01 + 2.250532E+01 2.555603E+01 2.879764E+01 3.220881E+01 3.585138E+01 + 2.548188E+01 2.864714E+01 3.193029E+01 3.532968E+01 3.886895E+01 + 2.886543E+01 3.215601E+01 3.549862E+01 3.891514E+01 4.237271E+01 + 3.276526E+01 3.621448E+01 3.966415E+01 4.308844E+01 4.650571E+01 + 3.729344E+01 4.092513E+01 4.451787E+01 4.799534E+01 5.139483E+01 + 4.251647E+01 4.642265E+01 5.015811E+01 5.373130E+01 5.711006E+01 + 4.852709E+01 5.272062E+01 5.666010E+01 6.037043E+01 6.376427E+01 + 5.540873E+01 5.993494E+01 6.413775E+01 6.798672E+01 7.145959E+01 + 6.326404E+01 6.815707E+01 7.263749E+01 7.667430E+01 8.021823E+01 + 7.208824E+01 7.742890E+01 8.223331E+01 8.647979E+01 9.012226E+01 + 8.186376E+01 8.774374E+01 9.291696E+01 9.739118E+01 1.012040E+02 + 9.264576E+01 9.906195E+01 1.046696E+02 1.094397E+02 1.134256E+02 + 1.044288E+02 1.112905E+02 1.174291E+02 1.225579E+02 1.267532E+02 + 1.171110E+02 1.244749E+02 1.310837E+02 1.366076E+02 1.411011E+02 + 1.306529E+02 1.386368E+02 1.456413E+02 1.515943E+02 1.563948E+02 + 1.449491E+02 1.537198E+02 1.612742E+02 1.675656E+02 1.726470E+02 + 1.602170E+02 1.697733E+02 1.778469E+02 1.845642E+02 1.898339E+02 + 1.763181E+02 1.866888E+02 1.954099E+02 2.024998E+02 2.079422E+02 + 1.931257E+02 2.041801E+02 2.135604E+02 2.209963E+02 2.266829E+02 + 2.102201E+02 2.220659E+02 2.320095E+02 2.399204E+02 2.456993E+02 + 2.275248E+02 2.402056E+02 2.505057E+02 2.587722E+02 2.648526E+02 + 2.449882E+02 2.583604E+02 2.690347E+02 2.773646E+02 2.835277E+02 + 2.626436E+02 2.765663E+02 2.873017E+02 2.956120E+02 3.016457E+02 + 2.800626E+02 2.945583E+02 3.052425E+02 3.132010E+02 3.188026E+02 + 2.967745E+02 3.116678E+02 3.223523E+02 3.298224E+02 3.348354E+02 + 3.131534E+02 3.283001E+02 3.387060E+02 3.456226E+02 3.498406E+02 + 3.316615E+02 3.457975E+02 3.553301E+02 3.609175E+02 3.638991E+02 + 3.500572E+02 3.625860E+02 3.705767E+02 3.746307E+02 3.761890E+02 + 3.666036E+02 3.773144E+02 3.837271E+02 3.862996E+02 3.864734E+02 + 3.812863E+02 3.899407E+02 3.948742E+02 3.961916E+02 3.948789E+02 + 3.941235E+02 4.007965E+02 4.042220E+02 4.042333E+02 4.015484E+02 + 4.050306E+02 4.100562E+02 4.118352E+02 4.105054E+02 4.066320E+02 + 4.142711E+02 4.177712E+02 4.178989E+02 4.152202E+02 4.103034E+02 + 4.220269E+02 4.239415E+02 4.225489E+02 4.186180E+02 4.127111E+02 + 4.268008E+02 4.276499E+02 4.254996E+02 4.207565E+02 4.141710E+02 + 2.469573E+02 3.073223E+02 3.724182E+02 4.400615E+02 5.081750E+02 + 2.479275E+02 3.082961E+02 3.734232E+02 4.410876E+02 5.091452E+02 + 2.489835E+02 3.093340E+02 3.744753E+02 4.421263E+02 5.101466E+02 + 2.500901E+02 3.104344E+02 3.755816E+02 4.432224E+02 5.111828E+02 + 2.512977E+02 3.116224E+02 3.767631E+02 4.443528E+02 5.122930E+02 + 2.525871E+02 3.127834E+02 3.779943E+02 4.455534E+02 5.134108E+02 + 2.539399E+02 3.140988E+02 3.792842E+02 4.468153E+02 5.145788E+02 + 2.555617E+02 3.155817E+02 3.807203E+02 4.482369E+02 5.158724E+02 + 2.576107E+02 3.173913E+02 3.825049E+02 4.499225E+02 5.174756E+02 + 2.612244E+02 3.209382E+02 3.860257E+02 4.533455E+02 5.207879E+02 + 2.681569E+02 3.281818E+02 3.934145E+02 4.606405E+02 5.278699E+02 + 2.783658E+02 3.388798E+02 4.043204E+02 4.715083E+02 5.383036E+02 + 2.899203E+02 3.508530E+02 4.164456E+02 4.835707E+02 5.497442E+02 + 3.021106E+02 3.634970E+02 4.291825E+02 4.961156E+02 5.616169E+02 + 3.152284E+02 3.768591E+02 4.425439E+02 5.090869E+02 5.740231E+02 + 3.288782E+02 3.907181E+02 4.562295E+02 5.222620E+02 5.862791E+02 + 3.435941E+02 4.055483E+02 4.706371E+02 5.360122E+02 5.990402E+02 + 3.594578E+02 4.213630E+02 4.858723E+02 5.504149E+02 6.121501E+02 + 3.763290E+02 4.379056E+02 5.017895E+02 5.653093E+02 6.255122E+02 + 3.943132E+02 4.554313E+02 5.184734E+02 5.807387E+02 6.393412E+02 + 4.137639E+02 4.742940E+02 5.361816E+02 5.970334E+02 6.537363E+02 + 4.347356E+02 4.943647E+02 5.548382E+02 6.138415E+02 6.684092E+02 + 4.568174E+02 5.152298E+02 5.740798E+02 6.308812E+02 6.831589E+02 + 4.774518E+02 5.342427E+02 5.911422E+02 6.456102E+02 6.956639E+02 + 4.930102E+02 5.477985E+02 6.024753E+02 6.549366E+02 7.030501E+02 + 5.066368E+02 5.591176E+02 6.115079E+02 6.619761E+02 7.081055E+02 + 5.224285E+02 5.717289E+02 6.216335E+02 6.698014E+02 7.141221E+02 + 5.413723E+02 5.876478E+02 6.347060E+02 6.801470E+02 7.220874E+02 + 5.646113E+02 6.077295E+02 6.514527E+02 6.940515E+02 7.330814E+02 + 5.924497E+02 6.325206E+02 6.726495E+02 7.118119E+02 7.478204E+02 + 6.252285E+02 6.615774E+02 6.981524E+02 7.334030E+02 7.660175E+02 + 6.623565E+02 6.954516E+02 7.280660E+02 7.591656E+02 7.879879E+02 + 7.042480E+02 7.334701E+02 7.619607E+02 7.887495E+02 8.134164E+02 + 7.502625E+02 7.753019E+02 7.994305E+02 8.217434E+02 8.416252E+02 + 7.994299E+02 8.199015E+02 8.396659E+02 8.573198E+02 8.723642E+02 + 8.505451E+02 8.664553E+02 8.810952E+02 8.941853E+02 9.044349E+02 + 9.023262E+02 9.135661E+02 9.229738E+02 9.309855E+02 9.362937E+02 + 9.521714E+02 9.592445E+02 9.640104E+02 9.663194E+02 9.668457E+02 + 9.994153E+02 1.001238E+03 1.001377E+03 9.988374E+02 9.938995E+02 + 1.040259E+03 1.037592E+03 1.032491E+03 1.025642E+03 1.016174E+03 + 1.072665E+03 1.065408E+03 1.055517E+03 1.044028E+03 1.030948E+03 + 1.095006E+03 1.083774E+03 1.069704E+03 1.054085E+03 1.036861E+03 + 1.108472E+03 1.091996E+03 1.074593E+03 1.054790E+03 1.034785E+03 + 1.113325E+03 1.091930E+03 1.070459E+03 1.047982E+03 1.024588E+03 + 1.109135E+03 1.085304E+03 1.059694E+03 1.034310E+03 1.008257E+03 + 1.097444E+03 1.071136E+03 1.043318E+03 1.015212E+03 9.875243E+02 + 1.079192E+03 1.051049E+03 1.021971E+03 9.923102E+02 9.625803E+02 + 1.056890E+03 1.027418E+03 9.968765E+02 9.662839E+02 9.356688E+02 + 1.033475E+03 1.001733E+03 9.701530E+02 9.390363E+02 9.080858E+02 + 1.008080E+03 9.746411E+02 9.421176E+02 9.104805E+02 8.791913E+02 + 9.758225E+02 9.420112E+02 9.092306E+02 8.770745E+02 8.458904E+02 + 9.411888E+02 9.075169E+02 8.745828E+02 8.426744E+02 8.116516E+02 + 9.072645E+02 8.741356E+02 8.414434E+02 8.099604E+02 7.792451E+02 + 8.743835E+02 8.416457E+02 8.094421E+02 7.784106E+02 7.484227E+02 + 8.427892E+02 8.105982E+02 7.790904E+02 7.484864E+02 7.192777E+02 + 8.129106E+02 7.813182E+02 7.505680E+02 7.206009E+02 6.920867E+02 + 7.839127E+02 7.532575E+02 7.234317E+02 6.944650E+02 6.665127E+02 + 7.570871E+02 7.273217E+02 6.984244E+02 6.703861E+02 6.429195E+02 + 7.399689E+02 7.106739E+02 6.824191E+02 6.548582E+02 6.279409E+02 + +Band: 9, gas: 1, k-terms: 5 + 7.621697E-07 9.467762E-07 1.183907E-06 1.545826E-06 2.028964E-06 + 9.175030E-07 1.130156E-06 1.411251E-06 1.831724E-06 2.382608E-06 + 1.104806E-06 1.351955E-06 1.680787E-06 2.174386E-06 2.791316E-06 + 1.328530E-06 1.612531E-06 2.003475E-06 2.580439E-06 3.278980E-06 + 1.599774E-06 1.926124E-06 2.387835E-06 3.059622E-06 3.863205E-06 + 1.928319E-06 2.301022E-06 2.833673E-06 3.628334E-06 4.538722E-06 + 2.323173E-06 2.752940E-06 3.380937E-06 4.292790E-06 5.340342E-06 + 2.797613E-06 3.283578E-06 4.039176E-06 5.091573E-06 6.294616E-06 + 3.370336E-06 3.917622E-06 4.825076E-06 6.052268E-06 7.453109E-06 + 4.076444E-06 4.709042E-06 5.785801E-06 7.220832E-06 8.868210E-06 + 4.965236E-06 5.747854E-06 7.020511E-06 8.718816E-06 1.066783E-05 + 6.071451E-06 7.085183E-06 8.593900E-06 1.063554E-05 1.294748E-05 + 7.454527E-06 8.742650E-06 1.052717E-05 1.299915E-05 1.574503E-05 + 9.132519E-06 1.074265E-05 1.289147E-05 1.585082E-05 1.914192E-05 + 1.117851E-05 1.320192E-05 1.584306E-05 1.934771E-05 2.326649E-05 + 1.368610E-05 1.616871E-05 1.939467E-05 2.358362E-05 2.824554E-05 + 1.684196E-05 1.991676E-05 2.373818E-05 2.879022E-05 3.428429E-05 + 2.066117E-05 2.449683E-05 2.903132E-05 3.505906E-05 4.159081E-05 + 2.532010E-05 3.002584E-05 3.542892E-05 4.263318E-05 5.037320E-05 + 3.099551E-05 3.672020E-05 4.323756E-05 5.174901E-05 6.089312E-05 + 3.845839E-05 4.490391E-05 5.302965E-05 6.275095E-05 7.348498E-05 + 4.723979E-05 5.476141E-05 6.464320E-05 7.581350E-05 8.843285E-05 + 5.782254E-05 6.669226E-05 7.846823E-05 9.122674E-05 1.059068E-04 + 6.995736E-05 8.026531E-05 9.392965E-05 1.086188E-04 1.251868E-04 + 8.289465E-05 9.463450E-05 1.097941E-04 1.266801E-04 1.448466E-04 + 9.688313E-05 1.102328E-04 1.260482E-04 1.454839E-04 1.658154E-04 + 1.121439E-04 1.277360E-04 1.452224E-04 1.664443E-04 1.888240E-04 + 1.311247E-04 1.480377E-04 1.664039E-04 1.900505E-04 2.140674E-04 + 1.524842E-04 1.708837E-04 1.908180E-04 2.157873E-04 2.421155E-04 + 1.782786E-04 1.973017E-04 2.189514E-04 2.435571E-04 2.734986E-04 + 2.076318E-04 2.259806E-04 2.504577E-04 2.770109E-04 3.089708E-04 + 2.413674E-04 2.602829E-04 2.866854E-04 3.137401E-04 3.474028E-04 + 2.815200E-04 3.000291E-04 3.261911E-04 3.548374E-04 3.884996E-04 + 3.257271E-04 3.449078E-04 3.722476E-04 4.011544E-04 4.349912E-04 + 3.752136E-04 3.969406E-04 4.223067E-04 4.525417E-04 4.875003E-04 + 4.334484E-04 4.562199E-04 4.774933E-04 5.105574E-04 5.441547E-04 + 5.064302E-04 5.221432E-04 5.419292E-04 5.730694E-04 6.070528E-04 + 5.922962E-04 5.976035E-04 6.115279E-04 6.434033E-04 6.767170E-04 + 6.895074E-04 6.786334E-04 6.904720E-04 7.192173E-04 7.533755E-04 + 7.992100E-04 7.688176E-04 7.817599E-04 8.040622E-04 8.386218E-04 + 9.220624E-04 8.712005E-04 8.819790E-04 8.971129E-04 9.340521E-04 + 1.064037E-03 9.961732E-04 9.933373E-04 1.003460E-03 1.038611E-03 + 1.217205E-03 1.139940E-03 1.118997E-03 1.121644E-03 1.156500E-03 + 1.410232E-03 1.304688E-03 1.261769E-03 1.257567E-03 1.288477E-03 + 1.644928E-03 1.493792E-03 1.421109E-03 1.411591E-03 1.437132E-03 + 1.923604E-03 1.713073E-03 1.602330E-03 1.589161E-03 1.607819E-03 + 2.250250E-03 1.971865E-03 1.822611E-03 1.797863E-03 1.813577E-03 + 2.645205E-03 2.276281E-03 2.094336E-03 2.050913E-03 2.056116E-03 + 3.128725E-03 2.634114E-03 2.420627E-03 2.356026E-03 2.358654E-03 + 3.676210E-03 3.064653E-03 2.810917E-03 2.721129E-03 2.727673E-03 + 4.169105E-03 3.514696E-03 3.243381E-03 3.169781E-03 3.196274E-03 + 4.645475E-03 4.037772E-03 3.744479E-03 3.717874E-03 3.780468E-03 + 5.201411E-03 4.617733E-03 4.346512E-03 4.385571E-03 4.499298E-03 + 5.831949E-03 5.279881E-03 5.055690E-03 5.167490E-03 5.361447E-03 + 6.569883E-03 6.086434E-03 5.905192E-03 6.099899E-03 6.381868E-03 + 7.426512E-03 7.007857E-03 6.894622E-03 7.196924E-03 7.586894E-03 + 8.436840E-03 8.111885E-03 8.086294E-03 8.515586E-03 9.077702E-03 + 9.620348E-03 9.472975E-03 9.636162E-03 1.017139E-02 1.087418E-02 + 1.080950E-02 1.072323E-02 1.096486E-02 1.157973E-02 1.237658E-02 + 4.457796E-04 4.471099E-04 4.542603E-04 4.687542E-04 4.892378E-04 + 5.025792E-04 5.011809E-04 5.064286E-04 5.196297E-04 5.394881E-04 + 5.673846E-04 5.622189E-04 5.653563E-04 5.771102E-04 5.960569E-04 + 6.414478E-04 6.317586E-04 6.321305E-04 6.421210E-04 6.602268E-04 + 7.261267E-04 7.109666E-04 7.079660E-04 7.160655E-04 7.330799E-04 + 8.231212E-04 8.018112E-04 7.941999E-04 8.006126E-04 8.165280E-04 + 9.359087E-04 9.066544E-04 8.938718E-04 8.974000E-04 9.122471E-04 + 1.067366E-03 1.028132E-03 1.009338E-03 1.009470E-03 1.022755E-03 + 1.221358E-03 1.170694E-03 1.144244E-03 1.140560E-03 1.151749E-03 + 1.403550E-03 1.337863E-03 1.303293E-03 1.294473E-03 1.304319E-03 + 1.617335E-03 1.535612E-03 1.491078E-03 1.477815E-03 1.487056E-03 + 1.870293E-03 1.770242E-03 1.715488E-03 1.698982E-03 1.709154E-03 + 2.177516E-03 2.056699E-03 1.989211E-03 1.970036E-03 1.982179E-03 + 2.555618E-03 2.408683E-03 2.326475E-03 2.305465E-03 2.320277E-03 + 3.022797E-03 2.846036E-03 2.749075E-03 2.723928E-03 2.744619E-03 + 3.597328E-03 3.387540E-03 3.275046E-03 3.247486E-03 3.273606E-03 + 4.297336E-03 4.055581E-03 3.923091E-03 3.894577E-03 3.926723E-03 + 5.141997E-03 4.863194E-03 4.712233E-03 4.682783E-03 4.721258E-03 + 6.157925E-03 5.838147E-03 5.664338E-03 5.634284E-03 5.681913E-03 + 7.374121E-03 7.007914E-03 6.810269E-03 6.779973E-03 6.837824E-03 + 8.847158E-03 8.416009E-03 8.199342E-03 8.161210E-03 8.230341E-03 + 1.060472E-02 1.010710E-02 9.869784E-03 9.820672E-03 9.902143E-03 + 1.272444E-02 1.214969E-02 1.188237E-02 1.181368E-02 1.190912E-02 + 1.531859E-02 1.463050E-02 1.430449E-02 1.421362E-02 1.430685E-02 + 1.857330E-02 1.770460E-02 1.724735E-02 1.710526E-02 1.715845E-02 + 2.266539E-02 2.151477E-02 2.084044E-02 2.060402E-02 2.060232E-02 + 2.771669E-02 2.621251E-02 2.527680E-02 2.485302E-02 2.476244E-02 + 3.403351E-02 3.203206E-02 3.069303E-02 3.003835E-02 2.979042E-02 + 4.179458E-02 3.914689E-02 3.732398E-02 3.633544E-02 3.587288E-02 + 5.141352E-02 4.789983E-02 4.548286E-02 4.395096E-02 4.327793E-02 + 6.329964E-02 5.863756E-02 5.548760E-02 5.336532E-02 5.232267E-02 + 7.795173E-02 7.191490E-02 6.778344E-02 6.488074E-02 6.328342E-02 + 9.600113E-02 8.824940E-02 8.277080E-02 7.893956E-02 7.658438E-02 + 1.181457E-01 1.082607E-01 1.011685E-01 9.613487E-02 9.284152E-02 + 1.453647E-01 1.329000E-01 1.236690E-01 1.171412E-01 1.126947E-01 + 1.791217E-01 1.633110E-01 1.512066E-01 1.428561E-01 1.368190E-01 + 2.209593E-01 2.007647E-01 1.852979E-01 1.742202E-01 1.663264E-01 + 2.725710E-01 2.467426E-01 2.269446E-01 2.128647E-01 2.024731E-01 + 3.358487E-01 3.028516E-01 2.779683E-01 2.597788E-01 2.464375E-01 + 4.131019E-01 3.711676E-01 3.402931E-01 3.168317E-01 2.999329E-01 + 5.070169E-01 4.541689E-01 4.157066E-01 3.858606E-01 3.646916E-01 + 6.212204E-01 5.556061E-01 5.069263E-01 4.697115E-01 4.427693E-01 + 7.597593E-01 6.792092E-01 6.178499E-01 5.713443E-01 5.375359E-01 + 9.293698E-01 8.297172E-01 7.526330E-01 6.947943E-01 6.521199E-01 + 1.135557E+00 1.012571E+00 9.158257E-01 8.440389E-01 7.902958E-01 + 1.384927E+00 1.232728E+00 1.111909E+00 1.023794E+00 9.561941E-01 + 1.681700E+00 1.495671E+00 1.346826E+00 1.237775E+00 1.154818E+00 + 2.036042E+00 1.808300E+00 1.627948E+00 1.493860E+00 1.391220E+00 + 2.459635E+00 2.182393E+00 1.964924E+00 1.799990E+00 1.674228E+00 + 2.949326E+00 2.616383E+00 2.356882E+00 2.157151E+00 2.006692E+00 + 3.449784E+00 3.066813E+00 2.771375E+00 2.545174E+00 2.372344E+00 + 3.982140E+00 3.557866E+00 3.224620E+00 2.976651E+00 2.783558E+00 + 4.586877E+00 4.116032E+00 3.745719E+00 3.475989E+00 3.260137E+00 + 5.273087E+00 4.751385E+00 4.343078E+00 4.048453E+00 3.810878E+00 + 6.053062E+00 5.481589E+00 5.031611E+00 4.708612E+00 4.446153E+00 + 6.945313E+00 6.318229E+00 5.821856E+00 5.468996E+00 5.180809E+00 + 7.957571E+00 7.273349E+00 6.729204E+00 6.343439E+00 6.034869E+00 + 9.104087E+00 8.376840E+00 7.800116E+00 7.373798E+00 7.031232E+00 + 1.014498E+01 9.370253E+00 8.747525E+00 8.278984E+00 7.904831E+00 + 9.690166E-02 1.416513E-01 2.143388E-01 3.278493E-01 4.992506E-01 + 1.086081E-01 1.556294E-01 2.304438E-01 3.443305E-01 5.148062E-01 + 1.225421E-01 1.711476E-01 2.489199E-01 3.636305E-01 5.344603E-01 + 1.391566E-01 1.897116E-01 2.700147E-01 3.856481E-01 5.575616E-01 + 1.584368E-01 2.107917E-01 2.936329E-01 4.116918E-01 5.831865E-01 + 1.798031E-01 2.353629E-01 3.196951E-01 4.426690E-01 6.180451E-01 + 2.057856E-01 2.638779E-01 3.505375E-01 4.772640E-01 6.569004E-01 + 2.357633E-01 2.965544E-01 3.860784E-01 5.169346E-01 6.995482E-01 + 2.696368E-01 3.357440E-01 4.283161E-01 5.648014E-01 7.474702E-01 + 3.119386E-01 3.814835E-01 4.816802E-01 6.219453E-01 8.101235E-01 + 3.646165E-01 4.413286E-01 5.488264E-01 6.970885E-01 8.943336E-01 + 4.300950E-01 5.139915E-01 6.326374E-01 7.924649E-01 1.006572E+00 + 5.082786E-01 6.038726E-01 7.328051E-01 9.071083E-01 1.139418E+00 + 6.010764E-01 7.072378E-01 8.464550E-01 1.039261E+00 1.285413E+00 + 7.119131E-01 8.282387E-01 9.817290E-01 1.187568E+00 1.457580E+00 + 8.407226E-01 9.693036E-01 1.140848E+00 1.363777E+00 1.653813E+00 + 9.932699E-01 1.140421E+00 1.326525E+00 1.567944E+00 1.883332E+00 + 1.174474E+00 1.336222E+00 1.545146E+00 1.808199E+00 2.144651E+00 + 1.392078E+00 1.568832E+00 1.798312E+00 2.082584E+00 2.446682E+00 + 1.647831E+00 1.838702E+00 2.089224E+00 2.399788E+00 2.791668E+00 + 1.952997E+00 2.160493E+00 2.431311E+00 2.774307E+00 3.195507E+00 + 2.306202E+00 2.537655E+00 2.837436E+00 3.208380E+00 3.651200E+00 + 2.723185E+00 2.984266E+00 3.310331E+00 3.701163E+00 4.170035E+00 + 3.203933E+00 3.484172E+00 3.828791E+00 4.246799E+00 4.738148E+00 + 3.731652E+00 4.028395E+00 4.379908E+00 4.818507E+00 5.317298E+00 + 4.352709E+00 4.645033E+00 5.014105E+00 5.461968E+00 5.967364E+00 + 5.064682E+00 5.367860E+00 5.748459E+00 6.181223E+00 6.707870E+00 + 5.929376E+00 6.233322E+00 6.599066E+00 7.029365E+00 7.555193E+00 + 6.954851E+00 7.245180E+00 7.597982E+00 8.054708E+00 8.557193E+00 + 8.180146E+00 8.459699E+00 8.815871E+00 9.251422E+00 9.777843E+00 + 9.671315E+00 9.930280E+00 1.028397E+01 1.069467E+01 1.123874E+01 + 1.145328E+01 1.168873E+01 1.203922E+01 1.245433E+01 1.297308E+01 + 1.357217E+01 1.380573E+01 1.413925E+01 1.454765E+01 1.508312E+01 + 1.612792E+01 1.634321E+01 1.664974E+01 1.707092E+01 1.759726E+01 + 1.916922E+01 1.938346E+01 1.969571E+01 2.012240E+01 2.059762E+01 + 2.291163E+01 2.308426E+01 2.333296E+01 2.373332E+01 2.417499E+01 + 2.735763E+01 2.754509E+01 2.769553E+01 2.797776E+01 2.841888E+01 + 3.266049E+01 3.277005E+01 3.287265E+01 3.314077E+01 3.350230E+01 + 3.896235E+01 3.904127E+01 3.911368E+01 3.923565E+01 3.950865E+01 + 4.641853E+01 4.647902E+01 4.656487E+01 4.646971E+01 4.665767E+01 + 5.535853E+01 5.527760E+01 5.534345E+01 5.515129E+01 5.515107E+01 + 6.577966E+01 6.574617E+01 6.568501E+01 6.541884E+01 6.520030E+01 + 7.826922E+01 7.805432E+01 7.786756E+01 7.761680E+01 7.708924E+01 + 9.283210E+01 9.243367E+01 9.209897E+01 9.173096E+01 9.109088E+01 + 1.095148E+02 1.092776E+02 1.087741E+02 1.081606E+02 1.072962E+02 + 1.291236E+02 1.285078E+02 1.278680E+02 1.272310E+02 1.259704E+02 + 1.515437E+02 1.508495E+02 1.500346E+02 1.488097E+02 1.474534E+02 + 1.773296E+02 1.759809E+02 1.746901E+02 1.732790E+02 1.717623E+02 + 2.059963E+02 2.042737E+02 2.024327E+02 2.000482E+02 1.976964E+02 + 2.373039E+02 2.346522E+02 2.324572E+02 2.293033E+02 2.267132E+02 + 2.697024E+02 2.663725E+02 2.638728E+02 2.598875E+02 2.563149E+02 + 3.026003E+02 2.990430E+02 2.952971E+02 2.905011E+02 2.861554E+02 + 3.350867E+02 3.311864E+02 3.262416E+02 3.212014E+02 3.157170E+02 + 3.661792E+02 3.611983E+02 3.558215E+02 3.501071E+02 3.437302E+02 + 3.933360E+02 3.876944E+02 3.819262E+02 3.758238E+02 3.687924E+02 + 4.170373E+02 4.101246E+02 4.036306E+02 3.972448E+02 3.900568E+02 + 4.364512E+02 4.281730E+02 4.206587E+02 4.130851E+02 4.054107E+02 + 4.487525E+02 4.403595E+02 4.321744E+02 4.245174E+02 4.159078E+02 + 4.540363E+02 4.456553E+02 4.369573E+02 4.287486E+02 4.208097E+02 + 1.950175E+02 3.314220E+02 5.079590E+02 7.379200E+02 9.989723E+02 + 1.971316E+02 3.328731E+02 5.103871E+02 7.413231E+02 1.002646E+03 + 1.982394E+02 3.353766E+02 5.134272E+02 7.456611E+02 1.007737E+03 + 2.001249E+02 3.368531E+02 5.177813E+02 7.493190E+02 1.011587E+03 + 2.032875E+02 3.389533E+02 5.214392E+02 7.531307E+02 1.013772E+03 + 2.039387E+02 3.421312E+02 5.245042E+02 7.563868E+02 1.017870E+03 + 2.073761E+02 3.465331E+02 5.287945E+02 7.601588E+02 1.021994E+03 + 2.092469E+02 3.498949E+02 5.326210E+02 7.651164E+02 1.026661E+03 + 2.120074E+02 3.551816E+02 5.391262E+02 7.718107E+02 1.030255E+03 + 2.191189E+02 3.634307E+02 5.479901E+02 7.830592E+02 1.042266E+03 + 2.314207E+02 3.765525E+02 5.695666E+02 8.092987E+02 1.066696E+03 + 2.525204E+02 3.990940E+02 6.053216E+02 8.471854E+02 1.110462E+03 + 2.792099E+02 4.360373E+02 6.409005E+02 8.930081E+02 1.151211E+03 + 3.053287E+02 4.727744E+02 6.791309E+02 9.323591E+02 1.200428E+03 + 3.364437E+02 5.082073E+02 7.238973E+02 9.817631E+02 1.242055E+03 + 3.654622E+02 5.422504E+02 7.737401E+02 1.027721E+03 1.291897E+03 + 4.030379E+02 5.900482E+02 8.204293E+02 1.079796E+03 1.351013E+03 + 4.369124E+02 6.382219E+02 8.653512E+02 1.129460E+03 1.408569E+03 + 4.845045E+02 6.883809E+02 9.205887E+02 1.185183E+03 1.459427E+03 + 5.408647E+02 7.406651E+02 9.775450E+02 1.242838E+03 1.517227E+03 + 5.954192E+02 7.970372E+02 1.036230E+03 1.304215E+03 1.574582E+03 + 6.560437E+02 8.567251E+02 1.099123E+03 1.364664E+03 1.629670E+03 + 7.162936E+02 9.293502E+02 1.169348E+03 1.433916E+03 1.689935E+03 + 7.768430E+02 9.915425E+02 1.229106E+03 1.486009E+03 1.734352E+03 + 8.227765E+02 1.024166E+03 1.258182E+03 1.510340E+03 1.751705E+03 + 8.558389E+02 1.051306E+03 1.272671E+03 1.519492E+03 1.755030E+03 + 8.959138E+02 1.089596E+03 1.302746E+03 1.527833E+03 1.758412E+03 + 9.512870E+02 1.117579E+03 1.329816E+03 1.547237E+03 1.756736E+03 + 1.026600E+03 1.160051E+03 1.364526E+03 1.575571E+03 1.786252E+03 + 1.113179E+03 1.234598E+03 1.416081E+03 1.617212E+03 1.821574E+03 + 1.220933E+03 1.345561E+03 1.491114E+03 1.685283E+03 1.861882E+03 + 1.351935E+03 1.471067E+03 1.586525E+03 1.756177E+03 1.936674E+03 + 1.497196E+03 1.610681E+03 1.719657E+03 1.863414E+03 2.031910E+03 + 1.665732E+03 1.773652E+03 1.883036E+03 1.990649E+03 2.140848E+03 + 1.852256E+03 1.960799E+03 2.053844E+03 2.147979E+03 2.278938E+03 + 2.083356E+03 2.169454E+03 2.261071E+03 2.346639E+03 2.435215E+03 + 2.336012E+03 2.417098E+03 2.478149E+03 2.573919E+03 2.631490E+03 + 2.616889E+03 2.679880E+03 2.728133E+03 2.813855E+03 2.862828E+03 + 2.898562E+03 2.949990E+03 3.009652E+03 3.057888E+03 3.117122E+03 + 3.212695E+03 3.237952E+03 3.290265E+03 3.309627E+03 3.342614E+03 + 3.564571E+03 3.526633E+03 3.550498E+03 3.589240E+03 3.591070E+03 + 3.872296E+03 3.851598E+03 3.826371E+03 3.834547E+03 3.834178E+03 + 4.182960E+03 4.129728E+03 4.069667E+03 4.055564E+03 4.042281E+03 + 4.429100E+03 4.379503E+03 4.287690E+03 4.218833E+03 4.206551E+03 + 4.576108E+03 4.547203E+03 4.455844E+03 4.366050E+03 4.310507E+03 + 4.679364E+03 4.637918E+03 4.552835E+03 4.462743E+03 4.376199E+03 + 4.689336E+03 4.652970E+03 4.603387E+03 4.507010E+03 4.400986E+03 + 4.651436E+03 4.575633E+03 4.517563E+03 4.453726E+03 4.372633E+03 + 4.618098E+03 4.455886E+03 4.386007E+03 4.318333E+03 4.238429E+03 + 4.512274E+03 4.318041E+03 4.220405E+03 4.140824E+03 4.071976E+03 + 4.318795E+03 4.127660E+03 4.016211E+03 3.929906E+03 3.864362E+03 + 4.073959E+03 3.901483E+03 3.775052E+03 3.685351E+03 3.620894E+03 + 3.794700E+03 3.657585E+03 3.538001E+03 3.460901E+03 3.392766E+03 + 3.497537E+03 3.386617E+03 3.299901E+03 3.216900E+03 3.149334E+03 + 3.197397E+03 3.109192E+03 3.030217E+03 2.956320E+03 2.889275E+03 + 2.901446E+03 2.824352E+03 2.759313E+03 2.699238E+03 2.637225E+03 + 2.611616E+03 2.552809E+03 2.493729E+03 2.436482E+03 2.384133E+03 + 2.322375E+03 2.275818E+03 2.230397E+03 2.180844E+03 2.134916E+03 + 2.111556E+03 2.066432E+03 2.029623E+03 1.983904E+03 1.945119E+03 + 2.111312E+04 2.414990E+04 2.579205E+04 2.707999E+04 2.758422E+04 + 2.116498E+04 2.418400E+04 2.581338E+04 2.709111E+04 2.758722E+04 + 2.121734E+04 2.421828E+04 2.583471E+04 2.709251E+04 2.759010E+04 + 2.127015E+04 2.425263E+04 2.585596E+04 2.710354E+04 2.759277E+04 + 2.132523E+04 2.428825E+04 2.592361E+04 2.711484E+04 2.758375E+04 + 2.133013E+04 2.432332E+04 2.594512E+04 2.712573E+04 2.758635E+04 + 2.138610E+04 2.442105E+04 2.596667E+04 2.713646E+04 2.758869E+04 + 2.144652E+04 2.445944E+04 2.598960E+04 2.714775E+04 2.759099E+04 + 2.144301E+04 2.450636E+04 2.608658E+04 2.716149E+04 2.759370E+04 + 2.160537E+04 2.461042E+04 2.615039E+04 2.719328E+04 2.760052E+04 + 2.195015E+04 2.468518E+04 2.616450E+04 2.732448E+04 2.761409E+04 + 2.249291E+04 2.480219E+04 2.639564E+04 2.741708E+04 2.769486E+04 + 2.291580E+04 2.514615E+04 2.664674E+04 2.750137E+04 2.763267E+04 + 2.327132E+04 2.532228E+04 2.670023E+04 2.748221E+04 2.762711E+04 + 2.388672E+04 2.564947E+04 2.689044E+04 2.753916E+04 2.758076E+04 + 2.425645E+04 2.593834E+04 2.713456E+04 2.756678E+04 2.744495E+04 + 2.472999E+04 2.629701E+04 2.731511E+04 2.760000E+04 2.746320E+04 + 2.514782E+04 2.653481E+04 2.732685E+04 2.766712E+04 2.751398E+04 + 2.541372E+04 2.675677E+04 2.741520E+04 2.759586E+04 2.736841E+04 + 2.578893E+04 2.696070E+04 2.747972E+04 2.758114E+04 2.732339E+04 + 2.590610E+04 2.715857E+04 2.752765E+04 2.746563E+04 2.721098E+04 + 2.618508E+04 2.724201E+04 2.755606E+04 2.734470E+04 2.708894E+04 + 2.643544E+04 2.734390E+04 2.750506E+04 2.740322E+04 2.697651E+04 + 2.655555E+04 2.738851E+04 2.748809E+04 2.730277E+04 2.685623E+04 + 2.657196E+04 2.735174E+04 2.744406E+04 2.723439E+04 2.681459E+04 + 2.653776E+04 2.727685E+04 2.737784E+04 2.720381E+04 2.679089E+04 + 2.650326E+04 2.726742E+04 2.735084E+04 2.713183E+04 2.667893E+04 + 2.625519E+04 2.711714E+04 2.732232E+04 2.718347E+04 2.665797E+04 + 2.608212E+04 2.650214E+04 2.699260E+04 2.705932E+04 2.663951E+04 + 2.642091E+04 2.641810E+04 2.682602E+04 2.679658E+04 2.653385E+04 + 2.626875E+04 2.669814E+04 2.673899E+04 2.666589E+04 2.629214E+04 + 2.617556E+04 2.660909E+04 2.644265E+04 2.645968E+04 2.618034E+04 + 2.603504E+04 2.636109E+04 2.635837E+04 2.628432E+04 2.591114E+04 + 2.610733E+04 2.624504E+04 2.626559E+04 2.592252E+04 2.568008E+04 + 2.585435E+04 2.620299E+04 2.590642E+04 2.548783E+04 2.533326E+04 + 2.595363E+04 2.593019E+04 2.562602E+04 2.525669E+04 2.496620E+04 + 2.575224E+04 2.573304E+04 2.536461E+04 2.509564E+04 2.461520E+04 + 2.574551E+04 2.550832E+04 2.501472E+04 2.470782E+04 2.415881E+04 + 2.536590E+04 2.511934E+04 2.470792E+04 2.411737E+04 2.373603E+04 + 2.457612E+04 2.439984E+04 2.397879E+04 2.339130E+04 2.286213E+04 + 2.371968E+04 2.349209E+04 2.312463E+04 2.267866E+04 2.199414E+04 + 2.305284E+04 2.247853E+04 2.201215E+04 2.167310E+04 2.111622E+04 + 2.219327E+04 2.134899E+04 2.080979E+04 2.041753E+04 2.000992E+04 + 2.121550E+04 2.039116E+04 1.964339E+04 1.908998E+04 1.873471E+04 + 1.970479E+04 1.906663E+04 1.836937E+04 1.785604E+04 1.737888E+04 + 1.818608E+04 1.772157E+04 1.710459E+04 1.654553E+04 1.613621E+04 + 1.656343E+04 1.628551E+04 1.580539E+04 1.529267E+04 1.478163E+04 + 1.496524E+04 1.468335E+04 1.427900E+04 1.388086E+04 1.349639E+04 + 1.347893E+04 1.315639E+04 1.286728E+04 1.251022E+04 1.215311E+04 + 1.191502E+04 1.172670E+04 1.149084E+04 1.115063E+04 1.084299E+04 + 1.049106E+04 1.029149E+04 1.010047E+04 9.863970E+03 9.626901E+03 + 9.195241E+03 8.939865E+03 8.751723E+03 8.559911E+03 8.381389E+03 + 7.941611E+03 7.703062E+03 7.529622E+03 7.372494E+03 7.221141E+03 + 6.793378E+03 6.583800E+03 6.435960E+03 6.308679E+03 6.184441E+03 + 5.812568E+03 5.619185E+03 5.477069E+03 5.367262E+03 5.272669E+03 + 4.922649E+03 4.770063E+03 4.662959E+03 4.575314E+03 4.506953E+03 + 4.135247E+03 4.027470E+03 3.951848E+03 3.888659E+03 3.831134E+03 + 3.469875E+03 3.390823E+03 3.331679E+03 3.287562E+03 3.253599E+03 + 3.033957E+03 2.969616E+03 2.926923E+03 2.892808E+03 2.873638E+03 + +Band: 9, gas: 6, k-terms: 1 + 2.381592E-03 6.567402E-03 1.394811E-02 2.478277E-02 3.877618E-02 + 2.418059E-03 6.640754E-03 1.406546E-02 2.494359E-02 3.897370E-02 + 2.454963E-03 6.714720E-03 1.418351E-02 2.510510E-02 3.917185E-02 + 2.492293E-03 6.789258E-03 1.430218E-02 2.526717E-02 3.937040E-02 + 2.531259E-03 6.866783E-03 1.442531E-02 2.543504E-02 3.957583E-02 + 2.569533E-03 6.942651E-03 1.454552E-02 2.559866E-02 3.977582E-02 + 2.608275E-03 7.019165E-03 1.466644E-02 2.576297E-02 3.997637E-02 + 2.649960E-03 7.101188E-03 1.479576E-02 2.593837E-02 4.019021E-02 + 2.702109E-03 7.203380E-03 1.495644E-02 2.615592E-02 4.045507E-02 + 2.831028E-03 7.454108E-03 1.534873E-02 2.668521E-02 4.109789E-02 + 3.150566E-03 8.064482E-03 1.629242E-02 2.794800E-02 4.262236E-02 + 3.682134E-03 9.049576E-03 1.778427E-02 2.991598E-02 4.497356E-02 + 4.335076E-03 1.021603E-02 1.950837E-02 3.215133E-02 4.761050E-02 + 5.088690E-03 1.151436E-02 2.138069E-02 3.453672E-02 5.038831E-02 + 5.950228E-03 1.294768E-02 2.339881E-02 3.706432E-02 5.329452E-02 + 6.899751E-03 1.447606E-02 2.550227E-02 3.965600E-02 5.623806E-02 + 7.977813E-03 1.615784E-02 2.776696E-02 4.240264E-02 5.932084E-02 + 9.191019E-03 1.799380E-02 3.018757E-02 4.529350E-02 6.252785E-02 + 1.052199E-02 1.995145E-02 3.271693E-02 4.826971E-02 6.579261E-02 + 1.199116E-02 2.205454E-02 3.538228E-02 5.136150E-02 6.914731E-02 + 1.362737E-02 2.433663E-02 3.822118E-02 5.460920E-02 7.263415E-02 + 1.539963E-02 2.674793E-02 4.116769E-02 5.793514E-02 7.616830E-02 + 1.722781E-02 2.917898E-02 4.408923E-02 6.119173E-02 7.959508E-02 + 1.856272E-02 3.092209E-02 4.615625E-02 6.347255E-02 8.197619E-02 + 1.851635E-02 3.086050E-02 4.608200E-02 6.338945E-02 8.188857E-02 + 1.753309E-02 2.957602E-02 4.455775E-02 6.170631E-02 8.013046E-02 + 1.623545E-02 2.786001E-02 4.250308E-02 5.942192E-02 7.773141E-02 + 1.483589E-02 2.597960E-02 4.022524E-02 5.686699E-02 7.502960E-02 + 1.349583E-02 2.414688E-02 3.797631E-02 5.431972E-02 7.231532E-02 + 1.223807E-02 2.239450E-02 3.579696E-02 5.182620E-02 6.963756E-02 + 1.106087E-02 2.072266E-02 3.368910E-02 4.938958E-02 6.700029E-02 + 9.994409E-03 1.917851E-02 3.171532E-02 4.708462E-02 6.448603E-02 + 9.054559E-03 1.779176E-02 2.991925E-02 4.496695E-02 6.215919E-02 + 8.227239E-03 1.654910E-02 2.828986E-02 4.302885E-02 6.001574E-02 + 7.480194E-03 1.540655E-02 2.677390E-02 4.121084E-02 5.799323E-02 + 6.802384E-03 1.435125E-02 2.535750E-02 3.949898E-02 5.607842E-02 + 6.164707E-03 1.333922E-02 2.398250E-02 3.782380E-02 5.419443E-02 + 5.565082E-03 1.236748E-02 2.264448E-02 3.617950E-02 5.233441E-02 + 5.032799E-03 1.148619E-02 2.141456E-02 3.465505E-02 5.060049E-02 + 4.586220E-03 1.073145E-02 2.034792E-02 3.332279E-02 4.907835E-02 + 4.256093E-03 1.016450E-02 1.953961E-02 3.230898E-02 4.791877E-02 + 4.000457E-03 9.719427E-03 1.890037E-02 3.150459E-02 4.699835E-02 + 3.765916E-03 9.304433E-03 1.829768E-02 3.074045E-02 4.611947E-02 + 3.536318E-03 8.890605E-03 1.768898E-02 2.996092E-02 4.521576E-02 + 3.319778E-03 8.493284E-03 1.709712E-02 2.919588E-02 4.432205E-02 + 3.149672E-03 8.176813E-03 1.662136E-02 2.857760E-02 4.359734E-02 + 3.081151E-03 8.049857E-03 1.643302E-02 2.833665E-02 4.332108E-02 + 3.078173E-03 8.047528E-03 1.643447E-02 2.834646E-02 4.334337E-02 + 3.089328E-03 8.071393E-03 1.647565E-02 2.840775E-02 4.342548E-02 + 3.276780E-03 8.429201E-03 1.702791E-02 2.914611E-02 4.431728E-02 + 4.248960E-03 1.020719E-02 1.968972E-02 3.262244E-02 4.843616E-02 + 5.938424E-03 1.309178E-02 2.381287E-02 3.783356E-02 5.446274E-02 + 8.120986E-03 1.656176E-02 2.853691E-02 4.359983E-02 6.096031E-02 + 1.085957E-02 2.064569E-02 3.385428E-02 4.988392E-02 6.787081E-02 + 1.415230E-02 2.528389E-02 3.965460E-02 5.653841E-02 7.502482E-02 + 1.793405E-02 3.035121E-02 4.576869E-02 6.336713E-02 8.221634E-02 + 2.232207E-02 3.597675E-02 5.234123E-02 7.053104E-02 8.961815E-02 + 2.711984E-02 4.189205E-02 5.905519E-02 7.768883E-02 9.688403E-02 + 3.024211E-02 4.563539E-02 6.321533E-02 8.205211E-02 1.012545E-01 + +Band: 9, gas: 12, k-terms: 6 + 8.727508E+03 8.354167E+03 7.820359E+03 7.218727E+03 6.604523E+03 + 8.723199E+03 8.347101E+03 7.812069E+03 7.210125E+03 6.596121E+03 + 8.718617E+03 8.339808E+03 7.803595E+03 7.201377E+03 6.587604E+03 + 8.713661E+03 8.332193E+03 7.794852E+03 7.192405E+03 6.578903E+03 + 8.708206E+03 8.324048E+03 7.785600E+03 7.182963E+03 6.569777E+03 + 8.702388E+03 8.315698E+03 7.776247E+03 7.173495E+03 6.560674E+03 + 8.695960E+03 8.306816E+03 7.766445E+03 7.163651E+03 6.551259E+03 + 8.688622E+03 8.296946E+03 7.755670E+03 7.152895E+03 6.541018E+03 + 8.679563E+03 8.284799E+03 7.742426E+03 7.139680E+03 6.528428E+03 + 8.662549E+03 8.259963E+03 7.714374E+03 7.111109E+03 6.500837E+03 + 8.626878E+03 8.206243E+03 7.652892E+03 7.047977E+03 6.439517E+03 + 8.570411E+03 8.124561E+03 7.560597E+03 6.953750E+03 6.348249E+03 + 8.501911E+03 8.031499E+03 7.457807E+03 6.849977E+03 6.248387E+03 + 8.424094E+03 7.931628E+03 7.349918E+03 6.742306E+03 6.145494E+03 + 8.337115E+03 7.825294E+03 7.237399E+03 6.631223E+03 6.040060E+03 + 8.243323E+03 7.715401E+03 7.123352E+03 6.519821E+03 5.935041E+03 + 8.140035E+03 7.598537E+03 7.004095E+03 6.404443E+03 5.826924E+03 + 8.027366E+03 7.474985E+03 6.879978E+03 6.285459E+03 5.716100E+03 + 7.907073E+03 7.346743E+03 6.753065E+03 6.164900E+03 5.604480E+03 + 7.777891E+03 7.212391E+03 6.621879E+03 6.041362E+03 5.490735E+03 + 7.638250E+03 7.070268E+03 6.484813E+03 5.913304E+03 5.373468E+03 + 7.490145E+03 6.922608E+03 6.344112E+03 5.782914E+03 5.254725E+03 + 7.337551E+03 6.773521E+03 6.203852E+03 5.654058E+03 5.138094E+03 + 7.206872E+03 6.650191E+03 6.090603E+03 5.551883E+03 5.046909E+03 + 7.135982E+03 6.591468E+03 6.042311E+03 5.512335E+03 5.014600E+03 + 7.095592E+03 6.567932E+03 6.030775E+03 5.509147E+03 5.017126E+03 + 7.050286E+03 6.544272E+03 6.022239E+03 5.510893E+03 5.025701E+03 + 6.984883E+03 6.505941E+03 6.003178E+03 5.505248E+03 5.029222E+03 + 6.886040E+03 6.439920E+03 5.961332E+03 5.480937E+03 5.017483E+03 + 6.746879E+03 6.339869E+03 5.890963E+03 5.432877E+03 4.986037E+03 + 6.561789E+03 6.200602E+03 5.787398E+03 5.356934E+03 4.931277E+03 + 6.324813E+03 6.015803E+03 5.644420E+03 5.247208E+03 4.847754E+03 + 6.032833E+03 5.781287E+03 5.457398E+03 5.098999E+03 4.730929E+03 + 5.687123E+03 5.496643E+03 5.224938E+03 4.910380E+03 4.578640E+03 + 5.293306E+03 5.165218E+03 4.948857E+03 4.682155E+03 4.391042E+03 + 4.860885E+03 4.793126E+03 4.632840E+03 4.416309E+03 4.168954E+03 + 4.403834E+03 4.390897E+03 4.284633E+03 4.118424E+03 3.916319E+03 + 3.939372E+03 3.972056E+03 3.914479E+03 3.796016E+03 3.638523E+03 + 3.487192E+03 3.552930E+03 3.535307E+03 3.458976E+03 3.342865E+03 + 3.066205E+03 3.151080E+03 3.162510E+03 3.120263E+03 3.039895E+03 + 2.691996E+03 2.782622E+03 2.811449E+03 2.793748E+03 2.741667E+03 + 2.372070E+03 2.458301E+03 2.494576E+03 2.492410E+03 2.460882E+03 + 2.108839E+03 2.184488E+03 2.219867E+03 2.225648E+03 2.207582E+03 + 1.899927E+03 1.960109E+03 1.991334E+03 1.998961E+03 1.988191E+03 + 1.745755E+03 1.787706E+03 1.809048E+03 1.814416E+03 1.806234E+03 + 1.642123E+03 1.664086E+03 1.672685E+03 1.671354E+03 1.662007E+03 + 1.584344E+03 1.585510E+03 1.578912E+03 1.567799E+03 1.552895E+03 + 1.571143E+03 1.551946E+03 1.528676E+03 1.505122E+03 1.482354E+03 + 1.598660E+03 1.557387E+03 1.516329E+03 1.479828E+03 1.447264E+03 + 1.656233E+03 1.594964E+03 1.535872E+03 1.485202E+03 1.441559E+03 + 1.729241E+03 1.648970E+03 1.573596E+03 1.509491E+03 1.455257E+03 + 1.810942E+03 1.715118E+03 1.626099E+03 1.550585E+03 1.485723E+03 + 1.901439E+03 1.791806E+03 1.693276E+03 1.606388E+03 1.533855E+03 + 1.996884E+03 1.877221E+03 1.768956E+03 1.674642E+03 1.594059E+03 + 2.088163E+03 1.967077E+03 1.852186E+03 1.750841E+03 1.662574E+03 + 2.178033E+03 2.056691E+03 1.939354E+03 1.832731E+03 1.738413E+03 + 2.256305E+03 2.136591E+03 2.019387E+03 1.912013E+03 1.813935E+03 + 2.316536E+03 2.207085E+03 2.092545E+03 1.985028E+03 1.886093E+03 + 2.353528E+03 2.252893E+03 2.146481E+03 2.039952E+03 1.940790E+03 + 2.793342E+05 2.694900E+05 2.537593E+05 2.351585E+05 2.155777E+05 + 2.792340E+05 2.692897E+05 2.535088E+05 2.348887E+05 2.153072E+05 + 2.791261E+05 2.690827E+05 2.532529E+05 2.346143E+05 2.150331E+05 + 2.790078E+05 2.688663E+05 2.529886E+05 2.343330E+05 2.147531E+05 + 2.788763E+05 2.686348E+05 2.527090E+05 2.340369E+05 2.144596E+05 + 2.787342E+05 2.683971E+05 2.524265E+05 2.337403E+05 2.141669E+05 + 2.785753E+05 2.681439E+05 2.521303E+05 2.334321E+05 2.138644E+05 + 2.783925E+05 2.678623E+05 2.518050E+05 2.330955E+05 2.135355E+05 + 2.781658E+05 2.675153E+05 2.514046E+05 2.326816E+05 2.131311E+05 + 2.777445E+05 2.668029E+05 2.505525E+05 2.317828E+05 2.122411E+05 + 2.768531E+05 2.652513E+05 2.486755E+05 2.297886E+05 2.102566E+05 + 2.753985E+05 2.628692E+05 2.458420E+05 2.268003E+05 2.072938E+05 + 2.735750E+05 2.601265E+05 2.426674E+05 2.234955E+05 2.040417E+05 + 2.714465E+05 2.571536E+05 2.393161E+05 2.200529E+05 2.006801E+05 + 2.690144E+05 2.539599E+05 2.358014E+05 2.164872E+05 1.972244E+05 + 2.663427E+05 2.506323E+05 2.322200E+05 2.128982E+05 1.937721E+05 + 2.633559E+05 2.470665E+05 2.284560E+05 2.091668E+05 1.902073E+05 + 2.600544E+05 2.432694E+05 2.245191E+05 2.053049E+05 1.865421E+05 + 2.564878E+05 2.393012E+05 2.204746E+05 2.013776E+05 1.828398E+05 + 2.526169E+05 2.351170E+05 2.162757E+05 1.973387E+05 1.790561E+05 + 2.483920E+05 2.306635E+05 2.118689E+05 1.931365E+05 1.751433E+05 + 2.438715E+05 2.260089E+05 2.073258E+05 1.888424E+05 1.711696E+05 + 2.391775E+05 2.212848E+05 2.027790E+05 1.845852E+05 1.672561E+05 + 2.351437E+05 2.173717E+05 1.991057E+05 1.812080E+05 1.641944E+05 + 2.329881E+05 2.155457E+05 1.975729E+05 1.799275E+05 1.631267E+05 + 2.318091E+05 2.148736E+05 1.972658E+05 1.798759E+05 1.632478E+05 + 2.304939E+05 2.142178E+05 1.970758E+05 1.800047E+05 1.635851E+05 + 2.285629E+05 2.131094E+05 1.965597E+05 1.799036E+05 1.637649E+05 + 2.255888E+05 2.111255E+05 1.953134E+05 1.791962E+05 1.634421E+05 + 2.213413E+05 2.080545E+05 1.931460E+05 1.777117E+05 1.624659E+05 + 2.156193E+05 2.037154E+05 1.898962E+05 1.753079E+05 1.607120E+05 + 2.081946E+05 1.978786E+05 1.853425E+05 1.717770E+05 1.579887E+05 + 1.989124E+05 1.903698E+05 1.793050E+05 1.669425E+05 1.541284E+05 + 1.877441E+05 1.811240E+05 1.716996E+05 1.607121E+05 1.490369E+05 + 1.747935E+05 1.701889E+05 1.625388E+05 1.530762E+05 1.426917E+05 + 1.602891E+05 1.576958E+05 1.518870E+05 1.440547E+05 1.350832E+05 + 1.446180E+05 1.439243E+05 1.399421E+05 1.337843E+05 1.263036E+05 + 1.282967E+05 1.292634E+05 1.269869E+05 1.224642E+05 1.164878E+05 + 1.119568E+05 1.142170E+05 1.134057E+05 1.103762E+05 1.058342E+05 + 9.624306E+04 9.936274E+04 9.968956E+04 9.792245E+04 9.466332E+04 + 8.172553E+04 8.526436E+04 8.635852E+04 8.556051E+04 8.336406E+04 + 6.870393E+04 7.232111E+04 7.385944E+04 7.374670E+04 7.237692E+04 + 5.734582E+04 6.079730E+04 6.249124E+04 6.282603E+04 6.206539E+04 + 4.754347E+04 5.072470E+04 5.246518E+04 5.300368E+04 5.266504E+04 + 3.924372E+04 4.208910E+04 4.375093E+04 4.443303E+04 4.434646E+04 + 3.232091E+04 3.480627E+04 3.631967E+04 3.702479E+04 3.710434E+04 + 2.668940E+04 2.881899E+04 3.014786E+04 3.081145E+04 3.093730E+04 + 2.213153E+04 2.390409E+04 2.503475E+04 2.561245E+04 2.576277E+04 + 1.837935E+04 1.984202E+04 2.079826E+04 2.130905E+04 2.145897E+04 + 1.538008E+04 1.655509E+04 1.733975E+04 1.775935E+04 1.788607E+04 + 1.312019E+04 1.400975E+04 1.458619E+04 1.488646E+04 1.495599E+04 + 1.130341E+04 1.194046E+04 1.234635E+04 1.253224E+04 1.254314E+04 + 9.756648E+03 1.019083E+04 1.046608E+04 1.056834E+04 1.054938E+04 + 8.450459E+03 8.741345E+03 8.912370E+03 8.960607E+03 8.909378E+03 + 7.344166E+03 7.522022E+03 7.621519E+03 7.628012E+03 7.561269E+03 + 6.427571E+03 6.514328E+03 6.552214E+03 6.531400E+03 6.456780E+03 + 5.662732E+03 5.683742E+03 5.678943E+03 5.634579E+03 5.553442E+03 + 5.051168E+03 5.016931E+03 4.972403E+03 4.909199E+03 4.822600E+03 + 4.678964E+03 4.609730E+03 4.537088E+03 4.462901E+03 4.372181E+03 + 1.894954E+03 3.507499E+03 5.487527E+03 7.648121E+03 9.800390E+03 + 1.913451E+03 3.531799E+03 5.515287E+03 7.676765E+03 9.827767E+03 + 1.932231E+03 3.556361E+03 5.543266E+03 7.705569E+03 9.855251E+03 + 1.951324E+03 3.581206E+03 5.571466E+03 7.734517E+03 9.882802E+03 + 1.971351E+03 3.607143E+03 5.600811E+03 7.764562E+03 9.911343E+03 + 1.991258E+03 3.632760E+03 5.629670E+03 7.794009E+03 9.939238E+03 + 2.011666E+03 3.658849E+03 5.658924E+03 7.823743E+03 9.967312E+03 + 2.033808E+03 3.687003E+03 5.690371E+03 7.855608E+03 9.997323E+03 + 2.061241E+03 3.721818E+03 5.729213E+03 7.894926E+03 1.003433E+04 + 2.124218E+03 3.802440E+03 5.819742E+03 7.987032E+03 1.012141E+04 + 2.270892E+03 3.989393E+03 6.029142E+03 8.199634E+03 1.032219E+04 + 2.500497E+03 4.276879E+03 6.347343E+03 8.519672E+03 1.062222E+04 + 2.765150E+03 4.600540E+03 6.699712E+03 8.869592E+03 1.094680E+04 + 3.051794E+03 4.942962E+03 7.066040E+03 9.228642E+03 1.127598E+04 + 3.359496E+03 5.302449E+03 7.443917E+03 9.594498E+03 1.160742E+04 + 3.678862E+03 5.667730E+03 7.821277E+03 9.955519E+03 1.193043E+04 + 4.020552E+03 6.050698E+03 8.210379E+03 1.032307E+04 1.225560E+04 + 4.383230E+03 6.449001E+03 8.608505E+03 1.069427E+04 1.258020E+04 + 4.759720E+03 6.854089E+03 9.007040E+03 1.106077E+04 1.289700E+04 + 5.153356E+03 7.269124E+03 9.409644E+03 1.142558E+04 1.320847E+04 + 5.568462E+03 7.698147E+03 9.819802E+03 1.179208E+04 1.351740E+04 + 5.994960E+03 8.130305E+03 1.022655E+04 1.215053E+04 1.381530E+04 + 6.414338E+03 8.547105E+03 1.061254E+04 1.248567E+04 1.408940E+04 + 6.719374E+03 8.843464E+03 1.088082E+04 1.271338E+04 1.427064E+04 + 6.749420E+03 8.864430E+03 1.089107E+04 1.271356E+04 1.426173E+04 + 6.595912E+03 8.701859E+03 1.072957E+04 1.256188E+04 1.412538E+04 + 6.374997E+03 8.469696E+03 1.050091E+04 1.234840E+04 1.393488E+04 + 6.123453E+03 8.204259E+03 1.023766E+04 1.210072E+04 1.371221E+04 + 5.871047E+03 7.934890E+03 9.967377E+03 1.184261E+04 1.347658E+04 + 5.619444E+03 7.663232E+03 9.691215E+03 1.157505E+04 1.322811E+04 + 5.364345E+03 7.384637E+03 9.404419E+03 1.129392E+04 1.296212E+04 + 5.109213E+03 7.102066E+03 9.109327E+03 1.100025E+04 1.267909E+04 + 4.855150E+03 6.815624E+03 8.805568E+03 1.069215E+04 1.237643E+04 + 4.596509E+03 6.517672E+03 8.484054E+03 1.035980E+04 1.204443E+04 + 4.323343E+03 6.195192E+03 8.129435E+03 9.987170E+03 1.166688E+04 + 4.033778E+03 5.843182E+03 7.733786E+03 9.564148E+03 1.123195E+04 + 3.723606E+03 5.453995E+03 7.286117E+03 9.077464E+03 1.072460E+04 + 3.400011E+03 5.033125E+03 6.788829E+03 8.526812E+03 1.014086E+04 + 3.082505E+03 4.601850E+03 6.261887E+03 7.928300E+03 9.493415E+03 + 2.787839E+03 4.181313E+03 5.727921E+03 7.303313E+03 8.801125E+03 + 2.533665E+03 3.796540E+03 5.216866E+03 6.683296E+03 8.094824E+03 + 2.313679E+03 3.445713E+03 4.732117E+03 6.076045E+03 7.385111E+03 + 2.118216E+03 3.122484E+03 4.272461E+03 5.485901E+03 6.681210E+03 + 1.946588E+03 2.830132E+03 3.846656E+03 4.927572E+03 6.002930E+03 + 1.801804E+03 2.575059E+03 3.465924E+03 4.417941E+03 5.372409E+03 + 1.689263E+03 2.365072E+03 3.141686E+03 3.972950E+03 4.810290E+03 + 1.614779E+03 2.207011E+03 2.882689E+03 3.604109E+03 4.331449E+03 + 1.567424E+03 2.086977E+03 2.673497E+03 3.296246E+03 3.922848E+03 + 1.536925E+03 1.992208E+03 2.499607E+03 3.034294E+03 3.570208E+03 + 1.538611E+03 1.939543E+03 2.378393E+03 2.835380E+03 3.289878E+03 + 1.612985E+03 1.971470E+03 2.352660E+03 2.740940E+03 3.120569E+03 + 1.711119E+03 2.029659E+03 2.357406E+03 2.682562E+03 2.993726E+03 + 1.797878E+03 2.076289E+03 2.353417E+03 2.620997E+03 2.871273E+03 + 1.870772E+03 2.110202E+03 2.340590E+03 2.556706E+03 2.753809E+03 + 1.927194E+03 2.129986E+03 2.318346E+03 2.489531E+03 2.641144E+03 + 1.966073E+03 2.135590E+03 2.287244E+03 2.420193E+03 2.533813E+03 + 1.991197E+03 2.131062E+03 2.251165E+03 2.352031E+03 2.434305E+03 + 2.002442E+03 2.116613E+03 2.210296E+03 2.284950E+03 2.342016E+03 + 1.997905E+03 2.096185E+03 2.173902E+03 2.232993E+03 2.275256E+03 + 1.394610E-03 3.625620E-03 8.350366E-03 1.671796E-02 2.983672E-02 + 1.560283E-03 3.928749E-03 8.808458E-03 1.741363E-02 3.072636E-02 + 1.757240E-03 4.270989E-03 9.354640E-03 1.820954E-02 3.173266E-02 + 1.968611E-03 4.669047E-03 1.001101E-02 1.911365E-02 3.296229E-02 + 2.249401E-03 5.130887E-03 1.068617E-02 2.006346E-02 3.431808E-02 + 2.535626E-03 5.648639E-03 1.148570E-02 2.118491E-02 3.578210E-02 + 2.893224E-03 6.246333E-03 1.241159E-02 2.249074E-02 3.750613E-02 + 3.305195E-03 6.975323E-03 1.353912E-02 2.391895E-02 3.945190E-02 + 3.799513E-03 7.772384E-03 1.476414E-02 2.564599E-02 4.173081E-02 + 4.462074E-03 8.874425E-03 1.635686E-02 2.802224E-02 4.467853E-02 + 5.413864E-03 1.046290E-02 1.886621E-02 3.148080E-02 4.904980E-02 + 6.763428E-03 1.271992E-02 2.228363E-02 3.627110E-02 5.500911E-02 + 8.503476E-03 1.552492E-02 2.646767E-02 4.201107E-02 6.208929E-02 + 1.070793E-02 1.898042E-02 3.157065E-02 4.879575E-02 7.030634E-02 + 1.350835E-02 2.314283E-02 3.759189E-02 5.642679E-02 7.968569E-02 + 1.686908E-02 2.824878E-02 4.463955E-02 6.524182E-02 9.031547E-02 + 2.108177E-02 3.435863E-02 5.303456E-02 7.536995E-02 1.024684E-01 + 2.636970E-02 4.169968E-02 6.262101E-02 8.743451E-02 1.162911E-01 + 3.275858E-02 5.047632E-02 7.375584E-02 1.011325E-01 1.317109E-01 + 4.060060E-02 6.089513E-02 8.670063E-02 1.169691E-01 1.496599E-01 + 4.989884E-02 7.311135E-02 1.020819E-01 1.349187E-01 1.700887E-01 + 6.114952E-02 8.762801E-02 1.204701E-01 1.561223E-01 1.932396E-01 + 7.455156E-02 1.048507E-01 1.408133E-01 1.799517E-01 2.200085E-01 + 8.876083E-02 1.232699E-01 1.624482E-01 2.046959E-01 2.475742E-01 + 1.008523E-01 1.388784E-01 1.811691E-01 2.267357E-01 2.731193E-01 + 1.118570E-01 1.529458E-01 1.990162E-01 2.475336E-01 2.977006E-01 + 1.230256E-01 1.672338E-01 2.167871E-01 2.692746E-01 3.230782E-01 + 1.339972E-01 1.819364E-01 2.359316E-01 2.928952E-01 3.513161E-01 + 1.457346E-01 1.985004E-01 2.572224E-01 3.193315E-01 3.836423E-01 + 1.580003E-01 2.161056E-01 2.809930E-01 3.494184E-01 4.204421E-01 + 1.716374E-01 2.346380E-01 3.063850E-01 3.828271E-01 4.613299E-01 + 1.864179E-01 2.559613E-01 3.342450E-01 4.200219E-01 5.085938E-01 + 2.047705E-01 2.796673E-01 3.664621E-01 4.619650E-01 5.613383E-01 + 2.226980E-01 3.062458E-01 4.026872E-01 5.077263E-01 6.185661E-01 + 2.417464E-01 3.348055E-01 4.417328E-01 5.600348E-01 6.811270E-01 + 2.618123E-01 3.658798E-01 4.834098E-01 6.124463E-01 7.473669E-01 + 2.826236E-01 3.964861E-01 5.280712E-01 6.697811E-01 8.182889E-01 + 3.040807E-01 4.263703E-01 5.737382E-01 7.302879E-01 8.945803E-01 + 3.280649E-01 4.606924E-01 6.201888E-01 7.934185E-01 9.752176E-01 + 3.580500E-01 4.997159E-01 6.697149E-01 8.582448E-01 1.057040E+00 + 3.953537E-01 5.482452E-01 7.321847E-01 9.343715E-01 1.149721E+00 + 4.396476E-01 6.062618E-01 8.042780E-01 1.024690E+00 1.252357E+00 + 4.903099E-01 6.716980E-01 8.844119E-01 1.118371E+00 1.365817E+00 + 5.433550E-01 7.424992E-01 9.710043E-01 1.222520E+00 1.484568E+00 + 6.033437E-01 8.182108E-01 1.062443E+00 1.330310E+00 1.606002E+00 + 6.666544E-01 9.008418E-01 1.156945E+00 1.423615E+00 1.702161E+00 + 7.358355E-01 9.667147E-01 1.224596E+00 1.502304E+00 1.789031E+00 + 7.762188E-01 1.019733E+00 1.284510E+00 1.570152E+00 1.867131E+00 + 8.081170E-01 1.058428E+00 1.334176E+00 1.629723E+00 1.937457E+00 + 8.447985E-01 1.105707E+00 1.393191E+00 1.698640E+00 2.015698E+00 + 9.294473E-01 1.207451E+00 1.508508E+00 1.824030E+00 2.141030E+00 + 1.047531E+00 1.342593E+00 1.651873E+00 1.963911E+00 2.300840E+00 + 1.175242E+00 1.478487E+00 1.783894E+00 2.130568E+00 2.491447E+00 + 1.303673E+00 1.604454E+00 1.950159E+00 2.317002E+00 2.686715E+00 + 1.423027E+00 1.761146E+00 2.129074E+00 2.507407E+00 2.882122E+00 + 1.563986E+00 1.927312E+00 2.309870E+00 2.695921E+00 3.072081E+00 + 1.720639E+00 2.100977E+00 2.494141E+00 2.884120E+00 3.258888E+00 + 1.880578E+00 2.273930E+00 2.673895E+00 3.064439E+00 3.435070E+00 + 1.982246E+00 2.381929E+00 2.784468E+00 3.175041E+00 3.542828E+00 + 1.117052E+01 1.635985E+01 2.390318E+01 3.277722E+01 4.254756E+01 + 1.136356E+01 1.655502E+01 2.407275E+01 3.296288E+01 4.272334E+01 + 1.161498E+01 1.676342E+01 2.429282E+01 3.317189E+01 4.290705E+01 + 1.181584E+01 1.701021E+01 2.454645E+01 3.341126E+01 4.317825E+01 + 1.212055E+01 1.730483E+01 2.482309E+01 3.362865E+01 4.343993E+01 + 1.237803E+01 1.759061E+01 2.510421E+01 3.388958E+01 4.368459E+01 + 1.269767E+01 1.797830E+01 2.542865E+01 3.421323E+01 4.398497E+01 + 1.306768E+01 1.841779E+01 2.583892E+01 3.454596E+01 4.433113E+01 + 1.350578E+01 1.885486E+01 2.625939E+01 3.495067E+01 4.476866E+01 + 1.413551E+01 1.952062E+01 2.691406E+01 3.573213E+01 4.547961E+01 + 1.498492E+01 2.060126E+01 2.819615E+01 3.700629E+01 4.674583E+01 + 1.618379E+01 2.210109E+01 2.998706E+01 3.888847E+01 4.853383E+01 + 1.758222E+01 2.387700E+01 3.190826E+01 4.097785E+01 5.070951E+01 + 1.913802E+01 2.589977E+01 3.408206E+01 4.323106E+01 5.295050E+01 + 2.099890E+01 2.795425E+01 3.639489E+01 4.554091E+01 5.540086E+01 + 2.302831E+01 3.027112E+01 3.886313E+01 4.807642E+01 5.797846E+01 + 2.529737E+01 3.287668E+01 4.172777E+01 5.069726E+01 6.071631E+01 + 2.790370E+01 3.566491E+01 4.457623E+01 5.380578E+01 6.362812E+01 + 3.070488E+01 3.865264E+01 4.758137E+01 5.701613E+01 6.667103E+01 + 3.381088E+01 4.189436E+01 5.086699E+01 6.049698E+01 7.008277E+01 + 3.717639E+01 4.556952E+01 5.458204E+01 6.416329E+01 7.355132E+01 + 4.100418E+01 4.941220E+01 5.882548E+01 6.822924E+01 7.730424E+01 + 4.512493E+01 5.368780E+01 6.304383E+01 7.249491E+01 8.136906E+01 + 4.931663E+01 5.802598E+01 6.727265E+01 7.658986E+01 8.521535E+01 + 5.276590E+01 6.150351E+01 7.066449E+01 7.981100E+01 8.843450E+01 + 5.620500E+01 6.469940E+01 7.386521E+01 8.267854E+01 9.134698E+01 + 5.999149E+01 6.837924E+01 7.722356E+01 8.592158E+01 9.436403E+01 + 6.425254E+01 7.244720E+01 8.122136E+01 8.975171E+01 9.805237E+01 + 6.927020E+01 7.742770E+01 8.595978E+01 9.437154E+01 1.027424E+02 + 7.497223E+01 8.318194E+01 9.180148E+01 1.000182E+02 1.084886E+02 + 8.196838E+01 8.992055E+01 9.845379E+01 1.067198E+02 1.152534E+02 + 9.028219E+01 9.814022E+01 1.060149E+02 1.148077E+02 1.236686E+02 + 1.007642E+02 1.073423E+02 1.154010E+02 1.243184E+02 1.337147E+02 + 1.111751E+02 1.181080E+02 1.263584E+02 1.353739E+02 1.451820E+02 + 1.229761E+02 1.302399E+02 1.389924E+02 1.487334E+02 1.585649E+02 + 1.359014E+02 1.443717E+02 1.532368E+02 1.631369E+02 1.735286E+02 + 1.501656E+02 1.595708E+02 1.694718E+02 1.796487E+02 1.905393E+02 + 1.649641E+02 1.757950E+02 1.873596E+02 1.982401E+02 2.099380E+02 + 1.801880E+02 1.938464E+02 2.069095E+02 2.189244E+02 2.318304E+02 + 1.969044E+02 2.131963E+02 2.280467E+02 2.420662E+02 2.566693E+02 + 2.157287E+02 2.358610E+02 2.537394E+02 2.692863E+02 2.853616E+02 + 2.364414E+02 2.618967E+02 2.831707E+02 3.018213E+02 3.186858E+02 + 2.604185E+02 2.922609E+02 3.175204E+02 3.384375E+02 3.579645E+02 + 2.874846E+02 3.287637E+02 3.590936E+02 3.836069E+02 4.048356E+02 + 3.265600E+02 3.764301E+02 4.118869E+02 4.398543E+02 4.622078E+02 + 3.856221E+02 4.462444E+02 4.821530E+02 5.036565E+02 5.231867E+02 + 4.877348E+02 5.226707E+02 5.495965E+02 5.711039E+02 5.895881E+02 + 5.651586E+02 5.999370E+02 6.219214E+02 6.422697E+02 6.609289E+02 + 6.424079E+02 6.713379E+02 6.964264E+02 7.192398E+02 7.398163E+02 + 7.161284E+02 7.496989E+02 7.799839E+02 8.051042E+02 8.270914E+02 + 8.048366E+02 8.457424E+02 8.766158E+02 9.022405E+02 9.209413E+02 + 9.120859E+02 9.527865E+02 9.783835E+02 9.956466E+02 1.023636E+03 + 1.025055E+03 1.054224E+03 1.066589E+03 1.108730E+03 1.142951E+03 + 1.121791E+03 1.131838E+03 1.186087E+03 1.230709E+03 1.261156E+03 + 1.184265E+03 1.250172E+03 1.308131E+03 1.348764E+03 1.374690E+03 + 1.291183E+03 1.368015E+03 1.422596E+03 1.458708E+03 1.479710E+03 + 1.402224E+03 1.475792E+03 1.526210E+03 1.557570E+03 1.573348E+03 + 1.499338E+03 1.569224E+03 1.615765E+03 1.642369E+03 1.653187E+03 + 1.558977E+03 1.626831E+03 1.671255E+03 1.695855E+03 1.704107E+03 + 6.222420E+02 7.340145E+02 9.094838E+02 1.122860E+03 1.385558E+03 + 6.239274E+02 7.353576E+02 9.112643E+02 1.125299E+03 1.389548E+03 + 6.284721E+02 7.366723E+02 9.140031E+02 1.127639E+03 1.393123E+03 + 6.296483E+02 7.388028E+02 9.155594E+02 1.130673E+03 1.398579E+03 + 6.316850E+02 7.421866E+02 9.210334E+02 1.133673E+03 1.402841E+03 + 6.338712E+02 7.438468E+02 9.236222E+02 1.136425E+03 1.406096E+03 + 6.352103E+02 7.506509E+02 9.264255E+02 1.140324E+03 1.409346E+03 + 6.390273E+02 7.554698E+02 9.290182E+02 1.144758E+03 1.413885E+03 + 6.441964E+02 7.599569E+02 9.323550E+02 1.148436E+03 1.420548E+03 + 6.544212E+02 7.668179E+02 9.412732E+02 1.162528E+03 1.436299E+03 + 6.661809E+02 7.842120E+02 9.640587E+02 1.187064E+03 1.466752E+03 + 6.871379E+02 8.086842E+02 1.000936E+03 1.228667E+03 1.510232E+03 + 7.105158E+02 8.417359E+02 1.035702E+03 1.274439E+03 1.572944E+03 + 7.333685E+02 8.810469E+02 1.075217E+03 1.320699E+03 1.628864E+03 + 7.642771E+02 9.147580E+02 1.115820E+03 1.368882E+03 1.693168E+03 + 8.007317E+02 9.520746E+02 1.157788E+03 1.425306E+03 1.759909E+03 + 8.388429E+02 9.992667E+02 1.213990E+03 1.479146E+03 1.827912E+03 + 8.822522E+02 1.046253E+03 1.265231E+03 1.548654E+03 1.899892E+03 + 9.266105E+02 1.093959E+03 1.317735E+03 1.618031E+03 1.978943E+03 + 9.728418E+02 1.145190E+03 1.377698E+03 1.692651E+03 2.068841E+03 + 1.026781E+03 1.215642E+03 1.449320E+03 1.774940E+03 2.146513E+03 + 1.092656E+03 1.281098E+03 1.531799E+03 1.859553E+03 2.235280E+03 + 1.158751E+03 1.351212E+03 1.613018E+03 1.950923E+03 2.318263E+03 + 1.230353E+03 1.419237E+03 1.689152E+03 2.033908E+03 2.390360E+03 + 1.282214E+03 1.465322E+03 1.737287E+03 2.071518E+03 2.425706E+03 + 1.333322E+03 1.498651E+03 1.762311E+03 2.082381E+03 2.432095E+03 + 1.386671E+03 1.551883E+03 1.793414E+03 2.102121E+03 2.435181E+03 + 1.460004E+03 1.616342E+03 1.846644E+03 2.135001E+03 2.450411E+03 + 1.556826E+03 1.702158E+03 1.918388E+03 2.185566E+03 2.486705E+03 + 1.681569E+03 1.816797E+03 2.029380E+03 2.259843E+03 2.543399E+03 + 1.858582E+03 1.985688E+03 2.166243E+03 2.360221E+03 2.619001E+03 + 2.110545E+03 2.218968E+03 2.324847E+03 2.503261E+03 2.721553E+03 + 2.457904E+03 2.470402E+03 2.542992E+03 2.668525E+03 2.862748E+03 + 2.790416E+03 2.764183E+03 2.783445E+03 2.880822E+03 3.045663E+03 + 3.190823E+03 3.089107E+03 3.074701E+03 3.141723E+03 3.280663E+03 + 3.620939E+03 3.480416E+03 3.431974E+03 3.466710E+03 3.561633E+03 + 4.149959E+03 3.948715E+03 3.865099E+03 3.857515E+03 3.912287E+03 + 4.794750E+03 4.518994E+03 4.364789E+03 4.311886E+03 4.331575E+03 + 5.532866E+03 5.182941E+03 4.958848E+03 4.820597E+03 4.810801E+03 + 6.353912E+03 5.919145E+03 5.643998E+03 5.491884E+03 5.430639E+03 + 7.371172E+03 6.853893E+03 6.481804E+03 6.256903E+03 6.119775E+03 + 8.435533E+03 7.856180E+03 7.397751E+03 7.083755E+03 6.870998E+03 + 9.495622E+03 8.885415E+03 8.354192E+03 7.943884E+03 7.660385E+03 + 1.049879E+04 9.877910E+03 9.306061E+03 8.823565E+03 8.455432E+03 + 1.136027E+04 1.076828E+04 1.018666E+04 9.662597E+03 9.209819E+03 + 1.197130E+04 1.144673E+04 1.090145E+04 1.036418E+04 9.878918E+03 + 1.227023E+04 1.183867E+04 1.136606E+04 1.086286E+04 1.036433E+04 + 1.225566E+04 1.193208E+04 1.154233E+04 1.110196E+04 1.063759E+04 + 1.194712E+04 1.173504E+04 1.143330E+04 1.107139E+04 1.066191E+04 + 1.139132E+04 1.126746E+04 1.105458E+04 1.076789E+04 1.042415E+04 + 1.066159E+04 1.058858E+04 1.043297E+04 1.020310E+04 9.916400E+03 + 9.842066E+03 9.792350E+03 9.668633E+03 9.480959E+03 9.239151E+03 + 8.984277E+03 8.941806E+03 8.835956E+03 8.680015E+03 8.476325E+03 + 8.129237E+03 8.083936E+03 7.984362E+03 7.848483E+03 7.676489E+03 + 7.312769E+03 7.258630E+03 7.160782E+03 7.034444E+03 6.884415E+03 + 6.562544E+03 6.497047E+03 6.398568E+03 6.275591E+03 6.141199E+03 + 5.896888E+03 5.817686E+03 5.717040E+03 5.596912E+03 5.469556E+03 + 5.329441E+03 5.235428E+03 5.130193E+03 5.012663E+03 4.886950E+03 + 4.972653E+03 4.864766E+03 4.754423E+03 4.637354E+03 4.513527E+03 +*END diff --git a/components/socrates_couple/data/spectra/ga7/sp_sw_ga7_k b/components/socrates_couple/data/spectra/ga7/sp_sw_ga7_k new file mode 100644 index 00000000..b3568844 --- /dev/null +++ b/components/socrates_couple/data/spectra/ga7/sp_sw_ga7_k @@ -0,0 +1,4579 @@ +*BLOCK: k-table + +Lookup table: 59 pressures, 5 temperatures. + 9.657700E-01 1.643400E+02 1.893400E+02 2.143400E+02 2.393400E+02 2.643400E+02 + 1.179600E+00 1.646600E+02 1.896600E+02 2.146600E+02 2.396600E+02 2.646600E+02 + 1.440800E+00 1.649800E+02 1.899800E+02 2.149800E+02 2.399800E+02 2.649800E+02 + 1.759800E+00 1.653000E+02 1.903000E+02 2.153000E+02 2.403000E+02 2.653000E+02 + 2.149400E+00 1.656300E+02 1.906300E+02 2.156300E+02 2.406300E+02 2.656300E+02 + 2.625200E+00 1.659500E+02 1.909500E+02 2.159500E+02 2.409500E+02 2.659500E+02 + 3.206500E+00 1.662700E+02 1.912700E+02 2.162700E+02 2.412700E+02 2.662700E+02 + 3.916400E+00 1.666100E+02 1.916100E+02 2.166100E+02 2.416100E+02 2.666100E+02 + 4.783500E+00 1.670300E+02 1.920300E+02 2.170300E+02 2.420300E+02 2.670300E+02 + 5.842600E+00 1.680500E+02 1.930500E+02 2.180500E+02 2.430500E+02 2.680500E+02 + 7.136100E+00 1.704500E+02 1.954500E+02 2.204500E+02 2.454500E+02 2.704500E+02 + 8.716100E+00 1.740900E+02 1.990900E+02 2.240900E+02 2.490900E+02 2.740900E+02 + 1.064600E+01 1.780900E+02 2.030900E+02 2.280900E+02 2.530900E+02 2.780900E+02 + 1.300300E+01 1.822200E+02 2.072200E+02 2.322200E+02 2.572200E+02 2.822200E+02 + 1.588200E+01 1.864600E+02 2.114600E+02 2.364600E+02 2.614600E+02 2.864600E+02 + 1.939800E+01 1.906800E+02 2.156800E+02 2.406800E+02 2.656800E+02 2.906800E+02 + 2.369300E+01 1.950300E+02 2.200300E+02 2.450300E+02 2.700300E+02 2.950300E+02 + 2.893800E+01 1.994900E+02 2.244900E+02 2.494900E+02 2.744900E+02 2.994900E+02 + 3.534600E+01 2.039700E+02 2.289700E+02 2.539700E+02 2.789700E+02 3.039700E+02 + 4.317100E+01 2.085200E+02 2.335200E+02 2.585200E+02 2.835200E+02 3.085200E+02 + 5.272900E+01 2.132000E+02 2.382000E+02 2.632000E+02 2.882000E+02 3.132000E+02 + 6.440400E+01 2.179000E+02 2.429000E+02 2.679000E+02 2.929000E+02 3.179000E+02 + 7.866300E+01 2.224200E+02 2.474200E+02 2.724200E+02 2.974200E+02 3.224200E+02 + 9.607900E+01 2.255200E+02 2.505200E+02 2.755200E+02 3.005200E+02 3.255200E+02 + 1.173500E+02 2.253200E+02 2.503200E+02 2.753200E+02 3.003200E+02 3.253200E+02 + 1.433300E+02 2.228800E+02 2.478800E+02 2.728800E+02 2.978800E+02 3.228800E+02 + 1.750700E+02 2.195600E+02 2.445600E+02 2.695600E+02 2.945600E+02 3.195600E+02 + 2.138300E+02 2.158000E+02 2.408000E+02 2.658000E+02 2.908000E+02 3.158000E+02 + 2.611700E+02 2.119800E+02 2.369800E+02 2.619800E+02 2.869800E+02 3.119800E+02 + 3.189900E+02 2.081600E+02 2.331600E+02 2.581600E+02 2.831600E+02 3.081600E+02 + 3.896200E+02 2.043400E+02 2.293400E+02 2.543400E+02 2.793400E+02 3.043400E+02 + 4.758800E+02 2.006300E+02 2.256300E+02 2.506300E+02 2.756300E+02 3.006300E+02 + 5.812400E+02 1.971200E+02 2.221200E+02 2.471200E+02 2.721200E+02 2.971200E+02 + 7.099300E+02 1.938100E+02 2.188100E+02 2.438100E+02 2.688100E+02 2.938100E+02 + 8.671100E+02 1.906200E+02 2.156200E+02 2.406200E+02 2.656200E+02 2.906200E+02 + 1.059100E+03 1.875400E+02 2.125400E+02 2.375400E+02 2.625400E+02 2.875400E+02 + 1.293600E+03 1.844700E+02 2.094700E+02 2.344700E+02 2.594700E+02 2.844700E+02 + 1.580000E+03 1.814100E+02 2.064100E+02 2.314100E+02 2.564100E+02 2.814100E+02 + 1.929800E+03 1.785200E+02 2.035200E+02 2.285200E+02 2.535200E+02 2.785200E+02 + 2.357100E+03 1.759400E+02 2.009400E+02 2.259400E+02 2.509400E+02 2.759400E+02 + 2.878900E+03 1.739100E+02 1.989100E+02 2.239100E+02 2.489100E+02 2.739100E+02 + 3.516300E+03 1.722600E+02 1.972600E+02 2.222600E+02 2.472600E+02 2.722600E+02 + 4.294800E+03 1.707000E+02 1.957000E+02 2.207000E+02 2.457000E+02 2.707000E+02 + 5.245700E+03 1.691300E+02 1.941300E+02 2.191300E+02 2.441300E+02 2.691300E+02 + 6.407200E+03 1.676000E+02 1.926000E+02 2.176000E+02 2.426000E+02 2.676000E+02 + 7.825700E+03 1.663500E+02 1.913500E+02 2.163500E+02 2.413500E+02 2.663500E+02 + 9.558400E+03 1.658100E+02 1.908100E+02 2.158100E+02 2.408100E+02 2.658100E+02 + 1.167500E+04 1.657500E+02 1.907500E+02 2.157500E+02 2.407500E+02 2.657500E+02 + 1.425900E+04 1.658000E+02 1.908000E+02 2.158000E+02 2.408000E+02 2.658000E+02 + 1.741600E+04 1.671000E+02 1.921000E+02 2.171000E+02 2.421000E+02 2.671000E+02 + 2.127300E+04 1.732100E+02 1.982100E+02 2.232100E+02 2.482100E+02 2.732100E+02 + 2.598200E+04 1.818700E+02 2.068700E+02 2.318700E+02 2.568700E+02 2.818700E+02 + 3.173500E+04 1.909000E+02 2.159000E+02 2.409000E+02 2.659000E+02 2.909000E+02 + 3.876100E+04 2.002500E+02 2.252500E+02 2.502500E+02 2.752500E+02 3.002500E+02 + 4.734300E+04 2.097400E+02 2.347400E+02 2.597400E+02 2.847400E+02 3.097400E+02 + 5.782500E+04 2.191600E+02 2.441600E+02 2.691600E+02 2.941600E+02 3.191600E+02 + 7.062700E+04 2.288000E+02 2.538000E+02 2.788000E+02 3.038000E+02 3.288000E+02 + 8.626400E+04 2.382700E+02 2.632700E+02 2.882700E+02 3.132700E+02 3.382700E+02 + 1.004850E+05 2.440000E+02 2.690000E+02 2.940000E+02 3.190000E+02 3.440000E+02 + +Band: 1, gas: 6, k-terms: 1 + 7.090103E-07 7.908414E-07 8.669746E-07 9.377574E-07 1.003610E-06 + 7.100942E-07 7.918513E-07 8.679138E-07 9.386301E-07 1.004423E-06 + 7.111773E-07 7.928603E-07 8.688522E-07 9.395020E-07 1.005237E-06 + 7.122593E-07 7.938683E-07 8.697896E-07 9.403730E-07 1.006049E-06 + 7.133743E-07 7.949068E-07 8.707555E-07 9.412705E-07 1.006886E-06 + 7.144544E-07 7.959129E-07 8.716911E-07 9.421399E-07 1.007698E-06 + 7.155337E-07 7.969181E-07 8.726260E-07 9.430085E-07 1.008508E-06 + 7.166794E-07 7.979850E-07 8.736183E-07 9.439305E-07 1.009368E-06 + 7.180931E-07 7.993016E-07 8.748427E-07 9.450682E-07 1.010430E-06 + 7.215198E-07 8.024922E-07 8.778101E-07 9.478254E-07 1.013003E-06 + 7.295447E-07 8.099622E-07 8.847574E-07 9.542810E-07 1.019030E-06 + 7.416142E-07 8.211926E-07 8.952014E-07 9.639882E-07 1.028098E-06 + 7.547354E-07 8.333973E-07 9.065499E-07 9.745415E-07 1.037960E-06 + 7.681268E-07 8.458510E-07 9.181270E-07 9.853162E-07 1.048031E-06 + 7.817100E-07 8.584826E-07 9.298664E-07 9.962524E-07 1.058252E-06 + 7.950641E-07 8.709017E-07 9.414064E-07 1.007013E-06 1.068308E-06 + 8.086587E-07 8.835451E-07 9.531545E-07 1.017979E-06 1.078552E-06 + 8.224194E-07 8.963423E-07 9.650488E-07 1.029089E-06 1.088925E-06 + 8.360633E-07 9.090286E-07 9.768476E-07 1.040115E-06 1.099214E-06 + 8.497403E-07 9.217419E-07 9.886827E-07 1.051177E-06 1.109532E-06 + 8.636216E-07 9.346419E-07 1.000704E-06 1.062413E-06 1.120008E-06 + 8.773742E-07 9.474204E-07 1.012625E-06 1.073552E-06 1.130391E-06 + 8.904237E-07 9.595470E-07 1.023949E-06 1.084127E-06 1.140250E-06 + 8.992739E-07 9.677745E-07 1.031636E-06 1.091302E-06 1.146941E-06 + 8.987054E-07 9.672459E-07 1.031142E-06 1.090841E-06 1.146511E-06 + 8.917420E-07 9.607724E-07 1.025093E-06 1.085195E-06 1.141246E-06 + 8.821868E-07 9.518922E-07 1.016800E-06 1.077451E-06 1.134026E-06 + 8.712526E-07 9.417324E-07 1.007317E-06 1.068593E-06 1.125768E-06 + 8.600211E-07 9.312961E-07 9.975850E-07 1.059498E-06 1.117290E-06 + 8.486647E-07 9.207422E-07 9.877516E-07 1.050307E-06 1.108721E-06 + 8.371823E-07 9.100688E-07 9.778155E-07 1.041020E-06 1.100058E-06 + 8.259082E-07 8.995865E-07 9.680651E-07 1.031907E-06 1.091556E-06 + 8.151294E-07 8.895629E-07 9.587470E-07 1.023201E-06 1.083429E-06 + 8.048634E-07 8.800153E-07 9.498745E-07 1.014916E-06 1.075691E-06 + 7.948753E-07 8.707262E-07 9.412433E-07 1.006861E-06 1.068166E-06 + 7.851432E-07 8.616754E-07 9.328333E-07 9.990180E-07 1.060837E-06 + 7.753556E-07 8.525733E-07 9.243748E-07 9.911353E-07 1.053470E-06 + 7.655129E-07 8.434202E-07 9.158676E-07 9.832126E-07 1.046064E-06 + 7.561370E-07 8.347009E-07 9.077619E-07 9.756690E-07 1.039014E-06 + 7.477012E-07 8.268549E-07 9.004668E-07 9.688837E-07 1.032672E-06 + 7.410202E-07 8.206400E-07 8.946876E-07 9.635105E-07 1.027651E-06 + 7.355616E-07 8.155614E-07 8.899647E-07 9.591204E-07 1.023550E-06 + 7.303776E-07 8.107374E-07 8.854783E-07 9.549509E-07 1.019656E-06 + 7.251376E-07 8.058602E-07 8.809424E-07 9.507359E-07 1.015720E-06 + 7.200092E-07 8.010857E-07 8.765020E-07 9.466099E-07 1.011869E-06 + 7.158034E-07 7.971692E-07 8.728595E-07 9.432255E-07 1.008710E-06 + 7.139820E-07 7.954728E-07 8.712819E-07 9.417596E-07 1.007343E-06 + 7.137794E-07 7.952842E-07 8.711064E-07 9.415966E-07 1.007191E-06 + 7.139482E-07 7.954414E-07 8.712526E-07 9.417324E-07 1.007317E-06 + 7.183286E-07 7.995208E-07 8.750466E-07 9.452576E-07 1.010607E-06 + 7.387075E-07 8.184885E-07 8.926867E-07 9.616505E-07 1.025914E-06 + 7.669981E-07 8.448013E-07 9.171514E-07 9.844078E-07 1.047181E-06 + 7.957557E-07 8.715450E-07 9.420041E-07 1.007571E-06 1.068830E-06 + 8.247466E-07 8.985063E-07 9.670608E-07 1.030969E-06 1.090680E-06 + 8.533771E-07 9.251217E-07 9.918312E-07 1.054120E-06 1.112276E-06 + 8.810293E-07 9.508166E-07 1.015796E-06 1.076513E-06 1.133151E-06 + 9.085502E-07 9.764025E-07 1.039699E-06 1.098826E-06 1.153959E-06 + 9.348335E-07 1.000883E-06 1.062580E-06 1.120163E-06 1.173880E-06 + 9.503861E-07 1.015394E-06 1.076138E-06 1.132801E-06 1.185691E-06 + +Band: 3, gas: 1, k-terms: 2 + 1.518161E-05 1.895099E-05 2.262134E-05 2.613370E-05 2.946112E-05 + 1.523141E-05 1.899957E-05 2.266821E-05 2.617896E-05 2.950373E-05 + 1.528105E-05 1.904827E-05 2.271501E-05 2.622343E-05 2.954550E-05 + 1.533151E-05 1.909709E-05 2.276190E-05 2.626850E-05 2.958753E-05 + 1.538482E-05 1.914841E-05 2.281080E-05 2.631457E-05 2.963152E-05 + 1.543605E-05 1.919813E-05 2.285785E-05 2.635931E-05 2.967437E-05 + 1.548717E-05 1.924844E-05 2.290569E-05 2.640477E-05 2.971734E-05 + 1.554362E-05 1.930138E-05 2.295812E-05 2.645342E-05 2.976280E-05 + 1.561256E-05 1.936794E-05 2.302180E-05 2.651404E-05 2.981969E-05 + 1.577398E-05 1.952419E-05 2.317141E-05 2.665648E-05 2.995392E-05 + 1.614542E-05 1.988820E-05 2.351684E-05 2.698711E-05 3.026543E-05 + 1.670186E-05 2.043444E-05 2.404106E-05 2.748062E-05 3.073191E-05 + 1.731306E-05 2.103026E-05 2.460883E-05 2.801988E-05 3.123898E-05 + 1.794385E-05 2.164305E-05 2.519364E-05 2.857475E-05 3.175623E-05 + 1.859250E-05 2.226676E-05 2.578991E-05 2.913605E-05 3.228236E-05 + 1.923415E-05 2.288602E-05 2.638112E-05 2.969151E-05 3.279955E-05 + 1.989796E-05 2.352204E-05 2.698645E-05 3.026213E-05 3.333392E-05 + 2.058074E-05 2.417286E-05 2.760155E-05 3.084262E-05 3.387789E-05 + 2.126235E-05 2.482276E-05 2.821747E-05 3.142119E-05 3.441997E-05 + 2.195478E-05 2.548396E-05 2.884003E-05 3.200229E-05 3.497129E-05 + 2.266331E-05 2.615963E-05 2.947580E-05 3.259555E-05 3.553322E-05 + 2.337718E-05 2.683680E-05 3.011407E-05 3.319212E-05 3.609393E-05 + 2.406994E-05 2.748931E-05 3.073083E-05 3.376707E-05 3.663283E-05 + 2.456669E-05 2.795932E-05 3.117059E-05 3.417847E-05 3.701948E-05 + 2.461721E-05 2.800290E-05 3.120805E-05 3.421163E-05 3.704855E-05 + 2.437593E-05 2.776610E-05 3.097991E-05 3.399501E-05 3.684157E-05 + 2.403249E-05 2.743277E-05 3.065849E-05 3.368961E-05 3.655345E-05 + 2.365412E-05 2.706127E-05 3.030078E-05 3.335068E-05 3.622980E-05 + 2.330386E-05 2.671283E-05 2.996366E-05 3.302722E-05 3.592002E-05 + 2.299640E-05 2.640152E-05 2.965765E-05 3.273710E-05 3.563423E-05 + 2.273853E-05 2.613324E-05 2.939046E-05 3.247744E-05 3.538040E-05 + 2.255614E-05 2.593588E-05 2.918508E-05 3.227293E-05 3.517952E-05 + 2.247852E-05 2.583395E-05 2.906688E-05 3.214548E-05 3.505188E-05 + 2.251931E-05 2.583912E-05 2.904670E-05 3.211018E-05 3.500825E-05 + 2.268548E-05 2.595689E-05 2.913060E-05 3.216854E-05 3.504810E-05 + 2.299192E-05 2.620339E-05 2.933126E-05 3.233506E-05 3.519195E-05 + 2.343745E-05 2.658148E-05 2.965516E-05 3.261483E-05 3.543817E-05 + 2.404181E-05 2.710975E-05 3.012003E-05 3.302778E-05 3.580917E-05 + 2.484799E-05 2.783091E-05 3.076814E-05 3.361254E-05 3.634209E-05 + 2.588686E-05 2.877966E-05 3.163443E-05 3.440591E-05 3.707188E-05 + 2.720668E-05 3.000792E-05 3.276625E-05 3.545132E-05 3.804541E-05 + 2.880360E-05 3.150648E-05 3.416130E-05 3.675220E-05 3.925843E-05 + 3.065312E-05 3.325552E-05 3.580494E-05 3.830076E-05 4.070856E-05 + 3.276929E-05 3.526203E-05 3.770842E-05 4.009933E-05 4.241227E-05 + 3.516518E-05 3.755118E-05 3.989575E-05 4.218032E-05 4.438652E-05 + 3.786762E-05 4.015573E-05 4.239880E-05 4.457921E-05 4.667823E-05 + 4.091238E-05 4.311643E-05 4.526574E-05 4.733885E-05 4.932981E-05 + 4.428917E-05 4.641678E-05 4.847316E-05 5.044171E-05 5.232625E-05 + 4.795735E-05 5.000765E-05 5.198029E-05 5.385839E-05 5.563561E-05 + 5.198888E-05 5.397091E-05 5.586373E-05 5.765436E-05 5.933506E-05 + 5.664970E-05 5.855384E-05 6.035608E-05 6.203856E-05 6.361276E-05 + 6.171743E-05 6.353282E-05 6.523249E-05 6.680730E-05 6.826461E-05 + 6.698140E-05 6.871158E-05 7.031143E-05 7.178487E-05 7.312539E-05 + 7.241934E-05 7.406379E-05 7.557418E-05 7.694423E-05 7.817995E-05 + 7.798419E-05 7.955125E-05 8.097066E-05 8.225271E-05 8.338285E-05 + 8.364271E-05 8.513499E-05 8.647446E-05 8.766846E-05 8.870385E-05 + 8.940358E-05 9.080727E-05 9.205944E-05 9.316454E-05 9.411596E-05 + 9.519215E-05 9.651178E-05 9.768155E-05 9.869876E-05 9.956082E-05 + 9.952255E-05 1.007963E-04 1.019087E-04 1.028720E-04 1.036753E-04 + 6.610648E-03 7.274058E-03 7.776844E-03 8.157160E-03 8.435786E-03 + 6.620414E-03 7.281386E-03 7.782377E-03 8.161731E-03 8.439325E-03 + 6.629801E-03 7.288632E-03 7.787789E-03 8.165739E-03 8.442115E-03 + 6.639617E-03 7.295720E-03 7.793057E-03 8.169918E-03 8.444960E-03 + 6.650493E-03 7.303624E-03 7.798755E-03 8.173927E-03 8.448231E-03 + 6.660210E-03 7.310785E-03 7.803722E-03 8.177583E-03 8.451288E-03 + 6.669326E-03 7.318131E-03 7.808995E-03 8.181414E-03 8.454193E-03 + 6.680426E-03 7.325307E-03 7.815560E-03 8.185490E-03 8.456941E-03 + 6.693482E-03 7.334959E-03 7.822849E-03 8.191006E-03 8.460986E-03 + 6.724386E-03 7.357767E-03 7.839852E-03 8.203595E-03 8.470438E-03 + 6.794381E-03 7.411996E-03 7.878782E-03 8.233531E-03 8.492566E-03 + 6.894376E-03 7.489738E-03 7.939065E-03 8.275461E-03 8.524037E-03 + 6.999959E-03 7.570258E-03 7.999058E-03 8.320925E-03 8.555850E-03 + 7.104518E-03 7.650131E-03 8.059793E-03 8.366647E-03 8.585374E-03 + 7.208898E-03 7.726545E-03 8.118293E-03 8.408035E-03 8.613711E-03 + 7.305615E-03 7.799799E-03 8.174055E-03 8.448288E-03 8.639251E-03 + 7.402635E-03 7.872800E-03 8.227979E-03 8.488248E-03 8.667637E-03 + 7.498905E-03 7.944822E-03 8.279748E-03 8.526734E-03 8.694631E-03 + 7.588173E-03 8.012162E-03 8.330227E-03 8.561996E-03 8.718827E-03 + 7.674882E-03 8.079047E-03 8.377984E-03 8.593227E-03 8.744005E-03 + 7.757655E-03 8.141948E-03 8.423658E-03 8.622745E-03 8.766222E-03 + 7.838098E-03 8.200734E-03 8.467567E-03 8.652885E-03 8.786198E-03 + 7.913346E-03 8.253463E-03 8.508039E-03 8.680192E-03 8.803706E-03 + 7.960926E-03 8.289930E-03 8.533470E-03 8.697588E-03 8.815831E-03 + 7.957913E-03 8.287531E-03 8.531140E-03 8.695534E-03 8.813772E-03 + 7.921421E-03 8.258936E-03 8.509844E-03 8.680310E-03 8.802489E-03 + 7.868777E-03 8.220261E-03 8.480218E-03 8.658502E-03 8.788160E-03 + 7.806281E-03 8.172893E-03 8.444304E-03 8.633327E-03 8.769662E-03 + 7.743126E-03 8.124520E-03 8.408320E-03 8.606570E-03 8.750316E-03 + 7.678849E-03 8.074333E-03 8.370236E-03 8.582161E-03 8.728953E-03 + 7.611651E-03 8.021076E-03 8.330115E-03 8.553366E-03 8.705562E-03 + 7.544068E-03 7.967986E-03 8.287998E-03 8.522537E-03 8.681277E-03 + 7.480121E-03 7.917648E-03 8.248146E-03 8.490787E-03 8.657593E-03 + 7.420515E-03 7.870096E-03 8.209277E-03 8.460464E-03 8.633786E-03 + 7.367330E-03 7.824997E-03 8.172036E-03 8.429268E-03 8.607540E-03 + 7.322749E-03 7.783740E-03 8.135240E-03 8.398271E-03 8.583275E-03 + 7.282566E-03 7.743461E-03 8.099526E-03 8.366029E-03 8.555935E-03 + 7.249015E-03 7.707725E-03 8.063701E-03 8.333551E-03 8.527925E-03 + 7.234969E-03 7.680957E-03 8.034020E-03 8.302877E-03 8.500266E-03 + 7.239388E-03 7.667285E-03 8.012182E-03 8.277978E-03 8.474112E-03 + 7.271314E-03 7.677693E-03 8.003959E-03 8.258862E-03 8.451298E-03 + 7.327512E-03 7.703519E-03 8.007848E-03 8.246580E-03 8.427402E-03 + 7.401872E-03 7.742397E-03 8.018281E-03 8.240748E-03 8.408356E-03 + 7.494082E-03 7.794096E-03 8.038328E-03 8.234570E-03 8.391305E-03 + 7.602088E-03 7.857207E-03 8.067420E-03 8.238663E-03 8.374065E-03 + 7.722469E-03 7.931018E-03 8.103414E-03 8.248994E-03 8.363197E-03 + 7.852540E-03 8.014155E-03 8.150958E-03 8.262476E-03 8.351631E-03 + 7.983577E-03 8.099511E-03 8.195190E-03 8.273850E-03 8.338508E-03 + 8.100028E-03 8.174349E-03 8.229258E-03 8.276666E-03 8.312467E-03 + 8.189629E-03 8.228142E-03 8.245820E-03 8.264003E-03 8.273202E-03 + 8.247150E-03 8.251176E-03 8.239965E-03 8.227420E-03 8.212810E-03 + 8.255183E-03 8.230431E-03 8.195557E-03 8.158349E-03 8.120451E-03 + 8.206225E-03 8.158488E-03 8.101971E-03 8.044056E-03 7.986533E-03 + 8.101525E-03 8.034584E-03 7.961036E-03 7.885504E-03 7.815016E-03 + 7.936172E-03 7.857038E-03 7.772095E-03 7.689450E-03 7.609634E-03 + 7.714685E-03 7.629380E-03 7.542305E-03 7.456567E-03 7.372264E-03 + 7.455301E-03 7.363905E-03 7.274736E-03 7.187907E-03 7.104170E-03 + 7.159273E-03 7.068342E-03 6.982367E-03 6.897048E-03 6.813634E-03 + 6.914513E-03 6.825223E-03 6.743702E-03 6.664599E-03 6.583220E-03 + +Band: 3, gas: 6, k-terms: 1 + 7.086698E-08 7.794220E-08 8.466934E-08 9.107762E-08 9.722979E-08 + 7.097752E-08 7.804531E-08 8.476552E-08 9.116837E-08 9.731621E-08 + 7.109185E-08 7.815154E-08 8.486431E-08 9.126136E-08 9.740457E-08 + 7.121078E-08 7.826156E-08 8.496629E-08 9.135708E-08 9.749531E-08 + 7.133821E-08 7.837897E-08 8.507478E-08 9.145864E-08 9.759136E-08 + 7.146962E-08 7.849928E-08 8.518541E-08 9.156178E-08 9.768855E-08 + 7.160939E-08 7.862649E-08 8.530185E-08 9.166991E-08 9.779007E-08 + 7.176505E-08 7.876758E-08 8.543057E-08 9.178909E-08 9.790168E-08 + 7.195592E-08 7.894075E-08 8.558867E-08 9.193556E-08 9.803891E-08 + 7.233242E-08 7.928966E-08 8.591242E-08 9.223982E-08 9.832759E-08 + 7.311567E-08 8.002609E-08 8.660301E-08 9.289500E-08 9.895427E-08 + 7.426122E-08 8.110532E-08 8.762057E-08 9.386364E-08 9.988326E-08 + 7.551897E-08 8.228662E-08 8.873757E-08 9.492781E-08 1.009042E-07 + 7.682651E-08 8.351311E-08 8.989697E-08 9.603270E-08 1.019639E-07 + 7.818150E-08 8.478228E-08 9.109646E-08 9.717588E-08 1.030597E-07 + 7.955300E-08 8.606445E-08 9.230751E-08 9.832949E-08 1.041644E-07 + 8.098644E-08 8.740292E-08 9.357152E-08 9.953321E-08 1.053159E-07 + 8.247874E-08 8.879764E-08 9.488830E-08 1.007864E-07 1.065133E-07 + 8.401317E-08 9.023294E-08 9.624238E-08 1.020737E-07 1.077412E-07 + 8.561444E-08 9.172911E-08 9.765290E-08 1.034128E-07 1.090164E-07 + 8.730715E-08 9.330975E-08 9.914212E-08 1.048250E-07 1.103590E-07 + 8.907575E-08 9.495938E-08 1.006943E-07 1.062940E-07 1.117529E-07 + 9.088787E-08 9.664564E-08 1.022769E-07 1.077872E-07 1.131656E-07 + 9.248203E-08 9.811049E-08 1.036350E-07 1.090538E-07 1.143496E-07 + 9.348876E-08 9.898423E-08 1.044000E-07 1.097289E-07 1.149499E-07 + 9.422881E-08 9.957137E-08 1.048628E-07 1.100909E-07 1.152327E-07 + 9.507649E-08 1.002326E-07 1.053720E-07 1.104764E-07 1.155186E-07 + 9.619677E-08 1.011247E-07 1.060769E-07 1.110273E-07 1.159448E-07 + 9.773921E-08 1.023917E-07 1.071156E-07 1.118762E-07 1.166374E-07 + 9.978818E-08 1.041145E-07 1.085649E-07 1.130953E-07 1.176643E-07 + 1.024204E-07 1.063679E-07 1.104965E-07 1.147525E-07 1.190894E-07 + 1.057291E-07 1.092461E-07 1.130037E-07 1.169394E-07 1.210011E-07 + 1.097991E-07 1.128369E-07 1.161757E-07 1.197449E-07 1.234872E-07 + 1.146948E-07 1.172119E-07 1.200860E-07 1.232436E-07 1.266223E-07 + 1.204835E-07 1.224351E-07 1.247998E-07 1.275015E-07 1.304728E-07 + 1.272445E-07 1.285841E-07 1.303951E-07 1.325980E-07 1.351194E-07 + 1.350619E-07 1.357374E-07 1.369473E-07 1.386071E-07 1.406358E-07 + 1.440376E-07 1.439908E-07 1.445483E-07 1.456188E-07 1.471120E-07 + 1.542776E-07 1.534473E-07 1.532989E-07 1.537334E-07 1.546489E-07 + 1.658776E-07 1.642012E-07 1.632917E-07 1.630423E-07 1.633377E-07 + 1.789002E-07 1.763208E-07 1.745989E-07 1.736203E-07 1.732560E-07 + 1.934453E-07 1.898997E-07 1.873073E-07 1.855478E-07 1.844780E-07 + 2.096568E-07 2.050691E-07 2.015360E-07 1.989323E-07 1.971009E-07 + 2.276822E-07 2.219703E-07 2.174187E-07 2.139004E-07 2.112440E-07 + 2.476398E-07 2.407229E-07 2.350753E-07 2.305702E-07 2.270231E-07 + 2.695599E-07 2.613731E-07 2.545648E-07 2.490106E-07 2.445137E-07 + 2.933390E-07 2.838500E-07 2.758466E-07 2.692051E-07 2.637191E-07 + 3.190663E-07 3.082411E-07 2.990051E-07 2.912358E-07 2.847184E-07 + 3.469131E-07 3.347063E-07 3.241872E-07 3.152365E-07 3.076347E-07 + 3.762680E-07 3.627267E-07 3.509622E-07 3.408525E-07 3.321773E-07 + 4.047251E-07 3.901768E-07 3.774845E-07 3.664865E-07 3.569652E-07 + 4.331078E-07 4.177698E-07 4.043341E-07 3.926068E-07 3.823764E-07 + 4.626040E-07 4.465628E-07 4.324237E-07 4.199995E-07 4.090924E-07 + 4.931597E-07 4.764715E-07 4.616801E-07 4.486040E-07 4.370312E-07 + 5.247687E-07 5.074938E-07 4.921048E-07 4.784274E-07 4.662190E-07 + 5.574284E-07 5.396346E-07 5.237045E-07 5.094407E-07 4.966780E-07 + 5.907447E-07 5.725430E-07 5.561702E-07 5.413906E-07 5.281605E-07 + 6.248249E-07 6.063125E-07 5.895357E-07 5.743579E-07 5.607233E-07 + 6.522995E-07 6.335245E-07 6.164040E-07 6.009008E-07 5.869163E-07 + +Band: 4, gas: 1, k-terms: 9 + 4.722460E-08 9.152265E-08 1.752401E-07 3.260968E-07 5.817220E-07 + 5.310882E-08 1.005322E-07 1.882225E-07 3.435722E-07 6.039245E-07 + 5.982469E-08 1.106942E-07 2.027571E-07 3.630512E-07 6.287777E-07 + 6.749060E-08 1.221478E-07 2.190353E-07 3.847848E-07 6.566156E-07 + 7.627290E-08 1.350986E-07 2.373583E-07 4.091792E-07 6.879020E-07 + 8.631391E-08 1.496970E-07 2.578246E-07 4.364480E-07 7.226044E-07 + 9.781210E-08 1.661815E-07 2.807893E-07 4.670129E-07 7.613879E-07 + 1.110545E-07 1.848993E-07 3.066769E-07 5.014081E-07 8.049887E-07 + 1.264641E-07 2.064703E-07 3.362953E-07 5.407713E-07 8.551837E-07 + 1.458106E-07 2.336310E-07 3.737395E-07 5.912995E-07 9.210059E-07 + 1.724113E-07 2.713946E-07 4.263870E-07 6.635276E-07 1.017595E-06 + 2.079962E-07 3.218730E-07 4.968432E-07 7.603916E-07 1.148082E-06 + 2.516857E-07 3.830795E-07 5.813548E-07 8.755019E-07 1.299351E-06 + 3.042433E-07 4.556365E-07 6.803502E-07 1.008635E-06 1.474938E-06 + 3.672416E-07 5.414528E-07 7.959796E-07 1.162311E-06 1.675412E-06 + 4.417971E-07 6.416036E-07 9.292191E-07 1.334686E-06 1.900752E-06 + 5.310918E-07 7.600409E-07 1.085021E-06 1.536428E-06 2.158444E-06 + 6.377425E-07 8.997400E-07 1.266729E-06 1.769241E-06 2.452644E-06 + 7.640981E-07 1.063384E-06 1.474182E-06 2.035678E-06 2.785764E-06 + 9.142113E-07 1.255595E-06 1.717713E-06 2.341755E-06 3.165355E-06 + 1.093414E-06 1.479595E-06 2.001936E-06 2.695626E-06 3.600319E-06 + 1.305436E-06 1.743975E-06 2.330950E-06 3.100917E-06 4.094081E-06 + 1.549463E-06 2.048687E-06 2.705616E-06 3.557926E-06 4.644507E-06 + 1.811613E-06 2.367734E-06 3.091205E-06 4.020680E-06 5.193537E-06 + 2.047917E-06 2.646116E-06 3.417597E-06 4.399983E-06 5.631471E-06 + 2.272422E-06 2.902182E-06 3.709466E-06 4.729738E-06 6.001162E-06 + 2.514468E-06 3.173206E-06 4.014049E-06 5.070658E-06 6.377604E-06 + 2.788175E-06 3.476086E-06 4.350803E-06 5.446147E-06 6.791740E-06 + 3.109066E-06 3.829971E-06 4.742918E-06 5.880239E-06 7.272560E-06 + 3.487364E-06 4.246491E-06 5.202316E-06 6.385609E-06 7.833299E-06 + 3.933707E-06 4.736555E-06 5.739965E-06 6.977834E-06 8.485101E-06 + 4.463705E-06 5.318861E-06 6.376079E-06 7.676075E-06 9.250131E-06 + 5.094979E-06 6.013303E-06 7.134114E-06 8.503756E-06 1.015546E-05 + 5.846962E-06 6.840934E-06 8.036993E-06 9.486192E-06 1.122724E-05 + 6.741770E-06 7.822722E-06 9.105303E-06 1.064691E-05 1.248779E-05 + 7.805972E-06 8.985314E-06 1.037207E-05 1.201756E-05 1.396932E-05 + 9.066268E-06 1.035755E-05 1.186464E-05 1.362902E-05 1.570498E-05 + 1.055878E-05 1.197788E-05 1.362417E-05 1.552139E-05 1.774236E-05 + 1.233241E-05 1.390597E-05 1.570810E-05 1.776396E-05 2.014839E-05 + 1.445551E-05 1.620869E-05 1.818923E-05 2.043381E-05 2.300153E-05 + 1.700931E-05 1.897269E-05 2.116016E-05 2.362776E-05 2.641112E-05 + 2.006398E-05 2.227160E-05 2.470309E-05 2.742364E-05 3.046298E-05 + 2.368793E-05 2.617466E-05 2.888911E-05 3.189359E-05 3.522243E-05 + 2.796801E-05 3.077080E-05 3.380907E-05 3.713158E-05 4.079615E-05 + 3.301063E-05 3.618186E-05 3.958311E-05 4.326602E-05 4.730515E-05 + 3.896414E-05 4.256143E-05 4.637437E-05 5.046871E-05 5.492316E-05 + 4.603456E-05 5.012671E-05 5.441414E-05 5.898050E-05 6.390464E-05 + 5.435510E-05 5.901706E-05 6.385342E-05 6.895264E-05 7.439683E-05 + 6.402009E-05 6.932350E-05 7.477854E-05 8.046439E-05 8.648976E-05 + 7.546582E-05 8.148563E-05 8.763937E-05 9.398616E-05 1.006742E-04 + 8.991540E-05 9.674000E-05 1.036780E-04 1.108042E-04 1.182793E-04 + 1.073040E-04 1.149981E-04 1.227815E-04 1.307673E-04 1.391286E-04 + 1.273172E-04 1.359248E-04 1.445928E-04 1.534948E-04 1.628014E-04 + 1.500488E-04 1.595930E-04 1.692073E-04 1.790668E-04 1.893761E-04 + 1.754680E-04 1.859845E-04 1.965882E-04 2.074558E-04 2.187910E-04 + 2.034116E-04 2.149406E-04 2.265650E-04 2.384825E-04 2.508525E-04 + 2.338460E-04 2.464429E-04 2.591322E-04 2.721120E-04 2.855401E-04 + 2.663709E-04 2.800335E-04 2.938248E-04 3.078890E-04 3.223958E-04 + 2.915916E-04 3.060636E-04 3.206988E-04 3.355981E-04 3.508965E-04 + 2.681850E-06 5.417793E-06 1.031960E-05 1.838279E-05 3.069332E-05 + 2.844758E-06 5.639019E-06 1.059572E-05 1.871786E-05 3.109157E-05 + 3.031626E-06 5.887024E-06 1.090346E-05 1.908939E-05 3.152866E-05 + 3.242649E-06 6.165112E-06 1.124771E-05 1.950251E-05 3.201046E-05 + 3.481955E-06 6.477704E-06 1.163738E-05 1.996535E-05 3.254909E-05 + 3.751346E-06 6.826246E-06 1.207158E-05 2.047652E-05 3.314089E-05 + 4.056511E-06 7.219194E-06 1.256068E-05 2.105056E-05 3.380067E-05 + 4.404781E-06 7.667175E-06 1.311556E-05 2.170361E-05 3.454797E-05 + 4.809625E-06 8.187773E-06 1.376148E-05 2.247333E-05 3.543500E-05 + 5.335420E-06 8.883151E-06 1.465717E-05 2.359819E-05 3.679964E-05 + 6.094929E-06 9.927446E-06 1.606850E-05 2.546141E-05 3.918144E-05 + 7.125235E-06 1.136177E-05 1.803624E-05 2.809128E-05 4.259793E-05 + 8.365260E-06 1.307331E-05 2.035701E-05 3.116335E-05 4.656433E-05 + 9.818862E-06 1.505380E-05 2.300089E-05 3.461911E-05 5.097768E-05 + 1.151962E-05 1.733791E-05 2.600752E-05 3.849849E-05 5.587278E-05 + 1.348337E-05 1.993144E-05 2.936826E-05 4.277052E-05 6.120367E-05 + 1.578218E-05 2.292437E-05 3.319538E-05 4.758218E-05 6.714615E-05 + 1.846540E-05 2.637300E-05 3.754394E-05 5.298796E-05 7.375398E-05 + 2.157075E-05 3.030570E-05 4.244369E-05 5.900094E-05 8.102848E-05 + 2.517864E-05 3.481206E-05 4.798893E-05 6.573675E-05 8.908826E-05 + 2.939382E-05 4.000771E-05 5.430806E-05 7.334469E-05 9.809576E-05 + 3.426608E-05 4.593580E-05 6.143886E-05 8.183302E-05 1.080359E-04 + 3.980742E-05 5.258544E-05 6.934612E-05 9.112425E-05 1.187883E-04 + 4.550897E-05 5.926341E-05 7.710659E-05 1.000319E-04 1.288563E-04 + 5.035755E-05 6.469130E-05 8.308275E-05 1.065072E-04 1.357262E-04 + 5.476734E-05 6.945302E-05 8.806324E-05 1.115771E-04 1.407451E-04 + 5.947571E-05 7.448636E-05 9.326963E-05 1.167698E-04 1.458332E-04 + 6.475448E-05 8.014329E-05 9.917976E-05 1.226880E-04 1.516503E-04 + 7.089664E-05 8.681634E-05 1.062262E-04 1.299102E-04 1.588349E-04 + 7.810665E-05 9.470030E-05 1.146001E-04 1.386593E-04 1.676747E-04 + 8.656859E-05 1.039306E-04 1.245214E-04 1.490973E-04 1.783900E-04 + 9.653987E-05 1.147995E-04 1.362789E-04 1.615374E-04 1.913974E-04 + 1.084181E-04 1.276784E-04 1.501881E-04 1.764189E-04 2.070546E-04 + 1.224738E-04 1.429244E-04 1.666031E-04 1.940374E-04 2.257010E-04 + 1.390089E-04 1.608694E-04 1.858814E-04 2.146904E-04 2.476521E-04 + 1.584959E-04 1.819822E-04 2.085244E-04 2.388576E-04 2.733709E-04 + 1.813616E-04 2.066958E-04 2.349555E-04 2.669913E-04 3.032738E-04 + 2.082078E-04 2.355744E-04 2.658365E-04 2.998140E-04 3.380203E-04 + 2.399008E-04 2.695765E-04 3.021212E-04 3.382840E-04 3.786654E-04 + 2.774460E-04 3.097985E-04 3.449025E-04 3.835428E-04 4.264605E-04 + 3.221361E-04 3.575340E-04 3.955920E-04 4.371275E-04 4.829616E-04 + 3.749976E-04 4.139036E-04 4.553426E-04 5.000717E-04 5.491582E-04 + 4.368971E-04 4.798044E-04 5.250028E-04 5.733438E-04 6.259282E-04 + 5.091054E-04 5.564911E-04 6.058914E-04 6.582273E-04 7.146557E-04 + 5.931568E-04 6.455802E-04 6.998007E-04 7.566358E-04 8.173315E-04 + 6.912480E-04 7.493655E-04 8.090813E-04 8.710518E-04 9.365530E-04 + 8.065006E-04 8.709888E-04 9.370492E-04 1.005041E-03 1.076143E-03 + 9.410102E-04 1.012643E-03 1.085901E-03 1.160861E-03 1.238517E-03 + 1.096316E-03 1.176063E-03 1.257482E-03 1.340527E-03 1.425665E-03 + 1.279443E-03 1.368445E-03 1.459227E-03 1.551630E-03 1.645729E-03 + 1.509227E-03 1.608989E-03 1.710740E-03 1.814064E-03 1.918754E-03 + 1.785837E-03 1.898070E-03 2.012237E-03 2.127699E-03 2.244496E-03 + 2.106940E-03 2.233060E-03 2.361019E-03 2.489955E-03 2.619882E-03 + 2.477701E-03 2.618723E-03 2.761398E-03 2.904940E-03 3.048307E-03 + 2.901212E-03 3.057453E-03 3.215349E-03 3.373699E-03 3.531026E-03 + 3.378549E-03 3.549986E-03 3.722570E-03 3.895314E-03 4.066811E-03 + 3.912411E-03 4.097407E-03 4.284030E-03 4.470660E-03 4.655914E-03 + 4.498656E-03 4.696490E-03 4.895791E-03 5.095268E-03 5.293164E-03 + 4.969948E-03 5.176675E-03 5.384252E-03 5.592131E-03 5.799167E-03 + 1.916710E-04 3.110237E-04 4.590462E-04 6.351681E-04 8.421810E-04 + 1.939690E-04 3.135479E-04 4.617987E-04 6.381720E-04 8.455176E-04 + 1.964634E-04 3.162570E-04 4.647117E-04 6.413309E-04 8.489746E-04 + 1.991765E-04 3.191770E-04 4.678136E-04 6.446532E-04 8.525973E-04 + 2.021994E-04 3.224140E-04 4.712190E-04 6.482640E-04 8.564933E-04 + 2.054895E-04 3.258957E-04 4.748398E-04 6.520591E-04 8.605349E-04 + 2.091331E-04 3.297151E-04 4.787900E-04 6.561691E-04 8.648611E-04 + 2.132468E-04 3.340523E-04 4.832508E-04 6.608003E-04 8.697208E-04 + 2.181732E-04 3.392962E-04 4.886991E-04 6.664786E-04 8.757143E-04 + 2.262036E-04 3.483489E-04 4.986285E-04 6.773154E-04 8.876743E-04 + 2.409324E-04 3.656774E-04 5.183580E-04 6.995710E-04 9.129805E-04 + 2.622617E-04 3.909747E-04 5.474161E-04 7.327010E-04 9.509514E-04 + 2.867042E-04 4.197170E-04 5.803248E-04 7.702275E-04 9.939965E-04 + 3.133965E-04 4.508155E-04 6.157714E-04 8.105781E-04 1.040216E-03 + 3.424851E-04 4.843761E-04 6.538907E-04 8.538629E-04 1.089700E-03 + 3.734478E-04 5.197768E-04 6.938894E-04 8.991899E-04 1.141431E-03 + 4.072980E-04 5.582228E-04 7.371912E-04 9.482029E-04 1.197268E-03 + 4.442378E-04 5.998850E-04 7.839931E-04 1.001043E-03 1.257461E-03 + 4.839948E-04 6.444332E-04 8.338600E-04 1.057318E-03 1.321391E-03 + 5.272545E-04 6.925998E-04 8.876904E-04 1.117931E-03 1.390238E-03 + 5.746901E-04 7.452995E-04 9.464886E-04 1.184076E-03 1.465182E-03 + 6.261177E-04 8.022177E-04 1.009892E-03 1.255141E-03 1.545658E-03 + 6.806881E-04 8.623471E-04 1.076588E-03 1.329715E-03 1.629731E-03 + 7.303877E-04 9.161901E-04 1.135313E-03 1.394293E-03 1.701311E-03 + 7.622191E-04 9.483756E-04 1.167854E-03 1.427253E-03 1.734715E-03 + 7.838348E-04 9.678226E-04 1.184738E-03 1.440946E-03 1.744482E-03 + 8.054094E-04 9.866551E-04 1.200028E-03 1.452091E-03 1.750243E-03 + 8.307927E-04 1.009322E-03 1.219046E-03 1.466736E-03 1.759220E-03 + 8.634723E-04 1.039685E-03 1.246316E-03 1.490068E-03 1.777680E-03 + 9.049289E-04 1.079358E-03 1.283603E-03 1.524067E-03 1.807697E-03 + 9.562667E-04 1.129669E-03 1.332196E-03 1.570110E-03 1.850688E-03 + 1.019654E-03 1.192996E-03 1.394690E-03 1.631301E-03 1.909652E-03 + 1.097356E-03 1.271838E-03 1.473995E-03 1.710417E-03 1.987968E-03 + 1.191520E-03 1.368393E-03 1.572720E-03 1.810135E-03 2.088331E-03 + 1.304489E-03 1.484924E-03 1.692898E-03 1.932951E-03 2.213036E-03 + 1.439554E-03 1.624868E-03 1.837913E-03 2.082601E-03 2.365819E-03 + 1.600093E-03 1.792006E-03 2.011587E-03 2.262475E-03 2.550255E-03 + 1.791332E-03 1.991764E-03 2.219273E-03 2.477772E-03 2.771831E-03 + 2.020834E-03 2.231981E-03 2.469233E-03 2.736936E-03 3.038493E-03 + 2.297668E-03 2.521921E-03 2.770900E-03 3.049083E-03 3.359351E-03 + 2.633475E-03 2.873081E-03 3.135817E-03 3.425697E-03 3.746207E-03 + 3.038028E-03 3.294846E-03 3.572116E-03 3.874968E-03 4.206262E-03 + 3.519798E-03 3.794501E-03 4.087017E-03 4.403103E-03 4.745697E-03 + 4.088439E-03 4.382268E-03 4.690940E-03 5.020447E-03 5.374960E-03 + 4.756960E-03 5.070992E-03 5.396347E-03 5.740116E-03 6.107193E-03 + 5.541833E-03 5.877344E-03 6.220461E-03 6.579506E-03 6.960065E-03 + 6.464325E-03 6.823849E-03 7.185683E-03 7.560830E-03 7.956636E-03 + 7.537747E-03 7.923733E-03 8.306082E-03 8.697632E-03 9.109014E-03 + 8.773615E-03 9.188274E-03 9.593185E-03 1.000044E-02 1.042794E-02 + 1.020956E-02 1.065455E-02 1.108304E-02 1.150862E-02 1.195175E-02 + 1.193592E-02 1.240859E-02 1.285754E-02 1.330254E-02 1.376640E-02 + 1.393641E-02 1.443167E-02 1.490101E-02 1.536715E-02 1.585266E-02 + 1.619093E-02 1.670459E-02 1.719288E-02 1.767940E-02 1.818466E-02 + 1.870698E-02 1.923759E-02 1.974312E-02 2.024647E-02 2.077163E-02 + 2.148729E-02 2.203591E-02 2.255722E-02 2.307685E-02 2.362275E-02 + 2.453057E-02 2.509397E-02 2.563308E-02 2.616837E-02 2.673836E-02 + 2.783922E-02 2.841934E-02 2.897744E-02 2.953494E-02 3.012888E-02 + 3.139782E-02 3.199622E-02 3.257515E-02 3.315863E-02 3.377583E-02 + 3.423119E-02 3.484567E-02 3.544266E-02 3.604427E-02 3.667628E-02 + 6.854271E-03 1.051703E-02 1.481908E-02 1.966304E-02 2.497884E-02 + 6.899527E-03 1.057075E-02 1.487950E-02 1.972976E-02 2.505126E-02 + 6.945695E-03 1.062491E-02 1.494065E-02 1.979721E-02 2.512443E-02 + 6.993280E-03 1.067979E-02 1.500242E-02 1.986472E-02 2.519765E-02 + 7.043693E-03 1.073748E-02 1.506665E-02 1.993530E-02 2.527376E-02 + 7.094679E-03 1.079476E-02 1.513023E-02 2.000448E-02 2.534815E-02 + 7.148113E-03 1.085351E-02 1.519483E-02 2.007451E-02 2.542314E-02 + 7.207550E-03 1.091750E-02 1.526453E-02 2.015008E-02 2.550397E-02 + 7.281666E-03 1.099730E-02 1.535090E-02 2.024326E-02 2.560366E-02 + 7.441630E-03 1.117814E-02 1.555097E-02 2.046148E-02 2.583896E-02 + 7.796665E-03 1.159104E-02 1.601401E-02 2.096888E-02 2.638674E-02 + 8.338405E-03 1.222131E-02 1.672033E-02 2.174371E-02 2.721950E-02 + 8.953205E-03 1.293147E-02 1.751188E-02 2.260728E-02 2.814629E-02 + 9.612299E-03 1.368400E-02 1.834566E-02 2.351307E-02 2.911550E-02 + 1.031294E-02 1.447838E-02 1.921997E-02 2.446064E-02 3.012114E-02 + 1.103958E-02 1.529257E-02 2.011034E-02 2.542052E-02 3.113958E-02 + 1.181683E-02 1.615552E-02 2.104897E-02 2.642578E-02 3.220470E-02 + 1.264224E-02 1.706606E-02 2.203324E-02 2.747398E-02 3.331431E-02 + 1.350574E-02 1.800847E-02 2.304620E-02 2.855003E-02 3.444974E-02 + 1.441710E-02 1.899719E-02 2.410310E-02 2.966467E-02 3.562433E-02 + 1.538993E-02 2.004615E-02 2.521959E-02 3.083688E-02 3.685206E-02 + 1.641237E-02 2.114076E-02 2.637365E-02 3.204306E-02 3.810832E-02 + 1.744823E-02 2.224262E-02 2.752628E-02 3.324340E-02 3.934978E-02 + 1.827404E-02 2.310211E-02 2.840695E-02 3.414466E-02 4.026706E-02 + 1.854658E-02 2.334280E-02 2.860711E-02 3.430404E-02 4.039153E-02 + 1.847556E-02 2.319184E-02 2.837798E-02 3.399268E-02 4.000535E-02 + 1.833122E-02 2.294753E-02 2.803920E-02 3.355821E-02 3.947579E-02 + 1.821225E-02 2.271689E-02 2.770139E-02 3.311838E-02 3.893091E-02 + 1.819958E-02 2.259176E-02 2.746074E-02 3.277028E-02 3.847976E-02 + 1.831469E-02 2.259780E-02 2.735170E-02 3.254734E-02 3.814755E-02 + 1.857085E-02 2.275315E-02 2.738807E-02 3.247038E-02 3.795447E-02 + 1.900356E-02 2.309104E-02 2.761654E-02 3.258024E-02 3.794883E-02 + 1.964859E-02 2.364745E-02 2.806830E-02 3.291861E-02 3.817191E-02 + 2.053116E-02 2.444731E-02 2.876567E-02 3.350477E-02 3.864626E-02 + 2.166493E-02 2.550992E-02 2.971951E-02 3.435620E-02 3.938036E-02 + 2.306905E-02 2.686113E-02 3.097719E-02 3.549456E-02 4.040767E-02 + 2.477022E-02 2.852655E-02 3.255932E-02 3.694681E-02 4.174223E-02 + 2.680725E-02 3.052850E-02 3.449652E-02 3.876412E-02 4.342086E-02 + 2.924882E-02 3.293791E-02 3.685259E-02 4.101518E-02 4.553105E-02 + 3.217136E-02 3.582907E-02 3.970152E-02 4.377899E-02 4.814908E-02 + 3.565218E-02 3.929410E-02 4.313087E-02 4.713790E-02 5.136427E-02 + 3.974184E-02 4.337628E-02 4.717591E-02 5.110249E-02 5.520618E-02 + 4.447032E-02 4.808614E-02 5.183996E-02 5.568856E-02 5.969210E-02 + 4.988542E-02 5.346513E-02 5.717212E-02 6.095458E-02 6.484708E-02 + 5.604974E-02 5.960969E-02 6.324213E-02 6.696309E-02 7.074999E-02 + 6.304987E-02 6.659985E-02 7.016969E-02 7.381402E-02 7.748552E-02 + 7.100589E-02 7.455865E-02 7.806577E-02 8.160836E-02 8.516425E-02 + 7.992963E-02 8.347942E-02 8.691784E-02 9.033796E-02 9.378612E-02 + 8.974492E-02 9.330298E-02 9.665229E-02 9.996733E-02 1.033102E-01 + 1.006414E-01 1.042053E-01 1.074314E-01 1.106209E-01 1.138243E-01 + 1.130610E-01 1.165354E-01 1.196135E-01 1.226529E-01 1.256329E-01 + 1.265229E-01 1.298199E-01 1.326875E-01 1.355020E-01 1.382494E-01 + 1.404589E-01 1.435709E-01 1.462217E-01 1.487836E-01 1.512915E-01 + 1.547070E-01 1.575658E-01 1.599726E-01 1.623189E-01 1.645922E-01 + 1.690077E-01 1.715736E-01 1.737309E-01 1.758379E-01 1.778778E-01 + 1.831582E-01 1.853853E-01 1.872968E-01 1.891837E-01 1.909501E-01 + 1.969566E-01 1.988426E-01 2.005030E-01 2.022062E-01 2.037738E-01 + 2.105110E-01 2.120228E-01 2.134766E-01 2.149929E-01 2.164145E-01 + 2.206787E-01 2.219378E-01 2.232515E-01 2.246048E-01 2.259665E-01 + 1.311370E-01 1.719049E-01 2.130017E-01 2.536615E-01 2.930829E-01 + 1.316604E-01 1.724362E-01 2.135269E-01 2.541792E-01 2.935833E-01 + 1.321872E-01 1.729714E-01 2.140560E-01 2.546977E-01 2.940869E-01 + 1.327165E-01 1.735071E-01 2.145941E-01 2.552164E-01 2.945798E-01 + 1.332622E-01 1.740613E-01 2.151439E-01 2.557544E-01 2.951001E-01 + 1.337974E-01 1.746013E-01 2.156848E-01 2.562785E-01 2.956047E-01 + 1.343316E-01 1.751498E-01 2.162238E-01 2.568057E-01 2.961097E-01 + 1.349017E-01 1.757310E-01 2.167970E-01 2.573692E-01 2.966497E-01 + 1.356109E-01 1.764514E-01 2.175042E-01 2.580608E-01 2.973156E-01 + 1.372921E-01 1.781535E-01 2.192007E-01 2.597166E-01 2.989007E-01 + 1.412266E-01 1.821279E-01 2.231693E-01 2.635890E-01 3.026006E-01 + 1.472047E-01 1.881179E-01 2.291867E-01 2.693801E-01 3.081330E-01 + 1.538056E-01 1.947506E-01 2.357745E-01 2.757267E-01 3.142025E-01 + 1.606468E-01 2.016340E-01 2.425131E-01 2.822462E-01 3.204190E-01 + 1.676839E-01 2.086837E-01 2.494063E-01 2.889260E-01 3.267250E-01 + 1.747068E-01 2.156938E-01 2.562572E-01 2.955552E-01 3.330181E-01 + 1.819681E-01 2.229181E-01 2.633157E-01 3.023127E-01 3.393909E-01 + 1.893967E-01 2.303790E-01 2.704919E-01 3.091695E-01 3.458916E-01 + 1.969452E-01 2.378571E-01 2.776916E-01 3.160423E-01 3.523905E-01 + 2.046657E-01 2.453807E-01 2.849811E-01 3.229607E-01 3.588834E-01 + 2.126327E-01 2.531546E-01 2.924850E-01 3.300490E-01 3.654737E-01 + 2.206607E-01 2.609702E-01 2.999802E-01 3.371247E-01 3.720479E-01 + 2.284975E-01 2.685070E-01 3.071690E-01 3.439174E-01 3.783613E-01 + 2.341053E-01 2.738466E-01 3.122204E-01 3.486959E-01 3.827687E-01 + 2.345166E-01 2.741256E-01 3.124264E-01 3.488435E-01 3.828754E-01 + 2.315844E-01 2.710905E-01 3.094373E-01 3.459116E-01 3.801208E-01 + 2.275684E-01 2.669338E-01 3.052936E-01 3.418714E-01 3.762690E-01 + 2.233603E-01 2.624226E-01 3.006940E-01 3.373605E-01 3.719545E-01 + 2.196345E-01 2.583001E-01 2.963366E-01 3.329977E-01 3.677570E-01 + 2.166546E-01 2.547084E-01 2.924132E-01 3.289639E-01 3.637811E-01 + 2.145994E-01 2.518438E-01 2.890663E-01 3.253831E-01 3.601495E-01 + 2.137969E-01 2.501144E-01 2.866723E-01 3.226226E-01 3.571201E-01 + 2.144854E-01 2.498544E-01 2.855906E-01 3.209281E-01 3.550453E-01 + 2.167208E-01 2.512105E-01 2.859679E-01 3.205686E-01 3.540487E-01 + 2.205616E-01 2.541432E-01 2.879748E-01 3.216375E-01 3.542889E-01 + 2.261560E-01 2.588803E-01 2.915807E-01 3.242636E-01 3.559447E-01 + 2.335487E-01 2.653648E-01 2.968725E-01 3.284653E-01 3.590840E-01 + 2.429114E-01 2.737904E-01 3.041329E-01 3.344520E-01 3.639117E-01 + 2.546384E-01 2.845492E-01 3.137221E-01 3.425961E-01 3.708034E-01 + 2.689931E-01 2.978252E-01 3.259579E-01 3.531783E-01 3.800438E-01 + 2.865675E-01 3.141421E-01 3.410586E-01 3.668233E-01 3.922393E-01 + 3.073104E-01 3.332726E-01 3.590459E-01 3.832397E-01 4.070673E-01 + 3.306830E-01 3.550337E-01 3.796349E-01 4.022763E-01 4.242787E-01 + 3.565549E-01 3.795002E-01 4.024930E-01 4.235973E-01 4.437719E-01 + 3.847555E-01 4.063587E-01 4.279454E-01 4.472355E-01 4.657203E-01 + 4.158123E-01 4.357085E-01 4.555058E-01 4.736189E-01 4.900776E-01 + 4.496787E-01 4.674528E-01 4.851852E-01 5.019821E-01 5.168563E-01 + 4.856585E-01 5.010151E-01 5.167539E-01 5.318372E-01 5.454026E-01 + 5.229744E-01 5.355992E-01 5.493626E-01 5.626736E-01 5.747771E-01 + 5.614560E-01 5.712019E-01 5.831313E-01 5.944359E-01 6.049543E-01 + 6.012313E-01 6.087934E-01 6.190443E-01 6.280113E-01 6.372975E-01 + 6.407988E-01 6.468113E-01 6.553628E-01 6.626316E-01 6.701511E-01 + 6.793234E-01 6.841018E-01 6.912547E-01 6.970673E-01 7.033085E-01 + 7.171722E-01 7.211120E-01 7.271342E-01 7.316691E-01 7.366354E-01 + 7.549495E-01 7.580378E-01 7.633495E-01 7.670350E-01 7.705965E-01 + 7.935466E-01 7.959697E-01 8.003525E-01 8.033006E-01 8.056596E-01 + 8.343276E-01 8.360693E-01 8.391062E-01 8.412595E-01 8.427457E-01 + 8.759172E-01 8.769684E-01 8.782656E-01 8.788447E-01 8.792414E-01 + 9.069301E-01 9.067588E-01 9.068959E-01 9.064230E-01 9.054829E-01 + 9.434097E-01 1.107384E+00 1.253989E+00 1.377112E+00 1.482615E+00 + 9.456541E-01 1.109390E+00 1.255699E+00 1.378589E+00 1.483884E+00 + 9.479234E-01 1.111442E+00 1.257365E+00 1.380026E+00 1.485146E+00 + 9.501985E-01 1.113499E+00 1.259053E+00 1.381476E+00 1.486375E+00 + 9.525155E-01 1.115587E+00 1.260833E+00 1.382985E+00 1.487660E+00 + 9.547833E-01 1.117600E+00 1.262547E+00 1.384457E+00 1.488918E+00 + 9.570083E-01 1.119679E+00 1.264227E+00 1.385920E+00 1.490179E+00 + 9.594134E-01 1.121857E+00 1.266036E+00 1.387477E+00 1.491560E+00 + 9.624018E-01 1.124549E+00 1.268243E+00 1.389405E+00 1.493216E+00 + 9.694649E-01 1.130919E+00 1.273572E+00 1.394014E+00 1.497213E+00 + 9.859563E-01 1.145884E+00 1.285943E+00 1.404684E+00 1.506603E+00 + 1.010535E+00 1.168130E+00 1.304338E+00 1.420381E+00 1.520691E+00 + 1.036913E+00 1.192145E+00 1.324130E+00 1.437175E+00 1.535653E+00 + 1.063637E+00 1.215989E+00 1.344291E+00 1.454301E+00 1.550778E+00 + 1.090586E+00 1.239561E+00 1.364521E+00 1.471586E+00 1.566159E+00 + 1.117318E+00 1.262245E+00 1.384015E+00 1.488393E+00 1.581347E+00 + 1.144660E+00 1.284860E+00 1.403513E+00 1.505440E+00 1.596773E+00 + 1.172097E+00 1.307480E+00 1.422822E+00 1.522740E+00 1.612495E+00 + 1.199258E+00 1.329789E+00 1.441701E+00 1.539453E+00 1.628046E+00 + 1.225425E+00 1.352072E+00 1.460605E+00 1.556182E+00 1.643902E+00 + 1.251490E+00 1.374362E+00 1.479733E+00 1.573177E+00 1.660045E+00 + 1.276523E+00 1.395849E+00 1.498355E+00 1.590130E+00 1.675933E+00 + 1.300242E+00 1.415997E+00 1.516047E+00 1.606392E+00 1.690970E+00 + 1.316410E+00 1.429708E+00 1.528170E+00 1.617451E+00 1.701207E+00 + 1.316673E+00 1.429661E+00 1.527963E+00 1.617176E+00 1.700820E+00 + 1.306363E+00 1.420479E+00 1.519447E+00 1.609307E+00 1.693349E+00 + 1.291857E+00 1.407628E+00 1.507651E+00 1.598442E+00 1.683108E+00 + 1.275521E+00 1.393006E+00 1.494479E+00 1.586147E+00 1.671490E+00 + 1.259043E+00 1.378331E+00 1.481354E+00 1.573797E+00 1.659687E+00 + 1.243041E+00 1.364114E+00 1.468483E+00 1.561640E+00 1.647897E+00 + 1.228128E+00 1.350816E+00 1.456287E+00 1.550047E+00 1.636502E+00 + 1.215164E+00 1.339030E+00 1.445050E+00 1.538926E+00 1.625815E+00 + 1.205633E+00 1.329592E+00 1.435955E+00 1.529313E+00 1.616457E+00 + 1.200593E+00 1.322864E+00 1.428973E+00 1.521550E+00 1.608377E+00 + 1.200958E+00 1.319423E+00 1.423884E+00 1.515535E+00 1.601816E+00 + 1.206926E+00 1.319886E+00 1.422238E+00 1.511773E+00 1.597034E+00 + 1.218944E+00 1.325027E+00 1.424234E+00 1.511486E+00 1.594662E+00 + 1.237851E+00 1.336009E+00 1.431355E+00 1.515046E+00 1.595245E+00 + 1.264046E+00 1.353680E+00 1.444421E+00 1.524238E+00 1.599957E+00 + 1.299189E+00 1.380272E+00 1.463520E+00 1.538902E+00 1.610653E+00 + 1.344681E+00 1.415394E+00 1.489899E+00 1.559723E+00 1.626804E+00 + 1.396147E+00 1.458864E+00 1.522390E+00 1.587189E+00 1.647904E+00 + 1.454862E+00 1.508739E+00 1.561638E+00 1.620536E+00 1.675661E+00 + 1.519924E+00 1.566344E+00 1.609243E+00 1.661798E+00 1.710453E+00 + 1.590956E+00 1.629539E+00 1.664145E+00 1.708857E+00 1.751547E+00 + 1.664983E+00 1.699122E+00 1.726242E+00 1.762164E+00 1.801457E+00 + 1.744397E+00 1.772666E+00 1.796014E+00 1.823223E+00 1.856181E+00 + 1.827615E+00 1.849368E+00 1.870771E+00 1.889305E+00 1.917770E+00 + 1.910388E+00 1.930082E+00 1.947891E+00 1.961987E+00 1.983439E+00 + 1.994196E+00 2.014500E+00 2.028713E+00 2.041253E+00 2.058121E+00 + 2.085924E+00 2.104303E+00 2.115893E+00 2.128854E+00 2.140622E+00 + 2.179483E+00 2.194586E+00 2.203943E+00 2.214178E+00 2.225272E+00 + 2.269159E+00 2.280597E+00 2.287143E+00 2.295967E+00 2.303565E+00 + 2.352570E+00 2.358479E+00 2.359916E+00 2.365010E+00 2.369089E+00 + 2.423340E+00 2.421988E+00 2.417273E+00 2.417059E+00 2.417980E+00 + 2.471697E+00 2.465930E+00 2.455540E+00 2.449671E+00 2.445068E+00 + 2.486221E+00 2.476675E+00 2.463674E+00 2.451318E+00 2.441964E+00 + 2.465482E+00 2.454380E+00 2.439428E+00 2.423434E+00 2.410396E+00 + 2.430204E+00 2.417045E+00 2.401879E+00 2.384330E+00 2.368612E+00 + 4.761051E+00 5.192549E+00 5.562284E+00 5.946665E+00 6.301933E+00 + 4.766863E+00 5.197559E+00 5.567250E+00 5.951692E+00 6.306146E+00 + 4.772686E+00 5.202574E+00 5.572045E+00 5.956586E+00 6.310404E+00 + 4.778669E+00 5.207533E+00 5.576796E+00 5.961379E+00 6.314624E+00 + 4.784682E+00 5.212652E+00 5.582069E+00 5.966507E+00 6.318852E+00 + 4.790508E+00 5.217713E+00 5.587209E+00 5.971391E+00 6.323094E+00 + 4.796177E+00 5.222628E+00 5.592122E+00 5.975997E+00 6.327338E+00 + 4.802462E+00 5.227853E+00 5.597399E+00 5.981317E+00 6.331777E+00 + 4.810263E+00 5.234236E+00 5.603782E+00 5.987554E+00 6.337252E+00 + 4.828928E+00 5.249595E+00 5.620331E+00 6.002527E+00 6.350413E+00 + 4.871419E+00 5.285276E+00 5.657973E+00 6.038231E+00 6.381229E+00 + 4.935128E+00 5.339145E+00 5.715100E+00 6.091339E+00 6.427485E+00 + 5.004642E+00 5.396199E+00 5.775265E+00 6.149082E+00 6.478753E+00 + 5.076186E+00 5.455599E+00 5.838674E+00 6.206628E+00 6.530877E+00 + 5.147229E+00 5.518315E+00 5.902785E+00 6.264160E+00 6.580867E+00 + 5.214353E+00 5.583803E+00 5.967564E+00 6.319930E+00 6.628251E+00 + 5.279847E+00 5.652620E+00 6.032513E+00 6.376290E+00 6.675861E+00 + 5.345509E+00 5.722525E+00 6.097960E+00 6.433283E+00 6.724223E+00 + 5.409715E+00 5.790179E+00 6.162287E+00 6.490874E+00 6.770940E+00 + 5.475962E+00 5.859294E+00 6.225666E+00 6.546772E+00 6.815948E+00 + 5.547205E+00 5.930586E+00 6.288285E+00 6.600865E+00 6.861906E+00 + 5.621410E+00 6.002457E+00 6.350075E+00 6.653248E+00 6.907714E+00 + 5.692108E+00 6.069828E+00 6.408196E+00 6.702381E+00 6.950529E+00 + 5.740097E+00 6.115350E+00 6.447793E+00 6.735047E+00 6.979693E+00 + 5.738080E+00 6.113148E+00 6.445758E+00 6.733370E+00 6.977298E+00 + 5.701933E+00 6.078943E+00 6.415747E+00 6.707790E+00 6.953995E+00 + 5.651869E+00 6.031380E+00 6.375205E+00 6.672660E+00 6.922431E+00 + 5.595455E+00 5.976688E+00 6.327772E+00 6.631584E+00 6.885171E+00 + 5.539065E+00 5.920223E+00 6.279389E+00 6.589787E+00 6.847841E+00 + 5.484551E+00 5.864328E+00 6.230358E+00 6.546017E+00 6.810767E+00 + 5.433723E+00 5.810162E+00 6.179653E+00 6.502729E+00 6.773452E+00 + 5.386327E+00 5.758192E+00 6.130340E+00 6.459223E+00 6.736400E+00 + 5.344250E+00 5.712534E+00 6.084293E+00 6.418979E+00 6.701249E+00 + 5.306535E+00 5.670932E+00 6.041244E+00 6.383450E+00 6.669557E+00 + 5.278070E+00 5.638630E+00 6.004042E+00 6.351076E+00 6.639875E+00 + 5.259433E+00 5.613313E+00 5.971927E+00 6.320849E+00 6.611993E+00 + 5.247994E+00 5.595323E+00 5.943964E+00 6.292184E+00 6.586623E+00 + 5.249805E+00 5.585777E+00 5.924408E+00 6.268320E+00 6.564973E+00 + 5.270100E+00 5.596756E+00 5.919327E+00 6.254418E+00 6.551642E+00 + 5.311661E+00 5.625684E+00 5.936397E+00 6.258217E+00 6.547712E+00 + 5.371933E+00 5.681405E+00 5.975781E+00 6.280954E+00 6.556163E+00 + 5.464576E+00 5.757988E+00 6.034867E+00 6.319456E+00 6.577080E+00 + 5.575370E+00 5.850706E+00 6.112443E+00 6.365795E+00 6.606756E+00 + 5.717961E+00 5.958648E+00 6.199999E+00 6.424051E+00 6.637148E+00 + 5.887014E+00 6.083344E+00 6.293363E+00 6.482690E+00 6.668971E+00 + 6.076072E+00 6.219333E+00 6.398575E+00 6.552184E+00 6.703967E+00 + 6.260879E+00 6.357949E+00 6.507892E+00 6.637249E+00 6.753538E+00 + 6.429095E+00 6.518049E+00 6.614427E+00 6.719760E+00 6.798346E+00 + 6.599439E+00 6.653998E+00 6.716523E+00 6.779639E+00 6.837574E+00 + 6.730010E+00 6.759310E+00 6.785792E+00 6.820417E+00 6.843732E+00 + 6.803397E+00 6.809444E+00 6.803123E+00 6.805002E+00 6.803387E+00 + 6.795094E+00 6.774597E+00 6.742797E+00 6.728629E+00 6.699194E+00 + 6.695225E+00 6.660211E+00 6.611369E+00 6.572491E+00 6.528602E+00 + 6.511720E+00 6.464773E+00 6.406427E+00 6.349290E+00 6.293551E+00 + 6.263284E+00 6.202883E+00 6.138230E+00 6.074916E+00 6.011805E+00 + 5.959409E+00 5.896407E+00 5.826950E+00 5.754879E+00 5.691970E+00 + 5.596566E+00 5.539247E+00 5.470116E+00 5.403627E+00 5.334958E+00 + 5.194571E+00 5.144756E+00 5.086638E+00 5.029044E+00 4.968533E+00 + 4.884605E+00 4.841651E+00 4.793632E+00 4.748590E+00 4.695385E+00 + 2.459725E+01 2.580674E+01 2.642815E+01 2.651871E+01 2.631100E+01 + 2.461464E+01 2.581962E+01 2.643166E+01 2.651759E+01 2.630669E+01 + 2.463107E+01 2.583074E+01 2.643506E+01 2.651638E+01 2.630232E+01 + 2.464924E+01 2.584167E+01 2.643821E+01 2.651719E+01 2.629779E+01 + 2.466891E+01 2.585290E+01 2.644135E+01 2.651540E+01 2.629303E+01 + 2.468683E+01 2.586592E+01 2.644425E+01 2.651373E+01 2.628832E+01 + 2.470440E+01 2.587643E+01 2.644690E+01 2.651011E+01 2.628369E+01 + 2.472283E+01 2.588740E+01 2.644978E+01 2.651026E+01 2.627848E+01 + 2.474532E+01 2.590106E+01 2.645323E+01 2.650823E+01 2.627198E+01 + 2.480441E+01 2.593358E+01 2.646117E+01 2.650371E+01 2.625597E+01 + 2.494123E+01 2.600555E+01 2.647582E+01 2.649372E+01 2.621781E+01 + 2.514540E+01 2.610745E+01 2.649350E+01 2.646761E+01 2.615421E+01 + 2.533690E+01 2.621377E+01 2.650338E+01 2.643374E+01 2.608701E+01 + 2.551693E+01 2.630511E+01 2.651386E+01 2.638566E+01 2.602118E+01 + 2.569177E+01 2.638125E+01 2.651491E+01 2.633900E+01 2.594822E+01 + 2.585111E+01 2.643297E+01 2.650457E+01 2.628075E+01 2.587388E+01 + 2.598666E+01 2.646682E+01 2.648545E+01 2.621204E+01 2.579326E+01 + 2.610925E+01 2.648767E+01 2.645103E+01 2.613493E+01 2.569681E+01 + 2.622628E+01 2.649675E+01 2.640896E+01 2.606004E+01 2.558759E+01 + 2.631754E+01 2.650138E+01 2.635399E+01 2.597864E+01 2.546898E+01 + 2.638908E+01 2.649036E+01 2.629242E+01 2.589286E+01 2.534151E+01 + 2.643176E+01 2.646970E+01 2.621843E+01 2.580757E+01 2.520718E+01 + 2.644809E+01 2.643517E+01 2.613682E+01 2.570840E+01 2.506790E+01 + 2.645236E+01 2.640157E+01 2.607300E+01 2.562773E+01 2.496661E+01 + 2.643989E+01 2.638979E+01 2.606245E+01 2.562006E+01 2.495896E+01 + 2.641679E+01 2.639146E+01 2.608584E+01 2.565735E+01 2.501340E+01 + 2.638288E+01 2.639415E+01 2.611821E+01 2.570385E+01 2.508942E+01 + 2.633672E+01 2.638885E+01 2.614845E+01 2.574726E+01 2.516744E+01 + 2.627335E+01 2.636591E+01 2.616899E+01 2.577779E+01 2.523925E+01 + 2.618947E+01 2.633679E+01 2.617723E+01 2.580311E+01 2.530006E+01 + 2.609113E+01 2.629270E+01 2.617699E+01 2.582218E+01 2.534847E+01 + 2.597399E+01 2.623564E+01 2.616405E+01 2.582379E+01 2.538110E+01 + 2.585373E+01 2.617432E+01 2.612275E+01 2.581078E+01 2.539248E+01 + 2.571627E+01 2.609529E+01 2.606932E+01 2.578083E+01 2.537536E+01 + 2.557296E+01 2.599750E+01 2.599457E+01 2.572480E+01 2.533339E+01 + 2.540634E+01 2.587412E+01 2.589666E+01 2.564658E+01 2.526640E+01 + 2.523690E+01 2.572708E+01 2.577379E+01 2.553880E+01 2.516447E+01 + 2.505492E+01 2.555115E+01 2.562208E+01 2.540021E+01 2.502747E+01 + 2.486956E+01 2.535050E+01 2.543312E+01 2.521988E+01 2.484858E+01 + 2.469022E+01 2.511346E+01 2.519454E+01 2.497873E+01 2.462569E+01 + 2.454063E+01 2.485908E+01 2.493337E+01 2.468273E+01 2.434909E+01 + 2.436159E+01 2.458881E+01 2.460275E+01 2.434176E+01 2.401060E+01 + 2.413165E+01 2.425459E+01 2.421587E+01 2.393881E+01 2.361135E+01 + 2.377299E+01 2.384875E+01 2.375278E+01 2.348010E+01 2.315224E+01 + 2.328120E+01 2.333471E+01 2.319639E+01 2.295806E+01 2.262373E+01 + 2.272243E+01 2.273081E+01 2.254122E+01 2.230225E+01 2.197167E+01 + 2.212684E+01 2.202759E+01 2.182167E+01 2.151676E+01 2.119675E+01 + 2.133729E+01 2.116235E+01 2.097441E+01 2.067155E+01 2.031114E+01 + 2.035051E+01 2.018731E+01 1.998828E+01 1.971164E+01 1.937774E+01 + 1.929921E+01 1.906919E+01 1.885910E+01 1.860711E+01 1.830153E+01 + 1.806350E+01 1.781666E+01 1.758282E+01 1.735041E+01 1.709375E+01 + 1.668103E+01 1.643764E+01 1.623128E+01 1.600573E+01 1.580183E+01 + 1.525322E+01 1.503270E+01 1.484668E+01 1.466361E+01 1.449763E+01 + 1.385951E+01 1.365474E+01 1.351557E+01 1.338172E+01 1.323952E+01 + 1.252291E+01 1.235355E+01 1.222644E+01 1.213751E+01 1.202464E+01 + 1.124411E+01 1.110404E+01 1.101411E+01 1.095566E+01 1.088327E+01 + 1.007833E+01 9.974082E+00 9.912308E+00 9.862543E+00 9.823222E+00 + 9.041271E+00 8.960795E+00 8.914022E+00 8.877297E+00 8.838248E+00 + 8.332622E+00 8.255205E+00 8.202912E+00 8.166590E+00 8.133246E+00 + 1.280996E+02 1.149638E+02 1.041247E+02 9.522850E+01 8.763086E+01 + 1.279154E+02 1.148229E+02 1.040011E+02 9.512094E+01 8.753852E+01 + 1.277310E+02 1.146707E+02 1.038773E+02 9.501331E+01 8.744610E+01 + 1.275452E+02 1.145176E+02 1.037529E+02 9.492781E+01 8.735329E+01 + 1.273533E+02 1.143595E+02 1.036244E+02 9.481993E+01 8.725744E+01 + 1.271665E+02 1.142056E+02 1.034993E+02 9.471494E+01 8.716419E+01 + 1.269779E+02 1.140504E+02 1.033733E+02 9.460920E+01 8.707035E+01 + 1.267768E+02 1.138850E+02 1.032389E+02 9.449647E+01 8.697033E+01 + 1.265291E+02 1.136824E+02 1.030734E+02 9.435754E+01 8.684707E+01 + 1.259391E+02 1.131985E+02 1.026788E+02 9.402636E+01 8.655907E+01 + 1.245674E+02 1.121001E+02 1.017699E+02 9.325655E+01 8.589552E+01 + 1.225894E+02 1.104665E+02 1.004359E+02 9.209884E+01 8.489798E+01 + 1.204318E+02 1.087054E+02 9.897929E+01 9.088396E+01 8.381075E+01 + 1.183222E+02 1.069183E+02 9.753824E+01 8.962113E+01 8.270927E+01 + 1.162249E+02 1.051196E+02 9.609888E+01 8.838039E+01 8.164240E+01 + 1.141818E+02 1.034816E+02 9.470356E+01 8.715894E+01 8.061197E+01 + 1.121466E+02 1.018100E+02 9.329635E+01 8.593206E+01 7.961317E+01 + 1.101223E+02 1.001569E+02 9.186229E+01 8.469666E+01 7.863046E+01 + 1.081295E+02 9.853256E+01 9.048641E+01 8.346470E+01 7.766310E+01 + 1.061328E+02 9.691554E+01 8.908087E+01 8.224446E+01 7.669121E+01 + 1.041823E+02 9.530175E+01 8.769987E+01 8.106048E+01 7.570277E+01 + 1.023235E+02 9.373909E+01 8.631972E+01 7.993518E+01 7.471187E+01 + 1.005727E+02 9.223715E+01 8.502596E+01 7.887188E+01 7.375786E+01 + 9.934565E+01 9.120362E+01 8.411331E+01 7.816021E+01 7.308465E+01 + 9.927821E+01 9.114933E+01 8.407026E+01 7.812220E+01 7.305602E+01 + 9.997743E+01 9.173820E+01 8.460383E+01 7.853439E+01 7.345566E+01 + 1.009492E+02 9.259360E+01 8.534649E+01 7.912066E+01 7.401123E+01 + 1.020567E+02 9.354478E+01 8.618354E+01 7.981414E+01 7.463112E+01 + 1.031277E+02 9.447661E+01 8.701584E+01 8.049276E+01 7.523296E+01 + 1.041957E+02 9.536866E+01 8.778973E+01 8.118148E+01 7.579621E+01 + 1.052104E+02 9.618489E+01 8.852531E+01 8.181141E+01 7.631025E+01 + 1.060517E+02 9.687052E+01 8.915701E+01 8.238701E+01 7.674003E+01 + 1.066635E+02 9.738757E+01 8.960680E+01 8.281817E+01 7.705659E+01 + 1.069749E+02 9.766396E+01 8.988970E+01 8.308191E+01 7.725639E+01 + 1.069840E+02 9.768786E+01 8.996493E+01 8.319254E+01 7.733789E+01 + 1.066698E+02 9.745407E+01 8.980594E+01 8.310549E+01 7.726835E+01 + 1.059805E+02 9.692831E+01 8.941527E+01 8.281737E+01 7.701695E+01 + 1.048507E+02 9.602972E+01 8.871555E+01 8.229712E+01 7.658441E+01 + 1.031088E+02 9.466089E+01 8.762874E+01 8.146270E+01 7.590232E+01 + 1.007254E+02 9.277503E+01 8.606103E+01 8.024313E+01 7.487111E+01 + 9.754772E+01 9.024891E+01 8.402687E+01 7.855429E+01 7.344583E+01 + 9.362754E+01 8.720987E+01 8.153504E+01 7.646225E+01 7.162579E+01 + 8.923207E+01 8.364370E+01 7.854237E+01 7.390516E+01 6.943814E+01 + 8.462412E+01 7.968670E+01 7.513152E+01 7.086356E+01 6.685590E+01 + 7.954148E+01 7.528943E+01 7.131883E+01 6.745340E+01 6.392516E+01 + 7.389304E+01 7.034677E+01 6.702754E+01 6.369370E+01 6.063693E+01 + 6.792901E+01 6.500562E+01 6.232658E+01 5.967302E+01 5.700535E+01 + 6.184015E+01 5.955436E+01 5.737343E+01 5.520675E+01 5.305197E+01 + 5.592684E+01 5.409177E+01 5.230363E+01 5.058804E+01 4.887795E+01 + 5.013733E+01 4.878495E+01 4.729220E+01 4.598356E+01 4.457611E+01 + 4.442773E+01 4.338236E+01 4.239765E+01 4.125590E+01 4.007674E+01 + 3.912120E+01 3.833929E+01 3.755622E+01 3.663009E+01 3.573434E+01 + 3.432252E+01 3.364679E+01 3.301828E+01 3.232858E+01 3.163164E+01 + 2.982587E+01 2.938094E+01 2.887928E+01 2.832279E+01 2.775584E+01 + 2.581150E+01 2.548998E+01 2.512480E+01 2.463957E+01 2.416627E+01 + 2.221663E+01 2.194147E+01 2.166685E+01 2.130347E+01 2.088619E+01 + 1.900273E+01 1.875449E+01 1.851961E+01 1.825080E+01 1.792728E+01 + 1.613863E+01 1.591684E+01 1.571057E+01 1.550876E+01 1.526923E+01 + 1.420144E+01 1.400488E+01 1.381506E+01 1.364817E+01 1.346125E+01 + +Band: 4, gas: 6, k-terms: 6 + 5.118026E-12 7.392871E-12 9.445487E-12 1.133543E-11 1.311199E-11 + 6.131239E-12 8.854488E-12 1.132635E-11 1.358736E-11 1.570748E-11 + 7.343020E-12 1.060955E-11 1.357477E-11 1.628426E-11 1.881190E-11 + 8.793965E-12 1.270484E-11 1.627450E-11 1.952244E-11 2.252548E-11 + 1.053866E-11 1.521509E-11 1.950773E-11 2.339123E-11 2.696883E-11 + 1.262481E-11 1.821739E-11 2.337032E-11 2.803279E-11 3.228268E-11 + 1.512092E-11 2.181058E-11 2.799275E-11 3.358416E-11 3.864709E-11 + 1.812343E-11 2.610735E-11 3.353807E-11 4.023202E-11 4.628823E-11 + 2.174445E-11 3.126622E-11 4.019817E-11 4.821655E-11 5.548232E-11 + 2.633696E-11 3.768954E-11 4.841250E-11 5.800436E-11 6.670766E-11 + 3.258632E-11 4.619325E-11 5.896172E-11 7.037968E-11 8.075173E-11 + 4.102719E-11 5.737879E-11 7.248810E-11 8.599265E-11 9.830041E-11 + 5.180798E-11 7.137903E-11 8.928146E-11 1.052308E-10 1.197665E-10 + 6.536045E-11 8.871995E-11 1.099398E-10 1.287678E-10 1.458824E-10 + 8.237650E-11 1.102261E-10 1.352781E-10 1.575611E-10 1.776633E-10 + 1.035512E-10 1.367233E-10 1.662427E-10 1.925902E-10 2.162425E-10 + 1.300689E-10 1.695117E-10 2.042342E-10 2.353531E-10 2.632563E-10 + 1.631969E-10 2.099371E-10 2.507791E-10 2.875301E-10 3.205061E-10 + 2.044164E-10 2.595106E-10 3.074905E-10 3.509800E-10 3.899998E-10 + 2.556855E-10 3.203321E-10 3.766586E-10 4.281601E-10 4.742579E-10 + 3.195124E-10 3.951652E-10 4.610187E-10 5.219054E-10 5.764476E-10 + 3.981888E-10 4.864444E-10 5.642594E-10 6.359271E-10 7.006360E-10 + 4.939997E-10 5.977131E-10 6.893390E-10 7.736707E-10 8.503161E-10 + 6.042832E-10 7.274991E-10 8.355804E-10 9.352011E-10 1.026967E-09 + 7.177294E-10 8.672050E-10 9.961131E-10 1.115190E-09 1.226003E-09 + 8.338040E-10 1.018301E-09 1.173864E-09 1.317943E-09 1.451849E-09 + 9.603638E-10 1.185719E-09 1.376891E-09 1.551711E-09 1.711995E-09 + 1.101626E-09 1.371612E-09 1.610698E-09 1.821232E-09 2.015123E-09 + 1.263518E-09 1.584195E-09 1.880392E-09 2.135287E-09 2.371687E-09 + 1.446240E-09 1.825439E-09 2.190088E-09 2.501891E-09 2.790537E-09 + 1.656288E-09 2.100690E-09 2.542862E-09 2.929188E-09 3.279147E-09 + 1.898775E-09 2.418917E-09 2.951365E-09 3.428972E-09 3.849264E-09 + 2.181105E-09 2.791535E-09 3.425687E-09 4.012584E-09 4.522634E-09 + 2.507307E-09 3.221516E-09 3.974560E-09 4.691496E-09 5.316476E-09 + 2.890288E-09 3.724837E-09 4.610283E-09 5.480550E-09 6.248249E-09 + 3.341112E-09 4.313593E-09 5.352441E-09 6.399754E-09 7.342999E-09 + 3.866086E-09 4.993460E-09 6.214093E-09 7.462367E-09 8.620874E-09 + 4.470586E-09 5.780525E-09 7.207728E-09 8.691829E-09 1.010213E-08 + 5.176058E-09 6.711228E-09 8.373029E-09 1.012725E-08 1.183095E-08 + 6.007695E-09 7.819733E-09 9.755097E-09 1.181355E-08 1.386407E-08 + 7.011185E-09 9.161632E-09 1.141364E-08 1.382711E-08 1.627559E-08 + 8.218161E-09 1.076679E-08 1.339729E-08 1.621868E-08 1.913781E-08 + 9.631642E-09 1.265560E-08 1.573537E-08 1.903138E-08 2.250185E-08 + 1.128649E-08 1.486766E-08 1.848428E-08 2.231477E-08 2.641944E-08 + 1.323337E-08 1.745330E-08 2.170817E-08 2.617970E-08 3.097183E-08 + 1.555462E-08 2.052770E-08 2.551040E-08 3.075241E-08 3.630131E-08 + 1.841606E-08 2.427467E-08 3.008808E-08 3.624081E-08 4.268801E-08 + 2.189236E-08 2.878126E-08 3.554695E-08 4.276935E-08 5.027818E-08 + 2.597950E-08 3.407334E-08 4.192269E-08 5.039451E-08 5.919384E-08 + 3.121627E-08 4.068941E-08 4.979494E-08 5.977415E-08 7.011211E-08 + 3.950284E-08 5.046373E-08 6.118319E-08 7.301922E-08 8.522836E-08 + 5.093076E-08 6.348043E-08 7.621549E-08 9.031021E-08 1.047412E-07 + 6.520026E-08 7.953099E-08 9.465276E-08 1.113253E-07 1.283031E-07 + 8.251173E-08 9.912046E-08 1.169797E-07 1.365857E-07 1.565228E-07 + 1.033607E-07 1.226823E-07 1.437842E-07 1.668218E-07 1.902063E-07 + 1.284040E-07 1.509609E-07 1.756454E-07 2.025710E-07 2.297221E-07 + 1.586186E-07 1.848550E-07 2.134708E-07 2.445630E-07 2.757604E-07 + 1.942407E-07 2.244835E-07 2.572864E-07 2.927363E-07 3.282649E-07 + 2.234576E-07 2.568234E-07 2.927974E-07 3.315036E-07 3.706159E-07 + 9.457252E-09 1.228115E-08 1.653676E-08 2.278027E-08 3.150633E-08 + 1.118246E-08 1.436552E-08 1.906086E-08 2.588439E-08 3.522808E-08 + 1.322943E-08 1.681785E-08 2.199190E-08 2.947904E-08 3.950087E-08 + 1.566123E-08 1.971415E-08 2.541174E-08 3.361783E-08 4.439327E-08 + 1.855476E-08 2.313289E-08 2.941519E-08 3.842027E-08 5.003256E-08 + 2.199780E-08 2.715940E-08 3.411195E-08 4.396996E-08 5.652471E-08 + 2.609181E-08 3.192882E-08 3.963720E-08 5.042633E-08 6.404812E-08 + 3.094290E-08 3.755224E-08 4.613136E-08 5.794012E-08 7.274333E-08 + 3.673656E-08 4.421654E-08 5.376837E-08 6.671203E-08 8.285046E-08 + 4.380212E-08 5.232708E-08 6.304117E-08 7.733450E-08 9.499244E-08 + 5.271422E-08 6.251622E-08 7.470382E-08 9.075905E-08 1.101958E-07 + 6.389491E-08 7.527974E-08 8.930065E-08 1.074491E-07 1.290281E-07 + 7.750803E-08 9.076366E-08 1.069012E-07 1.273541E-07 1.514114E-07 + 9.398238E-08 1.093515E-07 1.278586E-07 1.509226E-07 1.776590E-07 + 1.138831E-07 1.315949E-07 1.528542E-07 1.788394E-07 2.084742E-07 + 1.377589E-07 1.581429E-07 1.824243E-07 2.116658E-07 2.442985E-07 + 1.664760E-07 1.898676E-07 2.176213E-07 2.504296E-07 2.861664E-07 + 2.009365E-07 2.277472E-07 2.594467E-07 2.961189E-07 3.352688E-07 + 2.422384E-07 2.729216E-07 3.088603E-07 3.496769E-07 3.927123E-07 + 2.918519E-07 3.267880E-07 3.672827E-07 4.127118E-07 4.598107E-07 + 3.512346E-07 3.910571E-07 4.366057E-07 4.869573E-07 5.382249E-07 + 4.221024E-07 4.673795E-07 5.184023E-07 5.739273E-07 6.297499E-07 + 5.061444E-07 5.574105E-07 6.143751E-07 6.752144E-07 7.362080E-07 + 6.030024E-07 6.604032E-07 7.237237E-07 7.903825E-07 8.566594E-07 + 7.101592E-07 7.732241E-07 8.428748E-07 9.159941E-07 9.872463E-07 + 8.315543E-07 8.998246E-07 9.755549E-07 1.055584E-06 1.133936E-06 + 9.732257E-07 1.047212E-06 1.129146E-06 1.216173E-06 1.303064E-06 + 1.140871E-06 1.220201E-06 1.309198E-06 1.403570E-06 1.498778E-06 + 1.340655E-06 1.424340E-06 1.521015E-06 1.623810E-06 1.728082E-06 + 1.580192E-06 1.668239E-06 1.770986E-06 1.882100E-06 1.995258E-06 + 1.862203E-06 1.958342E-06 2.067112E-06 2.186908E-06 2.309372E-06 + 2.196438E-06 2.303069E-06 2.417571E-06 2.546215E-06 2.679614E-06 + 2.593115E-06 2.715079E-06 2.834406E-06 2.971304E-06 3.115657E-06 + 3.067069E-06 3.205157E-06 3.331608E-06 3.474800E-06 3.629801E-06 + 3.634399E-06 3.786413E-06 3.923668E-06 4.069484E-06 4.235823E-06 + 4.314836E-06 4.474768E-06 4.628162E-06 4.777666E-06 4.950483E-06 + 5.124990E-06 5.288563E-06 5.464690E-06 5.619177E-06 5.794042E-06 + 6.084380E-06 6.256706E-06 6.451921E-06 6.620009E-06 6.795197E-06 + 7.219892E-06 7.414614E-06 7.622214E-06 7.811404E-06 7.992393E-06 + 8.569686E-06 8.800043E-06 9.014716E-06 9.231906E-06 9.417308E-06 + 1.017303E-05 1.044753E-05 1.066797E-05 1.090824E-05 1.111163E-05 + 1.206742E-05 1.239657E-05 1.263130E-05 1.289285E-05 1.311986E-05 + 1.429226E-05 1.469721E-05 1.495880E-05 1.523422E-05 1.549077E-05 + 1.689965E-05 1.740245E-05 1.770540E-05 1.798943E-05 1.828052E-05 + 1.993769E-05 2.057512E-05 2.093900E-05 2.122995E-05 2.155610E-05 + 2.347803E-05 2.428483E-05 2.474125E-05 2.505624E-05 2.541168E-05 + 2.762335E-05 2.863854E-05 2.922377E-05 2.957547E-05 2.993852E-05 + 3.246182E-05 3.373968E-05 3.448223E-05 3.489517E-05 3.526917E-05 + 3.808972E-05 3.969798E-05 4.064929E-05 4.113999E-05 4.153947E-05 + 4.476374E-05 4.675099E-05 4.793875E-05 4.851487E-05 4.893568E-05 + 5.316022E-05 5.541764E-05 5.673296E-05 5.731997E-05 5.773605E-05 + 6.349472E-05 6.595838E-05 6.728760E-05 6.780116E-05 6.817121E-05 + 7.602103E-05 7.863926E-05 7.992242E-05 8.031099E-05 8.059358E-05 + 9.130382E-05 9.400024E-05 9.515789E-05 9.534079E-05 9.545927E-05 + 1.100085E-04 1.126910E-04 1.135923E-04 1.133864E-04 1.131837E-04 + 1.327613E-04 1.352381E-04 1.357195E-04 1.349229E-04 1.342567E-04 + 1.602071E-04 1.622533E-04 1.621151E-04 1.605746E-04 1.592632E-04 + 1.929508E-04 1.943973E-04 1.935022E-04 1.910129E-04 1.888147E-04 + 2.217832E-04 2.228543E-04 2.213987E-04 2.181710E-04 2.150252E-04 + 5.468607E-06 7.476747E-06 9.675535E-06 1.225571E-05 1.526290E-05 + 5.518049E-06 7.523393E-06 9.722013E-06 1.230467E-05 1.531375E-05 + 5.573268E-06 7.575264E-06 9.772986E-06 1.235651E-05 1.536678E-05 + 5.635726E-06 7.633123E-06 9.828244E-06 1.241280E-05 1.542331E-05 + 5.706472E-06 7.698588E-06 9.890882E-06 1.247567E-05 1.548754E-05 + 5.787246E-06 7.771665E-06 9.960000E-06 1.254428E-05 1.555533E-05 + 5.879541E-06 7.855128E-06 1.003817E-05 1.261991E-05 1.563107E-05 + 5.987366E-06 7.953186E-06 1.012931E-05 1.270652E-05 1.571636E-05 + 6.118856E-06 8.073505E-06 1.024231E-05 1.281545E-05 1.582279E-05 + 6.313934E-06 8.259932E-06 1.042781E-05 1.300597E-05 1.602092E-05 + 6.635916E-06 8.580471E-06 1.076424E-05 1.336871E-05 1.641511E-05 + 7.076594E-06 9.023700E-06 1.124211E-05 1.389400E-05 1.699397E-05 + 7.574154E-06 9.527871E-06 1.179086E-05 1.449391E-05 1.765178E-05 + 8.116897E-06 1.007625E-05 1.239053E-05 1.514361E-05 1.836040E-05 + 8.708469E-06 1.068025E-05 1.304253E-05 1.584690E-05 1.911901E-05 + 9.346498E-06 1.133342E-05 1.374421E-05 1.659985E-05 1.991937E-05 + 1.004547E-05 1.205646E-05 1.451195E-05 1.742198E-05 2.078969E-05 + 1.081136E-05 1.285420E-05 1.535451E-05 1.832181E-05 2.173890E-05 + 1.165143E-05 1.373333E-05 1.627338E-05 1.929561E-05 2.275909E-05 + 1.258139E-05 1.470418E-05 1.728647E-05 2.036044E-05 2.386303E-05 + 1.361671E-05 1.578199E-05 1.841169E-05 2.153150E-05 2.507760E-05 + 1.476619E-05 1.697012E-05 1.965306E-05 2.281652E-05 2.640250E-05 + 1.602300E-05 1.826077E-05 2.099426E-05 2.419835E-05 2.782456E-05 + 1.730552E-05 1.955653E-05 2.230745E-05 2.552890E-05 2.916349E-05 + 1.847834E-05 2.067477E-05 2.338296E-05 2.656074E-05 3.016047E-05 + 1.965765E-05 2.176326E-05 2.437783E-05 2.747397E-05 3.100313E-05 + 2.098679E-05 2.298850E-05 2.549444E-05 2.849483E-05 3.193695E-05 + 2.252801E-05 2.441350E-05 2.680978E-05 2.970327E-05 3.305947E-05 + 2.434341E-05 2.611781E-05 2.839747E-05 3.118894E-05 3.445614E-05 + 2.647757E-05 2.813023E-05 3.030550E-05 3.299117E-05 3.617382E-05 + 2.897173E-05 3.051921E-05 3.256179E-05 3.515692E-05 3.826156E-05 + 3.191299E-05 3.333003E-05 3.525586E-05 3.773808E-05 4.076729E-05 + 3.537494E-05 3.665715E-05 3.845342E-05 4.083572E-05 4.378600E-05 + 3.945875E-05 4.058716E-05 4.222791E-05 4.451929E-05 4.738291E-05 + 4.427813E-05 4.522893E-05 4.671233E-05 4.888498E-05 5.166883E-05 + 4.998232E-05 5.076078E-05 5.204139E-05 5.406849E-05 5.677745E-05 + 5.678807E-05 5.737557E-05 5.838495E-05 6.023442E-05 6.285890E-05 + 6.499358E-05 6.533013E-05 6.603139E-05 6.762697E-05 7.013385E-05 + 7.496844E-05 7.495012E-05 7.531558E-05 7.655470E-05 7.888279E-05 + 8.714881E-05 8.663029E-05 8.661315E-05 8.740091E-05 8.946635E-05 + 1.020315E-04 1.009002E-04 1.004416E-04 1.007027E-04 1.023526E-04 + 1.202734E-04 1.183858E-04 1.173608E-04 1.169711E-04 1.180444E-04 + 1.425913E-04 1.397272E-04 1.379336E-04 1.368259E-04 1.371409E-04 + 1.696993E-04 1.656092E-04 1.628911E-04 1.610113E-04 1.603181E-04 + 2.024524E-04 1.968232E-04 1.929731E-04 1.902391E-04 1.884000E-04 + 2.417484E-04 2.343460E-04 2.290556E-04 2.252361E-04 2.221649E-04 + 2.885832E-04 2.790301E-04 2.720101E-04 2.668466E-04 2.626807E-04 + 3.443506E-04 3.322311E-04 3.232126E-04 3.163957E-04 3.109543E-04 + 4.108006E-04 3.956209E-04 3.842475E-04 3.754862E-04 3.683393E-04 + 4.891312E-04 4.704675E-04 4.564876E-04 4.454131E-04 4.363709E-04 + 5.776593E-04 5.560362E-04 5.396467E-04 5.264708E-04 5.155705E-04 + 6.792142E-04 6.550301E-04 6.363680E-04 6.210093E-04 6.082280E-04 + 7.983624E-04 7.715977E-04 7.501055E-04 7.324155E-04 7.174580E-04 + 9.380206E-04 9.084990E-04 8.838761E-04 8.634757E-04 8.462132E-04 + 1.101766E-03 1.068753E-03 1.040657E-03 1.017652E-03 9.978550E-04 + 1.292997E-03 1.256025E-03 1.224444E-03 1.198575E-03 1.176157E-03 + 1.513195E-03 1.472144E-03 1.437329E-03 1.408288E-03 1.383118E-03 + 1.764290E-03 1.719161E-03 1.681225E-03 1.649171E-03 1.621238E-03 + 1.979958E-03 1.931485E-03 1.890527E-03 1.856252E-03 1.826055E-03 + 4.219458E-04 5.757390E-04 7.740424E-04 1.026804E-03 1.337574E-03 + 4.237814E-04 5.779103E-04 7.770146E-04 1.030438E-03 1.342010E-03 + 4.256464E-04 5.801881E-04 7.800073E-04 1.034112E-03 1.346475E-03 + 4.275860E-04 5.824076E-04 7.830235E-04 1.037832E-03 1.350966E-03 + 4.295783E-04 5.848066E-04 7.861714E-04 1.041684E-03 1.355787E-03 + 4.315966E-04 5.871881E-04 7.892693E-04 1.045507E-03 1.360357E-03 + 4.336228E-04 5.896203E-04 7.924494E-04 1.049364E-03 1.364972E-03 + 4.358303E-04 5.922477E-04 7.958665E-04 1.053519E-03 1.369913E-03 + 4.385676E-04 5.955691E-04 8.000628E-04 1.058681E-03 1.376044E-03 + 4.448010E-04 6.031037E-04 8.099831E-04 1.070939E-03 1.390691E-03 + 4.591679E-04 6.207281E-04 8.334028E-04 1.099940E-03 1.425176E-03 + 4.814135E-04 6.487274E-04 8.693720E-04 1.144535E-03 1.478268E-03 + 5.066450E-04 6.811648E-04 9.105618E-04 1.194766E-03 1.538628E-03 + 5.334544E-04 7.165344E-04 9.540012E-04 1.248164E-03 1.603450E-03 + 5.624941E-04 7.544502E-04 1.001012E-03 1.304499E-03 1.673449E-03 + 5.920079E-04 7.936621E-04 1.049193E-03 1.362969E-03 1.745753E-03 + 6.243299E-04 8.363581E-04 1.101515E-03 1.425778E-03 1.823441E-03 + 6.603327E-04 8.821778E-04 1.157141E-03 1.492262E-03 1.906306E-03 + 6.990468E-04 9.298823E-04 1.215359E-03 1.562079E-03 1.992150E-03 + 7.406480E-04 9.803450E-04 1.276989E-03 1.637215E-03 2.083163E-03 + 7.859556E-04 1.035000E-03 1.342577E-03 1.717960E-03 2.181849E-03 + 8.336714E-04 1.093319E-03 1.412182E-03 1.803479E-03 2.284622E-03 + 8.833008E-04 1.152908E-03 1.482582E-03 1.889781E-03 2.389143E-03 + 9.222377E-04 1.198237E-03 1.536026E-03 1.954198E-03 2.466400E-03 + 9.309869E-04 1.205075E-03 1.542375E-03 1.960047E-03 2.471989E-03 + 9.206388E-04 1.187496E-03 1.517488E-03 1.926988E-03 2.428998E-03 + 9.074271E-04 1.164375E-03 1.483544E-03 1.881653E-03 2.371402E-03 + 8.970563E-04 1.142743E-03 1.448671E-03 1.834430E-03 2.310100E-03 + 8.969377E-04 1.128709E-03 1.420104E-03 1.792915E-03 2.253890E-03 + 9.080283E-04 1.125738E-03 1.401476E-03 1.759638E-03 2.206086E-03 + 9.341388E-04 1.135883E-03 1.396712E-03 1.736154E-03 2.168131E-03 + 9.746188E-04 1.158462E-03 1.409268E-03 1.728988E-03 2.145484E-03 + 1.032312E-03 1.199977E-03 1.439111E-03 1.741733E-03 2.143114E-03 + 1.108350E-03 1.263077E-03 1.490023E-03 1.778189E-03 2.162522E-03 + 1.204927E-03 1.350899E-03 1.564478E-03 1.840798E-03 2.205425E-03 + 1.325075E-03 1.463286E-03 1.663335E-03 1.933894E-03 2.280338E-03 + 1.472634E-03 1.604724E-03 1.792256E-03 2.058561E-03 2.388306E-03 + 1.651854E-03 1.778925E-03 1.959287E-03 2.217271E-03 2.536582E-03 + 1.870554E-03 1.996940E-03 2.170932E-03 2.416478E-03 2.734713E-03 + 2.138137E-03 2.263368E-03 2.433584E-03 2.671648E-03 2.991335E-03 + 2.468593E-03 2.590259E-03 2.761834E-03 2.994202E-03 3.315849E-03 + 2.868675E-03 2.991528E-03 3.164840E-03 3.395691E-03 3.705062E-03 + 3.355368E-03 3.475611E-03 3.653593E-03 3.877388E-03 4.168107E-03 + 3.931280E-03 4.054703E-03 4.226506E-03 4.440380E-03 4.712607E-03 + 4.617918E-03 4.743587E-03 4.893832E-03 5.094411E-03 5.358443E-03 + 5.428032E-03 5.543109E-03 5.678136E-03 5.869027E-03 6.113420E-03 + 6.370825E-03 6.464635E-03 6.598025E-03 6.767995E-03 6.984966E-03 + 7.456076E-03 7.540518E-03 7.654941E-03 7.807493E-03 7.989748E-03 + 8.714109E-03 8.767498E-03 8.858938E-03 8.982197E-03 9.151654E-03 + 1.013361E-02 1.014734E-02 1.021222E-02 1.031627E-02 1.045329E-02 + 1.169950E-02 1.168800E-02 1.173074E-02 1.180866E-02 1.192168E-02 + 1.338901E-02 1.335359E-02 1.338399E-02 1.342770E-02 1.351064E-02 + 1.517133E-02 1.511899E-02 1.511553E-02 1.513636E-02 1.518492E-02 + 1.699491E-02 1.691293E-02 1.689463E-02 1.688854E-02 1.691201E-02 + 1.878501E-02 1.869694E-02 1.865775E-02 1.862710E-02 1.863535E-02 + 2.044991E-02 2.038702E-02 2.032660E-02 2.027463E-02 2.027243E-02 + 2.184635E-02 2.179914E-02 2.173941E-02 2.170824E-02 2.168760E-02 + 2.285603E-02 2.282258E-02 2.279272E-02 2.275954E-02 2.275064E-02 + 2.330109E-02 2.329819E-02 2.329749E-02 2.326883E-02 2.328835E-02 + 1.283545E-02 1.973002E-02 2.709976E-02 3.445810E-02 4.161768E-02 + 1.291975E-02 1.981755E-02 2.719491E-02 3.455376E-02 4.170744E-02 + 1.300435E-02 1.991142E-02 2.729014E-02 3.464947E-02 4.179719E-02 + 1.308929E-02 1.999971E-02 2.738549E-02 3.474524E-02 4.188695E-02 + 1.317725E-02 2.009771E-02 2.748394E-02 3.484406E-02 4.197951E-02 + 1.326302E-02 2.019309E-02 2.757962E-02 3.494004E-02 4.206935E-02 + 1.334929E-02 2.028885E-02 2.767554E-02 3.503620E-02 4.215930E-02 + 1.344120E-02 2.039092E-02 2.777764E-02 3.513849E-02 4.225492E-02 + 1.355504E-02 2.051830E-02 2.789686E-02 3.526470E-02 4.237284E-02 + 1.382884E-02 2.082279E-02 2.820167E-02 3.556863E-02 4.265606E-02 + 1.447403E-02 2.153304E-02 2.891362E-02 3.627368E-02 4.331307E-02 + 1.546358E-02 2.261922E-02 2.998808E-02 3.733848E-02 4.429402E-02 + 1.656179E-02 2.381418E-02 3.116868E-02 3.848070E-02 4.538236E-02 + 1.772568E-02 2.504048E-02 3.238460E-02 3.965895E-02 4.648936E-02 + 1.894670E-02 2.628958E-02 3.365274E-02 4.083823E-02 4.761010E-02 + 2.016723E-02 2.753767E-02 3.490159E-02 4.202952E-02 4.871398E-02 + 2.145960E-02 2.883471E-02 3.619136E-02 4.323112E-02 4.984521E-02 + 2.279873E-02 3.016048E-02 3.750172E-02 4.443990E-02 5.098290E-02 + 2.414744E-02 3.148927E-02 3.878796E-02 4.565541E-02 5.211128E-02 + 2.550272E-02 3.285103E-02 4.009011E-02 4.688456E-02 5.324062E-02 + 2.690670E-02 3.425057E-02 4.140826E-02 4.812805E-02 5.439813E-02 + 2.831047E-02 3.566564E-02 4.273474E-02 4.936038E-02 5.554390E-02 + 2.968435E-02 3.702165E-02 4.397167E-02 5.053396E-02 5.662991E-02 + 3.063466E-02 3.795399E-02 4.484029E-02 5.133120E-02 5.735995E-02 + 3.063446E-02 3.794567E-02 4.482537E-02 5.131183E-02 5.733892E-02 + 2.998291E-02 3.730866E-02 4.421891E-02 5.074651E-02 5.681196E-02 + 2.910687E-02 3.642013E-02 4.340270E-02 4.994456E-02 5.607549E-02 + 2.811682E-02 3.541892E-02 4.246314E-02 4.904894E-02 5.522633E-02 + 2.714124E-02 3.442364E-02 4.150021E-02 4.814642E-02 5.436119E-02 + 2.618710E-02 3.346474E-02 4.057444E-02 4.724866E-02 5.352781E-02 + 2.526990E-02 3.253543E-02 3.968410E-02 4.636517E-02 5.269345E-02 + 2.444931E-02 3.167775E-02 3.884592E-02 4.556551E-02 5.191383E-02 + 2.374094E-02 3.092702E-02 3.808315E-02 4.484013E-02 5.119780E-02 + 2.315956E-02 3.030500E-02 3.743059E-02 4.422937E-02 5.057049E-02 + 2.271166E-02 2.979045E-02 3.688340E-02 4.369751E-02 5.000972E-02 + 2.246075E-02 2.939346E-02 3.646511E-02 4.326015E-02 4.955040E-02 + 2.240780E-02 2.916910E-02 3.613981E-02 4.291258E-02 4.917712E-02 + 2.259139E-02 2.906823E-02 3.594951E-02 4.267497E-02 4.891888E-02 + 2.309406E-02 2.926736E-02 3.597713E-02 4.263206E-02 4.882321E-02 + 2.392293E-02 2.982069E-02 3.629143E-02 4.282491E-02 4.894010E-02 + 2.523664E-02 3.081862E-02 3.696221E-02 4.332665E-02 4.934707E-02 + 2.705505E-02 3.220161E-02 3.803725E-02 4.417730E-02 5.001503E-02 + 2.926946E-02 3.393094E-02 3.944661E-02 4.524427E-02 5.092843E-02 + 3.206314E-02 3.610127E-02 4.117962E-02 4.659649E-02 5.203613E-02 + 3.517111E-02 3.869561E-02 4.325962E-02 4.832387E-02 5.334123E-02 + 3.863221E-02 4.178933E-02 4.575261E-02 5.043075E-02 5.493688E-02 + 4.258719E-02 4.534549E-02 4.869273E-02 5.275810E-02 5.689374E-02 + 4.697233E-02 4.901032E-02 5.178108E-02 5.529005E-02 5.895211E-02 + 5.113764E-02 5.248227E-02 5.489024E-02 5.779524E-02 6.092324E-02 + 5.482625E-02 5.604766E-02 5.788670E-02 6.022966E-02 6.279875E-02 + 5.820432E-02 5.935744E-02 6.066553E-02 6.266427E-02 6.464057E-02 + 6.085059E-02 6.179501E-02 6.276572E-02 6.445936E-02 6.599701E-02 + 6.246263E-02 6.309213E-02 6.402517E-02 6.536893E-02 6.658885E-02 + 6.298151E-02 6.348192E-02 6.434799E-02 6.521966E-02 6.617272E-02 + 6.221713E-02 6.266885E-02 6.338032E-02 6.406536E-02 6.479946E-02 + 6.002325E-02 6.054182E-02 6.128435E-02 6.210447E-02 6.269516E-02 + 5.693498E-02 5.757579E-02 5.828573E-02 5.924520E-02 5.988421E-02 + 5.323487E-02 5.398714E-02 5.478655E-02 5.569097E-02 5.639445E-02 + 5.014153E-02 5.091948E-02 5.180954E-02 5.257571E-02 5.324959E-02 + 2.230124E-01 2.367984E-01 2.430859E-01 2.443415E-01 2.424556E-01 + 2.232516E-01 2.369165E-01 2.431316E-01 2.443294E-01 2.424195E-01 + 2.234891E-01 2.370331E-01 2.431763E-01 2.443166E-01 2.423828E-01 + 2.237247E-01 2.371483E-01 2.432199E-01 2.443030E-01 2.423454E-01 + 2.239658E-01 2.372656E-01 2.432637E-01 2.442881E-01 2.423061E-01 + 2.241979E-01 2.373779E-01 2.433049E-01 2.442726E-01 2.422672E-01 + 2.244281E-01 2.374887E-01 2.433448E-01 2.442561E-01 2.422273E-01 + 2.246676E-01 2.376049E-01 2.433859E-01 2.442376E-01 2.421842E-01 + 2.249660E-01 2.377464E-01 2.434353E-01 2.442137E-01 2.421303E-01 + 2.256774E-01 2.380830E-01 2.435531E-01 2.441693E-01 2.420017E-01 + 2.272803E-01 2.388321E-01 2.438008E-01 2.440303E-01 2.417304E-01 + 2.295281E-01 2.398679E-01 2.440904E-01 2.437891E-01 2.412784E-01 + 2.317552E-01 2.408619E-01 2.442929E-01 2.434831E-01 2.407245E-01 + 2.338018E-01 2.417702E-01 2.443822E-01 2.431304E-01 2.401165E-01 + 2.356505E-01 2.425751E-01 2.443554E-01 2.427031E-01 2.394562E-01 + 2.372513E-01 2.432088E-01 2.442166E-01 2.422242E-01 2.387728E-01 + 2.386665E-01 2.436991E-01 2.439858E-01 2.417059E-01 2.380248E-01 + 2.399206E-01 2.440402E-01 2.436742E-01 2.411382E-01 2.372316E-01 + 2.409860E-01 2.442282E-01 2.433138E-01 2.404896E-01 2.364067E-01 + 2.419374E-01 2.442709E-01 2.428795E-01 2.397922E-01 2.355511E-01 + 2.427316E-01 2.441696E-01 2.423522E-01 2.390143E-01 2.346148E-01 + 2.433231E-01 2.439278E-01 2.417613E-01 2.382127E-01 2.336193E-01 + 2.437057E-01 2.435936E-01 2.411830E-01 2.373730E-01 2.326168E-01 + 2.438460E-01 2.433087E-01 2.407089E-01 2.367627E-01 2.319045E-01 + 2.437536E-01 2.432311E-01 2.406429E-01 2.367069E-01 2.318616E-01 + 2.434970E-01 2.432841E-01 2.408435E-01 2.370169E-01 2.322631E-01 + 2.430926E-01 2.433794E-01 2.410954E-01 2.374545E-01 2.328223E-01 + 2.425241E-01 2.434273E-01 2.413516E-01 2.379109E-01 2.334329E-01 + 2.418156E-01 2.433651E-01 2.415960E-01 2.383076E-01 2.339877E-01 + 2.409929E-01 2.431779E-01 2.417572E-01 2.386416E-01 2.344635E-01 + 2.400411E-01 2.428539E-01 2.418000E-01 2.388978E-01 2.348475E-01 + 2.390016E-01 2.423838E-01 2.417027E-01 2.390397E-01 2.351215E-01 + 2.378921E-01 2.417785E-01 2.415288E-01 2.390369E-01 2.352731E-01 + 2.366853E-01 2.410547E-01 2.412361E-01 2.388830E-01 2.352863E-01 + 2.353921E-01 2.402321E-01 2.407670E-01 2.386055E-01 2.351272E-01 + 2.339840E-01 2.392611E-01 2.400999E-01 2.381707E-01 2.348056E-01 + 2.324097E-01 2.381328E-01 2.392532E-01 2.375136E-01 2.342988E-01 + 2.306424E-01 2.367874E-01 2.381868E-01 2.366376E-01 2.335528E-01 + 2.288501E-01 2.352062E-01 2.369011E-01 2.354877E-01 2.325422E-01 + 2.271780E-01 2.333822E-01 2.352870E-01 2.340141E-01 2.311848E-01 + 2.256043E-01 2.312794E-01 2.332641E-01 2.321318E-01 2.294056E-01 + 2.237962E-01 2.289865E-01 2.307651E-01 2.297995E-01 2.271678E-01 + 2.216724E-01 2.264605E-01 2.277404E-01 2.269496E-01 2.244162E-01 + 2.191345E-01 2.232202E-01 2.241288E-01 2.234435E-01 2.210494E-01 + 2.159541E-01 2.191626E-01 2.200255E-01 2.191364E-01 2.169752E-01 + 2.117815E-01 2.143861E-01 2.150101E-01 2.140072E-01 2.119634E-01 + 2.062913E-01 2.087408E-01 2.089167E-01 2.079701E-01 2.059334E-01 + 1.993311E-01 2.017206E-01 2.018448E-01 2.007440E-01 1.988642E-01 + 1.913587E-01 1.933084E-01 1.936022E-01 1.923876E-01 1.906602E-01 + 1.822977E-01 1.834666E-01 1.838405E-01 1.828119E-01 1.814525E-01 + 1.717311E-01 1.724329E-01 1.726708E-01 1.720161E-01 1.709886E-01 + 1.596840E-01 1.602714E-01 1.605584E-01 1.603100E-01 1.596132E-01 + 1.465944E-01 1.474273E-01 1.479132E-01 1.478803E-01 1.475468E-01 + 1.330466E-01 1.342143E-01 1.348736E-01 1.350801E-01 1.350945E-01 + 1.195636E-01 1.208855E-01 1.217534E-01 1.222948E-01 1.225001E-01 + 1.066279E-01 1.080117E-01 1.088438E-01 1.095669E-01 1.099893E-01 + 9.425062E-02 9.559166E-02 9.650411E-02 9.716675E-02 9.769305E-02 + 8.247985E-02 8.372685E-02 8.469516E-02 8.543751E-02 8.607936E-02 + 7.397463E-02 7.515432E-02 7.618684E-02 7.696943E-02 7.768533E-02 + +Band: 5, gas: 1, k-terms: 11 + 8.842579E-09 1.099088E-08 1.505702E-08 2.235619E-08 3.469213E-08 + 1.067225E-08 1.317657E-08 1.786053E-08 2.622684E-08 4.028997E-08 + 1.287948E-08 1.580320E-08 2.119970E-08 3.079304E-08 4.685275E-08 + 1.554865E-08 1.896302E-08 2.517475E-08 3.618360E-08 5.446198E-08 + 1.877011E-08 2.276007E-08 2.991600E-08 4.253171E-08 6.333970E-08 + 2.264743E-08 2.730888E-08 3.556650E-08 5.003829E-08 7.374459E-08 + 2.733658E-08 3.277719E-08 4.231700E-08 5.889233E-08 8.590820E-08 + 3.300540E-08 3.936763E-08 5.036927E-08 6.934286E-08 1.001206E-07 + 3.988215E-08 4.732874E-08 6.004285E-08 8.181551E-08 1.170381E-07 + 4.835171E-08 5.715430E-08 7.207397E-08 9.737009E-08 1.379826E-07 + 5.907216E-08 6.976418E-08 8.776005E-08 1.179730E-07 1.659705E-07 + 7.267381E-08 8.594526E-08 1.082059E-07 1.451330E-07 2.029175E-07 + 8.959842E-08 1.061969E-07 1.337985E-07 1.791438E-07 2.489165E-07 + 1.104215E-07 1.313041E-07 1.655635E-07 2.211538E-07 3.054479E-07 + 1.361953E-07 1.623517E-07 2.049418E-07 2.730296E-07 3.743750E-07 + 1.678902E-07 2.006524E-07 2.533162E-07 3.364602E-07 4.583092E-07 + 2.072661E-07 2.480848E-07 3.131960E-07 4.144901E-07 5.608344E-07 + 2.561089E-07 3.068989E-07 3.872223E-07 5.104995E-07 6.862799E-07 + 3.163787E-07 3.794262E-07 4.785187E-07 6.281258E-07 8.386699E-07 + 3.906515E-07 4.691832E-07 5.909511E-07 7.724688E-07 1.024326E-06 + 4.827915E-07 5.803895E-07 7.298858E-07 9.499074E-07 1.251362E-06 + 5.961653E-07 7.177705E-07 9.010548E-07 1.167207E-06 1.527414E-06 + 7.352642E-07 8.855451E-07 1.108929E-06 1.429967E-06 1.856039E-06 + 8.982873E-07 1.079428E-06 1.346007E-06 1.721746E-06 2.224675E-06 + 1.074609E-06 1.281494E-06 1.583815E-06 2.009045E-06 2.581805E-06 + 1.270117E-06 1.498529E-06 1.830972E-06 2.298761E-06 2.932787E-06 + 1.496604E-06 1.746331E-06 2.105577E-06 2.616406E-06 3.311512E-06 + 1.761933E-06 2.035268E-06 2.425320E-06 2.979357E-06 3.735601E-06 + 2.081419E-06 2.376255E-06 2.804448E-06 3.405974E-06 4.226708E-06 + 2.462130E-06 2.788864E-06 3.255096E-06 3.909284E-06 4.803819E-06 + 2.921335E-06 3.282066E-06 3.791685E-06 4.506161E-06 5.481757E-06 + 3.477150E-06 3.869802E-06 4.433234E-06 5.217972E-06 6.285678E-06 + 4.155518E-06 4.584370E-06 5.202500E-06 6.068169E-06 7.243662E-06 + 4.978366E-06 5.447734E-06 6.132411E-06 7.087924E-06 8.388265E-06 + 5.975435E-06 6.489260E-06 7.254376E-06 8.309874E-06 9.753229E-06 + 7.192639E-06 7.740676E-06 8.596791E-06 9.775247E-06 1.137270E-05 + 8.665901E-06 9.251636E-06 1.020072E-05 1.151740E-05 1.329964E-05 + 1.044408E-05 1.108460E-05 1.213603E-05 1.360762E-05 1.559232E-05 + 1.261851E-05 1.329778E-05 1.446827E-05 1.612598E-05 1.834027E-05 + 1.525140E-05 1.598790E-05 1.728634E-05 1.916013E-05 2.164501E-05 + 1.847636E-05 1.925316E-05 2.071012E-05 2.283913E-05 2.565497E-05 + 2.238086E-05 2.322744E-05 2.484341E-05 2.726812E-05 3.050163E-05 + 2.711724E-05 2.803293E-05 2.982662E-05 3.258879E-05 3.628253E-05 + 3.283029E-05 3.382362E-05 3.581715E-05 3.896048E-05 4.316908E-05 + 3.971538E-05 4.076240E-05 4.302554E-05 4.659691E-05 5.139605E-05 + 4.798778E-05 4.913585E-05 5.167504E-05 5.573024E-05 6.121740E-05 + 5.795623E-05 5.924667E-05 6.209442E-05 6.674287E-05 7.306064E-05 + 6.994292E-05 7.138155E-05 7.460107E-05 7.992264E-05 8.719740E-05 + 8.424302E-05 8.577666E-05 8.948041E-05 9.551161E-05 1.038328E-04 + 1.013140E-04 1.030691E-04 1.073301E-04 1.142889E-04 1.239525E-04 + 1.216349E-04 1.243080E-04 1.297731E-04 1.383086E-04 1.500039E-04 + 1.460908E-04 1.499351E-04 1.571441E-04 1.679427E-04 1.822160E-04 + 1.750775E-04 1.805342E-04 1.897927E-04 2.032675E-04 2.206033E-04 + 2.091740E-04 2.166595E-04 2.283918E-04 2.450087E-04 2.658707E-04 + 2.491196E-04 2.590022E-04 2.737853E-04 2.938621E-04 3.186486E-04 + 2.957411E-04 3.083102E-04 3.263499E-04 3.503275E-04 3.793483E-04 + 3.498495E-04 3.655622E-04 3.872924E-04 4.153904E-04 4.492146E-04 + 4.117580E-04 4.310480E-04 4.568496E-04 4.894440E-04 5.283890E-04 + 4.638232E-04 4.855194E-04 5.142449E-04 5.500987E-04 5.929549E-04 + 2.040163E-07 3.283662E-07 5.621796E-07 9.973992E-07 1.746882E-06 + 2.403053E-07 3.816004E-07 6.428117E-07 1.121778E-06 1.945992E-06 + 2.830760E-07 4.438603E-07 7.360478E-07 1.263603E-06 2.171369E-06 + 3.337909E-07 5.167958E-07 8.437802E-07 1.426396E-06 2.424352E-06 + 3.936727E-07 6.022981E-07 9.688610E-07 1.612179E-06 2.706950E-06 + 4.643152E-07 7.022516E-07 1.112493E-06 1.825949E-06 3.025884E-06 + 5.481080E-07 8.195239E-07 1.279447E-06 2.070454E-06 3.385540E-06 + 6.477830E-07 9.574005E-07 1.473058E-06 2.350153E-06 3.790490E-06 + 7.670576E-07 1.120834E-06 1.701307E-06 2.676717E-06 4.261632E-06 + 9.164498E-07 1.324965E-06 1.987811E-06 3.088379E-06 4.853371E-06 + 1.115791E-06 1.600056E-06 2.377535E-06 3.649594E-06 5.669935E-06 + 1.380792E-06 1.966261E-06 2.898249E-06 4.405400E-06 6.763022E-06 + 1.714827E-06 2.425355E-06 3.544814E-06 5.341303E-06 8.102554E-06 + 2.128254E-06 2.993218E-06 4.340157E-06 6.472284E-06 9.717141E-06 + 2.641592E-06 3.689567E-06 5.313379E-06 7.843078E-06 1.165150E-05 + 3.272538E-06 4.544241E-06 6.490285E-06 9.483388E-06 1.394126E-05 + 4.052981E-06 5.594084E-06 7.928050E-06 1.147287E-05 1.668046E-05 + 5.023636E-06 6.889424E-06 9.684794E-06 1.388095E-05 1.996175E-05 + 6.216576E-06 8.472978E-06 1.182047E-05 1.676719E-05 2.385415E-05 + 7.685228E-06 1.041654E-05 1.441014E-05 2.024244E-05 2.849078E-05 + 9.506248E-06 1.280550E-05 1.756413E-05 2.443709E-05 3.404017E-05 + 1.173968E-05 1.571819E-05 2.138492E-05 2.946016E-05 4.061772E-05 + 1.444801E-05 1.922265E-05 2.592964E-05 3.537967E-05 4.831124E-05 + 1.749119E-05 2.309677E-05 3.087947E-05 4.170507E-05 5.641293E-05 + 2.043960E-05 2.674957E-05 3.539747E-05 4.729843E-05 6.339867E-05 + 2.339544E-05 3.029982E-05 3.969523E-05 5.243254E-05 6.961711E-05 + 2.665039E-05 3.412356E-05 4.425183E-05 5.781350E-05 7.601827E-05 + 3.032505E-05 3.840869E-05 4.930601E-05 6.380460E-05 8.303407E-05 + 3.462172E-05 4.341184E-05 5.516974E-05 7.071537E-05 9.107285E-05 + 3.969119E-05 4.931701E-05 6.200519E-05 7.873347E-05 1.004017E-04 + 4.564968E-05 5.623985E-05 6.998279E-05 8.799538E-05 1.112240E-04 + 5.270255E-05 6.436344E-05 7.936843E-05 9.891227E-05 1.239654E-04 + 6.120081E-05 7.402157E-05 9.052802E-05 1.117862E-04 1.389017E-04 + 7.134167E-05 8.553696E-05 1.037783E-04 1.269717E-04 1.564912E-04 + 8.342769E-05 9.911011E-05 1.194583E-04 1.448168E-04 1.770824E-04 + 9.785794E-05 1.151681E-04 1.378299E-04 1.659262E-04 2.012280E-04 + 1.149461E-04 1.341084E-04 1.592515E-04 1.904515E-04 2.291767E-04 + 1.350228E-04 1.566234E-04 1.845072E-04 2.191620E-04 2.617051E-04 + 1.590748E-04 1.832785E-04 2.142827E-04 2.529696E-04 2.999421E-04 + 1.877338E-04 2.150145E-04 2.495368E-04 2.927925E-04 3.450527E-04 + 2.223325E-04 2.529578E-04 2.918502E-04 3.403178E-04 3.985199E-04 + 2.635885E-04 2.982374E-04 3.419005E-04 3.964476E-04 4.618154E-04 + 3.125937E-04 3.516431E-04 4.007094E-04 4.619588E-04 5.353380E-04 + 3.700611E-04 4.141647E-04 4.695551E-04 5.382431E-04 6.204088E-04 + 4.372942E-04 4.869110E-04 5.498254E-04 6.268778E-04 7.191984E-04 + 5.163990E-04 5.723188E-04 6.434363E-04 7.300833E-04 8.340174E-04 + 6.103507E-04 6.737563E-04 7.541254E-04 8.523228E-04 9.700835E-04 + 7.210719E-04 7.927856E-04 8.841509E-04 9.960279E-04 1.129854E-03 + 8.503760E-04 9.305780E-04 1.035164E-03 1.162516E-03 1.315296E-03 + 1.005146E-03 1.096110E-03 1.216026E-03 1.363408E-03 1.540301E-03 + 1.202789E-03 1.313376E-03 1.457512E-03 1.634778E-03 1.848147E-03 + 1.449662E-03 1.585961E-03 1.764455E-03 1.982994E-03 2.245493E-03 + 1.747632E-03 1.919233E-03 2.140568E-03 2.412194E-03 2.735866E-03 + 2.108864E-03 2.325376E-03 2.600003E-03 2.937664E-03 3.336712E-03 + 2.548073E-03 2.820155E-03 3.162254E-03 3.577415E-03 4.063215E-03 + 3.081024E-03 3.417923E-03 3.836852E-03 4.342433E-03 4.926153E-03 + 3.726059E-03 4.138392E-03 4.645996E-03 5.251576E-03 5.947365E-03 + 4.483568E-03 4.983298E-03 5.590106E-03 6.308811E-03 7.130681E-03 + 5.113892E-03 5.678537E-03 6.363102E-03 7.169539E-03 8.093758E-03 + 4.393700E-06 6.901151E-06 1.105390E-05 1.801287E-05 2.968228E-05 + 5.110553E-06 7.914093E-06 1.245757E-05 1.991498E-05 3.218719E-05 + 5.948165E-06 9.091833E-06 1.407103E-05 2.207353E-05 3.503814E-05 + 6.933260E-06 1.045530E-05 1.592528E-05 2.454685E-05 3.827924E-05 + 8.094926E-06 1.204563E-05 1.807017E-05 2.739443E-05 4.197963E-05 + 9.455462E-06 1.389351E-05 2.052952E-05 3.064316E-05 4.616196E-05 + 1.104959E-05 1.604066E-05 2.338900E-05 3.435741E-05 5.089237E-05 + 1.292485E-05 1.854099E-05 2.667636E-05 3.861962E-05 5.627628E-05 + 1.514922E-05 2.147999E-05 3.052019E-05 4.358718E-05 6.253114E-05 + 1.790373E-05 2.511937E-05 3.526076E-05 4.970710E-05 7.028048E-05 + 2.154343E-05 2.992942E-05 4.152315E-05 5.780739E-05 8.060111E-05 + 2.632183E-05 3.618503E-05 4.964636E-05 6.826562E-05 9.394632E-05 + 3.224095E-05 4.384903E-05 5.952198E-05 8.088047E-05 1.098651E-04 + 3.946136E-05 5.310136E-05 7.130780E-05 9.577633E-05 1.285706E-04 + 4.826062E-05 6.425480E-05 8.537993E-05 1.134242E-04 1.504098E-04 + 5.885923E-05 7.757003E-05 1.019934E-04 1.339653E-04 1.756381E-04 + 7.172421E-05 9.354946E-05 1.217489E-04 1.582024E-04 2.051107E-04 + 8.727567E-05 1.126812E-04 1.452033E-04 1.867423E-04 2.394329E-04 + 1.059520E-04 1.354615E-04 1.728606E-04 2.200345E-04 2.791290E-04 + 1.283609E-04 1.626159E-04 2.054443E-04 2.589931E-04 3.251438E-04 + 1.553600E-04 1.949784E-04 2.439706E-04 3.045986E-04 3.786157E-04 + 1.875336E-04 2.332741E-04 2.891718E-04 3.574274E-04 4.403666E-04 + 2.253980E-04 2.779113E-04 3.414374E-04 4.182752E-04 5.108010E-04 + 2.671688E-04 3.267099E-04 3.979610E-04 4.835019E-04 5.854167E-04 + 3.080517E-04 3.738803E-04 4.520037E-04 5.448666E-04 6.551640E-04 + 3.494462E-04 4.210912E-04 5.057584E-04 6.052819E-04 7.229592E-04 + 3.941706E-04 4.720493E-04 5.634510E-04 6.701456E-04 7.951612E-04 + 4.437567E-04 5.285645E-04 6.272861E-04 7.417849E-04 8.751779E-04 + 4.999602E-04 5.928388E-04 6.992945E-04 8.230801E-04 9.659055E-04 + 5.638465E-04 6.655317E-04 7.811423E-04 9.150563E-04 1.069092E-03 + 6.369314E-04 7.477760E-04 8.741794E-04 1.019477E-03 1.186849E-03 + 7.203233E-04 8.419503E-04 9.810348E-04 1.139163E-03 1.321893E-03 + 8.173393E-04 9.505861E-04 1.103812E-03 1.277848E-03 1.478495E-03 + 9.289948E-04 1.076682E-03 1.245582E-03 1.438932E-03 1.660998E-03 + 1.058211E-03 1.222183E-03 1.409823E-03 1.626069E-03 1.874201E-03 + 1.208451E-03 1.391754E-03 1.601698E-03 1.845334E-03 2.124816E-03 + 1.383355E-03 1.589927E-03 1.826487E-03 2.101668E-03 2.418353E-03 + 1.587891E-03 1.822910E-03 2.092247E-03 2.405024E-03 2.767320E-03 + 1.831711E-03 2.100189E-03 2.409680E-03 2.769130E-03 3.182465E-03 + 2.125254E-03 2.435033E-03 2.793121E-03 3.207572E-03 3.682033E-03 + 2.483210E-03 2.843685E-03 3.263896E-03 3.741457E-03 4.285478E-03 + 2.920165E-03 3.340693E-03 3.832622E-03 4.386444E-03 5.010726E-03 + 3.448361E-03 3.939306E-03 4.510983E-03 5.152070E-03 5.871067E-03 + 4.081921E-03 4.652074E-03 5.316032E-03 6.058936E-03 6.884156E-03 + 4.835160E-03 5.496775E-03 6.266850E-03 7.129101E-03 8.081451E-03 + 5.738601E-03 6.502827E-03 7.398608E-03 8.401493E-03 9.499795E-03 + 6.827064E-03 7.720013E-03 8.762923E-03 9.932034E-03 1.120747E-02 + 8.130095E-03 9.173919E-03 1.039359E-02 1.176047E-02 1.323469E-02 + 9.669898E-03 1.088935E-02 1.231246E-02 1.390590E-02 1.562939E-02 + 1.154441E-02 1.297274E-02 1.464788E-02 1.651313E-02 1.852594E-02 + 1.404701E-02 1.577717E-02 1.777986E-02 1.999911E-02 2.237429E-02 + 1.722818E-02 1.934350E-02 2.175529E-02 2.438794E-02 2.720081E-02 + 2.107958E-02 2.364221E-02 2.652544E-02 2.965491E-02 3.295474E-02 + 2.570045E-02 2.878360E-02 3.219999E-02 3.588311E-02 3.977330E-02 + 3.118639E-02 3.485664E-02 3.888682E-02 4.320461E-02 4.775045E-02 + 3.759669E-02 4.190769E-02 4.662655E-02 5.165017E-02 5.694667E-02 + 4.506414E-02 5.009275E-02 5.557414E-02 6.139921E-02 6.754001E-02 + 5.357770E-02 5.941589E-02 6.572796E-02 7.245289E-02 7.952140E-02 + 6.047596E-02 6.693026E-02 7.390968E-02 8.134836E-02 8.915706E-02 + 2.126164E-04 3.494142E-04 5.356047E-04 7.835726E-04 1.118511E-03 + 2.273300E-04 3.659230E-04 5.538352E-04 8.039056E-04 1.141466E-03 + 2.437531E-04 3.845004E-04 5.743110E-04 8.264086E-04 1.167380E-03 + 2.622428E-04 4.054127E-04 5.972769E-04 8.518604E-04 1.196510E-03 + 2.833231E-04 4.290065E-04 6.232994E-04 8.808837E-04 1.230015E-03 + 3.070392E-04 4.554875E-04 6.523428E-04 9.132459E-04 1.267456E-03 + 3.337509E-04 4.851768E-04 6.852381E-04 9.498532E-04 1.309675E-03 + 3.641377E-04 5.188824E-04 7.224694E-04 9.915065E-04 1.357582E-03 + 3.988355E-04 5.574469E-04 7.653358E-04 1.040001E-03 1.414034E-03 + 4.414572E-04 6.055416E-04 8.198893E-04 1.102657E-03 1.488989E-03 + 4.977413E-04 6.704108E-04 8.952749E-04 1.192511E-03 1.599572E-03 + 5.694662E-04 7.537064E-04 9.932858E-04 1.311509E-03 1.749241E-03 + 6.528208E-04 8.503703E-04 1.107845E-03 1.451959E-03 1.927011E-03 + 7.481633E-04 9.610726E-04 1.239704E-03 1.613849E-03 2.133896E-03 + 8.574392E-04 1.088542E-03 1.392039E-03 1.802481E-03 2.373638E-03 + 9.824145E-04 1.234310E-03 1.567354E-03 2.019479E-03 2.648779E-03 + 1.127151E-03 1.404625E-03 1.772951E-03 2.274191E-03 2.970220E-03 + 1.296017E-03 1.604310E-03 2.014846E-03 2.574360E-03 3.343454E-03 + 1.494005E-03 1.839376E-03 2.299871E-03 2.925446E-03 3.771700E-03 + 1.728162E-03 2.118689E-03 2.637880E-03 3.336274E-03 4.264970E-03 + 2.009417E-03 2.453841E-03 3.041207E-03 3.818266E-03 4.834301E-03 + 2.346145E-03 2.854581E-03 3.517306E-03 4.374335E-03 5.484418E-03 + 2.747984E-03 3.325760E-03 4.068134E-03 5.010460E-03 6.215250E-03 + 3.198630E-03 3.844753E-03 4.659889E-03 5.680056E-03 6.968335E-03 + 3.652534E-03 4.347392E-03 5.216721E-03 6.287618E-03 7.631631E-03 + 4.131612E-03 4.863696E-03 5.772928E-03 6.884347E-03 8.261074E-03 + 4.672105E-03 5.443178E-03 6.389698E-03 7.545409E-03 8.943517E-03 + 5.296990E-03 6.114625E-03 7.100859E-03 8.298449E-03 9.733376E-03 + 6.034841E-03 6.909948E-03 7.939614E-03 9.190638E-03 1.067188E-02 + 6.909454E-03 7.847859E-03 8.933491E-03 1.023559E-02 1.178435E-02 + 7.952952E-03 8.955663E-03 1.011332E-02 1.147867E-02 1.309938E-02 + 9.192346E-03 1.027245E-02 1.151904E-02 1.295659E-02 1.465070E-02 + 1.068438E-02 1.184745E-02 1.319248E-02 1.471788E-02 1.649933E-02 + 1.246775E-02 1.373732E-02 1.518527E-02 1.682115E-02 1.870751E-02 + 1.459547E-02 1.599121E-02 1.755344E-02 1.932680E-02 2.133314E-02 + 1.714351E-02 1.868383E-02 2.037655E-02 2.230514E-02 2.444428E-02 + 2.017907E-02 2.189757E-02 2.374683E-02 2.582498E-02 2.812257E-02 + 2.379769E-02 2.572449E-02 2.775062E-02 2.999385E-02 3.249980E-02 + 2.812357E-02 3.028996E-02 3.254669E-02 3.498946E-02 3.769480E-02 + 3.331535E-02 3.577120E-02 3.827708E-02 4.095815E-02 4.388998E-02 + 3.955021E-02 4.235441E-02 4.516765E-02 4.811019E-02 5.132616E-02 + 4.702520E-02 5.024702E-02 5.341195E-02 5.666565E-02 6.019409E-02 + 5.593329E-02 5.964871E-02 6.320940E-02 6.684285E-02 7.069859E-02 + 6.651821E-02 7.081522E-02 7.484061E-02 7.891121E-02 8.313375E-02 + 7.905207E-02 8.405200E-02 8.861411E-02 9.317858E-02 9.786024E-02 + 9.393190E-02 9.976317E-02 1.049899E-01 1.101066E-01 1.153001E-01 + 1.116600E-01 1.184854E-01 1.244838E-01 1.302697E-01 1.360545E-01 + 1.327549E-01 1.406361E-01 1.475468E-01 1.540835E-01 1.604620E-01 + 1.575006E-01 1.666311E-01 1.746092E-01 1.820157E-01 1.892031E-01 + 1.870489E-01 1.975205E-01 2.067442E-01 2.150611E-01 2.231415E-01 + 2.239943E-01 2.358033E-01 2.460111E-01 2.553044E-01 2.642941E-01 + 2.686315E-01 2.817141E-01 2.928610E-01 3.031002E-01 3.131085E-01 + 3.209281E-01 3.351708E-01 3.473789E-01 3.587318E-01 3.696622E-01 + 3.817570E-01 3.972470E-01 4.105360E-01 4.230578E-01 4.350434E-01 + 4.519810E-01 4.687856E-01 4.834222E-01 4.970234E-01 5.101130E-01 + 5.324654E-01 5.506430E-01 5.667375E-01 5.813165E-01 5.954565E-01 + 6.242071E-01 6.439374E-01 6.613634E-01 6.771712E-01 6.924069E-01 + 7.280497E-01 7.495278E-01 7.682082E-01 7.855775E-01 8.017012E-01 + 8.148584E-01 8.373971E-01 8.571441E-01 8.754735E-01 8.923593E-01 + 9.985143E-03 1.824229E-02 3.089734E-02 4.898555E-02 7.339014E-02 + 1.027397E-02 1.856434E-02 3.125192E-02 4.937878E-02 7.383988E-02 + 1.059182E-02 1.892418E-02 3.164718E-02 4.978410E-02 7.430841E-02 + 1.094524E-02 1.933513E-02 3.207902E-02 5.024960E-02 7.480317E-02 + 1.135237E-02 1.979213E-02 3.257256E-02 5.074621E-02 7.536840E-02 + 1.180450E-02 2.030031E-02 3.311883E-02 5.130334E-02 7.597196E-02 + 1.230647E-02 2.086507E-02 3.372597E-02 5.193716E-02 7.663077E-02 + 1.289048E-02 2.152062E-02 3.443254E-02 5.265841E-02 7.736754E-02 + 1.355698E-02 2.229078E-02 3.527231E-02 5.354431E-02 7.827994E-02 + 1.448098E-02 2.341811E-02 3.660071E-02 5.502917E-02 7.999903E-02 + 1.592038E-02 2.527779E-02 3.893501E-02 5.788367E-02 8.343809E-02 + 1.792217E-02 2.791400E-02 4.227663E-02 6.208470E-02 8.848523E-02 + 2.026811E-02 3.096735E-02 4.614237E-02 6.690846E-02 9.427963E-02 + 2.293398E-02 3.441584E-02 5.044500E-02 7.217710E-02 1.006313E-01 + 2.595882E-02 3.827117E-02 5.518736E-02 7.796330E-02 1.074779E-01 + 2.937541E-02 4.247445E-02 6.033906E-02 8.419347E-02 1.148118E-01 + 3.322035E-02 4.722568E-02 6.610554E-02 9.102196E-02 1.228870E-01 + 3.758196E-02 5.254523E-02 7.243964E-02 9.851074E-02 1.317166E-01 + 4.248839E-02 5.843255E-02 7.940430E-02 1.066771E-01 1.411385E-01 + 4.800842E-02 6.499565E-02 8.712409E-02 1.156201E-01 1.513344E-01 + 5.430923E-02 7.240268E-02 9.575585E-02 1.255026E-01 1.626623E-01 + 6.136709E-02 8.063852E-02 1.053294E-01 1.362976E-01 1.748805E-01 + 6.921219E-02 8.962064E-02 1.155994E-01 1.478793E-01 1.878087E-01 + 7.693299E-02 9.835724E-02 1.252401E-01 1.585634E-01 1.993924E-01 + 8.314007E-02 1.047712E-01 1.318953E-01 1.653527E-01 2.061281E-01 + 8.856295E-02 1.101118E-01 1.369093E-01 1.699415E-01 2.101793E-01 + 9.442267E-02 1.158429E-01 1.421503E-01 1.746957E-01 2.140614E-01 + 1.012576E-01 1.224629E-01 1.483785E-01 1.803569E-01 2.188021E-01 + 1.094318E-01 1.305608E-01 1.563503E-01 1.878440E-01 2.254554E-01 + 1.192839E-01 1.405085E-01 1.661880E-01 1.971166E-01 2.341833E-01 + 1.311987E-01 1.526166E-01 1.783825E-01 2.089605E-01 2.455461E-01 + 1.454437E-01 1.671302E-01 1.929501E-01 2.236292E-01 2.597396E-01 + 1.625357E-01 1.845669E-01 2.106111E-01 2.415934E-01 2.774908E-01 + 1.831210E-01 2.057536E-01 2.322548E-01 2.632728E-01 2.993108E-01 + 2.076046E-01 2.309412E-01 2.578714E-01 2.892873E-01 3.255395E-01 + 2.369133E-01 2.610157E-01 2.882972E-01 3.202409E-01 3.568032E-01 + 2.716634E-01 2.965198E-01 3.243393E-01 3.566738E-01 3.937288E-01 + 3.128993E-01 3.384707E-01 3.671389E-01 3.998895E-01 4.372839E-01 + 3.619279E-01 3.887325E-01 4.181839E-01 4.511903E-01 4.892476E-01 + 4.201140E-01 4.483407E-01 4.784620E-01 5.118229E-01 5.504625E-01 + 4.897971E-01 5.192336E-01 5.502972E-01 5.845146E-01 6.233799E-01 + 5.723723E-01 6.031733E-01 6.353853E-01 6.701207E-01 7.092763E-01 + 6.694106E-01 7.016552E-01 7.351226E-01 7.702721E-01 8.091975E-01 + 7.828463E-01 8.169003E-01 8.514596E-01 8.872935E-01 9.267400E-01 + 9.155404E-01 9.511712E-01 9.869267E-01 1.023967E+00 1.063363E+00 + 1.069679E+00 1.106741E+00 1.144487E+00 1.182281E+00 1.221961E+00 + 1.248699E+00 1.287991E+00 1.326868E+00 1.366018E+00 1.405123E+00 + 1.455890E+00 1.497436E+00 1.536231E+00 1.576639E+00 1.616583E+00 + 1.692195E+00 1.735228E+00 1.775571E+00 1.816288E+00 1.857039E+00 + 1.964123E+00 2.008169E+00 2.048483E+00 2.090169E+00 2.130362E+00 + 2.280621E+00 2.324667E+00 2.363707E+00 2.404824E+00 2.445812E+00 + 2.638975E+00 2.679991E+00 2.716339E+00 2.756422E+00 2.797074E+00 + 3.035494E+00 3.069469E+00 3.104652E+00 3.140958E+00 3.181099E+00 + 3.465194E+00 3.492144E+00 3.521251E+00 3.555030E+00 3.593258E+00 + 3.925198E+00 3.943293E+00 3.966165E+00 3.995619E+00 4.029090E+00 + 4.408997E+00 4.419452E+00 4.433713E+00 4.455729E+00 4.483479E+00 + 4.911489E+00 4.911925E+00 4.915796E+00 4.928588E+00 4.948626E+00 + 5.422129E+00 5.414612E+00 5.406370E+00 5.409847E+00 5.423445E+00 + 5.819569E+00 5.801227E+00 5.783570E+00 5.780788E+00 5.784292E+00 + 3.033291E-01 4.996286E-01 7.504628E-01 1.051707E+00 1.402930E+00 + 3.058199E-01 5.028686E-01 7.541673E-01 1.056119E+00 1.407842E+00 + 3.084689E-01 5.061051E-01 7.578707E-01 1.060370E+00 1.413011E+00 + 3.110932E-01 5.094453E-01 7.617629E-01 1.064750E+00 1.417962E+00 + 3.141109E-01 5.130681E-01 7.655837E-01 1.069350E+00 1.423307E+00 + 3.172085E-01 5.165829E-01 7.697515E-01 1.073999E+00 1.428420E+00 + 3.205348E-01 5.199737E-01 7.741263E-01 1.078609E+00 1.433788E+00 + 3.245272E-01 5.241774E-01 7.786333E-01 1.083666E+00 1.439799E+00 + 3.292974E-01 5.293532E-01 7.842479E-01 1.089781E+00 1.446976E+00 + 3.388062E-01 5.404897E-01 7.967354E-01 1.104147E+00 1.463453E+00 + 3.590696E-01 5.651350E-01 8.255210E-01 1.137492E+00 1.501580E+00 + 3.889042E-01 6.022557E-01 8.698867E-01 1.188830E+00 1.558910E+00 + 4.233980E-01 6.447712E-01 9.202350E-01 1.246870E+00 1.623569E+00 + 4.612155E-01 6.905846E-01 9.731009E-01 1.307865E+00 1.692806E+00 + 5.028469E-01 7.394500E-01 1.029631E+00 1.372391E+00 1.763329E+00 + 5.467657E-01 7.904361E-01 1.087773E+00 1.438174E+00 1.836746E+00 + 5.942840E-01 8.461880E-01 1.150074E+00 1.508368E+00 1.914291E+00 + 6.459840E-01 9.054145E-01 1.216072E+00 1.582353E+00 1.996073E+00 + 7.016867E-01 9.676815E-01 1.286632E+00 1.659456E+00 2.082128E+00 + 7.613754E-01 1.035115E+00 1.361250E+00 1.740477E+00 2.171268E+00 + 8.267381E-01 1.107560E+00 1.440385E+00 1.826867E+00 2.265986E+00 + 8.973878E-01 1.183540E+00 1.524828E+00 1.917201E+00 2.363573E+00 + 9.706271E-01 1.262677E+00 1.610914E+00 2.009470E+00 2.461149E+00 + 1.033410E+00 1.329414E+00 1.680048E+00 2.082062E+00 2.535495E+00 + 1.067499E+00 1.359144E+00 1.704518E+00 2.102273E+00 2.551363E+00 + 1.084167E+00 1.368164E+00 1.702768E+00 2.090749E+00 2.531488E+00 + 1.099947E+00 1.376629E+00 1.698013E+00 2.074521E+00 2.502392E+00 + 1.121321E+00 1.388847E+00 1.698040E+00 2.062941E+00 2.476175E+00 + 1.152704E+00 1.412861E+00 1.711500E+00 2.063904E+00 2.463822E+00 + 1.197547E+00 1.450442E+00 1.739693E+00 2.077348E+00 2.464072E+00 + 1.255248E+00 1.502180E+00 1.785187E+00 2.110299E+00 2.482930E+00 + 1.330067E+00 1.571901E+00 1.847098E+00 2.159930E+00 2.522100E+00 + 1.424034E+00 1.662906E+00 1.932791E+00 2.237636E+00 2.586183E+00 + 1.540897E+00 1.778143E+00 2.042903E+00 2.339742E+00 2.675816E+00 + 1.683211E+00 1.916127E+00 2.178924E+00 2.468752E+00 2.792159E+00 + 1.857066E+00 2.084416E+00 2.344797E+00 2.629001E+00 2.940537E+00 + 2.061274E+00 2.287907E+00 2.539429E+00 2.818747E+00 3.124401E+00 + 2.302579E+00 2.524714E+00 2.775406E+00 3.050310E+00 3.344329E+00 + 2.584674E+00 2.809264E+00 3.056934E+00 3.323803E+00 3.615487E+00 + 2.912458E+00 3.144253E+00 3.388172E+00 3.650981E+00 3.936048E+00 + 3.304248E+00 3.536660E+00 3.779436E+00 4.040097E+00 4.317380E+00 + 3.760069E+00 3.989338E+00 4.235680E+00 4.493986E+00 4.761593E+00 + 4.281867E+00 4.518272E+00 4.763710E+00 5.008427E+00 5.272765E+00 + 4.876611E+00 5.120134E+00 5.353823E+00 5.598332E+00 5.856464E+00 + 5.550011E+00 5.802367E+00 6.033606E+00 6.272949E+00 6.521335E+00 + 6.314876E+00 6.568610E+00 6.801292E+00 7.032621E+00 7.262636E+00 + 7.186668E+00 7.432852E+00 7.662559E+00 7.872153E+00 8.087751E+00 + 8.150880E+00 8.407386E+00 8.623736E+00 8.825695E+00 9.007386E+00 + 9.209391E+00 9.464092E+00 9.670206E+00 9.854345E+00 9.999905E+00 + 1.035205E+01 1.060195E+01 1.079338E+01 1.094811E+01 1.106850E+01 + 1.157997E+01 1.180938E+01 1.198902E+01 1.211446E+01 1.220181E+01 + 1.283307E+01 1.303248E+01 1.318378E+01 1.329786E+01 1.335976E+01 + 1.408043E+01 1.423310E+01 1.438357E+01 1.447317E+01 1.452173E+01 + 1.531389E+01 1.544130E+01 1.556196E+01 1.562656E+01 1.568631E+01 + 1.653645E+01 1.663069E+01 1.672202E+01 1.677162E+01 1.679265E+01 + 1.769906E+01 1.777345E+01 1.782574E+01 1.785161E+01 1.783934E+01 + 1.878427E+01 1.881736E+01 1.884477E+01 1.884105E+01 1.880665E+01 + 1.975760E+01 1.975836E+01 1.974668E+01 1.970396E+01 1.964721E+01 + 2.043543E+01 2.041875E+01 2.036582E+01 2.030583E+01 2.020581E+01 + 2.684987E+00 3.986874E+00 5.473487E+00 7.150258E+00 8.992882E+00 + 2.700697E+00 4.006670E+00 5.493774E+00 7.174061E+00 9.018334E+00 + 2.716596E+00 4.026211E+00 5.513657E+00 7.197098E+00 9.042518E+00 + 2.732277E+00 4.044823E+00 5.535030E+00 7.220238E+00 9.066542E+00 + 2.748912E+00 4.065746E+00 5.556082E+00 7.247252E+00 9.091487E+00 + 2.765267E+00 4.085261E+00 5.577695E+00 7.271612E+00 9.116086E+00 + 2.783120E+00 4.104104E+00 5.599860E+00 7.295504E+00 9.141777E+00 + 2.801531E+00 4.126675E+00 5.624369E+00 7.321941E+00 9.169277E+00 + 2.822903E+00 4.152861E+00 5.653265E+00 7.351613E+00 9.202352E+00 + 2.875011E+00 4.214205E+00 5.718753E+00 7.426904E+00 9.282631E+00 + 2.997299E+00 4.353831E+00 5.877881E+00 7.602014E+00 9.460693E+00 + 3.183960E+00 4.569369E+00 6.122627E+00 7.867707E+00 9.733757E+00 + 3.400114E+00 4.814277E+00 6.395052E+00 8.169187E+00 1.003781E+01 + 3.630668E+00 5.064596E+00 6.677052E+00 8.488275E+00 1.035702E+01 + 3.874681E+00 5.334503E+00 6.980512E+00 8.805452E+00 1.068257E+01 + 4.120078E+00 5.602784E+00 7.290730E+00 9.128313E+00 1.100765E+01 + 4.379433E+00 5.894349E+00 7.607143E+00 9.462463E+00 1.134808E+01 + 4.657404E+00 6.198935E+00 7.940169E+00 9.802588E+00 1.169491E+01 + 4.941160E+00 6.513928E+00 8.286825E+00 1.015433E+01 1.205577E+01 + 5.237302E+00 6.849840E+00 8.645647E+00 1.051172E+01 1.242281E+01 + 5.553402E+00 7.203847E+00 9.007887E+00 1.088795E+01 1.278965E+01 + 5.886362E+00 7.556377E+00 9.384267E+00 1.126254E+01 1.315622E+01 + 6.220572E+00 7.917569E+00 9.753614E+00 1.163154E+01 1.352557E+01 + 6.478823E+00 8.180386E+00 1.002584E+01 1.189772E+01 1.378220E+01 + 6.544198E+00 8.227203E+00 1.006100E+01 1.192324E+01 1.379980E+01 + 6.489242E+00 8.138573E+00 9.944597E+00 1.178834E+01 1.366589E+01 + 6.404428E+00 8.013414E+00 9.781156E+00 1.160686E+01 1.347416E+01 + 6.337952E+00 7.880435E+00 9.617272E+00 1.141538E+01 1.325297E+01 + 6.302818E+00 7.795508E+00 9.479508E+00 1.125076E+01 1.305995E+01 + 6.323956E+00 7.765385E+00 9.378303E+00 1.111553E+01 1.290440E+01 + 6.397324E+00 7.780200E+00 9.350381E+00 1.102793E+01 1.278350E+01 + 6.558349E+00 7.880191E+00 9.373810E+00 1.101142E+01 1.270340E+01 + 6.783244E+00 8.061801E+00 9.498573E+00 1.107907E+01 1.271103E+01 + 7.101903E+00 8.335760E+00 9.706014E+00 1.123025E+01 1.281504E+01 + 7.507629E+00 8.703886E+00 1.002380E+01 1.146323E+01 1.300387E+01 + 8.006935E+00 9.161523E+00 1.044421E+01 1.181465E+01 1.329943E+01 + 8.610624E+00 9.731180E+00 1.096139E+01 1.227111E+01 1.369605E+01 + 9.335065E+00 1.040199E+01 1.160101E+01 1.285175E+01 1.420461E+01 + 1.018990E+01 1.121994E+01 1.236645E+01 1.356168E+01 1.483966E+01 + 1.120996E+01 1.220695E+01 1.328968E+01 1.444042E+01 1.563421E+01 + 1.242772E+01 1.337656E+01 1.440148E+01 1.549635E+01 1.660733E+01 + 1.382319E+01 1.473059E+01 1.572368E+01 1.672525E+01 1.775189E+01 + 1.540380E+01 1.627900E+01 1.723524E+01 1.813129E+01 1.905961E+01 + 1.714619E+01 1.798806E+01 1.884280E+01 1.969817E+01 2.052020E+01 + 1.909369E+01 1.987041E+01 2.061679E+01 2.140142E+01 2.214637E+01 + 2.117886E+01 2.185875E+01 2.255048E+01 2.324199E+01 2.388621E+01 + 2.336237E+01 2.395926E+01 2.457197E+01 2.520014E+01 2.577964E+01 + 2.559483E+01 2.616760E+01 2.669551E+01 2.722771E+01 2.775566E+01 + 2.792255E+01 2.842049E+01 2.883985E+01 2.933150E+01 2.979041E+01 + 3.031353E+01 3.073500E+01 3.111642E+01 3.146778E+01 3.190289E+01 + 3.281651E+01 3.319839E+01 3.346413E+01 3.368708E+01 3.404734E+01 + 3.526984E+01 3.557922E+01 3.576935E+01 3.594164E+01 3.619302E+01 + 3.758833E+01 3.780003E+01 3.793563E+01 3.803548E+01 3.817293E+01 + 3.969599E+01 3.978268E+01 3.986590E+01 3.983564E+01 3.989769E+01 + 4.159133E+01 4.155254E+01 4.154748E+01 4.146994E+01 4.142467E+01 + 4.314608E+01 4.302817E+01 4.291285E+01 4.276041E+01 4.266749E+01 + 4.424419E+01 4.408754E+01 4.384611E+01 4.362597E+01 4.338413E+01 + 4.470943E+01 4.450331E+01 4.418574E+01 4.391633E+01 4.360972E+01 + 4.452772E+01 4.433988E+01 4.403530E+01 4.375975E+01 4.346938E+01 + 2.026118E+01 2.711592E+01 3.408753E+01 4.064155E+01 4.662356E+01 + 2.034782E+01 2.721132E+01 3.417369E+01 4.072023E+01 4.670564E+01 + 2.042963E+01 2.730872E+01 3.425804E+01 4.079494E+01 4.677956E+01 + 2.051667E+01 2.740600E+01 3.434346E+01 4.087334E+01 4.684948E+01 + 2.060726E+01 2.749069E+01 3.444053E+01 4.097252E+01 4.691372E+01 + 2.070692E+01 2.758975E+01 3.453470E+01 4.106080E+01 4.698674E+01 + 2.079599E+01 2.768043E+01 3.461151E+01 4.115245E+01 4.706024E+01 + 2.089072E+01 2.779265E+01 3.471236E+01 4.122634E+01 4.713763E+01 + 2.099440E+01 2.792124E+01 3.482887E+01 4.133309E+01 4.723390E+01 + 2.127684E+01 2.819792E+01 3.511672E+01 4.157155E+01 4.748801E+01 + 2.193430E+01 2.889836E+01 3.577327E+01 4.214841E+01 4.802113E+01 + 2.291618E+01 2.991888E+01 3.677721E+01 4.300868E+01 4.882238E+01 + 2.404464E+01 3.105184E+01 3.785238E+01 4.400928E+01 4.969592E+01 + 2.522627E+01 3.220639E+01 3.891846E+01 4.502858E+01 5.059745E+01 + 2.642701E+01 3.338717E+01 4.000491E+01 4.599031E+01 5.153732E+01 + 2.762990E+01 3.455330E+01 4.106783E+01 4.698899E+01 5.239693E+01 + 2.886375E+01 3.577077E+01 4.212987E+01 4.800418E+01 5.329314E+01 + 3.016072E+01 3.701293E+01 4.320895E+01 4.896707E+01 5.421010E+01 + 3.145576E+01 3.821179E+01 4.431135E+01 4.998852E+01 5.513723E+01 + 3.276241E+01 3.943909E+01 4.544981E+01 5.099973E+01 5.606837E+01 + 3.410615E+01 4.064138E+01 4.652051E+01 5.201480E+01 5.697067E+01 + 3.545662E+01 4.181070E+01 4.765503E+01 5.300329E+01 5.782613E+01 + 3.677717E+01 4.294470E+01 4.869514E+01 5.394459E+01 5.876554E+01 + 3.768170E+01 4.372368E+01 4.944572E+01 5.460912E+01 5.935873E+01 + 3.776088E+01 4.376511E+01 4.947633E+01 5.463535E+01 5.936927E+01 + 3.728594E+01 4.334063E+01 4.906492E+01 5.422803E+01 5.901210E+01 + 3.661233E+01 4.272308E+01 4.849807E+01 5.368129E+01 5.847743E+01 + 3.589644E+01 4.203305E+01 4.782368E+01 5.307926E+01 5.789732E+01 + 3.532171E+01 4.142287E+01 4.718937E+01 5.247402E+01 5.732398E+01 + 3.480559E+01 4.092430E+01 4.660430E+01 5.193514E+01 5.682122E+01 + 3.438834E+01 4.045205E+01 4.611384E+01 5.143542E+01 5.633449E+01 + 3.427591E+01 4.016650E+01 4.576334E+01 5.105471E+01 5.588863E+01 + 3.438650E+01 4.012462E+01 4.552914E+01 5.082281E+01 5.558790E+01 + 3.476865E+01 4.036928E+01 4.557971E+01 5.070933E+01 5.543283E+01 + 3.556440E+01 4.089346E+01 4.593669E+01 5.082223E+01 5.543603E+01 + 3.669120E+01 4.164088E+01 4.655515E+01 5.119477E+01 5.566380E+01 + 3.812164E+01 4.280643E+01 4.742858E+01 5.181492E+01 5.609876E+01 + 3.985597E+01 4.424161E+01 4.860998E+01 5.266566E+01 5.671772E+01 + 4.198609E+01 4.606067E+01 5.021027E+01 5.386234E+01 5.768547E+01 + 4.457321E+01 4.834298E+01 5.199456E+01 5.550292E+01 5.889735E+01 + 4.751037E+01 5.099782E+01 5.422262E+01 5.756930E+01 6.062418E+01 + 5.069747E+01 5.388037E+01 5.688618E+01 5.987009E+01 6.276262E+01 + 5.445724E+01 5.712304E+01 5.972861E+01 6.262211E+01 6.514562E+01 + 5.829476E+01 6.069702E+01 6.286751E+01 6.545275E+01 6.790223E+01 + 6.245823E+01 6.448442E+01 6.654860E+01 6.852539E+01 7.079756E+01 + 6.680580E+01 6.850532E+01 7.030963E+01 7.205634E+01 7.383968E+01 + 7.107875E+01 7.273383E+01 7.430590E+01 7.567782E+01 7.711292E+01 + 7.544295E+01 7.682707E+01 7.816455E+01 7.935152E+01 8.045194E+01 + 7.970095E+01 8.071038E+01 8.173685E+01 8.283778E+01 8.366530E+01 + 8.373796E+01 8.429575E+01 8.513963E+01 8.594843E+01 8.652309E+01 + 8.737975E+01 8.781935E+01 8.829395E+01 8.879992E+01 8.925577E+01 + 9.021481E+01 9.068295E+01 9.072814E+01 9.092672E+01 9.128800E+01 + 9.217885E+01 9.231892E+01 9.221044E+01 9.230721E+01 9.225808E+01 + 9.284369E+01 9.285332E+01 9.253778E+01 9.242124E+01 9.201362E+01 + 9.192119E+01 9.177282E+01 9.144696E+01 9.117263E+01 9.092223E+01 + 8.968879E+01 8.954027E+01 8.915617E+01 8.879735E+01 8.837102E+01 + 8.662411E+01 8.627417E+01 8.587688E+01 8.555517E+01 8.510840E+01 + 8.290509E+01 8.243969E+01 8.198025E+01 8.156050E+01 8.109864E+01 + 7.961871E+01 7.916591E+01 7.868267E+01 7.813805E+01 7.765942E+01 + 1.312518E+02 1.548538E+02 1.758758E+02 1.933037E+02 2.083105E+02 + 1.316460E+02 1.551199E+02 1.761087E+02 1.934984E+02 2.084761E+02 + 1.319569E+02 1.553855E+02 1.763371E+02 1.936926E+02 2.086568E+02 + 1.322750E+02 1.557126E+02 1.765701E+02 1.938808E+02 2.088213E+02 + 1.326007E+02 1.559908E+02 1.768098E+02 1.940787E+02 2.089079E+02 + 1.329757E+02 1.563224E+02 1.771021E+02 1.943364E+02 2.090738E+02 + 1.332927E+02 1.565809E+02 1.772523E+02 1.946281E+02 2.092222E+02 + 1.336954E+02 1.569385E+02 1.775000E+02 1.947483E+02 2.093977E+02 + 1.340993E+02 1.574271E+02 1.778025E+02 1.950962E+02 2.096138E+02 + 1.350373E+02 1.582664E+02 1.785970E+02 1.958228E+02 2.103101E+02 + 1.375322E+02 1.604284E+02 1.802673E+02 1.972442E+02 2.116829E+02 + 1.409270E+02 1.635342E+02 1.829751E+02 1.994856E+02 2.132581E+02 + 1.447467E+02 1.668861E+02 1.857275E+02 2.019178E+02 2.153382E+02 + 1.486235E+02 1.704326E+02 1.885964E+02 2.044036E+02 2.174641E+02 + 1.525098E+02 1.737462E+02 1.915100E+02 2.067731E+02 2.197200E+02 + 1.562807E+02 1.769762E+02 1.942734E+02 2.090016E+02 2.218947E+02 + 1.601849E+02 1.801682E+02 1.970878E+02 2.115336E+02 2.234886E+02 + 1.641764E+02 1.835564E+02 1.998817E+02 2.134390E+02 2.253339E+02 + 1.679114E+02 1.864479E+02 2.024870E+02 2.158799E+02 2.273681E+02 + 1.718085E+02 1.896231E+02 2.052338E+02 2.182691E+02 2.293840E+02 + 1.753872E+02 1.928999E+02 2.078131E+02 2.207748E+02 2.311733E+02 + 1.789185E+02 1.960339E+02 2.105307E+02 2.227546E+02 2.329089E+02 + 1.824260E+02 1.989011E+02 2.126522E+02 2.245640E+02 2.348297E+02 + 1.846584E+02 2.007421E+02 2.141538E+02 2.259190E+02 2.357625E+02 + 1.847438E+02 2.007290E+02 2.141155E+02 2.258740E+02 2.356867E+02 + 1.832409E+02 1.994418E+02 2.130213E+02 2.247758E+02 2.348540E+02 + 1.811484E+02 1.975287E+02 2.116442E+02 2.235100E+02 2.335393E+02 + 1.785705E+02 1.954390E+02 2.097321E+02 2.221285E+02 2.321520E+02 + 1.763879E+02 1.933247E+02 2.079123E+02 2.205016E+02 2.306674E+02 + 1.743386E+02 1.910313E+02 2.061152E+02 2.187542E+02 2.293990E+02 + 1.718491E+02 1.890217E+02 2.042260E+02 2.172929E+02 2.279665E+02 + 1.698879E+02 1.873442E+02 2.023598E+02 2.154854E+02 2.264671E+02 + 1.685346E+02 1.855399E+02 2.006782E+02 2.141791E+02 2.251956E+02 + 1.673394E+02 1.842016E+02 1.995104E+02 2.129593E+02 2.239874E+02 + 1.671842E+02 1.836487E+02 1.987173E+02 2.121044E+02 2.230573E+02 + 1.677581E+02 1.833012E+02 1.981288E+02 2.114572E+02 2.223204E+02 + 1.687278E+02 1.838909E+02 1.977770E+02 2.113490E+02 2.216994E+02 + 1.706046E+02 1.851049E+02 1.980445E+02 2.110426E+02 2.211664E+02 + 1.741621E+02 1.865864E+02 1.992256E+02 2.114016E+02 2.214468E+02 + 1.784030E+02 1.890457E+02 2.006072E+02 2.121089E+02 2.218357E+02 + 1.834282E+02 1.929603E+02 2.033984E+02 2.133043E+02 2.228012E+02 + 1.891983E+02 1.983119E+02 2.064904E+02 2.150037E+02 2.234452E+02 + 1.963172E+02 2.033977E+02 2.106618E+02 2.175324E+02 2.247812E+02 + 2.032604E+02 2.092033E+02 2.142669E+02 2.205726E+02 2.263700E+02 + 2.095941E+02 2.148605E+02 2.188936E+02 2.240589E+02 2.284010E+02 + 2.160244E+02 2.197677E+02 2.229351E+02 2.268575E+02 2.299716E+02 + 2.204843E+02 2.241950E+02 2.269839E+02 2.289927E+02 2.314468E+02 + 2.237457E+02 2.267055E+02 2.288342E+02 2.306976E+02 2.311277E+02 + 2.250754E+02 2.272454E+02 2.283735E+02 2.296335E+02 2.298415E+02 + 2.239942E+02 2.245204E+02 2.251060E+02 2.253115E+02 2.254051E+02 + 2.195302E+02 2.193220E+02 2.195906E+02 2.199126E+02 2.187343E+02 + 2.123712E+02 2.119121E+02 2.114151E+02 2.112672E+02 2.104454E+02 + 2.029612E+02 2.020347E+02 2.014687E+02 2.010834E+02 2.001639E+02 + 1.918602E+02 1.908277E+02 1.903573E+02 1.896335E+02 1.884199E+02 + 1.794895E+02 1.782694E+02 1.777360E+02 1.768981E+02 1.759076E+02 + 1.658602E+02 1.650007E+02 1.643472E+02 1.636112E+02 1.629796E+02 + 1.520071E+02 1.512286E+02 1.507878E+02 1.502245E+02 1.496497E+02 + 1.384286E+02 1.378106E+02 1.373773E+02 1.372004E+02 1.367513E+02 + 1.286941E+02 1.281408E+02 1.278765E+02 1.277160E+02 1.273436E+02 + 7.695416E+02 8.128926E+02 8.392421E+02 8.442219E+02 8.410310E+02 + 7.709546E+02 8.132386E+02 8.393630E+02 8.441772E+02 8.408496E+02 + 7.715847E+02 8.135798E+02 8.394798E+02 8.441296E+02 8.406694E+02 + 7.722086E+02 8.139111E+02 8.395885E+02 8.440751E+02 8.404839E+02 + 7.728628E+02 8.149605E+02 8.396959E+02 8.440040E+02 8.402893E+02 + 7.734913E+02 8.152997E+02 8.397950E+02 8.439524E+02 8.400962E+02 + 7.741087E+02 8.156286E+02 8.398849E+02 8.438927E+02 8.397793E+02 + 7.754530E+02 8.159711E+02 8.399745E+02 8.438239E+02 8.395736E+02 + 7.762624E+02 8.163878E+02 8.400596E+02 8.437359E+02 8.393178E+02 + 7.781678E+02 8.181342E+02 8.403597E+02 8.443357E+02 8.393621E+02 + 7.831899E+02 8.213404E+02 8.408992E+02 8.438573E+02 8.386552E+02 + 7.892279E+02 8.263888E+02 8.403958E+02 8.438456E+02 8.360309E+02 + 7.953625E+02 8.312541E+02 8.414142E+02 8.426134E+02 8.350174E+02 + 8.019063E+02 8.354453E+02 8.418961E+02 8.425989E+02 8.329145E+02 + 8.086096E+02 8.384064E+02 8.431613E+02 8.419968E+02 8.297696E+02 + 8.140174E+02 8.392769E+02 8.434486E+02 8.397367E+02 8.280400E+02 + 8.206524E+02 8.403609E+02 8.434065E+02 8.383230E+02 8.242943E+02 + 8.263402E+02 8.405953E+02 8.430789E+02 8.351414E+02 8.214072E+02 + 8.313488E+02 8.406860E+02 8.414782E+02 8.336487E+02 8.197939E+02 + 8.356041E+02 8.408842E+02 8.409841E+02 8.309905E+02 8.151463E+02 + 8.373928E+02 8.427120E+02 8.399829E+02 8.286175E+02 8.103624E+02 + 8.387342E+02 8.425119E+02 8.375199E+02 8.244614E+02 8.058807E+02 + 8.390650E+02 8.419184E+02 8.346458E+02 8.213928E+02 8.023086E+02 + 8.387260E+02 8.405596E+02 8.323294E+02 8.189274E+02 7.983924E+02 + 8.381154E+02 8.399015E+02 8.317409E+02 8.183882E+02 7.979029E+02 + 8.372700E+02 8.395749E+02 8.322647E+02 8.189065E+02 7.992953E+02 + 8.368223E+02 8.377827E+02 8.330758E+02 8.203370E+02 8.004613E+02 + 8.350123E+02 8.365813E+02 8.331859E+02 8.222001E+02 8.023715E+02 + 8.315168E+02 8.350853E+02 8.327161E+02 8.231709E+02 8.046429E+02 + 8.283510E+02 8.330930E+02 8.325591E+02 8.219525E+02 8.071820E+02 + 8.229686E+02 8.312698E+02 8.309451E+02 8.221428E+02 8.068967E+02 + 8.185171E+02 8.297660E+02 8.286482E+02 8.202335E+02 8.069395E+02 + 8.124074E+02 8.242561E+02 8.240395E+02 8.181401E+02 8.066856E+02 + 8.050778E+02 8.195655E+02 8.202380E+02 8.150024E+02 8.049295E+02 + 7.984914E+02 8.157535E+02 8.168577E+02 8.115792E+02 8.015561E+02 + 7.948086E+02 8.095073E+02 8.115871E+02 8.069002E+02 7.970892E+02 + 7.901797E+02 8.038099E+02 8.055432E+02 8.021733E+02 7.913031E+02 + 7.856366E+02 7.996835E+02 7.987679E+02 7.932587E+02 7.845582E+02 + 7.799532E+02 7.917708E+02 7.915298E+02 7.854111E+02 7.758044E+02 + 7.702441E+02 7.797857E+02 7.798362E+02 7.740201E+02 7.642580E+02 + 7.606720E+02 7.650928E+02 7.670571E+02 7.600959E+02 7.515854E+02 + 7.476920E+02 7.504767E+02 7.484182E+02 7.441976E+02 7.348312E+02 + 7.333796E+02 7.329548E+02 7.302127E+02 7.246535E+02 7.160493E+02 + 7.184569E+02 7.137219E+02 7.078863E+02 7.018013E+02 6.939156E+02 + 6.974695E+02 6.947873E+02 6.848081E+02 6.787323E+02 6.694114E+02 + 6.745834E+02 6.685535E+02 6.603078E+02 6.507908E+02 6.425880E+02 + 6.475838E+02 6.388696E+02 6.311906E+02 6.224416E+02 6.128910E+02 + 6.155733E+02 6.043993E+02 5.976449E+02 5.898540E+02 5.800304E+02 + 5.792439E+02 5.693191E+02 5.606917E+02 5.523044E+02 5.449427E+02 + 5.416073E+02 5.298109E+02 5.212653E+02 5.134480E+02 5.061754E+02 + 4.991779E+02 4.881315E+02 4.800321E+02 4.714082E+02 4.646243E+02 + 4.523300E+02 4.424805E+02 4.362082E+02 4.285500E+02 4.227595E+02 + 4.077623E+02 3.994871E+02 3.918773E+02 3.867204E+02 3.818378E+02 + 3.662753E+02 3.578741E+02 3.516424E+02 3.467282E+02 3.423878E+02 + 3.268491E+02 3.195314E+02 3.141412E+02 3.094210E+02 3.055572E+02 + 2.897969E+02 2.833612E+02 2.783832E+02 2.747443E+02 2.720125E+02 + 2.543139E+02 2.490301E+02 2.452732E+02 2.417340E+02 2.395899E+02 + 2.210909E+02 2.169924E+02 2.138661E+02 2.113046E+02 2.095812E+02 + 1.983601E+02 1.949253E+02 1.925554E+02 1.905149E+02 1.892515E+02 + 4.189134E+03 3.727894E+03 3.325414E+03 2.996274E+03 2.735573E+03 + 4.182862E+03 3.722122E+03 3.320568E+03 2.992290E+03 2.732354E+03 + 4.176574E+03 3.716342E+03 3.315715E+03 2.988300E+03 2.729129E+03 + 4.170232E+03 3.710526E+03 3.310836E+03 2.984289E+03 2.725888E+03 + 4.163667E+03 3.704514E+03 3.305792E+03 2.980145E+03 2.722537E+03 + 4.157258E+03 3.698653E+03 3.300877E+03 2.976105E+03 2.719269E+03 + 4.150771E+03 3.692737E+03 3.295918E+03 2.972033E+03 2.715974E+03 + 4.143834E+03 3.686421E+03 3.290625E+03 2.967687E+03 2.712456E+03 + 4.135292E+03 3.678646E+03 3.284110E+03 2.962336E+03 2.708123E+03 + 4.115171E+03 3.660300E+03 3.268733E+03 2.949688E+03 2.697883E+03 + 4.068822E+03 3.617989E+03 3.233701E+03 2.919406E+03 2.674232E+03 + 4.000464E+03 3.554829E+03 3.182878E+03 2.877544E+03 2.639287E+03 + 3.925833E+03 3.499832E+03 3.139258E+03 2.832175E+03 2.608650E+03 + 3.849405E+03 3.431086E+03 3.084104E+03 2.795753E+03 2.571683E+03 + 3.771757E+03 3.362481E+03 3.028359E+03 2.760312E+03 2.534296E+03 + 3.695357E+03 3.298292E+03 2.974256E+03 2.717681E+03 2.497470E+03 + 3.617641E+03 3.233663E+03 2.919363E+03 2.674246E+03 2.459935E+03 + 3.539085E+03 3.170458E+03 2.867289E+03 2.630800E+03 2.428750E+03 + 3.474793E+03 3.119203E+03 2.815642E+03 2.595028E+03 2.400230E+03 + 3.398272E+03 3.057319E+03 2.774571E+03 2.553619E+03 2.358856E+03 + 3.320961E+03 2.994156E+03 2.733573E+03 2.511390E+03 2.323846E+03 + 3.248991E+03 2.933947E+03 2.684814E+03 2.469277E+03 2.288845E+03 + 3.181317E+03 2.876376E+03 2.638367E+03 2.435384E+03 2.260603E+03 + 3.133744E+03 2.836958E+03 2.605675E+03 2.407484E+03 2.236577E+03 + 3.129231E+03 2.833247E+03 2.602607E+03 2.404927E+03 2.234438E+03 + 3.152849E+03 2.852893E+03 2.618940E+03 2.418992E+03 2.246772E+03 + 3.196662E+03 2.873869E+03 2.642001E+03 2.439080E+03 2.258627E+03 + 3.234261E+03 2.905378E+03 2.668060E+03 2.461866E+03 2.277764E+03 + 3.259811E+03 2.937808E+03 2.685451E+03 2.483354E+03 2.295806E+03 + 3.286601E+03 2.965557E+03 2.707733E+03 2.496420E+03 2.318210E+03 + 3.316697E+03 2.989334E+03 2.719010E+03 2.513306E+03 2.326063E+03 + 3.338528E+03 3.016693E+03 2.733929E+03 2.525820E+03 2.337315E+03 + 3.349055E+03 3.017757E+03 2.735669E+03 2.526074E+03 2.343474E+03 + 3.346337E+03 3.017846E+03 2.735927E+03 2.525469E+03 2.343987E+03 + 3.317386E+03 3.006463E+03 2.727606E+03 2.511154E+03 2.333161E+03 + 3.284505E+03 2.975199E+03 2.708767E+03 2.494979E+03 2.321334E+03 + 3.233901E+03 2.940567E+03 2.680198E+03 2.476387E+03 2.302057E+03 + 3.175386E+03 2.889784E+03 2.640456E+03 2.443282E+03 2.280775E+03 + 3.082492E+03 2.826871E+03 2.586165E+03 2.398477E+03 2.242399E+03 + 2.967630E+03 2.729470E+03 2.513596E+03 2.339120E+03 2.185569E+03 + 2.836389E+03 2.618558E+03 2.420244E+03 2.258367E+03 2.120112E+03 + 2.674845E+03 2.488813E+03 2.315111E+03 2.173279E+03 2.035242E+03 + 2.499942E+03 2.343597E+03 2.206577E+03 2.067175E+03 1.945790E+03 + 2.310012E+03 2.188606E+03 2.077124E+03 1.954109E+03 1.853139E+03 + 2.125295E+03 2.030306E+03 1.934898E+03 1.837191E+03 1.741655E+03 + 1.960125E+03 1.860916E+03 1.782481E+03 1.699149E+03 1.621380E+03 + 1.783547E+03 1.696117E+03 1.623232E+03 1.556283E+03 1.491392E+03 + 1.595669E+03 1.524191E+03 1.459435E+03 1.407686E+03 1.353660E+03 + 1.409901E+03 1.357072E+03 1.299024E+03 1.253255E+03 1.214161E+03 + 1.233042E+03 1.187989E+03 1.143508E+03 1.105467E+03 1.074402E+03 + 1.065427E+03 1.026702E+03 9.891145E+02 9.622371E+02 9.360624E+02 + 9.108476E+02 8.788281E+02 8.510178E+02 8.304250E+02 8.101450E+02 + 7.741957E+02 7.487415E+02 7.280630E+02 7.137559E+02 6.980770E+02 + 6.542686E+02 6.338664E+02 6.204284E+02 6.088890E+02 5.966771E+02 + 5.530078E+02 5.390411E+02 5.270672E+02 5.177048E+02 5.082114E+02 + 4.653476E+02 4.547222E+02 4.461812E+02 4.393857E+02 4.321718E+02 + 3.929419E+02 3.839347E+02 3.761581E+02 3.698739E+02 3.643369E+02 + 3.293608E+02 3.218693E+02 3.155145E+02 3.101370E+02 3.054591E+02 + 2.875430E+02 2.808648E+02 2.753106E+02 2.707364E+02 2.667546E+02 + +Band: 5, gas: 2, k-terms: 6 + 1.864628E-07 3.594660E-07 6.894016E-07 1.287087E-06 2.321144E-06 + 2.027588E-07 3.824554E-07 7.205556E-07 1.327998E-06 2.374287E-06 + 2.211998E-07 4.083773E-07 7.553662E-07 1.372925E-06 2.432224E-06 + 2.420951E-07 4.370949E-07 7.941181E-07 1.423305E-06 2.496178E-06 + 2.659972E-07 4.699209E-07 8.377001E-07 1.481309E-06 2.567755E-06 + 2.927809E-07 5.069563E-07 8.866430E-07 1.545083E-06 2.648681E-06 + 3.231635E-07 5.490083E-07 9.417513E-07 1.616976E-06 2.738549E-06 + 3.579198E-07 5.969783E-07 1.004658E-06 1.697928E-06 2.840790E-06 + 3.980429E-07 6.518927E-07 1.077729E-06 1.791696E-06 2.961127E-06 + 4.490013E-07 7.229531E-07 1.173306E-06 1.919601E-06 3.129680E-06 + 5.197789E-07 8.243131E-07 1.313908E-06 2.117847E-06 3.402052E-06 + 6.151322E-07 9.607901E-07 1.507727E-06 2.393129E-06 3.788830E-06 + 7.309088E-07 1.124998E-06 1.741484E-06 2.720527E-06 4.244663E-06 + 8.694584E-07 1.318569E-06 2.013214E-06 3.099578E-06 4.768827E-06 + 1.034103E-06 1.547280E-06 2.329848E-06 3.534514E-06 5.364475E-06 + 1.226456E-06 1.812993E-06 2.691975E-06 4.026876E-06 6.032065E-06 + 1.456537E-06 2.124775E-06 3.112929E-06 4.596069E-06 6.792444E-06 + 1.731420E-06 2.491606E-06 3.602799E-06 5.253222E-06 7.659765E-06 + 2.054373E-06 2.917164E-06 4.169474E-06 6.004022E-06 8.634890E-06 + 2.435425E-06 3.415697E-06 4.830022E-06 6.867675E-06 9.747412E-06 + 2.889480E-06 4.004173E-06 5.600100E-06 7.867146E-06 1.101824E-05 + 3.423823E-06 4.694627E-06 6.489271E-06 9.011559E-06 1.245777E-05 + 4.047272E-06 5.486678E-06 7.503945E-06 1.029164E-05 1.405709E-05 + 4.697631E-06 6.302567E-06 8.522712E-06 1.154760E-05 1.559658E-05 + 5.260450E-06 6.979950E-06 9.322355E-06 1.249460E-05 1.669815E-05 + 5.775232E-06 7.569352E-06 9.981305E-06 1.323366E-05 1.749514E-05 + 6.321605E-06 8.177453E-06 1.066184E-05 1.396458E-05 1.828375E-05 + 6.937248E-06 8.856589E-06 1.141480E-05 1.475906E-05 1.915256E-05 + 7.655348E-06 9.655201E-06 1.229222E-05 1.572018E-05 2.019572E-05 + 8.488663E-06 1.060581E-05 1.332469E-05 1.685864E-05 2.143629E-05 + 9.477170E-06 1.171510E-05 1.455571E-05 1.821543E-05 2.289725E-05 + 1.064680E-05 1.302034E-05 1.601220E-05 1.982515E-05 2.466562E-05 + 1.201323E-05 1.457479E-05 1.777460E-05 2.176779E-05 2.681699E-05 + 1.363793E-05 1.641055E-05 1.984928E-05 2.409265E-05 2.937159E-05 + 1.554896E-05 1.857125E-05 2.228278E-05 2.682782E-05 3.239640E-05 + 1.779092E-05 2.111480E-05 2.513831E-05 3.001827E-05 3.595667E-05 + 2.040619E-05 2.406727E-05 2.844821E-05 3.373362E-05 4.013549E-05 + 2.343987E-05 2.748191E-05 3.232167E-05 3.806201E-05 4.498349E-05 + 2.698545E-05 3.147327E-05 3.684521E-05 4.313824E-05 5.064151E-05 + 3.115411E-05 3.617028E-05 4.216351E-05 4.911320E-05 5.729882E-05 + 3.609340E-05 4.181338E-05 4.843963E-05 5.620697E-05 6.511394E-05 + 4.194137E-05 4.843443E-05 5.581265E-05 6.442297E-05 7.425861E-05 + 4.879043E-05 5.600961E-05 6.430831E-05 7.383915E-05 8.476547E-05 + 5.672460E-05 6.473341E-05 7.404017E-05 8.459226E-05 9.660810E-05 + 6.579465E-05 7.473281E-05 8.515307E-05 9.682942E-05 1.100451E-04 + 7.621500E-05 8.629594E-05 9.791075E-05 1.108317E-04 1.253994E-04 + 8.832073E-05 9.966459E-05 1.126412E-04 1.270210E-04 1.430275E-04 + 1.021662E-04 1.148909E-04 1.294413E-04 1.454593E-04 1.629931E-04 + 1.175925E-04 1.318436E-04 1.479676E-04 1.657978E-04 1.851904E-04 + 1.353401E-04 1.513207E-04 1.694135E-04 1.892893E-04 2.105096E-04 + 1.582140E-04 1.765025E-04 1.969017E-04 2.192009E-04 2.429829E-04 + 1.856208E-04 2.067160E-04 2.296761E-04 2.547355E-04 2.812360E-04 + 2.164880E-04 2.404453E-04 2.661900E-04 2.936993E-04 3.231485E-04 + 2.506599E-04 2.776135E-04 3.058905E-04 3.360052E-04 3.681303E-04 + 2.877232E-04 3.175824E-04 3.487081E-04 3.814302E-04 4.162937E-04 + 3.273709E-04 3.600988E-04 3.940655E-04 4.293951E-04 4.663582E-04 + 3.695639E-04 4.043755E-04 4.408816E-04 4.787493E-04 5.178703E-04 + 4.120139E-04 4.488242E-04 4.877726E-04 5.283492E-04 5.702639E-04 + 4.421620E-04 4.811337E-04 5.218932E-04 5.643332E-04 6.080717E-04 + 7.781131E-05 1.410696E-04 2.428564E-04 4.011786E-04 6.348702E-04 + 8.055657E-05 1.444239E-04 2.468249E-04 4.060011E-04 6.404298E-04 + 8.362454E-05 1.481220E-04 2.511851E-04 4.109820E-04 6.464470E-04 + 8.701908E-05 1.521340E-04 2.559573E-04 4.165372E-04 6.528785E-04 + 9.086714E-05 1.567781E-04 2.614249E-04 4.231569E-04 6.599793E-04 + 9.507873E-05 1.618326E-04 2.674636E-04 4.302210E-04 6.679662E-04 + 9.980061E-05 1.676277E-04 2.741675E-04 4.381281E-04 6.766589E-04 + 1.051443E-04 1.741815E-04 2.817574E-04 4.469293E-04 6.866402E-04 + 1.113121E-04 1.817512E-04 2.909084E-04 4.575990E-04 6.987525E-04 + 1.196941E-04 1.922560E-04 3.041907E-04 4.741316E-04 7.188830E-04 + 1.324280E-04 2.091989E-04 3.268059E-04 5.037819E-04 7.567121E-04 + 1.498186E-04 2.328313E-04 3.591173E-04 5.467461E-04 8.127569E-04 + 1.705441E-04 2.603755E-04 3.969110E-04 5.966601E-04 8.779137E-04 + 1.942004E-04 2.921397E-04 4.399421E-04 6.528319E-04 9.505879E-04 + 2.212844E-04 3.282639E-04 4.876622E-04 7.143049E-04 1.029878E-03 + 2.521090E-04 3.686346E-04 5.399824E-04 7.825238E-04 1.115201E-03 + 2.873348E-04 4.144219E-04 5.992987E-04 8.582916E-04 1.209649E-03 + 3.283430E-04 4.673786E-04 6.658691E-04 9.428703E-04 1.312977E-03 + 3.750193E-04 5.263706E-04 7.397468E-04 1.034522E-03 1.425219E-03 + 4.283919E-04 5.932075E-04 8.232306E-04 1.136461E-03 1.548537E-03 + 4.905349E-04 6.695330E-04 9.179860E-04 1.251510E-03 1.682965E-03 + 5.609970E-04 7.559250E-04 1.023513E-03 1.378637E-03 1.829752E-03 + 6.406139E-04 8.511310E-04 1.139336E-03 1.516568E-03 1.986457E-03 + 7.202314E-04 9.448213E-04 1.247923E-03 1.642543E-03 2.126638E-03 + 7.846983E-04 1.015345E-03 1.323959E-03 1.722011E-03 2.211756E-03 + 8.418070E-04 1.072905E-03 1.378992E-03 1.773922E-03 2.260077E-03 + 9.038097E-04 1.133380E-03 1.435247E-03 1.825369E-03 2.306691E-03 + 9.759068E-04 1.203380E-03 1.502259E-03 1.884537E-03 2.359257E-03 + 1.062435E-03 1.289027E-03 1.584987E-03 1.962892E-03 2.433451E-03 + 1.166512E-03 1.394589E-03 1.688592E-03 2.062588E-03 2.527609E-03 + 1.292383E-03 1.519399E-03 1.815232E-03 2.186425E-03 2.645617E-03 + 1.443229E-03 1.672695E-03 1.966919E-03 2.338801E-03 2.797598E-03 + 1.623143E-03 1.857596E-03 2.154522E-03 2.527237E-03 2.987816E-03 + 1.835699E-03 2.078230E-03 2.378588E-03 2.755359E-03 3.217918E-03 + 2.090362E-03 2.340313E-03 2.645191E-03 3.026103E-03 3.493628E-03 + 2.389409E-03 2.646094E-03 2.961561E-03 3.344807E-03 3.820942E-03 + 2.741822E-03 3.004485E-03 3.327722E-03 3.723984E-03 4.207471E-03 + 3.151695E-03 3.419765E-03 3.757844E-03 4.164528E-03 4.661075E-03 + 3.625097E-03 3.904263E-03 4.258475E-03 4.683088E-03 5.192133E-03 + 4.182277E-03 4.466614E-03 4.841923E-03 5.286365E-03 5.821673E-03 + 4.826300E-03 5.127545E-03 5.524554E-03 5.996335E-03 6.553968E-03 + 5.570504E-03 5.895624E-03 6.310054E-03 6.821333E-03 7.405486E-03 + 6.418720E-03 6.773852E-03 7.213022E-03 7.758846E-03 8.386911E-03 + 7.386685E-03 7.769796E-03 8.239455E-03 8.823780E-03 9.502183E-03 + 8.467777E-03 8.885295E-03 9.406343E-03 1.003578E-02 1.076963E-02 + 9.691168E-03 1.015819E-02 1.072473E-02 1.141145E-02 1.221862E-02 + 1.107220E-02 1.160352E-02 1.223018E-02 1.298482E-02 1.387854E-02 + 1.263208E-02 1.324454E-02 1.395350E-02 1.478346E-02 1.577639E-02 + 1.436789E-02 1.508351E-02 1.588107E-02 1.679632E-02 1.788975E-02 + 1.630714E-02 1.714594E-02 1.808301E-02 1.912145E-02 2.029777E-02 + 1.864801E-02 1.965926E-02 2.077083E-02 2.198682E-02 2.334054E-02 + 2.143778E-02 2.266415E-02 2.398993E-02 2.543934E-02 2.699424E-02 + 2.468285E-02 2.616572E-02 2.775248E-02 2.943504E-02 3.125287E-02 + 2.845639E-02 3.022967E-02 3.207938E-02 3.402817E-02 3.611415E-02 + 3.278506E-02 3.491402E-02 3.709378E-02 3.932779E-02 4.170143E-02 + 3.775253E-02 4.033303E-02 4.286406E-02 4.540288E-02 4.800631E-02 + 4.338247E-02 4.635127E-02 4.921542E-02 5.201272E-02 5.475924E-02 + 4.947750E-02 5.274862E-02 5.593568E-02 5.897664E-02 6.193924E-02 + 5.407107E-02 5.763495E-02 6.105000E-02 6.430851E-02 6.742891E-02 + 5.255391E-03 7.291011E-03 9.968749E-03 1.341030E-02 1.777007E-02 + 5.297442E-03 7.332316E-03 1.001882E-02 1.346920E-02 1.783551E-02 + 5.342730E-03 7.376876E-03 1.006717E-02 1.352551E-02 1.790708E-02 + 5.393248E-03 7.425127E-03 1.011712E-02 1.358431E-02 1.797915E-02 + 5.449552E-03 7.482440E-03 1.017586E-02 1.365373E-02 1.805279E-02 + 5.509804E-03 7.540668E-03 1.023782E-02 1.372593E-02 1.813126E-02 + 5.577484E-03 7.608859E-03 1.030888E-02 1.380085E-02 1.821225E-02 + 5.654818E-03 7.689200E-03 1.038558E-02 1.388280E-02 1.830537E-02 + 5.745528E-03 7.787570E-03 1.048590E-02 1.398954E-02 1.842063E-02 + 5.893010E-03 7.945874E-03 1.066743E-02 1.419677E-02 1.866636E-02 + 6.152392E-03 8.260422E-03 1.103773E-02 1.464657E-02 1.919888E-02 + 6.522277E-03 8.722650E-03 1.158831E-02 1.532022E-02 2.002566E-02 + 6.938788E-03 9.234006E-03 1.221819E-02 1.608817E-02 2.099229E-02 + 7.399053E-03 9.794746E-03 1.292636E-02 1.692762E-02 2.205597E-02 + 7.910989E-03 1.041282E-02 1.368596E-02 1.781965E-02 2.319898E-02 + 8.467192E-03 1.108256E-02 1.448005E-02 1.880584E-02 2.442767E-02 + 9.078156E-03 1.181130E-02 1.538108E-02 1.987656E-02 2.578017E-02 + 9.756475E-03 1.262314E-02 1.635021E-02 2.106592E-02 2.722913E-02 + 1.048722E-02 1.349945E-02 1.738467E-02 2.232478E-02 2.880823E-02 + 1.129593E-02 1.447770E-02 1.852816E-02 2.371555E-02 3.052182E-02 + 1.220526E-02 1.556305E-02 1.979826E-02 2.527037E-02 3.237094E-02 + 1.321223E-02 1.676099E-02 2.120548E-02 2.695979E-02 3.435875E-02 + 1.429923E-02 1.802643E-02 2.272252E-02 2.877412E-02 3.643218E-02 + 1.530952E-02 1.917887E-02 2.405580E-02 3.034580E-02 3.813613E-02 + 1.596927E-02 1.988449E-02 2.483117E-02 3.109379E-02 3.885818E-02 + 1.641978E-02 2.031976E-02 2.522779E-02 3.135914E-02 3.895937E-02 + 1.688565E-02 2.074166E-02 2.554473E-02 3.158171E-02 3.900422E-02 + 1.744219E-02 2.123789E-02 2.598129E-02 3.188320E-02 3.905743E-02 + 1.816339E-02 2.190673E-02 2.657427E-02 3.238235E-02 3.941705E-02 + 1.910366E-02 2.281230E-02 2.742286E-02 3.314813E-02 3.999666E-02 + 2.028945E-02 2.391259E-02 2.854436E-02 3.417231E-02 4.088240E-02 + 2.177531E-02 2.534770E-02 2.993804E-02 3.554885E-02 4.218780E-02 + 2.366063E-02 2.712600E-02 3.173695E-02 3.734207E-02 4.392827E-02 + 2.592620E-02 2.930110E-02 3.393370E-02 3.958264E-02 4.609851E-02 + 2.872261E-02 3.203342E-02 3.654675E-02 4.221392E-02 4.876736E-02 + 3.206029E-02 3.530503E-02 3.972950E-02 4.532616E-02 5.193779E-02 + 3.612494E-02 3.923134E-02 4.347064E-02 4.906199E-02 5.566284E-02 + 4.092933E-02 4.387422E-02 4.799864E-02 5.343386E-02 6.009737E-02 + 4.643747E-02 4.942584E-02 5.340046E-02 5.871679E-02 6.524034E-02 + 5.295434E-02 5.588879E-02 5.978517E-02 6.495922E-02 7.148233E-02 + 6.042460E-02 6.339775E-02 6.740303E-02 7.240100E-02 7.885152E-02 + 6.909828E-02 7.207524E-02 7.606988E-02 8.121733E-02 8.748055E-02 + 7.887123E-02 8.202907E-02 8.605562E-02 9.133491E-02 9.758230E-02 + 9.025693E-02 9.332088E-02 9.743181E-02 1.027249E-01 1.092685E-01 + 1.030492E-01 1.060843E-01 1.105771E-01 1.158486E-01 1.225137E-01 + 1.180158E-01 1.207572E-01 1.252768E-01 1.307801E-01 1.375815E-01 + 1.350834E-01 1.372373E-01 1.419252E-01 1.477382E-01 1.547077E-01 + 1.549144E-01 1.560266E-01 1.607181E-01 1.668814E-01 1.743523E-01 + 1.780744E-01 1.775598E-01 1.815502E-01 1.880350E-01 1.958298E-01 + 2.038059E-01 2.018823E-01 2.048589E-01 2.110050E-01 2.186270E-01 + 2.303673E-01 2.281535E-01 2.303552E-01 2.363814E-01 2.441864E-01 + 2.578109E-01 2.552454E-01 2.570580E-01 2.627793E-01 2.703388E-01 + 2.868747E-01 2.840015E-01 2.852652E-01 2.900643E-01 2.973107E-01 + 3.177741E-01 3.143652E-01 3.148570E-01 3.184891E-01 3.250540E-01 + 3.510395E-01 3.468793E-01 3.463826E-01 3.488739E-01 3.540691E-01 + 3.868084E-01 3.818927E-01 3.801028E-01 3.809991E-01 3.848412E-01 + 4.216617E-01 4.156292E-01 4.122892E-01 4.116060E-01 4.133461E-01 + 4.540065E-01 4.471996E-01 4.428496E-01 4.403252E-01 4.400060E-01 + 4.781469E-01 4.702954E-01 4.648638E-01 4.612392E-01 4.591552E-01 + 3.198969E-01 4.330623E-01 5.721890E-01 7.421274E-01 9.249790E-01 + 3.214736E-01 4.349739E-01 5.747394E-01 7.442012E-01 9.271965E-01 + 3.227020E-01 4.367581E-01 5.770453E-01 7.467579E-01 9.294202E-01 + 3.241163E-01 4.383156E-01 5.788516E-01 7.488518E-01 9.321041E-01 + 3.256634E-01 4.399339E-01 5.807407E-01 7.516505E-01 9.338820E-01 + 3.269479E-01 4.418623E-01 5.826359E-01 7.544193E-01 9.361877E-01 + 3.283965E-01 4.434217E-01 5.859530E-01 7.560701E-01 9.389324E-01 + 3.300269E-01 4.453983E-01 5.884236E-01 7.589144E-01 9.413786E-01 + 3.317882E-01 4.479643E-01 5.909398E-01 7.622488E-01 9.459401E-01 + 3.364049E-01 4.531744E-01 5.974658E-01 7.708660E-01 9.536057E-01 + 3.466364E-01 4.666211E-01 6.140635E-01 7.900540E-01 9.718034E-01 + 3.641428E-01 4.872352E-01 6.368872E-01 8.182351E-01 9.988033E-01 + 3.811967E-01 5.100081E-01 6.646678E-01 8.475545E-01 1.028527E+00 + 4.013543E-01 5.322387E-01 6.934107E-01 8.766634E-01 1.060510E+00 + 4.232504E-01 5.569234E-01 7.247236E-01 9.081594E-01 1.093016E+00 + 4.452104E-01 5.856265E-01 7.563403E-01 9.378694E-01 1.127919E+00 + 4.701884E-01 6.166632E-01 7.912600E-01 9.717076E-01 1.162304E+00 + 4.958571E-01 6.461085E-01 8.265901E-01 1.004859E+00 1.194747E+00 + 5.210801E-01 6.765577E-01 8.587150E-01 1.039615E+00 1.228559E+00 + 5.504714E-01 7.113356E-01 8.932719E-01 1.076793E+00 1.263227E+00 + 5.812126E-01 7.471203E-01 9.268833E-01 1.115540E+00 1.301338E+00 + 6.153420E-01 7.854771E-01 9.635294E-01 1.154020E+00 1.338021E+00 + 6.489908E-01 8.228149E-01 9.992849E-01 1.187661E+00 1.373424E+00 + 6.762211E-01 8.494077E-01 1.026759E+00 1.213368E+00 1.398875E+00 + 6.844293E-01 8.545110E-01 1.029397E+00 1.215733E+00 1.400975E+00 + 6.792015E-01 8.449175E-01 1.018092E+00 1.202311E+00 1.386689E+00 + 6.739294E-01 8.350199E-01 1.001981E+00 1.184112E+00 1.367493E+00 + 6.699176E-01 8.241663E-01 9.873896E-01 1.166789E+00 1.344689E+00 + 6.699474E-01 8.169586E-01 9.756188E-01 1.150116E+00 1.325663E+00 + 6.768212E-01 8.149939E-01 9.673692E-01 1.139012E+00 1.308048E+00 + 6.881255E-01 8.218831E-01 9.631029E-01 1.131133E+00 1.295623E+00 + 7.092810E-01 8.333672E-01 9.683498E-01 1.126399E+00 1.288281E+00 + 7.376465E-01 8.549308E-01 9.842190E-01 1.130796E+00 1.288361E+00 + 7.773973E-01 8.852181E-01 1.009406E+00 1.148360E+00 1.294300E+00 + 8.264106E-01 9.221354E-01 1.039255E+00 1.170544E+00 1.306519E+00 + 8.857505E-01 9.697844E-01 1.079573E+00 1.201556E+00 1.328854E+00 + 9.582917E-01 1.030642E+00 1.126969E+00 1.239843E+00 1.360521E+00 + 1.044024E+00 1.100347E+00 1.188911E+00 1.288683E+00 1.402694E+00 + 1.144448E+00 1.189832E+00 1.258558E+00 1.346294E+00 1.451121E+00 + 1.259685E+00 1.290112E+00 1.342308E+00 1.417964E+00 1.515246E+00 + 1.387485E+00 1.404276E+00 1.442700E+00 1.504377E+00 1.588553E+00 + 1.537871E+00 1.533356E+00 1.560362E+00 1.604862E+00 1.672117E+00 + 1.698318E+00 1.679577E+00 1.695457E+00 1.724188E+00 1.778517E+00 + 1.881773E+00 1.848578E+00 1.843315E+00 1.858251E+00 1.898426E+00 + 2.080356E+00 2.040838E+00 2.017827E+00 2.018129E+00 2.041624E+00 + 2.303344E+00 2.261150E+00 2.214515E+00 2.202190E+00 2.206021E+00 + 2.525720E+00 2.479725E+00 2.429337E+00 2.385734E+00 2.368129E+00 + 2.717676E+00 2.675009E+00 2.625392E+00 2.569280E+00 2.531688E+00 + 2.896489E+00 2.850868E+00 2.800036E+00 2.747306E+00 2.692365E+00 + 3.048515E+00 3.005336E+00 2.958781E+00 2.903574E+00 2.842938E+00 + 3.159272E+00 3.121030E+00 3.078230E+00 3.024336E+00 2.964443E+00 + 3.197433E+00 3.166594E+00 3.127262E+00 3.079805E+00 3.022129E+00 + 3.181112E+00 3.155683E+00 3.119443E+00 3.073090E+00 3.020898E+00 + 3.114173E+00 3.094135E+00 3.059531E+00 3.018612E+00 2.968116E+00 + 3.011451E+00 2.992230E+00 2.962077E+00 2.922202E+00 2.874967E+00 + 2.883632E+00 2.864955E+00 2.835575E+00 2.799011E+00 2.753035E+00 + 2.741180E+00 2.721521E+00 2.693560E+00 2.658039E+00 2.615025E+00 + 2.597062E+00 2.575805E+00 2.549080E+00 2.514563E+00 2.473513E+00 + 2.492532E+00 2.470614E+00 2.443180E+00 2.409599E+00 2.369674E+00 + 7.602206E+00 8.964350E+00 1.017695E+01 1.132341E+01 1.222716E+01 + 7.642822E+00 9.008436E+00 1.018871E+01 1.133380E+01 1.223561E+01 + 7.658271E+00 9.023424E+00 1.023153E+01 1.134420E+01 1.224406E+01 + 7.673730E+00 9.038427E+00 1.024382E+01 1.135457E+01 1.225249E+01 + 7.689695E+00 9.053935E+00 1.025651E+01 1.139824E+01 1.226119E+01 + 7.705258E+00 9.096050E+00 1.026094E+01 1.141161E+01 1.226968E+01 + 7.720903E+00 9.111862E+00 1.030819E+01 1.142256E+01 1.227818E+01 + 7.737582E+00 9.128740E+00 1.032049E+01 1.143424E+01 1.228725E+01 + 7.758041E+00 9.149456E+00 1.033738E+01 1.144857E+01 1.233782E+01 + 7.805498E+00 9.197426E+00 1.037784E+01 1.151819E+01 1.236500E+01 + 7.937493E+00 9.336094E+00 1.053143E+01 1.159566E+01 1.251180E+01 + 8.152339E+00 9.491352E+00 1.066873E+01 1.177090E+01 1.264679E+01 + 8.354481E+00 9.695055E+00 1.085721E+01 1.193726E+01 1.274199E+01 + 8.620521E+00 9.866168E+00 1.103678E+01 1.206075E+01 1.293271E+01 + 8.860650E+00 1.006385E+01 1.121103E+01 1.217897E+01 1.312199E+01 + 9.112814E+00 1.030991E+01 1.142373E+01 1.227849E+01 1.328264E+01 + 9.346146E+00 1.054097E+01 1.160202E+01 1.251150E+01 1.343712E+01 + 9.574228E+00 1.073425E+01 1.184339E+01 1.267381E+01 1.356689E+01 + 9.768871E+00 1.091959E+01 1.199247E+01 1.282448E+01 1.367519E+01 + 1.002764E+01 1.115248E+01 1.212783E+01 1.302309E+01 1.376770E+01 + 1.028021E+01 1.138316E+01 1.225148E+01 1.323303E+01 1.385126E+01 + 1.049041E+01 1.158379E+01 1.245539E+01 1.340799E+01 1.392923E+01 + 1.073183E+01 1.176756E+01 1.261644E+01 1.354028E+01 1.400433E+01 + 1.092126E+01 1.195304E+01 1.274554E+01 1.362406E+01 1.404307E+01 + 1.094605E+01 1.196821E+01 1.275893E+01 1.363141E+01 1.404580E+01 + 1.087229E+01 1.188716E+01 1.272314E+01 1.358975E+01 1.402573E+01 + 1.080388E+01 1.182442E+01 1.263124E+01 1.352806E+01 1.398927E+01 + 1.073654E+01 1.168888E+01 1.261293E+01 1.345770E+01 1.394929E+01 + 1.070911E+01 1.163941E+01 1.256068E+01 1.335476E+01 1.390007E+01 + 1.063714E+01 1.159983E+01 1.244381E+01 1.328827E+01 1.386740E+01 + 1.058642E+01 1.157850E+01 1.237816E+01 1.324803E+01 1.383231E+01 + 1.061018E+01 1.157784E+01 1.236497E+01 1.314653E+01 1.380328E+01 + 1.065364E+01 1.164613E+01 1.238112E+01 1.314538E+01 1.379331E+01 + 1.082109E+01 1.171630E+01 1.248699E+01 1.320896E+01 1.379120E+01 + 1.106909E+01 1.178918E+01 1.255312E+01 1.328968E+01 1.379720E+01 + 1.130450E+01 1.196266E+01 1.267085E+01 1.335385E+01 1.383047E+01 + 1.161044E+01 1.224643E+01 1.281714E+01 1.348274E+01 1.387494E+01 + 1.202790E+01 1.252431E+01 1.311451E+01 1.362375E+01 1.394714E+01 + 1.244750E+01 1.293670E+01 1.340288E+01 1.379567E+01 1.403565E+01 + 1.300393E+01 1.336530E+01 1.368928E+01 1.395486E+01 1.413346E+01 + 1.351482E+01 1.371093E+01 1.393131E+01 1.410851E+01 1.421759E+01 + 1.390139E+01 1.403106E+01 1.411712E+01 1.420637E+01 1.425105E+01 + 1.412547E+01 1.419747E+01 1.422564E+01 1.422889E+01 1.419980E+01 + 1.420149E+01 1.419182E+01 1.420638E+01 1.416627E+01 1.410478E+01 + 1.406212E+01 1.406811E+01 1.403969E+01 1.398999E+01 1.388879E+01 + 1.374969E+01 1.379256E+01 1.376480E+01 1.367595E+01 1.354011E+01 + 1.331811E+01 1.331979E+01 1.329938E+01 1.322740E+01 1.309276E+01 + 1.268812E+01 1.271809E+01 1.271563E+01 1.263703E+01 1.250768E+01 + 1.205209E+01 1.207397E+01 1.204965E+01 1.199466E+01 1.188159E+01 + 1.140910E+01 1.145754E+01 1.143899E+01 1.136445E+01 1.127508E+01 + 1.080481E+01 1.085158E+01 1.083408E+01 1.075194E+01 1.064262E+01 + 1.017399E+01 1.020396E+01 1.019470E+01 1.012051E+01 1.001088E+01 + 9.560723E+00 9.581610E+00 9.556506E+00 9.489953E+00 9.387903E+00 + 8.940365E+00 8.949694E+00 8.922163E+00 8.855350E+00 8.754543E+00 + 8.228007E+00 8.247199E+00 8.225742E+00 8.171749E+00 8.072922E+00 + 7.453217E+00 7.475671E+00 7.457515E+00 7.401067E+00 7.322605E+00 + 6.674290E+00 6.687610E+00 6.666306E+00 6.621139E+00 6.553809E+00 + 5.902453E+00 5.910085E+00 5.890672E+00 5.846339E+00 5.782502E+00 + 5.331016E+00 5.337290E+00 5.319534E+00 5.281776E+00 5.226844E+00 + 8.161763E+01 7.878917E+01 7.554307E+01 7.206980E+01 6.827317E+01 + 8.158512E+01 7.875075E+01 7.549806E+01 7.202379E+01 6.822553E+01 + 8.155165E+01 7.871157E+01 7.545249E+01 7.197737E+01 6.817756E+01 + 8.151687E+01 7.867131E+01 7.540602E+01 7.193023E+01 6.812897E+01 + 8.147984E+01 7.862886E+01 7.535737E+01 7.188110E+01 6.807842E+01 + 8.144227E+01 7.858634E+01 7.523421E+01 7.183267E+01 6.802873E+01 + 8.140277E+01 7.854220E+01 7.518718E+01 7.178319E+01 6.797811E+01 + 8.135919E+01 7.849399E+01 7.513616E+01 7.172984E+01 6.792366E+01 + 8.130502E+01 7.843428E+01 7.507308E+01 7.166396E+01 6.785647E+01 + 8.118518E+01 7.829992E+01 7.492903E+01 7.151098E+01 6.769985E+01 + 8.090575E+01 7.798865E+01 7.455608E+01 7.115585E+01 6.740156E+01 + 8.054239E+01 7.742429E+01 7.409831E+01 7.054585E+01 6.685719E+01 + 8.012090E+01 7.687537E+01 7.346769E+01 6.994138E+01 6.622886E+01 + 7.959959E+01 7.631283E+01 7.292872E+01 6.927737E+01 6.562215E+01 + 7.891799E+01 7.576668E+01 7.234732E+01 6.865212E+01 6.499700E+01 + 7.841600E+01 7.509994E+01 7.174147E+01 6.795126E+01 6.441180E+01 + 7.784590E+01 7.445559E+01 7.109126E+01 6.735023E+01 6.382639E+01 + 7.713749E+01 7.382866E+01 7.033674E+01 6.666301E+01 6.325943E+01 + 7.647339E+01 7.316266E+01 6.962859E+01 6.594203E+01 6.265996E+01 + 7.585074E+01 7.252302E+01 6.887821E+01 6.524007E+01 6.204991E+01 + 7.516462E+01 7.182596E+01 6.814120E+01 6.451309E+01 6.142803E+01 + 7.438410E+01 7.108556E+01 6.737859E+01 6.387029E+01 6.081005E+01 + 7.367624E+01 7.026337E+01 6.660574E+01 6.323919E+01 6.027058E+01 + 7.309351E+01 6.968893E+01 6.604835E+01 6.276082E+01 5.984290E+01 + 7.294630E+01 6.956055E+01 6.594226E+01 6.266871E+01 5.976507E+01 + 7.309632E+01 6.971549E+01 6.612577E+01 6.282441E+01 5.991271E+01 + 7.322026E+01 6.997230E+01 6.638783E+01 6.305559E+01 6.011151E+01 + 7.330974E+01 7.020358E+01 6.665114E+01 6.329681E+01 6.035201E+01 + 7.331494E+01 7.035788E+01 6.686660E+01 6.352051E+01 6.051565E+01 + 7.325105E+01 7.040926E+01 6.699345E+01 6.364257E+01 6.068060E+01 + 7.311741E+01 7.041359E+01 6.705388E+01 6.372314E+01 6.078012E+01 + 7.274942E+01 7.018751E+01 6.699415E+01 6.371304E+01 6.077589E+01 + 7.215655E+01 6.976145E+01 6.674945E+01 6.354608E+01 6.063719E+01 + 7.134429E+01 6.910321E+01 6.630163E+01 6.324926E+01 6.035772E+01 + 7.020288E+01 6.821299E+01 6.569835E+01 6.276907E+01 5.993810E+01 + 6.889834E+01 6.717176E+01 6.483065E+01 6.206453E+01 5.931752E+01 + 6.736814E+01 6.579610E+01 6.366527E+01 6.110494E+01 5.848919E+01 + 6.544886E+01 6.411648E+01 6.216841E+01 5.984972E+01 5.743009E+01 + 6.302476E+01 6.198493E+01 6.032503E+01 5.833484E+01 5.611894E+01 + 6.031303E+01 5.942168E+01 5.813273E+01 5.644532E+01 5.445353E+01 + 5.715976E+01 5.659137E+01 5.567550E+01 5.426487E+01 5.246543E+01 + 5.378028E+01 5.357299E+01 5.297676E+01 5.174535E+01 5.022005E+01 + 5.047849E+01 5.046632E+01 5.001883E+01 4.908084E+01 4.778396E+01 + 4.718542E+01 4.725936E+01 4.694374E+01 4.623134E+01 4.524797E+01 + 4.369435E+01 4.384965E+01 4.368393E+01 4.324513E+01 4.240209E+01 + 4.009309E+01 4.044871E+01 4.043918E+01 4.005607E+01 3.941637E+01 + 3.663202E+01 3.701259E+01 3.713281E+01 3.687617E+01 3.633084E+01 + 3.325220E+01 3.357105E+01 3.380490E+01 3.375429E+01 3.338169E+01 + 2.970741E+01 3.016883E+01 3.040094E+01 3.039455E+01 3.016583E+01 + 2.630765E+01 2.674343E+01 2.696714E+01 2.701537E+01 2.687303E+01 + 2.308844E+01 2.349271E+01 2.369626E+01 2.377729E+01 2.365615E+01 + 2.013979E+01 2.048313E+01 2.064596E+01 2.067737E+01 2.062392E+01 + 1.742448E+01 1.766453E+01 1.781818E+01 1.787216E+01 1.780755E+01 + 1.494356E+01 1.515933E+01 1.527605E+01 1.530030E+01 1.525272E+01 + 1.276148E+01 1.292070E+01 1.301217E+01 1.301788E+01 1.297076E+01 + 1.083089E+01 1.095043E+01 1.101810E+01 1.102271E+01 1.097810E+01 + 9.153579E+00 9.248193E+00 9.288057E+00 9.279604E+00 9.237057E+00 + 7.709197E+00 7.771204E+00 7.791714E+00 7.780555E+00 7.746806E+00 + 6.742914E+00 6.787965E+00 6.807853E+00 6.796166E+00 6.759850E+00 + +Band: 5, gas: 5, k-terms: 1 + 1.461834E-01 1.588018E-01 1.700326E-01 1.802051E-01 1.894794E-01 + 1.463615E-01 1.589584E-01 1.701732E-01 1.803330E-01 1.895956E-01 + 1.465407E-01 1.591161E-01 1.703148E-01 1.804617E-01 1.897125E-01 + 1.467207E-01 1.592744E-01 1.704569E-01 1.805908E-01 1.898297E-01 + 1.469079E-01 1.594390E-01 1.706046E-01 1.807250E-01 1.899514E-01 + 1.470921E-01 1.596008E-01 1.707497E-01 1.808568E-01 1.900709E-01 + 1.472783E-01 1.597643E-01 1.708963E-01 1.809898E-01 1.901915E-01 + 1.474784E-01 1.599400E-01 1.710537E-01 1.811326E-01 1.903209E-01 + 1.477250E-01 1.601566E-01 1.712479E-01 1.813088E-01 1.904805E-01 + 1.482924E-01 1.606566E-01 1.716973E-01 1.817176E-01 1.908515E-01 + 1.495820E-01 1.617963E-01 1.727245E-01 1.826533E-01 1.917011E-01 + 1.514965E-01 1.634928E-01 1.742569E-01 1.840502E-01 1.929695E-01 + 1.535625E-01 1.653292E-01 1.759188E-01 1.855655E-01 1.943448E-01 + 1.556595E-01 1.671989E-01 1.776139E-01 1.871108E-01 1.957468E-01 + 1.577775E-01 1.690937E-01 1.793348E-01 1.886776E-01 1.971690E-01 + 1.598561E-01 1.709597E-01 1.810319E-01 1.902194E-01 1.985702E-01 + 1.619688E-01 1.728614E-01 1.827628E-01 1.917909E-01 1.999972E-01 + 1.641066E-01 1.747902E-01 1.845194E-01 1.933847E-01 2.014377E-01 + 1.662326E-01 1.767124E-01 1.862698E-01 1.949720E-01 2.028684E-01 + 1.683721E-01 1.786500E-01 1.880337E-01 1.965706E-01 2.043061E-01 + 1.705564E-01 1.806317E-01 1.898337E-01 1.982042E-01 2.057697E-01 + 1.727418E-01 1.826164E-01 1.916337E-01 1.998377E-01 2.072285E-01 + 1.748529E-01 1.845340E-01 1.933711E-01 2.014102E-01 2.086308E-01 + 1.764093E-01 1.859438E-01 1.946451E-01 2.025572E-01 2.096540E-01 + 1.767045E-01 1.861971E-01 1.948651E-01 2.027504E-01 2.098257E-01 + 1.761932E-01 1.857080E-01 1.944066E-01 2.023284E-01 2.094478E-01 + 1.754330E-01 1.849857E-01 1.937318E-01 2.017058E-01 2.088900E-01 + 1.746216E-01 1.842101E-01 1.930034E-01 2.010272E-01 2.082818E-01 + 1.739399E-01 1.835466E-01 1.923711E-01 2.004313E-01 2.077443E-01 + 1.734486E-01 1.830506E-01 1.918832E-01 1.999638E-01 2.073169E-01 + 1.731895E-01 1.827603E-01 1.915741E-01 1.996561E-01 2.070282E-01 + 1.732521E-01 1.827579E-01 1.915211E-01 1.995768E-01 2.069419E-01 + 1.737227E-01 1.831236E-01 1.917990E-01 1.997949E-01 2.071214E-01 + 1.746536E-01 1.839077E-01 1.924557E-01 2.003550E-01 2.076078E-01 + 1.760685E-01 1.851351E-01 1.935163E-01 2.012823E-01 2.084242E-01 + 1.780196E-01 1.868584E-01 1.950330E-01 2.026271E-01 2.096223E-01 + 1.805254E-01 1.891008E-01 1.970317E-01 2.044164E-01 2.112306E-01 + 1.836397E-01 1.919201E-01 1.995722E-01 2.067083E-01 2.133086E-01 + 1.874643E-01 1.954173E-01 2.027548E-01 2.096041E-01 2.159528E-01 + 1.920768E-01 1.996732E-01 2.066629E-01 2.131890E-01 2.192481E-01 + 1.975597E-01 2.047729E-01 2.113850E-01 2.175541E-01 2.232861E-01 + 2.038505E-01 2.106690E-01 2.168864E-01 2.226759E-01 2.280533E-01 + 2.108438E-01 2.172760E-01 2.230971E-01 2.284983E-01 2.335066E-01 + 2.184836E-01 2.245527E-01 2.299887E-01 2.350035E-01 2.396383E-01 + 2.267366E-01 2.324754E-01 2.375476E-01 2.421875E-01 2.464528E-01 + 2.355947E-01 2.410363E-01 2.457701E-01 2.500531E-01 2.539586E-01 + 2.450576E-01 2.502382E-01 2.546557E-01 2.586005E-01 2.621573E-01 + 2.549654E-01 2.599125E-01 2.640651E-01 2.676990E-01 2.709107E-01 + 2.651506E-01 2.698849E-01 2.737884E-01 2.771644E-01 2.800881E-01 + 2.757826E-01 2.802884E-01 2.839448E-01 2.870568E-01 2.897161E-01 + 2.874257E-01 2.915298E-01 2.948428E-01 2.976292E-01 2.999398E-01 + 2.993952E-01 3.030343E-01 3.059712E-01 3.084027E-01 3.103310E-01 + 3.111732E-01 3.143829E-01 3.169631E-01 3.190316E-01 3.205968E-01 + 3.226739E-01 3.254853E-01 3.277194E-01 3.294186E-01 3.306299E-01 + 3.338100E-01 3.362484E-01 3.381391E-01 3.394733E-01 3.403265E-01 + 3.445107E-01 3.465986E-01 3.481280E-01 3.491057E-01 3.495437E-01 + 3.547412E-01 3.564553E-01 3.575775E-01 3.581929E-01 3.582424E-01 + 3.643148E-01 3.656666E-01 3.664427E-01 3.667073E-01 3.663588E-01 + 3.711251E-01 3.722356E-01 3.727929E-01 3.728072E-01 3.721856E-01 + +Band: 5, gas: 6, k-terms: 1 + 6.100719E-08 6.787368E-08 7.470795E-08 8.150436E-08 8.828536E-08 + 6.110746E-08 6.797152E-08 7.480386E-08 8.159873E-08 8.837888E-08 + 6.121033E-08 6.807155E-08 7.490166E-08 8.169475E-08 8.847385E-08 + 6.131634E-08 6.817426E-08 7.500174E-08 8.179276E-08 8.857060E-08 + 6.142895E-08 6.828295E-08 7.510734E-08 8.189593E-08 8.867222E-08 + 6.154350E-08 6.839288E-08 7.521363E-08 8.199935E-08 8.877375E-08 + 6.166376E-08 6.850765E-08 7.532407E-08 8.210641E-08 8.887850E-08 + 6.179646E-08 6.863376E-08 7.544500E-08 8.222329E-08 8.899257E-08 + 6.195952E-08 6.878887E-08 7.559383E-08 8.236720E-08 8.913308E-08 + 6.229678E-08 6.911610E-08 7.591284E-08 8.267983E-08 8.944192E-08 + 6.302204E-08 6.982876E-08 7.661428E-08 8.337285E-08 9.013139E-08 + 6.409680E-08 7.088881E-08 7.766025E-08 8.440897E-08 9.116483E-08 + 6.528236E-08 7.205779E-08 7.881338E-08 8.555175E-08 9.230556E-08 + 6.651859E-08 7.327515E-08 8.001334E-08 8.674102E-08 9.349324E-08 + 6.780300E-08 7.453789E-08 8.125719E-08 8.797378E-08 9.472482E-08 + 6.910398E-08 7.581409E-08 8.251300E-08 8.921786E-08 9.596773E-08 + 7.046600E-08 7.714782E-08 8.382456E-08 9.051704E-08 9.726594E-08 + 7.188814E-08 7.853794E-08 8.519058E-08 9.186989E-08 9.861778E-08 + 7.335211E-08 7.996585E-08 8.659216E-08 9.325708E-08 1.000033E-07 + 7.487775E-08 8.145110E-08 8.804849E-08 9.469757E-08 1.014414E-07 + 7.648863E-08 8.301699E-08 8.958247E-08 9.621410E-08 1.029545E-07 + 7.816528E-08 8.464342E-08 9.117338E-08 9.778510E-08 1.045202E-07 + 7.986783E-08 8.628936E-08 9.277889E-08 9.936660E-08 1.060924E-07 + 8.129806E-08 8.765155E-08 9.408970E-08 1.006415E-07 1.073445E-07 + 8.201931E-08 8.828185E-08 9.464528E-08 1.011348E-07 1.077850E-07 + 8.235704E-08 8.850079E-08 9.476353E-08 1.011644E-07 1.077347E-07 + 8.270680E-08 8.870208E-08 9.483863E-08 1.011280E-07 1.075970E-07 + 8.323316E-08 8.904631E-08 9.502822E-08 1.011816E-07 1.075276E-07 + 8.408620E-08 8.968056E-08 9.547668E-08 1.014677E-07 1.076682E-07 + 8.534368E-08 9.067881E-08 9.625392E-08 1.020524E-07 1.080813E-07 + 8.707617E-08 9.210848E-08 9.742336E-08 1.029950E-07 1.088223E-07 + 8.937873E-08 9.406461E-08 9.907853E-08 1.043866E-07 1.099795E-07 + 9.234055E-08 9.663897E-08 1.013115E-07 1.063180E-07 1.116421E-07 + 9.603198E-08 9.990586E-08 1.041982E-07 1.088649E-07 1.138838E-07 + 1.005119E-07 1.039286E-07 1.078039E-07 1.120926E-07 1.167688E-07 + 1.058520E-07 1.087852E-07 1.122117E-07 1.160871E-07 1.203838E-07 + 1.121150E-07 1.145438E-07 1.174938E-07 1.209234E-07 1.248053E-07 + 1.193777E-07 1.212880E-07 1.237407E-07 1.266974E-07 1.301335E-07 + 1.277250E-07 1.291123E-07 1.310570E-07 1.335236E-07 1.364913E-07 + 1.372296E-07 1.380983E-07 1.395334E-07 1.415026E-07 1.439887E-07 + 1.479508E-07 1.483150E-07 1.492500E-07 1.507258E-07 1.527294E-07 + 1.599448E-07 1.598183E-07 1.602628E-07 1.612512E-07 1.627739E-07 + 1.732835E-07 1.726767E-07 1.726382E-07 1.731432E-07 1.741854E-07 + 1.880550E-07 1.869797E-07 1.864671E-07 1.864947E-07 1.870591E-07 + 2.043427E-07 2.028169E-07 2.018443E-07 2.014057E-07 2.014999E-07 + 2.222034E-07 2.202570E-07 2.188492E-07 2.179647E-07 2.176056E-07 + 2.416614E-07 2.393399E-07 2.375361E-07 2.362398E-07 2.354572E-07 + 2.627888E-07 2.601384E-07 2.579783E-07 2.563046E-07 2.551280E-07 + 2.856691E-07 2.827356E-07 2.802583E-07 2.782398E-07 2.766966E-07 + 3.102170E-07 3.070734E-07 3.043445E-07 3.020410E-07 3.001854E-07 + 3.359611E-07 3.327337E-07 3.298742E-07 3.274062E-07 3.253536E-07 + 3.632107E-07 3.599723E-07 3.570557E-07 3.544980E-07 3.522721E-07 + 3.923268E-07 3.891160E-07 3.861844E-07 3.835274E-07 3.812068E-07 + 4.233319E-07 4.201905E-07 4.172568E-07 4.145482E-07 4.121918E-07 + 4.562523E-07 4.532191E-07 4.502789E-07 4.476080E-07 4.452611E-07 + 4.910716E-07 4.880993E-07 4.852817E-07 4.826996E-07 4.804092E-07 + 5.275786E-07 5.247954E-07 5.221566E-07 5.197218E-07 5.175445E-07 + 5.657227E-07 5.632227E-07 5.608228E-07 5.585938E-07 5.565867E-07 + 5.959342E-07 5.936896E-07 5.915182E-07 5.894879E-07 5.876441E-07 + +Band: 6, gas: 1, k-terms: 12 + 1.863216E-08 1.748251E-08 1.705439E-08 1.734277E-08 1.839691E-08 + 2.272105E-08 2.132076E-08 2.080064E-08 2.115603E-08 2.245675E-08 + 2.770727E-08 2.600263E-08 2.536893E-08 2.581234E-08 2.741048E-08 + 3.378701E-08 3.170888E-08 3.094322E-08 3.149340E-08 3.345843E-08 + 4.119991E-08 3.866597E-08 3.773844E-08 3.841413E-08 4.083825E-08 + 5.024205E-08 4.715225E-08 4.602384E-08 4.686262E-08 4.983914E-08 + 6.126636E-08 5.750686E-08 5.613326E-08 5.716404E-08 6.082845E-08 + 7.470648E-08 7.013187E-08 6.846104E-08 6.972543E-08 7.424612E-08 + 9.107657E-08 8.550773E-08 8.350056E-08 8.506334E-08 9.064244E-08 + 1.108100E-07 1.041671E-07 1.018073E-07 1.038915E-07 1.108524E-07 + 1.342408E-07 1.265817E-07 1.241251E-07 1.272159E-07 1.362462E-07 + 1.620514E-07 1.536023E-07 1.514932E-07 1.562737E-07 1.682726E-07 + 1.955998E-07 1.864386E-07 1.849772E-07 1.922541E-07 2.082940E-07 + 2.361973E-07 2.264451E-07 2.261739E-07 2.368087E-07 2.580706E-07 + 2.854524E-07 2.751899E-07 2.768769E-07 2.920921E-07 3.206433E-07 + 3.454864E-07 3.350173E-07 3.393802E-07 3.604707E-07 3.984303E-07 + 4.183037E-07 4.083514E-07 4.167357E-07 4.457031E-07 4.956981E-07 + 5.067832E-07 4.980863E-07 5.123791E-07 5.518268E-07 6.170217E-07 + 6.144626E-07 6.079919E-07 6.308596E-07 6.837784E-07 7.691863E-07 + 7.460203E-07 7.434425E-07 7.780495E-07 8.489353E-07 9.622218E-07 + 9.062669E-07 9.104305E-07 9.609581E-07 1.054762E-06 1.202655E-06 + 1.102882E-06 1.116592E-06 1.188226E-06 1.313665E-06 1.512893E-06 + 1.344419E-06 1.371454E-06 1.469331E-06 1.635702E-06 1.899383E-06 + 1.639081E-06 1.681293E-06 1.809794E-06 2.022653E-06 2.358077E-06 + 1.999335E-06 2.048057E-06 2.202238E-06 2.460437E-06 2.865969E-06 + 2.439357E-06 2.485116E-06 2.658558E-06 2.955706E-06 3.430437E-06 + 2.978431E-06 3.013027E-06 3.201467E-06 3.535147E-06 4.071361E-06 + 3.642103E-06 3.656163E-06 3.856413E-06 4.230461E-06 4.832300E-06 + 4.461261E-06 4.442339E-06 4.646167E-06 5.062761E-06 5.732615E-06 + 5.466279E-06 5.406889E-06 5.600427E-06 6.065980E-06 6.827893E-06 + 6.705229E-06 6.585158E-06 6.767787E-06 7.279705E-06 8.135830E-06 + 8.227465E-06 8.034707E-06 8.188968E-06 8.752256E-06 9.702129E-06 + 1.010641E-05 9.810554E-06 9.928399E-06 1.054117E-05 1.161107E-05 + 1.241399E-05 1.199498E-05 1.205627E-05 1.271102E-05 1.392482E-05 + 1.526098E-05 1.467317E-05 1.465683E-05 1.534503E-05 1.672217E-05 + 1.876094E-05 1.796593E-05 1.783539E-05 1.854601E-05 2.010096E-05 + 2.307223E-05 2.199736E-05 2.172535E-05 2.244407E-05 2.418595E-05 + 2.839183E-05 2.695090E-05 2.647867E-05 2.717709E-05 2.911849E-05 + 3.494482E-05 3.302603E-05 3.230262E-05 3.294995E-05 3.510300E-05 + 4.297943E-05 4.047643E-05 3.939482E-05 3.998253E-05 4.239096E-05 + 5.277193E-05 4.955809E-05 4.809060E-05 4.857909E-05 5.128090E-05 + 6.472712E-05 6.063625E-05 5.870812E-05 5.908084E-05 6.213255E-05 + 7.935348E-05 7.419700E-05 7.165499E-05 7.187329E-05 7.528128E-05 + 9.727904E-05 9.078262E-05 8.745995E-05 8.739723E-05 9.119826E-05 + 1.192195E-04 1.110526E-04 1.067355E-04 1.062939E-04 1.104915E-04 + 1.458837E-04 1.356834E-04 1.301329E-04 1.292695E-04 1.338851E-04 + 1.779735E-04 1.654249E-04 1.585174E-04 1.571857E-04 1.624116E-04 + 2.166763E-04 2.013725E-04 1.928541E-04 1.910516E-04 1.970036E-04 + 2.634308E-04 2.448869E-04 2.343646E-04 2.319814E-04 2.387236E-04 + 3.186543E-04 2.967014E-04 2.842362E-04 2.815405E-04 2.896383E-04 + 3.791994E-04 3.554172E-04 3.428986E-04 3.421327E-04 3.541001E-04 + 4.483796E-04 4.239094E-04 4.131901E-04 4.166584E-04 4.348139E-04 + 5.307254E-04 5.061892E-04 4.986321E-04 5.074833E-04 5.333144E-04 + 6.285252E-04 6.054470E-04 6.023762E-04 6.182375E-04 6.535632E-04 + 7.456206E-04 7.258714E-04 7.279387E-04 7.528327E-04 7.989134E-04 + 8.858341E-04 8.704640E-04 8.796643E-04 9.141659E-04 9.730426E-04 + 1.054178E-03 1.044322E-03 1.061760E-03 1.108416E-03 1.180706E-03 + 1.256493E-03 1.252446E-03 1.280785E-03 1.340063E-03 1.427601E-03 + 1.439191E-03 1.437402E-03 1.472713E-03 1.541078E-03 1.641885E-03 + 1.763331E-07 1.990717E-07 2.355683E-07 2.886834E-07 3.571582E-07 + 2.144763E-07 2.419700E-07 2.856330E-07 3.490214E-07 4.315668E-07 + 2.611368E-07 2.941638E-07 3.460410E-07 4.221914E-07 5.208101E-07 + 3.176944E-07 3.576693E-07 4.195204E-07 5.105437E-07 6.290758E-07 + 3.863720E-07 4.346701E-07 5.088376E-07 6.174050E-07 7.603275E-07 + 4.704270E-07 5.283754E-07 6.170355E-07 7.469427E-07 9.187810E-07 + 5.725015E-07 6.421612E-07 7.482477E-07 9.034606E-07 1.109585E-06 + 6.971093E-07 7.809018E-07 9.079464E-07 1.092502E-06 1.340391E-06 + 8.487834E-07 9.503694E-07 1.102649E-06 1.322591E-06 1.619369E-06 + 1.036512E-06 1.160489E-06 1.344103E-06 1.608816E-06 1.966738E-06 + 1.272591E-06 1.426589E-06 1.654027E-06 1.979366E-06 2.415882E-06 + 1.570921E-06 1.765283E-06 2.051204E-06 2.456575E-06 2.996512E-06 + 1.943234E-06 2.187753E-06 2.548945E-06 3.059271E-06 3.724300E-06 + 2.404521E-06 2.713857E-06 3.171552E-06 3.811071E-06 4.632707E-06 + 2.971526E-06 3.371368E-06 3.950680E-06 4.740897E-06 5.772220E-06 + 3.682906E-06 4.191280E-06 4.913101E-06 5.900133E-06 7.179484E-06 + 4.570161E-06 5.213780E-06 6.125674E-06 7.351351E-06 8.941988E-06 + 5.667278E-06 6.495623E-06 7.647665E-06 9.166513E-06 1.113666E-05 + 7.046317E-06 8.087974E-06 9.543339E-06 1.144319E-05 1.387006E-05 + 8.749638E-06 1.007824E-05 1.191306E-05 1.428403E-05 1.729189E-05 + 1.087263E-05 1.256751E-05 1.487532E-05 1.782890E-05 2.154314E-05 + 1.353576E-05 1.567636E-05 1.857492E-05 2.225596E-05 2.687312E-05 + 1.684406E-05 1.954804E-05 2.316546E-05 2.773246E-05 3.344100E-05 + 2.078229E-05 2.411779E-05 2.859032E-05 3.417279E-05 4.114504E-05 + 2.516794E-05 2.915411E-05 3.446369E-05 4.112126E-05 4.937504E-05 + 3.014382E-05 3.481033E-05 4.092859E-05 4.867233E-05 5.831485E-05 + 3.593651E-05 4.129825E-05 4.832528E-05 5.724728E-05 6.842299E-05 + 4.282756E-05 4.894610E-05 5.700921E-05 6.722294E-05 8.006256E-05 + 5.114588E-05 5.802132E-05 6.726143E-05 7.908661E-05 9.362291E-05 + 6.096224E-05 6.883293E-05 7.948313E-05 9.298378E-05 1.096817E-04 + 7.265127E-05 8.172811E-05 9.399527E-05 1.095063E-04 1.286522E-04 + 8.683526E-05 9.718294E-05 1.112430E-04 1.290730E-04 1.510084E-04 + 1.038780E-04 1.158320E-04 1.318192E-04 1.524143E-04 1.776946E-04 + 1.243036E-04 1.381667E-04 1.564725E-04 1.803551E-04 2.095693E-04 + 1.485133E-04 1.647827E-04 1.858095E-04 2.134718E-04 2.470295E-04 + 1.776289E-04 1.965518E-04 2.206147E-04 2.526839E-04 2.912999E-04 + 2.122750E-04 2.341376E-04 2.620601E-04 2.989543E-04 3.434762E-04 + 2.536565E-04 2.788415E-04 3.108730E-04 3.531634E-04 4.049614E-04 + 3.028576E-04 3.322037E-04 3.689037E-04 4.173111E-04 4.773115E-04 + 3.616477E-04 3.957861E-04 4.375953E-04 4.929984E-04 5.623948E-04 + 4.317596E-04 4.705496E-04 5.194166E-04 5.831610E-04 6.631553E-04 + 5.150462E-04 5.590565E-04 6.157915E-04 6.896975E-04 7.823810E-04 + 6.129944E-04 6.630716E-04 7.286582E-04 8.138584E-04 9.212665E-04 + 7.275539E-04 7.840542E-04 8.605573E-04 9.584783E-04 1.083084E-03 + 8.623528E-04 9.254218E-04 1.014548E-03 1.127455E-03 1.272708E-03 + 1.022321E-03 1.091213E-03 1.194298E-03 1.326631E-03 1.496477E-03 + 1.209164E-03 1.286510E-03 1.408245E-03 1.564228E-03 1.765641E-03 + 1.429880E-03 1.519473E-03 1.663261E-03 1.849097E-03 2.089137E-03 + 1.690714E-03 1.794112E-03 1.962685E-03 2.187315E-03 2.476965E-03 + 2.005858E-03 2.129562E-03 2.332108E-03 2.608631E-03 2.964589E-03 + 2.402608E-03 2.571470E-03 2.834288E-03 3.193250E-03 3.641449E-03 + 2.908396E-03 3.141714E-03 3.497066E-03 3.966675E-03 4.536103E-03 + 3.537435E-03 3.858460E-03 4.328791E-03 4.931573E-03 5.645679E-03 + 4.318009E-03 4.756580E-03 5.370532E-03 6.131966E-03 7.030642E-03 + 5.288146E-03 5.876421E-03 6.645996E-03 7.607961E-03 8.739085E-03 + 6.471494E-03 7.232767E-03 8.207281E-03 9.401078E-03 1.081589E-02 + 7.906766E-03 8.896134E-03 1.010558E-02 1.160788E-02 1.335489E-02 + 9.636707E-03 1.088366E-02 1.240878E-02 1.427729E-02 1.644149E-02 + 1.113317E-02 1.257574E-02 1.435803E-02 1.654507E-02 1.905759E-02 + 3.701237E-06 4.974265E-06 6.621680E-06 9.031424E-06 1.216238E-05 + 4.466792E-06 5.986876E-06 7.911750E-06 1.074304E-05 1.434657E-05 + 5.392928E-06 7.206874E-06 9.442485E-06 1.276227E-05 1.695905E-05 + 6.514522E-06 8.675478E-06 1.129269E-05 1.518857E-05 2.006334E-05 + 7.872920E-06 1.044674E-05 1.350318E-05 1.809161E-05 2.374450E-05 + 9.516057E-06 1.254549E-05 1.619704E-05 2.151194E-05 2.809125E-05 + 1.150536E-05 1.507353E-05 1.944272E-05 2.561409E-05 3.328798E-05 + 1.391123E-05 1.810097E-05 2.337805E-05 3.047849E-05 3.941521E-05 + 1.683884E-05 2.177143E-05 2.806422E-05 3.634137E-05 4.675225E-05 + 2.048422E-05 2.637638E-05 3.382372E-05 4.352107E-05 5.575343E-05 + 2.523819E-05 3.238855E-05 4.131182E-05 5.285154E-05 6.739386E-05 + 3.142088E-05 4.022994E-05 5.097489E-05 6.491731E-05 8.235674E-05 + 3.920170E-05 5.010269E-05 6.290793E-05 7.988900E-05 1.007499E-04 + 4.891088E-05 6.240336E-05 7.751242E-05 9.819801E-05 1.230839E-04 + 6.091977E-05 7.756577E-05 9.575204E-05 1.205652E-04 1.499790E-04 + 7.589147E-05 9.588211E-05 1.180228E-04 1.475630E-04 1.823786E-04 + 9.442795E-05 1.182975E-04 1.449211E-04 1.801479E-04 2.212481E-04 + 1.172915E-04 1.457594E-04 1.780593E-04 2.194672E-04 2.678704E-04 + 1.452448E-04 1.790104E-04 2.179017E-04 2.665755E-04 3.227569E-04 + 1.793814E-04 2.191470E-04 2.658968E-04 3.228233E-04 3.881229E-04 + 2.207989E-04 2.677520E-04 3.231025E-04 3.896712E-04 4.651969E-04 + 2.709125E-04 3.255385E-04 3.909368E-04 4.679250E-04 5.560017E-04 + 3.302608E-04 3.937118E-04 4.707003E-04 5.596351E-04 6.612236E-04 + 3.969065E-04 4.699040E-04 5.586887E-04 6.610889E-04 7.770891E-04 + 4.643149E-04 5.475228E-04 6.467775E-04 7.626623E-04 8.934274E-04 + 5.341638E-04 6.287737E-04 7.374699E-04 8.672108E-04 1.013358E-03 + 6.094159E-04 7.178126E-04 8.360017E-04 9.797901E-04 1.143881E-03 + 6.947864E-04 8.147817E-04 9.444019E-04 1.104473E-03 1.289891E-03 + 7.923514E-04 9.246940E-04 1.069943E-03 1.248659E-03 1.457049E-03 + 9.048920E-04 1.049302E-03 1.217449E-03 1.415284E-03 1.651917E-03 + 1.034306E-03 1.193420E-03 1.386283E-03 1.608266E-03 1.880100E-03 + 1.188557E-03 1.362806E-03 1.582900E-03 1.833130E-03 2.151046E-03 + 1.368200E-03 1.564203E-03 1.818152E-03 2.106860E-03 2.479192E-03 + 1.580339E-03 1.806279E-03 2.097623E-03 2.444074E-03 2.878508E-03 + 1.831913E-03 2.097466E-03 2.434565E-03 2.851573E-03 3.354015E-03 + 2.137450E-03 2.450604E-03 2.844161E-03 3.344713E-03 3.924244E-03 + 2.509702E-03 2.883798E-03 3.340328E-03 3.932404E-03 4.607002E-03 + 2.964414E-03 3.408105E-03 3.943133E-03 4.634571E-03 5.430624E-03 + 3.518091E-03 4.041168E-03 4.672387E-03 5.469375E-03 6.420790E-03 + 4.193367E-03 4.810960E-03 5.547730E-03 6.473767E-03 7.591906E-03 + 5.021461E-03 5.741747E-03 6.615277E-03 7.693048E-03 9.008897E-03 + 6.027131E-03 6.872187E-03 7.902473E-03 9.164390E-03 1.071504E-02 + 7.234996E-03 8.224378E-03 9.446238E-03 1.091182E-02 1.274615E-02 + 8.677521E-03 9.826001E-03 1.128389E-02 1.299920E-02 1.515635E-02 + 1.040781E-02 1.174054E-02 1.345705E-02 1.546860E-02 1.799477E-02 + 1.250272E-02 1.404621E-02 1.605227E-02 1.841552E-02 2.136836E-02 + 1.501557E-02 1.682162E-02 1.919754E-02 2.199314E-02 2.545168E-02 + 1.803312E-02 2.016723E-02 2.299253E-02 2.630997E-02 3.034557E-02 + 2.161734E-02 2.415323E-02 2.747629E-02 3.143314E-02 3.617756E-02 + 2.603512E-02 2.907809E-02 3.299805E-02 3.777764E-02 4.343215E-02 + 3.192065E-02 3.576977E-02 4.059697E-02 4.651308E-02 5.346712E-02 + 3.959513E-02 4.446446E-02 5.061146E-02 5.794409E-02 6.659962E-02 + 4.913615E-02 5.526244E-02 6.306186E-02 7.221746E-02 8.295631E-02 + 6.093464E-02 6.886998E-02 7.873785E-02 9.006616E-02 1.034064E-01 + 7.570858E-02 8.582243E-02 9.806971E-02 1.121179E-01 1.285815E-01 + 9.399594E-02 1.066293E-01 1.217998E-01 1.391677E-01 1.592604E-01 + 1.164425E-01 1.323323E-01 1.508796E-01 1.723945E-01 1.964655E-01 + 1.436438E-01 1.632715E-01 1.860960E-01 2.123947E-01 2.412902E-01 + 1.667636E-01 1.895277E-01 2.160109E-01 2.462203E-01 2.788743E-01 + 1.548439E-04 1.910032E-04 2.374852E-04 3.001850E-04 3.835562E-04 + 1.828870E-04 2.235221E-04 2.735653E-04 3.420892E-04 4.293494E-04 + 2.157479E-04 2.613244E-04 3.156952E-04 3.891394E-04 4.818653E-04 + 2.541630E-04 3.053024E-04 3.641408E-04 4.439127E-04 5.416132E-04 + 2.992812E-04 3.562233E-04 4.200985E-04 5.060908E-04 6.099891E-04 + 3.514770E-04 4.149285E-04 4.846863E-04 5.773721E-04 6.878174E-04 + 4.126441E-04 4.826023E-04 5.593342E-04 6.583881E-04 7.778949E-04 + 4.836886E-04 5.608844E-04 6.460003E-04 7.516770E-04 8.813313E-04 + 5.665537E-04 6.517462E-04 7.455337E-04 8.599746E-04 1.000814E-03 + 6.648405E-04 7.602432E-04 8.635305E-04 9.873482E-04 1.142078E-03 + 7.837177E-04 8.916852E-04 1.008106E-03 1.145084E-03 1.318703E-03 + 9.288843E-04 1.052544E-03 1.183371E-03 1.339311E-03 1.537168E-03 + 1.101468E-03 1.244710E-03 1.392555E-03 1.573234E-03 1.802806E-03 + 1.307611E-03 1.475424E-03 1.642667E-03 1.855745E-03 2.123260E-03 + 1.555131E-03 1.754757E-03 1.948767E-03 2.201747E-03 2.514333E-03 + 1.857181E-03 2.091369E-03 2.325005E-03 2.624480E-03 2.996685E-03 + 2.230466E-03 2.506635E-03 2.784127E-03 3.145324E-03 3.584494E-03 + 2.693911E-03 3.020573E-03 3.355120E-03 3.783433E-03 4.300892E-03 + 3.269191E-03 3.655390E-03 4.058816E-03 4.560616E-03 5.159047E-03 + 3.983049E-03 4.429279E-03 4.915554E-03 5.500226E-03 6.193117E-03 + 4.860264E-03 5.379589E-03 5.952542E-03 6.637726E-03 7.435611E-03 + 5.932310E-03 6.529478E-03 7.207806E-03 8.001855E-03 8.935485E-03 + 7.228814E-03 7.916864E-03 8.721497E-03 9.640782E-03 1.072963E-02 + 8.760746E-03 9.555171E-03 1.048384E-02 1.155578E-02 1.280198E-02 + 1.048440E-02 1.141296E-02 1.245821E-02 1.368702E-02 1.509488E-02 + 1.245474E-02 1.355711E-02 1.471724E-02 1.611015E-02 1.766513E-02 + 1.474886E-02 1.609346E-02 1.738243E-02 1.892848E-02 2.065297E-02 + 1.748059E-02 1.906613E-02 2.050039E-02 2.223461E-02 2.417775E-02 + 2.071536E-02 2.261695E-02 2.426593E-02 2.620093E-02 2.837935E-02 + 2.463612E-02 2.682196E-02 2.882614E-02 3.095110E-02 3.341326E-02 + 2.933682E-02 3.184259E-02 3.427798E-02 3.663096E-02 3.938020E-02 + 3.502097E-02 3.788600E-02 4.078613E-02 4.336544E-02 4.652711E-02 + 4.176955E-02 4.509409E-02 4.862844E-02 5.150900E-02 5.513328E-02 + 4.983025E-02 5.380284E-02 5.789913E-02 6.146021E-02 6.547016E-02 + 5.946034E-02 6.430632E-02 6.905570E-02 7.342698E-02 7.784560E-02 + 7.101906E-02 7.691355E-02 8.252154E-02 8.782989E-02 9.267710E-02 + 8.494039E-02 9.219737E-02 9.857477E-02 1.049914E-01 1.104498E-01 + 1.015409E-01 1.104305E-01 1.179477E-01 1.257096E-01 1.320261E-01 + 1.214669E-01 1.321264E-01 1.413437E-01 1.503070E-01 1.582571E-01 + 1.452750E-01 1.582322E-01 1.692736E-01 1.800310E-01 1.896403E-01 + 1.741661E-01 1.897756E-01 2.033235E-01 2.158679E-01 2.275524E-01 + 2.089507E-01 2.280008E-01 2.444693E-01 2.592216E-01 2.732726E-01 + 2.507855E-01 2.739449E-01 2.939796E-01 3.111933E-01 3.283200E-01 + 3.008210E-01 3.284434E-01 3.534612E-01 3.737245E-01 3.945232E-01 + 3.606060E-01 3.940533E-01 4.240121E-01 4.483213E-01 4.729257E-01 + 4.324087E-01 4.729507E-01 5.090081E-01 5.374476E-01 5.665825E-01 + 5.189612E-01 5.672837E-01 6.108449E-01 6.451636E-01 6.790540E-01 + 6.226659E-01 6.795920E-01 7.327036E-01 7.743801E-01 8.133829E-01 + 7.456243E-01 8.141453E-01 8.776584E-01 9.281012E-01 9.741908E-01 + 8.968380E-01 9.784633E-01 1.052212E+00 1.113665E+00 1.166329E+00 + 1.095758E+00 1.190685E+00 1.273846E+00 1.344307E+00 1.407199E+00 + 1.346878E+00 1.453427E+00 1.547722E+00 1.624863E+00 1.697094E+00 + 1.648351E+00 1.765064E+00 1.873205E+00 1.959460E+00 2.041618E+00 + 2.006188E+00 2.138436E+00 2.260199E+00 2.353915E+00 2.449219E+00 + 2.428151E+00 2.577583E+00 2.712931E+00 2.815714E+00 2.920937E+00 + 2.922056E+00 3.090905E+00 3.239145E+00 3.356673E+00 3.474338E+00 + 3.499203E+00 3.686474E+00 3.850767E+00 3.985879E+00 4.109197E+00 + 4.168844E+00 4.376173E+00 4.559822E+00 4.711336E+00 4.840136E+00 + 4.723985E+00 4.953063E+00 5.157729E+00 5.317492E+00 5.457235E+00 + 3.404725E-03 4.896769E-03 7.247253E-03 1.086251E-02 1.633589E-02 + 3.898894E-03 5.519464E-03 8.001529E-03 1.183279E-02 1.749180E-02 + 4.471802E-03 6.243674E-03 8.892210E-03 1.289911E-02 1.879830E-02 + 5.140784E-03 7.083384E-03 9.909261E-03 1.416134E-02 2.026491E-02 + 5.934196E-03 8.041844E-03 1.107497E-02 1.557536E-02 2.194450E-02 + 6.837052E-03 9.166946E-03 1.241556E-02 1.718810E-02 2.385106E-02 + 7.911957E-03 1.044778E-02 1.396713E-02 1.901748E-02 2.609420E-02 + 9.182061E-03 1.196025E-02 1.577724E-02 2.111646E-02 2.863958E-02 + 1.067376E-02 1.373577E-02 1.785429E-02 2.357945E-02 3.158800E-02 + 1.254065E-02 1.594668E-02 2.042209E-02 2.653602E-02 3.507219E-02 + 1.489713E-02 1.873275E-02 2.376634E-02 3.041994E-02 3.974627E-02 + 1.790420E-02 2.226117E-02 2.793272E-02 3.531872E-02 4.555846E-02 + 2.157007E-02 2.648326E-02 3.296274E-02 4.121033E-02 5.246436E-02 + 2.594897E-02 3.155099E-02 3.885728E-02 4.804570E-02 6.032432E-02 + 3.117480E-02 3.759858E-02 4.576396E-02 5.609638E-02 6.960105E-02 + 3.743350E-02 4.469108E-02 5.405797E-02 6.548360E-02 8.053781E-02 + 4.494812E-02 5.320793E-02 6.354584E-02 7.662864E-02 9.312079E-02 + 5.383913E-02 6.327469E-02 7.480382E-02 8.949584E-02 1.078146E-01 + 6.455866E-02 7.527957E-02 8.852568E-02 1.047292E-01 1.247824E-01 + 7.739432E-02 8.948272E-02 1.044964E-01 1.224170E-01 1.446113E-01 + 9.273635E-02 1.065212E-01 1.231723E-01 1.433895E-01 1.676239E-01 + 1.109832E-01 1.266252E-01 1.454775E-01 1.678524E-01 1.944762E-01 + 1.326261E-01 1.505994E-01 1.717003E-01 1.961533E-01 2.256273E-01 + 1.576498E-01 1.775242E-01 2.005278E-01 2.277781E-01 2.600048E-01 + 1.846882E-01 2.064668E-01 2.315558E-01 2.613836E-01 2.960415E-01 + 2.148840E-01 2.382224E-01 2.652475E-01 2.974967E-01 3.345739E-01 + 2.498697E-01 2.749976E-01 3.049912E-01 3.386234E-01 3.781271E-01 + 2.908779E-01 3.187360E-01 3.505598E-01 3.863386E-01 4.286142E-01 + 3.394284E-01 3.705967E-01 4.041223E-01 4.428986E-01 4.877021E-01 + 3.978130E-01 4.321922E-01 4.683449E-01 5.096901E-01 5.583436E-01 + 4.691726E-01 5.054291E-01 5.456499E-01 5.904354E-01 6.414208E-01 + 5.531780E-01 5.935823E-01 6.381646E-01 6.870152E-01 7.405571E-01 + 6.534917E-01 6.982468E-01 7.476370E-01 8.001495E-01 8.582529E-01 + 7.759837E-01 8.247315E-01 8.787527E-01 9.349338E-01 9.981344E-01 + 9.215010E-01 9.766743E-01 1.034171E+00 1.097536E+00 1.166520E+00 + 1.096641E+00 1.159036E+00 1.222945E+00 1.290557E+00 1.367513E+00 + 1.304634E+00 1.373163E+00 1.446870E+00 1.520761E+00 1.603414E+00 + 1.552595E+00 1.632210E+00 1.714938E+00 1.798229E+00 1.885729E+00 + 1.851121E+00 1.942792E+00 2.035252E+00 2.128704E+00 2.224900E+00 + 2.209880E+00 2.314294E+00 2.417868E+00 2.524764E+00 2.630620E+00 + 2.638766E+00 2.759104E+00 2.879382E+00 2.999302E+00 3.116370E+00 + 3.148737E+00 3.290901E+00 3.427251E+00 3.562432E+00 3.700776E+00 + 3.761469E+00 3.927471E+00 4.079437E+00 4.223929E+00 4.383936E+00 + 4.486433E+00 4.676457E+00 4.848324E+00 5.013052E+00 5.191188E+00 + 5.342922E+00 5.572546E+00 5.756046E+00 5.948149E+00 6.141761E+00 + 6.365536E+00 6.621057E+00 6.844287E+00 7.044155E+00 7.264546E+00 + 7.568460E+00 7.862860E+00 8.117948E+00 8.351694E+00 8.584335E+00 + 8.979079E+00 9.303509E+00 9.622859E+00 9.872817E+00 1.012377E+01 + 1.062362E+01 1.099161E+01 1.135910E+01 1.164043E+01 1.192643E+01 + 1.255651E+01 1.296942E+01 1.339146E+01 1.371104E+01 1.400303E+01 + 1.486351E+01 1.532277E+01 1.578241E+01 1.611904E+01 1.646773E+01 + 1.754870E+01 1.804710E+01 1.853131E+01 1.889569E+01 1.925777E+01 + 2.059261E+01 2.115882E+01 2.167596E+01 2.204959E+01 2.241835E+01 + 2.410609E+01 2.466659E+01 2.519129E+01 2.555685E+01 2.599458E+01 + 2.801334E+01 2.856179E+01 2.908867E+01 2.944072E+01 2.986624E+01 + 3.238571E+01 3.293192E+01 3.344267E+01 3.376874E+01 3.418289E+01 + 3.715890E+01 3.771731E+01 3.821231E+01 3.853656E+01 3.884668E+01 + 4.243887E+01 4.296311E+01 4.343202E+01 4.374888E+01 4.402908E+01 + 4.678816E+01 4.726011E+01 4.764708E+01 4.796029E+01 4.820557E+01 + 2.242859E-01 3.750287E-01 6.045741E-01 9.573125E-01 1.457453E+00 + 2.378975E-01 3.891923E-01 6.223530E-01 9.749718E-01 1.479006E+00 + 2.526876E-01 4.072272E-01 6.421700E-01 9.971830E-01 1.502465E+00 + 2.692124E-01 4.285639E-01 6.662281E-01 1.022981E+00 1.526771E+00 + 2.891624E-01 4.505403E-01 6.902442E-01 1.053797E+00 1.553910E+00 + 3.093666E-01 4.782119E-01 7.204221E-01 1.082510E+00 1.586654E+00 + 3.335430E-01 5.068168E-01 7.568745E-01 1.119830E+00 1.630083E+00 + 3.617235E-01 5.409963E-01 7.963912E-01 1.158392E+00 1.670040E+00 + 3.928976E-01 5.807083E-01 8.415758E-01 1.206874E+00 1.729463E+00 + 4.349424E-01 6.319002E-01 9.000066E-01 1.273498E+00 1.801836E+00 + 4.922251E-01 7.034590E-01 9.859088E-01 1.370822E+00 1.922730E+00 + 5.654071E-01 7.939299E-01 1.093374E+00 1.505264E+00 2.082615E+00 + 6.566284E-01 8.989800E-01 1.223067E+00 1.667934E+00 2.271811E+00 + 7.596027E-01 1.024185E+00 1.369639E+00 1.843979E+00 2.475993E+00 + 8.783144E-01 1.165291E+00 1.533723E+00 2.038359E+00 2.718036E+00 + 1.014812E+00 1.325521E+00 1.723157E+00 2.261630E+00 2.984722E+00 + 1.171933E+00 1.509113E+00 1.928564E+00 2.517425E+00 3.282688E+00 + 1.350416E+00 1.714733E+00 2.167432E+00 2.805097E+00 3.616100E+00 + 1.557355E+00 1.950009E+00 2.457024E+00 3.130819E+00 3.975128E+00 + 1.804011E+00 2.229050E+00 2.781581E+00 3.494770E+00 4.402977E+00 + 2.084073E+00 2.548160E+00 3.141051E+00 3.919902E+00 4.857707E+00 + 2.409242E+00 2.908747E+00 3.557644E+00 4.368867E+00 5.363754E+00 + 2.777267E+00 3.337454E+00 4.027947E+00 4.875739E+00 5.912532E+00 + 3.188055E+00 3.783296E+00 4.501763E+00 5.397655E+00 6.469110E+00 + 3.596972E+00 4.208540E+00 4.952120E+00 5.882466E+00 6.956926E+00 + 4.020896E+00 4.629214E+00 5.399848E+00 6.328834E+00 7.429758E+00 + 4.485006E+00 5.136687E+00 5.915130E+00 6.813611E+00 7.941234E+00 + 5.010749E+00 5.705001E+00 6.482748E+00 7.410796E+00 8.532738E+00 + 5.647704E+00 6.385847E+00 7.141173E+00 8.093605E+00 9.194458E+00 + 6.409619E+00 7.153475E+00 7.985609E+00 8.912344E+00 1.003914E+01 + 7.317576E+00 8.073414E+00 8.958234E+00 9.869174E+00 1.100330E+01 + 8.430742E+00 9.187351E+00 1.009711E+01 1.108727E+01 1.218444E+01 + 9.725815E+00 1.050754E+01 1.143820E+01 1.250127E+01 1.358777E+01 + 1.133740E+01 1.213087E+01 1.309528E+01 1.414681E+01 1.528077E+01 + 1.315073E+01 1.404040E+01 1.498805E+01 1.609878E+01 1.732166E+01 + 1.542302E+01 1.633416E+01 1.728243E+01 1.837127E+01 1.964402E+01 + 1.791187E+01 1.894061E+01 1.994510E+01 2.106369E+01 2.237394E+01 + 2.088740E+01 2.211121E+01 2.319312E+01 2.423737E+01 2.559548E+01 + 2.436785E+01 2.581088E+01 2.696036E+01 2.806340E+01 2.944798E+01 + 2.855489E+01 3.014466E+01 3.143012E+01 3.259297E+01 3.383951E+01 + 3.348921E+01 3.517905E+01 3.671357E+01 3.790879E+01 3.918848E+01 + 3.912550E+01 4.106565E+01 4.267064E+01 4.400917E+01 4.540039E+01 + 4.575539E+01 4.775005E+01 4.967198E+01 5.082282E+01 5.262261E+01 + 5.327222E+01 5.540468E+01 5.740006E+01 5.904567E+01 6.051956E+01 + 6.181923E+01 6.442992E+01 6.633510E+01 6.816758E+01 6.972367E+01 + 7.186399E+01 7.422418E+01 7.640544E+01 7.840683E+01 8.004925E+01 + 8.283997E+01 8.567000E+01 8.779766E+01 9.023973E+01 9.172086E+01 + 9.531861E+01 9.856041E+01 1.007758E+02 1.029537E+02 1.048904E+02 + 1.093269E+02 1.124789E+02 1.149668E+02 1.172845E+02 1.191034E+02 + 1.247565E+02 1.282525E+02 1.314413E+02 1.332406E+02 1.349547E+02 + 1.421366E+02 1.456220E+02 1.490898E+02 1.506821E+02 1.528085E+02 + 1.607623E+02 1.644530E+02 1.675304E+02 1.697183E+02 1.714138E+02 + 1.806732E+02 1.843119E+02 1.872838E+02 1.893788E+02 1.911219E+02 + 2.013601E+02 2.047283E+02 2.072392E+02 2.093122E+02 2.116257E+02 + 2.223037E+02 2.248906E+02 2.279310E+02 2.300757E+02 2.314593E+02 + 2.436953E+02 2.454727E+02 2.475329E+02 2.494544E+02 2.505775E+02 + 2.637303E+02 2.649682E+02 2.667876E+02 2.676651E+02 2.685046E+02 + 2.807341E+02 2.814154E+02 2.826406E+02 2.828239E+02 2.839178E+02 + 2.917923E+02 2.919981E+02 2.922307E+02 2.925840E+02 2.923975E+02 + 5.847864E+00 9.982311E+00 1.569182E+01 2.289201E+01 3.151980E+01 + 5.954488E+00 1.007779E+01 1.577756E+01 2.297876E+01 3.166503E+01 + 6.098840E+00 1.018741E+01 1.589262E+01 2.313899E+01 3.184245E+01 + 6.228857E+00 1.039188E+01 1.603311E+01 2.328684E+01 3.196846E+01 + 6.388008E+00 1.051814E+01 1.613165E+01 2.343963E+01 3.211916E+01 + 6.522278E+00 1.072323E+01 1.629967E+01 2.358814E+01 3.230843E+01 + 6.728136E+00 1.092835E+01 1.658032E+01 2.377241E+01 3.250527E+01 + 6.939556E+00 1.116066E+01 1.679351E+01 2.398092E+01 3.261921E+01 + 7.181009E+00 1.144723E+01 1.713528E+01 2.418611E+01 3.294431E+01 + 7.566209E+00 1.183045E+01 1.764217E+01 2.472714E+01 3.344925E+01 + 8.212476E+00 1.262283E+01 1.857379E+01 2.563808E+01 3.449236E+01 + 9.117768E+00 1.372866E+01 1.972615E+01 2.715841E+01 3.597630E+01 + 1.020664E+01 1.498078E+01 2.111163E+01 2.876431E+01 3.795820E+01 + 1.140110E+01 1.638199E+01 2.273685E+01 3.049511E+01 3.990460E+01 + 1.272405E+01 1.794922E+01 2.447910E+01 3.230150E+01 4.229072E+01 + 1.414180E+01 1.962743E+01 2.615196E+01 3.427606E+01 4.448046E+01 + 1.574748E+01 2.147720E+01 2.822695E+01 3.641992E+01 4.706559E+01 + 1.759255E+01 2.346779E+01 3.031012E+01 3.900679E+01 4.984066E+01 + 1.944776E+01 2.547837E+01 3.271004E+01 4.182952E+01 5.268028E+01 + 2.165213E+01 2.786761E+01 3.531362E+01 4.472889E+01 5.596926E+01 + 2.410131E+01 3.031840E+01 3.831325E+01 4.805062E+01 5.900857E+01 + 2.686958E+01 3.328840E+01 4.130422E+01 5.119927E+01 6.271037E+01 + 2.970407E+01 3.648941E+01 4.464483E+01 5.492015E+01 6.645921E+01 + 3.265229E+01 3.979231E+01 4.800707E+01 5.835153E+01 6.979370E+01 + 3.542627E+01 4.226053E+01 5.040518E+01 6.053816E+01 7.179165E+01 + 3.794025E+01 4.456784E+01 5.267539E+01 6.225336E+01 7.326967E+01 + 4.088628E+01 4.759445E+01 5.526718E+01 6.409843E+01 7.457630E+01 + 4.363632E+01 5.044147E+01 5.812155E+01 6.671306E+01 7.678498E+01 + 4.717069E+01 5.454410E+01 6.157022E+01 7.015251E+01 7.915471E+01 + 5.149922E+01 5.879891E+01 6.628337E+01 7.441690E+01 8.365851E+01 + 5.585701E+01 6.381158E+01 7.134972E+01 7.888225E+01 8.819953E+01 + 6.193370E+01 6.975622E+01 7.745681E+01 8.528826E+01 9.404591E+01 + 6.928379E+01 7.690755E+01 8.455270E+01 9.241896E+01 1.010409E+02 + 7.800961E+01 8.521557E+01 9.305745E+01 1.009293E+02 1.093555E+02 + 8.724687E+01 9.484193E+01 1.032528E+02 1.110584E+02 1.193977E+02 + 9.914969E+01 1.063504E+02 1.147493E+02 1.232595E+02 1.306431E+02 + 1.122257E+02 1.192826E+02 1.277091E+02 1.368806E+02 1.450041E+02 + 1.281715E+02 1.355981E+02 1.433945E+02 1.523801E+02 1.611310E+02 + 1.459289E+02 1.540400E+02 1.612903E+02 1.706878E+02 1.803027E+02 + 1.660642E+02 1.756379E+02 1.825221E+02 1.923902E+02 1.997731E+02 + 1.914808E+02 2.010747E+02 2.082737E+02 2.157099E+02 2.245687E+02 + 2.194478E+02 2.295180E+02 2.366483E+02 2.432399E+02 2.510118E+02 + 2.509649E+02 2.593630E+02 2.686566E+02 2.736016E+02 2.830387E+02 + 2.844570E+02 2.944808E+02 3.027417E+02 3.099727E+02 3.158942E+02 + 3.206418E+02 3.337508E+02 3.410164E+02 3.483660E+02 3.545666E+02 + 3.622223E+02 3.738341E+02 3.833421E+02 3.921652E+02 3.955002E+02 + 4.059185E+02 4.168855E+02 4.281503E+02 4.370489E+02 4.408126E+02 + 4.511506E+02 4.625761E+02 4.732011E+02 4.825550E+02 4.891496E+02 + 5.008722E+02 5.100007E+02 5.204445E+02 5.291396E+02 5.339008E+02 + 5.494024E+02 5.597968E+02 5.712224E+02 5.775492E+02 5.841238E+02 + 6.026455E+02 6.088581E+02 6.200086E+02 6.272114E+02 6.338642E+02 + 6.534149E+02 6.604823E+02 6.667759E+02 6.732322E+02 6.786948E+02 + 6.978126E+02 6.997162E+02 7.063958E+02 7.123253E+02 7.135607E+02 + 7.283615E+02 7.320014E+02 7.347404E+02 7.398442E+02 7.411638E+02 + 7.452634E+02 7.482273E+02 7.540629E+02 7.552990E+02 7.522911E+02 + 7.505230E+02 7.543039E+02 7.533568E+02 7.561695E+02 7.551999E+02 + 7.440050E+02 7.428454E+02 7.447654E+02 7.422715E+02 7.438675E+02 + 7.271891E+02 7.261907E+02 7.274282E+02 7.233189E+02 7.222727E+02 + 7.108757E+02 7.086838E+02 7.071157E+02 7.054814E+02 7.020111E+02 + 6.199960E+01 9.644347E+01 1.381895E+02 1.849571E+02 2.386934E+02 + 6.243347E+01 9.707151E+01 1.387595E+02 1.855724E+02 2.396085E+02 + 6.296200E+01 9.759846E+01 1.394559E+02 1.861657E+02 2.405454E+02 + 6.363040E+01 9.854062E+01 1.400202E+02 1.867950E+02 2.415395E+02 + 6.419625E+01 9.908300E+01 1.404685E+02 1.874179E+02 2.422400E+02 + 6.457753E+01 9.960868E+01 1.411851E+02 1.880687E+02 2.433177E+02 + 6.568487E+01 1.003299E+02 1.422373E+02 1.895066E+02 2.440231E+02 + 6.657936E+01 1.011343E+02 1.430604E+02 1.902233E+02 2.446752E+02 + 6.762443E+01 1.023005E+02 1.440274E+02 1.908739E+02 2.462449E+02 + 6.917300E+01 1.041475E+02 1.462826E+02 1.934843E+02 2.486273E+02 + 7.262886E+01 1.087354E+02 1.504348E+02 1.985549E+02 2.542663E+02 + 7.854379E+01 1.150702E+02 1.576128E+02 2.066941E+02 2.626712E+02 + 8.460621E+01 1.227601E+02 1.655747E+02 2.158964E+02 2.726110E+02 + 9.111520E+01 1.308252E+02 1.738324E+02 2.251545E+02 2.816811E+02 + 9.817988E+01 1.388268E+02 1.825974E+02 2.352218E+02 2.920414E+02 + 1.063371E+02 1.460795E+02 1.920354E+02 2.451541E+02 3.020933E+02 + 1.146628E+02 1.553613E+02 2.024665E+02 2.555041E+02 3.126435E+02 + 1.242290E+02 1.656796E+02 2.125916E+02 2.670060E+02 3.244392E+02 + 1.336197E+02 1.748169E+02 2.245891E+02 2.797199E+02 3.375771E+02 + 1.440595E+02 1.861441E+02 2.354292E+02 2.921054E+02 3.500165E+02 + 1.559054E+02 1.970861E+02 2.495980E+02 3.060199E+02 3.624854E+02 + 1.681302E+02 2.102806E+02 2.611061E+02 3.179342E+02 3.780311E+02 + 1.797089E+02 2.234932E+02 2.754012E+02 3.331219E+02 3.922946E+02 + 1.908032E+02 2.355773E+02 2.878295E+02 3.459514E+02 4.036761E+02 + 1.980767E+02 2.419459E+02 2.948901E+02 3.491491E+02 4.072696E+02 + 2.021299E+02 2.460367E+02 2.968672E+02 3.524627E+02 4.068413E+02 + 2.097096E+02 2.505232E+02 2.984581E+02 3.542763E+02 4.052221E+02 + 2.161916E+02 2.549054E+02 3.012884E+02 3.549949E+02 4.081915E+02 + 2.279355E+02 2.642476E+02 3.064120E+02 3.598946E+02 4.093211E+02 + 2.421842E+02 2.752795E+02 3.162723E+02 3.662693E+02 4.179201E+02 + 2.555041E+02 2.914709E+02 3.281518E+02 3.749505E+02 4.281265E+02 + 2.745356E+02 3.095094E+02 3.463982E+02 3.888144E+02 4.410848E+02 + 2.969536E+02 3.339857E+02 3.671930E+02 4.078390E+02 4.571449E+02 + 3.262167E+02 3.608266E+02 3.948769E+02 4.326066E+02 4.744901E+02 + 3.608589E+02 3.910400E+02 4.267325E+02 4.631777E+02 4.971256E+02 + 3.982131E+02 4.269909E+02 4.599363E+02 4.947266E+02 5.314542E+02 + 4.406255E+02 4.677378E+02 5.012767E+02 5.328003E+02 5.662823E+02 + 4.925014E+02 5.229441E+02 5.502763E+02 5.820467E+02 6.122845E+02 + 5.531555E+02 5.800626E+02 6.073901E+02 6.360545E+02 6.703349E+02 + 6.036874E+02 6.449738E+02 6.718380E+02 7.039456E+02 7.287011E+02 + 6.797333E+02 7.170517E+02 7.436223E+02 7.753510E+02 8.015780E+02 + 7.560324E+02 7.922857E+02 8.205123E+02 8.489807E+02 8.788731E+02 + 8.454797E+02 8.710646E+02 9.058845E+02 9.307045E+02 9.634647E+02 + 9.350515E+02 9.656881E+02 9.871474E+02 1.019124E+03 1.039662E+03 + 1.029625E+03 1.056276E+03 1.080645E+03 1.108584E+03 1.128457E+03 + 1.124501E+03 1.155868E+03 1.184434E+03 1.196852E+03 1.216860E+03 + 1.228224E+03 1.261816E+03 1.275609E+03 1.285215E+03 1.318752E+03 + 1.330665E+03 1.345279E+03 1.372885E+03 1.384778E+03 1.398626E+03 + 1.418477E+03 1.434508E+03 1.449005E+03 1.461600E+03 1.457410E+03 + 1.491293E+03 1.511112E+03 1.506026E+03 1.520340E+03 1.521971E+03 + 1.529691E+03 1.534817E+03 1.551153E+03 1.552793E+03 1.555576E+03 + 1.549667E+03 1.560906E+03 1.561315E+03 1.568566E+03 1.560496E+03 + 1.549262E+03 1.538652E+03 1.542850E+03 1.547365E+03 1.539999E+03 + 1.524084E+03 1.514629E+03 1.504173E+03 1.506639E+03 1.497547E+03 + 1.466588E+03 1.450443E+03 1.444620E+03 1.438920E+03 1.437818E+03 + 1.392990E+03 1.380965E+03 1.367058E+03 1.364866E+03 1.366931E+03 + 1.312191E+03 1.298212E+03 1.289284E+03 1.281924E+03 1.282691E+03 + 1.234478E+03 1.223186E+03 1.211105E+03 1.201589E+03 1.197851E+03 + 1.175238E+03 1.165005E+03 1.150095E+03 1.137848E+03 1.136671E+03 + 4.353118E+02 6.220162E+02 8.158395E+02 1.014150E+03 1.225588E+03 + 4.372941E+02 6.241315E+02 8.180415E+02 1.016450E+03 1.227875E+03 + 4.402794E+02 6.262590E+02 8.213468E+02 1.018760E+03 1.230147E+03 + 4.449944E+02 6.283980E+02 8.235701E+02 1.024213E+03 1.235264E+03 + 4.472006E+02 6.306190E+02 8.260197E+02 1.026617E+03 1.237659E+03 + 4.493076E+02 6.325661E+02 8.282889E+02 1.028972E+03 1.243211E+03 + 4.523750E+02 6.365548E+02 8.328471E+02 1.039046E+03 1.245642E+03 + 4.547093E+02 6.407911E+02 8.353237E+02 1.041621E+03 1.252032E+03 + 4.587415E+02 6.453008E+02 8.404087E+02 1.045972E+03 1.260725E+03 + 4.640619E+02 6.538635E+02 8.477177E+02 1.055966E+03 1.267155E+03 + 4.839943E+02 6.770414E+02 8.662147E+02 1.076135E+03 1.291148E+03 + 5.156193E+02 7.088134E+02 8.979028E+02 1.103228E+03 1.323301E+03 + 5.501745E+02 7.429757E+02 9.321762E+02 1.143313E+03 1.350590E+03 + 5.819228E+02 7.771935E+02 9.639790E+02 1.179156E+03 1.393985E+03 + 6.127002E+02 8.071945E+02 1.001152E+03 1.218751E+03 1.423517E+03 + 6.522662E+02 8.374958E+02 1.043964E+03 1.252139E+03 1.458869E+03 + 6.894837E+02 8.807461E+02 1.084432E+03 1.296688E+03 1.490306E+03 + 7.282052E+02 9.167891E+02 1.125312E+03 1.334348E+03 1.527536E+03 + 7.679081E+02 9.550757E+02 1.174777E+03 1.374091E+03 1.579962E+03 + 8.116248E+02 9.977614E+02 1.205538E+03 1.412739E+03 1.628831E+03 + 8.546125E+02 1.040967E+03 1.254829E+03 1.463329E+03 1.670033E+03 + 8.971614E+02 1.087563E+03 1.289794E+03 1.501282E+03 1.716812E+03 + 9.418443E+02 1.138989E+03 1.337049E+03 1.553822E+03 1.758683E+03 + 9.820360E+02 1.174825E+03 1.376727E+03 1.593789E+03 1.791077E+03 + 9.988938E+02 1.187807E+03 1.388255E+03 1.598398E+03 1.802761E+03 + 1.005216E+03 1.190235E+03 1.389739E+03 1.603566E+03 1.788554E+03 + 1.016473E+03 1.187833E+03 1.381121E+03 1.592384E+03 1.782708E+03 + 1.009554E+03 1.191202E+03 1.374253E+03 1.588045E+03 1.775364E+03 + 1.021123E+03 1.193891E+03 1.386366E+03 1.576758E+03 1.768895E+03 + 1.042305E+03 1.201555E+03 1.399030E+03 1.584000E+03 1.774670E+03 + 1.052567E+03 1.233557E+03 1.409257E+03 1.599616E+03 1.783780E+03 + 1.105174E+03 1.272908E+03 1.434195E+03 1.625412E+03 1.810736E+03 + 1.149350E+03 1.335162E+03 1.475765E+03 1.654130E+03 1.835131E+03 + 1.202913E+03 1.370448E+03 1.549791E+03 1.717865E+03 1.877151E+03 + 1.294010E+03 1.433675E+03 1.613331E+03 1.790237E+03 1.910332E+03 + 1.385383E+03 1.514650E+03 1.683846E+03 1.851330E+03 2.014901E+03 + 1.499882E+03 1.608982E+03 1.783628E+03 1.922429E+03 2.081809E+03 + 1.605143E+03 1.744272E+03 1.871664E+03 2.024536E+03 2.168602E+03 + 1.762054E+03 1.885326E+03 1.988629E+03 2.146108E+03 2.277961E+03 + 1.896218E+03 2.036905E+03 2.149415E+03 2.279308E+03 2.412542E+03 + 2.069258E+03 2.170140E+03 2.294302E+03 2.399678E+03 2.546863E+03 + 2.252432E+03 2.333152E+03 2.448762E+03 2.553100E+03 2.689629E+03 + 2.486143E+03 2.506298E+03 2.617492E+03 2.711501E+03 2.793512E+03 + 2.701989E+03 2.710404E+03 2.747850E+03 2.843413E+03 2.898640E+03 + 2.874701E+03 2.878657E+03 2.900846E+03 2.990706E+03 3.021232E+03 + 2.948783E+03 3.027312E+03 3.060568E+03 3.059072E+03 3.109920E+03 + 3.010903E+03 3.096896E+03 3.119362E+03 3.120046E+03 3.165325E+03 + 3.092444E+03 3.105149E+03 3.146292E+03 3.162068E+03 3.193669E+03 + 3.076349E+03 3.127002E+03 3.110663E+03 3.103635E+03 3.120784E+03 + 3.075001E+03 3.093340E+03 3.048999E+03 3.030761E+03 3.009810E+03 + 2.993192E+03 2.954618E+03 2.950705E+03 2.929928E+03 2.925894E+03 + 2.835566E+03 2.819719E+03 2.810572E+03 2.797393E+03 2.772225E+03 + 2.677747E+03 2.643797E+03 2.652748E+03 2.629059E+03 2.607562E+03 + 2.522737E+03 2.494014E+03 2.473599E+03 2.483913E+03 2.440975E+03 + 2.366206E+03 2.324666E+03 2.306752E+03 2.300264E+03 2.299482E+03 + 2.208653E+03 2.167569E+03 2.147587E+03 2.127409E+03 2.126565E+03 + 2.047244E+03 2.002147E+03 1.982427E+03 1.962431E+03 1.943660E+03 + 1.862701E+03 1.834440E+03 1.805733E+03 1.786629E+03 1.760610E+03 + 1.718526E+03 1.692688E+03 1.673906E+03 1.649222E+03 1.629032E+03 + 2.572451E+03 3.320799E+03 4.073048E+03 4.791943E+03 5.555877E+03 + 2.580538E+03 3.329119E+03 4.081090E+03 4.799223E+03 5.562163E+03 + 2.598137E+03 3.337458E+03 4.087505E+03 4.806507E+03 5.568444E+03 + 2.619421E+03 3.342963E+03 4.095759E+03 4.835217E+03 5.574711E+03 + 2.628076E+03 3.351540E+03 4.104297E+03 4.842820E+03 5.581173E+03 + 2.617298E+03 3.359912E+03 4.112630E+03 4.878414E+03 5.587453E+03 + 2.625733E+03 3.383877E+03 4.121004E+03 4.907863E+03 5.593733E+03 + 2.634749E+03 3.407993E+03 4.129942E+03 4.915966E+03 5.625546E+03 + 2.645831E+03 3.419512E+03 4.162134E+03 4.948822E+03 5.666146E+03 + 2.672054E+03 3.447025E+03 4.187823E+03 5.020111E+03 5.685744E+03 + 2.778645E+03 3.546611E+03 4.288143E+03 5.078011E+03 5.754695E+03 + 2.900280E+03 3.692997E+03 4.405922E+03 5.188247E+03 5.824937E+03 + 3.049306E+03 3.797337E+03 4.518585E+03 5.323998E+03 5.895306E+03 + 3.167413E+03 3.878457E+03 4.615041E+03 5.437054E+03 6.067969E+03 + 3.313601E+03 4.014235E+03 4.737244E+03 5.524961E+03 6.136667E+03 + 3.457390E+03 4.140257E+03 4.903789E+03 5.619904E+03 6.211040E+03 + 3.585815E+03 4.311999E+03 5.077109E+03 5.756878E+03 6.275498E+03 + 3.720152E+03 4.475437E+03 5.255631E+03 5.838141E+03 6.370817E+03 + 3.816099E+03 4.604165E+03 5.429751E+03 5.964073E+03 6.502851E+03 + 3.953511E+03 4.733842E+03 5.505712E+03 6.096213E+03 6.610483E+03 + 4.169310E+03 4.896050E+03 5.634199E+03 6.194502E+03 6.671842E+03 + 4.367907E+03 5.077478E+03 5.727615E+03 6.302396E+03 6.727571E+03 + 4.505413E+03 5.290139E+03 5.834375E+03 6.422120E+03 6.801968E+03 + 4.635992E+03 5.386878E+03 5.918037E+03 6.466379E+03 6.868247E+03 + 4.667743E+03 5.393048E+03 5.920064E+03 6.465849E+03 6.898021E+03 + 4.672303E+03 5.360156E+03 5.917724E+03 6.467325E+03 6.845752E+03 + 4.630030E+03 5.306229E+03 5.899348E+03 6.455554E+03 6.795889E+03 + 4.521629E+03 5.327776E+03 5.839361E+03 6.434161E+03 6.753455E+03 + 4.562650E+03 5.241233E+03 5.839984E+03 6.342149E+03 6.717531E+03 + 4.544066E+03 5.219703E+03 5.816161E+03 6.325169E+03 6.703783E+03 + 4.499890E+03 5.210945E+03 5.736491E+03 6.248882E+03 6.666225E+03 + 4.639217E+03 5.308659E+03 5.741282E+03 6.257063E+03 6.622055E+03 + 4.790262E+03 5.463965E+03 5.825093E+03 6.251490E+03 6.620740E+03 + 4.951023E+03 5.437477E+03 5.950657E+03 6.356592E+03 6.704567E+03 + 5.144767E+03 5.609173E+03 6.007450E+03 6.402565E+03 6.738387E+03 + 5.356654E+03 5.863547E+03 6.224399E+03 6.488476E+03 6.886740E+03 + 5.598205E+03 5.960958E+03 6.375498E+03 6.605211E+03 6.893911E+03 + 5.788877E+03 6.157699E+03 6.554401E+03 6.690178E+03 6.880073E+03 + 6.081295E+03 6.433221E+03 6.630375E+03 6.909621E+03 6.900313E+03 + 6.420731E+03 6.676626E+03 6.786637E+03 6.999360E+03 7.031142E+03 + 6.583559E+03 6.769340E+03 6.978722E+03 6.968879E+03 7.166339E+03 + 6.732351E+03 6.975998E+03 7.076670E+03 7.144721E+03 7.241520E+03 + 6.803411E+03 7.027180E+03 7.166990E+03 7.163163E+03 7.121248E+03 + 6.850686E+03 7.020847E+03 7.084847E+03 7.114718E+03 7.056813E+03 + 6.891713E+03 6.908321E+03 6.980356E+03 7.070738E+03 7.008684E+03 + 6.820435E+03 6.826619E+03 6.807397E+03 6.804594E+03 6.846775E+03 + 6.581781E+03 6.501462E+03 6.507643E+03 6.464516E+03 6.459134E+03 + 6.281660E+03 6.149437E+03 6.109824E+03 6.132500E+03 6.144503E+03 + 5.883680E+03 5.877575E+03 5.745589E+03 5.698300E+03 5.776335E+03 + 5.569632E+03 5.484886E+03 5.416320E+03 5.340327E+03 5.327816E+03 + 5.302057E+03 5.147223E+03 5.105353E+03 5.017073E+03 4.969878E+03 + 4.898281E+03 4.799628E+03 4.741972E+03 4.653152E+03 4.593019E+03 + 4.507903E+03 4.379910E+03 4.346174E+03 4.270510E+03 4.198877E+03 + 4.082473E+03 4.019618E+03 3.890771E+03 3.858739E+03 3.805573E+03 + 3.663918E+03 3.595835E+03 3.491387E+03 3.452278E+03 3.410591E+03 + 3.248475E+03 3.176975E+03 3.126818E+03 3.057158E+03 3.042301E+03 + 2.855344E+03 2.791510E+03 2.753407E+03 2.709430E+03 2.677869E+03 + 2.478930E+03 2.444370E+03 2.402985E+03 2.368051E+03 2.340480E+03 + 2.230907E+03 2.196678E+03 2.161236E+03 2.122002E+03 2.097280E+03 + 2.110989E+04 2.199946E+04 2.231370E+04 2.274184E+04 2.363348E+04 + 2.112998E+04 2.200749E+04 2.231388E+04 2.273604E+04 2.362452E+04 + 2.114986E+04 2.201535E+04 2.231390E+04 2.273011E+04 2.361543E+04 + 2.116939E+04 2.199471E+04 2.231365E+04 2.272393E+04 2.360614E+04 + 2.118932E+04 2.200293E+04 2.231319E+04 2.271739E+04 2.359637E+04 + 2.093933E+04 2.201065E+04 2.231250E+04 2.288823E+04 2.358670E+04 + 2.095882E+04 2.201799E+04 2.231146E+04 2.288125E+04 2.357672E+04 + 2.097924E+04 2.202553E+04 2.231008E+04 2.287358E+04 2.356586E+04 + 2.100420E+04 2.203467E+04 2.230828E+04 2.286407E+04 2.375216E+04 + 2.106358E+04 2.205708E+04 2.230509E+04 2.302556E+04 2.372169E+04 + 2.121440E+04 2.210570E+04 2.246227E+04 2.297700E+04 2.365087E+04 + 2.137555E+04 2.216539E+04 2.264515E+04 2.309536E+04 2.356382E+04 + 2.158779E+04 2.221137E+04 2.261063E+04 2.321666E+04 2.343719E+04 + 2.175049E+04 2.207069E+04 2.281840E+04 2.355479E+04 2.347259E+04 + 2.209999E+04 2.227671E+04 2.275592E+04 2.367619E+04 2.333369E+04 + 2.220509E+04 2.228075E+04 2.287297E+04 2.375782E+04 2.321380E+04 + 2.207006E+04 2.244471E+04 2.295186E+04 2.364467E+04 2.306507E+04 + 2.213627E+04 2.279882E+04 2.324988E+04 2.350245E+04 2.304835E+04 + 2.200301E+04 2.301010E+04 2.357669E+04 2.335653E+04 2.288819E+04 + 2.202706E+04 2.293674E+04 2.370705E+04 2.337157E+04 2.270863E+04 + 2.240673E+04 2.303288E+04 2.377199E+04 2.320339E+04 2.254891E+04 + 2.277012E+04 2.311432E+04 2.362100E+04 2.318914E+04 2.235983E+04 + 2.272998E+04 2.341455E+04 2.346112E+04 2.301797E+04 2.218573E+04 + 2.287431E+04 2.354876E+04 2.333166E+04 2.288413E+04 2.254501E+04 + 2.283628E+04 2.351168E+04 2.329460E+04 2.284886E+04 2.265202E+04 + 2.281101E+04 2.352586E+04 2.349229E+04 2.302621E+04 2.248303E+04 + 2.257642E+04 2.330115E+04 2.353226E+04 2.323554E+04 2.222823E+04 + 2.234920E+04 2.350518E+04 2.356413E+04 2.330216E+04 2.227899E+04 + 2.263664E+04 2.327536E+04 2.336441E+04 2.334811E+04 2.245881E+04 + 2.228729E+04 2.320511E+04 2.334614E+04 2.336857E+04 2.249358E+04 + 2.220436E+04 2.314509E+04 2.310089E+04 2.296310E+04 2.250611E+04 + 2.228406E+04 2.320042E+04 2.321247E+04 2.288927E+04 2.213559E+04 + 2.294082E+04 2.325532E+04 2.330598E+04 2.278487E+04 2.220347E+04 + 2.283305E+04 2.352862E+04 2.313628E+04 2.304607E+04 2.222249E+04 + 2.258686E+04 2.364394E+04 2.309817E+04 2.285072E+04 2.240456E+04 + 2.287492E+04 2.363399E+04 2.350307E+04 2.270967E+04 2.229633E+04 + 2.274959E+04 2.276082E+04 2.302591E+04 2.243891E+04 2.197863E+04 + 2.267224E+04 2.226664E+04 2.260749E+04 2.192308E+04 2.136788E+04 + 2.232328E+04 2.205716E+04 2.223899E+04 2.201312E+04 2.098648E+04 + 2.187563E+04 2.172802E+04 2.167347E+04 2.115444E+04 2.059714E+04 + 2.140565E+04 2.085953E+04 2.116374E+04 2.064091E+04 2.012415E+04 + 2.037875E+04 2.008205E+04 1.977987E+04 1.980206E+04 1.960004E+04 + 1.902741E+04 1.916712E+04 1.876809E+04 1.851754E+04 1.867450E+04 + 1.788166E+04 1.771891E+04 1.756251E+04 1.732643E+04 1.749830E+04 + 1.706483E+04 1.656196E+04 1.650647E+04 1.610045E+04 1.601494E+04 + 1.597889E+04 1.576677E+04 1.545962E+04 1.498503E+04 1.485359E+04 + 1.489649E+04 1.445045E+04 1.422632E+04 1.381032E+04 1.352671E+04 + 1.346574E+04 1.318453E+04 1.278478E+04 1.256637E+04 1.222032E+04 + 1.218934E+04 1.205257E+04 1.148469E+04 1.131673E+04 1.123555E+04 + 1.077207E+04 1.061127E+04 1.031396E+04 1.010391E+04 9.949915E+03 + 9.496989E+03 9.305050E+03 9.118055E+03 8.914983E+03 8.696583E+03 + 8.236293E+03 8.075606E+03 7.980025E+03 7.731995E+03 7.627634E+03 + 7.169447E+03 6.960904E+03 6.963235E+03 6.750763E+03 6.604956E+03 + 6.145831E+03 6.046577E+03 5.886823E+03 5.774768E+03 5.694186E+03 + 5.302427E+03 5.149358E+03 5.021603E+03 4.939044E+03 4.832038E+03 + 4.486596E+03 4.342703E+03 4.250116E+03 4.173131E+03 4.106138E+03 + 3.774210E+03 3.648050E+03 3.581100E+03 3.520598E+03 3.460476E+03 + 3.157784E+03 3.074910E+03 3.013743E+03 2.966432E+03 2.935116E+03 + 2.763246E+03 2.703750E+03 2.652106E+03 2.613040E+03 2.586462E+03 + 1.117778E+05 9.766386E+04 8.538272E+04 7.756668E+04 7.423136E+04 + 1.115797E+05 9.748929E+04 8.523313E+04 7.745066E+04 7.414186E+04 + 1.113806E+05 9.731403E+04 8.508303E+04 7.733411E+04 7.405188E+04 + 1.111794E+05 9.713723E+04 8.493181E+04 7.721669E+04 7.396105E+04 + 1.109704E+05 9.695389E+04 8.477511E+04 7.709493E+04 7.386673E+04 + 1.107651E+05 9.677417E+04 8.462166E+04 7.697560E+04 7.377412E+04 + 1.105563E+05 9.659181E+04 8.446620E+04 7.685462E+04 7.368005E+04 + 1.103320E+05 9.639625E+04 8.429966E+04 7.672491E+04 7.357901E+04 + 1.100562E+05 9.615583E+04 8.409489E+04 7.656535E+04 7.345463E+04 + 1.094219E+05 9.560069E+04 8.362067E+04 7.619593E+04 7.316749E+04 + 1.079795E+05 9.433812E+04 8.254122E+04 7.535374E+04 7.251221E+04 + 1.058358E+05 9.246839E+04 8.099023E+04 7.410348E+04 7.153452E+04 + 1.035190E+05 9.045766E+04 7.931818E+04 7.275521E+04 7.047273E+04 + 1.011682E+05 8.842696E+04 7.990999E+04 7.344392E+04 6.938876E+04 + 9.879966E+04 8.638881E+04 7.833805E+04 7.480388E+04 6.828851E+04 + 9.648481E+04 8.440367E+04 7.679851E+04 7.361616E+04 6.720437E+04 + 9.414527E+04 8.240346E+04 7.523847E+04 7.240200E+04 6.609907E+04 + 9.179371E+04 8.046350E+04 7.366569E+04 7.116691E+04 6.497763E+04 + 8.947596E+04 8.070503E+04 7.411153E+04 6.993413E+04 6.386104E+04 + 8.716592E+04 7.892541E+04 7.521691E+04 6.868935E+04 6.269589E+04 + 8.483640E+04 7.711912E+04 7.382061E+04 6.741680E+04 6.165566E+04 + 8.253605E+04 7.532330E+04 7.241725E+04 6.614207E+04 6.060956E+04 + 8.042405E+04 7.359991E+04 7.105508E+04 6.490911E+04 5.959327E+04 + 7.886958E+04 7.430039E+04 7.004038E+04 6.399632E+04 6.473640E+04 + 7.858181E+04 7.406216E+04 6.982088E+04 6.381020E+04 6.452240E+04 + 7.909703E+04 7.442479E+04 7.010405E+04 6.408601E+04 6.107288E+04 + 7.985884E+04 7.308188E+04 7.053169E+04 6.449902E+04 5.921093E+04 + 8.066790E+04 7.370801E+04 7.097370E+04 6.493273E+04 5.954648E+04 + 8.133532E+04 7.421463E+04 6.884007E+04 6.527843E+04 5.980442E+04 + 7.931876E+04 7.444641E+04 6.914633E+04 6.549618E+04 5.995163E+04 + 7.952761E+04 7.463456E+04 6.927707E+04 6.329842E+04 6.009427E+04 + 7.938989E+04 7.453292E+04 6.916146E+04 6.317415E+04 5.811213E+04 + 8.122072E+04 7.405820E+04 6.872987E+04 6.282648E+04 5.783188E+04 + 7.794062E+04 7.510597E+04 6.789631E+04 6.440893E+04 5.729487E+04 + 7.645432E+04 7.189793E+04 6.689312E+04 6.344282E+04 5.837956E+04 + 7.462607E+04 6.861181E+04 6.545223E+04 6.209243E+04 5.725185E+04 + 7.218094E+04 6.518591E+04 6.196812E+04 5.849783E+04 5.576899E+04 + 6.907329E+04 6.273241E+04 5.853571E+04 5.501510E+04 5.243653E+04 + 6.525542E+04 5.966688E+04 5.726470E+04 5.424668E+04 5.039213E+04 + 6.187288E+04 5.728848E+04 5.415587E+04 5.016922E+04 4.790858E+04 + 5.792824E+04 5.433854E+04 5.173633E+04 4.838124E+04 4.516936E+04 + 5.302498E+04 4.976811E+04 4.776979E+04 4.487398E+04 4.287664E+04 + 4.812750E+04 4.683087E+04 4.350871E+04 4.103768E+04 3.934037E+04 + 4.315289E+04 4.123156E+04 3.983048E+04 3.770825E+04 3.566699E+04 + 3.887140E+04 3.663360E+04 3.535455E+04 3.305751E+04 3.189498E+04 + 3.340924E+04 3.216791E+04 3.093363E+04 2.957087E+04 2.818092E+04 + 2.945037E+04 2.784356E+04 2.673239E+04 2.562500E+04 2.456644E+04 + 2.564149E+04 2.413514E+04 2.268414E+04 2.201687E+04 2.120005E+04 + 2.174058E+04 2.075034E+04 1.934456E+04 1.879846E+04 1.838375E+04 + 1.824327E+04 1.749412E+04 1.660686E+04 1.601550E+04 1.562461E+04 + 1.532430E+04 1.448537E+04 1.369351E+04 1.355056E+04 1.312458E+04 + 1.272970E+04 1.188468E+04 1.138660E+04 1.114962E+04 1.095230E+04 + 1.037182E+04 9.830568E+03 9.785830E+03 9.354584E+03 9.113547E+03 + 8.420545E+03 8.319376E+03 8.172717E+03 7.923379E+03 7.863295E+03 + 7.040716E+03 6.894198E+03 6.818255E+03 6.638814E+03 6.637551E+03 + 5.781463E+03 5.723100E+03 5.707401E+03 5.726429E+03 5.771146E+03 + 4.782955E+03 4.782727E+03 4.808335E+03 4.856186E+03 4.933749E+03 + 3.978713E+03 4.020593E+03 4.076163E+03 4.121511E+03 4.178836E+03 + 3.473868E+03 3.531870E+03 3.591899E+03 3.627591E+03 3.660859E+03 + +Band: 6, gas: 2, k-terms: 9 + 1.057535E-07 2.511308E-07 5.952576E-07 1.351155E-06 2.895815E-06 + 1.191956E-07 2.765822E-07 6.448831E-07 1.452343E-06 3.076667E-06 + 1.344939E-07 3.067981E-07 7.009796E-07 1.556718E-06 3.282691E-06 + 1.519371E-07 3.397665E-07 7.620980E-07 1.670006E-06 3.496740E-06 + 1.722915E-07 3.769135E-07 8.321654E-07 1.799784E-06 3.734607E-06 + 1.963830E-07 4.201312E-07 9.105419E-07 1.938178E-06 3.987829E-06 + 2.233499E-07 4.685522E-07 9.950091E-07 2.089174E-06 4.250575E-06 + 2.541133E-07 5.238499E-07 1.093374E-06 2.268837E-06 4.549431E-06 + 2.914107E-07 5.883035E-07 1.210158E-06 2.470349E-06 4.893345E-06 + 3.395356E-07 6.717434E-07 1.359750E-06 2.736127E-06 5.338791E-06 + 4.093538E-07 7.994971E-07 1.590158E-06 3.147880E-06 6.050211E-06 + 5.100265E-07 9.844353E-07 1.927169E-06 3.733518E-06 7.060423E-06 + 6.396241E-07 1.221901E-06 2.349408E-06 4.472777E-06 8.338644E-06 + 8.013988E-07 1.517254E-06 2.876964E-06 5.358030E-06 9.811979E-06 + 1.007792E-06 1.880758E-06 3.504960E-06 6.410396E-06 1.157781E-05 + 1.263447E-06 2.323136E-06 4.270656E-06 7.665092E-06 1.367835E-05 + 1.582867E-06 2.864913E-06 5.181671E-06 9.202733E-06 1.618744E-05 + 1.981937E-06 3.533679E-06 6.292661E-06 1.102013E-05 1.915534E-05 + 2.476631E-06 4.353136E-06 7.639056E-06 1.321011E-05 2.260907E-05 + 3.085357E-06 5.358330E-06 9.257699E-06 1.581696E-05 2.669972E-05 + 3.860555E-06 6.607402E-06 1.126158E-05 1.898741E-05 3.156843E-05 + 4.801687E-06 8.115068E-06 1.367678E-05 2.279022E-05 3.750590E-05 + 5.942150E-06 9.917802E-06 1.652748E-05 2.721872E-05 4.427623E-05 + 7.137650E-06 1.178013E-05 1.945569E-05 3.159054E-05 5.074523E-05 + 8.051370E-06 1.318814E-05 2.151692E-05 3.455388E-05 5.492708E-05 + 8.750480E-06 1.415349E-05 2.280066E-05 3.638369E-05 5.713778E-05 + 9.361355E-06 1.499360E-05 2.387105E-05 3.776990E-05 5.894336E-05 + 1.000452E-05 1.585119E-05 2.504934E-05 3.927033E-05 6.069640E-05 + 1.080439E-05 1.684737E-05 2.635579E-05 4.088519E-05 6.272190E-05 + 1.175268E-05 1.794790E-05 2.796695E-05 4.295992E-05 6.515815E-05 + 1.284874E-05 1.933553E-05 2.978061E-05 4.524323E-05 6.801861E-05 + 1.419212E-05 2.098012E-05 3.176994E-05 4.810621E-05 7.201789E-05 + 1.573961E-05 2.297464E-05 3.434160E-05 5.161235E-05 7.643022E-05 + 1.752378E-05 2.530930E-05 3.738130E-05 5.554825E-05 8.175071E-05 + 1.961326E-05 2.804888E-05 4.092923E-05 6.013086E-05 8.794270E-05 + 2.204163E-05 3.123466E-05 4.506139E-05 6.551953E-05 9.524526E-05 + 2.472842E-05 3.485281E-05 4.970101E-05 7.158628E-05 1.030976E-04 + 2.779032E-05 3.883187E-05 5.505007E-05 7.840137E-05 1.113929E-04 + 3.146434E-05 4.348308E-05 6.111016E-05 8.609040E-05 1.214664E-04 + 3.561646E-05 4.888286E-05 6.834621E-05 9.523725E-05 1.329862E-04 + 4.042495E-05 5.528655E-05 7.667939E-05 1.065422E-04 1.467450E-04 + 4.614650E-05 6.257848E-05 8.635029E-05 1.191299E-04 1.630978E-04 + 5.252695E-05 7.073716E-05 9.707480E-05 1.333853E-04 1.811413E-04 + 5.950898E-05 7.977291E-05 1.088219E-04 1.486660E-04 2.006792E-04 + 6.737469E-05 8.966730E-05 1.216487E-04 1.649875E-04 2.219879E-04 + 7.624316E-05 1.009221E-04 1.360128E-04 1.836384E-04 2.453227E-04 + 8.668237E-05 1.137744E-04 1.529784E-04 2.044601E-04 2.720953E-04 + 9.861772E-05 1.280187E-04 1.718156E-04 2.276048E-04 3.005542E-04 + 1.114495E-04 1.438318E-04 1.917302E-04 2.523708E-04 3.288090E-04 + 1.265360E-04 1.628431E-04 2.144652E-04 2.809672E-04 3.628368E-04 + 1.490806E-04 1.920512E-04 2.513186E-04 3.260188E-04 4.190680E-04 + 1.782228E-04 2.295057E-04 2.989868E-04 3.877396E-04 4.935223E-04 + 2.126539E-04 2.746610E-04 3.567870E-04 4.576597E-04 5.774971E-04 + 2.543802E-04 3.292122E-04 4.220983E-04 5.359137E-04 6.680123E-04 + 3.044682E-04 3.893085E-04 4.953248E-04 6.205911E-04 7.649415E-04 + 3.580212E-04 4.554873E-04 5.755846E-04 7.128182E-04 8.669549E-04 + 4.195868E-04 5.293679E-04 6.621041E-04 8.100348E-04 9.732042E-04 + 4.862458E-04 6.094116E-04 7.512190E-04 9.098225E-04 1.079547E-03 + 5.335286E-04 6.629053E-04 8.125836E-04 9.774542E-04 1.152405E-03 + 2.635650E-05 4.610905E-05 7.821989E-05 1.346990E-04 2.405682E-04 + 3.017912E-05 5.242949E-05 8.789368E-05 1.490970E-04 2.605373E-04 + 3.449430E-05 5.972803E-05 9.912429E-05 1.653754E-04 2.833890E-04 + 3.958237E-05 6.804600E-05 1.118307E-04 1.838389E-04 3.096154E-04 + 4.550903E-05 7.753077E-05 1.264616E-04 2.052704E-04 3.395736E-04 + 5.225157E-05 8.840546E-05 1.430665E-04 2.290960E-04 3.739695E-04 + 5.997591E-05 1.007345E-04 1.621003E-04 2.570946E-04 4.122571E-04 + 6.885541E-05 1.151147E-04 1.842544E-04 2.895011E-04 4.563613E-04 + 7.950903E-05 1.323012E-04 2.101959E-04 3.267096E-04 5.075733E-04 + 9.316608E-05 1.534329E-04 2.424885E-04 3.730637E-04 5.717504E-04 + 1.121148E-04 1.829290E-04 2.868223E-04 4.367253E-04 6.613817E-04 + 1.386136E-04 2.234222E-04 3.456178E-04 5.215168E-04 7.800018E-04 + 1.718013E-04 2.736315E-04 4.192400E-04 6.260662E-04 9.250857E-04 + 2.134329E-04 3.356044E-04 5.095097E-04 7.513788E-04 1.095635E-03 + 2.658020E-04 4.121075E-04 6.184530E-04 9.011556E-04 1.298976E-03 + 3.298679E-04 5.049760E-04 7.502720E-04 1.078742E-03 1.542012E-03 + 4.095333E-04 6.179603E-04 9.081902E-04 1.294503E-03 1.829737E-03 + 5.087430E-04 7.574347E-04 1.099723E-03 1.552598E-03 2.170286E-03 + 6.300877E-04 9.261572E-04 1.330696E-03 1.859405E-03 2.571295E-03 + 7.793734E-04 1.134531E-03 1.608725E-03 2.225479E-03 3.046376E-03 + 9.644854E-04 1.389309E-03 1.945230E-03 2.663070E-03 3.609722E-03 + 1.189625E-03 1.693010E-03 2.348645E-03 3.183406E-03 4.276753E-03 + 1.459463E-03 2.053912E-03 2.821679E-03 3.793954E-03 5.052552E-03 + 1.754070E-03 2.445451E-03 3.334849E-03 4.441490E-03 5.866675E-03 + 2.014585E-03 2.790656E-03 3.791619E-03 5.018233E-03 6.581471E-03 + 2.246379E-03 3.103007E-03 4.197212E-03 5.539838E-03 7.208806E-03 + 2.470065E-03 3.419260E-03 4.599469E-03 6.060876E-03 7.863679E-03 + 2.709705E-03 3.748570E-03 5.028754E-03 6.629155E-03 8.570694E-03 + 2.974503E-03 4.109537E-03 5.502055E-03 7.231280E-03 9.338173E-03 + 3.277570E-03 4.495238E-03 6.025496E-03 7.917322E-03 1.019214E-02 + 3.614352E-03 4.930481E-03 6.605206E-03 8.650444E-03 1.114659E-02 + 4.002710E-03 5.413776E-03 7.245695E-03 9.477392E-03 1.224033E-02 + 4.441745E-03 5.978151E-03 7.965179E-03 1.042729E-02 1.345662E-02 + 4.944104E-03 6.623045E-03 8.771347E-03 1.147964E-02 1.482547E-02 + 5.507523E-03 7.335281E-03 9.687297E-03 1.266189E-02 1.638384E-02 + 6.156556E-03 8.133590E-03 1.070061E-02 1.400216E-02 1.819372E-02 + 6.866414E-03 9.005587E-03 1.181991E-02 1.549020E-02 2.018567E-02 + 7.664596E-03 9.981459E-03 1.307566E-02 1.714086E-02 2.242580E-02 + 8.591513E-03 1.110101E-02 1.451099E-02 1.903167E-02 2.507142E-02 + 9.624002E-03 1.238410E-02 1.618587E-02 2.126625E-02 2.816621E-02 + 1.082803E-02 1.391052E-02 1.815442E-02 2.399882E-02 3.185183E-02 + 1.220682E-02 1.568273E-02 2.051761E-02 2.723473E-02 3.632708E-02 + 1.375358E-02 1.771023E-02 2.326778E-02 3.108076E-02 4.145345E-02 + 1.553585E-02 2.004099E-02 2.638692E-02 3.536382E-02 4.730204E-02 + 1.757113E-02 2.264966E-02 2.997859E-02 4.029029E-02 5.398343E-02 + 1.996871E-02 2.575248E-02 3.421940E-02 4.608964E-02 6.165448E-02 + 2.287827E-02 2.950302E-02 3.937365E-02 5.290842E-02 7.079026E-02 + 2.641508E-02 3.396396E-02 4.550752E-02 6.098078E-02 8.134011E-02 + 3.052576E-02 3.927250E-02 5.244032E-02 7.012050E-02 9.300187E-02 + 3.576410E-02 4.597658E-02 6.100736E-02 8.146973E-02 1.076374E-01 + 4.379943E-02 5.657648E-02 7.487052E-02 9.947744E-02 1.313535E-01 + 5.487756E-02 7.108375E-02 9.408805E-02 1.254011E-01 1.646556E-01 + 6.901543E-02 8.965646E-02 1.188453E-01 1.574895E-01 2.058778E-01 + 8.708838E-02 1.136217E-01 1.495317E-01 1.970004E-01 2.554816E-01 + 1.099815E-01 1.425207E-01 1.867472E-01 2.435288E-01 3.139235E-01 + 1.367718E-01 1.768025E-01 2.310736E-01 2.989551E-01 3.820280E-01 + 1.691497E-01 2.179384E-01 2.833256E-01 3.632425E-01 4.609966E-01 + 2.063395E-01 2.657814E-01 3.427085E-01 4.370876E-01 5.488715E-01 + 2.354832E-01 3.012847E-01 3.880261E-01 4.927694E-01 6.166375E-01 + 8.358357E-04 1.336484E-03 2.144847E-03 3.409360E-03 5.327321E-03 + 9.474345E-04 1.491228E-03 2.347541E-03 3.686321E-03 5.663278E-03 + 1.076778E-03 1.664003E-03 2.582043E-03 3.992742E-03 6.033670E-03 + 1.225763E-03 1.855206E-03 2.839827E-03 4.318699E-03 6.445871E-03 + 1.394733E-03 2.072848E-03 3.119023E-03 4.668308E-03 6.893120E-03 + 1.587943E-03 2.316617E-03 3.430143E-03 5.052620E-03 7.379955E-03 + 1.805797E-03 2.585328E-03 3.771296E-03 5.480862E-03 7.907106E-03 + 2.055780E-03 2.894907E-03 4.152873E-03 5.944220E-03 8.483565E-03 + 2.340924E-03 3.245478E-03 4.577057E-03 6.455552E-03 9.113890E-03 + 2.683886E-03 3.657851E-03 5.084937E-03 7.090899E-03 9.893425E-03 + 3.126476E-03 4.193414E-03 5.750117E-03 7.925690E-03 1.096082E-02 + 3.688219E-03 4.879332E-03 6.582529E-03 8.989142E-03 1.236568E-02 + 4.344592E-03 5.662011E-03 7.571397E-03 1.023304E-02 1.401739E-02 + 5.103638E-03 6.567998E-03 8.699734E-03 1.167881E-02 1.594133E-02 + 5.990972E-03 7.629158E-03 9.995780E-03 1.335967E-02 1.822444E-02 + 7.001258E-03 8.836675E-03 1.150942E-02 1.532646E-02 2.095741E-02 + 8.181599E-03 1.025378E-02 1.329565E-02 1.767669E-02 2.427933E-02 + 9.567911E-03 1.191666E-02 1.540930E-02 2.054178E-02 2.825458E-02 + 1.119130E-02 1.389414E-02 1.794554E-02 2.402048E-02 3.307985E-02 + 1.312136E-02 1.629188E-02 2.106976E-02 2.826423E-02 3.888634E-02 + 1.545871E-02 1.923215E-02 2.490433E-02 3.347394E-02 4.588581E-02 + 1.830591E-02 2.281881E-02 2.967968E-02 3.984195E-02 5.413064E-02 + 2.177683E-02 2.722302E-02 3.543803E-02 4.738714E-02 6.385705E-02 + 2.583002E-02 3.228029E-02 4.187304E-02 5.552427E-02 7.419784E-02 + 2.999525E-02 3.721760E-02 4.790327E-02 6.283665E-02 8.307521E-02 + 3.447854E-02 4.229608E-02 5.365378E-02 6.958124E-02 9.087497E-02 + 3.951876E-02 4.799519E-02 5.990095E-02 7.666605E-02 9.923859E-02 + 4.547109E-02 5.464452E-02 6.717291E-02 8.485157E-02 1.086748E-01 + 5.256557E-02 6.249428E-02 7.588770E-02 9.429321E-02 1.194961E-01 + 6.097092E-02 7.174355E-02 8.611555E-02 1.058118E-01 1.321669E-01 + 7.086488E-02 8.280473E-02 9.833617E-02 1.192847E-01 1.472451E-01 + 8.281917E-02 9.588496E-02 1.130814E-01 1.355039E-01 1.651572E-01 + 9.699381E-02 1.118988E-01 1.305412E-01 1.549395E-01 1.866829E-01 + 1.139319E-01 1.309278E-01 1.516186E-01 1.782046E-01 2.123514E-01 + 1.338693E-01 1.534917E-01 1.767974E-01 2.061041E-01 2.430461E-01 + 1.578122E-01 1.801605E-01 2.063080E-01 2.392246E-01 2.799371E-01 + 1.861194E-01 2.118277E-01 2.417670E-01 2.781266E-01 3.231580E-01 + 2.198884E-01 2.490871E-01 2.834956E-01 3.242632E-01 3.741850E-01 + 2.602430E-01 2.935011E-01 3.329468E-01 3.792481E-01 4.346055E-01 + 3.081816E-01 3.465878E-01 3.917016E-01 4.441029E-01 5.068796E-01 + 3.667716E-01 4.103155E-01 4.617679E-01 5.217297E-01 5.936275E-01 + 4.359175E-01 4.870319E-01 5.461328E-01 6.148134E-01 6.975759E-01 + 5.180089E-01 5.787442E-01 6.462490E-01 7.252692E-01 8.179737E-01 + 6.168111E-01 6.867827E-01 7.642287E-01 8.537819E-01 9.583099E-01 + 7.328556E-01 8.137239E-01 9.013421E-01 1.005111E+00 1.122551E+00 + 8.691573E-01 9.630399E-01 1.063761E+00 1.181828E+00 1.314600E+00 + 1.028748E+00 1.140142E+00 1.257031E+00 1.390812E+00 1.541304E+00 + 1.217027E+00 1.347604E+00 1.486046E+00 1.635876E+00 1.808163E+00 + 1.431288E+00 1.588162E+00 1.747613E+00 1.921016E+00 2.117991E+00 + 1.684729E+00 1.872577E+00 2.057744E+00 2.262170E+00 2.485628E+00 + 2.016140E+00 2.238551E+00 2.460215E+00 2.698813E+00 2.960052E+00 + 2.430006E+00 2.689812E+00 2.955194E+00 3.238535E+00 3.541942E+00 + 2.921319E+00 3.224520E+00 3.534105E+00 3.870213E+00 4.225271E+00 + 3.506069E+00 3.857546E+00 4.219393E+00 4.608348E+00 5.017944E+00 + 4.198389E+00 4.597817E+00 5.013984E+00 5.453969E+00 5.921411E+00 + 5.001623E+00 5.450093E+00 5.926292E+00 6.423341E+00 6.939796E+00 + 5.933899E+00 6.441327E+00 6.963763E+00 7.503473E+00 8.077989E+00 + 6.989177E+00 7.547184E+00 8.134346E+00 8.723453E+00 9.327226E+00 + 7.858498E+00 8.448295E+00 9.068062E+00 9.683938E+00 1.032562E+01 + 2.972616E-02 4.726645E-02 7.703886E-02 1.293370E-01 2.195462E-01 + 3.329729E-02 5.241708E-02 8.331755E-02 1.379340E-01 2.297439E-01 + 3.756943E-02 5.818257E-02 9.096578E-02 1.480615E-01 2.415909E-01 + 4.258847E-02 6.469105E-02 9.978646E-02 1.589951E-01 2.549553E-01 + 4.834206E-02 7.232596E-02 1.094756E-01 1.709725E-01 2.703351E-01 + 5.513232E-02 8.117230E-02 1.208526E-01 1.850602E-01 2.877473E-01 + 6.295412E-02 9.100481E-02 1.338399E-01 2.009900E-01 3.073392E-01 + 7.216453E-02 1.027507E-01 1.491743E-01 2.188706E-01 3.299934E-01 + 8.283132E-02 1.165183E-01 1.668543E-01 2.397610E-01 3.557793E-01 + 9.574229E-02 1.331886E-01 1.885063E-01 2.669244E-01 3.885245E-01 + 1.129704E-01 1.556188E-01 2.174594E-01 3.039844E-01 4.348275E-01 + 1.354650E-01 1.850884E-01 2.551949E-01 3.525318E-01 4.971272E-01 + 1.629716E-01 2.203452E-01 3.013350E-01 4.100734E-01 5.701025E-01 + 1.961137E-01 2.625941E-01 3.550286E-01 4.780531E-01 6.567741E-01 + 2.366822E-01 3.145415E-01 4.187375E-01 5.567278E-01 7.557099E-01 + 2.853428E-01 3.744870E-01 4.942365E-01 6.495456E-01 8.694883E-01 + 3.442774E-01 4.473459E-01 5.838078E-01 7.576655E-01 1.005537E+00 + 4.153903E-01 5.334841E-01 6.886696E-01 8.868390E-01 1.158491E+00 + 5.001675E-01 6.364768E-01 8.113977E-01 1.038354E+00 1.338353E+00 + 6.021570E-01 7.586993E-01 9.609691E-01 1.215983E+00 1.546411E+00 + 7.253825E-01 9.066765E-01 1.132699E+00 1.420860E+00 1.789321E+00 + 8.736461E-01 1.083035E+00 1.340921E+00 1.664886E+00 2.069108E+00 + 1.048742E+00 1.289311E+00 1.581409E+00 1.944471E+00 2.394145E+00 + 1.248661E+00 1.522641E+00 1.848025E+00 2.250578E+00 2.747028E+00 + 1.446050E+00 1.750588E+00 2.111167E+00 2.543736E+00 3.076141E+00 + 1.659056E+00 1.981269E+00 2.372846E+00 2.835193E+00 3.398268E+00 + 1.893365E+00 2.239638E+00 2.657192E+00 3.156536E+00 3.752750E+00 + 2.157103E+00 2.538298E+00 2.987891E+00 3.515834E+00 4.153520E+00 + 2.478279E+00 2.891813E+00 3.375631E+00 3.940589E+00 4.623472E+00 + 2.850623E+00 3.296877E+00 3.825508E+00 4.442305E+00 5.171145E+00 + 3.292217E+00 3.777330E+00 4.357620E+00 5.028030E+00 5.807744E+00 + 3.836807E+00 4.342205E+00 4.980198E+00 5.722419E+00 6.568702E+00 + 4.481058E+00 5.045222E+00 5.727313E+00 6.531846E+00 7.462751E+00 + 5.239910E+00 5.876872E+00 6.629176E+00 7.507003E+00 8.529442E+00 + 6.126456E+00 6.879966E+00 7.707831E+00 8.684594E+00 9.787762E+00 + 7.161192E+00 8.047472E+00 8.978751E+00 1.007589E+01 1.130812E+01 + 8.381449E+00 9.458413E+00 1.054726E+01 1.172291E+01 1.311675E+01 + 9.805206E+00 1.105124E+01 1.236717E+01 1.371784E+01 1.524446E+01 + 1.144300E+01 1.289172E+01 1.445082E+01 1.607595E+01 1.774497E+01 + 1.336512E+01 1.507227E+01 1.688045E+01 1.876034E+01 2.071087E+01 + 1.570188E+01 1.758757E+01 1.969445E+01 2.195589E+01 2.424574E+01 + 1.840820E+01 2.059041E+01 2.303271E+01 2.566302E+01 2.843943E+01 + 2.158164E+01 2.420380E+01 2.690491E+01 2.998487E+01 3.323506E+01 + 2.539606E+01 2.835106E+01 3.156558E+01 3.501353E+01 3.873601E+01 + 2.997666E+01 3.331057E+01 3.691852E+01 4.088085E+01 4.508777E+01 + 3.543319E+01 3.908296E+01 4.318475E+01 4.771779E+01 5.241028E+01 + 4.195721E+01 4.610752E+01 5.067156E+01 5.575566E+01 6.104137E+01 + 4.980732E+01 5.448486E+01 5.970159E+01 6.512023E+01 7.124822E+01 + 5.883129E+01 6.428852E+01 7.011171E+01 7.637037E+01 8.288543E+01 + 6.950009E+01 7.621104E+01 8.271442E+01 8.975680E+01 9.709991E+01 + 8.303370E+01 9.107243E+01 9.884998E+01 1.065631E+02 1.148421E+02 + 9.933542E+01 1.087560E+02 1.178549E+02 1.266256E+02 1.357800E+02 + 1.175778E+02 1.282076E+02 1.384380E+02 1.489760E+02 1.590785E+02 + 1.370311E+02 1.489542E+02 1.605466E+02 1.722238E+02 1.837434E+02 + 1.565589E+02 1.694370E+02 1.825877E+02 1.956074E+02 2.091121E+02 + 1.759576E+02 1.899307E+02 2.054635E+02 2.207768E+02 2.357107E+02 + 1.954436E+02 2.120147E+02 2.287291E+02 2.457928E+02 2.627506E+02 + 2.152559E+02 2.333414E+02 2.529406E+02 2.724097E+02 2.911123E+02 + 2.289522E+02 2.493118E+02 2.706204E+02 2.922908E+02 3.136086E+02 + 3.845970E+00 6.643459E+00 1.097150E+01 1.776836E+01 2.732794E+01 + 4.019779E+00 6.915774E+00 1.123881E+01 1.804003E+01 2.772012E+01 + 4.215744E+00 7.146487E+00 1.156268E+01 1.840506E+01 2.809443E+01 + 4.444103E+00 7.416352E+00 1.194065E+01 1.880050E+01 2.837700E+01 + 4.686678E+00 7.731990E+00 1.231375E+01 1.927661E+01 2.885011E+01 + 4.978651E+00 8.086872E+00 1.271492E+01 1.974384E+01 2.950623E+01 + 5.313657E+00 8.422890E+00 1.318499E+01 2.034804E+01 3.004804E+01 + 5.678908E+00 8.833927E+00 1.375948E+01 2.092071E+01 3.074903E+01 + 6.085668E+00 9.349865E+00 1.438827E+01 2.160502E+01 3.164678E+01 + 6.588785E+00 1.001356E+01 1.519820E+01 2.241338E+01 3.276872E+01 + 7.315718E+00 1.102104E+01 1.647725E+01 2.400104E+01 3.480723E+01 + 8.269251E+00 1.229964E+01 1.821003E+01 2.623096E+01 3.761488E+01 + 9.407425E+00 1.387776E+01 2.019268E+01 2.880018E+01 4.072665E+01 + 1.073862E+01 1.566901E+01 2.239947E+01 3.163926E+01 4.476964E+01 + 1.229139E+01 1.780115E+01 2.499084E+01 3.494572E+01 4.882842E+01 + 1.414908E+01 2.011845E+01 2.785253E+01 3.845261E+01 5.339958E+01 + 1.626630E+01 2.279062E+01 3.113868E+01 4.246794E+01 5.871598E+01 + 1.874042E+01 2.583455E+01 3.477090E+01 4.721527E+01 6.452137E+01 + 2.141746E+01 2.909841E+01 3.886418E+01 5.239148E+01 7.065450E+01 + 2.465898E+01 3.286352E+01 4.389980E+01 5.867345E+01 7.765880E+01 + 2.829427E+01 3.736040E+01 4.914102E+01 6.519897E+01 8.546496E+01 + 3.249922E+01 4.254385E+01 5.561923E+01 7.261103E+01 9.394905E+01 + 3.711023E+01 4.827349E+01 6.271747E+01 8.082961E+01 1.029354E+02 + 4.217659E+01 5.467556E+01 6.991165E+01 8.885463E+01 1.113254E+02 + 4.638214E+01 5.960382E+01 7.565887E+01 9.466980E+01 1.182411E+02 + 5.053610E+01 6.369083E+01 8.047363E+01 9.984381E+01 1.237704E+02 + 5.531746E+01 6.860893E+01 8.530361E+01 1.056533E+02 1.287934E+02 + 6.046339E+01 7.385579E+01 9.048005E+01 1.104824E+02 1.349846E+02 + 6.678636E+01 8.071151E+01 9.704945E+01 1.173284E+02 1.419477E+02 + 7.401761E+01 8.794664E+01 1.050687E+02 1.251923E+02 1.500387E+02 + 8.316910E+01 9.703441E+01 1.149812E+02 1.353195E+02 1.597686E+02 + 9.460908E+01 1.082741E+02 1.255396E+02 1.472261E+02 1.722053E+02 + 1.090449E+02 1.214304E+02 1.398585E+02 1.612363E+02 1.867498E+02 + 1.267837E+02 1.379925E+02 1.560412E+02 1.783019E+02 2.045246E+02 + 1.490265E+02 1.594020E+02 1.759722E+02 1.986391E+02 2.255688E+02 + 1.751158E+02 1.860430E+02 2.009350E+02 2.227664E+02 2.508336E+02 + 2.070487E+02 2.167816E+02 2.326588E+02 2.525610E+02 2.809646E+02 + 2.435589E+02 2.540506E+02 2.700398E+02 2.897732E+02 3.169218E+02 + 2.851128E+02 2.968889E+02 3.129340E+02 3.330092E+02 3.607739E+02 + 3.338767E+02 3.466347E+02 3.641494E+02 3.832185E+02 4.129862E+02 + 3.887118E+02 4.044926E+02 4.221189E+02 4.454675E+02 4.736166E+02 + 4.537939E+02 4.678991E+02 4.906833E+02 5.167092E+02 5.425178E+02 + 5.225081E+02 5.393601E+02 5.662817E+02 5.908052E+02 6.170007E+02 + 5.980927E+02 6.208165E+02 6.460036E+02 6.713346E+02 7.019704E+02 + 6.787289E+02 7.011935E+02 7.302508E+02 7.627949E+02 7.950208E+02 + 7.671296E+02 7.850361E+02 8.164732E+02 8.548336E+02 8.864360E+02 + 8.579185E+02 8.721554E+02 9.017098E+02 9.445115E+02 9.804857E+02 + 9.455468E+02 9.561154E+02 9.866225E+02 1.029662E+03 1.075674E+03 + 1.041580E+03 1.044514E+03 1.073415E+03 1.118827E+03 1.161120E+03 + 1.155401E+03 1.147836E+03 1.174053E+03 1.215299E+03 1.265727E+03 + 1.288416E+03 1.274699E+03 1.294482E+03 1.337049E+03 1.390403E+03 + 1.457770E+03 1.440265E+03 1.459174E+03 1.498794E+03 1.559253E+03 + 1.693983E+03 1.657849E+03 1.674047E+03 1.715469E+03 1.767154E+03 + 1.984276E+03 1.935420E+03 1.929888E+03 1.953576E+03 1.995410E+03 + 2.256355E+03 2.201261E+03 2.170174E+03 2.174574E+03 2.202017E+03 + 2.524401E+03 2.463747E+03 2.415256E+03 2.397237E+03 2.404758E+03 + 2.782961E+03 2.718348E+03 2.661189E+03 2.618613E+03 2.601331E+03 + 3.018841E+03 2.952191E+03 2.888919E+03 2.833156E+03 2.788363E+03 + 3.178833E+03 3.111204E+03 3.045408E+03 2.984127E+03 2.927722E+03 + 1.553078E+02 2.578091E+02 4.081544E+02 6.014633E+02 8.170964E+02 + 1.575938E+02 2.617664E+02 4.121555E+02 6.039695E+02 8.199516E+02 + 1.594948E+02 2.649336E+02 4.162545E+02 6.065392E+02 8.228567E+02 + 1.621818E+02 2.686314E+02 4.186052E+02 6.091815E+02 8.230355E+02 + 1.663016E+02 2.722398E+02 4.248138E+02 6.119793E+02 8.261454E+02 + 1.719907E+02 2.758347E+02 4.293546E+02 6.175753E+02 8.352954E+02 + 1.792074E+02 2.800982E+02 4.322697E+02 6.206390E+02 8.386546E+02 + 1.868116E+02 2.847996E+02 4.377635E+02 6.241352E+02 8.423144E+02 + 1.934573E+02 2.889276E+02 4.419319E+02 6.281643E+02 8.501279E+02 + 2.054323E+02 2.999184E+02 4.498963E+02 6.367562E+02 8.665531E+02 + 2.193691E+02 3.169326E+02 4.705712E+02 6.586422E+02 8.998856E+02 + 2.408475E+02 3.417047E+02 5.028374E+02 6.896905E+02 9.468878E+02 + 2.654425E+02 3.735181E+02 5.332656E+02 7.207724E+02 9.883245E+02 + 2.943571E+02 4.123992E+02 5.728099E+02 7.607215E+02 1.041470E+03 + 3.289450E+02 4.510833E+02 6.079065E+02 8.257633E+02 1.091864E+03 + 3.625142E+02 4.937108E+02 6.499250E+02 8.868084E+02 1.141701E+03 + 4.016743E+02 5.410928E+02 7.047402E+02 9.380225E+02 1.194678E+03 + 4.474094E+02 5.888557E+02 7.555582E+02 9.871675E+02 1.254130E+03 + 4.882034E+02 6.379742E+02 8.164785E+02 1.046864E+03 1.311705E+03 + 5.444349E+02 6.932247E+02 8.751993E+02 1.101913E+03 1.382163E+03 + 6.065333E+02 7.566728E+02 9.360732E+02 1.173142E+03 1.446782E+03 + 6.660686E+02 8.131872E+02 1.005947E+03 1.238834E+03 1.514069E+03 + 7.265020E+02 8.914780E+02 1.074661E+03 1.305096E+03 1.578771E+03 + 7.880986E+02 9.572136E+02 1.141844E+03 1.371588E+03 1.627860E+03 + 8.408120E+02 1.005962E+03 1.193281E+03 1.410270E+03 1.656533E+03 + 8.921129E+02 1.046333E+03 1.233387E+03 1.441677E+03 1.687363E+03 + 9.476591E+02 1.101316E+03 1.267083E+03 1.470137E+03 1.716239E+03 + 1.005514E+03 1.152825E+03 1.321784E+03 1.503803E+03 1.740210E+03 + 1.093767E+03 1.223460E+03 1.383498E+03 1.555234E+03 1.779599E+03 + 1.187288E+03 1.316231E+03 1.458460E+03 1.610957E+03 1.824347E+03 + 1.291606E+03 1.429983E+03 1.566781E+03 1.699767E+03 1.893658E+03 + 1.403749E+03 1.548403E+03 1.668175E+03 1.808815E+03 1.976622E+03 + 1.528594E+03 1.672430E+03 1.797471E+03 1.930544E+03 2.066625E+03 + 1.674664E+03 1.806988E+03 1.979683E+03 2.096398E+03 2.189032E+03 + 1.841269E+03 1.986380E+03 2.146243E+03 2.240778E+03 2.362892E+03 + 2.022395E+03 2.205999E+03 2.338831E+03 2.426860E+03 2.529709E+03 + 2.217884E+03 2.402803E+03 2.540365E+03 2.640614E+03 2.730455E+03 + 2.419305E+03 2.603335E+03 2.750104E+03 2.872423E+03 2.944800E+03 + 2.650772E+03 2.795154E+03 2.958118E+03 3.073400E+03 3.210104E+03 + 2.883119E+03 2.981432E+03 3.149507E+03 3.302632E+03 3.435208E+03 + 3.111931E+03 3.218293E+03 3.366263E+03 3.522972E+03 3.698942E+03 + 3.408314E+03 3.414925E+03 3.554013E+03 3.778799E+03 3.937131E+03 + 3.736470E+03 3.649774E+03 3.785184E+03 3.981796E+03 4.190543E+03 + 4.145636E+03 4.028232E+03 4.068841E+03 4.224056E+03 4.487741E+03 + 4.670215E+03 4.542640E+03 4.480166E+03 4.646449E+03 4.920725E+03 + 5.516023E+03 5.327598E+03 5.189385E+03 5.229400E+03 5.441930E+03 + 6.607358E+03 6.380248E+03 6.175208E+03 6.034783E+03 6.077869E+03 + 7.621266E+03 7.378234E+03 7.166097E+03 6.939478E+03 6.794666E+03 + 8.662350E+03 8.409127E+03 8.184387E+03 7.931581E+03 7.684026E+03 + 9.675684E+03 9.414518E+03 9.187535E+03 8.912470E+03 8.643542E+03 + 1.055754E+04 1.030856E+04 1.007632E+04 9.798284E+03 9.523122E+03 + 1.128173E+04 1.104451E+04 1.081562E+04 1.054145E+04 1.025961E+04 + 1.182542E+04 1.161831E+04 1.139443E+04 1.113812E+04 1.085895E+04 + 1.212969E+04 1.195177E+04 1.174958E+04 1.150960E+04 1.123750E+04 + 1.217319E+04 1.201819E+04 1.184217E+04 1.162486E+04 1.137671E+04 + 1.197790E+04 1.185340E+04 1.168850E+04 1.149522E+04 1.126825E+04 + 1.153504E+04 1.143420E+04 1.129980E+04 1.113003E+04 1.093100E+04 + 1.092659E+04 1.083488E+04 1.071628E+04 1.056805E+04 1.039365E+04 + 1.035125E+04 1.028067E+04 1.017247E+04 1.003285E+04 9.879221E+03 + 3.245570E+03 4.050482E+03 4.847724E+03 5.740307E+03 6.665853E+03 + 3.254729E+03 4.058005E+03 4.856518E+03 5.749922E+03 6.675661E+03 + 3.263928E+03 4.065498E+03 4.865054E+03 5.759593E+03 6.685522E+03 + 3.302456E+03 4.101389E+03 4.874181E+03 5.769317E+03 6.695429E+03 + 3.336109E+03 4.135737E+03 4.883683E+03 5.779416E+03 6.705713E+03 + 3.345475E+03 4.170932E+03 4.893066E+03 5.821085E+03 6.715815E+03 + 3.354943E+03 4.180151E+03 4.902608E+03 5.831442E+03 6.726033E+03 + 3.419637E+03 4.189274E+03 4.944990E+03 5.842557E+03 6.736988E+03 + 3.429938E+03 4.202361E+03 4.957965E+03 5.856190E+03 6.750432E+03 + 3.507543E+03 4.230443E+03 4.986877E+03 5.887175E+03 6.819158E+03 + 3.549205E+03 4.293184E+03 5.054358E+03 5.992312E+03 6.976108E+03 + 3.678044E+03 4.382313E+03 5.220823E+03 6.133960E+03 7.087749E+03 + 3.785689E+03 4.507182E+03 5.370736E+03 6.253504E+03 7.205867E+03 + 3.925151E+03 4.667222E+03 5.527218E+03 6.411182E+03 7.415435E+03 + 4.064407E+03 4.836991E+03 5.656485E+03 6.570099E+03 7.632401E+03 + 4.213722E+03 4.954128E+03 5.846950E+03 6.776239E+03 7.816253E+03 + 4.358352E+03 5.112582E+03 6.013392E+03 6.995088E+03 8.004351E+03 + 4.535190E+03 5.274940E+03 6.183953E+03 7.171158E+03 8.196491E+03 + 4.655578E+03 5.485759E+03 6.395875E+03 7.357064E+03 8.446062E+03 + 4.844622E+03 5.664050E+03 6.577484E+03 7.545639E+03 8.792521E+03 + 5.083890E+03 5.883357E+03 6.767653E+03 7.793368E+03 9.031271E+03 + 5.247564E+03 6.038607E+03 7.003833E+03 7.998394E+03 9.217847E+03 + 5.447360E+03 6.330735E+03 7.151320E+03 8.202586E+03 9.534248E+03 + 5.613488E+03 6.535162E+03 7.338942E+03 8.364511E+03 9.737384E+03 + 5.712093E+03 6.629271E+03 7.462150E+03 8.498554E+03 9.759053E+03 + 5.824593E+03 6.635125E+03 7.540162E+03 8.474975E+03 9.855400E+03 + 5.864674E+03 6.695148E+03 7.488718E+03 8.501129E+03 9.939280E+03 + 5.912685E+03 6.656926E+03 7.614040E+03 8.526118E+03 9.884057E+03 + 6.081225E+03 6.728625E+03 7.691572E+03 8.581935E+03 9.854804E+03 + 6.295703E+03 6.876678E+03 7.782079E+03 8.677051E+03 9.889180E+03 + 6.528279E+03 7.152187E+03 7.925734E+03 8.796501E+03 1.009958E+04 + 6.862345E+03 7.356190E+03 8.043188E+03 9.005871E+03 1.028198E+04 + 7.299521E+03 7.631985E+03 8.247942E+03 9.274270E+03 1.051105E+04 + 7.698008E+03 8.020291E+03 8.808219E+03 9.866881E+03 1.081390E+04 + 8.181507E+03 8.568011E+03 9.378127E+03 1.022322E+04 1.144843E+04 + 8.848733E+03 9.252675E+03 1.004377E+04 1.091283E+04 1.208875E+04 + 9.755630E+03 1.017774E+04 1.077076E+04 1.166706E+04 1.268070E+04 + 1.105393E+04 1.127767E+04 1.166480E+04 1.252164E+04 1.358596E+04 + 1.283395E+04 1.262410E+04 1.302676E+04 1.358503E+04 1.504259E+04 + 1.489365E+04 1.459711E+04 1.456714E+04 1.529127E+04 1.632111E+04 + 1.738900E+04 1.750723E+04 1.723566E+04 1.739957E+04 1.785586E+04 + 2.068810E+04 2.020034E+04 1.981204E+04 1.958881E+04 1.972696E+04 + 2.363332E+04 2.312107E+04 2.258572E+04 2.215315E+04 2.186727E+04 + 2.662189E+04 2.604938E+04 2.544616E+04 2.492184E+04 2.435390E+04 + 2.952616E+04 2.890187E+04 2.821266E+04 2.761834E+04 2.700386E+04 + 3.201391E+04 3.144443E+04 3.069604E+04 3.011046E+04 2.946087E+04 + 3.399795E+04 3.345680E+04 3.281091E+04 3.213586E+04 3.151310E+04 + 3.532814E+04 3.480081E+04 3.427764E+04 3.359424E+04 3.302492E+04 + 3.579297E+04 3.541338E+04 3.497209E+04 3.443184E+04 3.384369E+04 + 3.537504E+04 3.526970E+04 3.485883E+04 3.447907E+04 3.392517E+04 + 3.427323E+04 3.430186E+04 3.396206E+04 3.366354E+04 3.327599E+04 + 3.255253E+04 3.265422E+04 3.243920E+04 3.219856E+04 3.188059E+04 + 3.041482E+04 3.052324E+04 3.038688E+04 3.020027E+04 2.993474E+04 + 2.793574E+04 2.806800E+04 2.799412E+04 2.783002E+04 2.756895E+04 + 2.529048E+04 2.539089E+04 2.535736E+04 2.522643E+04 2.498890E+04 + 2.259537E+04 2.268338E+04 2.266117E+04 2.256124E+04 2.234196E+04 + 1.995278E+04 2.004320E+04 2.002129E+04 1.990337E+04 1.970242E+04 + 1.742071E+04 1.750270E+04 1.746923E+04 1.736366E+04 1.720038E+04 + 1.563751E+04 1.568658E+04 1.565099E+04 1.556758E+04 1.541414E+04 + 2.083798E+04 3.166345E+04 4.523239E+04 5.952376E+04 7.282583E+04 + 2.087447E+04 3.184401E+04 4.543423E+04 5.971570E+04 7.299789E+04 + 2.091204E+04 3.202878E+04 4.563967E+04 5.991051E+04 7.317220E+04 + 2.161486E+04 3.221853E+04 4.584930E+04 6.010861E+04 7.334901E+04 + 2.168487E+04 3.241945E+04 4.606999E+04 6.031652E+04 7.353422E+04 + 2.175588E+04 3.262272E+04 4.629129E+04 6.052410E+04 7.371861E+04 + 2.183013E+04 3.283487E+04 4.652026E+04 6.073787E+04 7.390790E+04 + 2.269769E+04 3.306795E+04 4.677020E+04 6.097041E+04 7.411334E+04 + 2.278082E+04 3.335460E+04 4.707776E+04 6.125645E+04 7.436594E+04 + 2.313473E+04 3.396054E+04 4.774485E+04 6.188302E+04 7.492245E+04 + 2.388668E+04 3.528483E+04 4.922084E+04 6.327259E+04 7.615715E+04 + 2.498692E+04 3.708780E+04 5.142092E+04 6.533075E+04 7.797605E+04 + 2.629517E+04 3.951847E+04 5.383357E+04 6.756543E+04 7.983248E+04 + 2.794556E+04 4.206285E+04 5.632374E+04 6.984776E+04 8.167717E+04 + 2.965719E+04 4.470799E+04 5.887726E+04 7.216366E+04 8.345604E+04 + 3.389243E+04 4.737849E+04 6.142033E+04 7.444588E+04 8.507169E+04 + 3.639937E+04 5.015898E+04 6.403460E+04 7.676854E+04 8.666638E+04 + 3.892594E+04 5.303661E+04 6.670646E+04 7.911857E+04 8.825146E+04 + 4.191727E+04 5.596063E+04 6.938799E+04 8.145360E+04 8.979992E+04 + 4.503320E+04 5.895899E+04 7.210526E+04 8.352066E+04 9.160584E+04 + 4.830857E+04 6.206462E+04 7.488765E+04 8.565747E+04 9.349751E+04 + 5.168301E+04 6.521824E+04 7.768106E+04 8.760916E+04 9.533720E+04 + 5.504927E+04 6.832002E+04 8.039800E+04 8.949718E+04 9.717826E+04 + 5.774960E+04 7.076473E+04 8.251159E+04 9.098641E+04 9.861377E+04 + 5.883086E+04 7.169126E+04 8.328335E+04 9.165340E+04 9.911889E+04 + 5.892952E+04 7.170237E+04 8.324964E+04 9.186199E+04 9.903728E+04 + 5.880733E+04 7.150638E+04 8.303101E+04 9.201063E+04 9.897714E+04 + 5.896075E+04 7.134445E+04 8.284349E+04 9.225100E+04 9.895082E+04 + 5.936108E+04 7.141859E+04 8.287201E+04 9.238933E+04 9.907677E+04 + 6.122527E+04 7.201728E+04 8.315320E+04 9.274021E+04 9.938728E+04 + 6.380973E+04 7.335140E+04 8.372792E+04 9.330497E+04 1.005715E+05 + 6.770132E+04 7.586992E+04 8.533342E+04 9.409725E+04 1.018281E+05 + 7.220040E+04 7.946259E+04 8.729265E+04 9.584112E+04 1.033609E+05 + 7.760771E+04 8.384858E+04 9.049938E+04 9.779790E+04 1.045006E+05 + 8.220698E+04 8.924568E+04 9.494898E+04 9.958710E+04 1.054469E+05 + 8.750035E+04 9.403152E+04 9.972876E+04 1.034062E+05 1.068560E+05 + 9.145249E+04 9.907996E+04 1.057599E+05 1.082254E+05 1.095306E+05 + 9.453043E+04 1.034844E+05 1.093826E+05 1.134146E+05 1.129798E+05 + 1.007431E+05 1.068598E+05 1.120568E+05 1.159701E+05 1.171707E+05 + 1.063813E+05 1.113257E+05 1.146086E+05 1.171190E+05 1.188227E+05 + 1.113599E+05 1.141426E+05 1.154933E+05 1.175437E+05 1.191670E+05 + 1.142617E+05 1.144870E+05 1.170217E+05 1.171813E+05 1.186671E+05 + 1.138689E+05 1.140002E+05 1.170344E+05 1.181539E+05 1.173803E+05 + 1.111548E+05 1.134774E+05 1.136747E+05 1.158477E+05 1.155803E+05 + 1.061099E+05 1.085096E+05 1.109891E+05 1.108423E+05 1.114254E+05 + 1.001937E+05 1.012784E+05 1.049079E+05 1.053897E+05 1.053046E+05 + 9.260488E+04 9.368055E+04 9.554155E+04 9.831536E+04 9.850748E+04 + 8.496882E+04 8.578878E+04 8.724123E+04 8.957222E+04 9.088574E+04 + 7.699699E+04 7.807294E+04 7.938561E+04 8.056954E+04 8.251947E+04 + 6.919876E+04 7.029725E+04 7.152856E+04 7.230516E+04 7.312063E+04 + 6.165993E+04 6.269203E+04 6.369351E+04 6.410620E+04 6.425263E+04 + 5.412925E+04 5.527349E+04 5.612607E+04 5.613362E+04 5.599222E+04 + 4.728831E+04 4.834824E+04 4.861678E+04 4.850321E+04 4.820461E+04 + 4.092079E+04 4.136960E+04 4.156279E+04 4.166755E+04 4.146513E+04 + 3.489650E+04 3.541264E+04 3.556787E+04 3.556721E+04 3.523132E+04 + 2.980122E+04 3.010573E+04 3.011706E+04 3.000696E+04 2.991623E+04 + 2.521983E+04 2.526819E+04 2.529169E+04 2.531799E+04 2.516655E+04 + 2.113160E+04 2.121859E+04 2.132997E+04 2.127335E+04 2.115098E+04 + 1.848745E+04 1.860443E+04 1.867049E+04 1.855029E+04 1.852570E+04 + 2.924768E+05 3.312674E+05 3.545652E+05 3.654519E+05 3.668923E+05 + 2.931031E+05 3.316650E+05 3.547763E+05 3.655197E+05 3.668540E+05 + 2.937308E+05 3.320619E+05 3.549856E+05 3.655852E+05 3.668134E+05 + 2.943600E+05 3.324573E+05 3.551919E+05 3.656470E+05 3.667688E+05 + 2.950110E+05 3.328644E+05 3.554026E+05 3.657081E+05 3.667201E+05 + 2.956478E+05 3.332597E+05 3.556049E+05 3.657639E+05 3.666687E+05 + 2.962899E+05 3.336549E+05 3.558040E+05 3.658150E+05 3.666119E+05 + 2.969761E+05 3.340745E+05 3.560129E+05 3.658655E+05 3.665475E+05 + 2.978163E+05 3.345876E+05 3.562676E+05 3.659253E+05 3.664667E+05 + 2.997371E+05 3.357784E+05 3.568717E+05 3.660828E+05 3.662964E+05 + 3.040235E+05 3.384368E+05 3.582143E+05 3.664192E+05 3.658917E+05 + 3.101632E+05 3.421849E+05 3.600408E+05 3.667814E+05 3.651792E+05 + 3.164726E+05 3.459402E+05 3.617633E+05 3.669644E+05 3.640301E+05 + 3.225233E+05 3.494303E+05 3.632370E+05 3.669238E+05 3.633218E+05 + 3.282532E+05 3.526160E+05 3.644401E+05 3.666467E+05 3.624494E+05 + 3.334835E+05 3.553966E+05 3.653306E+05 3.661378E+05 3.612841E+05 + 3.383874E+05 3.578678E+05 3.659436E+05 3.653819E+05 3.603008E+05 + 3.429103E+05 3.599946E+05 3.662560E+05 3.643675E+05 3.590885E+05 + 3.469503E+05 3.617253E+05 3.662532E+05 3.631089E+05 3.576622E+05 + 3.505434E+05 3.630737E+05 3.659292E+05 3.618754E+05 3.560011E+05 + 3.537084E+05 3.640385E+05 3.652690E+05 3.605588E+05 3.540764E+05 + 3.563491E+05 3.645728E+05 3.642646E+05 3.589508E+05 3.519073E+05 + 3.583644E+05 3.646543E+05 3.629468E+05 3.573897E+05 3.495651E+05 + 3.593327E+05 3.642767E+05 3.616198E+05 3.558819E+05 3.481925E+05 + 3.588224E+05 3.635752E+05 3.608360E+05 3.549847E+05 3.473226E+05 + 3.573290E+05 3.626202E+05 3.603567E+05 3.544090E+05 3.466574E+05 + 3.552652E+05 3.613473E+05 3.597672E+05 3.537103E+05 3.465434E+05 + 3.527050E+05 3.596741E+05 3.588734E+05 3.530565E+05 3.462195E+05 + 3.497212E+05 3.575360E+05 3.575112E+05 3.521272E+05 3.454709E+05 + 3.462368E+05 3.548351E+05 3.555649E+05 3.506451E+05 3.441873E+05 + 3.420962E+05 3.514288E+05 3.528997E+05 3.484884E+05 3.422561E+05 + 3.379246E+05 3.471473E+05 3.493348E+05 3.454836E+05 3.395126E+05 + 3.339522E+05 3.417629E+05 3.446496E+05 3.414289E+05 3.357721E+05 + 3.294221E+05 3.365997E+05 3.385777E+05 3.364216E+05 3.318755E+05 + 3.262698E+05 3.301919E+05 3.315437E+05 3.303542E+05 3.267782E+05 + 3.218329E+05 3.240831E+05 3.234116E+05 3.231564E+05 3.200620E+05 + 3.165008E+05 3.166546E+05 3.145162E+05 3.143580E+05 3.117081E+05 + 3.085839E+05 3.077237E+05 3.062414E+05 3.034632E+05 3.014425E+05 + 2.980573E+05 2.973694E+05 2.965030E+05 2.931661E+05 2.886473E+05 + 2.844503E+05 2.830398E+05 2.831333E+05 2.807478E+05 2.758847E+05 + 2.679929E+05 2.676527E+05 2.666523E+05 2.651992E+05 2.607130E+05 + 2.500601E+05 2.506191E+05 2.487843E+05 2.469682E+05 2.436405E+05 + 2.310702E+05 2.307760E+05 2.298703E+05 2.269449E+05 2.248188E+05 + 2.097069E+05 2.092576E+05 2.094149E+05 2.080721E+05 2.051197E+05 + 1.877419E+05 1.887109E+05 1.876581E+05 1.878429E+05 1.858094E+05 + 1.656617E+05 1.678465E+05 1.673829E+05 1.667243E+05 1.660805E+05 + 1.441306E+05 1.471208E+05 1.480138E+05 1.471909E+05 1.464163E+05 + 1.243120E+05 1.272983E+05 1.285607E+05 1.284191E+05 1.275260E+05 + 1.062421E+05 1.088379E+05 1.103630E+05 1.108299E+05 1.103248E+05 + 9.022725E+04 9.247497E+04 9.398064E+04 9.470602E+04 9.458741E+04 + 7.666632E+04 7.856187E+04 7.972212E+04 8.038503E+04 8.045195E+04 + 6.509097E+04 6.647577E+04 6.730829E+04 6.788811E+04 6.799278E+04 + 5.494586E+04 5.591875E+04 5.669482E+04 5.709678E+04 5.717128E+04 + 4.621958E+04 4.705903E+04 4.757237E+04 4.780259E+04 4.784206E+04 + 3.882441E+04 3.939874E+04 3.976220E+04 3.993502E+04 3.991094E+04 + 3.248343E+04 3.287657E+04 3.317432E+04 3.325274E+04 3.314398E+04 + 2.711146E+04 2.745294E+04 2.759513E+04 2.760698E+04 2.750338E+04 + 2.263087E+04 2.284013E+04 2.290929E+04 2.289111E+04 2.278327E+04 + 1.967585E+04 1.982526E+04 1.986283E+04 1.984613E+04 1.971513E+04 + +Band: 6, gas: 3, k-terms: 1 + 9.628757E-02 1.082214E-01 1.203825E-01 1.328774E-01 1.457316E-01 + 9.651883E-02 1.084429E-01 1.205980E-01 1.330893E-01 1.459412E-01 + 9.676598E-02 1.086783E-01 1.208257E-01 1.333119E-01 1.461600E-01 + 9.703134E-02 1.089297E-01 1.210672E-01 1.335466E-01 1.463894E-01 + 9.732340E-02 1.092052E-01 1.213308E-01 1.338014E-01 1.466373E-01 + 9.763645E-02 1.094989E-01 1.216098E-01 1.340690E-01 1.468958E-01 + 9.797906E-02 1.098190E-01 1.219123E-01 1.343575E-01 1.471728E-01 + 9.836567E-02 1.101799E-01 1.222526E-01 1.346812E-01 1.474825E-01 + 9.882982E-02 1.106152E-01 1.226648E-01 1.350749E-01 1.478603E-01 + 9.961944E-02 1.113769E-01 1.234076E-01 1.358048E-01 1.485795E-01 + 1.011016E-01 1.128393E-01 1.248663E-01 1.372685E-01 1.500482E-01 + 1.032133E-01 1.149410E-01 1.269790E-01 1.394026E-01 1.522000E-01 + 1.055496E-01 1.172703E-01 1.293230E-01 1.417700E-01 1.545844E-01 + 1.080112E-01 1.197257E-01 1.317931E-01 1.442615E-01 1.570881E-01 + 1.105980E-01 1.223065E-01 1.343878E-01 1.468744E-01 1.597062E-01 + 1.132599E-01 1.249606E-01 1.370520E-01 1.495505E-01 1.623784E-01 + 1.160769E-01 1.277694E-01 1.398689E-01 1.523745E-01 1.651911E-01 + 1.190512E-01 1.307341E-01 1.428385E-01 1.553450E-01 1.681418E-01 + 1.221561E-01 1.338260E-01 1.459292E-01 1.584281E-01 1.711945E-01 + 1.254286E-01 1.370818E-01 1.491775E-01 1.616595E-01 1.743847E-01 + 1.289143E-01 1.405469E-01 1.526282E-01 1.650818E-01 1.777559E-01 + 1.325803E-01 1.441854E-01 1.562424E-01 1.686547E-01 1.812647E-01 + 1.363553E-01 1.479209E-01 1.599390E-01 1.722945E-01 1.848252E-01 + 1.397042E-01 1.511927E-01 1.631360E-01 1.754067E-01 1.878395E-01 + 1.418318E-01 1.531649E-01 1.649662E-01 1.771065E-01 1.894190E-01 + 1.432943E-01 1.544098E-01 1.660149E-01 1.779860E-01 1.901556E-01 + 1.447657E-01 1.556255E-01 1.669987E-01 1.787709E-01 1.907745E-01 + 1.464937E-01 1.570680E-01 1.681795E-01 1.797252E-01 1.915384E-01 + 1.486847E-01 1.589531E-01 1.697799E-01 1.810754E-01 1.926746E-01 + 1.513999E-01 1.613454E-01 1.718675E-01 1.828889E-01 1.942522E-01 + 1.546701E-01 1.642791E-01 1.744789E-01 1.852049E-01 1.963111E-01 + 1.585555E-01 1.678218E-01 1.776881E-01 1.881031E-01 1.989335E-01 + 1.630948E-01 1.720199E-01 1.815486E-01 1.916429E-01 2.021836E-01 + 1.682785E-01 1.768706E-01 1.860632E-01 1.958327E-01 2.060742E-01 + 1.740574E-01 1.823300E-01 1.911928E-01 2.006373E-01 2.105747E-01 + 1.803925E-01 1.883668E-01 1.969129E-01 2.060386E-01 2.156715E-01 + 1.872000E-01 1.949040E-01 2.031517E-01 2.119693E-01 2.213009E-01 + 1.944111E-01 2.018818E-01 2.098571E-01 2.183847E-01 2.274261E-01 + 2.019849E-01 2.092703E-01 2.170105E-01 2.252407E-01 2.339740E-01 + 2.098604E-01 2.170005E-01 2.244937E-01 2.324866E-01 2.409759E-01 + 2.179825E-01 2.249830E-01 2.323299E-01 2.401372E-01 2.484194E-01 + 2.261518E-01 2.331183E-01 2.403648E-01 2.480275E-01 2.561382E-01 + 2.341671E-01 2.412176E-01 2.484020E-01 2.559548E-01 2.639247E-01 + 2.419137E-01 2.491549E-01 2.563106E-01 2.637838E-01 2.716408E-01 + 2.494147E-01 2.567710E-01 2.640095E-01 2.714308E-01 2.792011E-01 + 2.566660E-01 2.641260E-01 2.714817E-01 2.788774E-01 2.865869E-01 + 2.637393E-01 2.713171E-01 2.787549E-01 2.861744E-01 2.938500E-01 + 2.705168E-01 2.782205E-01 2.856782E-01 2.931626E-01 3.008460E-01 + 2.768367E-01 2.846708E-01 2.921205E-01 2.996256E-01 3.073448E-01 + 2.830464E-01 2.909184E-01 2.984235E-01 3.059628E-01 3.136910E-01 + 2.902534E-01 2.980842E-01 3.056422E-01 3.132436E-01 3.210248E-01 + 2.976541E-01 3.054607E-01 3.130904E-01 3.207832E-01 3.286341E-01 + 3.046432E-01 3.124338E-01 3.201143E-01 3.278890E-01 3.358237E-01 + 3.112153E-01 3.190026E-01 3.267398E-01 3.345857E-01 3.425698E-01 + 3.173370E-01 3.251399E-01 3.329379E-01 3.408490E-01 3.488684E-01 + 3.229670E-01 3.307990E-01 3.386710E-01 3.466427E-01 3.546798E-01 + 3.282669E-01 3.361313E-01 3.440526E-01 3.520673E-01 3.601129E-01 + 3.331659E-01 3.410557E-01 3.490246E-01 3.570641E-01 3.650875E-01 + 3.362331E-01 3.441404E-01 3.521296E-01 3.601704E-01 3.681615E-01 + +Band: 6, gas: 4, k-terms: 4 + 6.936594E-04 1.370508E-03 2.629295E-03 4.779295E-03 8.193146E-03 + 7.684734E-04 1.469186E-03 2.762694E-03 4.938942E-03 8.403413E-03 + 8.544830E-04 1.587142E-03 2.907086E-03 5.123853E-03 8.621756E-03 + 9.553243E-04 1.719561E-03 3.071127E-03 5.326624E-03 8.861317E-03 + 1.072571E-03 1.868868E-03 3.266763E-03 5.571215E-03 9.143192E-03 + 1.203266E-03 2.043231E-03 3.477215E-03 5.831683E-03 9.456630E-03 + 1.350128E-03 2.235986E-03 3.728863E-03 6.129367E-03 9.822728E-03 + 1.524149E-03 2.457372E-03 4.004567E-03 6.471914E-03 1.022093E-02 + 1.724046E-03 2.719164E-03 4.329124E-03 6.875060E-03 1.071339E-02 + 1.979019E-03 3.043614E-03 4.744133E-03 7.403200E-03 1.137320E-02 + 2.323089E-03 3.503769E-03 5.356318E-03 8.193074E-03 1.235492E-02 + 2.778301E-03 4.104170E-03 6.163350E-03 9.277473E-03 1.368392E-02 + 3.329915E-03 4.837461E-03 7.127657E-03 1.051449E-02 1.528572E-02 + 3.985349E-03 5.704550E-03 8.235499E-03 1.195391E-02 1.710731E-02 + 4.770659E-03 6.695139E-03 9.546581E-03 1.359163E-02 1.910918E-02 + 5.687391E-03 7.883113E-03 1.101501E-02 1.541067E-02 2.141536E-02 + 6.765488E-03 9.246192E-03 1.272712E-02 1.750106E-02 2.390642E-02 + 8.049449E-03 1.086418E-02 1.468996E-02 1.993799E-02 2.690379E-02 + 9.566511E-03 1.272184E-02 1.698465E-02 2.267148E-02 3.023094E-02 + 1.135047E-02 1.489550E-02 1.963575E-02 2.581299E-02 3.391797E-02 + 1.351193E-02 1.745483E-02 2.268784E-02 2.944555E-02 3.812853E-02 + 1.599978E-02 2.038693E-02 2.622565E-02 3.358155E-02 4.293541E-02 + 1.888861E-02 2.379418E-02 3.022881E-02 3.828612E-02 4.827189E-02 + 2.201470E-02 2.742439E-02 3.441761E-02 4.302878E-02 5.379375E-02 + 2.499385E-02 3.073547E-02 3.810025E-02 4.724905E-02 5.841225E-02 + 2.796024E-02 3.402423E-02 4.170707E-02 5.108498E-02 6.261354E-02 + 3.116972E-02 3.765263E-02 4.543659E-02 5.524366E-02 6.706308E-02 + 3.483011E-02 4.176314E-02 4.983740E-02 5.988076E-02 7.213345E-02 + 3.930334E-02 4.649268E-02 5.510258E-02 6.547263E-02 7.799053E-02 + 4.434331E-02 5.206579E-02 6.130895E-02 7.200710E-02 8.487174E-02 + 5.022398E-02 5.858928E-02 6.846633E-02 7.988753E-02 9.314150E-02 + 5.698099E-02 6.614808E-02 7.682372E-02 8.911913E-02 1.030828E-01 + 6.504513E-02 7.499573E-02 8.651243E-02 9.952055E-02 1.144818E-01 + 7.422178E-02 8.529333E-02 9.773055E-02 1.118366E-01 1.278209E-01 + 8.529027E-02 9.689551E-02 1.104356E-01 1.260781E-01 1.434968E-01 + 9.805257E-02 1.105805E-01 1.254375E-01 1.421469E-01 1.610613E-01 + 1.127894E-01 1.264572E-01 1.422744E-01 1.606730E-01 1.806461E-01 + 1.295159E-01 1.446113E-01 1.620337E-01 1.813514E-01 2.031166E-01 + 1.492038E-01 1.658132E-01 1.843872E-01 2.053988E-01 2.287824E-01 + 1.719875E-01 1.893284E-01 2.096696E-01 2.323338E-01 2.575959E-01 + 1.983193E-01 2.166243E-01 2.380364E-01 2.627611E-01 2.896201E-01 + 2.286434E-01 2.476126E-01 2.701117E-01 2.964429E-01 3.256973E-01 + 2.618405E-01 2.824499E-01 3.063761E-01 3.342377E-01 3.648788E-01 + 3.001623E-01 3.217787E-01 3.471603E-01 3.757850E-01 4.086953E-01 + 3.418739E-01 3.651910E-01 3.924529E-01 4.226117E-01 4.579550E-01 + 3.889802E-01 4.144978E-01 4.430388E-01 4.752106E-01 5.096163E-01 + 4.413986E-01 4.680164E-01 4.980139E-01 5.318513E-01 5.680436E-01 + 4.965642E-01 5.241884E-01 5.568098E-01 5.922030E-01 6.298856E-01 + 5.558664E-01 5.847497E-01 6.192965E-01 6.571223E-01 6.968311E-01 + 6.198572E-01 6.487615E-01 6.852556E-01 7.240253E-01 7.652533E-01 + 6.865281E-01 7.181545E-01 7.558035E-01 7.969591E-01 8.398898E-01 + 7.591786E-01 7.938658E-01 8.328573E-01 8.763494E-01 9.221885E-01 + 8.351967E-01 8.714738E-01 9.134473E-01 9.576805E-01 1.006363E+00 + 9.132141E-01 9.526211E-01 9.964150E-01 1.042894E+00 1.092541E+00 + 9.953733E-01 1.037161E+00 1.083117E+00 1.131778E+00 1.181890E+00 + 1.081007E+00 1.124819E+00 1.172014E+00 1.222044E+00 1.272458E+00 + 1.169443E+00 1.214153E+00 1.262382E+00 1.312099E+00 1.364141E+00 + 1.258869E+00 1.303983E+00 1.353162E+00 1.403827E+00 1.455207E+00 + 1.325870E+00 1.372343E+00 1.420152E+00 1.470365E+00 1.521602E+00 + 2.750756E+00 3.835152E+00 5.128631E+00 6.632021E+00 8.407426E+00 + 2.799853E+00 3.885097E+00 5.181433E+00 6.680149E+00 8.465717E+00 + 2.853920E+00 3.943181E+00 5.232122E+00 6.736467E+00 8.519193E+00 + 2.917510E+00 4.004765E+00 5.289062E+00 6.798522E+00 8.573454E+00 + 2.987618E+00 4.075822E+00 5.361454E+00 6.874904E+00 8.641053E+00 + 3.060177E+00 4.151277E+00 5.432415E+00 6.949941E+00 8.715650E+00 + 3.138012E+00 4.232070E+00 5.521577E+00 7.031361E+00 8.806354E+00 + 3.228154E+00 4.321783E+00 5.613538E+00 7.127536E+00 8.897506E+00 + 3.329430E+00 4.430161E+00 5.721813E+00 7.241075E+00 9.021087E+00 + 3.472946E+00 4.569991E+00 5.868685E+00 7.394956E+00 9.195478E+00 + 3.678501E+00 4.803341E+00 6.120978E+00 7.670060E+00 9.488432E+00 + 3.969223E+00 5.107561E+00 6.458625E+00 8.070365E+00 9.880396E+00 + 4.276315E+00 5.455004E+00 6.840853E+00 8.503948E+00 1.035195E+01 + 4.627981E+00 5.849804E+00 7.251911E+00 8.969193E+00 1.085328E+01 + 5.007909E+00 6.242119E+00 7.713049E+00 9.459675E+00 1.136813E+01 + 5.414349E+00 6.689791E+00 8.192755E+00 9.959757E+00 1.194830E+01 + 5.854768E+00 7.160370E+00 8.726306E+00 1.051721E+01 1.251630E+01 + 6.346786E+00 7.700525E+00 9.304919E+00 1.114233E+01 1.320020E+01 + 6.870814E+00 8.270284E+00 9.939363E+00 1.178672E+01 1.391117E+01 + 7.456262E+00 8.916391E+00 1.062129E+01 1.249780E+01 1.465412E+01 + 8.127944E+00 9.622299E+00 1.135895E+01 1.327584E+01 1.547464E+01 + 8.858264E+00 1.040108E+01 1.216591E+01 1.412266E+01 1.637274E+01 + 9.640918E+00 1.120906E+01 1.301792E+01 1.503606E+01 1.731978E+01 + 1.039415E+01 1.200126E+01 1.384884E+01 1.587553E+01 1.824807E+01 + 1.105081E+01 1.265474E+01 1.448824E+01 1.656713E+01 1.893275E+01 + 1.167445E+01 1.324992E+01 1.508796E+01 1.713628E+01 1.950474E+01 + 1.233305E+01 1.390808E+01 1.565693E+01 1.774348E+01 2.009077E+01 + 1.308276E+01 1.464430E+01 1.636812E+01 1.840517E+01 2.079054E+01 + 1.405154E+01 1.551425E+01 1.722412E+01 1.926361E+01 2.160826E+01 + 1.514923E+01 1.655439E+01 1.827146E+01 2.025542E+01 2.255394E+01 + 1.646316E+01 1.783786E+01 1.949875E+01 2.149277E+01 2.377265E+01 + 1.796939E+01 1.937508E+01 2.099360E+01 2.299048E+01 2.529038E+01 + 1.978024E+01 2.119112E+01 2.279041E+01 2.469123E+01 2.705883E+01 + 2.180972E+01 2.333939E+01 2.496616E+01 2.682861E+01 2.920524E+01 + 2.430879E+01 2.574676E+01 2.741647E+01 2.946335E+01 3.191332E+01 + 2.719103E+01 2.866272E+01 3.045916E+01 3.248701E+01 3.505054E+01 + 3.056255E+01 3.210924E+01 3.395025E+01 3.616344E+01 3.871182E+01 + 3.446909E+01 3.613589E+01 3.819333E+01 4.044482E+01 4.311817E+01 + 3.919442E+01 4.096974E+01 4.313494E+01 4.563157E+01 4.840021E+01 + 4.487955E+01 4.656266E+01 4.885123E+01 5.152594E+01 5.458725E+01 + 5.162570E+01 5.323316E+01 5.538881E+01 5.833830E+01 6.151250E+01 + 5.959481E+01 6.099476E+01 6.302975E+01 6.592435E+01 6.942378E+01 + 6.845359E+01 6.984153E+01 7.184828E+01 7.471790E+01 7.815995E+01 + 7.907859E+01 8.012112E+01 8.205879E+01 8.454667E+01 8.830878E+01 + 9.095008E+01 9.198996E+01 9.390797E+01 9.651331E+01 1.003340E+02 + 1.048009E+02 1.062925E+02 1.080206E+02 1.105019E+02 1.135800E+02 + 1.204394E+02 1.223450E+02 1.240806E+02 1.265026E+02 1.292950E+02 + 1.368433E+02 1.391876E+02 1.415429E+02 1.439006E+02 1.466120E+02 + 1.551776E+02 1.582231E+02 1.611972E+02 1.640765E+02 1.669729E+02 + 1.760825E+02 1.787886E+02 1.827068E+02 1.856183E+02 1.886606E+02 + 1.959886E+02 1.995955E+02 2.035920E+02 2.071683E+02 2.102729E+02 + 2.171929E+02 2.215832E+02 2.254865E+02 2.294840E+02 2.333163E+02 + 2.391845E+02 2.435050E+02 2.482627E+02 2.518804E+02 2.566691E+02 + 2.621983E+02 2.672047E+02 2.719339E+02 2.763410E+02 2.811785E+02 + 2.882957E+02 2.936760E+02 2.989709E+02 3.040371E+02 3.086121E+02 + 3.169429E+02 3.226375E+02 3.282182E+02 3.338472E+02 3.383359E+02 + 3.492576E+02 3.547819E+02 3.607082E+02 3.659972E+02 3.716847E+02 + 3.874196E+02 3.924015E+02 3.990175E+02 4.051155E+02 4.107391E+02 + 4.238547E+02 4.294825E+02 4.346726E+02 4.406122E+02 4.465872E+02 + 5.119200E+02 6.761357E+02 8.666895E+02 1.101137E+03 1.400792E+03 + 5.138397E+02 6.803827E+02 8.700529E+02 1.104691E+03 1.403759E+03 + 5.156037E+02 6.824248E+02 8.723151E+02 1.107283E+03 1.406755E+03 + 5.178812E+02 6.844007E+02 8.746871E+02 1.113829E+03 1.408060E+03 + 5.196464E+02 6.877293E+02 8.772320E+02 1.117954E+03 1.410376E+03 + 5.231213E+02 6.883506E+02 8.801965E+02 1.123671E+03 1.413537E+03 + 5.265226E+02 6.906946E+02 8.827580E+02 1.126521E+03 1.416761E+03 + 5.297570E+02 6.932738E+02 8.866679E+02 1.130327E+03 1.420241E+03 + 5.345911E+02 6.969519E+02 8.901705E+02 1.134157E+03 1.424460E+03 + 5.436951E+02 7.036935E+02 8.976977E+02 1.137750E+03 1.430418E+03 + 5.595131E+02 7.244062E+02 9.186120E+02 1.164641E+03 1.463793E+03 + 5.922777E+02 7.534393E+02 9.537141E+02 1.216026E+03 1.504038E+03 + 6.181771E+02 7.863460E+02 9.939163E+02 1.280148E+03 1.556233E+03 + 6.541309E+02 8.290706E+02 1.039683E+03 1.333625E+03 1.598433E+03 + 6.874038E+02 8.649613E+02 1.085456E+03 1.381629E+03 1.638449E+03 + 7.239747E+02 9.047038E+02 1.135922E+03 1.422634E+03 1.684312E+03 + 7.658594E+02 9.456591E+02 1.193625E+03 1.476823E+03 1.724979E+03 + 8.135956E+02 9.974324E+02 1.260462E+03 1.533535E+03 1.769588E+03 + 8.568103E+02 1.049653E+03 1.322277E+03 1.582902E+03 1.811098E+03 + 9.128673E+02 1.118929E+03 1.380395E+03 1.633593E+03 1.857660E+03 + 9.745639E+02 1.184657E+03 1.444311E+03 1.685755E+03 1.914816E+03 + 1.051135E+03 1.276253E+03 1.506712E+03 1.740740E+03 1.968961E+03 + 1.129027E+03 1.345554E+03 1.568177E+03 1.789827E+03 2.025881E+03 + 1.189264E+03 1.403838E+03 1.621589E+03 1.829577E+03 2.067153E+03 + 1.240449E+03 1.453970E+03 1.645283E+03 1.851711E+03 2.077951E+03 + 1.284465E+03 1.483836E+03 1.665404E+03 1.865086E+03 2.083562E+03 + 1.329518E+03 1.522940E+03 1.685925E+03 1.872753E+03 2.078883E+03 + 1.372098E+03 1.554938E+03 1.724290E+03 1.888217E+03 2.088606E+03 + 1.430009E+03 1.605675E+03 1.759180E+03 1.928589E+03 2.114678E+03 + 1.484486E+03 1.649242E+03 1.810601E+03 1.969562E+03 2.130092E+03 + 1.561696E+03 1.715792E+03 1.863856E+03 2.023091E+03 2.174002E+03 + 1.643201E+03 1.800486E+03 1.929314E+03 2.087677E+03 2.225022E+03 + 1.731658E+03 1.880452E+03 2.006925E+03 2.144908E+03 2.292744E+03 + 1.832718E+03 1.975268E+03 2.128104E+03 2.228470E+03 2.365243E+03 + 1.972427E+03 2.060706E+03 2.198907E+03 2.338210E+03 2.466561E+03 + 2.100499E+03 2.198261E+03 2.305850E+03 2.439826E+03 2.564459E+03 + 2.236202E+03 2.343996E+03 2.440045E+03 2.556084E+03 2.685652E+03 + 2.388475E+03 2.476460E+03 2.588356E+03 2.695349E+03 2.814246E+03 + 2.567477E+03 2.620318E+03 2.740351E+03 2.847159E+03 2.943308E+03 + 2.753895E+03 2.782703E+03 2.867915E+03 2.958143E+03 3.079071E+03 + 2.956635E+03 2.962176E+03 3.010365E+03 3.103690E+03 3.208398E+03 + 3.201951E+03 3.176764E+03 3.196702E+03 3.262238E+03 3.364792E+03 + 3.487656E+03 3.399463E+03 3.412958E+03 3.474729E+03 3.571030E+03 + 3.847314E+03 3.684983E+03 3.648552E+03 3.673622E+03 3.805694E+03 + 4.277125E+03 4.088034E+03 3.970748E+03 4.026325E+03 4.073375E+03 + 4.825416E+03 4.628351E+03 4.459882E+03 4.381821E+03 4.428799E+03 + 5.317697E+03 5.170333E+03 5.023391E+03 4.847141E+03 4.778470E+03 + 5.572778E+03 5.458361E+03 5.323386E+03 5.152613E+03 5.030836E+03 + 5.690912E+03 5.642704E+03 5.530222E+03 5.381758E+03 5.236886E+03 + 5.769621E+03 5.688719E+03 5.603567E+03 5.500483E+03 5.352647E+03 + 5.682899E+03 5.641377E+03 5.560852E+03 5.480480E+03 5.363165E+03 + 5.552637E+03 5.498117E+03 5.433623E+03 5.343359E+03 5.236059E+03 + 5.320417E+03 5.273869E+03 5.220937E+03 5.125498E+03 5.025618E+03 + 5.107867E+03 5.051770E+03 4.975148E+03 4.888841E+03 4.790519E+03 + 4.897357E+03 4.847912E+03 4.782340E+03 4.698115E+03 4.601304E+03 + 4.615630E+03 4.572174E+03 4.514133E+03 4.441375E+03 4.353127E+03 + 4.284763E+03 4.245272E+03 4.191600E+03 4.129165E+03 4.052161E+03 + 3.929487E+03 3.892659E+03 3.842900E+03 3.786192E+03 3.719803E+03 + 3.654037E+03 3.618655E+03 3.572564E+03 3.520846E+03 3.461359E+03 + 7.412659E+04 8.664671E+04 8.908810E+04 9.203134E+04 9.270016E+04 + 7.426391E+04 8.674314E+04 8.914534E+04 9.205045E+04 9.269359E+04 + 7.440217E+04 8.683969E+04 8.920230E+04 9.206907E+04 9.268650E+04 + 7.454141E+04 8.693621E+04 8.925860E+04 9.208674E+04 9.267839E+04 + 7.468615E+04 8.703599E+04 8.931631E+04 9.210435E+04 9.266937E+04 + 7.746344E+04 8.713359E+04 8.937212E+04 9.212068E+04 9.265972E+04 + 7.761793E+04 8.723176E+04 8.942738E+04 9.213575E+04 9.264872E+04 + 7.778418E+04 8.733654E+04 8.948568E+04 9.215099E+04 9.263605E+04 + 7.798725E+04 8.746448E+04 8.955676E+04 9.216925E+04 9.262009E+04 + 7.843540E+04 8.775310E+04 8.972182E+04 9.226754E+04 9.258635E+04 + 7.941323E+04 8.838595E+04 9.008517E+04 9.238683E+04 9.250359E+04 + 8.371918E+04 8.751406E+04 9.057969E+04 9.252663E+04 9.235005E+04 + 8.521037E+04 8.844908E+04 9.104771E+04 9.262187E+04 9.213815E+04 + 8.662649E+04 8.777227E+04 9.145052E+04 9.265800E+04 9.187276E+04 + 8.605580E+04 8.862524E+04 9.178151E+04 9.263131E+04 9.010960E+04 + 8.731324E+04 8.937330E+04 9.208101E+04 9.254167E+04 8.978727E+04 + 8.848205E+04 9.004082E+04 9.229901E+04 9.238602E+04 8.940824E+04 + 8.778960E+04 9.061797E+04 9.243749E+04 9.216111E+04 8.908019E+04 + 8.721672E+04 9.109031E+04 9.249125E+04 9.186920E+04 8.862898E+04 + 8.818031E+04 9.146055E+04 9.245915E+04 9.007127E+04 8.695785E+04 + 8.903179E+04 9.180481E+04 9.233669E+04 8.968268E+04 8.642871E+04 + 8.974449E+04 9.201171E+04 9.212052E+04 8.922099E+04 8.473755E+04 + 9.029107E+04 9.209490E+04 9.181666E+04 8.878278E+04 8.415800E+04 + 9.056302E+04 9.204453E+04 9.149821E+04 8.835743E+04 8.366743E+04 + 9.051373E+04 9.188896E+04 8.989522E+04 8.817682E+04 8.347785E+04 + 8.864142E+04 9.165912E+04 8.978421E+04 8.814581E+04 8.345879E+04 + 8.821828E+04 9.134926E+04 8.964411E+04 8.812088E+04 8.350245E+04 + 8.915034E+04 9.094160E+04 8.941976E+04 8.804162E+04 8.350650E+04 + 9.025717E+04 9.042213E+04 8.912021E+04 8.663216E+04 8.449607E+04 + 8.981527E+04 8.838425E+04 8.868488E+04 8.635368E+04 8.431800E+04 + 8.924792E+04 8.906569E+04 8.807599E+04 8.591214E+04 8.294281E+04 + 8.715103E+04 8.969339E+04 8.724208E+04 8.525767E+04 8.247470E+04 + 8.510446E+04 8.742815E+04 8.503865E+04 8.333392E+04 8.176313E+04 + 8.464795E+04 8.506006E+04 8.506742E+04 8.220583E+04 7.980991E+04 + 8.289037E+04 8.178835E+04 8.150748E+04 7.879948E+04 7.763394E+04 + 8.105459E+04 8.081460E+04 7.751349E+04 7.656457E+04 7.535675E+04 + 7.796330E+04 7.855789E+04 7.612258E+04 7.431670E+04 7.216144E+04 + 7.399410E+04 7.360281E+04 7.281765E+04 7.176302E+04 6.962370E+04 + 7.145660E+04 7.022549E+04 7.003886E+04 6.761858E+04 6.631871E+04 + 6.545911E+04 6.504078E+04 6.380337E+04 6.319004E+04 6.193772E+04 + 6.129000E+04 6.044731E+04 6.022011E+04 5.915888E+04 5.879705E+04 + 5.789371E+04 5.701945E+04 5.643101E+04 5.557952E+04 5.457475E+04 + 5.460599E+04 5.415053E+04 5.339828E+04 5.276251E+04 5.190766E+04 + 5.060668E+04 5.064756E+04 5.005560E+04 4.935511E+04 4.856362E+04 + 4.613002E+04 4.647898E+04 4.621806E+04 4.552298E+04 4.472807E+04 + 4.127028E+04 4.191476E+04 4.187497E+04 4.144951E+04 4.072903E+04 + 3.651024E+04 3.715361E+04 3.732644E+04 3.709842E+04 3.666343E+04 + 3.191749E+04 3.253186E+04 3.277405E+04 3.276168E+04 3.251444E+04 + 2.772112E+04 2.826504E+04 2.855157E+04 2.856337E+04 2.842033E+04 + 2.382484E+04 2.436156E+04 2.464295E+04 2.470638E+04 2.459915E+04 + 2.044794E+04 2.087884E+04 2.114178E+04 2.121163E+04 2.113160E+04 + 1.747382E+04 1.781292E+04 1.802048E+04 1.806819E+04 1.800351E+04 + 1.485912E+04 1.510619E+04 1.525269E+04 1.528184E+04 1.521777E+04 + 1.257532E+04 1.275218E+04 1.284435E+04 1.284233E+04 1.278837E+04 + 1.061717E+04 1.073109E+04 1.078490E+04 1.075804E+04 1.069064E+04 + 8.942344E+03 9.014403E+03 9.037153E+03 9.002594E+03 8.932297E+03 + 7.519506E+03 7.562673E+03 7.565279E+03 7.524328E+03 7.454070E+03 + 6.326642E+03 6.342367E+03 6.327444E+03 6.287690E+03 6.220536E+03 + 5.552382E+03 5.554692E+03 5.529509E+03 5.486622E+03 5.425146E+03 + +Band: 6, gas: 5, k-terms: 4 + 1.244138E-02 2.170710E-02 3.532671E-02 5.378500E-02 7.736578E-02 + 1.266398E-02 2.196292E-02 3.563337E-02 5.414406E-02 7.779305E-02 + 1.288676E-02 2.227727E-02 3.598793E-02 5.454981E-02 7.823464E-02 + 1.315140E-02 2.259299E-02 3.633902E-02 5.496365E-02 7.871222E-02 + 1.343345E-02 2.295761E-02 3.677725E-02 5.543772E-02 7.921885E-02 + 1.372196E-02 2.333575E-02 3.723723E-02 5.594807E-02 7.974350E-02 + 1.406274E-02 2.375070E-02 3.772501E-02 5.652643E-02 8.034791E-02 + 1.445066E-02 2.420193E-02 3.825842E-02 5.708913E-02 8.091300E-02 + 1.489828E-02 2.475225E-02 3.890148E-02 5.786065E-02 8.171866E-02 + 1.556355E-02 2.564219E-02 4.000451E-02 5.915803E-02 8.322430E-02 + 1.680069E-02 2.730077E-02 4.212044E-02 6.178630E-02 8.633790E-02 + 1.853653E-02 2.973550E-02 4.521296E-02 6.557926E-02 9.092920E-02 + 2.058237E-02 3.256241E-02 4.879876E-02 7.010149E-02 9.635621E-02 + 2.288404E-02 3.558527E-02 5.283961E-02 7.475135E-02 1.019161E-01 + 2.548266E-02 3.896247E-02 5.711740E-02 7.991105E-02 1.079483E-01 + 2.832263E-02 4.259036E-02 6.165822E-02 8.529809E-02 1.141987E-01 + 3.145395E-02 4.664161E-02 6.664677E-02 9.115223E-02 1.210952E-01 + 3.488739E-02 5.102436E-02 7.194653E-02 9.756699E-02 1.283974E-01 + 3.870736E-02 5.583524E-02 7.769514E-02 1.042930E-01 1.359795E-01 + 4.298112E-02 6.107145E-02 8.392372E-02 1.116020E-01 1.439996E-01 + 4.775950E-02 6.687839E-02 9.048615E-02 1.194941E-01 1.527132E-01 + 5.303991E-02 7.322245E-02 9.790238E-02 1.277484E-01 1.618101E-01 + 5.861054E-02 7.983715E-02 1.056749E-01 1.363699E-01 1.713629E-01 + 6.372804E-02 8.556383E-02 1.122216E-01 1.435023E-01 1.791717E-01 + 6.654298E-02 8.859582E-02 1.154905E-01 1.468176E-01 1.825679E-01 + 6.801174E-02 8.979459E-02 1.165169E-01 1.476485E-01 1.831950E-01 + 6.909219E-02 9.083348E-02 1.172076E-01 1.477394E-01 1.832885E-01 + 7.047775E-02 9.164457E-02 1.179035E-01 1.480583E-01 1.827954E-01 + 7.252309E-02 9.327914E-02 1.191896E-01 1.491025E-01 1.834905E-01 + 7.527616E-02 9.569847E-02 1.210794E-01 1.509371E-01 1.848269E-01 + 7.892780E-02 9.888649E-02 1.237702E-01 1.533612E-01 1.871295E-01 + 8.355795E-02 1.032955E-01 1.279477E-01 1.571034E-01 1.904504E-01 + 8.958094E-02 1.089841E-01 1.334899E-01 1.624975E-01 1.952948E-01 + 9.654023E-02 1.159921E-01 1.402039E-01 1.690628E-01 2.022472E-01 + 1.051091E-01 1.245009E-01 1.486349E-01 1.772089E-01 2.103509E-01 + 1.153629E-01 1.347422E-01 1.583397E-01 1.872652E-01 2.203560E-01 + 1.273921E-01 1.465769E-01 1.703307E-01 1.988503E-01 2.321225E-01 + 1.414793E-01 1.606842E-01 1.842193E-01 2.123999E-01 2.456361E-01 + 1.576086E-01 1.772256E-01 2.005430E-01 2.284336E-01 2.617031E-01 + 1.761318E-01 1.960577E-01 2.193503E-01 2.476053E-01 2.799717E-01 + 1.976824E-01 2.179757E-01 2.414371E-01 2.696103E-01 3.025901E-01 + 2.219834E-01 2.430087E-01 2.667641E-01 2.949887E-01 3.279426E-01 + 2.493017E-01 2.709820E-01 2.944811E-01 3.235723E-01 3.566269E-01 + 2.796777E-01 3.019184E-01 3.258232E-01 3.543442E-01 3.880309E-01 + 3.132707E-01 3.360891E-01 3.603623E-01 3.886038E-01 4.222866E-01 + 3.502119E-01 3.733826E-01 3.980213E-01 4.262302E-01 4.603331E-01 + 3.908875E-01 4.146682E-01 4.403737E-01 4.693483E-01 5.032828E-01 + 4.345668E-01 4.596880E-01 4.859217E-01 5.153075E-01 5.495281E-01 + 4.824679E-01 5.073229E-01 5.335727E-01 5.645376E-01 5.992945E-01 + 5.340271E-01 5.601764E-01 5.869760E-01 6.180499E-01 6.531031E-01 + 5.943050E-01 6.208684E-01 6.485782E-01 6.806807E-01 7.179718E-01 + 6.607124E-01 6.884217E-01 7.171235E-01 7.509089E-01 7.897748E-01 + 7.308789E-01 7.599009E-01 7.903203E-01 8.262363E-01 8.663323E-01 + 8.046728E-01 8.353467E-01 8.676186E-01 9.054008E-01 9.473120E-01 + 8.823556E-01 9.151999E-01 9.503593E-01 9.894012E-01 1.034285E+00 + 9.655700E-01 9.994302E-01 1.035923E+00 1.077740E+00 1.124908E+00 + 1.052167E+00 1.088399E+00 1.127073E+00 1.170854E+00 1.218860E+00 + 1.141772E+00 1.179380E+00 1.218368E+00 1.263615E+00 1.312752E+00 + 1.207376E+00 1.246486E+00 1.286816E+00 1.332491E+00 1.381929E+00 + 4.993244E+00 6.410403E+00 8.007359E+00 9.863860E+00 1.205284E+01 + 5.021144E+00 6.431881E+00 8.033376E+00 9.893488E+00 1.208427E+01 + 5.045284E+00 6.463195E+00 8.067808E+00 9.926198E+00 1.211946E+01 + 5.079460E+00 6.493841E+00 8.095493E+00 9.954932E+00 1.215474E+01 + 5.116500E+00 6.531369E+00 8.133329E+00 9.991203E+00 1.219118E+01 + 5.151032E+00 6.566559E+00 8.170987E+00 1.003053E+01 1.222754E+01 + 5.193287E+00 6.606983E+00 8.209115E+00 1.007531E+01 1.227294E+01 + 5.246162E+00 6.650144E+00 8.252590E+00 1.011199E+01 1.230464E+01 + 5.307103E+00 6.708626E+00 8.304226E+00 1.017055E+01 1.236344E+01 + 5.399315E+00 6.804040E+00 8.401096E+00 1.027453E+01 1.247774E+01 + 5.581370E+00 6.991443E+00 8.608345E+00 1.050679E+01 1.272894E+01 + 5.831295E+00 7.262952E+00 8.905440E+00 1.084059E+01 1.312596E+01 + 6.111787E+00 7.576345E+00 9.242394E+00 1.123892E+01 1.360205E+01 + 6.413667E+00 7.894915E+00 9.621800E+00 1.163828E+01 1.407688E+01 + 6.743462E+00 8.237655E+00 1.001216E+01 1.208292E+01 1.459871E+01 + 7.082608E+00 8.602324E+00 1.042450E+01 1.253140E+01 1.512048E+01 + 7.440889E+00 9.010178E+00 1.086512E+01 1.302002E+01 1.572555E+01 + 7.822960E+00 9.431893E+00 1.132935E+01 1.357454E+01 1.635412E+01 + 8.234440E+00 9.891581E+00 1.183085E+01 1.414267E+01 1.700292E+01 + 8.676376E+00 1.037971E+01 1.236731E+01 1.478762E+01 1.769829E+01 + 9.167246E+00 1.090389E+01 1.292037E+01 1.546022E+01 1.844851E+01 + 9.695024E+00 1.148380E+01 1.355871E+01 1.617489E+01 1.926577E+01 + 1.023479E+01 1.206841E+01 1.423787E+01 1.691146E+01 2.010810E+01 + 1.074644E+01 1.258594E+01 1.481152E+01 1.753271E+01 2.080138E+01 + 1.105883E+01 1.288518E+01 1.510967E+01 1.781777E+01 2.107396E+01 + 1.125838E+01 1.305484E+01 1.523735E+01 1.789618E+01 2.110073E+01 + 1.143058E+01 1.322999E+01 1.536415E+01 1.792854E+01 2.111866E+01 + 1.163565E+01 1.340003E+01 1.551559E+01 1.800605E+01 2.107088E+01 + 1.189881E+01 1.364262E+01 1.571780E+01 1.817415E+01 2.120374E+01 + 1.223064E+01 1.395768E+01 1.599659E+01 1.843608E+01 2.137071E+01 + 1.267367E+01 1.434394E+01 1.635519E+01 1.874265E+01 2.166517E+01 + 1.318824E+01 1.486321E+01 1.686726E+01 1.922949E+01 2.207063E+01 + 1.384869E+01 1.549443E+01 1.751173E+01 1.986687E+01 2.264491E+01 + 1.455475E+01 1.622037E+01 1.825733E+01 2.065187E+01 2.343597E+01 + 1.548797E+01 1.715217E+01 1.917938E+01 2.154206E+01 2.435828E+01 + 1.658405E+01 1.825709E+01 2.023714E+01 2.268655E+01 2.548406E+01 + 1.783911E+01 1.950379E+01 2.152625E+01 2.396741E+01 2.688076E+01 + 1.936009E+01 2.103366E+01 2.304781E+01 2.547974E+01 2.842584E+01 + 2.103012E+01 2.288675E+01 2.489277E+01 2.725521E+01 3.028321E+01 + 2.300493E+01 2.498918E+01 2.702826E+01 2.950178E+01 3.233746E+01 + 2.531142E+01 2.737455E+01 2.952437E+01 3.203360E+01 3.500040E+01 + 2.791348E+01 3.023963E+01 3.251436E+01 3.506373E+01 3.800616E+01 + 3.093798E+01 3.343723E+01 3.572266E+01 3.853503E+01 4.147180E+01 + 3.432132E+01 3.700263E+01 3.949508E+01 4.215307E+01 4.529227E+01 + 3.808810E+01 4.095528E+01 4.362458E+01 4.635209E+01 4.941625E+01 + 4.221005E+01 4.524852E+01 4.804660E+01 5.090844E+01 5.411546E+01 + 4.683663E+01 4.996214E+01 5.310361E+01 5.625336E+01 5.958161E+01 + 5.163318E+01 5.515470E+01 5.850736E+01 6.184763E+01 6.534175E+01 + 5.702379E+01 6.054548E+01 6.401146E+01 6.800057E+01 7.170883E+01 + 6.278355E+01 6.673345E+01 7.056805E+01 7.459510E+01 7.839903E+01 + 6.996522E+01 7.405354E+01 7.827135E+01 8.232558E+01 8.668638E+01 + 7.818468E+01 8.266994E+01 8.689497E+01 9.136711E+01 9.571341E+01 + 8.700063E+01 9.184696E+01 9.624308E+01 1.010941E+02 1.055505E+02 + 9.655503E+01 1.016484E+02 1.062655E+02 1.112632E+02 1.158827E+02 + 1.067906E+02 1.125002E+02 1.178669E+02 1.228138E+02 1.284000E+02 + 1.188502E+02 1.246431E+02 1.303337E+02 1.361506E+02 1.422475E+02 + 1.325489E+02 1.393486E+02 1.455260E+02 1.523010E+02 1.587897E+02 + 1.489925E+02 1.564217E+02 1.620330E+02 1.694004E+02 1.761644E+02 + 1.610893E+02 1.693586E+02 1.756835E+02 1.825942E+02 1.896888E+02 + 2.201500E+02 2.803701E+02 3.394190E+02 4.042578E+02 4.724637E+02 + 2.211316E+02 2.808113E+02 3.404319E+02 4.055230E+02 4.728596E+02 + 2.215838E+02 2.814490E+02 3.420166E+02 4.064208E+02 4.741055E+02 + 2.224484E+02 2.823854E+02 3.429697E+02 4.068620E+02 4.747621E+02 + 2.235673E+02 2.834647E+02 3.438759E+02 4.077383E+02 4.755660E+02 + 2.244105E+02 2.842306E+02 3.446689E+02 4.087378E+02 4.764365E+02 + 2.251266E+02 2.851990E+02 3.453387E+02 4.096088E+02 4.777365E+02 + 2.265152E+02 2.860556E+02 3.466153E+02 4.105414E+02 4.785847E+02 + 2.279298E+02 2.875773E+02 3.475841E+02 4.115613E+02 4.802400E+02 + 2.304947E+02 2.898238E+02 3.495357E+02 4.143346E+02 4.825307E+02 + 2.364543E+02 2.949174E+02 3.564084E+02 4.216675E+02 4.873530E+02 + 2.453863E+02 3.030242E+02 3.660765E+02 4.326460E+02 4.993871E+02 + 2.552063E+02 3.133558E+02 3.761564E+02 4.431330E+02 5.117380E+02 + 2.655542E+02 3.247774E+02 3.871588E+02 4.550281E+02 5.246300E+02 + 2.769046E+02 3.351105E+02 3.985616E+02 4.670893E+02 5.381676E+02 + 2.867219E+02 3.460071E+02 4.112534E+02 4.775843E+02 5.488583E+02 + 2.971657E+02 3.587266E+02 4.230060E+02 4.887243E+02 5.637394E+02 + 3.093424E+02 3.709803E+02 4.363575E+02 5.033068E+02 5.772269E+02 + 3.217681E+02 3.838962E+02 4.492389E+02 5.163229E+02 5.910010E+02 + 3.339675E+02 3.969205E+02 4.618304E+02 5.345556E+02 6.081659E+02 + 3.475428E+02 4.097023E+02 4.762814E+02 5.485009E+02 6.221388E+02 + 3.607836E+02 4.244632E+02 4.892194E+02 5.647688E+02 6.436291E+02 + 3.731998E+02 4.381150E+02 5.041904E+02 5.772361E+02 6.573270E+02 + 3.862062E+02 4.503060E+02 5.163042E+02 5.915173E+02 6.705711E+02 + 3.929672E+02 4.536544E+02 5.184341E+02 5.933782E+02 6.710725E+02 + 3.927133E+02 4.551294E+02 5.171345E+02 5.895940E+02 6.663647E+02 + 3.960651E+02 4.528396E+02 5.153928E+02 5.860608E+02 6.608868E+02 + 3.989533E+02 4.560346E+02 5.182809E+02 5.828765E+02 6.558518E+02 + 4.047198E+02 4.580607E+02 5.175966E+02 5.823581E+02 6.555801E+02 + 4.128008E+02 4.645409E+02 5.209402E+02 5.841588E+02 6.542590E+02 + 4.284732E+02 4.753558E+02 5.294386E+02 5.862916E+02 6.576358E+02 + 4.458009E+02 4.933801E+02 5.401966E+02 5.984469E+02 6.658373E+02 + 4.665087E+02 5.121257E+02 5.581111E+02 6.091216E+02 6.791574E+02 + 4.908075E+02 5.314338E+02 5.811806E+02 6.349767E+02 6.909274E+02 + 5.288728E+02 5.666469E+02 6.087496E+02 6.590471E+02 7.132072E+02 + 5.699357E+02 6.044284E+02 6.463315E+02 6.949571E+02 7.444081E+02 + 6.161256E+02 6.486786E+02 6.843375E+02 7.336681E+02 7.888871E+02 + 6.748794E+02 7.006281E+02 7.344112E+02 7.813876E+02 8.359642E+02 + 7.353789E+02 7.659727E+02 8.011218E+02 8.371872E+02 8.878470E+02 + 8.061545E+02 8.423546E+02 8.791750E+02 9.125924E+02 9.557736E+02 + 8.883644E+02 9.174377E+02 9.546895E+02 9.924756E+02 1.035559E+03 + 9.826185E+02 1.015198E+03 1.055729E+03 1.094113E+03 1.139532E+03 + 1.092803E+03 1.122709E+03 1.165402E+03 1.206746E+03 1.250364E+03 + 1.220356E+03 1.245744E+03 1.289039E+03 1.319643E+03 1.368786E+03 + 1.352831E+03 1.373846E+03 1.423016E+03 1.459550E+03 1.484324E+03 + 1.493316E+03 1.519905E+03 1.552495E+03 1.600149E+03 1.617205E+03 + 1.642935E+03 1.658444E+03 1.675597E+03 1.719780E+03 1.746542E+03 + 1.769344E+03 1.795768E+03 1.803243E+03 1.824346E+03 1.853874E+03 + 1.876819E+03 1.898870E+03 1.912204E+03 1.929136E+03 1.942448E+03 + 1.964467E+03 1.983580E+03 1.998811E+03 2.005960E+03 2.003837E+03 + 2.041000E+03 2.051806E+03 2.071452E+03 2.053873E+03 2.052851E+03 + 2.091958E+03 2.088829E+03 2.094599E+03 2.095326E+03 2.079958E+03 + 2.116600E+03 2.113298E+03 2.099212E+03 2.092908E+03 2.084938E+03 + 2.117322E+03 2.101689E+03 2.082835E+03 2.062603E+03 2.040541E+03 + 2.093521E+03 2.070997E+03 2.037584E+03 2.010546E+03 1.986054E+03 + 2.036491E+03 2.005423E+03 1.975598E+03 1.942846E+03 1.912004E+03 + 1.976197E+03 1.946142E+03 1.903674E+03 1.873769E+03 1.844047E+03 + 1.915610E+03 1.887837E+03 1.836043E+03 1.804361E+03 1.770161E+03 + 1.857966E+03 1.836223E+03 1.792021E+03 1.750583E+03 1.716426E+03 + 1.509846E+04 1.683703E+04 1.776676E+04 1.825407E+04 1.824705E+04 + 1.522680E+04 1.685365E+04 1.777493E+04 1.825614E+04 1.824466E+04 + 1.525559E+04 1.687017E+04 1.778301E+04 1.825812E+04 1.824331E+04 + 1.528416E+04 1.688648E+04 1.779090E+04 1.825992E+04 1.824076E+04 + 1.531353E+04 1.690318E+04 1.779360E+04 1.826167E+04 1.823803E+04 + 1.534195E+04 1.691927E+04 1.780137E+04 1.826323E+04 1.823525E+04 + 1.537022E+04 1.693515E+04 1.780894E+04 1.826459E+04 1.823228E+04 + 1.540016E+04 1.695189E+04 1.781682E+04 1.826589E+04 1.822898E+04 + 1.543688E+04 1.697239E+04 1.782644E+04 1.826741E+04 1.822486E+04 + 1.552368E+04 1.702109E+04 1.784961E+04 1.827145E+04 1.821553E+04 + 1.571982E+04 1.702358E+04 1.790093E+04 1.827992E+04 1.819283E+04 + 1.588265E+04 1.717870E+04 1.796902E+04 1.828631E+04 1.815381E+04 + 1.616721E+04 1.733072E+04 1.803441E+04 1.827868E+04 1.817245E+04 + 1.643525E+04 1.755489E+04 1.817512E+04 1.826932E+04 1.811311E+04 + 1.668421E+04 1.768001E+04 1.821797E+04 1.824913E+04 1.798191E+04 + 1.690670E+04 1.778516E+04 1.824695E+04 1.821993E+04 1.790943E+04 + 1.711069E+04 1.788188E+04 1.826306E+04 1.817963E+04 1.782780E+04 + 1.727983E+04 1.796211E+04 1.826709E+04 1.819716E+04 1.773517E+04 + 1.744205E+04 1.802955E+04 1.825349E+04 1.813494E+04 1.763961E+04 + 1.767518E+04 1.808130E+04 1.823465E+04 1.806211E+04 1.759331E+04 + 1.779933E+04 1.820095E+04 1.827221E+04 1.797802E+04 1.747636E+04 + 1.789939E+04 1.821845E+04 1.822492E+04 1.788478E+04 1.735539E+04 + 1.789263E+04 1.829650E+04 1.816626E+04 1.778538E+04 1.717445E+04 + 1.801766E+04 1.828124E+04 1.811278E+04 1.777092E+04 1.708313E+04 + 1.799900E+04 1.826113E+04 1.809302E+04 1.775287E+04 1.706680E+04 + 1.785548E+04 1.823535E+04 1.809391E+04 1.776890E+04 1.715937E+04 + 1.786065E+04 1.812198E+04 1.809479E+04 1.780001E+04 1.720573E+04 + 1.775853E+04 1.807356E+04 1.824129E+04 1.782794E+04 1.725861E+04 + 1.783932E+04 1.801132E+04 1.822359E+04 1.791407E+04 1.729686E+04 + 1.772943E+04 1.801527E+04 1.811546E+04 1.790977E+04 1.743841E+04 + 1.778665E+04 1.792865E+04 1.806217E+04 1.789237E+04 1.744776E+04 + 1.774747E+04 1.807053E+04 1.791390E+04 1.786132E+04 1.743060E+04 + 1.759670E+04 1.803395E+04 1.796907E+04 1.772883E+04 1.745313E+04 + 1.754353E+04 1.789717E+04 1.800982E+04 1.770095E+04 1.731514E+04 + 1.739509E+04 1.791024E+04 1.793256E+04 1.771374E+04 1.716335E+04 + 1.723115E+04 1.756473E+04 1.774380E+04 1.762152E+04 1.715901E+04 + 1.722109E+04 1.752884E+04 1.753848E+04 1.742183E+04 1.703837E+04 + 1.691314E+04 1.735887E+04 1.729758E+04 1.703866E+04 1.687333E+04 + 1.677036E+04 1.700712E+04 1.707526E+04 1.680729E+04 1.641432E+04 + 1.629990E+04 1.659920E+04 1.665590E+04 1.645428E+04 1.600696E+04 + 1.595816E+04 1.614564E+04 1.603526E+04 1.586884E+04 1.552042E+04 + 1.563442E+04 1.560655E+04 1.554819E+04 1.532740E+04 1.504811E+04 + 1.513113E+04 1.503849E+04 1.488680E+04 1.467494E+04 1.442173E+04 + 1.463346E+04 1.443314E+04 1.420331E+04 1.388377E+04 1.361881E+04 + 1.391803E+04 1.366960E+04 1.352493E+04 1.318496E+04 1.277711E+04 + 1.321791E+04 1.294367E+04 1.268824E+04 1.244605E+04 1.206547E+04 + 1.239111E+04 1.212009E+04 1.181984E+04 1.163899E+04 1.133528E+04 + 1.153312E+04 1.137658E+04 1.103231E+04 1.076178E+04 1.055213E+04 + 1.081328E+04 1.048894E+04 1.022814E+04 9.983416E+03 9.784340E+03 + 1.003062E+04 9.693993E+03 9.440996E+03 9.223062E+03 9.034115E+03 + 9.241266E+03 8.929592E+03 8.717166E+03 8.451607E+03 8.289646E+03 + 8.494751E+03 8.200556E+03 7.991119E+03 7.787181E+03 7.619742E+03 + 7.895342E+03 7.646896E+03 7.410023E+03 7.192597E+03 7.041852E+03 + 7.297540E+03 7.076956E+03 6.863177E+03 6.654852E+03 6.484556E+03 + 6.750553E+03 6.544073E+03 6.315836E+03 6.135344E+03 5.975966E+03 + 6.210324E+03 6.019062E+03 5.835962E+03 5.676298E+03 5.529828E+03 + 5.770121E+03 5.584543E+03 5.412715E+03 5.257218E+03 5.115330E+03 + 5.350084E+03 5.175276E+03 5.008679E+03 4.860925E+03 4.721080E+03 + 5.046921E+03 4.879001E+03 4.719512E+03 4.580593E+03 4.449316E+03 + +Band: 6, gas: 7, k-terms: 1 + 4.559271E-01 5.144173E-01 5.715185E-01 6.265536E-01 6.789739E-01 + 4.570161E-01 5.154424E-01 5.724820E-01 6.274559E-01 6.798145E-01 + 4.581777E-01 5.165293E-01 5.734989E-01 6.284049E-01 6.806964E-01 + 4.594245E-01 5.176886E-01 5.745780E-01 6.294081E-01 6.816259E-01 + 4.608012E-01 5.189617E-01 5.757579E-01 6.305016E-01 6.826365E-01 + 4.622832E-01 5.203218E-01 5.770111E-01 6.316574E-01 6.837010E-01 + 4.639190E-01 5.218133E-01 5.783780E-01 6.329128E-01 6.848535E-01 + 4.657893E-01 5.235118E-01 5.799293E-01 6.343338E-01 6.861553E-01 + 4.680721E-01 5.255882E-01 5.818281E-01 6.360744E-01 6.877508E-01 + 4.720072E-01 5.292597E-01 5.852527E-01 6.392617E-01 6.907052E-01 + 4.794124E-01 5.363137E-01 5.919345E-01 6.455513E-01 6.965822E-01 + 4.899674E-01 5.464262E-01 6.015515E-01 6.546269E-01 7.050746E-01 + 5.016768E-01 5.576240E-01 6.121821E-01 6.646418E-01 7.144293E-01 + 5.140657E-01 5.694348E-01 6.233643E-01 6.751504E-01 7.242219E-01 + 5.271514E-01 5.818712E-01 6.351063E-01 6.861577E-01 7.344544E-01 + 5.407206E-01 5.947201E-01 6.471995E-01 6.974627E-01 7.449278E-01 + 5.551874E-01 6.083845E-01 6.600302E-01 7.094300E-01 7.559844E-01 + 5.705943E-01 6.229033E-01 6.736328E-01 7.220901E-01 7.676593E-01 + 5.868641E-01 6.381980E-01 6.879297E-01 7.353678E-01 7.798825E-01 + 6.042159E-01 6.544823E-01 7.031253E-01 7.494559E-01 7.928344E-01 + 6.229082E-01 6.720071E-01 7.194602E-01 7.645812E-01 8.067287E-01 + 6.428603E-01 6.906948E-01 7.368610E-01 7.806698E-01 8.215061E-01 + 6.638527E-01 7.103365E-01 7.551318E-01 7.975431E-01 8.369552E-01 + 6.838259E-01 7.289398E-01 7.723803E-01 8.134504E-01 8.514331E-01 + 6.998731E-01 7.436937E-01 7.859421E-01 8.259205E-01 8.628356E-01 + 7.145728E-01 7.571085E-01 7.982236E-01 8.372236E-01 8.732492E-01 + 7.307785E-01 7.719758E-01 8.119099E-01 8.498836E-01 8.850023E-01 + 7.495250E-01 7.893380E-01 8.280321E-01 8.649031E-01 8.990416E-01 + 7.716031E-01 8.100145E-01 8.474215E-01 8.831171E-01 9.161629E-01 + 7.971580E-01 8.341952E-01 8.703109E-01 9.047952E-01 9.366619E-01 + 8.261560E-01 8.618907E-01 8.967580E-01 9.300418E-01 9.606849E-01 + 8.586035E-01 8.931526E-01 9.268528E-01 9.589857E-01 9.883912E-01 + 8.943656E-01 9.278886E-01 9.605454E-01 9.916152E-01 1.019800E+00 + 9.330770E-01 9.657642E-01 9.975378E-01 1.027570E+00 1.054704E+00 + 9.741847E-01 1.006256E+00 1.037336E+00 1.066408E+00 1.092694E+00 + 1.017160E+00 1.048855E+00 1.079454E+00 1.107737E+00 1.133338E+00 + 1.060682E+00 1.092498E+00 1.123067E+00 1.150922E+00 1.176024E+00 + 1.104677E+00 1.136611E+00 1.167155E+00 1.195372E+00 1.220163E+00 + 1.148888E+00 1.181167E+00 1.211879E+00 1.240419E+00 1.265267E+00 + 1.192924E+00 1.225750E+00 1.256793E+00 1.285510E+00 1.310805E+00 + 1.236542E+00 1.270070E+00 1.301561E+00 1.330544E+00 1.356312E+00 + 1.279046E+00 1.313392E+00 1.345425E+00 1.374748E+00 1.400911E+00 + 1.319583E+00 1.354834E+00 1.387488E+00 1.417225E+00 1.443433E+00 + 1.357602E+00 1.393819E+00 1.427148E+00 1.456999E+00 1.483419E+00 + 1.392827E+00 1.430034E+00 1.463698E+00 1.493973E+00 1.520697E+00 + 1.424806E+00 1.463315E+00 1.497483E+00 1.528176E+00 1.555166E+00 + 1.454905E+00 1.494130E+00 1.528940E+00 1.559926E+00 1.587056E+00 + 1.482718E+00 1.522560E+00 1.557728E+00 1.588899E+00 1.616064E+00 + 1.507293E+00 1.547842E+00 1.583391E+00 1.614704E+00 1.641858E+00 + 1.530901E+00 1.571764E+00 1.607592E+00 1.638824E+00 1.665742E+00 + 1.560029E+00 1.600170E+00 1.635181E+00 1.665466E+00 1.691272E+00 + 1.590700E+00 1.629540E+00 1.663062E+00 1.691866E+00 1.716033E+00 + 1.619302E+00 1.656579E+00 1.688483E+00 1.715653E+00 1.738042E+00 + 1.645966E+00 1.681379E+00 1.711552E+00 1.736951E+00 1.757441E+00 + 1.670159E+00 1.703870E+00 1.732264E+00 1.755788E+00 1.774304E+00 + 1.692014E+00 1.724030E+00 1.750575E+00 1.772184E+00 1.788734E+00 + 1.712174E+00 1.742228E+00 1.767017E+00 1.786575E+00 1.800891E+00 + 1.730248E+00 1.758269E+00 1.781179E+00 1.798550E+00 1.810800E+00 + 1.741122E+00 1.767883E+00 1.789536E+00 1.805649E+00 1.816622E+00 + +Band: 6, gas: 8, k-terms: 7 + 3.276257E-03 6.642969E-03 1.235460E-02 2.077095E-02 3.190074E-02 + 3.508614E-03 6.937646E-03 1.274734E-02 2.122714E-02 3.239746E-02 + 3.780879E-03 7.287502E-03 1.320149E-02 2.170384E-02 3.291714E-02 + 4.067270E-03 7.672214E-03 1.370133E-02 2.225562E-02 3.359623E-02 + 4.395746E-03 8.122481E-03 1.425101E-02 2.292064E-02 3.430354E-02 + 4.794486E-03 8.620014E-03 1.486550E-02 2.363197E-02 3.504173E-02 + 5.227245E-03 9.189801E-03 1.556337E-02 2.447236E-02 3.588513E-02 + 5.715923E-03 9.863387E-03 1.631415E-02 2.539975E-02 3.684077E-02 + 6.296231E-03 1.061695E-02 1.716600E-02 2.646997E-02 3.795710E-02 + 7.063087E-03 1.161588E-02 1.834049E-02 2.785332E-02 3.957246E-02 + 8.106836E-03 1.304965E-02 2.020674E-02 3.009107E-02 4.210937E-02 + 9.562483E-03 1.502257E-02 2.280753E-02 3.296074E-02 4.551154E-02 + 1.130755E-02 1.735354E-02 2.583085E-02 3.635141E-02 4.933767E-02 + 1.337185E-02 2.005514E-02 2.914612E-02 4.009378E-02 5.358523E-02 + 1.581011E-02 2.312327E-02 3.262439E-02 4.437417E-02 5.845624E-02 + 1.858494E-02 2.665806E-02 3.668125E-02 4.915283E-02 6.351429E-02 + 2.184124E-02 3.060320E-02 4.128912E-02 5.431142E-02 6.918340E-02 + 2.554159E-02 3.501628E-02 4.655294E-02 6.016877E-02 7.536806E-02 + 2.979801E-02 3.998284E-02 5.232651E-02 6.664478E-02 8.246286E-02 + 3.475034E-02 4.583590E-02 5.895460E-02 7.374821E-02 9.039955E-02 + 4.028911E-02 5.251977E-02 6.639521E-02 8.186087E-02 9.891527E-02 + 4.687311E-02 6.008054E-02 7.479808E-02 9.099168E-02 1.086769E-01 + 5.440090E-02 6.866369E-02 8.413953E-02 1.014933E-01 1.195840E-01 + 6.228396E-02 7.751296E-02 9.427802E-02 1.117498E-01 1.303312E-01 + 6.896366E-02 8.557787E-02 1.025015E-01 1.202115E-01 1.395016E-01 + 7.506077E-02 9.236354E-02 1.103543E-01 1.292863E-01 1.486756E-01 + 8.160200E-02 9.973032E-02 1.188030E-01 1.383435E-01 1.581127E-01 + 8.870939E-02 1.075934E-01 1.280204E-01 1.487757E-01 1.689367E-01 + 9.709475E-02 1.167158E-01 1.382038E-01 1.604133E-01 1.813473E-01 + 1.063935E-01 1.272799E-01 1.495868E-01 1.725506E-01 1.955791E-01 + 1.175200E-01 1.385803E-01 1.627295E-01 1.864701E-01 2.116464E-01 + 1.300530E-01 1.537368E-01 1.773406E-01 2.021325E-01 2.293022E-01 + 1.449611E-01 1.694552E-01 1.946000E-01 2.209540E-01 2.489620E-01 + 1.612409E-01 1.866421E-01 2.140194E-01 2.416691E-01 2.707541E-01 + 1.807481E-01 2.064044E-01 2.364974E-01 2.654216E-01 2.947953E-01 + 2.022889E-01 2.292258E-01 2.601304E-01 2.922847E-01 3.222330E-01 + 2.260844E-01 2.547535E-01 2.867236E-01 3.216980E-01 3.540616E-01 + 2.510349E-01 2.829916E-01 3.150799E-01 3.527251E-01 3.894314E-01 + 2.788969E-01 3.127516E-01 3.477635E-01 3.865998E-01 4.257198E-01 + 3.100903E-01 3.444132E-01 3.848427E-01 4.255223E-01 4.679633E-01 + 3.454834E-01 3.810831E-01 4.229473E-01 4.674818E-01 5.107980E-01 + 3.851466E-01 4.217490E-01 4.654515E-01 5.095470E-01 5.566583E-01 + 4.302988E-01 4.668455E-01 5.106260E-01 5.572145E-01 6.061810E-01 + 4.776017E-01 5.141500E-01 5.581290E-01 6.070184E-01 6.572566E-01 + 5.294576E-01 5.656921E-01 6.087790E-01 6.575125E-01 7.067420E-01 + 5.822484E-01 6.189088E-01 6.628927E-01 7.105197E-01 7.613418E-01 + 6.395854E-01 6.757675E-01 7.185137E-01 7.687688E-01 8.199834E-01 + 6.984732E-01 7.337683E-01 7.776387E-01 8.270969E-01 8.790770E-01 + 7.570233E-01 7.925591E-01 8.366187E-01 8.868732E-01 9.381266E-01 + 8.155681E-01 8.549814E-01 8.988691E-01 9.491524E-01 1.000033E+00 + 8.812654E-01 9.242160E-01 9.695732E-01 1.020339E+00 1.069964E+00 + 9.494868E-01 9.947442E-01 1.042875E+00 1.094535E+00 1.145290E+00 + 1.020353E+00 1.069445E+00 1.121411E+00 1.169890E+00 1.219162E+00 + 1.094605E+00 1.144894E+00 1.191195E+00 1.242337E+00 1.289070E+00 + 1.164308E+00 1.212783E+00 1.260860E+00 1.302992E+00 1.338387E+00 + 1.226341E+00 1.273386E+00 1.310321E+00 1.346694E+00 1.381923E+00 + 1.273991E+00 1.313505E+00 1.351993E+00 1.387722E+00 1.419927E+00 + 1.309498E+00 1.353048E+00 1.389843E+00 1.420020E+00 1.437299E+00 + 1.334820E+00 1.377100E+00 1.410981E+00 1.429719E+00 1.447359E+00 + 6.800026E-01 1.344059E+00 2.346123E+00 3.706525E+00 5.371279E+00 + 7.134917E-01 1.378446E+00 2.393071E+00 3.760126E+00 5.428746E+00 + 7.514381E-01 1.418721E+00 2.444188E+00 3.809704E+00 5.481793E+00 + 7.886499E-01 1.466902E+00 2.496532E+00 3.867589E+00 5.555298E+00 + 8.342702E-01 1.519349E+00 2.555512E+00 3.942910E+00 5.625489E+00 + 8.899148E-01 1.574833E+00 2.625518E+00 4.024167E+00 5.706202E+00 + 9.518027E-01 1.644598E+00 2.699563E+00 4.117852E+00 5.788965E+00 + 1.018100E+00 1.725988E+00 2.782455E+00 4.215393E+00 5.882958E+00 + 1.096024E+00 1.810500E+00 2.870447E+00 4.337070E+00 5.997766E+00 + 1.203113E+00 1.935465E+00 3.013641E+00 4.497299E+00 6.177286E+00 + 1.349630E+00 2.119836E+00 3.251685E+00 4.767205E+00 6.468979E+00 + 1.560247E+00 2.380392E+00 3.599450E+00 5.136491E+00 6.867560E+00 + 1.796650E+00 2.688445E+00 3.991861E+00 5.558149E+00 7.303400E+00 + 2.069926E+00 3.040555E+00 4.438155E+00 6.024165E+00 7.758798E+00 + 2.399524E+00 3.456394E+00 4.892522E+00 6.512310E+00 8.296454E+00 + 2.777618E+00 3.913162E+00 5.398208E+00 7.076920E+00 8.881496E+00 + 3.218706E+00 4.440143E+00 5.936518E+00 7.671770E+00 9.505296E+00 + 3.707000E+00 4.993714E+00 6.555082E+00 8.298888E+00 1.015834E+01 + 4.276718E+00 5.597735E+00 7.207004E+00 9.023546E+00 1.092193E+01 + 4.914831E+00 6.262716E+00 7.936373E+00 9.797416E+00 1.174127E+01 + 5.616660E+00 7.010937E+00 8.731447E+00 1.067728E+01 1.264583E+01 + 6.395415E+00 7.862698E+00 9.622767E+00 1.161793E+01 1.368814E+01 + 7.291695E+00 8.804460E+00 1.064087E+01 1.268721E+01 1.483663E+01 + 8.220206E+00 9.734491E+00 1.168062E+01 1.372911E+01 1.602324E+01 + 9.083249E+00 1.069468E+01 1.249834E+01 1.457115E+01 1.696344E+01 + 9.961031E+00 1.157311E+01 1.336867E+01 1.550111E+01 1.783769E+01 + 1.097052E+01 1.258448E+01 1.437152E+01 1.646903E+01 1.876928E+01 + 1.211214E+01 1.374888E+01 1.560022E+01 1.762805E+01 1.989596E+01 + 1.335449E+01 1.513302E+01 1.695636E+01 1.907229E+01 2.125319E+01 + 1.476479E+01 1.669821E+01 1.854484E+01 2.069530E+01 2.289761E+01 + 1.628948E+01 1.829563E+01 2.054742E+01 2.254993E+01 2.485544E+01 + 1.808279E+01 2.040272E+01 2.263237E+01 2.473780E+01 2.715526E+01 + 2.009132E+01 2.269713E+01 2.511478E+01 2.747808E+01 2.992836E+01 + 2.220255E+01 2.511532E+01 2.791129E+01 3.054485E+01 3.325338E+01 + 2.438908E+01 2.794127E+01 3.102233E+01 3.410426E+01 3.710392E+01 + 2.650463E+01 3.075320E+01 3.455177E+01 3.821318E+01 4.134828E+01 + 2.872296E+01 3.358127E+01 3.845092E+01 4.265121E+01 4.635471E+01 + 3.154196E+01 3.680291E+01 4.189695E+01 4.706642E+01 5.175524E+01 + 3.493532E+01 4.007299E+01 4.579054E+01 5.141121E+01 5.688261E+01 + 3.908128E+01 4.418914E+01 5.046474E+01 5.646903E+01 6.250527E+01 + 4.371380E+01 4.927770E+01 5.557412E+01 6.212669E+01 6.831938E+01 + 4.869862E+01 5.482482E+01 6.142582E+01 6.811622E+01 7.486049E+01 + 5.411211E+01 6.048259E+01 6.771972E+01 7.509788E+01 8.280941E+01 + 5.922973E+01 6.606169E+01 7.403196E+01 8.224309E+01 9.061089E+01 + 6.438874E+01 7.203291E+01 8.008196E+01 8.856439E+01 9.714947E+01 + 6.836543E+01 7.673300E+01 8.515022E+01 9.368791E+01 1.025072E+02 + 7.136802E+01 8.015827E+01 8.833220E+01 9.767179E+01 1.072703E+02 + 7.346317E+01 8.189956E+01 9.025908E+01 9.942830E+01 1.101303E+02 + 7.408132E+01 8.166799E+01 9.052487E+01 1.002770E+02 1.113681E+02 + 7.337281E+01 8.111957E+01 8.998176E+01 9.990973E+01 1.118090E+02 + 7.310071E+01 8.076100E+01 8.985121E+01 1.003878E+02 1.115605E+02 + 7.239440E+01 8.054029E+01 8.944522E+01 1.003281E+02 1.132353E+02 + 7.132733E+01 7.937932E+01 8.945305E+01 1.016442E+02 1.158909E+02 + 7.007164E+01 7.915390E+01 9.027795E+01 1.037486E+02 1.217869E+02 + 6.980707E+01 8.000876E+01 9.186415E+01 1.084492E+02 1.294299E+02 + 7.051179E+01 8.054974E+01 9.462266E+01 1.148672E+02 1.430144E+02 + 6.991806E+01 8.174947E+01 1.007811E+02 1.284258E+02 1.670110E+02 + 7.025136E+01 8.694612E+01 1.131730E+02 1.505384E+02 1.889548E+02 + 7.179715E+01 9.256814E+01 1.254539E+02 1.626825E+02 2.033449E+02 + 2.846813E+00 5.005064E+00 7.795963E+00 1.106017E+01 1.489177E+01 + 2.934148E+00 5.109307E+00 7.897843E+00 1.115577E+01 1.498700E+01 + 3.034895E+00 5.214433E+00 8.009460E+00 1.125576E+01 1.507250E+01 + 3.127035E+00 5.341169E+00 8.137480E+00 1.135758E+01 1.519932E+01 + 3.243003E+00 5.476247E+00 8.282624E+00 1.150469E+01 1.532749E+01 + 3.383506E+00 5.600238E+00 8.444045E+00 1.169025E+01 1.548429E+01 + 3.539064E+00 5.775729E+00 8.615625E+00 1.187258E+01 1.565135E+01 + 3.719617E+00 5.979012E+00 8.792562E+00 1.206205E+01 1.582373E+01 + 3.912322E+00 6.174138E+00 8.986038E+00 1.229939E+01 1.606308E+01 + 4.187406E+00 6.507806E+00 9.310393E+00 1.263138E+01 1.647007E+01 + 4.608983E+00 6.981408E+00 9.863728E+00 1.316503E+01 1.707334E+01 + 5.173793E+00 7.596445E+00 1.059462E+01 1.396814E+01 1.799031E+01 + 5.832511E+00 8.335676E+00 1.134895E+01 1.490166E+01 1.894283E+01 + 6.508534E+00 9.080520E+00 1.223510E+01 1.589723E+01 1.998122E+01 + 7.302120E+00 1.000408E+01 1.323617E+01 1.692756E+01 2.112257E+01 + 8.163352E+00 1.097926E+01 1.429681E+01 1.814101E+01 2.238852E+01 + 9.170269E+00 1.204481E+01 1.550043E+01 1.946672E+01 2.385860E+01 + 1.025583E+01 1.321098E+01 1.685320E+01 2.083727E+01 2.537662E+01 + 1.145617E+01 1.449246E+01 1.827724E+01 2.237773E+01 2.707400E+01 + 1.273500E+01 1.593902E+01 1.982094E+01 2.405815E+01 2.884455E+01 + 1.419537E+01 1.755748E+01 2.160028E+01 2.604861E+01 3.073196E+01 + 1.583530E+01 1.938265E+01 2.353036E+01 2.821929E+01 3.291788E+01 + 1.765864E+01 2.137773E+01 2.564113E+01 3.044140E+01 3.524341E+01 + 1.953548E+01 2.331479E+01 2.779589E+01 3.264302E+01 3.781873E+01 + 2.117623E+01 2.510674E+01 2.954777E+01 3.441474E+01 3.980069E+01 + 2.269461E+01 2.668467E+01 3.133269E+01 3.610742E+01 4.151916E+01 + 2.446116E+01 2.849211E+01 3.316396E+01 3.802299E+01 4.342638E+01 + 2.651946E+01 3.049537E+01 3.538695E+01 4.029746E+01 4.569851E+01 + 2.889577E+01 3.304240E+01 3.778226E+01 4.292274E+01 4.832414E+01 + 3.189271E+01 3.594329E+01 4.058391E+01 4.607847E+01 5.161438E+01 + 3.512998E+01 3.916487E+01 4.413531E+01 4.957076E+01 5.520462E+01 + 3.882832E+01 4.321511E+01 4.810055E+01 5.360483E+01 5.944336E+01 + 4.332669E+01 4.786339E+01 5.291142E+01 5.886880E+01 6.459764E+01 + 4.878758E+01 5.309835E+01 5.864285E+01 6.457612E+01 7.044137E+01 + 5.520927E+01 5.995008E+01 6.512796E+01 7.103140E+01 7.736030E+01 + 6.299913E+01 6.788507E+01 7.276592E+01 7.875235E+01 8.477688E+01 + 7.177148E+01 7.688511E+01 8.248298E+01 8.800659E+01 9.380125E+01 + 8.247980E+01 8.783391E+01 9.293831E+01 9.885339E+01 1.042158E+02 + 9.391085E+01 9.972682E+01 1.055451E+02 1.110863E+02 1.168317E+02 + 1.072679E+02 1.135435E+02 1.200835E+02 1.259618E+02 1.315273E+02 + 1.213708E+02 1.292898E+02 1.361997E+02 1.423867E+02 1.483270E+02 + 1.358265E+02 1.453597E+02 1.536207E+02 1.609596E+02 1.668389E+02 + 1.508040E+02 1.609347E+02 1.712050E+02 1.798096E+02 1.871466E+02 + 1.631496E+02 1.754595E+02 1.882380E+02 1.989382E+02 2.079198E+02 + 1.751073E+02 1.893271E+02 2.044535E+02 2.179420E+02 2.292703E+02 + 1.819739E+02 1.998511E+02 2.177141E+02 2.339984E+02 2.470863E+02 + 1.851465E+02 2.077425E+02 2.283764E+02 2.484560E+02 2.665349E+02 + 1.869905E+02 2.139310E+02 2.384631E+02 2.624467E+02 2.866517E+02 + 1.872645E+02 2.172450E+02 2.487489E+02 2.796887E+02 3.108635E+02 + 1.885922E+02 2.248574E+02 2.641837E+02 3.035197E+02 3.478325E+02 + 2.002827E+02 2.435013E+02 2.951011E+02 3.480317E+02 3.941881E+02 + 2.219476E+02 2.813753E+02 3.421983E+02 4.012974E+02 4.607488E+02 + 2.558782E+02 3.228274E+02 3.975063E+02 4.786664E+02 5.442053E+02 + 2.929289E+02 3.802005E+02 4.858230E+02 5.658850E+02 6.254419E+02 + 3.468658E+02 4.726203E+02 5.711999E+02 6.494666E+02 7.107758E+02 + 4.344726E+02 5.542224E+02 6.526125E+02 7.337872E+02 7.968044E+02 + 5.174424E+02 6.317269E+02 7.337125E+02 8.170172E+02 8.808731E+02 + 5.894172E+02 7.065183E+02 8.101490E+02 8.950273E+02 9.593760E+02 + 6.357120E+02 7.541310E+02 8.585548E+02 9.452967E+02 1.010707E+03 + 4.081205E+01 5.572873E+01 7.405966E+01 9.569233E+01 1.193682E+02 + 4.115510E+01 5.613968E+01 7.433059E+01 9.593836E+01 1.197271E+02 + 4.160472E+01 5.653084E+01 7.466858E+01 9.630106E+01 1.200069E+02 + 4.200378E+01 5.696486E+01 7.519694E+01 9.659246E+01 1.204308E+02 + 4.256110E+01 5.753053E+01 7.582812E+01 9.705316E+01 1.210229E+02 + 4.315010E+01 5.808968E+01 7.640559E+01 9.780932E+01 1.214480E+02 + 4.374079E+01 5.886795E+01 7.712707E+01 9.847399E+01 1.219827E+02 + 4.456790E+01 5.968547E+01 7.783319E+01 9.924419E+01 1.225218E+02 + 4.550924E+01 6.048534E+01 7.869591E+01 1.001383E+02 1.233557E+02 + 4.681653E+01 6.201304E+01 8.012928E+01 1.017664E+02 1.252474E+02 + 4.909630E+01 6.443092E+01 8.321927E+01 1.045779E+02 1.280167E+02 + 5.196952E+01 6.772493E+01 8.760146E+01 1.088014E+02 1.333210E+02 + 5.576108E+01 7.177783E+01 9.155617E+01 1.136207E+02 1.379825E+02 + 5.948498E+01 7.593960E+01 9.642615E+01 1.187501E+02 1.431626E+02 + 6.352222E+01 8.099519E+01 1.016326E+02 1.237880E+02 1.485511E+02 + 6.792473E+01 8.629981E+01 1.065720E+02 1.302180E+02 1.541854E+02 + 7.308919E+01 9.187430E+01 1.128995E+02 1.366768E+02 1.609439E+02 + 7.916496E+01 9.779690E+01 1.196895E+02 1.439112E+02 1.676286E+02 + 8.518422E+01 1.040326E+02 1.266588E+02 1.509842E+02 1.749469E+02 + 9.195651E+01 1.111631E+02 1.340952E+02 1.582891E+02 1.830958E+02 + 9.917912E+01 1.194381E+02 1.430133E+02 1.667902E+02 1.906259E+02 + 1.075387E+02 1.282811E+02 1.529046E+02 1.763271E+02 1.991298E+02 + 1.159400E+02 1.372401E+02 1.618757E+02 1.857759E+02 2.081513E+02 + 1.251655E+02 1.470169E+02 1.708936E+02 1.952954E+02 2.179126E+02 + 1.327991E+02 1.544373E+02 1.782921E+02 2.025250E+02 2.250665E+02 + 1.389374E+02 1.607429E+02 1.853496E+02 2.085528E+02 2.315373E+02 + 1.472911E+02 1.687695E+02 1.927476E+02 2.156432E+02 2.391254E+02 + 1.563570E+02 1.774066E+02 2.023757E+02 2.252575E+02 2.479974E+02 + 1.669981E+02 1.895511E+02 2.126688E+02 2.358272E+02 2.585605E+02 + 1.808468E+02 2.029259E+02 2.253655E+02 2.482536E+02 2.716465E+02 + 1.968155E+02 2.181735E+02 2.401527E+02 2.634133E+02 2.861547E+02 + 2.146838E+02 2.364762E+02 2.571066E+02 2.807058E+02 3.031241E+02 + 2.359625E+02 2.562091E+02 2.778032E+02 3.021023E+02 3.255254E+02 + 2.620056E+02 2.789570E+02 3.009154E+02 3.251613E+02 3.488960E+02 + 2.916045E+02 3.078100E+02 3.285227E+02 3.518171E+02 3.759311E+02 + 3.257745E+02 3.415183E+02 3.595749E+02 3.828022E+02 4.051479E+02 + 3.637555E+02 3.785353E+02 3.972628E+02 4.200762E+02 4.394215E+02 + 4.079363E+02 4.198283E+02 4.376034E+02 4.576131E+02 4.754303E+02 + 4.512251E+02 4.617173E+02 4.769696E+02 4.962383E+02 5.171564E+02 + 4.976672E+02 5.048861E+02 5.205877E+02 5.405203E+02 5.603844E+02 + 5.450791E+02 5.537798E+02 5.665047E+02 5.852399E+02 6.087660E+02 + 5.979740E+02 6.062056E+02 6.179394E+02 6.384379E+02 6.614606E+02 + 6.586105E+02 6.644657E+02 6.763973E+02 6.951898E+02 7.229392E+02 + 7.276241E+02 7.361786E+02 7.498527E+02 7.696383E+02 7.957526E+02 + 8.294909E+02 8.340578E+02 8.484224E+02 8.676929E+02 8.935513E+02 + 9.543893E+02 9.552252E+02 9.635465E+02 9.785235E+02 9.997639E+02 + 1.096313E+03 1.090188E+03 1.093080E+03 1.106220E+03 1.123637E+03 + 1.266069E+03 1.246297E+03 1.243622E+03 1.249049E+03 1.260740E+03 + 1.440438E+03 1.408053E+03 1.396442E+03 1.394830E+03 1.400393E+03 + 1.626492E+03 1.581799E+03 1.558201E+03 1.549042E+03 1.547259E+03 + 1.809736E+03 1.755666E+03 1.722112E+03 1.705818E+03 1.697560E+03 + 1.986159E+03 1.924194E+03 1.882253E+03 1.858389E+03 1.843816E+03 + 2.154360E+03 2.084683E+03 2.034610E+03 2.002644E+03 1.980631E+03 + 2.308451E+03 2.231669E+03 2.173648E+03 2.132661E+03 2.102902E+03 + 2.443339E+03 2.361096E+03 2.295030E+03 2.244729E+03 2.206182E+03 + 2.556274E+03 2.469195E+03 2.395357E+03 2.337000E+03 2.288487E+03 + 2.643403E+03 2.554530E+03 2.473032E+03 2.406394E+03 2.349727E+03 + 2.706385E+03 2.616361E+03 2.530061E+03 2.454783E+03 2.390317E+03 + 2.742980E+03 2.653582E+03 2.565438E+03 2.483223E+03 2.413077E+03 + 1.505039E+03 1.781520E+03 2.071532E+03 2.402421E+03 2.814878E+03 + 1.508010E+03 1.783818E+03 2.074561E+03 2.404754E+03 2.819265E+03 + 1.510864E+03 1.786767E+03 2.077637E+03 2.408585E+03 2.823997E+03 + 1.513947E+03 1.789731E+03 2.080757E+03 2.412234E+03 2.828355E+03 + 1.524989E+03 1.792896E+03 2.084030E+03 2.415473E+03 2.848653E+03 + 1.528124E+03 1.805067E+03 2.087303E+03 2.419303E+03 2.853323E+03 + 1.531490E+03 1.817596E+03 2.090583E+03 2.423213E+03 2.858211E+03 + 1.534719E+03 1.821541E+03 2.094253E+03 2.427436E+03 2.869438E+03 + 1.547811E+03 1.826571E+03 2.098673E+03 2.432417E+03 2.875243E+03 + 1.569963E+03 1.835268E+03 2.108048E+03 2.456291E+03 2.897431E+03 + 1.599324E+03 1.854756E+03 2.138538E+03 2.502624E+03 2.932340E+03 + 1.642811E+03 1.900863E+03 2.211961E+03 2.570081E+03 3.051731E+03 + 1.695511E+03 1.944688E+03 2.248970E+03 2.628018E+03 3.140775E+03 + 1.747999E+03 1.999224E+03 2.327623E+03 2.721371E+03 3.210252E+03 + 1.786110E+03 2.066100E+03 2.393117E+03 2.773883E+03 3.289937E+03 + 1.839662E+03 2.115830E+03 2.444241E+03 2.884398E+03 3.397117E+03 + 1.886790E+03 2.187781E+03 2.518537E+03 2.967580E+03 3.478233E+03 + 1.964989E+03 2.249076E+03 2.609307E+03 3.086167E+03 3.562218E+03 + 2.019597E+03 2.314121E+03 2.675989E+03 3.182588E+03 3.663466E+03 + 2.097566E+03 2.384712E+03 2.772556E+03 3.269292E+03 3.784422E+03 + 2.168964E+03 2.488281E+03 2.885839E+03 3.390002E+03 3.906811E+03 + 2.257266E+03 2.584929E+03 3.027450E+03 3.491425E+03 4.017960E+03 + 2.329676E+03 2.653380E+03 3.130074E+03 3.590616E+03 4.111144E+03 + 2.428251E+03 2.759912E+03 3.226302E+03 3.685224E+03 4.210646E+03 + 2.489395E+03 2.808262E+03 3.258555E+03 3.718192E+03 4.248462E+03 + 2.517870E+03 2.821281E+03 3.265232E+03 3.713282E+03 4.237253E+03 + 2.598157E+03 2.888976E+03 3.282464E+03 3.704056E+03 4.204542E+03 + 2.674162E+03 2.972784E+03 3.318962E+03 3.707059E+03 4.174635E+03 + 2.783157E+03 3.095407E+03 3.383943E+03 3.723973E+03 4.189057E+03 + 2.900374E+03 3.184822E+03 3.467924E+03 3.772097E+03 4.206472E+03 + 3.034125E+03 3.333290E+03 3.570998E+03 3.868375E+03 4.295517E+03 + 3.228710E+03 3.467972E+03 3.701411E+03 4.015024E+03 4.392602E+03 + 3.398479E+03 3.643818E+03 3.885418E+03 4.172986E+03 4.556272E+03 + 3.583888E+03 3.825601E+03 4.093131E+03 4.388759E+03 4.753355E+03 + 3.795601E+03 4.054247E+03 4.345266E+03 4.650581E+03 5.017728E+03 + 4.060182E+03 4.327602E+03 4.611418E+03 4.926687E+03 5.335735E+03 + 4.389606E+03 4.652893E+03 4.988832E+03 5.344005E+03 5.662013E+03 + 4.864021E+03 5.117726E+03 5.412729E+03 5.713900E+03 5.997142E+03 + 5.386528E+03 5.560023E+03 5.814647E+03 6.085911E+03 6.356630E+03 + 5.985176E+03 6.036073E+03 6.238013E+03 6.473694E+03 6.733826E+03 + 6.692786E+03 6.593072E+03 6.704082E+03 6.888716E+03 7.109126E+03 + 7.455710E+03 7.237316E+03 7.223503E+03 7.337915E+03 7.500492E+03 + 8.241846E+03 7.967127E+03 7.798329E+03 7.810311E+03 7.903111E+03 + 9.049259E+03 8.720833E+03 8.455926E+03 8.328808E+03 8.315911E+03 + 9.780319E+03 9.430121E+03 9.130419E+03 8.862869E+03 8.732344E+03 + 1.033451E+04 1.001078E+04 9.693800E+03 9.382867E+03 9.125391E+03 + 1.066357E+04 1.037703E+04 1.007744E+04 9.769048E+03 9.464863E+03 + 1.074461E+04 1.053288E+04 1.025459E+04 9.956141E+03 9.654698E+03 + 1.059027E+04 1.044576E+04 1.020755E+04 9.947664E+03 9.658877E+03 + 1.021485E+04 1.012743E+04 9.949615E+03 9.729055E+03 9.468992E+03 + 9.678301E+03 9.615168E+03 9.479592E+03 9.293147E+03 9.059897E+03 + 9.035615E+03 8.982360E+03 8.867640E+03 8.711241E+03 8.509620E+03 + 8.332078E+03 8.281501E+03 8.175165E+03 8.037002E+03 7.866746E+03 + 7.608466E+03 7.554912E+03 7.448770E+03 7.320284E+03 7.167765E+03 + 6.901282E+03 6.838796E+03 6.735471E+03 6.612872E+03 6.472260E+03 + 6.238560E+03 6.166307E+03 6.061560E+03 5.943974E+03 5.814474E+03 + 5.639522E+03 5.555727E+03 5.451882E+03 5.330406E+03 5.209056E+03 + 5.116184E+03 5.022157E+03 4.917440E+03 4.799186E+03 4.677387E+03 + 4.784918E+03 4.677649E+03 4.569279E+03 4.454118E+03 4.331253E+03 + 1.495136E+04 1.894399E+04 2.244183E+04 2.554602E+04 2.847570E+04 + 1.499080E+04 1.899288E+04 2.248506E+04 2.558392E+04 2.851395E+04 + 1.503085E+04 1.904208E+04 2.252837E+04 2.561902E+04 2.855234E+04 + 1.507157E+04 1.909896E+04 2.257166E+04 2.565846E+04 2.859263E+04 + 1.511432E+04 1.915245E+04 2.261640E+04 2.569904E+04 2.863412E+04 + 1.514903E+04 1.920516E+04 2.266005E+04 2.573832E+04 2.867432E+04 + 1.519519E+04 1.925864E+04 2.270386E+04 2.577738E+04 2.871433E+04 + 1.524527E+04 1.932121E+04 2.275056E+04 2.581873E+04 2.875675E+04 + 1.530641E+04 1.939072E+04 2.280625E+04 2.586955E+04 2.881249E+04 + 1.568194E+04 1.954735E+04 2.294727E+04 2.599089E+04 2.894030E+04 + 1.598213E+04 1.989691E+04 2.325380E+04 2.626904E+04 2.923329E+04 + 1.675250E+04 2.041986E+04 2.370692E+04 2.667476E+04 2.967695E+04 + 1.736574E+04 2.098641E+04 2.422279E+04 2.713080E+04 3.013882E+04 + 1.800690E+04 2.155533E+04 2.473511E+04 2.762621E+04 3.059967E+04 + 1.866602E+04 2.212953E+04 2.523191E+04 2.813938E+04 3.106322E+04 + 1.932609E+04 2.268988E+04 2.572973E+04 2.865495E+04 3.149571E+04 + 1.997389E+04 2.325038E+04 2.624156E+04 2.918821E+04 3.192195E+04 + 2.061921E+04 2.381347E+04 2.673896E+04 2.972329E+04 3.233819E+04 + 2.126392E+04 2.438824E+04 2.724957E+04 3.024061E+04 3.273086E+04 + 2.192178E+04 2.494379E+04 2.780295E+04 3.075460E+04 3.309482E+04 + 2.257541E+04 2.552537E+04 2.838644E+04 3.125222E+04 3.343699E+04 + 2.321175E+04 2.608354E+04 2.896911E+04 3.171118E+04 3.377048E+04 + 2.381023E+04 2.659793E+04 2.951224E+04 3.211134E+04 3.404503E+04 + 2.423698E+04 2.695172E+04 2.988771E+04 3.236123E+04 3.419973E+04 + 2.433019E+04 2.695311E+04 2.986963E+04 3.230824E+04 3.413320E+04 + 2.420132E+04 2.675376E+04 2.960207E+04 3.206791E+04 3.391418E+04 + 2.402528E+04 2.650324E+04 2.924214E+04 3.176570E+04 3.363271E+04 + 2.392136E+04 2.621206E+04 2.886103E+04 3.140609E+04 3.330825E+04 + 2.397942E+04 2.606315E+04 2.848381E+04 3.100496E+04 3.294870E+04 + 2.465621E+04 2.617814E+04 2.833141E+04 3.064070E+04 3.260057E+04 + 2.561915E+04 2.662656E+04 2.854532E+04 3.052237E+04 3.225022E+04 + 2.693716E+04 2.749205E+04 2.890210E+04 3.070662E+04 3.212129E+04 + 2.863016E+04 2.881630E+04 2.970842E+04 3.098404E+04 3.221388E+04 + 3.070401E+04 3.062304E+04 3.112361E+04 3.174369E+04 3.250140E+04 + 3.306287E+04 3.275930E+04 3.285378E+04 3.298903E+04 3.321254E+04 + 3.549515E+04 3.504774E+04 3.468696E+04 3.444296E+04 3.423039E+04 + 3.753489E+04 3.710200E+04 3.646966E+04 3.596828E+04 3.541616E+04 + 3.931722E+04 3.877551E+04 3.806514E+04 3.729786E+04 3.657260E+04 + 4.060088E+04 3.996012E+04 3.923994E+04 3.829438E+04 3.737968E+04 + 4.130824E+04 4.060433E+04 3.982988E+04 3.879871E+04 3.780566E+04 + 4.125109E+04 4.037975E+04 3.971620E+04 3.886581E+04 3.769468E+04 + 4.027973E+04 3.965208E+04 3.891409E+04 3.820565E+04 3.724923E+04 + 3.869706E+04 3.831017E+04 3.750888E+04 3.696527E+04 3.617333E+04 + 3.647493E+04 3.618535E+04 3.574696E+04 3.512501E+04 3.456894E+04 + 3.376139E+04 3.364989E+04 3.341608E+04 3.294296E+04 3.231749E+04 + 3.082676E+04 3.078112E+04 3.061792E+04 3.033320E+04 2.977366E+04 + 2.760181E+04 2.779460E+04 2.762361E+04 2.737246E+04 2.698682E+04 + 2.433275E+04 2.471524E+04 2.468152E+04 2.440562E+04 2.409862E+04 + 2.116151E+04 2.167275E+04 2.179608E+04 2.162634E+04 2.132297E+04 + 1.830689E+04 1.881807E+04 1.898601E+04 1.893613E+04 1.868567E+04 + 1.584354E+04 1.626387E+04 1.643177E+04 1.640918E+04 1.622643E+04 + 1.369712E+04 1.402500E+04 1.417016E+04 1.412787E+04 1.397747E+04 + 1.182278E+04 1.206219E+04 1.216737E+04 1.212444E+04 1.199273E+04 + 1.019285E+04 1.035153E+04 1.041904E+04 1.038670E+04 1.024901E+04 + 8.799123E+03 8.875360E+03 8.913702E+03 8.873244E+03 8.744477E+03 + 7.644848E+03 7.648500E+03 7.637972E+03 7.584149E+03 7.476658E+03 + 6.701810E+03 6.651408E+03 6.605968E+03 6.537809E+03 6.432769E+03 + 5.982329E+03 5.882142E+03 5.787072E+03 5.699352E+03 5.598703E+03 + 5.547440E+03 5.430718E+03 5.316972E+03 5.204106E+03 5.095425E+03 + 2.182509E+05 2.223519E+05 2.201819E+05 2.136364E+05 2.035036E+05 + 2.183517E+05 2.223423E+05 2.200985E+05 2.135136E+05 2.033432E+05 + 2.184497E+05 2.223292E+05 2.200116E+05 2.133876E+05 2.031797E+05 + 2.185435E+05 2.223106E+05 2.199192E+05 2.132564E+05 2.030117E+05 + 2.186368E+05 2.222871E+05 2.198192E+05 2.131170E+05 2.028348E+05 + 2.187229E+05 2.222580E+05 2.197158E+05 2.129754E+05 2.026574E+05 + 2.188036E+05 2.222206E+05 2.196039E+05 2.128256E+05 2.024725E+05 + 2.188845E+05 2.222673E+05 2.194784E+05 2.126602E+05 2.022703E+05 + 2.189806E+05 2.222336E+05 2.193230E+05 2.124561E+05 2.020213E+05 + 2.192239E+05 2.221966E+05 2.190050E+05 2.120222E+05 2.014775E+05 + 2.197475E+05 2.221191E+05 2.184036E+05 2.110543E+05 2.002587E+05 + 2.203559E+05 2.218828E+05 2.175236E+05 2.095538E+05 1.984044E+05 + 2.209600E+05 2.214264E+05 2.164157E+05 2.078168E+05 1.963166E+05 + 2.213810E+05 2.207441E+05 2.151181E+05 2.059259E+05 1.941030E+05 + 2.215126E+05 2.198292E+05 2.136305E+05 2.038852E+05 1.917714E+05 + 2.213462E+05 2.187053E+05 2.119919E+05 2.017517E+05 1.893873E+05 + 2.211718E+05 2.174392E+05 2.101514E+05 1.994555E+05 1.868712E+05 + 2.206432E+05 2.161361E+05 2.081077E+05 1.969994E+05 1.842292E+05 + 2.197970E+05 2.145900E+05 2.058916E+05 1.944228E+05 1.815064E+05 + 2.186210E+05 2.127809E+05 2.034751E+05 1.916962E+05 1.786695E+05 + 2.170929E+05 2.106791E+05 2.008256E+05 1.887815E+05 1.756805E+05 + 2.152244E+05 2.083064E+05 1.979781E+05 1.857235E+05 1.725904E+05 + 2.133738E+05 2.057267E+05 1.950168E+05 1.826157E+05 1.694932E+05 + 2.115023E+05 2.034235E+05 1.925205E+05 1.800841E+05 1.670265E+05 + 2.101414E+05 2.021471E+05 1.913644E+05 1.790591E+05 1.661298E+05 + 2.089786E+05 2.014117E+05 1.909664E+05 1.789157E+05 1.661707E+05 + 2.075435E+05 2.005692E+05 1.905814E+05 1.788694E+05 1.663642E+05 + 2.057830E+05 1.993315E+05 1.898998E+05 1.786066E+05 1.664047E+05 + 2.034825E+05 1.974387E+05 1.886404E+05 1.778410E+05 1.660114E+05 + 2.004545E+05 1.950637E+05 1.866543E+05 1.764333E+05 1.650566E+05 + 1.967535E+05 1.917742E+05 1.839666E+05 1.742587E+05 1.634289E+05 + 1.922247E+05 1.873531E+05 1.804067E+05 1.711926E+05 1.609583E+05 + 1.864178E+05 1.820914E+05 1.756399E+05 1.672667E+05 1.576325E+05 + 1.796927E+05 1.753670E+05 1.695269E+05 1.621211E+05 1.532373E+05 + 1.717020E+05 1.676492E+05 1.623954E+05 1.556753E+05 1.476808E+05 + 1.621510E+05 1.587211E+05 1.539544E+05 1.480874E+05 1.410900E+05 + 1.513241E+05 1.484448E+05 1.443371E+05 1.394564E+05 1.334508E+05 + 1.388298E+05 1.371308E+05 1.337529E+05 1.296944E+05 1.246976E+05 + 1.255209E+05 1.246013E+05 1.223463E+05 1.192126E+05 1.150103E+05 + 1.114854E+05 1.115771E+05 1.104518E+05 1.080849E+05 1.046503E+05 + 9.745065E+04 9.871745E+04 9.817092E+04 9.649532E+04 9.400556E+04 + 8.420207E+04 8.613000E+04 8.608685E+04 8.502689E+04 8.319409E+04 + 7.206027E+04 7.418059E+04 7.479344E+04 7.406204E+04 7.272123E+04 + 6.119827E+04 6.332881E+04 6.418182E+04 6.397720E+04 6.302748E+04 + 5.165594E+04 5.347083E+04 5.457121E+04 5.477170E+04 5.424652E+04 + 4.331771E+04 4.496906E+04 4.612078E+04 4.653073E+04 4.632895E+04 + 3.627730E+04 3.774738E+04 3.884363E+04 3.939844E+04 3.931679E+04 + 3.036485E+04 3.162453E+04 3.257545E+04 3.315788E+04 3.319412E+04 + 2.539665E+04 2.647586E+04 2.726691E+04 2.774214E+04 2.785133E+04 + 2.129524E+04 2.217985E+04 2.282452E+04 2.320422E+04 2.332058E+04 + 1.803829E+04 1.869602E+04 1.918570E+04 1.945774E+04 1.952962E+04 + 1.534733E+04 1.581241E+04 1.613821E+04 1.632507E+04 1.634500E+04 + 1.307465E+04 1.338980E+04 1.359414E+04 1.369773E+04 1.367560E+04 + 1.118241E+04 1.137733E+04 1.149517E+04 1.153006E+04 1.148473E+04 + 9.630084E+03 9.733453E+03 9.765114E+03 9.743317E+03 9.683480E+03 + 8.340209E+03 8.384539E+03 8.369915E+03 8.307704E+03 8.220260E+03 + 7.278779E+03 7.268653E+03 7.221239E+03 7.139287E+03 7.034989E+03 + 6.417967E+03 6.363774E+03 6.287562E+03 6.190805E+03 6.079178E+03 + 5.884403E+03 5.802655E+03 5.707659E+03 5.601816E+03 5.488162E+03 +*END diff --git a/components/socrates_couple/src/socrates_couple.F90 b/components/socrates_couple/src/socrates_couple.F90 index 7be24942..28a3acec 100644 --- a/components/socrates_couple/src/socrates_couple.F90 +++ b/components/socrates_couple/src/socrates_couple.F90 @@ -14,8 +14,7 @@ module socrates_couple_mod use science_constants_mod, only : cp use conversions_mod, only : conv_to_string use logging_mod, only : LOG_INFO, LOG_WARN, LOG_ERROR, & - LOG_DEBUG, log_master_log, log_log, log_get_logging_level, & - log_master_log + LOG_DEBUG, log_master_log, log_log, log_get_logging_level, log_is_master use q_indices_mod, only: get_q_index, standard_q_names use registry_mod, only : is_component_enabled use sw_rad_input_mod, only: sw_input @@ -53,6 +52,15 @@ module socrates_couple_mod type (str_merge_atm) :: merge_fields type (str_socrates_options) :: socrates_opt type (str_socrates_derived_fields) :: socrates_derived_fields + ! Tendency diagnostic variables + real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: tend_3d_tabs_lw, tend_3d_tabs_sw, tend_3d_tabs_total + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tend_pr_tot_th_lw, tend_pr_tot_tabs_lw, & + tend_pr_tot_th_sw, tend_pr_tot_tabs_sw, & + tend_pr_tot_th_total, tend_pr_tot_tabs_total + + ! local total arrays for profile diags + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: & + cloud_reff_tot, longwave_hr_tot, shortwave_hr_tot public socrates_couple_get_descriptor contains @@ -69,7 +77,7 @@ type(component_descriptor_type) function socrates_couple_get_descriptor() socrates_couple_get_descriptor%field_value_retrieval=>field_value_retrieval_callback socrates_couple_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(socrates_couple_get_descriptor%published_fields(14)) + allocate(socrates_couple_get_descriptor%published_fields(27)) socrates_couple_get_descriptor%published_fields(1)="flux_up_shortwave" socrates_couple_get_descriptor%published_fields(2)="flux_down_shortwave" @@ -85,6 +93,20 @@ type(component_descriptor_type) function socrates_couple_get_descriptor() socrates_couple_get_descriptor%published_fields(12)="shortwave_heating_rate" socrates_couple_get_descriptor%published_fields(13)="longwave_heating_rate" socrates_couple_get_descriptor%published_fields(14)="total_radiative_heating_rate" + socrates_couple_get_descriptor%published_fields(15)="cloud_effective_radius" + socrates_couple_get_descriptor%published_fields(16)="cloud_reff_local" + socrates_couple_get_descriptor%published_fields(17)="shortwave_hr_local" + socrates_couple_get_descriptor%published_fields(18)="longwave_hr_local" + socrates_couple_get_descriptor%published_fields(19)="tend_tabs_socrates_3d_longwave_local" + socrates_couple_get_descriptor%published_fields(20)="tend_tabs_socrates_3d_shortwave_local" + socrates_couple_get_descriptor%published_fields(21)="tend_tabs_socrates_3d_total_radiative_heating_local" + + socrates_couple_get_descriptor%published_fields(22)="tend_th_socrates_profile_longwave_total_local" + socrates_couple_get_descriptor%published_fields(23)="tend_th_socrates_profile_shortwave_total_local" + socrates_couple_get_descriptor%published_fields(24)="tend_th_socrates_profile_total_radiative_heating_total_local" + socrates_couple_get_descriptor%published_fields(25)="tend_tabs_socrates_profile_longwave_total_local" + socrates_couple_get_descriptor%published_fields(26)="tend_tabs_socrates_profile_shortwave_total_local" + socrates_couple_get_descriptor%published_fields(27)="tend_tabs_socrates_profile_total_radiative_heating_total_local" end function socrates_couple_get_descriptor @@ -103,19 +125,26 @@ subroutine initialisation_callback(current_state) y_nohalos=current_state%local_grid%size(Y_INDEX) x_nohalos=current_state%local_grid%size(X_INDEX) - !if (.not. current_state%continuation_run) then - ! Allocated the longwave and shortwave heating rates.They need to be added to - ! the dump - ! allocate(current_state%sth_lw%data(k_top, y_local, x_local)) - ! allocate(current_state%sth_sw%data(k_top, y_local, x_local)) - ! current_state%sth_lw%data(:,:,:) = 0.0 - ! current_state%sth_sw%data(:,:,:) = 0.0 - ! Allocate downward surface fluxes - ! allocate(current_state%sw_down_surf(y_local, x_local)) - ! allocate(current_state%lw_down_surf(y_local, x_local)) - ! current_state%sw_down_surf(:, :) = 0.0 - ! current_state%lw_down_surf(:, :) = 0.0 - !endif + ! Since these current_state variables are optional, it is possible for the model to be run without them + ! and then reconfigured with this component enabled. In that case, they will not be found in the checkpoint, + ! and they will not be allocated, but they will still be needed. + ! So in all cases, if this component is enabled, we make certain these are allocated. + if (.not. allocated(current_state%sth_lw%data) ) then + allocate(current_state%sth_lw%data(k_top, y_local, x_local)) + current_state%sth_lw%data(:,:,:) = 0.0_DEFAULT_PRECISION + end if + if (.not. allocated(current_state%sth_sw%data) ) then + allocate(current_state%sth_sw%data(k_top, y_local, x_local)) + current_state%sth_sw%data(:,:,:) = 0.0_DEFAULT_PRECISION + end if + if (.not. allocated(current_state%sw_down_surf) ) then + allocate(current_state%sw_down_surf(y_local, x_local)) + current_state%sw_down_surf(:, :) = 0.0_DEFAULT_PRECISION + end if + if (.not. allocated(current_state%lw_down_surf) ) then + allocate(current_state%lw_down_surf(y_local, x_local)) + current_state%lw_down_surf(:, :) = 0.0_DEFAULT_PRECISION + end if ! allocate the density and radiation factor needed for heating rates allocate(socrates_derived_fields%density_factor(k_top)) @@ -142,27 +171,57 @@ subroutine initialisation_callback(current_state) allocate(socrates_derived_fields%swrad_hr(k_top, y_nohalos,x_nohalos)) allocate(socrates_derived_fields%lwrad_hr(k_top, y_nohalos,x_nohalos)) allocate(socrates_derived_fields%totrad_hr(k_top, y_nohalos,x_nohalos)) + ! + ! allocate cloud effective radius + allocate(socrates_derived_fields%cloud_reff(k_top, y_nohalos,x_nohalos)) + ! + ! allocate local total fields for 1-D profile + allocate(cloud_reff_tot(k_top), longwave_hr_tot(k_top), shortwave_hr_tot(k_top)) ! initialise allocated variables to 0 for safety - socrates_derived_fields%flux_up_sw(:,:,:) = 0.0 - socrates_derived_fields%flux_down_sw(:,:,:) = 0.0 - socrates_derived_fields%flux_up_lw(:,:,:) = 0.0 - socrates_derived_fields%flux_down_lw(:,:,:) = 0.0 - socrates_derived_fields%flux_net_sw(:,:,:) = 0.0 - socrates_derived_fields%flux_net_lw(:,:,:) = 0.0 - socrates_derived_fields%toa_up_longwave(:,:) = 0.0 - socrates_derived_fields%toa_down_shortwave(:,:) = 0.0 - socrates_derived_fields%toa_up_shortwave(:,:) = 0.0 - socrates_derived_fields%surface_up_longwave(:,:) = 0.0 - socrates_derived_fields%surface_down_longwave(:,:) = 0.0 - socrates_derived_fields%surface_down_shortwave(:,:) = 0.0 - socrates_derived_fields%surface_up_shortwave(:,:) = 0.0 - socrates_derived_fields%swrad_hr(:,:,:) = 0.0 - socrates_derived_fields%lwrad_hr(:,:,:) = 0.0 - socrates_derived_fields%totrad_hr(:,:,:) = 0.0 + socrates_derived_fields%flux_up_sw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%flux_down_sw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%flux_up_lw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%flux_down_lw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%flux_net_sw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%flux_net_lw(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%toa_up_longwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%toa_down_shortwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%toa_up_shortwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%surface_up_longwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%surface_down_longwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%surface_down_shortwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%surface_up_shortwave(:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%swrad_hr(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%lwrad_hr(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%totrad_hr(:,:,:) = 0.0_DEFAULT_PRECISION + socrates_derived_fields%cloud_reff(:,:,:) = 0.0_DEFAULT_PRECISION + + ! Allocate 3d tendency fields upon availability + ! using 'k_top' for these diagnostics would be problematic if the Z_INDEX halos were ever nonzero. + allocate( tend_3d_tabs_lw(k_top,y_nohalos,x_nohalos)) + allocate( tend_3d_tabs_sw(k_top,y_nohalos,x_nohalos)) + allocate( tend_3d_tabs_total(k_top,y_nohalos,x_nohalos)) + allocate( tend_pr_tot_th_lw(k_top)) + allocate( tend_pr_tot_th_sw(k_top)) + allocate( tend_pr_tot_th_total(k_top)) + allocate( tend_pr_tot_tabs_lw(k_top)) + allocate( tend_pr_tot_tabs_sw(k_top)) + allocate( tend_pr_tot_tabs_total(k_top)) + + ! Initialise allocates tendency variable to 0. + tend_3d_tabs_lw(:,:,:) = 0.0_DEFAULT_PRECISION + tend_3d_tabs_sw(:,:,:) = 0.0_DEFAULT_PRECISION + tend_3d_tabs_total(:,:,:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_th_lw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_th_sw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_th_total(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_lw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_sw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_total(:) = 0.0_DEFAULT_PRECISION ! derive density and radiation factor for heating rate calculation - socrates_derived_fields%density_factor(1) = 0.0 + socrates_derived_fields%density_factor(1) = 0.0_DEFAULT_PRECISION do k = 2, k_top socrates_derived_fields%density_factor(k) = & current_state%global_grid%configuration%vertical%rhon(k)* & @@ -216,8 +275,9 @@ subroutine timestep_callback(current_state) integer :: k ! look counter ! No need to do radiation calculations in the halos or on the first timestep - ! - if (current_state%halo_column .or. current_state%timestep < 2) return + ! unless this is a reconfiguration run + if (current_state%halo_column .or. & + (current_state%timestep < 2 .and. (.not. current_state%reconfig_run)) ) return local_dtm = current_state%dtm*2.0 if (current_state%field_stepping == FORWARD_STEPPING) local_dtm=current_state%dtm @@ -229,6 +289,12 @@ subroutine timestep_callback(current_state) target_y_index=jcol-current_state%local_grid%halo_size(Y_INDEX) target_x_index=icol-current_state%local_grid%halo_size(X_INDEX) + if (current_state%first_nonhalo_timestep_column) then + cloud_reff_tot(:) = 0.0_DEFAULT_PRECISION + longwave_hr_tot(:) = 0.0_DEFAULT_PRECISION + shortwave_hr_tot(:) = 0.0_DEFAULT_PRECISION + endif + ! Test whether it is a radiation calc timestep on the first non-halo column ! If it is, then calc all year, day, time in hours and timestep. ! Note: all socrates time control variables are declared in the socrates_opt @@ -236,13 +302,13 @@ subroutine timestep_callback(current_state) ! in current_state. if (current_state%first_nonhalo_timestep_column) then !i) 1 call radiation on timestep 2 to initialise the heating rates - !ii) if rad_int_time less than or equal to 0.0, SOCRATES called on every timestep - if (socrates_opt%rad_int_time <= 0.0 .or. current_state%timestep == 2 ) then + !ii) if rad_interval less than or equal to 0, SOCRATES called on every timestep + if (socrates_opt%rad_interval .le. 0 .or. & + (current_state%timestep .eq. 2 .and. (.not. current_state%reconfig_run)) ) then socrates_opt%l_rad_calc = .true. - else - socrates_opt%l_rad_calc = & - ((current_state%time - & - (current_state%rad_last_time + socrates_opt%rad_int_time)) > 0.0) + else ! compute on specified interval (determined by + ! model_core/src/components/timestepper.F90, depends on time_basis) + socrates_opt%l_rad_calc = current_state%radiation_timestep endif endif @@ -250,7 +316,7 @@ subroutine timestep_callback(current_state) if (current_state%first_nonhalo_timestep_column) then call log_master_log & (LOG_INFO, "Socrates called, time ="//trim(conv_to_string(current_state%time))//& - " rad_int_time="//trim(conv_to_string(socrates_opt%rad_int_time))//& + " rad_interval="//trim(conv_to_string(socrates_opt%rad_interval))//& " local dtm="//trim(conv_to_string(local_dtm))) call log_master_log & (LOG_INFO, "methane ="//trim(conv_to_string(socrates_opt%ch4_mmr))//& @@ -264,10 +330,10 @@ subroutine timestep_callback(current_state) (socrates_opt%rad_start_time + ((current_state%time+local_dtm)/3600.0)) & - (24.0*(socrates_opt%rad_day-socrates_opt%rad_start_day)) ! set the radiation timestep - if (socrates_opt%rad_int_time == 0) then + if (socrates_opt%rad_interval .le. 0) then socrates_derived_fields%dt_secs = local_dtm else - socrates_derived_fields%dt_secs = socrates_opt%rad_int_time + socrates_derived_fields%dt_secs = current_state%time - current_state%rad_last_time endif ! Finally, if we will calculate radiative fluxes on this timestep update the last ! radiative timetep to this one. @@ -389,43 +455,122 @@ subroutine timestep_callback(current_state) current_state%sth_lw%data(:, jcol, icol) + & current_state%sth_sw%data(:, jcol, icol) + cloud_reff_tot(:) = cloud_reff_tot(:) + & + (socrates_derived_fields%cloud_reff(:,target_y_index, target_x_index)) + longwave_hr_tot(:) = longwave_hr_tot(:) + & + (socrates_derived_fields%lwrad_hr(:,target_y_index, target_x_index)) + shortwave_hr_tot(:) = shortwave_hr_tot(:) + & + (socrates_derived_fields%swrad_hr(:,target_y_index, target_x_index)) + + ! Zero profile tendency totals on first instance in the sum + if (current_state%first_nonhalo_timestep_column) then + tend_pr_tot_th_lw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_th_sw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_th_total(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_lw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_sw(:) = 0.0_DEFAULT_PRECISION + tend_pr_tot_tabs_total(:) = 0.0_DEFAULT_PRECISION + endif ! zero totals + + if (.not. current_state%halo_column) then + call compute_component_tendencies(current_state, icol, jcol, target_x_index, target_y_index) + end if + end subroutine timestep_callback subroutine finalisation_callback(current_state) - type(model_state_type), target, intent(inout) :: current_state ! deallocate(merge_fields%t, merge_fields%qv, & ! ql_socrates, qi_socrates) + if (allocated(tend_3d_tabs_lw)) deallocate(tend_3d_tabs_lw) + if (allocated(tend_3d_tabs_sw)) deallocate(tend_3d_tabs_sw) + if (allocated(tend_3d_tabs_total)) deallocate(tend_3d_tabs_total) + + if (allocated(tend_pr_tot_th_lw)) deallocate(tend_pr_tot_th_lw) + if (allocated(tend_pr_tot_th_sw)) deallocate(tend_pr_tot_th_sw) + if (allocated(tend_pr_tot_th_total)) deallocate(tend_pr_tot_th_total) + if (allocated(tend_pr_tot_tabs_lw)) deallocate(tend_pr_tot_tabs_lw) + if (allocated(tend_pr_tot_tabs_sw)) deallocate(tend_pr_tot_tabs_sw) + if (allocated(tend_pr_tot_tabs_total)) deallocate(tend_pr_tot_tabs_total) end subroutine finalisation_callback + !> Computation of component tendencies + !! @param current_state Current model state + !! @param cxn The current slice, x, index + !! @param cyn The current column, y, index. + !! @param txn target_x_index + !! @param tyn target_y_index + subroutine compute_component_tendencies(current_state, cxn, cyn, txn, tyn) + type(model_state_type), target, intent(inout) :: current_state + integer, intent(in) :: cxn, cyn, txn, tyn + + ! Calculate change in tendency due to component + tend_3d_tabs_lw(:,tyn,txn) = current_state%sth_lw%data(:,cyn,cxn) & + * current_state%global_grid%configuration%vertical%rprefrcp(:) + tend_3d_tabs_sw(:,tyn,txn) = current_state%sth_sw%data(:,cyn,cxn) & + * current_state%global_grid%configuration%vertical%rprefrcp(:) + tend_3d_tabs_total(:,tyn,txn) = tend_3d_tabs_lw(:,tyn,txn) + tend_3d_tabs_sw(:,tyn,txn) + + ! Add local tendency fields to the profile total + tend_pr_tot_th_lw(:) = tend_pr_tot_th_lw(:) + current_state%sth_lw%data(:,cyn,cxn) + tend_pr_tot_th_sw(:) = tend_pr_tot_th_sw(:) + current_state%sth_sw%data(:,cyn,cxn) + tend_pr_tot_th_total(:) = tend_pr_tot_th_total(:) & + + current_state%sth_lw%data(:,cyn,cxn) + current_state%sth_sw%data(:,cyn,cxn) + + tend_pr_tot_tabs_lw(:) = tend_pr_tot_tabs_lw(:) + tend_3d_tabs_lw(:,tyn,txn) + tend_pr_tot_tabs_sw(:) = tend_pr_tot_tabs_sw(:) + tend_3d_tabs_sw(:,tyn,txn) + tend_pr_tot_tabs_total(:) = tend_pr_tot_tabs_total(:) + tend_3d_tabs_total(:,tyn,txn) + + end subroutine compute_component_tendencies + !> Field information retrieval callback, this returns information for a specific components published field !! @param current_state Current model state !! @param name The name of the field to retrieve information for !! @param field_information Populated with information about the field subroutine field_information_retrieval_callback(current_state, name, field_information) type(model_state_type), target, intent(inout) :: current_state - character(len=*), intent(in) :: name - type(component_field_information_type), intent(out) :: field_information + character(len=*), intent(in) :: name + type(component_field_information_type), intent(out) :: field_information + integer :: strcomp + strcomp = INDEX(name, "_socrates_3d_") if ( name .eq. "flux_up_shortwave" .or. name .eq. "flux_down_shortwave" .or. & name .eq. "flux_up_longwave" .or. name .eq. "flux_down_longwave" .or. & name .eq. "shortwave_heating_rate" .or. name .eq. "longwave_heating_rate" & - .or. name .eq. "total_radiative_heating_rate") then + .or. name .eq. "total_radiative_heating_rate" .or. name .eq. "cloud_effective_radius" & + .or. strcomp .ne. 0) then field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE field_information%number_dimensions=3 field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) field_information%dimension_sizes(2)=current_state%local_grid%size(Y_INDEX) field_information%dimension_sizes(3)=current_state%local_grid%size(X_INDEX) field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE - else + else if (name .eq. "cloud_reff_local" .or. name .eq. "shortwave_hr_local" .or. & + name .eq. "longwave_hr_local") then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=1 + field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + end if + + strcomp = INDEX(name, "surface_") + INDEX(name, "toa_") + if (strcomp .ne. 0) then field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE field_information%number_dimensions=2 field_information%dimension_sizes(1)=current_state%local_grid%size(Y_INDEX) field_information%dimension_sizes(2)=current_state%local_grid%size(X_INDEX) field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE - endif + end if + + strcomp = INDEX(name, "_socrates_profile_") + if (strcomp .ne. 0) then + field_information%field_type=COMPONENT_ARRAY_FIELD_TYPE + field_information%number_dimensions=1 + field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) + field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE + end if field_information%enabled=.true. @@ -443,73 +588,93 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) integer :: k ! 3D radiative flux and heating rates - if (name .eq. "flux_up_shortwave") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%flux_up_sw(:,:,:) + if (name .eq. "flux_up_shortwave") then + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%flux_up_sw) else if (name .eq. "flux_down_shortwave") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%flux_down_sw(:,:,:) + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%flux_down_sw) else if (name .eq. "flux_up_longwave") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%flux_up_lw(:,:,:) + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%flux_up_lw) else if (name .eq. "flux_down_longwave") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%flux_down_lw(:,:,:) + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%flux_down_lw) else if (name .eq. "shortwave_heating_rate") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%swrad_hr(:,:,:) + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%swrad_hr) else if (name .eq. "longwave_heating_rate") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%lwrad_hr(:,:,:) + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%lwrad_hr) else if (name .eq. "total_radiative_heating_rate") then - allocate(field_value%real_3d_array(current_state%local_grid%size(Z_INDEX), & - current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_3d_array(:,:,:) = socrates_derived_fields%totrad_hr(:,:,:) - ! - ! 2D radiative fluxes + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%totrad_hr) + else if (name .eq. "cloud_effective_radius") then + call set_published_field_value(field_value, real_3d_field = socrates_derived_fields%cloud_reff) + + ! + ! 2D radiative fluxes else if (name .eq. "toa_up_longwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%toa_up_longwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%toa_up_longwave) else if (name .eq. "surface_down_longwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%surface_down_longwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%surface_down_longwave) else if (name .eq. "surface_up_longwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%surface_up_longwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%surface_up_longwave) else if (name .eq. "toa_up_shortwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%toa_up_shortwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%toa_up_shortwave) else if (name .eq. "toa_down_shortwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%toa_down_shortwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%toa_down_shortwave) else if (name .eq. "surface_down_shortwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%surface_down_shortwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%surface_down_shortwave) else if (name .eq. "surface_up_shortwave") then - allocate(field_value%real_2d_array(current_state%local_grid%size(Y_INDEX), & - current_state%local_grid%size(X_INDEX))) - field_value%real_2d_array(:,:) = socrates_derived_fields%surface_up_shortwave(:,:) + call set_published_field_value(field_value, real_2d_field = socrates_derived_fields%surface_up_shortwave) + ! + ! Additional 3d tendencies + else if (name .eq. "tend_tabs_socrates_3d_longwave_local") then + call set_published_field_value(field_value, real_3d_field = tend_3d_tabs_lw) + else if (name .eq. "tend_tabs_socrates_3d_shortwave_local") then + call set_published_field_value(field_value, real_3d_field = tend_3d_tabs_sw) + else if (name .eq. "tend_tabs_socrates_3d_total_radiative_heating_local") then + call set_published_field_value(field_value, real_3d_field = tend_3d_tabs_total) + ! + ! Profile tendencies + else if (name .eq. "tend_th_socrates_profile_longwave_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_th_lw) + else if (name .eq. "tend_th_socrates_profile_shortwave_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_th_sw) + else if (name .eq. "tend_th_socrates_profile_total_radiative_heating_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_th_total) + else if (name .eq. "tend_tabs_socrates_profile_longwave_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_tabs_lw) + else if (name .eq. "tend_tabs_socrates_profile_shortwave_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_tabs_sw) + else if (name .eq. "tend_tabs_socrates_profile_total_radiative_heating_total_local") then + call set_published_field_value(field_value, real_1d_field = tend_pr_tot_tabs_total) + + ! + ! Additional profiles of reff and heating rates + else if (name .eq. "cloud_reff_local") then + call set_published_field_value(field_value, real_1d_field = cloud_reff_tot) + else if (name .eq. "shortwave_hr_local") then + call set_published_field_value(field_value, real_1d_field = shortwave_hr_tot) + else if (name .eq. "longwave_hr_local") then + call set_published_field_value(field_value, real_1d_field = longwave_hr_tot) + end if end subroutine field_value_retrieval_callback + !> Sets the published field value from the temporary diagnostic values held by this component. + !! @param field_value Populated with the value of the field + !! @param real_1d_field Optional one dimensional real of values to publish + !! @param real_2d_field Optional two dimensional real of values to publish + subroutine set_published_field_value(field_value, real_1d_field, real_2d_field, real_3d_field) + type(component_field_value_type), intent(inout) :: field_value + real(kind=DEFAULT_PRECISION), dimension(:), optional :: real_1d_field + real(kind=DEFAULT_PRECISION), dimension(:,:), optional :: real_2d_field + real(kind=DEFAULT_PRECISION), dimension(:,:,:), optional :: real_3d_field + + if (present(real_1d_field)) then + allocate(field_value%real_1d_array(size(real_1d_field)), source=real_1d_field) + else if (present(real_2d_field)) then + allocate(field_value%real_2d_array(size(real_2d_field, 1), size(real_2d_field, 2)), source=real_2d_field) + else if (present(real_3d_field)) then + allocate(field_value%real_3d_array(size(real_3d_field, 1), size(real_3d_field, 2), size(real_3d_field, 3)), & + source=real_3d_field) + end if + end subroutine set_published_field_value + end module socrates_couple_mod diff --git a/components/socrates_couple/src/socrates_monc_interface/def_socrates_derived_fields.F90 b/components/socrates_couple/src/socrates_monc_interface/def_socrates_derived_fields.F90 index d2d52967..7df3b9c2 100644 --- a/components/socrates_couple/src/socrates_monc_interface/def_socrates_derived_fields.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/def_socrates_derived_fields.F90 @@ -8,7 +8,7 @@ module def_socrates_derived_fields real(kind=DEFAULT_PRECISION) :: & dt_secs ! radiation timestep in seconds. It will either be - ! socrates_opt%rad_int_time, or the MONC timestep + ! the time since the previous call, or the MONC timestep ! This is set in the socrates_couple, timestep_callback ! declare fields to use in the solar position calculation @@ -47,7 +47,8 @@ module def_socrates_derived_fields flux_net_lw(:,:,:), & ! longwave flux net swrad_hr(:,:,:), & ! shortwave heating rate lwrad_hr(:,:,:), & ! longwave heating rate - totrad_hr(:,:,:) ! total radiative heating rate + totrad_hr(:,:,:), & ! total radiative heating rate + cloud_reff(:,:,:) ! declare 2-d fields for shortwave and longwave toa and surface diff --git a/components/socrates_couple/src/socrates_monc_interface/def_socrates_options.F90 b/components/socrates_couple/src/socrates_monc_interface/def_socrates_options.F90 index 0063c59b..37fdaead 100644 --- a/components/socrates_couple/src/socrates_monc_interface/def_socrates_options.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/def_socrates_options.F90 @@ -38,8 +38,8 @@ module def_socrates_options rad_time_hours, & rad_year, & rad_start_day, & - rad_day, & - rad_int_time + rad_day + integer :: rad_interval ! ! Surface albedo variables for socrates -read from configuration @@ -75,8 +75,8 @@ module def_socrates_options hfc125_mmr, & hfc134a_mmr ! logical to decide if it is a radiation timestep. This is true - ! if (time > ((rad_last_time + rad_int_time)) > 0.0)). Derived - ! in the timestep_callback in socrates_couple + ! if rad_interval .le. 0 or if current_state%radiation_timestep=.true. + ! (determined by timestepper and, when time_basis=.true., iobridge) logical :: l_rad_calc end type str_socrates_options diff --git a/components/socrates_couple/src/socrates_monc_interface/get_and_test_socrates_options.F90 b/components/socrates_couple/src/socrates_monc_interface/get_and_test_socrates_options.F90 index bc8d0d6d..907652d1 100644 --- a/components/socrates_couple/src/socrates_monc_interface/get_and_test_socrates_options.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/get_and_test_socrates_options.F90 @@ -9,7 +9,7 @@ module get_and_test_socrates_options_mod use conversions_mod, only : conv_to_string use q_indices_mod, only: get_q_index, standard_q_names use optionsdatabase_mod, only : options_get_string, options_get_integer, & - options_get_real, options_get_logical + options_get_real, options_get_logical, options_has_key use def_socrates_options, only: str_socrates_options @@ -123,8 +123,8 @@ subroutine set_and_test_socrates_monc_options(current_state, socrates_opt) socrates_opt%fixed_cloud_number = options_get_real(current_state%options_database, "fixed_cloud_number") socrates_opt%fixed_ice_re = options_get_real(current_state%options_database, "fixed_ice_re") call log_master_log & - (LOG_INFO, "Socrates using prescribed fix_cloud_number="& - //trim(conv_to_string(socrates_opt%fixed_cloud_number))//" /cm3") + (LOG_INFO, "Socrates using prescribed fixed_cloud_number="& + //trim(conv_to_string(socrates_opt%fixed_cloud_number))//" /m**3") endif endif else @@ -175,11 +175,6 @@ subroutine set_and_test_socrates_monc_options(current_state, socrates_opt) (LOG_ERROR, "Socrates - start time is outside sensible range, check config - STOP") endif ! - socrates_opt%rad_int_time = options_get_real(current_state%options_database, "rad_int_time") - if (socrates_opt%rad_int_time <= 0.0) then - call log_master_log & - (LOG_WARN, "Socrates - rad_int_time less than 0.0, SOCRATES will be called every timestep") - endif ! Now get the surface albedo variables socrates_opt%l_variable_srf_albedo = options_get_logical(current_state%options_database, "l_variable_srf_albedo") @@ -202,6 +197,19 @@ subroutine set_and_test_socrates_monc_options(current_state, socrates_opt) endif endif ! end l_solar_fixed + ! Read the radiation call interval + socrates_opt%rad_interval = options_get_integer(current_state%options_database, "rad_interval") + if (socrates_opt%rad_interval <= 0) then + call log_master_log & + (LOG_WARN, "Socrates - rad_interval <= 0 ; SOCRATES will be called every timestep") + endif + if (options_has_key(current_state%options_database, "rad_int_time")) then + call log_master_log & + (LOG_ERROR, "Socrates - option key 'rad_int_time' is deprecated and no longer functions. "//& + "Please remove this from your configuration, and use 'rad_interval', which "//& + "has functionality dependent upon 'time_basis'.") + end if + if (socrates_opt%surface_albedo < 0.0 .or. socrates_opt%surface_albedo > 1.0) then call log_master_log & (LOG_ERROR, "Socrates - surface albedo outside sensible range, check config - STOP") @@ -225,6 +233,23 @@ subroutine set_and_test_socrates_monc_options(current_state, socrates_opt) socrates_opt%hcfc22_mmr = 0.0 socrates_opt%hfc125_mmr = 0.0 socrates_opt%hfc134a_mmr = 0.0 + + ! Change the well-mixed gas concentrations in the RCEMIP case + ! As above, see #306 + if (options_get_logical(current_state%options_database, "l_rcemip_gases")) then + socrates_opt%co2_mmr = 5.288e-4 + socrates_opt%n2o_mmr = 4.651e-7 + socrates_opt%ch4_mmr = 9.139e-7 + socrates_opt%o2_mmr = 0.2314 + socrates_opt%cfc12_mmr = 0.0 + socrates_opt%cfc11_mmr = 0.0 + socrates_opt%cfc113_mmr = 0.0 + socrates_opt%cfc114_mmr = 0.0 + socrates_opt%hcfc22_mmr = 0.0 + socrates_opt%hfc125_mmr = 0.0 + socrates_opt%hfc134a_mmr = 0.0 + end if + end subroutine set_and_test_socrates_monc_options diff --git a/components/socrates_couple/src/socrates_monc_interface/lw_rad_input_mod.F90 b/components/socrates_couple/src/socrates_monc_interface/lw_rad_input_mod.F90 index 39f5cd5c..854797ad 100644 --- a/components/socrates_couple/src/socrates_monc_interface/lw_rad_input_mod.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/lw_rad_input_mod.F90 @@ -23,6 +23,8 @@ MODULE lw_rad_input_mod USE yomhook, ONLY: lhook, dr_hook USE parkind1, ONLY: jprb, jpim USE errormessagelength_mod, ONLY: errormessagelength +use optionsdatabase_mod, only : options_get_logical + IMPLICIT NONE @@ -75,7 +77,18 @@ SUBROUTINE lw_input(current_state, lw_control) ! Set default values of control variables. -CALL lw_control_default(lw_control) + CALL lw_control_default(lw_control) + + ! Disable some longwave gases for RCEMIP + if (options_get_logical(current_state%options_database, "l_rcemip_gases")) then + lw_control%l_cfc11 = .FALSE. + lw_control%l_cfc12 = .FALSE. + lw_control%l_cfc113 = .FALSE. + lw_control%l_cfc114 = .FALSE. + lw_control%l_hcfc22 = .FALSE. + lw_control%l_hfc125 = .FALSE. + lw_control%l_hfc134a = .FALSE. + end if lw_control%spectral_file = & ADJUSTL(options_get_string(current_state%options_database, "spectral_file_lw")) diff --git a/components/socrates_couple/src/socrates_monc_interface/mcclatchey_profiles.F90 b/components/socrates_couple/src/socrates_monc_interface/mcclatchey_profiles.F90 index 5b51ed47..d64a8a4a 100644 --- a/components/socrates_couple/src/socrates_monc_interface/mcclatchey_profiles.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/mcclatchey_profiles.F90 @@ -246,7 +246,7 @@ subroutine calculate_radiation_levels(current_state, mcc) real(kind=DEFAULT_PRECISION), parameter :: & fracdp = 0.75, & ! fraction of to dp which the 1st rad leevl can be from top - mindp = 2000., & + mindp = 2., & ! Minimum values dp in Pa maxdp = 10000. ! Maximum dp we will allow from top diff --git a/components/socrates_couple/src/socrates_monc_interface/merge_atm_data.F90 b/components/socrates_couple/src/socrates_monc_interface/merge_atm_data.F90 index 8cd09c44..b87f4891 100644 --- a/components/socrates_couple/src/socrates_monc_interface/merge_atm_data.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/merge_atm_data.F90 @@ -7,6 +7,8 @@ module merge_atm_data use def_merge_atm, only: str_merge_atm use def_mcc_profiles, only: str_mcc_profiles use def_socrates_derived_fields, only: str_socrates_derived_fields + use optionsdatabase_mod, only : options_get_logical + use rcemip_mod, only : rcemip_ozone implicit none @@ -99,7 +101,7 @@ subroutine merge_data(current_state, socrates_opt, socrates_derived_fields, merg current_state%q(socrates_opt%inl)%data(k_top+2-k, jcol, icol) else merge_fields%cloudnumber_n(k+mcc%cut) = & - socrates_opt%fixed_cloud_number*1.e6 ! convert to number per m3 + socrates_opt%fixed_cloud_number ! input number per m3 endif endif endif @@ -181,7 +183,6 @@ subroutine merge_data(current_state, socrates_opt, socrates_derived_fields, merg ! Now sort the Ozone profile which only exists on ! McClatchey levels, so needs to be merged on to MONC ! levels. Check this code!! - do k=k_top+mcc%cut,mcc%cut,-1 if (merge_fields%pres_level(k).gt.mcc%p_level(mcc%levs)) then merge_fields%o3_n(k) = mcc%o3_n(mcc%levs) @@ -195,6 +196,11 @@ subroutine merge_data(current_state, socrates_opt, socrates_derived_fields, merg endif enddo + ! If running the RCEMIP case, overwrite the ozone profile with a prescribed + ! function of pressure. + if (options_get_logical(current_state%options_database, "l_rcemip_ozone")) & + call rcemip_ozone(merge_fields) + ! mass of the atmosphere on irad_levs for set_atm do k=1, mcc%irad_levs merge_fields%mass(k) = & diff --git a/components/socrates_couple/src/socrates_monc_interface/rad_ctl_mod.F90 b/components/socrates_couple/src/socrates_monc_interface/rad_ctl_mod.F90 index c51463b8..52c3d87f 100644 --- a/components/socrates_couple/src/socrates_monc_interface/rad_ctl_mod.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/rad_ctl_mod.F90 @@ -27,7 +27,7 @@ subroutine rad_ctl(current_state, sw_spectrum, lw_spectrum, & use def_socrates_options, only: str_socrates_options use def_socrates_derived_fields, only: str_socrates_derived_fields use science_constants_mod, only: cp - use rad_pcf, only: ip_solar, ip_infra_red + use rad_pcf, only: ip_solar, ip_infra_red, ip_clcmp_st_water type(model_state_type), target, intent(inout) :: current_state TYPE (StrSpecData) :: sw_spectrum @@ -201,20 +201,24 @@ subroutine rad_ctl(current_state, sw_spectrum, lw_spectrum, & ! NB: the +2 is becasue n=1 is below the surface (comment from LEM) current_state%sth_lw%data(2:k_top,jcol, icol) = & merge_fields%lw_heat_rate_radlevs(mcc%irad_levs:mcc%irad_levs+2-k_top:-1) + + socrates_derived_fields%lwrad_hr(:,target_y_index, target_x_index) = & + current_state%sth_lw%data(:,jcol, icol) ! heating rate [abs temp/sec] + ! convert dT/dt to dTH/dt current_state%sth_lw%data(:, jcol, icol) = & current_state%sth_lw%data(:, jcol, icol)* & current_state%global_grid%configuration%vertical%prefrcp(:) - socrates_derived_fields%lwrad_hr(:,target_y_index, target_x_index) = & - current_state%sth_lw%data(:,jcol, icol) - do k = 1, k_top socrates_derived_fields%flux_up_lw(k,target_y_index, target_x_index) = & radout%flux_up(1,mcc%irad_levs+1-k,1) socrates_derived_fields%flux_down_lw(k,target_y_index, target_x_index) = & radout%flux_down(1,mcc%irad_levs+1-k,1) + + socrates_derived_fields%cloud_reff(k,target_y_index, target_x_index) = & + cld%condensed_dim_char(1, mcc%irad_levs+1-k, ip_clcmp_st_water) enddo socrates_derived_fields%totrad_hr(:,target_y_index, target_x_index) = & diff --git a/components/socrates_couple/src/socrates_monc_interface/set_atm.F90 b/components/socrates_couple/src/socrates_monc_interface/set_atm.F90 index f89a2334..ff3715a5 100644 --- a/components/socrates_couple/src/socrates_monc_interface/set_atm.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/set_atm.F90 @@ -126,11 +126,4 @@ SUBROUTINE set_atm( & END DO END DO -!print *, 'vapour, co2, o3, n2o, ch4' - -!DO k=1, atm%n_layer -! print *, k, atm%gas_mix_ratio(1, k, 1),atm%gas_mix_ratio(1, k, 2), atm%gas_mix_ratio(1, k, 3), & -! atm%gas_mix_ratio(1, k, 4), atm%gas_mix_ratio(1, k, 5) -!enddo - END SUBROUTINE set_atm diff --git a/components/socrates_couple/src/socrates_monc_interface/set_cld.F90 b/components/socrates_couple/src/socrates_monc_interface/set_cld.F90 index 378adf3b..635f70fa 100644 --- a/components/socrates_couple/src/socrates_monc_interface/set_cld.F90 +++ b/components/socrates_couple/src/socrates_monc_interface/set_cld.F90 @@ -259,11 +259,16 @@ SUBROUTINE set_cld( & ! Find the total mixing ratio of water substance in the cloud. DO l=1, n_profile cld%condensed_dim_char(l, j, ip_clcmp_cnv_water) = 0.0_DEFAULT_PRECISION + if (merge_fields%cloudnumber_n(j) > 1.e-6) then ! add arbitrary threshold to stop + ! divide by zero cld%condensed_dim_char(l, j, ip_clcmp_st_water) = MAX(0.0_DEFAULT_PRECISION, & - 3.0_DEFAULT_PRECISION*cld%condensed_mix_ratio(l, j, ip_clcmp_st_water) & + (3.0_DEFAULT_PRECISION*cld%condensed_mix_ratio(l, j, ip_clcmp_st_water) & *atm%density(l, j)/(4.0_DEFAULT_PRECISION*pi*socrates_opt%rho_water* & - socrates_opt%kparam*merge_fields%cloudnumber_n(j)) & + socrates_opt%kparam*merge_fields%cloudnumber_n(j))) & **(1.0_DEFAULT_PRECISION/3.0_DEFAULT_PRECISION)) + else + cld%condensed_dim_char(l, j, ip_clcmp_st_water) = 0.0_DEFAULT_PRECISION + endif END DO END DO END IF diff --git a/components/stepfields/src/stepfields.F90 b/components/stepfields/src/stepfields.F90 index e64386dd..9e1d3149 100644 --- a/components/stepfields/src/stepfields.F90 +++ b/components/stepfields/src/stepfields.F90 @@ -44,8 +44,6 @@ module stepfields_mod l_tend_pr_tot_tabs ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency - public stepfields_get_descriptor @@ -107,21 +105,21 @@ subroutine initialisation_callback(current_state) l_qdiag = (.not. current_state%passive_q .and. current_state%number_q_fields .gt. 0) l_tend_pr_tot_th = current_state%th%active - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_th = current_state%th%active .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th ! Allocate 3d tendency fields upon availability @@ -198,9 +196,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -238,16 +233,23 @@ subroutine timestep_callback(current_state) integer :: iq integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + integer :: compare_timestep ! timestep adusted in the case of reconfiguration to keep same cfl interval + + compare_timestep = current_state%timestep + current_state%reconfig_timestep_offset + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y target_y_index=current_y_index-current_state%local_grid%halo_size(Y_INDEX) target_x_index=current_x_index-current_state%local_grid%halo_size(X_INDEX) - if (cfl_is_enabled .and. current_state%first_timestep_column) then - if (mod(current_state%timestep, current_state%cfl_frequency) == 1 .or. & - current_state%timestep-current_state%start_timestep .le. current_state%cfl_frequency) then + if ((mod(compare_timestep, current_state%cfl_frequency) == 1 & + .or. compare_timestep - current_state%start_timestep .le. current_state%cfl_frequency) & + .or. compare_timestep .ge. (current_state%last_cfl_timestep + current_state%cfl_frequency)) then determine_flow_minmax=.true. call reset_local_minmax_values(current_state) else @@ -304,9 +306,8 @@ subroutine timestep_callback(current_state) endif endif ! zero totals - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback @@ -355,6 +356,12 @@ subroutine step_all_fields(current_state) current_state%field_stepping == CENTRED_STEPPING) end if end do + do i=1,current_state%n_tracers + call step_single_field(current_state%column_local_x, current_state%column_local_y, x_prev, y_prev, & + current_state%tracer(i), current_state%ztracer(i), current_state%stracer(i), current_state%local_grid, .false., & + current_state%field_stepping, current_state%dtm, real(0., kind=DEFAULT_PRECISION), c1, c2, & + current_state%field_stepping == CENTRED_STEPPING) + end do end subroutine step_all_fields !> Determines the minimum and maximum values for the local flow field. These are before the stepping, and are all reduced diff --git a/components/steppingdirection/src/steppingdirection.F90 b/components/steppingdirection/src/steppingdirection.F90 index 1c92cf9f..bb896097 100644 --- a/components/steppingdirection/src/steppingdirection.F90 +++ b/components/steppingdirection/src/steppingdirection.F90 @@ -42,6 +42,9 @@ subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state current_state%field_stepping = CENTRED_STEPPING - if (current_state%timestep .eq. current_state%start_timestep) current_state%field_stepping = FORWARD_STEPPING + if (current_state%timestep .eq. current_state%start_timestep) then + current_state%field_stepping = FORWARD_STEPPING + if (current_state%reconfig_run) current_state%field_stepping = CENTRED_STEPPING + end if end subroutine timestep_callback end module steppingdirection_mod diff --git a/components/subgrid_profile_diagnostics/src/subgrid_profile_diagnostics.F90 b/components/subgrid_profile_diagnostics/src/subgrid_profile_diagnostics.F90 index c8a0173c..c193bff0 100644 --- a/components/subgrid_profile_diagnostics/src/subgrid_profile_diagnostics.F90 +++ b/components/subgrid_profile_diagnostics/src/subgrid_profile_diagnostics.F90 @@ -47,8 +47,6 @@ module subgrid_profile_diagnostics_mod real(kind=DEFAULT_PRECISION) :: a2_n, ath2_n, pr_n, ri_crit real(kind=DEFAULT_PRECISION) :: qlcrit - integer :: diagnostic_generation_frequency - type(vertical_grid_configuration_type) :: vertical_grid logical :: l_lem_dissipation_rate = .true. @@ -188,7 +186,6 @@ subroutine initialisation_callback(current_state) allocate(wqg_sg_tot(current_state%local_grid%size(Z_INDEX))) endif - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") l_lem_dissipation_rate=options_get_logical(current_state%options_database, "l_lem_dissipation_rate") end subroutine initialisation_callback @@ -214,13 +211,14 @@ subroutine timestep_callback(current_state) logical :: use_Ri_for_buoyant_prod=.TRUE. + if (.not. current_state%diagnostic_sample_timestep) return + C_virtual = (ratio_mol_wts-1.0_DEFAULT_PRECISION) jcol=current_state%column_local_y icol=current_state%column_local_x target_y_index=jcol-current_state%local_grid%halo_size(Y_INDEX) target_x_index=icol-current_state%local_grid%halo_size(X_INDEX) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then if (current_state%first_timestep_column) then sed_tot(:) = 0.0_DEFAULT_PRECISION ssub_tot(:) = 0.0_DEFAULT_PRECISION @@ -513,7 +511,7 @@ subroutine timestep_callback(current_state) S23(k) enddo - do k=2,current_state%local_grid%size(Z_INDEX)-1 + do k=2,current_state%local_grid%size(Z_INDEX) tau33_on_p(k) = current_state%global_grid%configuration%vertical%rhon(k) * 0.5 *& (current_state%vis_coefficient%data(k-1,jcol,icol) + & current_state%vis_coefficient%data(k, jcol,icol)) * & @@ -806,7 +804,7 @@ subroutine timestep_callback(current_state) ! *********************** Subgrid shear production*************************** ! Note - calculating on z levels (i.e. w) ! - do k=2,current_state%local_grid%size(Z_INDEX)-1 + do k=2,current_state%local_grid%size(Z_INDEX)-2 !Subgrid shear------- @@ -848,7 +846,7 @@ subroutine timestep_callback(current_state) ! Note - calculating on z levels (i.e. w) ! so need u_i_prime_tau_i on p levels - do k=2, current_state%local_grid%size(Z_INDEX) + do k=2, current_state%local_grid%size(Z_INDEX)-1 u_i_prime_tau_i(k) = ( 0.5_DEFAULT_PRECISION * & (current_state%u%data(k,jcol,icol-1) + & @@ -894,7 +892,7 @@ subroutine timestep_callback(current_state) current_state%global_grid%configuration%vertical%zn(2) - do k=2, current_state%local_grid%size(Z_INDEX)-1 + do k=2, current_state%local_grid%size(Z_INDEX)-2 sed_tot(k)=sed_tot(k) + (u_i_prime_tau_i(k+1)-u_i_prime_tau_i(k)) * & current_state%global_grid%configuration%vertical%rdzn(k+1) / & current_state%global_grid%configuration%vertical%rho(k) @@ -905,7 +903,6 @@ subroutine timestep_callback(current_state) ! ======================================================= endif ! (.not. current_state%halo_column) - endif ! ( if diagnostic frequency step ) end subroutine timestep_callback !> Field information retrieval callback, this returns information for a specific components published field diff --git a/components/swapsmooth/src/swapsmooth.F90 b/components/swapsmooth/src/swapsmooth.F90 index ad5a6e7c..8745ab2c 100644 --- a/components/swapsmooth/src/swapsmooth.F90 +++ b/components/swapsmooth/src/swapsmooth.F90 @@ -121,6 +121,11 @@ subroutine swap_and_smooth_classic(current_state, old_smoother) current_state%zq(n)%data(k,y_index,x_index)=existing_value - current_state%q(n)%data(k,y_index,x_index) end if end do + do n=1,current_state%n_tracers + existing_value = current_state%tracer(n)%data(k,y_index,x_index) + current_state%ztracer(n)%data(k,y_index,x_index) + current_state%tracer(n)%data(k,y_index,x_index)=existing_value * c1 + current_state%tracer(n)%data(k,y_index,x_index) * c2 + current_state%ztracer(n)%data(k,y_index,x_index)=existing_value - current_state%tracer(n)%data(k,y_index,x_index) + end do end do end subroutine swap_and_smooth_classic @@ -172,6 +177,12 @@ subroutine swap_and_smooth_robert_filter(current_state) current_state%q(n)%data(k,y_index,x_index)=existing_value end if end do + do n=1,current_state%n_tracers + existing_value = current_state%ztracer(n)%data(k,y_index,x_index) + current_state%ztracer(n)%data(k,y_index,x_index)=current_state%tracer(n)%data(k,y_index,x_index)+& + current_state%tsmth * existing_value + current_state%tracer(n)%data(k,y_index,x_index)=existing_value + end do end do end subroutine swap_and_smooth_robert_filter diff --git a/components/terminationcheck/src/terminationcheck.F90 b/components/terminationcheck/src/terminationcheck.F90 index 712deef5..a3137175 100644 --- a/components/terminationcheck/src/terminationcheck.F90 +++ b/components/terminationcheck/src/terminationcheck.F90 @@ -5,7 +5,8 @@ module terminationcheck_mod use monc_component_mod, only : component_descriptor_type use state_mod, only : model_state_type, TIME_TERMINATION_REASON, TIMESTEP_TERMINATION_REASON, MESSAGE_TERMINATION_REASON, & WALLTIME_TERMINATION_REASON - use conversions_mod, only : conv_single_real_to_double, conv_to_integer, conv_to_string + use conversions_mod, only : conv_single_real_to_double, conv_to_integer, conv_to_string,& + conv_to_lowercase use optionsdatabase_mod, only : options_get_integer, options_has_key, options_get_real, options_add, options_get_string use logging_mod, only : LOG_WARN, log_master_log use mpi, only : MPI_INT, MPI_LOGICAL, MPI_IN_PLACE, MPI_LOR, mpi_wtime @@ -49,7 +50,7 @@ subroutine init_callback(current_state) messages_file_name=options_get_string(current_state%options_database, "msg_filename") check_walltime_frequency=options_get_integer(current_state%options_database, "check_walltime_frequency") walltime_string=options_get_string(current_state%options_database, "walltime_limit") - check_for_walltime=trim(walltime_string) /= "none" + check_for_walltime=conv_to_lowercase(trim(walltime_string)) /= "none" if (check_for_walltime) then pidx=1 mangled=.false. diff --git a/components/thadvection/src/thadvection.F90 b/components/thadvection/src/thadvection.F90 index 6c29e48a..4a88a4a0 100644 --- a/components/thadvection/src/thadvection.F90 +++ b/components/thadvection/src/thadvection.F90 @@ -28,9 +28,6 @@ module thadvection_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tend_pr_tot_th, tend_pr_tot_tabs logical :: l_tend_pr_tot_th, l_tend_pr_tot_tabs - integer :: diagnostic_generation_frequency - - public thadvection_get_descriptor contains @@ -69,7 +66,7 @@ subroutine initialisation_callback(current_state) if (current_state%passive_q) then l_advect_mean_baroclinicity = .true. else - call log_master_log(LOG_WARN, "The combination if baroclinicity and active q is not allowed, code will run but"// & + call log_master_log(LOG_WARN, "The combination of baroclinicity and active q is not allowed, code will run but"// & " no advection of mean baroclinicity") l_advect_mean_baroclinicity = .false. endif @@ -110,9 +107,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback @@ -134,8 +128,11 @@ end subroutine finalisation_callback !! not include halos and to prevent array out-of-bounds subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -152,16 +149,14 @@ subroutine timestep_callback(current_state) endif endif ! zero totals - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) call vertical_advection_of_reference_state(current_state, current_state%column_local_y, current_state%column_local_x) call advection_of_mean_baroclinicity(current_state, current_state%column_local_y, current_state%column_local_x) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. .not. current_state%halo_column) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/tracers/src/tracers.F90 b/components/tracers/src/tracers.F90 new file mode 100644 index 00000000..e9a9d765 --- /dev/null +++ b/components/tracers/src/tracers.F90 @@ -0,0 +1,290 @@ +!> Description of what the component does. +!! Add as much information as is sensible. +module tracers_mod + + !> tracers source code for a new component + + use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH + use logging_mod, only : LOG_INFO, LOG_ERROR, log_master_log + use optionsdatabase_mod, only : options_get_integer, options_get_logical, options_get_real, & + options_get_integer_array, options_get_real_array, options_get_string + use conversions_mod, only : conv_to_string + use monc_component_mod, only : component_descriptor_type + use state_mod, only : model_state_type + use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX + + implicit none + +#ifndef TEST_MODE + private +#endif + !> Parameter values which determine type of surface bc for tracers + integer, parameter, public :: TRACER_SURFACE_FLUX_FROM_DECAY=0, TRACER_SURFACE_FLUX_SPECIFIED=1, TRACER_SURFACE_VALUE_SPECIFIED=2 + logical, public :: tracers_enabled=.false., trajectories_enabled=.false., radioactive_tracers_enabled=.false. + integer, public :: traj_interval + + public tracers_get_descriptor, reinitialise_trajectories, get_tracer_name, get_tracer_options + +contains + + !> Provides a description of this component for the core to register + !! @returns The descriptor containing registration information for this component + type(component_descriptor_type) function tracers_get_descriptor() + tracers_get_descriptor%name="tracers" + tracers_get_descriptor%version=0.1 + tracers_get_descriptor%initialisation=>initialisation_callback + tracers_get_descriptor%timestep=>timestep_callback + tracers_get_descriptor%finalisation=>finalisation_callback + end function tracers_get_descriptor + + !> Initialisation callback hook which will do nothing. + !! @param current_state The current model state + subroutine initialisation_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + + end subroutine initialisation_callback + + !> Timestep callback hook which will + !! @param current_state The current model state + subroutine timestep_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + if (current_state%n_radioactive_tracers >0) then + call tracer_decay(current_state) + end if + end subroutine timestep_callback + + !> Finalisation callback hook which will + !! @param current_state The current model state + subroutine finalisation_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + + end subroutine finalisation_callback + + !> Compute decay of radioactive tracers. + !! @param current_state The current model state + subroutine tracer_decay(current_state) + type(model_state_type), intent(inout), target :: current_state + + REAL(kind=DEFAULT_PRECISION) :: kdecay + REAL(kind=DEFAULT_PRECISION), PARAMETER :: sec_in_hour=3600.0 + + integer :: current_y_index, current_x_index, n + + current_y_index=current_state%column_local_y + current_x_index=current_state%column_local_x + + ! Decay of radioactive tracers + if (current_state%n_radioactive_tracers .gt. 0) then + do n=current_state%radioactive_tracer_index, current_state%radioactive_tracer_index + current_state%n_radioactive_tracers - 1 + kdecay = current_state%tracer_decay_rate(n-current_state%radioactive_tracer_index+1) / sec_in_hour + current_state%stracer(n)%data(:, current_y_index, current_x_index) = & + current_state%stracer(n)%data(:, current_y_index, current_x_index) - & + kdecay * current_state%tracer(n)%data(:, current_y_index, current_x_index) + end do + end if + + end subroutine tracer_decay + + + !> Reinitialise trajectory tracers to position in model. + !! @param current_state The current model state + subroutine reinitialise_trajectories(current_state) + use science_constants_mod, only : pi + type(model_state_type), intent(inout), target :: current_state + integer :: i, j, k, offset + REAL(kind=DEFAULT_PRECISION) :: phase_factor + REAL(kind=DEFAULT_PRECISION),dimension(current_state%local_grid%size(Z_INDEX)+current_state%local_grid%halo_size(Z_INDEX)*2, & + current_state%local_grid%size(Y_INDEX)+current_state%local_grid%halo_size(Y_INDEX)*2, & + current_state%local_grid%size(X_INDEX)+current_state%local_grid%halo_size(X_INDEX)*2) & + :: diffr_copy, diffi_copy + + LOGICAL, PARAMETER :: usecyclic_x=.TRUE., usecyclic_y=.TRUE., usezn=.FALSE. + INTEGER :: ixr, ixi, iyr, iyi, iz + REAL :: reinit_time + + if (current_state%timestep == 1) then + reinit_time = current_state%time + else + reinit_time = current_state%time + current_state%dtm + end if + + call log_master_log(LOG_INFO, "[TRACERS] Reinitialise trajectories"// & + " timestep: "//trim(conv_to_string(current_state%timestep))// & + " time: "//trim(conv_to_string(reinit_time,5)) ) + + ixr = current_state%traj_tracer_index + ixi = ixr+1 + iyr = ixr+2 + iyi = ixr+3 + iz = ixr+4 + + if (current_state%tracer(ixr)%active) then + diffr_copy = current_state%ztracer(ixr)%data(:,:,:)-current_state%tracer(ixr)%data(:,:,:) + diffi_copy = current_state%ztracer(ixi)%data(:,:,:)-current_state%tracer(ixi)%data(:,:,:) + ! Start at 0 + offset = current_state%local_grid%start(X_INDEX)-1-(1 + current_state%local_grid%halo_size(X_INDEX)) + if (usecyclic_x) then + phase_factor = 2.0_DEFAULT_PRECISION * pi / current_state%global_grid%size(X_INDEX) + do i=current_state%local_grid%local_domain_start_index(X_INDEX) - current_state%local_grid%halo_size(X_INDEX),& + current_state%local_grid%local_domain_end_index(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) + current_state%tracer(ixr)%data(:,:,i) = COS( phase_factor * ( offset + i ) ) + current_state%ztracer(ixr)%data(:,:,i) = COS( phase_factor * ( offset + i ) ) + current_state%tracer(ixi)%data(:,:,i) = SIN( phase_factor * ( offset + i ) ) + current_state%ztracer(ixi)%data(:,:,i) = SIN( phase_factor * ( offset + i ) ) + end do +! end if + else + ! Start at 0 + offset = current_state%local_grid%start(X_INDEX) - 1 - current_state%local_grid%halo_size(X_INDEX)- 1 + do i = current_state%local_grid%local_domain_start_index(X_INDEX) - current_state%local_grid%halo_size(X_INDEX),& + current_state%local_grid%local_domain_end_index(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) + current_state%tracer(ixr)%data(:,:,i) = offset + i + current_state%ztracer(ixr)%data(:,:,i) = offset + i + current_state%tracer(ixi)%data(:,:,i) = offset + i + current_state%ztracer(ixi)%data(:,:,i) = offset + i + end do + end if + current_state%ztracer(ixr)%data(:,:,:) = current_state%tracer(ixr)%data(:,:,:) + diffr_copy + current_state%ztracer(ixi)%data(:,:,:) = current_state%tracer(ixi)%data(:,:,:) + diffi_copy +! end if + end if + + if (current_state%tracer(iyr)%active) then +! if (.not. current_state%continuation_run) then + diffr_copy = current_state%ztracer(iyr)%data(:,:,:)-current_state%tracer(iyr)%data(:,:,:) + diffi_copy = current_state%ztracer(iyi)%data(:,:,:)-current_state%tracer(iyi)%data(:,:,:) + ! Start at 0 + offset = current_state%local_grid%start(Y_INDEX) -1 - (1 + current_state%local_grid%halo_size(Y_INDEX)) + if (usecyclic_y) then +! offset = -current_state%local_grid%start(Y_INDEX) + phase_factor = 2.0_DEFAULT_PRECISION * pi / current_state%global_grid%size(Y_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX) - current_state%local_grid%halo_size(Y_INDEX), & + current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) + current_state%tracer(iyr)%data(:,j,:) = COS( phase_factor * ( offset + j ) ) + current_state%ztracer(iyr)%data(:,j,:) = COS( phase_factor * ( offset + j ) ) + current_state%tracer(iyi)%data(:,j,:) = SIN( phase_factor * ( offset + j ) ) + current_state%ztracer(iyi)%data(:,j,:) = SIN( phase_factor * ( offset + j ) ) + end do + else + do j=current_state%local_grid%local_domain_start_index(Y_INDEX) - current_state%local_grid%halo_size(Y_INDEX), & + current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) + current_state%tracer(iyr)%data(:,j,:) = offset + j + current_state%ztracer(iyr)%data(:,j,:) = offset + j + current_state%tracer(iyi)%data(:,j,:) = offset + j + current_state%ztracer(iyi)%data(:,j,:) = offset + j + end do + end if + current_state%ztracer(iyr)%data(:,:,:) = current_state%tracer(iyr)%data(:,:,:) + diffr_copy + current_state%ztracer(iyi)%data(:,:,:) = current_state%tracer(iyi)%data(:,:,:) + diffi_copy +! end if + end if + + if (current_state%tracer(iz)%active)then +! if (.not. current_state%continuation_run) then + diffr_copy = current_state%ztracer(iz)%data(:,:,:)-current_state%tracer(iz)%data(:,:,:) + if (usezn) then + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%tracer(iz)%data(:,j,i) = current_state%global_grid%configuration%vertical%zn(:) + current_state%ztracer(iz)%data(:,j,i) = current_state%global_grid%configuration%vertical%zn(:) + end do + end do + else + ! start at 0 + offset = -1 + do k = 1, current_state%local_grid%size(Z_INDEX) + current_state%tracer(iz)%data(k,:,:) = offset + k + current_state%ztracer(iz)%data(k,:,:) = offset + k + end do + end if + current_state%ztracer(iz)%data(:,:,:) = current_state%tracer(iz)%data(:,:,:) + diffr_copy +! end if + end if + + end subroutine reinitialise_trajectories + + !> Get tracer options. + !! @param current_state The current model state + subroutine get_tracer_options(current_state) + type(model_state_type), intent(inout), target :: current_state + integer :: i_tracer + current_state%n_tracers = 0 + current_state%traj_tracer_index = 0 + current_state%n_radioactive_tracers = 0 + tracers_enabled = options_get_logical(current_state%options_database, "tracers_enabled") + + if (tracers_enabled) then + + call log_master_log(LOG_INFO, "Tracers enabled.") + + trajectories_enabled = options_get_logical(current_state%options_database, "trajectories_enabled") + if (trajectories_enabled) then + call log_master_log(LOG_INFO, "Trajectories enabled.") + current_state%n_tracers = 5 + current_state%traj_tracer_index = 1 + ! Obtain the output traj_interval value + traj_interval = nint(options_get_real(current_state%options_database, & + options_get_string(current_state%options_database,"traj_interval"))) + end if ! trajectories_enabled + + radioactive_tracers_enabled = options_get_logical(current_state%options_database, "radioactive_tracers_enabled") + + if (radioactive_tracers_enabled) then + + call log_master_log(LOG_INFO, "Radioactive Tracers enabled.") + current_state%n_radioactive_tracers = options_get_integer(current_state%options_database, "n_radioactive_tracers") + + if (current_state%n_radioactive_tracers > 0) then + + current_state%radioactive_tracer_index = current_state%n_tracers + 1 + current_state%n_tracers = current_state%n_tracers + current_state%n_radioactive_tracers + + allocate(current_state%tracer_decay_rate(current_state%n_radioactive_tracers)) + call options_get_real_array(current_state%options_database,"tracer_decay_rate",current_state%tracer_decay_rate) + allocate(current_state%tracer_surf_bc_opt(current_state%n_radioactive_tracers)) + current_state%tracer_surf_bc_opt(:) = 0 + call options_get_integer_array(current_state%options_database, "tracer_surface_bc_option", & + current_state%tracer_surf_bc_opt) + allocate(current_state%tracer_surf_bc(current_state%n_radioactive_tracers)) + call options_get_real_array(current_state%options_database,"tracer_surface_bc",current_state%tracer_surf_bc) + if (current_state%parallel%my_rank == 0 ) then + do i_tracer = 1,current_state%n_radioactive_tracers + call log_master_log(LOG_INFO, "Tracer "//trim(conv_to_string(i_tracer))// & + " decay rate = "//trim(conv_to_string(current_state%tracer_decay_rate(i_tracer),5))// & + " surface bc type = "//trim(conv_to_string(current_state%tracer_surf_bc_opt(i_tracer)))// & + " surface bc value = "//trim(conv_to_string(current_state%tracer_surf_bc(i_tracer),5))) + if (current_state%tracer_surf_bc_opt(i_tracer) < 0 .or. current_state%tracer_surf_bc_opt(i_tracer) > 2) then + call log_master_log(LOG_ERROR, "Radioactive tracer with illegal surface bc option.") + end if + end do + end if + else + + call log_master_log(LOG_ERROR, "Cannot run with less than 1 radioactive tracer with radioactive tracers enabled") + + end if ! n_radioactive_tracers > 0 + + end if ! radioactive_tracers_enabled + + if (current_state%n_tracers <= 0) then + call log_master_log(LOG_ERROR, "Cannot run with less than 1 tracer with Tracers enabled") + end if + + end if ! tracers_enabled + end subroutine get_tracer_options + + function get_tracer_name(i, traj_tracer_index, radioactive_tracer_index, n_radioactive_tracers, n_tracers) + integer, intent(in) :: i, traj_tracer_index, radioactive_tracer_index, n_radioactive_tracers, n_tracers + character(len=STRING_LENGTH) :: get_tracer_name + character(len=2), dimension(5), parameter :: traj_name = ["xr","xi","yr","yi","zr"] + if (traj_tracer_index .gt. 0 .and. i .lt. (traj_tracer_index+5)) then + get_tracer_name = "traj_"//traj_name(i - traj_tracer_index + 1) + else if (n_radioactive_tracers .gt. 0 .and. i .ge. radioactive_tracer_index .and. & + i .lt. (radioactive_tracer_index + n_radioactive_tracers)) then + get_tracer_name = "rad"//trim(conv_to_string(i-radioactive_tracer_index+1)) + else + get_tracer_name = "_"//trim(conv_to_string(i)) + end if + end function get_tracer_name + +end module tracers_mod diff --git a/components/tvdadvection/src/def_tvd_diagnostic_terms.F90 b/components/tvdadvection/src/def_tvd_diagnostic_terms.F90 index 4e20f6cd..1de7f868 100644 --- a/components/tvdadvection/src/def_tvd_diagnostic_terms.F90 +++ b/components/tvdadvection/src/def_tvd_diagnostic_terms.F90 @@ -17,6 +17,7 @@ module def_tvd_diagnostic_terms real(kind=DEFAULT_PRECISION), dimension(:,:,:), allocatable :: adv_th_dgs real(kind=DEFAULT_PRECISION), dimension(:,:,:,:), allocatable :: adv_q_dgs + real(kind=DEFAULT_PRECISION), dimension(:,:,:,:), allocatable :: adv_tracer_dgs end type str_tvd_diagnostic_terms @@ -52,6 +53,11 @@ subroutine allocate_tvd_diagnostic_terms(current_state, tvd_dgs_terms) tvd_dgs_terms%adv_q_dgs(:,:,:,:)= 0.0 endif + if (current_state%n_tracers > 0) then + allocate(tvd_dgs_terms%adv_tracer_dgs(k_top, y_local, x_local, current_state%n_tracers)) + tvd_dgs_terms%adv_tracer_dgs(:,:,:,:)= 0.0 + endif + end subroutine allocate_tvd_diagnostic_terms subroutine deallocate_tvd_diagnostic_terms(current_state, tvd_dgs_terms) @@ -67,6 +73,10 @@ subroutine deallocate_tvd_diagnostic_terms(current_state, tvd_dgs_terms) deallocate(tvd_dgs_terms%adv_q_dgs) endif + if (current_state%n_tracers > 0) then + deallocate(tvd_dgs_terms%adv_tracer_dgs) + endif + end subroutine deallocate_tvd_diagnostic_terms diff --git a/components/tvdadvection/src/tvdadvection.F90 b/components/tvdadvection/src/tvdadvection.F90 index 249143d0..a4f45cb5 100644 --- a/components/tvdadvection/src/tvdadvection.F90 +++ b/components/tvdadvection/src/tvdadvection.F90 @@ -25,10 +25,11 @@ module tvdadvection_mod type(grid_stencil_type), save :: star_stencil integer, save :: u_index=0, v_index=0, w_index=0 - logical :: advect_flow, advect_th, advect_q + logical :: advect_flow, advect_th, advect_q, advect_tracer real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: flux_x, flux_y, flux_z, u_advection, v_advection, & w_advection, th_advection real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: q_advection + real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: tracer_advection type(prognostic_field_type), dimension(:), allocatable :: interpolated_fields @@ -51,7 +52,6 @@ module tvdadvection_mod l_tend_pr_tot_tabs ! q indices integer :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0 - integer :: diagnostic_generation_frequency public tvdadvection_get_descriptor @@ -68,12 +68,13 @@ type(component_descriptor_type) function tvdadvection_get_descriptor() tvdadvection_get_descriptor%field_value_retrieval=>field_value_retrieval_callback tvdadvection_get_descriptor%field_information_retrieval=>field_information_retrieval_callback - allocate(tvdadvection_get_descriptor%published_fields(5+11+11)) + allocate(tvdadvection_get_descriptor%published_fields(5+11+11+1)) tvdadvection_get_descriptor%published_fields(1)="u_advection" tvdadvection_get_descriptor%published_fields(2)="v_advection" tvdadvection_get_descriptor%published_fields(3)="w_advection" tvdadvection_get_descriptor%published_fields(4)="th_advection" tvdadvection_get_descriptor%published_fields(5)="q_advection" + tvdadvection_get_descriptor%published_fields(5+1)="tend_u_tvdadvection_3d_local" tvdadvection_get_descriptor%published_fields(5+2)="tend_v_tvdadvection_3d_local" @@ -98,6 +99,9 @@ type(component_descriptor_type) function tvdadvection_get_descriptor() tvdadvection_get_descriptor%published_fields(5+11+9)="tend_qs_tvdadvection_profile_total_local" tvdadvection_get_descriptor%published_fields(5+11+10)="tend_qg_tvdadvection_profile_total_local" tvdadvection_get_descriptor%published_fields(5+11+11)="tend_tabs_tvdadvection_profile_total_local" + + tvdadvection_get_descriptor%published_fields(5+11+11+1)="tracer_advection" + end function tvdadvection_get_descriptor @@ -116,11 +120,14 @@ subroutine field_information_retrieval_callback(current_state, name, field_infor field_information%data_type=COMPONENT_DOUBLE_DATA_TYPE if (name .eq. "q_advection") then field_information%number_dimensions=2 + else if (name .eq. "tracer_advection") then + field_information%number_dimensions=2 else field_information%number_dimensions=1 end if field_information%dimension_sizes(1)=current_state%local_grid%size(Z_INDEX) if (name .eq. "q_advection") field_information%dimension_sizes(2)=current_state%number_q_fields + if (name .eq. "tracer_advection") field_information%dimension_sizes(2)=current_state%n_tracers field_information%enabled=.true. ! Field information for 3d @@ -219,6 +226,8 @@ subroutine field_value_retrieval_callback(current_state, name, field_value) allocate(field_value%real_1d_array(size(th_advection)), source=th_advection) else if (name .eq. "q_advection") then allocate(field_value%real_2d_array(size(q_advection, 1), size(q_advection, 2)), source=q_advection) + else if (name .eq. "tracer_advection") then + allocate(field_value%real_2d_array(size(tracer_advection, 1), size(tracer_advection, 2)), source=tracer_advection) end if ! 3d Tendency Fields @@ -329,11 +338,13 @@ subroutine initialisation_callback(current_state) allocate(flux_x(current_state%global_grid%size(Z_INDEX))) allocate(u_advection(current_state%global_grid%size(Z_INDEX)), v_advection(current_state%global_grid%size(Z_INDEX)), & w_advection(current_state%global_grid%size(Z_INDEX)), th_advection(current_state%global_grid%size(Z_INDEX)), & - q_advection(current_state%global_grid%size(Z_INDEX), current_state%number_q_fields)) + q_advection(current_state%global_grid%size(Z_INDEX), current_state%number_q_fields), & + tracer_advection(current_state%global_grid%size(Z_INDEX), current_state%n_tracers)) advect_flow=determine_if_advection_here(options_get_string(current_state%options_database, "advection_flow_fields")) advect_th=determine_if_advection_here(options_get_string(current_state%options_database, "advection_theta_field")) advect_q=determine_if_advection_here(options_get_string(current_state%options_database, "advection_q_fields")) + advect_tracer=determine_if_advection_here(options_get_string(current_state%options_database, "advection_theta_field")) ! Set tendency diagnostic logicals based on availability ! Need to use 3d tendencies to compute the profiles, so they will be allocated @@ -344,24 +355,24 @@ subroutine initialisation_callback(current_state) l_tend_pr_tot_v = current_state%v%active .and. advect_flow l_tend_pr_tot_w = current_state%w%active .and. advect_flow l_tend_pr_tot_th = current_state%th%active .and. advect_th - l_tend_pr_tot_qv = l_qdiag .and. current_state%number_q_fields .ge. 1 - l_tend_pr_tot_ql = l_qdiag .and. current_state%number_q_fields .ge. 2 - l_tend_pr_tot_qi = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qr = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qs = l_qdiag .and. current_state%number_q_fields .ge. 11 - l_tend_pr_tot_qg = l_qdiag .and. current_state%number_q_fields .ge. 11 + l_tend_pr_tot_qv = l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0 + l_tend_pr_tot_ql = l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0 + l_tend_pr_tot_qi = l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0 + l_tend_pr_tot_qr = l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0 + l_tend_pr_tot_qs = l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0 + l_tend_pr_tot_qg = l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0 l_tend_pr_tot_tabs = l_tend_pr_tot_th l_tend_3d_u = (current_state%u%active .and. advect_flow) .or. l_tend_pr_tot_u l_tend_3d_v = (current_state%v%active .and. advect_flow) .or. l_tend_pr_tot_v l_tend_3d_w = (current_state%w%active .and. advect_flow) .or. l_tend_pr_tot_w l_tend_3d_th = (current_state%th%active .and. advect_th) .or. l_tend_pr_tot_th - l_tend_3d_qv = (l_qdiag .and. current_state%number_q_fields .ge. 1) .or. l_tend_pr_tot_qv - l_tend_3d_ql = (l_qdiag .and. current_state%number_q_fields .ge. 2) .or. l_tend_pr_tot_ql - l_tend_3d_qi = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qi - l_tend_3d_qr = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qr - l_tend_3d_qs = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qs - l_tend_3d_qg = (l_qdiag .and. current_state%number_q_fields .ge. 11) .or. l_tend_pr_tot_qg + l_tend_3d_qv = (l_qdiag .and. current_state%water_vapour_mixing_ratio_index > 0) .or. l_tend_pr_tot_qv + l_tend_3d_ql = (l_qdiag .and. current_state%liquid_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_ql + l_tend_3d_qi = (l_qdiag .and. current_state%ice_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qi + l_tend_3d_qr = (l_qdiag .and. current_state%rain_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qr + l_tend_3d_qs = (l_qdiag .and. current_state%snow_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qs + l_tend_3d_qg = (l_qdiag .and. current_state%graupel_water_mixing_ratio_index > 0) .or. l_tend_pr_tot_qg l_tend_3d_tabs = l_tend_3d_th @@ -462,9 +473,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_tabs(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database,"sampling_frequency") - end subroutine initialisation_callback !> Frees up the memory associated with the advection @@ -482,6 +490,7 @@ subroutine finalisation_callback(current_state) if (allocated(w_advection)) deallocate(w_advection) if (allocated(th_advection)) deallocate(th_advection) if (allocated(q_advection)) deallocate(q_advection) + if (allocated(tracer_advection)) deallocate(tracer_advection) if (allocated(tend_3d_u)) deallocate(tend_3d_u) if (allocated(tend_3d_v)) deallocate(tend_3d_v) @@ -514,6 +523,10 @@ end subroutine finalisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state integer :: current_x_index, current_y_index, target_x_index, target_y_index + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep & + .and. .not. current_state%halo_column current_x_index=current_state%column_local_x current_y_index=current_state%column_local_y @@ -567,17 +580,16 @@ subroutine timestep_callback(current_state) .and. current_state%column_local_y .le. current_state%local_grid%local_domain_end_index(Y_INDEX)) )) return end if - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. (.not. current_state%halo_column) ) then - call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call save_precomponent_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) if (advect_flow) call advect_flow_fields(current_state) if (advect_th) call advect_theta(current_state) if (advect_q) call advect_q_fields(current_state) + if (advect_tracer) call advect_tracer_fields(current_state) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0 .and. (.not. current_state%halo_column) ) then - call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) - end if + if (calculate_diagnostics) & + call compute_component_tendencies(current_state, current_x_index, current_y_index, target_x_index, target_y_index) end subroutine timestep_callback @@ -657,6 +669,26 @@ subroutine advect_q_fields(current_state) end do end subroutine advect_q_fields + !> Advects the tracer fields + !! @param current_state The current model state_mod + subroutine advect_tracer_fields(current_state) + type(model_state_type), intent(inout) :: current_state + + integer :: i + real(kind=DEFAULT_PRECISION) :: dtm + + dtm = current_state%dtm*2.0_DEFAULT_PRECISION + if (current_state%scalar_stepping == FORWARD_STEPPING) dtm=current_state%dtm + + do i=1,current_state%n_tracers + call advect_scalar_field(current_state%column_local_y, current_state%column_local_x, dtm, current_state%u, & + current_state%v, current_state%w, current_state%ztracer(i), current_state%tracer(i), current_state%stracer(i), & + current_state%global_grid, current_state%local_grid, current_state%parallel, & + current_state%halo_column, current_state%field_stepping) + tracer_advection(:,i)=current_state%stracer(i)%data(:, current_state%column_local_y, current_state%column_local_x) + end do + end subroutine advect_tracer_fields + !> Advects the theta field if it is active !! @param current_state The current model state_mod subroutine advect_theta(current_state) diff --git a/components/viscosity/src/viscosity.F90 b/components/viscosity/src/viscosity.F90 index 4aa6111b..5eaf46c9 100644 --- a/components/viscosity/src/viscosity.F90 +++ b/components/viscosity/src/viscosity.F90 @@ -32,8 +32,6 @@ module viscosity_mod tend_pr_tot_u, tend_pr_tot_v, tend_pr_tot_w logical :: l_tend_pr_tot_u, l_tend_pr_tot_v, l_tend_pr_tot_w - integer :: diagnostic_generation_frequency - public viscosity_get_descriptor contains @@ -215,9 +213,6 @@ subroutine initialisation_callback(current_state) allocate( tend_pr_tot_w(current_state%local_grid%size(Z_INDEX)) ) endif - ! Save the sampling_frequency to force diagnostic calculation on select time steps - diagnostic_generation_frequency=options_get_integer(current_state%options_database, "sampling_frequency") - end subroutine initialisation_callback subroutine finalisation_callback(current_state) @@ -242,9 +237,12 @@ end subroutine finalisation_callback subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state - integer :: local_y, locaL_x, k, target_x_index, target_y_index + integer :: local_y, local_x, k, target_x_index, target_y_index real(kind=DEFAULT_PRECISION), dimension(current_state%local_grid%size(Z_INDEX)) :: tau12, tau12_ym1, tau12m1, & tau11, tau22, tau22_yp1, tau33, tau23_ym1, tau11p1, tau13, tau13m1, tau23 + logical :: calculate_diagnostics + + calculate_diagnostics = current_state%diagnostic_sample_timestep local_y=current_state%column_local_y local_x=current_state%column_local_x @@ -272,9 +270,7 @@ subroutine timestep_callback(current_state) perform_local_data_copy_for_vis, copy_halo_buffer_to_vis, copy_halo_buffer_to_vis_corners) end if - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call save_precomponent_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) if (current_state%field_stepping == FORWARD_STEPPING) then call calculate_tau(current_state, local_y, local_x, current_state%u, current_state%v, current_state%w, tau12, tau12_ym1, & @@ -286,9 +282,7 @@ subroutine timestep_callback(current_state) call calculate_viscous_sources(current_state, local_y, local_x, tau12, tau12_ym1, tau12m1, tau11, tau22, tau22_yp1, tau33, & tau11p1, tau13, tau13m1, tau23, tau23_ym1) - if (mod(current_state%timestep, diagnostic_generation_frequency) == 0) then - call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) - end if + if (calculate_diagnostics) call compute_component_tendencies(current_state, local_x, local_y, target_x_index, target_y_index) end subroutine timestep_callback diff --git a/components/xiosbridge/makefile b/components/xiosbridge/makefile new file mode 100644 index 00000000..8c0ec306 --- /dev/null +++ b/components/xiosbridge/makefile @@ -0,0 +1,14 @@ +SRCSF = src/xiosbridge.F90 + +BUILDDIR=build +COREDIR=../../core/build +FFLAGS=-I $(BUILDDIR) -I $(COREDIR) -I $(XIOS_DIR)/inc $(COMPILERFFLAGS) +OBJS = $(patsubst %.F90,$(BUILDDIR)/%.o,$(SRCSF)) + +all: create-build-dirs $(OBJS) + +create-build-dirs: + mkdir -p $(BUILDDIR) + +$(OBJS) : $(BUILDDIR)/%.o : %.F90 + $(FTN) $(OPT) $(FFLAGS) $< -o $(BUILDDIR)/$(notdir $@) diff --git a/components/xiosbridge/src/xiosbridge.F90 b/components/xiosbridge/src/xiosbridge.F90 new file mode 100644 index 00000000..4a38f730 --- /dev/null +++ b/components/xiosbridge/src/xiosbridge.F90 @@ -0,0 +1,154 @@ +module xiosbridge_mod + use monc_component_mod, only : component_descriptor_type + use state_mod, only : model_state_type + use grids_mod, only : global_grid_type, local_grid_type, & + X_INDEX, Y_INDEX, Z_INDEX + use xios, only : xios_initialize, xios_finalize, xios_duration, xios_context, & + xios_context_initialize, xios_get_handle, & + xios_set_current_context, xios_context_finalize, & + xios_close_context_definition, xios_set_timestep, & + xios_update_calendar, xios_set_axis_attr, xios_set_domain_attr, & + xios_send_field + use mpi + implicit none + +#ifndef TEST_MODE + private +#endif + + public xiosbridge_get_descriptor + + integer :: comm + +!! character(len=*), parameter :: id = "xios_monc" +!! character(len=*), parameter :: ctx = "checkpoint" +!! type(xios_duration) :: dtime +! !type(xios_context) :: ctx_hdl + +!!~ real (kind=8), allocatable :: lat_val(:), lon_val(:), lval(:) + + + +contains + + !> Provides the component descriptor for the core to register + !! @returns The descriptor describing this component + type(component_descriptor_type) function xiosbridge_get_descriptor() + xiosbridge_get_descriptor%name="xiosbridge" + xiosbridge_get_descriptor%version=0.1 + xiosbridge_get_descriptor%initialisation=>init_callback + xiosbridge_get_descriptor%timestep=>timestep_callback + xiosbridge_get_descriptor%finalisation=>finalisation_callback + end function xiosbridge_get_descriptor + + +!========================================================================================================================= +! !> Called on MONC initialisation +! !! @param current_state The current model stat + subroutine init_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state +!! type(global_grid_type) :: gg +!! type(local_grid_type) :: lg + +!! integer :: i + +!! gg = current_state%global_grid +!! lg = current_state%local_grid + +!! ! Initialisation goes here + print*, "MMRR1 calling xios init" +!! print*, "MMRR2 INDICES ", X_INDEX, Y_INDEX, Z_INDEX +!! print*, "MMRR2 global grid ", gg%size(X_INDEX), gg%size(Y_INDEX), gg%size(Z_INDEX) +!! print*, "MMRR3 local grid x", lg%local_domain_start_index(X_INDEX), lg%local_domain_end_index(X_INDEX) +!! print*, "MMRR4 local grid y", lg%local_domain_start_index(Y_INDEX), lg%local_domain_end_index(Y_INDEX) +!! print*, "MMRR5 local grid z", lg%local_domain_start_index(Z_INDEX), lg%local_domain_end_index(Z_INDEX) +!! print*, "MMRR6 local grid x, start, end, size", lg%start(X_INDEX), lg%end(X_INDEX), lg%size(X_INDEX) +!! print*, "MMRR7 local grid y, start, end, size", lg%start(Y_INDEX), lg%end(Y_INDEX), lg%size(Y_INDEX) +!! print*, "MMRR8 local grid z, start, end, size", lg%start(Z_INDEX), lg%end(Z_INDEX), lg%size(Z_INDEX) + +! comm = current_state%parallel%monc_communicator +! ! See pages 27-28 of XIOS Fortran reference guide +! call xios_initialize(id, local_comm=comm) +! call xios_context_initialize(ctx, comm) +!! call xios_get_handle(ctx, ctx_hdl) +!! call xios_set_current_context(ctx_hdl) + +!! allocate(lval(lg%size(Z_INDEX))) +!! do i = 1, lg%size(Z_INDEX) +!! lval(i) = i - 1 +!! end do +!! call xios_set_axis_attr("z_axis", size = gg%size(Z_INDEX), value = lval) + +!! allocate(lon_val(lg%size(X_INDEX)), lat_val(lg%size(Y_INDEX))) +!! do i = 1, lg%size(X_INDEX) +!! lon_val(i) = lg%start(X_INDEX) + i - 2 +!! end do +!! do i = 1, lg%size(Y_INDEX) +!! lat_val(i) = lg%start(Y_INDEX) + i - 2 +!! end do + +!! call xios_set_domain_attr("domain_A", data_dim = 2, & +!! ni_glo = gg%size(X_INDEX), & +!! ibegin = lg%start(X_INDEX), iend = lg%end(X_INDEX), & +!! data_ibegin = -lg%halo_size(X_INDEX), data_ni = lg%size(X_INDEX) + 2 * lg%halo_size(X_INDEX), & +!! nj_glo = gg%size(Y_INDEX), & +!! jbegin = lg%start(Y_INDEX), jend = lg%end(Y_INDEX), & +!! data_jbegin = -lg%halo_size(Y_INDEX), data_nj = lg%size(Y_INDEX) + 2 * lg%halo_size(Y_INDEX), & +!! lonvalue = lon_val, latvalue = lat_val & +!! ) + +! dtime%second = current_state%dtm +! call xios_set_timestep(dtime) + +! call xios_close_context_definition() + +!! call xios_update_calendar(current_state%timestep) + end subroutine init_callback + + !===================================================================== + subroutine timestep_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state +! !print*, "XIOS timestep callback" + +!!~ type(global_grid_type) :: gg +!!~ type(local_grid_type) :: lg + +!!~ real (kind=8), allocatable :: tmp(:,:,:) +!!~ integer :: i, k, nx, ny, nz + +!!~ gg = current_state%global_grid +!!~ lg = current_state%local_grid +!!~ nx = lg%size(X_INDEX) + 2 * lg%halo_size(X_INDEX) +!!~ ny = lg%size(Y_INDEX) + 2 * lg%halo_size(Y_INDEX) +!!~ nz = lg%size(Z_INDEX) +!!~ allocate(tmp(nx, ny, nz)) + +!!~ do i = 1, nx +!!~ do k = 1, nz +!!~ tmp(i, :, k) = current_state%u%data(k, :, i) +!!~ end do +!!~ end do + +!!~ ! Timestep stuff goes here +!!~ print*, "MMRR called xios timestep", & +!!~ current_state%timestep, current_state%dtm, current_state%time +! call xios_update_calendar(current_state%timestep) +!!~ call xios_send_field("u", tmp) + +!!~ deallocate(tmp) + + end subroutine timestep_callback + + !===================================================================== + subroutine finalisation_callback(current_state) + type(model_state_type), target, intent(inout) :: current_state + + print*, "XIOS Finalisation callback" + +!!~ ! Finalisation stuff here +!!~ print*, "MMRR calling xios finalisation" +! call xios_context_finalize() +!!~ deallocate(lat_val, lon_val, lval) +! call xios_finalize() + end subroutine finalisation_callback +end module xiosbridge_mod diff --git a/env/archer_cray_mod b/env/archer_cray_mod new file mode 100644 index 00000000..ebc2c84d --- /dev/null +++ b/env/archer_cray_mod @@ -0,0 +1,5 @@ +module swap PrgEnv-gnu PrgEnv-cray +module load cray-hdf5-parallel +module load cray-parallel-netcdf +module load cray-netcdf-hdf5parallel +module load petsc diff --git a/env/archer_gnu_mod b/env/archer_gnu_mod new file mode 100644 index 00000000..d3f71739 --- /dev/null +++ b/env/archer_gnu_mod @@ -0,0 +1,6 @@ +module swap PrgEnv-cray PrgEnv-gnu +module swap gcc/10.2.0 gcc/9.3.0 +module load cray-hdf5-parallel +module load cray-parallel-netcdf +module load cray-netcdf-hdf5parallel +module load petsc diff --git a/fcm-make/casim.cfg b/fcm-make/casim.cfg index 15a36e43..00b395f6 100644 --- a/fcm-make/casim.cfg +++ b/fcm-make/casim.cfg @@ -4,8 +4,8 @@ extract.ns = monc casim extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/petsc_solver/src/petsc_solver.F90 components/casim_profile_dgs/src/casim_profile_dgs_stub.F90 components/socrates_couple/src/socrates_couple.F90 extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 -extract.location{primary}[casim] = fcm:casim.x_tr -$casim_revision{?} = 6341 +extract.location{primary}[casim] = fcm:casim.xm_tr +$casim_revision{?} = 9796 extract.location[casim] = @$casim_revision extract.location{diff}[casim] = extract.path-incl[casim] = src diff --git a/fcm-make/casim_local_mo.cfg b/fcm-make/casim_local_mo.cfg deleted file mode 100644 index 86ab190e..00000000 --- a/fcm-make/casim_local_mo.cfg +++ /dev/null @@ -1,14 +0,0 @@ - -extract.ns = monc casim -#This will overide the default behaviour... - -extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/petsc_solver/src/petsc_solver.F90 -extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 - -extract.location{primary}[casim] = /data/local/fra23/CASIM/r3849_monc_casim_process_dgs_dev/ -$casim_revision{?} = -extract.location[casim] = -extract.location{diff}[casim] = -extract.path-incl[casim] = src -extract.path-excl[casim] = / -preprocess.prop{fpp.defs}[casim] = DEF_MODEL=MODEL_MONC MODEL_MONC=4 diff --git a/fcm-make/casim_local_vms.cfg b/fcm-make/casim_local_vms.cfg index 470bb4a0..2a06f8ed 100644 --- a/fcm-make/casim_local_vms.cfg +++ b/fcm-make/casim_local_vms.cfg @@ -5,9 +5,9 @@ extract.ns = monc casim extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/petsc_solver/src/petsc_solver.F90 extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 -extract.location{primary}[casim] = /home/vagrant/models/CASIM/r3849_monc_casim_process_dgs_dev/ -$casim_revision{?} = -extract.location[casim] = +extract.location{primary}[casim] = fcm:casim.xm_tr +$casim_revision{?} = 9796 +extract.location[casim] = @$casim_revision extract.location{diff}[casim] = extract.path-incl[casim] = src extract.path-excl[casim] = / diff --git a/fcm-make/casim_mirror.cfg b/fcm-make/casim_mirror.cfg index 37fa2491..00b395f6 100644 --- a/fcm-make/casim_mirror.cfg +++ b/fcm-make/casim_mirror.cfg @@ -5,7 +5,7 @@ extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/petsc extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 extract.location{primary}[casim] = fcm:casim.xm_tr -$casim_revision{?} = 6341 +$casim_revision{?} = 9796 extract.location[casim] = @$casim_revision extract.location{diff}[casim] = extract.path-incl[casim] = src diff --git a/fcm-make/casim_socrates.cfg b/fcm-make/casim_socrates.cfg index 38a164a4..457f2771 100644 --- a/fcm-make/casim_socrates.cfg +++ b/fcm-make/casim_socrates.cfg @@ -5,15 +5,15 @@ extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/socr extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 extract.location{primary}[casim] = fcm:casim.x_tr -$casim_revision{?} = 6341 -extract.location[casim] = @$casim_revision +$casim_revision{?} = 9796 +extract.location[casim] = @$casim_revision extract.location{diff}[casim] = extract.path-incl[casim] = src extract.path-excl[casim] = / preprocess.prop{fpp.defs}[casim] = DEF_MODEL=MODEL_MONC MODEL_MONC=4 extract.location{primary}[socrates] = fcm:socrates.x_tr -$socrates_revision{?} = um10.8 +$socrates_revision{?} = 989 extract.location[socrates] = @$socrates_revision extract.location{diff}[socrates] = extract.path-incl[socrates] = src/modules_core src/radiance_core diff --git a/fcm-make/casim_socrates_mirror.cfg b/fcm-make/casim_socrates_mirror.cfg index f28a5e80..ce1e3d40 100644 --- a/fcm-make/casim_socrates_mirror.cfg +++ b/fcm-make/casim_socrates_mirror.cfg @@ -5,7 +5,7 @@ extract.path-excl[monc] = / components/casim/src/casim_stub.F90 components/socr extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 components/casim/src/casim_monc_diagnostics/casim_monc_dgs_space.F90 extract.location{primary}[casim] = fcm:casim.xm_tr -$casim_revision{?} = 6341 +$casim_revision{?} = 9796 extract.location[casim] = @$casim_revision extract.location{diff}[casim] = extract.path-incl[casim] = src @@ -13,7 +13,7 @@ extract.path-excl[casim] = / preprocess.prop{fpp.defs}[casim] = DEF_MODEL=MODEL_MONC MODEL_MONC=4 extract.location{primary}[socrates] = fcm:socrates.xm_tr -$socrates_revision{?} = 593 +$socrates_revision{?} = 989 extract.location[socrates] = @$socrates_revision extract.location{diff}[socrates] = extract.path-incl[socrates] = src/modules_core src/radiance_core diff --git a/fcm-make/comp-cray-2107-adebug.cfg b/fcm-make/comp-cray-2107-adebug.cfg new file mode 100644 index 00000000..26e99aa4 --- /dev/null +++ b/fcm-make/comp-cray-2107-adebug.cfg @@ -0,0 +1,14 @@ +$fflags_opt{?} = -O0 -g -Ovector1 -hfp0 -hflex_mp=strict -e m -J. +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -e R +$fflags_io{?} = $fflags -e R +$fflags_psrc{?} = -g -K trap=divz,inv,ovf -R bcdps -O0 -e m -J. +$cflags = -hgnu + +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY + +build.prop{file-name-option.f90-mod} = case=upper diff --git a/fcm-make/comp-cray-2107-archer.cfg b/fcm-make/comp-cray-2107-archer.cfg new file mode 100644 index 00000000..fe5720fb --- /dev/null +++ b/fcm-make/comp-cray-2107-archer.cfg @@ -0,0 +1,14 @@ +$fflags_opt{?} = -O3 -Ovector1 -hfp0 -hflex_mp=strict -e m -J. +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -e R +$fflags_io{?} = $fflags -e R +$fflags_psrc{?} = -g -K trap=divz,inv,ovf -R bcdps -O1 -e m -J. +$cflags = -hgnu + +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY + +build.prop{file-name-option.f90-mod} = case=upper diff --git a/fcm-make/comp-gnu-4.4.7-adebug.cfg b/fcm-make/comp-gnu-4.4.7-adebug.cfg new file mode 100644 index 00000000..dad9348c --- /dev/null +++ b/fcm-make/comp-gnu-4.4.7-adebug.cfg @@ -0,0 +1,13 @@ +$fflags_opt{?} = -O0 -ffpe-trap=zero,invalid,overflow -fbounds-check -fallow-argument-mismatch -fallow-invalid-boz -J . +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -frecursive +$fflags_io{?} = $fflags -frecursive +$fflags_psrc{?} = -O0 -ffpe-trap=zero,invalid,overflow -fallow-argument-mismatch -fallow-invalid-boz -J . +$cflags = -fcommon + +$fppdefs_debug{?} = DEBUG_MODE +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY diff --git a/fcm-make/comp-gnu-4.4.7-archer.cfg b/fcm-make/comp-gnu-4.4.7-archer.cfg new file mode 100644 index 00000000..bfc988db --- /dev/null +++ b/fcm-make/comp-gnu-4.4.7-archer.cfg @@ -0,0 +1,13 @@ +$fflags_opt{?} = -O3 -fbounds-check -fallow-argument-mismatch -fallow-invalid-boz -J . +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -frecursive +$fflags_io{?} = $fflags -frecursive +$fflags_psrc{?} = -O1 -ffpe-trap=zero,invalid,overflow -fallow-argument-mismatch -fallow-invalid-boz -J . +$cflags = -fcommon + +$fppdefs_debug{?} = DEBUG_MODE +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY diff --git a/fcm-make/comp-gnu-4.4.7-debug.cfg b/fcm-make/comp-gnu-4.4.7-debug.cfg index 75e906b8..b415ff1f 100644 --- a/fcm-make/comp-gnu-4.4.7-debug.cfg +++ b/fcm-make/comp-gnu-4.4.7-debug.cfg @@ -1,12 +1,11 @@ -#$f90{?} = mpif90 -#$cc{?} = cc -$fflags_opt{?} = -O0 -g -Wall -fcheck=all -ffpe-trap=zero,invalid,overflow -J . +$fflags_opt{?} = -O0 -g -Wall -fcheck=all -ffpe-trap=zero,invalid,overflow -fallow-argument-mismatch -fallow-invalid-boz -J . $fflags{?} = $fflags_opt $fflags_core{?} = $fflags -frecursive $fflags_io{?} = $fflags -frecursive -$fflags_psrc{?} = -O1 -ffpe-trap=zero,invalid,overflow -J . -$cflags = +#$fflags_psrc{?} = -O1 -ffpe-trap=zero,invalid,overflow -J . +$fflags_psrc{?} = -O0 -g -Wall -fcheck=all -ffpe-trap=zero,invalid,overflow -fallow-argument-mismatch -fallow-invalid-boz -J . +$cflags = -fcommon $fppdefs_debug{?} = DEBUG_MODE $fpp_flags{?} = -E -P -traditional diff --git a/fcm-make/comp-gnu-4.4.7-safe.cfg b/fcm-make/comp-gnu-4.4.7-safe.cfg index 2caca2b7..3caa93a1 100644 --- a/fcm-make/comp-gnu-4.4.7-safe.cfg +++ b/fcm-make/comp-gnu-4.4.7-safe.cfg @@ -1,10 +1,10 @@ -$fflags_opt{?} = -O2 -J . +$fflags_opt{?} = -O2 -fbounds-check -fallow-argument-mismatch -fallow-invalid-boz -J . $fflags{?} = $fflags_opt $fflags_core{?} = $fflags -frecursive $fflags_io{?} = $fflags -frecursive -$fflags_psrc{?} = -O1 -ffpe-trap=zero,invalid,overflow -J . -$cflags = +$fflags_psrc{?} = -O1 -ffpe-trap=zero,invalid,overflow -fallow-argument-mismatch -fallow-invalid-boz -J . +$cflags = -fcommon $fppdefs_debug{?} = DEBUG_MODE $fpp_flags{?} = -E -P -traditional diff --git a/fcm-make/comp-gnu-4.4.7.cfg b/fcm-make/comp-gnu-4.4.7.cfg index 3c217ea5..63256c3d 100644 --- a/fcm-make/comp-gnu-4.4.7.cfg +++ b/fcm-make/comp-gnu-4.4.7.cfg @@ -1,11 +1,11 @@ #$f90{?} = mpif90 #$cc{?} = cc -$fflags_opt{?} = -O3 -J . +$fflags_opt{?} = -g -O3 -pg -J . $fflags{?} = $fflags_opt $fflags_core{?} = $fflags -frecursive $fflags_io{?} = $fflags -frecursive -$fflags_psrc{?} = -O1 -J . +$fflags_psrc{?} = -O1 -pg -J . $cflags = $fppdefs_debug{?} = DEBUG_MODE diff --git a/fcm-make/comp-intel-17-debug.cfg b/fcm-make/comp-intel-17-debug.cfg new file mode 100644 index 00000000..102ae02b --- /dev/null +++ b/fcm-make/comp-intel-17-debug.cfg @@ -0,0 +1,13 @@ +### AH - debug can be run with -O0 but it is very slow, so set to -O2 +$fflags_opt{?} = -O2 -check bounds,uninit -traceback -no-vec -fp-model precise +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -recursive +$fflags_io{?} = $fflags -recursive +$fflags_psrc{?} = -O2 -traceback -no-vec -fp-model precise +$cflags = -std=gnu99 + +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY diff --git a/fcm-make/comp-intel-17.cfg b/fcm-make/comp-intel-17.cfg new file mode 100644 index 00000000..383cc16e --- /dev/null +++ b/fcm-make/comp-intel-17.cfg @@ -0,0 +1,13 @@ +### AH - does not run with -O3, so standard setting is -O2 with no checking +$fflags_opt{?} = -O2 -traceback -no-vec -fp-model precise +$fflags{?} = $fflags_opt + +$fflags_core{?} = $fflags -recursive +$fflags_io{?} = $fflags -recursive +$fflags_psrc{?} = -O2 -traceback -no-vec -fp-model precise +$cflags = -std=gnu99 + +$fpp_flags{?} = -E -P -traditional + +$fppdefs{?} = U_ACTIVE V_ACTIVE W_ACTIVE ENFORCE_THREAD_SAFETY __DARWIN +$cppdefs{?} = __DARWIN _XOPEN_SOURCE=700 ENFORCE_THREAD_SAFETY diff --git a/fcm-make/env-arc2.cfg b/fcm-make/env-arc2.cfg index 17f6e505..21272a3a 100644 --- a/fcm-make/env-arc2.cfg +++ b/fcm-make/env-arc2.cfg @@ -5,9 +5,5 @@ $netcdf_path{?} = $NETCDF_HOME $netcdf_inc_path{?} = $netcdf_path/include $netcdf_lib_path{?} = $netcdf_path/lib -$fftw_path{?} = $FFTW_HOME -$fftw_inc_path{?} = $fftw_path/include -$fftw_lib_path{?} = $fftw_path/lib - $hdf5_path{?} = $HDF5_HOME $hdf5_lib_path{?} = $hdf5_path/lib diff --git a/fcm-make/env-cirrus.cfg b/fcm-make/env-cirrus.cfg new file mode 100644 index 00000000..f8fbccf2 --- /dev/null +++ b/fcm-make/env-cirrus.cfg @@ -0,0 +1,22 @@ +$f90{?} = mpiifort +$cc{?} = mpiicc + +$netcdf_path{?} = +$netcdf_inc_path{?} = +$netcdf_lib_path{?} = + +$hdf5_path{?} = +$hdf5_lib_path{?} = + +$petsc_path{?} = +$petsc_inc_path = +$petsc_lib_path = +$petsc_lib = + +# $XIOS_DIR +$xios_path{?} = +$xios_inc_path = +$xios_lib_path = + +# /work/d131/d131/shared/allineaMPIWrappers/Intel/.map-libs/dynamic +$map_lib_path = diff --git a/fcm-make/env-cray.cfg b/fcm-make/env-cray.cfg index 16b14824..c2fab413 100644 --- a/fcm-make/env-cray.cfg +++ b/fcm-make/env-cray.cfg @@ -4,14 +4,16 @@ $netcdf_path{?} = $NETCDF_DIR $netcdf_inc_path{?} = $netcdf_path/include $netcdf_lib_path{?} = $netcdf_path/lib -$fftw_path{?} = $FFTW_DIR/.. -$fftw_inc_path{?} = $fftw_path/include -$fftw_lib_path{?} = $fftw_path/lib - $hdf5_path{?} = $HDF5_DIR $hdf5_lib_path{?} = $hdf5_path/lib $petsc_path{?} = $PETSC_DIR $petsc_inc_path = $petsc_path/include $petsc_lib_path = $petsc_path/lib -$petsc_lib = -lcraypetsc_cray_real \ No newline at end of file +$petsc_lib = -lcraypetsc_cray_real + +##$xios_path{?} = $XIOS_DIR +##$xios_inc_path = $xios_path/inc +##$xios_lib_path = $xios_path/lib + +##$map_lib_path = /work/d131/d131/shared/allineaMPIWrappers/Intel/.map-libs/dynamic diff --git a/fcm-make/env-meto.cfg b/fcm-make/env-meto.cfg index aa55cdc3..2365d64a 100644 --- a/fcm-make/env-meto.cfg +++ b/fcm-make/env-meto.cfg @@ -3,11 +3,7 @@ $cc{?} = cc $netcdf_path{?} = $NETCDF_DIR $netcdf_inc_path{?} = $netcdf_path/include -$netcdf_lib_path{?} = $netcdf_path/lib - -$fftw_path{?} = $FFTW_DIR -$fftw_inc_path{?} = $fftw_path/include -$fftw_lib_path{?} = $fftw_path/lib +$netcdf_lib_path{?} = $netcdf_path/lib $hdf5_path{?} = $HDF5_DIR $hdf5_lib_path{?} = $hdf5_path/lib diff --git a/fcm-make/env-ubuntu-14.04.cfg b/fcm-make/env-ubuntu-14.04.cfg index 276f31d9..4dfa8e14 100644 --- a/fcm-make/env-ubuntu-14.04.cfg +++ b/fcm-make/env-ubuntu-14.04.cfg @@ -7,9 +7,5 @@ $netcdf_path{?} = $packages_path $netcdf_inc_path{?} = $netcdf_path/include $netcdf_lib_path{?} = $netcdf_path/lib -$fftw_path{?} = $packages_path -$fftw_inc_path{?} = $fftw_path/include -$fftw_lib_path{?} = $fftw_path/lib - $hdf5_path{?} = $packages_path -$hdf5_lib_path{?} = $hdf5_path/lib/x86_64-linux-gnu \ No newline at end of file +$hdf5_lib_path{?} = $hdf5_path/lib/x86_64-linux-gnu diff --git a/fcm-make/env-ubuntu-16.04.cfg b/fcm-make/env-ubuntu-16.04.cfg index fd10f83c..34532d14 100644 --- a/fcm-make/env-ubuntu-16.04.cfg +++ b/fcm-make/env-ubuntu-16.04.cfg @@ -7,9 +7,5 @@ $netcdf_path{?} = $packages_path $netcdf_inc_path{?} = $netcdf_path/include $netcdf_lib_path{?} = $netcdf_path/lib -$fftw_path{?} = $packages_path -$fftw_inc_path{?} = $fftw_path/include -$fftw_lib_path{?} = $fftw_path/lib - $hdf5_path{?} = $packages_path -$hdf5_lib_path{?} = $hdf5_path/lib/x86_64-linux-gnu/hdf5/mpich \ No newline at end of file +$hdf5_lib_path{?} = $hdf5_path/lib/x86_64-linux-gnu/hdf5/mpich diff --git a/fcm-make/monc-build.cfg b/fcm-make/monc-build.cfg index a728417d..3bbea1f9 100644 --- a/fcm-make/monc-build.cfg +++ b/fcm-make/monc-build.cfg @@ -19,12 +19,11 @@ preprocess.prop{class, no-dep.include} = argsts.h typsts.h s_scmop.h build.target = monc_driver.exe build.prop{class,no-dep.f.module} = mpi netcdf -build.prop{class,no-dep.include} = fftw3.f03 -build.prop{class,fc.include-paths} = $netcdf_inc_path $fftw_inc_path +build.prop{class,fc.include-paths} = $netcdf_inc_path build.prop{class,fc} = $f90 build.prop{class,fc.flags} = $fflags -build.prop{class,fc.libs} = netcdff netcdf hdf5 hdf5_hl z fftw3 pthread -build.prop{class,fc.lib-paths} = $netcdf_lib_path $fftw_lib_path $hdf5_lib_path +build.prop{class,fc.libs} = netcdff netcdf hdf5 hdf5_hl z pthread +build.prop{class,fc.lib-paths} = $netcdf_lib_path $hdf5_lib_path build.prop{class,cc} = $cc @@ -34,5 +33,15 @@ build.prop{cc.flags}[monc/io] = $cflags build.prop{fc.flags}[monc/model_core/src/utils/conversions.F90]= $fflags_psrc build.prop{fc.flags}[monc/components/pressuresource/src/pressuresource.F90]= $fflags_psrc build.prop{fc.flags}[monc/components/fftsolver/src/fftsolver.F90]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte.F90]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte/vzfft1d.f]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte/mfft235.f]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte/kernel.f]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte/fft235.f]= $fflags_psrc +build.prop{fc.flags}[monc/components/fftsolver/src/ffte/factor.f]= $fflags_psrc +build.prop{fc.flags}[monc/components/iterativesolver/src/iterativesolver.F90]= $fflags_psrc +build.prop{fc.flags}[monc/components/iterativesolver_single_prec/src/iterativesolver_single_prec.F90]= $fflags_psrc build.prop{dep.o}[monc/io/src/forthread] = ft_attr.o ft_data.o ft_wrapper.o +build.prop{dep.o}[monc/components/fftsolver/src/ffte.F90] = zfft1d.o factor.o fft235.o fft2.o mfft235a.o +build.prop{keep-lib-o} = true diff --git a/fcm-make/monc-cirrus.cfg b/fcm-make/monc-cirrus.cfg new file mode 100644 index 00000000..1f58837b --- /dev/null +++ b/fcm-make/monc-cirrus.cfg @@ -0,0 +1,3 @@ +include = comp-intel-17.cfg +include = env-cirrus.cfg +include = monc-build.cfg diff --git a/fcm-make/monc-cray-gnu-archer.cfg b/fcm-make/monc-cray-gnu-archer.cfg new file mode 100644 index 00000000..e37f85cd --- /dev/null +++ b/fcm-make/monc-cray-gnu-archer.cfg @@ -0,0 +1,3 @@ +include = comp-gnu-4.4.7-archer.cfg +include = env-cray.cfg +include = monc-build.cfg diff --git a/fcm-make/monc-cray-intel-safe.cfg b/fcm-make/monc-cray-intel-safe.cfg new file mode 100644 index 00000000..0c6329b9 --- /dev/null +++ b/fcm-make/monc-cray-intel-safe.cfg @@ -0,0 +1,3 @@ +include = comp-intel-17-debug.cfg +include = env-cray.cfg +include = monc-build.cfg diff --git a/fcm-make/monc-meto-gnu.cfg b/fcm-make/monc-meto-gnu.cfg index 9f07e6c2..64bf7835 100644 --- a/fcm-make/monc-meto-gnu.cfg +++ b/fcm-make/monc-meto-gnu.cfg @@ -1,3 +1,3 @@ -include = comp-gnu-4.4.7.cfg +include = comp-gnu-4.4.7-debug.cfg include = env-meto.cfg include = monc-build.cfg diff --git a/fcm-make/monc-meto-intel.cfg b/fcm-make/monc-meto-intel.cfg new file mode 100644 index 00000000..637e9844 --- /dev/null +++ b/fcm-make/monc-meto-intel.cfg @@ -0,0 +1,3 @@ +include = comp-intel-17-debug.cfg +include = env-meto.cfg +include = monc-build.cfg diff --git a/fcm-make/petsc.cfg b/fcm-make/petsc.cfg index 0105c4a3..331de4bc 100644 --- a/fcm-make/petsc.cfg +++ b/fcm-make/petsc.cfg @@ -5,6 +5,6 @@ extract.ns = monc casim extract.path-excl[monc] = / components/casim/src/casim.F90 components/petsc_solver/src/petsc_solver_stub.F90 extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 -build.prop{class,fc.include-paths} = $netcdf_inc_path $fftw_inc_path $petsc_inc_path -build.prop{class,fc.libs} = netcdff netcdf hdf5 hdf5_hl z fftw3 pthread $petsc_lib -build.prop{class,fc.lib-paths} = $netcdf_lib_path $fftw_lib_path $hdf5_lib_path $petsc_lib_path \ No newline at end of file +build.prop{class,fc.include-paths} = $netcdf_inc_path $petsc_inc_path +build.prop{class,fc.libs} = netcdff netcdf hdf5 hdf5_hl z pthread $petsc_lib +build.prop{class,fc.lib-paths} = $netcdf_lib_path $hdf5_lib_path $petsc_lib_path diff --git a/fcm-make/socrates.cfg b/fcm-make/socrates.cfg index 40275dbd..792001a4 100644 --- a/fcm-make/socrates.cfg +++ b/fcm-make/socrates.cfg @@ -5,7 +5,7 @@ extract.path-excl[monc] = / components/socrates_couple/src/socrates_couple_stub. extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 extract.location{primary}[socrates] = fcm:socrates.x_tr -$socrates_revision{?} = um10.8 +$socrates_revision{?} = 855 extract.location[socrates] = @$socrates_revision extract.location{diff}[socrates] = extract.path-incl[socrates] = src/modules_core src/radiance_core diff --git a/fcm-make/socrates_mirror.cfg b/fcm-make/socrates_mirror.cfg index 28e32b0a..d30c2e34 100644 --- a/fcm-make/socrates_mirror.cfg +++ b/fcm-make/socrates_mirror.cfg @@ -5,7 +5,7 @@ extract.path-excl[monc] = / components/socrates_couple/src/socrates_couple_stub. extract.path-incl[monc] = components model_core io misc testcases monc_driver.F90 extract.location{primary}[socrates] = fcm:socrates.xm_tr -$socrates_revision{?} = um10.8 +$socrates_revision{?} = 855 extract.location[socrates] = @$socrates_revision extract.location{diff}[socrates] = extract.path-incl[socrates] = src/modules_core src/radiance_core diff --git a/global_config b/global_config index 57f840a1..2be93c6e 100644 --- a/global_config +++ b/global_config @@ -21,6 +21,7 @@ checkpointer_enabled=.true. coriolis_enabled=.false. damping_enabled=.false. debugger_enabled=.false. +dephy_forcings_enabled=.false. diagnostics_3d_enabled=.false. diffusion_enabled=.true. diverr_enabled=.true. @@ -29,6 +30,7 @@ flux_budget_enabled=.false. forcing_enabled=.false. iobridge_enabled=.false. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. kidreader_enabled=.false. lower_bc_enabled=.false. mean_profiles_enabled=.false. @@ -44,7 +46,7 @@ setfluxlook_enabled=.true. simplecloud_enabled=.false. simplesetup_enabled=.false. smagorinsky_enabled=.false. -subgrid_profile_diagnostics_enabled=.false +subgrid_profile_diagnostics_enabled=.false. socrates_couple_enabled=.false. th_advection_enabled=.false. tvd_advection_enabled=.true. @@ -57,11 +59,16 @@ lateral_bcs_enabled=.false. conditional_diagnostics_column_enabled=.false. conditional_diagnostics_whole_enabled=.false. pdf_analysis_enabled=.false. +tracers_enabled=.false. +trajectories_enabled=.false. +radioactive_tracers_enabled=.false. # Default disable the test case components (individual user config will enable these) bubble_enabled=.false. drybl_enabled=.false. kidtestcase_enabled=.false. +shallow_convection_enabled=.false. + # Component timestepping groups group_names= start, subgrid, dynamics, solver, pressure-terms, last @@ -73,18 +80,18 @@ solver_group_type=entire pressure-terms_group_type=column last_group_type=entire -start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, setfluxlook +start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, dephy_forcings, setfluxlook subgrid_group_contents=lower_bc, smagorinsky -dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, socrates_couple, lwrad_exponential, simplecloud, casim, flux_budget, subgrid_profile_diagnostics, diverr, psrce, diagnostics_3d, profile_diagnostics, casim_profile_dgs, scalar_diagnostics, stepfields +dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, socrates_couple, lwrad_exponential, simplecloud, casim, tracers, flux_budget, subgrid_profile_diagnostics, diverr, psrce, diagnostics_3d, profile_diagnostics, casim_profile_dgs, scalar_diagnostics, stepfields -solver_group_contents=pdf_analysis, mean_profiles, fftsolver, iterativesolver, petsc_solver, cfltest +solver_group_contents=pdf_analysis, mean_profiles, fftsolver, iterativesolver, iterativesolver_single_prec, petsc_solver, cfltest pressure-terms_group_contents=pstep, swap_smooth, conditional_diagnostics_column last_group_contents=conditional_diagnostics_whole, checkpointer, model_synopsis, termination_check, iobridge # Component ordering for other stages -initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, mean_profiles, swap_smooth, termination_check, simplecloud, casim, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential,th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, iobridge -finalisation_stage_ordering=iobridge, checkpointer, diverr, fftsolver, grid_manager, halo_swapper, iterativesolver, physicsa, psrce, smagorinsky, tvd_advection,lwrad_exponential, model_synopsis, mean_profiles, pdf_analysis, forcing, stepfields, flux_budget, buoyancy, diffusion, lower_bc, viscosity, profile_diagnostics, pw_advection, th_advection, damping, simplecloud, pstep, conditional_diagnostics_whole, conditional_diagnostics_column +initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, dephy_forcings, mean_profiles, swap_smooth, termination_check, simplecloud, casim, tracers, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, iterativesolver_single_prec, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential, th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, iobridge +finalisation_stage_ordering=iobridge, checkpointer, diverr, fftsolver, grid_manager, halo_swapper, iterativesolver, iterativesolver_single_prec, physicsa, psrce, smagorinsky, tvd_advection, socrates_couple, lwrad_exponential, model_synopsis, mean_profiles, pdf_analysis, forcing, stepfields, flux_budget, coriolis, buoyancy, diffusion, lower_bc, viscosity, profile_diagnostics, pw_advection, th_advection, damping, simplecloud, tracers, pstep, conditional_diagnostics_whole, conditional_diagnostics_column # Control configuration nn_timesteps=-1 @@ -97,6 +104,31 @@ logging=3 #INFO level logging check_msg_frequency=500 check_walltime_frequency=200 msg_filename=messages +retain_model_time=.false. +only_compute_on_sample_timestep=.false. +force_output_on_interval=.false. +l_constant_dtm=.false. + +# Debug assistance parameters +print_debug_data=.false. # Prints data for specific variables/point after each component + # call when .true.. Uses below coordinates to specify point. + # When coordinate is negative, defaults to midpoint of dimension. +pdd_x=-999 # global grid x coordinate of print_debug_data grid point +pdd_y=-999 # " " y " " " +pdd_z=-999 # " " z " " " +l_thoff=.true. # When .true., disables threading in the IOserver + +#Tracer configuration +traj_interval= # name of config variable used to set 3d_tracers output_frequency + # ensures trajectory reinitialization at data write time +n_radioactive_tracers=0 # number of radioactive tracers +tracer_decay_rate=0.0 # tracer decay rate for each n_radioactive_tracers [per hour] + # default value causes no decay. +tracer_surface_bc_option=0 # tracer surface BC option + # 0 = flux computed from decay rate. + # 1 = specified flux. + # 2 = specified value. +tracer_surface_bc=0.0 # tracer surface bc value. # CFL configuration cfl_frequency=10 @@ -144,31 +176,64 @@ qlcrit=1.e-8 # Iterative solver configuration tolerance=1.e-4 max_iterations=500 -preconditioner_iterations=1 +preconditioner_iterations=0 include_top_level=.true. symm_prob=.false. solver_type=cg preconditioner_type=auto norm_type=auto +# Switch for FFTE +FFTE = .true. + # Lower BC configuration -ntmhf=0 -shflx_sen=0.0 -timhf=0.0 -shflx_lat=0.0 -surface_temperature_values=0.0 -units_surface_temp=kelvin -surface_mixing_ratio_values=0.0 -surface_sensible_heat_flux_values=0.0 -surface_latent_heat_flux_values=0.0 +use_surface_boundary_conditions=.false. +use_time_varying_surface_values=.false. # When false, first surface value in input arrays is used max_change_buoyancy_flux=12.0 -use_surface_boundary_conditions=.false. -type_of_surface_boundary_conditions=0 -use_time_varying_surface_values=.false. +type_of_surface_boundary_conditions=0 # PRESCRIBED_FLUX=0; PRESCRIBED_SURFACE_VALUE=1 +units_surface_temp=kelvin + + # Surface data in file: +surface_conditions_file=None # If '' or None, file data used, below data values ignored + + # Surface data in config: +surface_boundary_input_times= # unset real array +surface_temperatures= # unset real array +surface_humidities= # unset real array + # - This is meaningful. When no values are provided, + # the surface_vapour_mixing_ratio is calculated as + # its saturated value. + # - Expected units are mixing ratio [kg/kg] +surface_sensible_heat_flux= # unset real array +surface_latent_heat_flux= # unset real array + + +# Time-varying forcing -------------------------------------------------------------------------------------------- +# enter files as the base directory-relative path to file +# specify the vertical coordinate of the forcing as 'height' [m] or 'pressure' [Pa] +# - expecting NetCDF variable names to be "wsubs", "theta_tendency", or "q_tendency" for +# subsidence, theta, and water vapour forcing time-height profiles, respectively. +# - expecting temporal coordinate variable/dimension to be called "time". +# - expecting wsubs as m/s +# - This is a subsidence velocity only, not divergence rate. +# - When using use_time_varying_subsidence=.true., subsidence_input_type is ignored. +# - expecting theta_tendency as K/s +# - Allowed to be temperature (instead of theta), but requires convert_input_theta_from_temperature=.true. +# - convert_input_theta_from_temperature will also apply to any additional constant forcing. +# - expecting q_tendecy as kg/kg/s use_time_varying_subsidence=.false. -surface_conditions_file=None -max_change_buoyancy_flux=12.0 +varying_subsidence_file= # .nc file, DEFAULT: unset +varying_subsidence_coordinate= # 'height' [m] or 'pressure' [Pa] + +use_time_varying_theta=.false. +varying_theta_file= # .nc file, DEFAULT: unset +varying_theta_coordinate= # 'height' [m] or 'pressure' [Pa] + +use_time_varying_q=.false. +varying_q_file= # .nc file, DEFAULT: unset +varying_q_coordinate= # 'height' [m] or 'pressure' [Pa] + # Simplesetup options x_size=1 @@ -221,7 +286,6 @@ l_init_pl_rh=.false. l_matchthref=.false. l_thref=.false. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -275,7 +339,7 @@ relax_to_initial_theta_profile=.false. convert_input_theta_from_temperature=.false. -l_constant_forcing_theta_z2pressure=.false. +l_constant_forcing_theta_height=.true. # Forcing in height coordinates (.true.) or pressure (.false.) units_u_force=m_per_second_per_day units_v_force=m_per_second_per_day @@ -368,14 +432,14 @@ mcc_temperature_profile = None mcc_vapour_profile = None mcc_ozone_profile = None # Add options for rad_cntrl -spectral_file_lw = /data/local/fra23/MONC/tmp/trunk/data/spectra/ga7/sp_lw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 i_gas_overlap_lw = 4 i_water_lw = 5 # 11 = baran, 8 = aggregate for the above spectral file, dependent on iwc and temperature i_ice_lw = 11 i_scatter_method_lw = 1 -spectral_file_sw = /data/local/fra23/MONC/tmp/trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 i_gas_overlap_sw = 4 i_water_sw = 5 i_ice_sw = 11 @@ -386,20 +450,24 @@ i_cloud_representation = 5 ## Time and location variables for socrates l_360 = .true. # 360 days in year as opposed to 365 (a UM thing # in the LEM, is this still required??) -l_solar_fixed = .false. # true equals fixed insolation using value in +l_solar_fixed = .false. # true equals fixed insolation using value in # sol_fixed l_no_solar = .false. # Only use longwave rad by setting lit_fraction = 0.0 default_solar_constant = 1361. # Default solar constant -solar_fixed = -999.0 # prescribed insolation value +solar_fixed = -999.0 # prescribed insolation value sec_fixed = -999.0 # prescribed 1/cos(solar_zenith_angle) latitude = -999.0 # latitude for the location of radiation calc longitude = -999.0 # longitude for the location of radiation calc rad_start_year = -999.0 # simulation year for earth sun distance rad_start_day = -999.0 # starting day of the year (0 is jan 1st, Dec 31st is 365, except leap obviously) rad_start_time = -999.0 # Start time for the radiation calc, hours after 0Z -rad_int_time = -999.0 # time between each radiation call. If = 0 - # radiation called every timestep, else gt than 0 - # will be called less frequently +rad_interval = -999 # Radiation calculation interval [integer] + # - If time_basis=.true., this is the time [ s ] between each radiation + # call. + # - If time_basis=.false., this is the number of timesteps [ ts ] + # between each radiation call. + # - If .le. zero, radiation called every timestep, otherwise (gt than 0) + # radiation will be called less frequently ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable @@ -420,6 +488,9 @@ mphys_nq_g=0 # graupel mass ### configuration for effective radius calculation ## Fixed cloud effective radius settings for socrates ## NOTE: default is to set effective radius to fixed values (as in LEM) +## NOTE: The cloud number parameter, fixed_cloud_number, is specified +## in the 'CASIM switches' section below, ensuring consistency +## with the microphysics. l_fix_re = .true. fixed_cloud_re = 10.0 # effective radius for cloud droplets 10 microns fixed_ice_re = 30.0 # effective radius for ice 30 microns @@ -427,15 +498,14 @@ fixed_ice_re = 30.0 # effective radius for ice 30 microns l_use_ndrop = .false. ## Liu scheme, used in ESM l_use_liu_spec = .false. -# Cloud number used in the radiation, should be consistent with microphys assumption -fixed_cloud_number = 50.0 # cloud number /cm3 # Density of water, consistent with CASIM in mphys_parameters rho_water = 997.0 # KPARAM_* is the ratio of the cubes of the volume-mean radius and the effective radius # used to calc effective radius, kparam = 0.67 for land (polluted) and 0.80 sea (clean) (martin 94) kparam = 0.80 -#CASIM switches + +# CASIM switches ======================================================= option = 22222 diag_mu_option = -999 @@ -444,7 +514,10 @@ iopt_inuc = 4 process_level = 0 aerosol_option = 2 max_step_length = 120.0 -max_sed_length = 20.0 +max_sed_length = 2.0 +# Cloud number parameter is also used in the SOCRATES radiation and +# should be consistent with microphysics assumption. +fixed_cloud_number = 50.0e6 # cloud number / m**3 p1 = 3.0 p2 = 0.0 @@ -474,11 +547,11 @@ l_limit_psd = .true. l_override_checks = .false. l_raci_g = .true. l_onlycollect = .false. -l_abelshipway = .false. +l_abelshipway = .true. l_cons = .false. l_rain = .true. l_sed_3mdiff = .false. -l_sed_icecloud_as_1m = .true. +l_sed_icecloud_as_1m = .false. l_inhom_revp = .true. l_pcond = .true. l_praut = .true. @@ -506,9 +579,9 @@ l_pgacr = .true. l_pgacw = .true. l_pgaci = .true. l_pgacs = .true. -l_piagg = .true. +l_piagg = .false. l_psagg = .true. -l_pgagg = .true. +l_pgagg = .false. l_psbrk = .true. l_pgshd = .true. l_pihal = .true. @@ -520,7 +593,12 @@ l_pssub = .true. l_pgsub = .true. l_pisub = .true. l_pimlt = .true. - +l_gamma_online = .false. +l_subseds_maxv = .false. +l_sed_eulexp = .false. +cfl_vt_max = 1.0 +l_kfsm = .false. +l_adjust_D0 = .true. l_tidy_conserve_E = .true. l_tidy_conserve_q = .true. @@ -552,6 +630,11 @@ thv_from_th_with_liqice=.true. show_critical_w=.false. uppercrit=0.05 dwnpercrit=0.05 + +# vertical velocity histogram parameters +n_w_bins=50 # number of bins (max-min)/bin_size (max determined by these parameters) +w_bin_size=1.0 # size of bin [m/s] +w_bin_min=-25.0 # lower bound of historgram [m/s] # ----------------------------------------------------------------- # enable 3d binary SOCRATES-based total cloud mask diagnostic @@ -568,3 +651,14 @@ cloud_mask_method=DEFAULT # cloud_mask_method, the constituent has area 1.0. This is the # same as assuming homogeneous clouds. l_partial_liq_ice=.false. + + +# Diagnostic sampling basis (unit selection) +time_basis=.false. # logical for sampling and output intervals [ .false. (timestep, DEFAULT) | .true. (time) ] + +#RCEMIP +l_rcemip_initial=.false. +l_rcemip_ozone=.false. +l_rcemip_gases=.false. +l_rcemip_lowerbc=.false. +#l_rcemip_tracers=.false. # To implement, see ticket #376/349 for branch monc/main/branches/dev/toddjones/vn0.9.0_RCEMIP diff --git a/io/io_cfg_files/3d_fields.xml b/io/io_cfg_files/3d_fields.xml index b3256525..809152e0 100644 --- a/io/io_cfg_files/3d_fields.xml +++ b/io/io_cfg_files/3d_fields.xml @@ -1,9 +1,9 @@ - - + + - + diff --git a/io/io_cfg_files/3d_fields_test.xml b/io/io_cfg_files/3d_fields_test.xml new file mode 100644 index 00000000..58029de9 --- /dev/null +++ b/io/io_cfg_files/3d_fields_test.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/checkpoint.xml b/io/io_cfg_files/checkpoint.xml index 70d75ab5..60230af5 100644 --- a/io/io_cfg_files/checkpoint.xml +++ b/io/io_cfg_files/checkpoint.xml @@ -1,92 +1,115 @@ + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/conditional_diagnostics.xml b/io/io_cfg_files/conditional_diagnostics.xml index 9c50fef0..280f0ae4 100644 --- a/io/io_cfg_files/conditional_diagnostics.xml +++ b/io/io_cfg_files/conditional_diagnostics.xml @@ -1,9 +1,9 @@ - + - + diff --git a/io/io_cfg_files/crmstyle_control.xml b/io/io_cfg_files/crmstyle_control.xml deleted file mode 100644 index 0a1dc998..00000000 --- a/io/io_cfg_files/crmstyle_control.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -#include "io/io_cfg_files/crmstyle.xml" -#include "io/io_cfg_files/checkpoint.xml" - - - - - - - - diff --git a/io/io_cfg_files/data_write_1file.xml b/io/io_cfg_files/data_write_1file.xml index 7b03bc6e..85b4ddf3 100644 --- a/io/io_cfg_files/data_write_1file.xml +++ b/io/io_cfg_files/data_write_1file.xml @@ -7,20 +7,16 @@ #include "io/io_cfg_files/profile_fields.xml" #include "io/io_cfg_files/3d_fields.xml" #include "io/io_cfg_files/2d_fields.xml" -#include "io/io_cfg_files/tendency_profile_fields.xml" -#include "io/io_cfg_files/flux_fields_description.xml" -#include "io/io_cfg_files/socrates_fields.xml" #include "io/io_cfg_files/checkpoint.xml" +#include "io/io_cfg_files/socrates_fields.xml" - - - + diff --git a/io/io_cfg_files/general_diagnostics.xml b/io/io_cfg_files/general_diagnostics.xml index def11e24..d9da051e 100644 --- a/io/io_cfg_files/general_diagnostics.xml +++ b/io/io_cfg_files/general_diagnostics.xml @@ -3,9 +3,9 @@ 3D fields, just written out no processing - - - + + + diff --git a/io/io_cfg_files/grid.xml b/io/io_cfg_files/grid.xml index 7b637941..d5ccb1d3 100644 --- a/io/io_cfg_files/grid.xml +++ b/io/io_cfg_files/grid.xml @@ -1,5 +1,4 @@ - @@ -9,7 +8,6 @@ - diff --git a/io/io_cfg_files/paracon_2d_fields.xml b/io/io_cfg_files/paracon_2d_fields.xml new file mode 100644 index 00000000..33ebf5ba --- /dev/null +++ b/io/io_cfg_files/paracon_2d_fields.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_3d_fields.xml b/io/io_cfg_files/paracon_3d_fields.xml new file mode 100644 index 00000000..a577013b --- /dev/null +++ b/io/io_cfg_files/paracon_3d_fields.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_CASIM_process.xml b/io/io_cfg_files/paracon_CASIM_process.xml new file mode 100644 index 00000000..96814c86 --- /dev/null +++ b/io/io_cfg_files/paracon_CASIM_process.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_TKE_diagnostics.xml b/io/io_cfg_files/paracon_TKE_diagnostics.xml new file mode 100644 index 00000000..168ac485 --- /dev/null +++ b/io/io_cfg_files/paracon_TKE_diagnostics.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_data_write_2file_tracer.xml b/io/io_cfg_files/paracon_data_write_2file_tracer.xml new file mode 100644 index 00000000..97518288 --- /dev/null +++ b/io/io_cfg_files/paracon_data_write_2file_tracer.xml @@ -0,0 +1,29 @@ + + + + + +#include "io/io_cfg_files/paracon_level0_scalar_fields.xml" +#include "io/io_cfg_files/paracon_level0_tendency_profile_fields.xml" +#include "io/io_cfg_files/paracon_level0_profile_resolved.xml" +#include "io/io_cfg_files/paracon_3d_fields.xml" +#include "io/io_cfg_files/paracon_tracers_3d.xml" + + +#include "io/io_cfg_files/checkpoint.xml" + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_level0_2d_fields.xml b/io/io_cfg_files/paracon_level0_2d_fields.xml new file mode 100644 index 00000000..f3417dea --- /dev/null +++ b/io/io_cfg_files/paracon_level0_2d_fields.xml @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_level0_control.xml b/io/io_cfg_files/paracon_level0_control.xml new file mode 100644 index 00000000..212a40af --- /dev/null +++ b/io/io_cfg_files/paracon_level0_control.xml @@ -0,0 +1,67 @@ + + + + + + + + +#include "io/io_cfg_files/paracon_level0_scalar_fields.xml" +#include "io/io_cfg_files/paracon_level0_tendency_profile_fields.xml" +#include "io/io_cfg_files/paracon_level0_2d_fields.xml" +#include "io/io_cfg_files/paracon_level0_profile_resolved.xml" + + + +#include "io/io_cfg_files/checkpoint.xml" + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_level0_profile_resolved.xml b/io/io_cfg_files/paracon_level0_profile_resolved.xml new file mode 100644 index 00000000..037e19ca --- /dev/null +++ b/io/io_cfg_files/paracon_level0_profile_resolved.xml @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_level0_scalar_fields.xml b/io/io_cfg_files/paracon_level0_scalar_fields.xml new file mode 100644 index 00000000..534de2b6 --- /dev/null +++ b/io/io_cfg_files/paracon_level0_scalar_fields.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_level0_tendency_profile_fields.xml b/io/io_cfg_files/paracon_level0_tendency_profile_fields.xml new file mode 100644 index 00000000..66f1c0f4 --- /dev/null +++ b/io/io_cfg_files/paracon_level0_tendency_profile_fields.xml @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_multi.xml b/io/io_cfg_files/paracon_multi.xml new file mode 100644 index 00000000..5dd198db --- /dev/null +++ b/io/io_cfg_files/paracon_multi.xml @@ -0,0 +1,92 @@ + + + + + + + + +#include "io/io_cfg_files/paracon_level0_scalar_fields.xml" +#include "io/io_cfg_files/paracon_level0_tendency_profile_fields.xml" +#include "io/io_cfg_files/paracon_2d_fields.xml" +#include "io/io_cfg_files/paracon_level0_profile_resolved.xml" + + +#include "io/io_cfg_files/paracon_3d_fields.xml" +#include "io/io_cfg_files/paracon_CASIM_process.xml" +#include "io/io_cfg_files/paracon_tendency_3d_fields.xml" +#include "io/io_cfg_files/paracon_socrates_fields.xml" +#include "io/io_cfg_files/paracon_subgrid_profiles.xml" +#include "io/io_cfg_files/paracon_TKE_diagnostics.xml" +#include "io/io_cfg_files/paracon_pdf_analysis.xml" +#include "io/io_cfg_files/conditional_diagnostics.xml" +#include "io/io_cfg_files/paracon_tracers_3d.xml" +#include "io/io_cfg_files/paracon_tracers_2d.xml" + +#include "io/io_cfg_files/grid.xml" + +#include "io/io_cfg_files/checkpoint.xml" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_pdf_analysis.xml b/io/io_cfg_files/paracon_pdf_analysis.xml new file mode 100644 index 00000000..63f92c32 --- /dev/null +++ b/io/io_cfg_files/paracon_pdf_analysis.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_socrates_fields.xml b/io/io_cfg_files/paracon_socrates_fields.xml new file mode 100644 index 00000000..db2ecaa8 --- /dev/null +++ b/io/io_cfg_files/paracon_socrates_fields.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_subgrid_profiles.xml b/io/io_cfg_files/paracon_subgrid_profiles.xml new file mode 100644 index 00000000..17d11e24 --- /dev/null +++ b/io/io_cfg_files/paracon_subgrid_profiles.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/crmstyle.xml b/io/io_cfg_files/paracon_tendency_3d_fields.xml similarity index 57% rename from io/io_cfg_files/crmstyle.xml rename to io/io_cfg_files/paracon_tendency_3d_fields.xml index 46f3be1e..148f37f1 100644 --- a/io/io_cfg_files/crmstyle.xml +++ b/io/io_cfg_files/paracon_tendency_3d_fields.xml @@ -1,156 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -219,6 +186,13 @@ + + + + + + + @@ -240,5 +214,5 @@ - + diff --git a/io/io_cfg_files/paracon_tracers_2d.xml b/io/io_cfg_files/paracon_tracers_2d.xml new file mode 100644 index 00000000..6f4a8f5f --- /dev/null +++ b/io/io_cfg_files/paracon_tracers_2d.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/io/io_cfg_files/paracon_tracers_3d.xml b/io/io_cfg_files/paracon_tracers_3d.xml new file mode 100644 index 00000000..65fc284e --- /dev/null +++ b/io/io_cfg_files/paracon_tracers_3d.xml @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/io/io_cfg_files/pdf_analysis.xml b/io/io_cfg_files/pdf_analysis.xml index b9b6cbb1..ec13b31a 100644 --- a/io/io_cfg_files/pdf_analysis.xml +++ b/io/io_cfg_files/pdf_analysis.xml @@ -1,21 +1,31 @@ - - + + + + - - + - + + + + + + + + + + diff --git a/io/io_cfg_files/profile_fields.xml b/io/io_cfg_files/profile_fields.xml index a11c34fc..73473647 100644 --- a/io/io_cfg_files/profile_fields.xml +++ b/io/io_cfg_files/profile_fields.xml @@ -21,6 +21,11 @@ + + + + + @@ -117,6 +122,10 @@ + + + + @@ -224,6 +233,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -629,6 +658,20 @@ + + + + + + + + + + + + + + @@ -667,6 +710,11 @@ + + + + + @@ -757,6 +805,9 @@ + + + diff --git a/io/io_cfg_files/tendency_3d_fields.xml b/io/io_cfg_files/tendency_3d_fields.xml index a235411c..12f76757 100644 --- a/io/io_cfg_files/tendency_3d_fields.xml +++ b/io/io_cfg_files/tendency_3d_fields.xml @@ -1,92 +1,99 @@ - - + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -160,6 +167,13 @@ + + + + + + + diff --git a/io/io_cfg_files/tendency_profile_fields.xml b/io/io_cfg_files/tendency_profile_fields.xml index 6edf667f..afba828e 100644 --- a/io/io_cfg_files/tendency_profile_fields.xml +++ b/io/io_cfg_files/tendency_profile_fields.xml @@ -68,6 +68,16 @@ + + + + + + + + + + @@ -103,7 +113,7 @@ - + @@ -151,7 +161,7 @@ - + @@ -238,12 +248,12 @@ - + - + @@ -297,7 +307,7 @@ - + @@ -343,6 +353,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -401,7 +445,7 @@ - + @@ -414,7 +458,7 @@ - + @@ -494,6 +538,16 @@ + + + + + + + + + + diff --git a/io/io_cfg_files/testing.xml b/io/io_cfg_files/testing.xml new file mode 100644 index 00000000..beb01a89 --- /dev/null +++ b/io/io_cfg_files/testing.xml @@ -0,0 +1,39 @@ + + + + + +#include "io/io_cfg_files/scalar_fields.xml" +#include "io/io_cfg_files/profile_fields.xml" +#include "io/io_cfg_files/3d_fields.xml" +#include "io/io_cfg_files/2d_fields.xml" +#include "io/io_cfg_files/tendency_profile_fields.xml" +#include "io/io_cfg_files/flux_fields_description.xml" +#include "io/io_cfg_files/socrates_fields.xml" +#include "io/io_cfg_files/paracon_tracers_3d.xml" +#include "io/io_cfg_files/paracon_tracers_2d.xml" + + +#include "io/io_cfg_files/checkpoint.xml" + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/io_cfg_files/wind_profile_fields.xml b/io/io_cfg_files/wind_profile_fields.xml new file mode 100644 index 00000000..65371b13 --- /dev/null +++ b/io/io_cfg_files/wind_profile_fields.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io/src/configurationparser.F90 b/io/src/configurationparser.F90 index 622b731e..7a684087 100644 --- a/io/src/configurationparser.F90 +++ b/io/src/configurationparser.F90 @@ -3,16 +3,16 @@ module configuration_parser_mod use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH use sax_xml_parser_mod, only : xml_parse - use conversions_mod, only : conv_to_string, conv_to_integer, conv_to_real, conv_to_integer + use conversions_mod, only : conv_to_string, conv_to_integer, conv_to_real, conv_to_uppercase use collections_mod, only : hashmap_type, hashset_type, map_type, list_type, mapentry_type, c_get_generic, c_get_integer, & c_free, c_size, c_put_integer, c_put_string, c_add_generic, c_add_string - use conversions_mod, only : conv_to_integer - use logging_mod, only : LOG_WARN, LOG_ERROR, log_log + use logging_mod, only : LOG_WARN, LOG_INFO, LOG_ERROR, log_log, log_master_log, log_master_newline use optionsdatabase_mod, only : options_has_key, options_get_logical, options_get_integer, options_get_string, options_get_real, & options_get_array_size use io_server_client_mod, only : ARRAY_FIELD_TYPE, SCALAR_FIELD_TYPE, MAP_FIELD_TYPE, INTEGER_DATA_TYPE, BOOLEAN_DATA_TYPE, & STRING_DATA_TYPE, FLOAT_DATA_TYPE, DOUBLE_DATA_TYPE, definition_description_type, field_description_type use q_indices_mod, only : get_number_active_q_indices + use netcdf, only : NF90_DOUBLE, NF90_REAL implicit none #ifndef TEST_MODE @@ -94,9 +94,9 @@ module configuration_parser_mod type io_configuration_file_writer_type character(len=STRING_LENGTH) :: file_name, title - integer :: number_of_contents, write_timestep_frequency + integer :: number_of_contents, write_timestep_frequency, write_precision real :: write_time_frequency - logical :: write_on_model_time, write_on_terminate, include_in_io_state_write + logical :: write_on_model_time, write_on_terminate, include_in_io_state_write, time_basis_override type(io_configuration_file_writer_facet_type), dimension(:), allocatable :: contents end type io_configuration_file_writer_type @@ -104,7 +104,7 @@ module configuration_parser_mod type io_configuration_type integer :: number_of_data_definitions, number_of_diagnostics, io_communicator, number_of_moncs, & number_of_io_servers, my_io_rank, active_moncs, number_inter_io_communications, number_of_threads, number_of_groups, & - number_of_writers, number_of_distinct_data_fields, number_of_global_moncs, general_info_mutex + number_of_writers, number_of_distinct_data_fields, number_of_global_moncs, general_info_mutex, my_global_rank type(io_configuration_data_definition_type), dimension(:), allocatable :: data_definitions type(io_configuration_diagnostic_field_type), dimension(:), allocatable :: diagnostics type(io_configuration_group_type), dimension(:), allocatable :: groups @@ -116,6 +116,7 @@ module configuration_parser_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: zn_field real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: z_field type(list_type) :: q_field_names + type(list_type) :: tracer_names logical :: general_info_set character, dimension(:), allocatable :: text_configuration end type io_configuration_type @@ -145,6 +146,8 @@ end subroutine handle_recv_data_from_io_server character(len=STRING_LENGTH), dimension(:), allocatable :: cond_request, diag_request, cond_long, diag_long integer :: ncond, ndiag + logical :: l_thoff=.false. + logical :: time_basis=.false. public EQ_OPERATOR_TYPE, LT_OPERATOR_TYPE, GT_OPERATOR_TYPE, LTE_OPERATOR_TYPE, GTE_OPERATOR_TYPE, ADD_OPERATOR_TYPE, & SUBTRACT_OPERATOR_TYPE, MULTIPLY_OPERATOR_TYPE, DIV_OPERATOR_TYPE, MOD_OPERATOR_TYPE, DATA_SIZE_STRIDE, & @@ -156,7 +159,7 @@ end subroutine handle_recv_data_from_io_server build_definition_description_type_from_configuration, build_field_description_type_from_configuration, & get_number_field_dimensions, get_data_value_by_field_name, get_data_value_from_map_entry, get_monc_location, & get_diagnostic_field_configuration, get_prognostic_field_configuration, get_io_xml, & - cond_request, diag_request, cond_long, diag_long, ncond, ndiag + cond_request, diag_request, cond_long, diag_long, ncond, ndiag, l_thoff contains @@ -172,6 +175,9 @@ recursive function get_io_xml(filename, funit_num) result(io_xml) character(len=FILE_LINE_LEN) :: temp_line, adjusted_io_line character(len=FILE_STR_STRIDE) :: reading_buffer integer :: ierr, first_quote, last_quote, chosen_unit + logical :: comment_block + + comment_block = .false. if (present(funit_num)) then chosen_unit=funit_num @@ -185,6 +191,11 @@ recursive function get_io_xml(filename, funit_num) result(io_xml) do while (ierr == 0) read(chosen_unit,"(A)",iostat=ierr) temp_line adjusted_io_line=adjustl(temp_line) + if (adjusted_io_line(1:4) .eq. "") .ne. 0) comment_block = .false. + cycle + end if if (ierr == 0 .and. adjusted_io_line(1:1) .ne. "!" .and. adjusted_io_line(1:2) .ne. "//") then if (index(temp_line, "#include") .ne. 0) then first_quote=index(temp_line, """") @@ -221,6 +232,9 @@ subroutine configuration_parse(provided_options_database, raw_configuration, par options_database=provided_options_database + l_thoff = options_get_logical(provided_options_database, "l_thoff") + time_basis = options_get_logical(provided_options_database, "time_basis") + inside_data_definition=.false. inside_handling_definition=.false. inside_server_config=.false. @@ -259,7 +273,7 @@ end subroutine configuration_parse subroutine add_in_dimensions(provided_options_database) type(hashmap_type), intent(inout) :: provided_options_database - integer :: dim_size + integer :: dim_size, n_tracers=0 call c_put_integer(building_config%dimension_sizing, "x", options_get_integer(provided_options_database, "x_size")) call c_put_integer(building_config%dimension_sizing, "y", options_get_integer(provided_options_database, "y_size")) @@ -269,8 +283,19 @@ subroutine add_in_dimensions(provided_options_database) call c_put_integer(building_config%dimension_sizing, "zn", dim_size) call c_put_integer(building_config%dimension_sizing, "qfields", & options_get_integer(provided_options_database, "number_q_fields")) + call c_put_integer(building_config%dimension_sizing, "number_options", c_size(provided_options_database)) call c_put_integer(building_config%dimension_sizing, "active_q_indicies", get_number_active_q_indices()) + + if (options_get_logical(options_database, "tracers_enabled")) then + if (options_get_logical(options_database, "trajectories_enabled")) then + n_tracers = 5 + end if + if (options_get_logical(options_database, "radioactive_tracers_enabled")) then + n_tracers = n_tracers + options_get_integer(provided_options_database, "n_radioactive_tracers") + end if + end if ! tracers_enabled + call c_put_integer(building_config%dimension_sizing, "tfields", n_tracers) !> Since the model appears to write each of the items in dimension_sizing as dimensions in every ! netcdf file, only let these exist when the corresponding code is enabled. @@ -284,6 +309,11 @@ subroutine add_in_dimensions(provided_options_database) allocate(diag_long(ndiag)) call c_put_integer(building_config%dimension_sizing, "nd", ndiag) end if + if (options_get_logical(options_database, "pdf_analysis_enabled" )) then + dim_size = options_get_integer(options_database, "n_w_bins") + call c_put_integer(building_config%dimension_sizing, "n_w_bins", dim_size) + end if + end subroutine add_in_dimensions !> XML element start (opening) call back. This handles most of the configuration parsing @@ -614,6 +644,7 @@ subroutine define_file_writer(attribute_names, attribute_values) integer :: field_index + if (current_building_file_writer .gt. size(building_config%file_writers)) call extend_file_writer_array() field_index=get_field_index_from_name(attribute_names, "name") @@ -628,13 +659,25 @@ subroutine define_file_writer(attribute_names, attribute_values) if (field_index .gt. 0) then building_config%file_writers(current_building_file_writer)%write_time_frequency=& conv_to_real(retrieve_string_value(attribute_values(field_index), DOUBLE_DATA_TYPE)) - building_config%file_writers(current_building_file_writer)%write_on_model_time=.true. + building_config%file_writers(current_building_file_writer)%write_on_model_time=.true. + building_config%file_writers(current_building_file_writer)%time_basis_override=.false. else field_index=get_field_index_from_name(attribute_names, "write_timestep_frequency") if (field_index .gt. 0) then - building_config%file_writers(current_building_file_writer)%write_timestep_frequency=& - conv_to_real(retrieve_string_value(attribute_values(field_index), INTEGER_DATA_TYPE)) - building_config%file_writers(current_building_file_writer)%write_on_model_time=.false. + if (time_basis) then ! system-wide transform to time units over timestep tracking + ! overriding write_timestep_frequency with write_time_frequency instead + ! and turns on write_on_model_time. + ! The override affects checkpointing in particular. + building_config%file_writers(current_building_file_writer)%write_time_frequency=& + conv_to_real(conv_to_integer(retrieve_string_value(attribute_values(field_index), INTEGER_DATA_TYPE))) + building_config%file_writers(current_building_file_writer)%write_on_model_time=.true. + building_config%file_writers(current_building_file_writer)%time_basis_override=.true. + else + building_config%file_writers(current_building_file_writer)%write_timestep_frequency=& + conv_to_integer(retrieve_string_value(attribute_values(field_index), INTEGER_DATA_TYPE)) + building_config%file_writers(current_building_file_writer)%write_on_model_time=.false. + building_config%file_writers(current_building_file_writer)%time_basis_override=.false. + end if ! check for time_basis else call log_log(LOG_ERROR, "File writer requires either a write time frequency or write timestep frequency") end if @@ -663,6 +706,19 @@ subroutine define_file_writer(attribute_names, attribute_values) else building_config%file_writers(current_building_file_writer)%include_in_io_state_write=.true. end if + + field_index=get_field_index_from_name(attribute_names, "write_precision") + if (field_index .gt. 0) then + building_config%file_writers(current_building_file_writer)%write_precision=& + merge(NF90_REAL, NF90_DOUBLE, & + conv_to_uppercase(retrieve_string_value(attribute_values(field_index), STRING_DATA_TYPE)) == "FLOAT") + call log_master_newline() + call log_master_log(LOG_INFO, "Data will be written in FLOAT precision for file: "//& + trim(building_config%file_writers(current_building_file_writer)%file_name)) + else + building_config%file_writers(current_building_file_writer)%write_precision = NF90_DOUBLE + end if + building_config%file_writers(current_building_file_writer)%number_of_contents=0 allocate(building_config%file_writers(current_building_file_writer)%contents(DATA_SIZE_STRIDE)) diff --git a/io/src/diagnostics/diagnostic_federator.F90 b/io/src/diagnostics/diagnostic_federator.F90 index 4f918efb..a429f8ae 100644 --- a/io/src/diagnostics/diagnostic_federator.F90 +++ b/io/src/diagnostics/diagnostic_federator.F90 @@ -27,8 +27,10 @@ module diagnostic_federator_mod use logging_mod, only : LOG_WARN, LOG_ERROR, log_log use operator_mod, only : perform_activity, initialise_operators, finalise_operators, get_operator_required_fields, & get_operator_perform_procedure, get_operator_auto_size + use optionsdatabase_mod, only : options_get_logical use io_server_client_mod, only : DOUBLE_DATA_TYPE, INTEGER_DATA_TYPE use writer_field_manager_mod, only : provide_field_to_writer_federator + use iso_c_binding, only : c_f_procpointer implicit none #ifndef TEST_MODE @@ -79,6 +81,8 @@ module diagnostic_federator_mod integer, volatile :: timestep_entries_rwlock, all_diagnostics_per_timestep_rwlock, clean_progress_mutex, & previous_clean_point, previous_viewed_timestep, current_point + logical :: time_basis + public initialise_diagnostic_federator, finalise_diagnostic_federator, check_diagnostic_federator_for_completion, & pass_fields_to_diagnostics_federator, determine_diagnostics_fields_available contains @@ -89,6 +93,8 @@ module diagnostic_federator_mod type(hashmap_type) function initialise_diagnostic_federator(io_configuration) type(io_configuration_type), intent(inout) :: io_configuration + time_basis = options_get_logical(io_configuration%options_database,"time_basis") + call initialise_operators() call check_thread_status(forthread_rwlock_init(timestep_entries_rwlock, -1)) call check_thread_status(forthread_rwlock_init(all_diagnostics_per_timestep_rwlock, -1)) @@ -142,7 +148,7 @@ type(hashmap_type) function determine_diagnostics_fields_available(monc_field_na type(hashset_type), intent(inout) :: monc_field_names integer :: i, k, num_fields, diag_root - type(diagnostics_activity_type) :: specific_activity + type(diagnostics_activity_type), pointer :: specific_activity type(hashset_type) :: result_names_for_activities type(iterator_type) :: required_fields_iterator, activities_iterator character(len=STRING_LENGTH) :: specific_field_name @@ -155,13 +161,13 @@ type(hashmap_type) function determine_diagnostics_fields_available(monc_field_na diagnostic_provided=.true. activities_iterator=c_get_iterator(diagnostic_definitions(i)%activities) do while (c_has_next(activities_iterator)) - specific_activity=retrieve_next_activity(activities_iterator) + specific_activity=>retrieve_next_activity(activities_iterator) call c_add_string(result_names_for_activities, specific_activity%result_name) end do activities_iterator=c_get_iterator(diagnostic_definitions(i)%activities) do while (c_has_next(activities_iterator)) - specific_activity=retrieve_next_activity(activities_iterator) + specific_activity=>retrieve_next_activity(activities_iterator) if (specific_activity%root .ne. -1 .and. diag_root == -1) diag_root=specific_activity%root required_fields_iterator=c_get_iterator(specific_activity%required_fields) do while (c_has_next(required_fields_iterator)) @@ -237,7 +243,7 @@ subroutine check_all_activities_against_completed_fields(io_configuration, times type(diagnostics_activity_type), pointer :: activity character(len=STRING_LENGTH) :: field_name, activity_diag_key logical :: updated_entry, entry_in_completed_diagnostics, operator_produced_values - type(data_values_type) :: value_to_send + type(data_values_type), pointer :: value_to_send type(iterator_type) :: activities_iterator updated_entry=.true. @@ -269,7 +275,7 @@ subroutine check_all_activities_against_completed_fields(io_configuration, times .or. activity%activity_type == ALLREDUCTION_TYPE) then field_name=c_get_string(activity%required_fields, 1) call check_thread_status(forthread_rwlock_rdlock(timestep_entry%completed_fields_rwlock)) - value_to_send=get_data_value_by_field_name(timestep_entry%completed_fields, field_name) + value_to_send=>get_data_value_by_field_name(timestep_entry%completed_fields, field_name) call check_thread_status(forthread_rwlock_unlock(timestep_entry%completed_fields_rwlock)) call check_thread_status(forthread_mutex_unlock(timestep_entry%activity_completion_mutex)) call perform_inter_io_communication(io_configuration, timestep_entry, diagnostics_by_timestep, & @@ -484,7 +490,7 @@ logical function are_fields_available_for_activity(timestep_entry, activity) iterator=c_get_iterator(activity%required_fields) do while (c_has_next(iterator)) field_name=c_next_string(iterator) - if (.not. c_contains(timestep_entry%completed_fields, field_name)) then + if (.not. c_contains(timestep_entry%completed_fields, field_name)) then are_fields_available_for_activity=.false. exit end if @@ -842,6 +848,7 @@ function create_timestep_entry(io_configuration, timestep, time, source) type(iterator_type) :: iterator integer :: i, matched_datadefn_index + logical :: expect_data allocate(create_timestep_entry) create_timestep_entry%timestep=timestep @@ -850,12 +857,21 @@ function create_timestep_entry(io_configuration, timestep, time, source) create_timestep_entry%source=source create_timestep_entry%source_location=get_monc_location(io_configuration, source) create_timestep_entry%number_datas_outstanding=0 + + ! Count all data_definitions that have this frequency + ! i.e. create_timestep_entry%number_datas_outstanding = number of expected data packages at this timestep_entry do i=1, size(io_configuration%registered_moncs(create_timestep_entry%source_location)%definition_names) matched_datadefn_index=retrieve_data_definition(io_configuration, & io_configuration%registered_moncs(create_timestep_entry%source_location)%definition_names(i)) if (matched_datadefn_index .gt. 0) then - if (io_configuration%data_definitions(matched_datadefn_index)%frequency .gt. 0) then - if (mod(timestep, io_configuration%data_definitions(matched_datadefn_index)%frequency) == 0) then + if (io_configuration%data_definitions(matched_datadefn_index)%frequency .gt. 0 ) then + if (time_basis) then + expect_data = (mod(nint(time), io_configuration%data_definitions(matched_datadefn_index)%frequency) == 0) + else + expect_data = (mod(timestep, io_configuration%data_definitions(matched_datadefn_index)%frequency) == 0) + end if + + if (expect_data) then create_timestep_entry%number_datas_outstanding=create_timestep_entry%number_datas_outstanding+1 end if end if @@ -1142,7 +1158,7 @@ subroutine define_diagnostics(io_configuration, diagnostic_generation_frequency) item%activity_name=activity_name item%required_fields=get_operator_required_fields(activity_name, misc_action%embellishments) item%activity_attributes=misc_action%embellishments - item%operator_procedure=>get_operator_perform_procedure(activity_name) + call c_f_procpointer(get_operator_perform_procedure(activity_name), item%operator_procedure) item%activity_type=OPERATOR_TYPE else if (misc_action%type .eq. "communication") then if (item%root .lt. 0) call log_log(LOG_ERROR, "Root must be supplied and 0 or greater for communication actions") diff --git a/io/src/diagnostics/inter-io/allreduction-inter-io.F90 b/io/src/diagnostics/inter-io/allreduction-inter-io.F90 index 8b7c8c3d..95b70242 100644 --- a/io/src/diagnostics/inter-io/allreduction-inter-io.F90 +++ b/io/src/diagnostics/inter-io/allreduction-inter-io.F90 @@ -105,7 +105,7 @@ end subroutine perform_inter_io_allreduction subroutine internal_reduction_completion_procedure(io_configuration, values, field_name, timestep) type(io_configuration_type), intent(inout) :: io_configuration real(DEFAULT_PRECISION), dimension(:) :: values - character(len=*) :: field_name + character(len=STRING_LENGTH) :: field_name integer :: timestep type(allreduce_type), pointer :: allreduce_information diff --git a/io/src/diagnostics/inter-io/broadcast-inter-io.F90 b/io/src/diagnostics/inter-io/broadcast-inter-io.F90 index e118b60e..4a43d4ef 100644 --- a/io/src/diagnostics/inter-io/broadcast-inter-io.F90 +++ b/io/src/diagnostics/inter-io/broadcast-inter-io.F90 @@ -2,7 +2,7 @@ !! and only issues one call (and one results call to completion) for that combination module broadcast_inter_io_mod use datadefn_mod, only : DEFAULT_PRECISION, DOUBLE_PRECISION, STRING_LENGTH - use configuration_parser_mod, only : io_configuration_type, io_configuration_inter_communication_description + use configuration_parser_mod, only : io_configuration_type, io_configuration_inter_communication_description,l_thoff use collections_mod, only : hashmap_type, list_type, iterator_type, mapentry_type, c_add_string, c_remove, c_free, & c_get_generic, c_get_string, c_put_generic, c_generic_at, c_get_iterator, c_has_next, c_next_mapentry, c_next_string, & c_is_empty @@ -243,8 +243,11 @@ subroutine issue_thread_call_to_completion(field_name, timestep, values, complet call c_put_generic(thread_callback_params, trim(conv_to_string(thread_callback_params_id)), generic, .false.) thread_callback_params_id=thread_callback_params_id+1 call check_thread_status(forthread_mutex_unlock(thread_callback_params_mutex)) - - call threadpool_start_thread(thread_call_to_completion, (/ thread_callback_params_id-1 /)) + if (l_thoff) then + call thread_call_to_completion((/ thread_callback_params_id-1 /)) + else + call threadpool_start_thread(thread_call_to_completion, (/ thread_callback_params_id-1 /)) + end if end subroutine issue_thread_call_to_completion !> Called by the thread pool, this will call onto the completion procedure before cleaning up @@ -290,10 +293,10 @@ end subroutine clean_broadcast_progress_if_needed !> Performs a clean of the broadcast progresses that no longer need to be stored subroutine clean_broadcast_progress() type(inter_io_broadcast), pointer :: specific_broadcast_item_at_index - integer :: completion_flag, ierr, num_to_remove, have_lock + integer :: ierr, num_to_remove, have_lock character(len=STRING_LENGTH) :: entry_key type(list_type) :: entries_to_remove - logical :: destroy_lock + logical :: destroy_lock, completion_flag type(iterator_type) :: iterator type(mapentry_type) :: mapentry class(*), pointer :: generic @@ -312,7 +315,7 @@ subroutine clean_broadcast_progress() call mpi_testall(size(specific_broadcast_item_at_index%send_requests), specific_broadcast_item_at_index%send_requests, & completion_flag, MPI_STATUSES_IGNORE, ierr) call unlock_mpi() - if (completion_flag == 1) then + if (completion_flag) then deallocate(specific_broadcast_item_at_index%send_requests) if (allocated(specific_broadcast_item_at_index%send_buffer)) deallocate(specific_broadcast_item_at_index%send_buffer) call c_add_string(entries_to_remove, mapentry%key) diff --git a/io/src/diagnostics/inter-io/reduction-inter-io.F90 b/io/src/diagnostics/inter-io/reduction-inter-io.F90 index 702999a5..ab7821c7 100644 --- a/io/src/diagnostics/inter-io/reduction-inter-io.F90 +++ b/io/src/diagnostics/inter-io/reduction-inter-io.F90 @@ -11,7 +11,7 @@ module reduction_inter_io_mod use forthread_mod, only : forthread_mutex_init, forthread_mutex_lock, forthread_mutex_trylock, & forthread_mutex_unlock, forthread_mutex_destroy, forthread_rwlock_rdlock, forthread_rwlock_wrlock, & forthread_rwlock_unlock, forthread_rwlock_init, forthread_rwlock_destroy, forthread_rwlock_trywrlock - use threadpool_mod, only : check_thread_status, threadpool_start_thread + use threadpool_mod, only : check_thread_status use logging_mod, only : LOG_ERROR, log_log use inter_io_specifics_mod, only : handle_completion, register_inter_io_communication, find_inter_io_from_name, & package_inter_io_communication_message, unpackage_inter_io_communication_message @@ -90,7 +90,7 @@ end function check_reduction_inter_io_for_completion subroutine finalise_reduction_inter_io(io_configuration) type(io_configuration_type), intent(inout) :: io_configuration - type(reduction_progress_type) :: progress + type(reduction_progress_type), pointer :: progress type(iterator_type) :: iterator if (initialised) then @@ -98,7 +98,7 @@ subroutine finalise_reduction_inter_io(io_configuration) if (.not. c_is_empty(reduction_progresses)) then iterator=c_get_iterator(reduction_progresses) do while (c_has_next(iterator)) - progress=retrieve_reduction_progress(c_next_mapentry(iterator)) + progress=>retrieve_reduction_progress(c_next_mapentry(iterator)) if (progress%async_handle /= MPI_REQUEST_NULL) then call wait_for_mpi_request(progress%async_handle) end if @@ -196,7 +196,6 @@ logical function check_and_clean_progress(myrank) call check_thread_status(forthread_mutex_lock(specific_reduction_progress%mutex)) if (specific_reduction_progress%async_handle /= MPI_REQUEST_NULL) then call wait_for_mpi_request(specific_reduction_progress%async_handle) - !if (completed == 1) then if (specific_reduction_progress%async_handle == MPI_REQUEST_NULL) then if (allocated(specific_reduction_progress%send_buffer)) deallocate(specific_reduction_progress%send_buffer) destroy_lock=.true. @@ -208,7 +207,7 @@ logical function check_and_clean_progress(myrank) call check_thread_status(forthread_mutex_unlock(specific_reduction_progress%mutex)) if (destroy_lock) call check_thread_status(forthread_mutex_destroy(specific_reduction_progress%mutex)) end if - end do + end do ! loop over specific_reduction_progress items call check_thread_status(forthread_rwlock_unlock(reduction_progress_rwlock)) if (.not. c_is_empty(entries_to_remove)) then diff --git a/io/src/diagnostics/operators/operator.F90 b/io/src/diagnostics/operators/operator.F90 index 2567aaad..7706b185 100644 --- a/io/src/diagnostics/operators/operator.F90 +++ b/io/src/diagnostics/operators/operator.F90 @@ -12,6 +12,7 @@ module operator_mod use fieldcoarsener_operator_mod, only : perform_fieldcoarsener_operator, fieldcoarsener_operator_get_required_fields, & fieldcoarsener_operator_get_auto_size use logging_mod, only : LOG_ERROR, log_log + use iso_c_binding, only: c_funptr, c_funloc implicit none #ifndef TEST_MODE @@ -53,18 +54,18 @@ end subroutine finalise_operators !! @returns The execution procedure which can be called to run the operator function get_operator_perform_procedure(operator_name) character(len=*), intent(in) :: operator_name - procedure(perform_activity), pointer :: get_operator_perform_procedure + type(c_funptr) :: get_operator_perform_procedure if (trim(operator_name) .eq. "arithmetic") then - get_operator_perform_procedure=>perform_arithmetic_operator + get_operator_perform_procedure = c_funloc(perform_arithmetic_operator) else if (trim(operator_name) .eq. "localreduce") then - get_operator_perform_procedure=>perform_localreduce_operator + get_operator_perform_procedure = c_funloc(perform_localreduce_operator) else if (trim(operator_name) .eq. "reductionlocation") then - get_operator_perform_procedure=>perform_reductionlocation_operator + get_operator_perform_procedure = c_funloc(perform_reductionlocation_operator) else if (trim(operator_name) .eq. "field_slicer") then - get_operator_perform_procedure=>perform_fieldslicer_operator + get_operator_perform_procedure = c_funloc(perform_fieldslicer_operator) else if (trim(operator_name) .eq. "field_coarsener") then - get_operator_perform_procedure=>perform_fieldcoarsener_operator + get_operator_perform_procedure = c_funloc(perform_fieldcoarsener_operator) else call log_log(LOG_ERROR, "Operator '"//trim(operator_name)//"' not found so ignoring") end if diff --git a/io/src/forthread/forthread.F90 b/io/src/forthread/forthread.F90 index 3c80fb18..d89bd2b6 100644 --- a/io/src/forthread/forthread.F90 +++ b/io/src/forthread/forthread.F90 @@ -3,6 +3,7 @@ module forthread_mod use forthread_data use forthread_types use forthread_ciface_mod +use configuration_parser_mod, only : l_thoff implicit none contains @@ -10,6 +11,8 @@ module forthread_mod integer function forthread_init() integer :: info + if (l_thoff) return + allocate(routine_table(init_size)) routine_table_size = init_size @@ -22,6 +25,8 @@ end function forthread_init integer function forthread_destroy() integer :: info + if (l_thoff) return + deallocate(routine_table) routine_table_size = 0 call thread_mutex_destroy(routine_table_mutex,info) @@ -39,6 +44,9 @@ integer function forthread_create(thread_id,attr_id,run,arg) procedure(i_start_routine), bind(c), pointer :: start_routinep type(ptr_t_run), dimension(:), pointer :: tmp type(t_run), pointer :: runp + + if (l_thoff) return + call thread_mutex_lock(routine_table_mutex,info) call thread_alloc(thread_id,info) @@ -69,6 +77,8 @@ integer function forthread_detach(thread_id) integer :: info + if (l_thoff) return + call thread_detach(thread_id,info) forthread_detach=info end function forthread_detach @@ -78,6 +88,8 @@ integer function forthread_equal(t1,t2) integer :: info + if (l_thoff) return + call thread_equal(t1,t2,info) forthread_equal=info end function forthread_equal @@ -96,6 +108,9 @@ integer function forthread_join(thread_id,val) integer :: info type(c_ptr) :: value_ptr + + if (l_thoff) return + call thread_join(thread_id,value_ptr,info) call c_f_pointer(value_ptr,val) forthread_join=info @@ -106,6 +121,8 @@ integer function forthread_cancel(thread_id) integer :: info + if (l_thoff) return + call thread_cancel(thread_id,info) forthread_cancel=info end function forthread_cancel @@ -115,6 +132,8 @@ integer function forthread_kill(thread_id,sig) integer :: info + if (l_thoff) return + call thread_kill(thread_id,sig,info) forthread_kill=info end function forthread_kill @@ -124,6 +143,8 @@ integer function forthread_once_init(once_ctrl_id) integer :: info + if (l_thoff) return + call thread_once_init(once_ctrl_id,info) forthread_once_init=info end function forthread_once_init @@ -136,6 +157,8 @@ integer function forthread_once(once_ctrl_id,init_routine) integer :: info + if (l_thoff) return + call thread_once(once_ctrl_id,c_funloc(init_routine),info) forthread_once=info end function forthread_once @@ -147,6 +170,8 @@ integer function forthread_getconcurrency(currlevel) integer :: info + if (l_thoff) return + call thread_getconcurrency(currlevel,info) forthread_getconcurrency=info end function forthread_getconcurrency @@ -156,6 +181,8 @@ integer function forthread_setconcurrency(newlevel) integer :: info + if (l_thoff) return + call thread_setconcurrency(newlevel,info) forthread_setconcurrency=info end function forthread_setconcurrency @@ -167,6 +194,8 @@ integer function forthread_getcpuclockid(thread,clock_id) integer :: info + if (l_thoff) return + call thread_getcpuclockid(thread,clock_id,info) forthread_getcpuclockid=info end function forthread_getcpuclockid @@ -179,6 +208,8 @@ integer function forthread_getschedparam(thread,policy,param) integer :: info + if (l_thoff) return + call thread_getschedparam(thread,policy,param,info) forthread_getschedparam=info end function forthread_getschedparam @@ -189,6 +220,8 @@ integer function forthread_setschedparam(thread,policy,param) integer :: info + if (l_thoff) return + call thread_setschedparam(thread,policy,param,info) forthread_setschedparam=info end function forthread_setschedparam @@ -199,6 +232,8 @@ integer function forthread_setschedprio(thread,prio) integer :: info + if (l_thoff) return + call thread_setschedprio(thread,prio,info) forthread_setschedprio=info end function forthread_setschedprio @@ -210,6 +245,8 @@ integer function forthread_setcancelstate(state,oldstate) integer :: info + if (l_thoff) return + call thread_setcancelstate(state,oldstate,info) forthread_setcancelstate=info end function forthread_setcancelstate @@ -220,6 +257,8 @@ integer function forthread_setcanceltype(ctype,oldctype) integer :: info + if (l_thoff) return + call thread_setcanceltype(ctype,oldctype,info) forthread_setcanceltype=info end function forthread_setcanceltype @@ -233,6 +272,8 @@ integer function forthread_key_delete(key_id) integer :: info + if (l_thoff) return + call thread_key_delete(key_id,info) forthread_key_delete=info end function forthread_key_delete @@ -245,6 +286,8 @@ integer function forthread_key_create(key_id,destructor) integer :: info + if (l_thoff) return + call thread_key_create(key_id,c_funloc(destructor),info) forthread_key_create=info end function forthread_key_create @@ -266,6 +309,8 @@ integer function forthread_mutex_destroy(mutex_id) integer :: info + if (l_thoff) return + call thread_mutex_destroy(mutex_id,info) forthread_mutex_destroy=info end function forthread_mutex_destroy @@ -276,6 +321,8 @@ integer function forthread_mutex_init(mutex_id,attr_id) integer :: info + if (l_thoff) return + call thread_mutex_init(mutex_id,attr_id,info) forthread_mutex_init=info end function forthread_mutex_init @@ -285,6 +332,8 @@ integer function forthread_mutex_lock(mutex_id) integer :: info + if (l_thoff) return + call thread_mutex_lock(mutex_id,info) forthread_mutex_lock=info end function forthread_mutex_lock @@ -294,6 +343,8 @@ integer function forthread_mutex_trylock(mutex_id) integer :: info + if (l_thoff) return + call thread_mutex_trylock(mutex_id,info) forthread_mutex_trylock=info end function forthread_mutex_trylock @@ -313,6 +364,8 @@ integer function forthread_mutex_getprioceiling(mutex,prioceiling) integer :: info + if (l_thoff) return + call thread_mutex_getprioceiling(mutex,prioceiling,info) forthread_mutex_getprioceiling=info end function forthread_mutex_getprioceiling @@ -323,6 +376,8 @@ integer function forthread_mutex_setprioceiling(mutex,prioceiling,old_ceiling) integer :: info + if (l_thoff) return + call thread_mutex_setprioceiling(mutex,prioceiling,old_ceiling,info) forthread_mutex_setprioceiling=info end function forthread_mutex_setprioceiling @@ -334,6 +389,8 @@ integer function forthread_mutex_timedlock(mutex,abs_timeout) integer :: info + if (l_thoff) return + call thread_mutex_timedlock(mutex,abs_timeout,info) forthread_mutex_timedlock=info end function forthread_mutex_timedlock @@ -348,6 +405,8 @@ integer function forthread_cond_destroy(cond_id) integer :: info + if (l_thoff) return + call thread_cond_destroy(cond_id,info) forthread_cond_destroy=info end function forthread_cond_destroy @@ -358,6 +417,8 @@ integer function forthread_cond_init(cond_id,attr_id) integer :: info + if (l_thoff) return + call thread_cond_init(cond_id,attr_id,info) forthread_cond_init=info end function forthread_cond_init @@ -368,6 +429,8 @@ integer function forthread_cond_timedwait(mutex,abstime) integer :: info + if (l_thoff) return + call thread_cond_timedwait(mutex,abstime,info) forthread_cond_timedwait=info end function forthread_cond_timedwait @@ -377,6 +440,8 @@ integer function forthread_cond_wait(cond_id,mutex_id) integer :: info + if (l_thoff) return + call thread_cond_wait(cond_id,mutex_id,info) forthread_cond_wait=info end function forthread_cond_wait @@ -386,6 +451,8 @@ integer function forthread_cond_broadcast(cond_id) integer :: info + if (l_thoff) return + call thread_cond_broadcast(cond_id,info) forthread_cond_broadcast=info end function forthread_cond_broadcast @@ -395,6 +462,8 @@ integer function forthread_cond_signal(cond_id) integer :: info + if (l_thoff) return + call thread_cond_signal(cond_id,info) forthread_cond_signal=info end function forthread_cond_signal @@ -409,6 +478,8 @@ integer function forthread_barrier_destroy(barrier_id) integer :: info + if (l_thoff) return + call thread_barrier_destroy(barrier_id,info) forthread_barrier_destroy=info end function forthread_barrier_destroy @@ -419,6 +490,8 @@ integer function forthread_barrier_init(barrier_id,attr_id,tcount) integer :: info + if (l_thoff) return + call thread_barrier_init(barrier_id,attr_id,tcount,info) forthread_barrier_init=info end function forthread_barrier_init @@ -428,6 +501,8 @@ integer function forthread_barrier_wait(barrier_id) integer :: info + if (l_thoff) return + call thread_barrier_wait(barrier_id,info) forthread_barrier_wait=info end function forthread_barrier_wait @@ -443,6 +518,8 @@ integer function forthread_spin_destroy(spinlock_id) integer :: info + if (l_thoff) return + call thread_spin_destroy(spinlock_id,info) forthread_spin_destroy=info end function forthread_spin_destroy @@ -453,6 +530,8 @@ integer function forthread_spin_init(spinlock_id,pshared) integer :: info + if (l_thoff) return + call thread_spin_init(spinlock_id,pshared,info) forthread_spin_init=info end function forthread_spin_init @@ -462,6 +541,8 @@ integer function forthread_spin_lock(lock_id) integer :: info + if (l_thoff) return + call thread_spin_lock(lock_id,info) forthread_spin_lock=info end function forthread_spin_lock @@ -471,6 +552,8 @@ integer function forthread_spin_trylock(lock_id) integer :: info + if (l_thoff) return + call thread_spin_trylock(lock_id,info) forthread_spin_trylock=info end function forthread_spin_trylock @@ -480,6 +563,8 @@ integer function forthread_spin_unlock(lock_id) integer :: info + if (l_thoff) return + call thread_spin_unlock(lock_id,info) forthread_spin_unlock=info end function forthread_spin_unlock @@ -496,6 +581,8 @@ integer function forthread_rwlock_destroy(rwlock_id) integer :: info + if (l_thoff) return + call thread_rwlock_destroy(rwlock_id,info) forthread_rwlock_destroy=info end function forthread_rwlock_destroy @@ -506,6 +593,8 @@ integer function forthread_rwlock_init(rwlock_id,attr_id) integer :: info + if (l_thoff) return + call thread_rwlock_init(rwlock_id,attr_id,info) forthread_rwlock_init=info end function forthread_rwlock_init @@ -515,6 +604,8 @@ integer function forthread_rwlock_rdlock(lock_id) integer :: info + if (l_thoff) return + call thread_rwlock_rdlock(lock_id,info) forthread_rwlock_rdlock=info end function forthread_rwlock_rdlock @@ -524,6 +615,8 @@ integer function forthread_rwlock_tryrdlock(lock_id) integer :: info + if (l_thoff) return + call thread_rwlock_tryrdlock(lock_id,info) forthread_rwlock_tryrdlock=info end function forthread_rwlock_tryrdlock @@ -533,6 +626,8 @@ integer function forthread_rwlock_wrlock(lock_id) integer :: info + if (l_thoff) return + call thread_rwlock_wrlock(lock_id,info) forthread_rwlock_wrlock=info end function forthread_rwlock_wrlock @@ -542,6 +637,8 @@ integer function forthread_rwlock_trywrlock(lock_id) integer :: info + if (l_thoff) return + call thread_rwlock_trywrlock(lock_id,info) forthread_rwlock_trywrlock=info end function forthread_rwlock_trywrlock @@ -551,6 +648,8 @@ integer function forthread_rwlock_unlock(lock_id) integer :: info + if (l_thoff) return + call thread_rwlock_unlock(lock_id,info) forthread_rwlock_unlock=info end function forthread_rwlock_unlock @@ -562,6 +661,8 @@ integer function forthread_rwlock_timedrdlock(lock_id,abs_timeout) integer :: info + if (l_thoff) return + call thread_rwlock_timedrdlock(lock_id,abs_timeout,info) forthread_rwlock_timedrdlock=info end function forthread_rwlock_timedrdlock @@ -572,6 +673,8 @@ integer function forthread_rwlock_timedwrlock(lock_id,abs_timeout) integer :: info + if (l_thoff) return + call thread_rwlock_timedwrlock(lock_id,abs_timeout,info) forthread_rwlock_timedwrlock=info end function forthread_rwlock_timedwrlock @@ -586,6 +689,8 @@ integer function forthread_attr_destroy(attr) integer :: info + if (l_thoff) return + call thread_attr_destroy(attr,info) forthread_attr_destroy=info end function forthread_attr_destroy @@ -595,6 +700,8 @@ integer function forthread_attr_init(attr) integer :: info + if (l_thoff) return + call thread_attr_init(attr,info) forthread_attr_init=info end function forthread_attr_init @@ -605,6 +712,8 @@ integer function forthread_attr_getdetachstate(attr,detachstate) integer :: info + if (l_thoff) return + call thread_attr_getdetachstate(attr,detachstate,info) forthread_attr_getdetachstate=info end function forthread_attr_getdetachstate @@ -613,6 +722,8 @@ integer function forthread_attr_setdetachstate(attr,detachstate) integer, intent(in) :: attr, detachstate integer :: info + if (l_thoff) return + call thread_attr_setdetachstate(attr,detachstate,info) forthread_attr_setdetachstate=info end function forthread_attr_setdetachstate @@ -623,6 +734,8 @@ integer function forthread_attr_getguardsize(attr,guardsize) integer :: info + if (l_thoff) return + call thread_attr_getguardsize(attr,guardsize,info) forthread_attr_getguardsize=info end function forthread_attr_getguardsize @@ -633,6 +746,8 @@ integer function forthread_attr_setguardsize(attr,guardsize) integer :: info + if (l_thoff) return + call thread_attr_setguardsize(attr,guardsize,info) forthread_attr_setguardsize=info end function forthread_attr_setguardsize @@ -643,6 +758,8 @@ integer function forthread_attr_getinheritsched(attr,inheritsched) integer :: info + if (l_thoff) return + call thread_attr_getinheritsched(attr,inheritsched,info) forthread_attr_getinheritsched=info end function forthread_attr_getinheritsched @@ -653,6 +770,8 @@ integer function forthread_attr_setinheritsched(attr,inheritsched) integer :: info + if (l_thoff) return + call thread_attr_setinheritsched(attr,inheritsched,info) forthread_attr_setinheritsched=info end function forthread_attr_setinheritsched @@ -663,6 +782,8 @@ integer function forthread_attr_getschedparam(attr,param) integer :: info + if (l_thoff) return + call thread_attr_getschedparam(attr,param,info) forthread_attr_getschedparam=info end function forthread_attr_getschedparam @@ -673,6 +794,8 @@ integer function forthread_attr_setschedparam(attr,param) integer :: info + if (l_thoff) return + call thread_attr_setschedparam(attr,param,info) forthread_attr_setschedparam=info end function forthread_attr_setschedparam @@ -683,6 +806,8 @@ integer function forthread_attr_getschedpolicy(attr,policy) integer :: info + if (l_thoff) return + call thread_attr_getschedpolicy(attr,policy,info) forthread_attr_getschedpolicy=info end function forthread_attr_getschedpolicy @@ -692,6 +817,8 @@ integer function forthread_attr_setschedpolicy(attr,policy) integer :: info + if (l_thoff) return + call thread_attr_setschedpolicy(attr,policy,info) forthread_attr_setschedpolicy=info end function forthread_attr_setschedpolicy @@ -702,6 +829,8 @@ integer function forthread_attr_getscope(attr,scope) integer :: info + if (l_thoff) return + call thread_attr_getscope(attr,scope,info) forthread_attr_getscope=info end function forthread_attr_getscope @@ -711,6 +840,8 @@ integer function forthread_attr_setscope(attr,scope) integer :: info + if (l_thoff) return + call thread_attr_setscope(attr,scope,info) forthread_attr_setscope=info end function forthread_attr_setscope @@ -721,6 +852,8 @@ integer function forthread_attr_getstacksize(attr,stacksize) integer :: info + if (l_thoff) return + call thread_attr_getstacksize(attr,stacksize,info) forthread_attr_getstacksize=info end function forthread_attr_getstacksize @@ -731,6 +864,8 @@ integer function forthread_attr_setstacksize(attr,stacksize) integer :: info + if (l_thoff) return + call thread_attr_setstacksize(attr,stacksize,info) forthread_attr_setstacksize=info end function forthread_attr_setstacksize @@ -744,6 +879,8 @@ integer function forthread_mutexattr_destroy(attr) integer :: info + if (l_thoff) return + call thread_mutexattr_destroy(attr,info) forthread_mutexattr_destroy=info end function forthread_mutexattr_destroy @@ -753,6 +890,8 @@ integer function forthread_mutexattr_init(attr) integer :: info + if (l_thoff) return + call thread_mutexattr_init(attr,info) forthread_mutexattr_init=info end function forthread_mutexattr_init @@ -763,6 +902,8 @@ integer function forthread_mutexattr_getpshared(attr,pshared) integer :: info + if (l_thoff) return + call thread_mutexattr_getpshared(attr,pshared,info) forthread_mutexattr_getpshared=info end function forthread_mutexattr_getpshared @@ -772,6 +913,8 @@ integer function forthread_mutexattr_setpshared(attr,pshared) integer , intent(in) :: pshared integer :: info + if (l_thoff) return + call thread_mutexattr_setpshared(attr,pshared,info) forthread_mutexattr_setpshared=info end function forthread_mutexattr_setpshared @@ -782,6 +925,8 @@ integer function forthread_mutexattr_getprioceiling(attr,prioceiling) integer :: info + if (l_thoff) return + call thread_mutexattr_getprioceiling(attr,prioceiling,info) forthread_mutexattr_getprioceiling=info end function forthread_mutexattr_getprioceiling @@ -791,6 +936,8 @@ integer function forthread_mutexattr_setprioceiling(attr,prioceiling) integer :: info + if (l_thoff) return + call thread_mutexattr_setprioceiling(attr,prioceiling,info) forthread_mutexattr_setprioceiling=info end function forthread_mutexattr_setprioceiling @@ -801,6 +948,8 @@ integer function forthread_mutexattr_getprotocol(attr,protocol) integer :: info + if (l_thoff) return + call thread_mutexattr_getprotocol(attr,protocol,info) forthread_mutexattr_getprotocol=info end function forthread_mutexattr_getprotocol @@ -810,6 +959,8 @@ integer function forthread_mutexattr_setprotocol(attr,protocol) integer :: info + if (l_thoff) return + call thread_mutexattr_setprotocol(attr,protocol,info) forthread_mutexattr_setprotocol=info end function forthread_mutexattr_setprotocol @@ -820,6 +971,8 @@ integer function forthread_mutexattr_gettype(attr,mtype) integer :: info + if (l_thoff) return + call thread_mutexattr_gettype(attr,mtype,info) forthread_mutexattr_gettype=info end function forthread_mutexattr_gettype @@ -829,6 +982,8 @@ integer function forthread_mutexattr_settype(attr,mtype) integer :: info + if (l_thoff) return + call thread_mutexattr_settype(attr,mtype,info) forthread_mutexattr_settype=info end function forthread_mutexattr_settype @@ -842,6 +997,8 @@ integer function forthread_condattr_destroy(attr) integer :: info + if (l_thoff) return + call thread_condattr_destroy(attr,info) forthread_condattr_destroy=info end function forthread_condattr_destroy @@ -851,6 +1008,8 @@ integer function forthread_condattr_init(attr) integer :: info + if (l_thoff) return + call thread_condattr_init(attr,info) forthread_condattr_init=info end function forthread_condattr_init @@ -861,6 +1020,8 @@ integer function forthread_condattr_getpshared(attr,pshared) integer :: info + if (l_thoff) return + call thread_condattr_getpshared(attr,pshared,info) forthread_condattr_getpshared=info end function forthread_condattr_getpshared @@ -870,6 +1031,8 @@ integer function forthread_condattr_setpshared(attr,pshared) integer :: info + if (l_thoff) return + call thread_condattr_setpshared(attr,pshared,info) forthread_condattr_setpshared=info end function forthread_condattr_setpshared @@ -881,6 +1044,8 @@ integer function forthread_condattr_getclock(attr,clock_id) integer :: info + if (l_thoff) return + call thread_condattr_getclock(attr,clock_id,info) forthread_condattr_getclock=info end function forthread_condattr_getclock @@ -891,6 +1056,8 @@ integer function forthread_condattr_setclock(attr,clock_id) integer :: info + if (l_thoff) return + call thread_condattr_setclock(attr,clock_id,info) forthread_condattr_setclock=info end function forthread_condattr_setclock @@ -904,6 +1071,8 @@ integer function forthread_barrierattr_destroy(attr) integer :: info + if (l_thoff) return + call thread_barrierattr_destroy(attr,info) forthread_barrierattr_destroy=info end function forthread_barrierattr_destroy @@ -913,6 +1082,8 @@ integer function forthread_barrierattr_init(attr) integer :: info + if (l_thoff) return + call thread_barrierattr_init(attr,info) forthread_barrierattr_init=info end function forthread_barrierattr_init @@ -923,6 +1094,8 @@ integer function forthread_barrierattr_getpshared(attr,pshared) integer :: info + if (l_thoff) return + call thread_barrierattr_getpshared(attr,pshared,info) forthread_barrierattr_getpshared=info end function forthread_barrierattr_getpshared @@ -931,6 +1104,8 @@ integer function forthread_barrierattr_setpshared(attr,pshared) integer, intent(in) :: attr, pshared integer :: info + if (l_thoff) return + call thread_barrierattr_setpshared(attr,pshared,info) forthread_barrierattr_setpshared=info end function forthread_barrierattr_setpshared @@ -944,6 +1119,8 @@ integer function forthread_rwlockattr_destroy(attr) integer, intent(in) :: attr integer :: info + if (l_thoff) return + call thread_rwlockattr_destroy(attr,info) forthread_rwlockattr_destroy=info end function forthread_rwlockattr_destroy @@ -952,6 +1129,8 @@ integer function forthread_rwlockattr_init(attr) integer, intent(in) :: attr integer :: info + if (l_thoff) return + call thread_rwlockattr_init(attr,info) forthread_rwlockattr_init=info end function forthread_rwlockattr_init @@ -961,6 +1140,8 @@ integer function forthread_rwlockattr_getpshared(attr,pshared) integer, intent(out) :: pshared integer :: info + if (l_thoff) return + call thread_rwlockattr_getpshared(attr,pshared,info) forthread_rwlockattr_getpshared=info end function forthread_rwlockattr_getpshared @@ -969,6 +1150,8 @@ integer function forthread_rwlockattr_setpshared(attr,pshared) integer, intent(in) :: attr, pshared integer :: info + if (l_thoff) return + call thread_rwlockattr_setpshared(attr,pshared,info) forthread_rwlockattr_setpshared=info end function forthread_rwlockattr_setpshared diff --git a/io/src/forthread/ft_attr.c b/io/src/forthread/ft_attr.c index b9098eb2..ee08426d 100644 --- a/io/src/forthread/ft_attr.c +++ b/io/src/forthread/ft_attr.c @@ -1,13 +1,10 @@ #include "ft_attr.h" - /*****************************************/ /* attribute object routines */ /*****************************************/ - - void thread_attr_destroy(int *attr, int *info) { *info = FT_OK; diff --git a/io/src/forthread/ft_attr.h b/io/src/forthread/ft_attr.h index 6b74989f..5ec1c4a4 100644 --- a/io/src/forthread/ft_attr.h +++ b/io/src/forthread/ft_attr.h @@ -28,7 +28,6 @@ void thread_attr_destroy(int *attr, int *info); - void thread_attr_init(int *attr, int *info); void thread_attr_getdetachstate(int *attr, int *detachstate, int *info); @@ -85,7 +84,7 @@ void thread_mutexattr_settype(int *attr, int *type, int *info); /*****************************************************/ -/* condition attriubute variable routines */ +/* condition attribute variable routines */ /*****************************************************/ diff --git a/io/src/forthread/ft_data.c b/io/src/forthread/ft_data.c index e5230713..39fe055b 100644 --- a/io/src/forthread/ft_data.c +++ b/io/src/forthread/ft_data.c @@ -1,7 +1,106 @@ #include "ft_data.h" - +int is_initialized; +array_t *threads; +array_t *thread_attrs; +array_t *thread_keys; +array_t *mutexes; +array_t *mutex_attrs; +array_t *once_ctrls; +array_t *conds; +array_t *cond_attrs ; +array_t *barriers; +array_t *barrier_attrs; +varray_t *spinlocks; +array_t *rwlocks; +array_t *rwlock_attrs; + +void thread_init_internal(int *info) { + int i = 0; + pthread_t stid; + static int init = 0; + *info = FT_OK; + + if (init) { + *info = FT_EINIT; + return; + } + threads = NULL; + array_init(&threads,INIT_SIZE); + thread_attrs = NULL; + array_init(&thread_attrs,INIT_SIZE); + thread_keys = NULL; + array_init(&thread_keys,INIT_SIZE); + once_ctrls = NULL; + array_init(&once_ctrls,INIT_SIZE); + mutexes = NULL; + array_init(&mutexes,INIT_SIZE); + mutex_attrs = NULL; + array_init(&mutex_attrs,INIT_SIZE); + conds = NULL; + array_init(&conds,INIT_SIZE); + cond_attrs = NULL; + array_init(&cond_attrs,INIT_SIZE); + barriers = NULL; + array_init(&barriers,INIT_SIZE); + barrier_attrs = NULL; + array_init(&barrier_attrs,INIT_SIZE); + spinlocks = NULL; + varray_init(&spinlocks,INIT_SIZE); + rwlocks = NULL; + array_init(&rwlocks,INIT_SIZE); + rwlock_attrs = NULL; + array_init(&rwlock_attrs,INIT_SIZE); + // allocate and store the thread master ID + threads->data[0] = (pthread_t*) malloc(sizeof(pthread_t)); + stid = pthread_self(); + memcpy(threads->data[0],&stid,sizeof(pthread_t)); + threads->after++; + init = 1; + is_initialized = init; +} + +void thread_destroy_internal(int* info) { + int id; + for(id = 1; id < threads->after; id++) { + thread_cancel(&id,info); + } + array_delete(threads); + array_delete(thread_attrs); + array_delete(thread_keys); + array_delete(once_ctrls); + for(id = 0; id < mutexes->after; id++) { + thread_mutex_destroy(&id,info); + } + array_delete(mutexes); + array_delete(mutex_attrs); + for(id = 0; id < conds->after; id++) { + thread_cond_destroy(&id,info); + } + array_delete(conds); + array_delete(cond_attrs); + +#ifdef _POSIX_BARRIERS + for(id = 0; id < barriers->after; id++) { + thread_barrier_destroy(&id,info); + } + array_delete(barriers); + array_delete(barrier_attrs); +#endif +#ifndef __DARWIN + for(id = 0; id < spinlocks->after; id++) { + thread_spin_destroy(&id,info); + } + varray_delete(spinlocks); +#endif + for(id = 0; id < rwlocks->after; id++) { + thread_rwlock_destroy(&id,info); + } + array_delete(rwlocks); + array_delete(rwlock_attrs); + *info = FT_OK; +} /** * Initializes a given array. The argument array must be either @@ -89,7 +188,7 @@ void varray_delete(varray_t *array) { * This function is not thread safe **/ int is_valid(array_t *arr, int id) { - if ((id >= 0) && (id < arr->after) && + if ((id >= 0) && (id < arr->after) && (arr->data[id] != NULL)) return 1; else diff --git a/io/src/forthread/ft_data.h b/io/src/forthread/ft_data.h index 89b9d53b..f9be9441 100644 --- a/io/src/forthread/ft_data.h +++ b/io/src/forthread/ft_data.h @@ -4,7 +4,7 @@ #include #include - +#include "ft_consts.h" #if defined(__DARWIN) && !defined(CLOCKID_ALREADY_DECLARED) typedef int clockid_t; @@ -30,37 +30,35 @@ typedef struct varray_tag { pthread_mutex_t mutex; } varray_t; - - /** * global data structures **/ -int is_initialized; +extern int is_initialized; /** * holds the thread IDs **/ -array_t *threads; +extern array_t *threads; /** * holds thread attributes, the index does not - * necesseraly conincide with the one of threads. + * necesseraly coincide with the one of threads. * * This array is just to allow different threads spawn new * threads at the same time. **/ -array_t *thread_attrs; +extern array_t *thread_attrs; /** * holds thread keys for storing thread specific data **/ -array_t *thread_keys; +extern array_t *thread_keys; /* * holds the mutex IDs **/ -array_t *mutexes; +extern array_t *mutexes; /** * holds thread mutex attributes, the index does not @@ -69,18 +67,18 @@ array_t *mutexes; * This array is just to allow different threads handle * their mutexes **/ -array_t *mutex_attrs; +extern array_t *mutex_attrs; /** * an array to hold pthread_once_t structures **/ -array_t *once_ctrls; +extern array_t *once_ctrls; /** * an array to hold thread condition variable (pthread_cond_t) * structures **/ -array_t *conds; +extern array_t *conds; /** * holds thread condition variable attributes, the index does not @@ -89,13 +87,13 @@ array_t *conds; * This array is just to allow different threads handle * their condition variables **/ -array_t *cond_attrs ; +extern array_t *cond_attrs ; /** * an array to hold thread barrier variable (pthread_barrier_t) * structures **/ -array_t *barriers; +extern array_t *barriers; /** * holds thread barrier variable attributes, the index does not @@ -104,19 +102,19 @@ array_t *barriers; * This array is just to allow different threads handle * their condition variables **/ -array_t *barrier_attrs; +extern array_t *barrier_attrs; /** * an array to hold spinlock variable (pthread_spinlock_t) * structures **/ -varray_t *spinlocks; +extern varray_t *spinlocks; /** * an array to hold thread read-write lock variable (pthread_rwlock_t) * structures **/ -array_t *rwlocks; +extern array_t *rwlocks; /** * holds thread rwlock variable attributes, the index does not @@ -125,7 +123,12 @@ array_t *rwlocks; * This array is just to allow different threads handle * their condition variables **/ -array_t *rwlock_attrs; +extern array_t *rwlock_attrs; + +void thread_init_internal(int *); +void thread_destroy_internal(int *); + +/////////////////////////////////////////////////////////////// void array_init(array_t **array,int size); diff --git a/io/src/forthread/ft_wrapper.c b/io/src/forthread/ft_wrapper.c index b1b217fb..088c50ce 100644 --- a/io/src/forthread/ft_wrapper.c +++ b/io/src/forthread/ft_wrapper.c @@ -9,105 +9,21 @@ * or systems that also implement optional POSIX threads APIs */ - -#include "ft_consts.h" -#include "ft_data.h" -#include "ft_attr.h" #include "ft_wrapper.h" /* * Forthreads initialization routine */ void thread_init(int *info) { - int i = 0; - pthread_t stid; - static int init = 0; - *info = FT_OK; - - if (init) { - *info = FT_EINIT; - return; - } - threads = NULL; - array_init(&threads,INIT_SIZE); - thread_attrs = NULL; - array_init(&thread_attrs,INIT_SIZE); - thread_keys = NULL; - array_init(&thread_keys,INIT_SIZE); - once_ctrls = NULL; - array_init(&once_ctrls,INIT_SIZE); - mutexes = NULL; - array_init(&mutexes,INIT_SIZE); - mutex_attrs = NULL; - array_init(&mutex_attrs,INIT_SIZE); - conds = NULL; - array_init(&conds,INIT_SIZE); - cond_attrs = NULL; - array_init(&cond_attrs,INIT_SIZE); - barriers = NULL; - array_init(&barriers,INIT_SIZE); - barrier_attrs = NULL; - array_init(&barrier_attrs,INIT_SIZE); - spinlocks = NULL; - varray_init(&spinlocks,INIT_SIZE); - rwlocks = NULL; - array_init(&rwlocks,INIT_SIZE); - rwlock_attrs = NULL; - array_init(&rwlock_attrs,INIT_SIZE); - // allocate and store the thread master ID - threads->data[0] = (pthread_t*) malloc(sizeof(pthread_t)); - stid = pthread_self(); - memcpy(threads->data[0],&stid,sizeof(pthread_t)); - threads->after++; - - init = 1; - is_initialized = init; + thread_init_internal(info); } /* * Destruction routine, should be only called at the program end */ void thread_destroy(int* info) { - int id; - for(id = 1; id < threads->after; id++) { - thread_cancel(&id,info); - } - array_delete(threads); - array_delete(thread_attrs); - array_delete(thread_keys); - array_delete(once_ctrls); - for(id = 0; id < mutexes->after; id++) { - thread_mutex_destroy(&id,info); - } - array_delete(mutexes); - array_delete(mutex_attrs); - for(id = 0; id < conds->after; id++) { - thread_cond_destroy(&id,info); - } - array_delete(conds); - array_delete(cond_attrs); - -#ifdef _POSIX_BARRIERS - for(id = 0; id < barriers->after; id++) { - thread_barrier_destroy(&id,info); + thread_destroy_internal(info); } - array_delete(barriers); - array_delete(barrier_attrs); -#endif -#ifndef __DARWIN - for(id = 0; id < spinlocks->after; id++) { - thread_spin_destroy(&id,info); - } - varray_delete(spinlocks); -#endif - for(id = 0; id < rwlocks->after; id++) { - thread_rwlock_destroy(&id,info); - } - array_delete(rwlocks); - array_delete(rwlock_attrs); - *info = FT_OK; -} - /*****************************************/ /* Thread routines */ diff --git a/io/src/forthread/ft_wrapper.h b/io/src/forthread/ft_wrapper.h index a5726e36..96e2cc98 100644 --- a/io/src/forthread/ft_wrapper.h +++ b/io/src/forthread/ft_wrapper.h @@ -7,8 +7,9 @@ #include #include - - +#include "ft_consts.h" +#include "ft_data.h" +#include "ft_attr.h" void thread_init(int *info); diff --git a/io/src/io_state_reader.F90 b/io/src/io_state_reader.F90 index 4cc332af..c6b9f8c0 100644 --- a/io/src/io_state_reader.F90 +++ b/io/src/io_state_reader.F90 @@ -1,6 +1,6 @@ !> Reads the IO server state that was stored in a NetCDF checkpoint file module io_server_state_reader_mod - use iso_c_binding, only: c_int, c_char, c_null_char, c_size_t, c_ptrdiff_t, c_ptr, c_loc, c_sizeof, c_long + use iso_c_binding, only: c_int, c_char, c_null_char, c_size_t, c_intptr_t, c_ptr, c_loc, c_sizeof, c_long use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH use netcdf, only : nf90_global, nf90_nowrite, nf90_inquire_attribute, nf90_open, nf90_inq_dimid, nf90_inquire_dimension, & nf90_inq_varid, nf90_get_var, nf90_get_att, nf90_close @@ -203,7 +203,7 @@ subroutine get_io_server_serialised_bytes(ncid, number_io_server, my_io_server_r integer(kind=c_size_t) :: cdlen character(len=256) :: tmpname integer(KIND=c_size_t), target :: cstart(1), ccounts(1) - Integer(KIND=c_ptrdiff_t), target :: cstrides(1) + Integer(KIND=c_intptr_t), target :: cstrides(1) type(c_ptr) :: cstartptr, ccountsptr, cstridesptr cncid=ncid diff --git a/io/src/ioserver.F90 b/io/src/ioserver.F90 index 7812df1d..c8b3ba74 100644 --- a/io/src/ioserver.F90 +++ b/io/src/ioserver.F90 @@ -7,7 +7,7 @@ module io_server_mod use configuration_parser_mod, only : DATA_SIZE_STRIDE, io_configuration_type, io_configuration_data_definition_type, & io_configuration_registered_monc_type, configuration_parse, extend_registered_moncs_array, retrieve_data_definition, & build_definition_description_type_from_configuration, build_field_description_type_from_configuration, get_monc_location, & - get_io_xml, cond_request, diag_request, cond_long, diag_long, ncond, ndiag + get_io_xml, cond_request, diag_request, cond_long, diag_long, ncond, ndiag, l_thoff use mpi_communication_mod, only : build_mpi_datatype, data_receive, test_for_command, register_command_receive, & cancel_requests, free_mpi_type, get_number_io_servers, get_my_io_rank, test_for_inter_io, lock_mpi, unlock_mpi, & @@ -15,14 +15,14 @@ module io_server_mod use diagnostic_federator_mod, only : initialise_diagnostic_federator, finalise_diagnostic_federator, & check_diagnostic_federator_for_completion, pass_fields_to_diagnostics_federator, determine_diagnostics_fields_available use writer_federator_mod, only : initialise_writer_federator, finalise_writer_federator, check_writer_for_trigger, & - inform_writer_federator_fields_present, inform_writer_federator_time_point, provide_q_field_names_to_writer_federator + inform_writer_federator_fields_present, inform_writer_federator_time_point, provide_q_field_names_to_writer_federator, & + provide_tracer_names_to_writer_federator, any_pending use writer_field_manager_mod, only : initialise_writer_field_manager, finalise_writer_field_manager, & provide_monc_data_to_writer_federator use collections_mod, only : hashset_type, hashmap_type, map_type, iterator_type, c_get_integer, c_put_integer, c_is_empty, & c_remove, c_add_string, c_integer_at, c_free, c_get_iterator, c_has_next, c_next_mapentry use conversions_mod, only : conv_to_string use string_utils_mod, only : replace_character - use optionsdatabase_mod, only : options_get_string use io_server_client_mod, only : REGISTER_COMMAND, DEREGISTER_COMMAND, INTER_IO_COMMUNICATION, DATA_COMMAND_START, DATA_TAG, & LOCAL_SIZES_KEY, LOCAL_START_POINTS_KEY, LOCAL_END_POINTS_KEY, NUMBER_Q_INDICIES_KEY, SCALAR_FIELD_TYPE, & data_sizing_description_type, definition_description_type, field_description_type, build_mpi_type_data_sizing_description,& @@ -34,8 +34,8 @@ module io_server_mod threadpool_deactivate, threadpool_is_idle use global_callback_inter_io_mod, only : perform_global_callback use logging_mod, only : LOG_ERROR, LOG_WARN, log_log, initialise_logging - use optionsdatabase_mod, only : options_get_logical - use mpi, only : MPI_COMM_WORLD, MPI_STATUSES_IGNORE, MPI_BYTE + use optionsdatabase_mod, only : options_get_logical, options_get_string + use mpi, only : MPI_COMM_WORLD, MPI_STATUSES_IGNORE, MPI_BYTE, MPI_INT use io_server_state_reader_mod, only : read_io_server_configuration implicit none @@ -47,11 +47,12 @@ module io_server_mod mpi_type_definition_description, & !< The MPI data type for data descriptions sent to MONCs mpi_type_field_description !< The MPI data type for field descriptions sent to MONCs type(io_configuration_type), volatile, save :: io_configuration !< Internal representation of the IO configuration - logical, volatile :: contine_poll_messages, & !< Whether to continue waiting command messages from any MONC processes + logical, volatile :: continue_poll_messages, & !< Whether to continue waiting command messages from any MONC processes initialised_present_data - logical, volatile :: contine_poll_interio_messages, already_registered_finishing_call + logical, volatile :: continue_poll_interio_messages, already_registered_finishing_call type(field_description_type), dimension(:), allocatable :: registree_field_descriptions type(definition_description_type), dimension(:), allocatable :: registree_definition_descriptions + integer, dimension(:,:), allocatable :: sample_output_pairs integer, volatile :: monc_registration_lock @@ -64,10 +65,12 @@ module io_server_mod !! @param io_communicator_arg The IO communicator containing just the IO servers !! @param io_xml_configuration Textual XML configuration that is used to set up the IO server subroutine io_server_run(options_database, io_communicator_arg, & - provided_threading, total_global_processes, continuation_run, io_configuration_file) + provided_threading, total_global_processes, continuation_run, reconfig_initial_time, io_configuration_file, & + my_global_rank) type(hashmap_type), intent(inout) :: options_database - integer, intent(in) :: io_communicator_arg, provided_threading, total_global_processes + integer, intent(in) :: io_communicator_arg, provided_threading, total_global_processes, my_global_rank logical, intent(in) :: continuation_run + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time character(len=LONG_STRING_LENGTH), intent(in) :: io_configuration_file integer :: command, source, my_rank, ierr @@ -99,21 +102,22 @@ subroutine io_server_run(options_database, io_communicator_arg, & call check_thread_status(forthread_rwlock_init(monc_registration_lock, -1)) call check_thread_status(forthread_mutex_init(io_configuration%general_info_mutex, -1)) initialised_present_data=.false. - contine_poll_messages=.true. - contine_poll_interio_messages=.true. + continue_poll_messages=.true. + continue_poll_interio_messages=.true. already_registered_finishing_call=.false. io_configuration%io_communicator=io_communicator_arg io_configuration%number_of_io_servers=get_number_io_servers(io_communicator_arg) io_configuration%number_of_global_moncs=total_global_processes-io_configuration%number_of_io_servers io_configuration%my_io_rank=get_my_io_rank(io_communicator_arg) + io_configuration%my_global_rank=my_global_rank call initialise_logging(io_configuration%my_io_rank) registree_definition_descriptions=build_definition_description_type_from_configuration(io_configuration) registree_field_descriptions=build_field_description_type_from_configuration(io_configuration) diagnostic_generation_frequency=initialise_diagnostic_federator(io_configuration) - call initialise_writer_federator(io_configuration, diagnostic_generation_frequency, continuation_run) + call initialise_writer_federator(io_configuration, diagnostic_generation_frequency, continuation_run, & + reconfig_initial_time, sample_output_pairs) call c_free(diagnostic_generation_frequency) - call initialise_writer_field_manager(io_configuration, continuation_run) - + call initialise_writer_field_manager(io_configuration, continuation_run, reconfig_initial_time) mpi_type_data_sizing_description=build_mpi_type_data_sizing_description() mpi_type_definition_description=build_mpi_type_definition_description() mpi_type_field_description=build_mpi_type_field_description() @@ -172,14 +176,14 @@ logical function await_command(command, source, data_buffer) completed=.false. await_command=.false. do while(.not. completed) - if (.not. contine_poll_messages .and. .not. contine_poll_interio_messages) return - if (contine_poll_messages) then + if (.not. continue_poll_messages .and. .not. continue_poll_interio_messages) return + if (continue_poll_messages) then if (test_for_command(command, source)) then await_command=.true. return end if end if - if (contine_poll_interio_messages .and. allocated(io_configuration%inter_io_communications)) then + if (continue_poll_interio_messages .and. allocated(io_configuration%inter_io_communications)) then inter_io_complete=test_for_inter_io(io_configuration%inter_io_communications, & io_configuration%number_inter_io_communications, io_configuration%io_communicator, command, source, data_buffer) if (inter_io_complete) then @@ -187,8 +191,9 @@ logical function await_command(command, source, data_buffer) return end if end if - if (.not. contine_poll_messages .and. .not. already_registered_finishing_call) then - if (check_diagnostic_federator_for_completion(io_configuration) .and. threadpool_is_idle()) then + if (.not. continue_poll_messages .and. .not. already_registered_finishing_call) then + if (check_diagnostic_federator_for_completion(io_configuration) .and. & + (.not. any_pending()) .and. threadpool_is_idle()) then already_registered_finishing_call=.true. call perform_global_callback(io_configuration, "termination", 1, termination_callback) end if @@ -209,7 +214,7 @@ subroutine termination_callback(io_configuration, values, field_name, timestep) character(len=STRING_LENGTH) :: field_name integer :: timestep - contine_poll_interio_messages=.false. + continue_poll_interio_messages=.false. end subroutine termination_callback !> Called to handle a specific command that has been recieved @@ -220,11 +225,23 @@ subroutine handle_command_message(command, source, data_buffer) character, dimension(:), allocatable, intent(inout) :: data_buffer if (command == REGISTER_COMMAND) then - call threadpool_start_thread(handle_monc_registration, (/ source /)) + if (l_thoff) then + call handle_monc_registration((/ source /)) + else + call threadpool_start_thread(handle_monc_registration, (/ source /)) + end if else if (command == DEREGISTER_COMMAND) then - call threadpool_start_thread(handle_deregistration_command, (/ source /)) + if (l_thoff) then + call handle_deregistration_command((/ source /)) + else + call threadpool_start_thread(handle_deregistration_command, (/ source /)) + end if else if (command == INTER_IO_COMMUNICATION) then - call threadpool_start_thread(handle_inter_io_communication_command, (/ source /), data_buffer=data_buffer) + if (l_thoff) then + call handle_inter_io_communication_command((/ source /), data_buffer=data_buffer) + else + call threadpool_start_thread(handle_inter_io_communication_command, (/ source /), data_buffer=data_buffer) + end if deallocate(data_buffer) else if (command .ge. DATA_COMMAND_START) then call pull_back_data_message_and_handle(source, command-DATA_COMMAND_START) @@ -285,7 +302,7 @@ subroutine handle_deregistration_command(arguments, data_buffer) call check_thread_status(forthread_mutex_unlock(io_configuration%registered_moncs(monc_location)%active_mutex)) call check_thread_status(forthread_rwlock_wrlock(monc_registration_lock)) io_configuration%active_moncs=io_configuration%active_moncs-1 - if (io_configuration%active_moncs==0) contine_poll_messages=.false. + if (io_configuration%active_moncs==0) continue_poll_messages=.false. call check_thread_status(forthread_rwlock_unlock(monc_registration_lock)) end subroutine handle_deregistration_command @@ -296,7 +313,7 @@ end subroutine handle_deregistration_command subroutine pull_back_data_message_and_handle(source, data_set) integer, intent(in) :: source, data_set - integer :: specific_monc_data_type, specific_monc_buffer_size, recv_count, monc_location + integer :: specific_monc_data_type, specific_monc_buffer_size, recv_count, monc_location, matched_datadefn_index character, dimension(:), allocatable :: data_buffer call check_thread_status(forthread_rwlock_rdlock(monc_registration_lock)) @@ -310,8 +327,22 @@ subroutine pull_back_data_message_and_handle(source, data_set) allocate(data_buffer(specific_monc_buffer_size)) recv_count=data_receive(specific_monc_data_type, 1, source, dump_data=data_buffer, data_dump_id=data_set) + + ! This call is not handled by threading...should aid in ensuring that all time points are listed sequentially + matched_datadefn_index=retrieve_data_definition(io_configuration, & + io_configuration%registered_moncs(monc_location)%definition_names(data_set)) + if (matched_datadefn_index .gt. 0) then + call inform_writer_federator_time_point(io_configuration, source, data_set, data_buffer) + end if + call check_thread_status(forthread_rwlock_unlock(monc_registration_lock)) - call threadpool_start_thread(handle_data_message, (/ source, data_set /), data_buffer=data_buffer) + + if (l_thoff) then + call handle_data_message((/ source, data_set /), data_buffer=data_buffer) + else + call threadpool_start_thread(handle_data_message, (/ source, data_set /), data_buffer=data_buffer) + end if + deallocate(data_buffer) end subroutine pull_back_data_message_and_handle @@ -338,9 +369,7 @@ subroutine handle_data_message(arguments, data_buffer) matched_datadefn_index=retrieve_data_definition(io_configuration, & io_configuration%registered_moncs(monc_location)%definition_names(data_set)) - if (matched_datadefn_index .gt. 0) then - call inform_writer_federator_time_point(io_configuration, source, data_set, data_buffer) call pass_fields_to_diagnostics_federator(io_configuration, source, data_set, data_buffer) call provide_monc_data_to_writer_federator(io_configuration, source, data_set, data_buffer) call check_writer_for_trigger(io_configuration, source, data_set, data_buffer) @@ -365,7 +394,7 @@ subroutine handle_monc_registration(arguments, data_buffer) integer, dimension(:), intent(in) :: arguments character, dimension(:), allocatable, intent(inout), optional :: data_buffer - integer :: configuration_send_request(2), ierr, number_data_definitions, this_monc_index, source + integer :: configuration_send_request(3), ierr, number_data_definitions, this_monc_index, source source=arguments(1) configuration_send_request=send_configuration_to_registree(source) @@ -400,7 +429,7 @@ subroutine handle_monc_registration(arguments, data_buffer) io_configuration%registered_moncs(this_monc_index)%dimensions(number_data_definitions)) ! Wait for configuration to have been sent to registree - call waitall_for_mpi_requests(configuration_send_request, 2) + call waitall_for_mpi_requests(configuration_send_request, 3) call init_data_definition(source, io_configuration%registered_moncs(this_monc_index)) end subroutine handle_monc_registration @@ -409,15 +438,17 @@ end subroutine handle_monc_registration !! @returns The nonblocking send request handles which can be waited for completion later (overlap compute and communication) function send_configuration_to_registree(source) integer, intent(in) :: source - integer :: send_configuration_to_registree(2) + integer :: send_configuration_to_registree(3) - integer :: ierr, srequest(2) + integer :: ierr, srequest(3) call lock_mpi() call mpi_isend(registree_definition_descriptions, size(registree_definition_descriptions), mpi_type_definition_description, & source, DATA_TAG, MPI_COMM_WORLD, srequest(1), ierr) call mpi_isend(registree_field_descriptions, size(registree_field_descriptions), mpi_type_field_description, & source, DATA_TAG, MPI_COMM_WORLD, srequest(2), ierr) + call mpi_isend(sample_output_pairs, size(sample_output_pairs), MPI_INT, & + source, DATA_TAG, MPI_COMM_WORLD, srequest(3), ierr) call unlock_mpi() send_configuration_to_registree=srequest @@ -469,8 +500,8 @@ subroutine get_monc_information_data(source) integer, intent(in) :: source character, dimension(:), allocatable :: buffer - character(len=STRING_LENGTH) :: q_field_name, cd_field_name - integer :: buffer_size, z_size, num_q_fields, n, current_point, recv_count + character(len=STRING_LENGTH) :: q_field_name, tracer_name, cd_field_name + integer :: buffer_size, z_size, num_q_fields, num_tracers, n, current_point, recv_count type(data_sizing_description_type) :: field_description real(kind=DEFAULT_PRECISION) :: dreal logical :: field_found @@ -478,8 +509,9 @@ subroutine get_monc_information_data(source) z_size=c_get_integer(io_configuration%dimension_sizing, "z") num_q_fields=c_get_integer(io_configuration%dimension_sizing, "qfields") + num_tracers=c_get_integer(io_configuration%dimension_sizing, "tfields") - buffer_size=(kind(dreal)*z_size)*2 + (STRING_LENGTH * num_q_fields) & + buffer_size=(kind(dreal)*z_size)*2 + (STRING_LENGTH * num_q_fields) + STRING_LENGTH * num_tracers & + 2*ncond*STRING_LENGTH + 2*ndiag*STRING_LENGTH allocate(buffer(buffer_size)) recv_count=data_receive(MPI_BYTE, buffer_size, source, buffer) @@ -499,6 +531,15 @@ subroutine get_monc_information_data(source) call c_add_string(io_configuration%q_field_names, q_field_name) end do end if + + if (num_tracers .gt. 0) then + do n=1, num_tracers + tracer_name=transfer(buffer(current_point+1:current_point+STRING_LENGTH), tracer_name) + current_point=current_point+STRING_LENGTH + call c_add_string(io_configuration%tracer_names, tracer_name) + end do + end if + io_configuration%z_field=transfer(buffer(current_point+1:current_point+kind(dreal)*z_size), & io_configuration%z_field) current_point=current_point+(kind(dreal)*z_size) @@ -509,6 +550,7 @@ subroutine get_monc_information_data(source) cond_long(n)=transfer(buffer(current_point+1:current_point+STRING_LENGTH), cd_field_name) current_point=current_point+STRING_LENGTH end do + do n=1,ndiag diag_request(n)=transfer(buffer(current_point+1:current_point+STRING_LENGTH), cd_field_name) current_point=current_point+STRING_LENGTH @@ -518,6 +560,7 @@ subroutine get_monc_information_data(source) end if call provide_q_field_names_to_writer_federator(io_configuration%q_field_names) + call provide_tracer_names_to_writer_federator(io_configuration%tracer_names) call check_thread_status(forthread_mutex_unlock(io_configuration%general_info_mutex)) end if deallocate(buffer) diff --git a/io/src/mpicommunication.F90 b/io/src/mpicommunication.F90 index c468c764..99b61ce1 100644 --- a/io/src/mpicommunication.F90 +++ b/io/src/mpicommunication.F90 @@ -75,11 +75,12 @@ subroutine wait_for_mpi_request(request, status) integer, intent(inout) :: request integer, intent(inout), optional :: status(MPI_STATUS_SIZE) - integer :: ierr, flag + integer :: ierr + logical :: flag if (manage_mpi_thread_safety) then - flag=0 - do while (flag .ne. 1) + flag=.false. + do while (.not. flag) call lock_mpi() if (present(status)) then call mpi_test(request, flag, status, ierr) @@ -87,7 +88,7 @@ subroutine wait_for_mpi_request(request, status) call mpi_test(request, flag, MPI_STATUS_IGNORE, ierr) end if call unlock_mpi() - if (flag .ne. 1) call pause_for_mpi_interleaving() + if (.not. flag) call pause_for_mpi_interleaving() end do else if (present(status)) then @@ -106,15 +107,16 @@ subroutine waitall_for_mpi_requests(requests, count) integer, dimension(:), intent(inout) :: requests integer, intent(in) :: count - integer :: ierr, flag + integer :: ierr + logical :: flag if (manage_mpi_thread_safety) then - flag=0 - do while (flag .ne. 1) + flag=.false. + do while (.not. flag) call lock_mpi() call mpi_testall(count, requests, flag, MPI_STATUSES_IGNORE, ierr) call unlock_mpi() - if (flag .ne. 1) call pause_for_mpi_interleaving() + if (.not. flag) call pause_for_mpi_interleaving() end do else call mpi_waitall(count, requests, MPI_STATUSES_IGNORE, ierr) @@ -218,13 +220,14 @@ end subroutine cancel_request logical function test_for_command(command, source) integer, intent(out) :: command, source - integer :: ierr, status(MPI_STATUS_SIZE), complete + integer :: ierr, status(MPI_STATUS_SIZE) + logical :: stat, complete call lock_mpi() call mpi_test(command_request_handle, complete, status, ierr) call unlock_mpi() - if (complete .eq. 1) then + if (complete) then command = command_buffer source = status(MPI_SOURCE) call register_command_receive() @@ -255,7 +258,7 @@ logical function test_for_inter_io(inter_io_communications, number_of_inter_io, if (message_pending) then call mpi_get_count(status, MPI_BYTE, message_size, ierr) allocate(data_buffer(message_size)) - call mpi_recv(data_buffer, message_size, MPI_BYTE, MPI_ANY_SOURCE, inter_io_communications(i)%message_tag, & + call mpi_recv(data_buffer, message_size, MPI_BYTE, status(MPI_SOURCE), inter_io_communications(i)%message_tag, & io_communicator, MPI_STATUS_IGNORE, ierr) call unlock_mpi() command=INTER_IO_COMMUNICATION diff --git a/io/src/threadpool.F90 b/io/src/threadpool.F90 index f7da54f1..b6ed7533 100644 --- a/io/src/threadpool.F90 +++ b/io/src/threadpool.F90 @@ -8,7 +8,7 @@ module threadpool_mod forthread_cond_broadcast, forthread_cond_signal, forthread_cond_destroy, forthread_join use conversions_mod, only : conv_to_string use logging_mod, only : LOG_ERROR, LOG_WARN, log_log - use configuration_parser_mod, only : io_configuration_type + use configuration_parser_mod, only : io_configuration_type, l_thoff use mpi, only : MPI_THREAD_MULTIPLE, MPI_THREAD_SERIALIZED implicit none @@ -52,6 +52,8 @@ subroutine threadpool_init(io_configuration) integer :: n + if (l_thoff) return + call check_thread_status(forthread_init()) call check_thread_status(forthread_mutex_init(netcdfmutex, -1)) if (io_configuration%number_of_threads .ge. 1) then @@ -82,6 +84,9 @@ end subroutine threadpool_init !> Aquires the NetCDF thread lock, NetCDF is not thread safe so we need to manage thread calls to it subroutine threadpool_lock_netcdf_access() + + if (l_thoff) return + #ifdef ENFORCE_THREAD_SAFETY call check_thread_status(forthread_mutex_lock(netcdfmutex)) #endif @@ -89,6 +94,9 @@ end subroutine threadpool_lock_netcdf_access !> Releases the NetCDF thread lock, NetCDF is not thread safe so we need to manage thread calls to it subroutine threadpool_unlock_netcdf_access() + + if (l_thoff) return + #ifdef ENFORCE_THREAD_SAFETY call check_thread_status(forthread_mutex_unlock(netcdfmutex)) #endif @@ -105,6 +113,8 @@ subroutine threadpool_start_thread(proc, arguments, data_buffer) integer :: idle_thread_id + if (l_thoff) return + if (.not. threadpool_active) call log_log(LOG_ERROR, "Attemping to start IO thread on deactivated thread pool") idle_thread_id=find_idle_thread() @@ -162,6 +172,11 @@ end subroutine threadpool_thread_entry_procedure !! @returns Whether the thread pool is idle logical function threadpool_is_idle() + if (l_thoff) then + threadpool_is_idle=.true. + return + endif + call check_thread_status(forthread_mutex_lock(active_scalar_mutex)) threadpool_is_idle = active_threads==total_number_of_threads call check_thread_status(forthread_mutex_unlock(active_scalar_mutex)) @@ -174,6 +189,8 @@ subroutine threadpool_deactivate() integer :: i integer, pointer :: retval + if (l_thoff) return + allocate(retval) threadpool_active=.false. @@ -189,10 +206,13 @@ end subroutine threadpool_deactivate !> Finalises the thread pool subroutine threadpool_finalise() - call check_thread_status(forthread_mutex_destroy(netcdfmutex)) - call check_thread_status(forthread_mutex_destroy(active_scalar_mutex)) - deallocate(thread_busy, thread_start, thread_ids, thread_pass_data, activate_thread_condition_variables, & - activate_thread_mutex, thread_entry_containers) + + if (l_thoff) return + + call check_thread_status(forthread_mutex_destroy(netcdfmutex)) + call check_thread_status(forthread_mutex_destroy(active_scalar_mutex)) + deallocate(thread_busy, thread_start, thread_ids, thread_pass_data, activate_thread_condition_variables, & + activate_thread_mutex, thread_entry_containers) call check_thread_status(forthread_destroy()) end subroutine threadpool_finalise @@ -228,6 +248,8 @@ end function get_index_of_idle_thread subroutine check_thread_status(ierr) integer, intent(in) :: ierr + if (l_thoff) return + if (ierr .ne. 0) then call log_log(LOG_ERROR, "Pthreads error in IO server, error code="//conv_to_string(ierr)) end if diff --git a/io/src/writers/file_types/netcdf_filetype.F90 b/io/src/writers/file_types/netcdf_filetype.F90 index c893ab10..6358c9bc 100644 --- a/io/src/writers/file_types/netcdf_filetype.F90 +++ b/io/src/writers/file_types/netcdf_filetype.F90 @@ -9,7 +9,7 @@ module netcdf_filetype_writer_mod c_get_generic, c_get_integer, c_get_string, c_contains, c_generic_at, c_real_at, c_integer_at, c_put_generic, & c_put_integer, c_remove, c_free, c_has_next, c_get_iterator, c_next_mapentry, c_next_generic, c_get_real, c_size, & c_next_string, c_is_empty, c_add_string - use conversions_mod, only : conv_to_integer, conv_to_string, conv_to_real + use conversions_mod, only : conv_to_integer, conv_to_string, conv_to_real, conv_to_lowercase use logging_mod, only : LOG_ERROR, LOG_WARN, LOG_DEBUG, log_log, log_master_log, log_get_logging_level, log_is_master use writer_types_mod, only : writer_type, writer_field_type, write_field_collective_values_type, & netcdf_diagnostics_timeseries_type, netcdf_diagnostics_type, write_field_collective_descriptor_type, & @@ -41,11 +41,11 @@ module netcdf_filetype_writer_mod integer, volatile :: file_states_rwlock, netcdf_mutex logical :: l_nc_dim, l_nd_dim - integer :: nc_dim_id, nd_dim_id, nopt_dim_id + integer :: nc_dim_id, nd_dim_id, nopt_dim_id, x_dim_id, y_dim_id integer :: nc_var_id_s, nd_var_id_s, nc_var_id_l, nd_var_id_l, nopt_var_id public initialise_netcdf_filetype, finalise_netcdf_filetype, define_netcdf_file, write_variable, close_netcdf_file, & - store_io_server_state, get_writer_entry_from_netcdf + store_io_server_state, get_writer_entry_from_netcdf, get_file_state, get_specific_timeseries_dimension contains !> Initialises the NetCDF writing functionality @@ -66,13 +66,14 @@ end subroutine finalise_netcdf_filetype !! @param file_writer_information The writer entry that is being written !! @param timestep The write timestep !! @param time The write time - subroutine define_netcdf_file(io_configuration, file_writer_information, timestep, time, time_points, termination_write) + subroutine define_netcdf_file(io_configuration, file_writer_information, timestep, time, time_points, termination_write, & + time_basis) type(io_configuration_type), intent(inout) :: io_configuration type(writer_type), intent(inout), target :: file_writer_information type(map_type), intent(inout) :: time_points integer, intent(in) :: timestep real, intent(in) :: time - logical, intent(in) :: termination_write + logical, intent(in) :: termination_write, time_basis character(len=STRING_LENGTH) :: unique_filename type(netcdf_diagnostics_type), pointer :: ncdf_writer_state @@ -94,10 +95,15 @@ subroutine define_netcdf_file(io_configuration, file_writer_information, timeste call c_put_generic(file_states, trim(file_writer_information%filename)//"#"//trim(conv_to_string(timestep)), & generic, .false.) call check_thread_status(forthread_rwlock_unlock(file_states_rwlock)) - if (file_writer_information%write_on_model_time) then - call generate_unique_filename(file_writer_information%filename, unique_filename, & - file_writer_information%defined_write_time) + if (file_writer_information%time_basis_override) then + ! If timestep file writing was requested during time_basis, label with timestep + call generate_unique_filename(file_writer_information%filename, unique_filename, & + timestep=timestep) + else + call generate_unique_filename(file_writer_information%filename, unique_filename, & + file_writer_information%defined_write_time) + end if else call generate_unique_filename(file_writer_information%filename, unique_filename, timestep=timestep) end if @@ -108,11 +114,18 @@ subroutine define_netcdf_file(io_configuration, file_writer_information, timeste call unlock_mpi() call write_out_global_attributes(io_configuration, ncdf_writer_state%ncid, file_writer_information, timestep, time) call define_dimensions(ncdf_writer_state, io_configuration%dimension_sizing) - call define_time_series_dimensions(ncdf_writer_state, file_writer_information, time, time_points, termination_write) + call define_time_series_dimensions(ncdf_writer_state, file_writer_information, time, time_points, termination_write, & + time_basis) call define_variables(io_configuration, ncdf_writer_state, file_writer_information) zn_var_id = define_coordinate_variable(ncdf_writer_state,"zn") z_var_id = define_coordinate_variable(ncdf_writer_state,"z") nopt_var_id = define_options_database_variable(ncdf_writer_state) + if (log_get_logging_level() .ge. LOG_DEBUG) then + call log_log(LOG_DEBUG, " --- nf90_enddef --- "//& + trim(conv_to_string(io_configuration%my_io_rank))//& + ", unique_filename: "//trim(unique_filename)//& + ", time: "//trim(conv_to_string(time)) ) + end if call lock_mpi() call check_netcdf_status(nf90_enddef(ncdf_writer_state%ncid)) call unlock_mpi() @@ -169,18 +182,18 @@ subroutine store_io_server_state(io_configuration, writer_entries, time_points, end subroutine store_io_server_state !> Looks up and retrieves the writer entry that corresponds to this NetCDF file state - !! @param field_name The field name that is being communicated + !! @param filename The name of the file that is being considered !! @param timestep The write timestep !! @returns The writer entry - function get_writer_entry_from_netcdf(field_name, timestep, terminated) - character(len=STRING_LENGTH) :: field_name + function get_writer_entry_from_netcdf(filename, timestep, terminated) + character(len=STRING_LENGTH) :: filename integer :: timestep logical, intent(out), optional :: terminated type(writer_type), pointer :: get_writer_entry_from_netcdf type(netcdf_diagnostics_type), pointer :: file_state - file_state=>get_file_state(field_name, timestep, .true.) + file_state=>get_file_state(filename, timestep, .true.) if (present(terminated)) terminated=file_state%termination_write get_writer_entry_from_netcdf=>file_state%corresponding_writer_entry end function get_writer_entry_from_netcdf @@ -188,19 +201,20 @@ end function get_writer_entry_from_netcdf !> Call back for the inter IO reduction which actually does the NetCDF file closing which is a !! collective (synchronous) operation. This also cleans up the file state as it is no longer required !! @param io_configuration The IO server configuration - !! @param field_name The field name that is being communicated + !! @param filename The name of the file that is being closed !! @param timestep The write timestep - subroutine close_netcdf_file(io_configuration, field_name, timestep) + subroutine close_netcdf_file(io_configuration, filename, timestep) type(io_configuration_type), intent(inout) :: io_configuration - character(len=STRING_LENGTH) :: field_name + character(len=STRING_LENGTH) :: filename integer :: timestep type(iterator_type) :: iterator + type(netcdf_diagnostics_timeseries_type), pointer :: ptr class(*), pointer :: generic type(netcdf_diagnostics_type), pointer :: file_state - file_state=>get_file_state(field_name, timestep, .true.) + file_state=>get_file_state(filename, timestep, .true.) call check_thread_status(forthread_mutex_lock(file_state%mutex)) call check_thread_status(forthread_mutex_lock(netcdf_mutex)) call lock_mpi() @@ -216,12 +230,13 @@ subroutine close_netcdf_file(io_configuration, field_name, timestep) generic=>c_get_generic(c_next_mapentry(iterator)) select type(generic) type is(netcdf_diagnostics_timeseries_type) - deallocate(generic) + ptr => generic + deallocate(ptr) end select end do call c_free(file_state%timeseries_dimension) call check_thread_status(forthread_rwlock_wrlock(file_states_rwlock)) - call c_remove(file_states, trim(field_name)//"#"//trim(conv_to_string(timestep))) + call c_remove(file_states, trim(filename)//"#"//trim(conv_to_string(timestep))) call check_thread_status(forthread_rwlock_unlock(file_states_rwlock)) if (log_get_logging_level() .ge. LOG_DEBUG .and. log_is_master()) then call log_master_log(LOG_DEBUG, "Done physical close for NetCDF file at timestep "//trim(conv_to_string(timestep))) @@ -329,7 +344,7 @@ subroutine write_condition_variable(file_state, c_var_id, field_values) character(len=STRING_LENGTH), dimension(:), intent(in) :: field_values integer :: count_to_write(2), start_pos(2) - integer :: pos, string_size + integer :: pos character(len=STRING_LENGTH) :: dum_string count_to_write(2)=1 ! element count @@ -392,7 +407,15 @@ subroutine write_contiguous_collective_variable_to_diagnostics(io_configuration, call c_add_string(items_to_remove, value_to_write_map_entry%key) end if end do - + + ! Clean up and exit early if zero entries are found (number_time_entries) + ! and expected (timeseries_diag%num_entries). + if (number_time_entries .eq. 0 .and. timeseries_diag%num_entries .eq. 0) then + timeseries_diag%variable_written=.true. + if (allocated(timeseries_time_to_write)) deallocate(timeseries_time_to_write) + return + end if + if (number_time_entries .ne. timeseries_diag%num_entries) then call log_log(LOG_WARN, "Expected "//trim(conv_to_string(timeseries_diag%num_entries))//& " but have "//trim(conv_to_string(number_time_entries))) @@ -611,16 +634,32 @@ subroutine write_collective_variable_to_diagnostics(io_configuration, field_to_w call c_free(multi_monc_entries%monc_values) deallocate(multi_monc_entries) else - call log_log(LOG_WARN, "Omitted time entry of field '"//trim(field_to_write_information%field_name)//& + call log_log(LOG_WARN, "Omitted time entry of collective field '"//& + trim(field_to_write_information%field_name)//& "' as past dimension length at time "//conv_to_string(value_to_test)) end if end if end do + + ! Clean up and exit early if zero entries are found (included_num-1) + ! and expected (timeseries_diag%num_entries). + if (included_num-1 .eq. 0 .and. timeseries_diag%num_entries .eq. 0) then + timeseries_diag%variable_written=.true. + deallocate(items_to_remove) + if (allocated(timeseries_time_to_write)) deallocate(timeseries_time_to_write) + return + end if + if (included_num-1 .ne. timeseries_diag%num_entries) then - call log_log(LOG_WARN, "Miss match of time entries for field '"//trim(field_to_write_information%field_name)//& - "', included entries="//trim(conv_to_string(included_num-1))//" but expected entries="//& - trim(conv_to_string(timeseries_diag%num_entries))) + call log_log(LOG_WARN, "Miss match of time entries for collective field '"//& + trim(field_to_write_information%field_name)//& + "', included entries="//trim(conv_to_string(included_num-1))//& + " but expected entries="//trim(conv_to_string(timeseries_diag%num_entries))) + if (log_get_logging_level() .ge. LOG_DEBUG) & + call log_log(LOG_ERROR, "Miss match throws error for LOG_DEBUG...can indicate "//& + "underlying problems...See write_collective_variable_to_diagnostics.") end if + if (allocated(timeseries_time_to_write)) then call check_thread_status(forthread_mutex_lock(netcdf_mutex)) call lock_mpi() @@ -660,6 +699,7 @@ subroutine write_independent_variable_to_diagnostics(field_to_write_information, else if (field_to_write_information%field_type == MAP_FIELD_TYPE) then call write_out_map(field_to_write_information, timestep, time, file_state) end if + end subroutine write_independent_variable_to_diagnostics subroutine write_out_number_values(field_to_write_information, timestep, time, file_state) @@ -670,7 +710,7 @@ subroutine write_out_number_values(field_to_write_information, timestep, time, f real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: values_to_write, timeseries_time_to_write real :: value_to_test - integer :: i, field_id, next_entry_index, array_size, included_num + integer :: i, field_id, next_entry_index, array_size, included_num, erri integer, dimension(:), allocatable :: count_to_write type(iterator_type) :: iterator type(mapentry_type) :: map_entry @@ -685,7 +725,6 @@ subroutine write_out_number_values(field_to_write_information, timestep, time, f next_entry_index=1 included_num=1 array_size=1 - if (.not. timeseries_diag%variable_written) allocate(timeseries_time_to_write(timeseries_diag%num_entries)) allocate(count_to_write(field_to_write_information%dimensions+1)) @@ -712,7 +751,8 @@ subroutine write_out_number_values(field_to_write_information, timestep, time, f if (allocated(timeseries_time_to_write)) timeseries_time_to_write(included_num)=value_to_test included_num=included_num+1 else - call log_log(LOG_WARN, "Omitted time entry of field '"//trim(field_to_write_information%field_name)//& + call log_log(LOG_WARN, "Omitted time entry of field '"//& + trim(field_to_write_information%field_name)//& "' as past time dimension length") end if end if @@ -720,14 +760,26 @@ subroutine write_out_number_values(field_to_write_information, timestep, time, f count_to_write(size(count_to_write))=included_num-1 field_id=c_get_integer(file_state%variable_to_id, get_field_key(field_to_write_information)) if (included_num-1 .ne. timeseries_diag%num_entries) then - call log_log(LOG_WARN, "Miss match of time entries for field '"//trim(field_to_write_information%field_name)//& - "', included entries="//trim(conv_to_string(included_num-1))//" but expected entries="//& - trim(conv_to_string(timeseries_diag%num_entries))) + call log_log(LOG_WARN, "Miss match of time entries for field '"//& + trim(field_to_write_information%field_name)//& + "', included entries="//trim(conv_to_string(included_num-1))//& + " but expected entries="//trim(conv_to_string(timeseries_diag%num_entries))) + if (log_get_logging_level() .ge. LOG_DEBUG) & + call log_log(LOG_ERROR, "Miss match throws error for LOG_DEBUG...can indicate "//& + "underlying problems...See write_out_number_values.") end if call check_thread_status(forthread_mutex_lock(file_state%mutex)) call check_thread_status(forthread_mutex_lock(netcdf_mutex)) call lock_mpi() - call check_netcdf_status(nf90_put_var(file_state%ncid, field_id, values_to_write, count=count_to_write)) + + erri=nf90_put_var(file_state%ncid, field_id, values_to_write, count=count_to_write) + if (erri .ne. nf90_noerr) then + ! Note: Just print is used here because of values_to_write. + print *, 'NCDF put error: ', trim(field_to_write_information%field_name), ' ', & + values_to_write + call check_netcdf_status(erri) + end if + if (allocated(timeseries_time_to_write)) then call check_netcdf_status(nf90_put_var(file_state%ncid, timeseries_diag%netcdf_var_id, & timeseries_time_to_write, count=(/ timeseries_diag%num_entries /))) @@ -818,9 +870,11 @@ subroutine write_out_options(io_configuration, file_state) type is(integer) call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, trim(conv_to_string(raw_data)), (/ 1, 2, i /))) type is(real(kind=SINGLE_PRECISION)) - call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, trim(conv_to_string(raw_data)), (/ 1, 2, i /))) + call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, & + trim(conv_to_string(raw_data, exponent=.true.)), (/ 1, 2, i /))) type is(real(kind=DOUBLE_PRECISION)) - call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, trim(conv_to_string(raw_data)), (/ 1, 2, i /))) + call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, & + trim(conv_to_string(raw_data, exponent=.true.)), (/ 1, 2, i /))) type is(logical) call check_netcdf_status(nf90_put_var(file_state%ncid, nopt_var_id, trim(conv_to_string(raw_data)), (/ 1, 2, i /))) type is(character(len=*)) @@ -838,12 +892,14 @@ end subroutine write_out_options !! @param file_state The state of the NetCDF file !! @param file_writer_information Writer information !! @param time The model write time - subroutine define_time_series_dimensions(file_state, file_writer_information, time, time_points, termination_write) + !! @param time_points The applicable time points for this file. + subroutine define_time_series_dimensions(file_state, file_writer_information, time, time_points, termination_write, & + time_basis) type(netcdf_diagnostics_type), intent(inout) :: file_state type(writer_type), intent(inout) :: file_writer_information real, intent(in) :: time type(map_type), intent(inout) :: time_points - logical, intent(in) :: termination_write + logical, intent(in) :: termination_write, time_basis integer :: i character(len=STRING_LENGTH) :: dim_key @@ -855,15 +911,22 @@ subroutine define_time_series_dimensions(file_state, file_writer_information, ti dim_key="time_series_"//trim(conv_to_string(file_writer_information%contents(i)%timestep_frequency)) else dim_key="time_series_"//trim(conv_to_string(file_writer_information%contents(i)%timestep_frequency))//"_"//& - trim(conv_to_string(file_writer_information%contents(i)%output_frequency)) + trim(conv_to_string(nint(file_writer_information%contents(i)%output_frequency))) end if if (.not. c_contains(file_state%timeseries_dimension, dim_key)) then + if (time_basis & + .and. file_writer_information%contents(i)%previous_tracked_write_point .lt. 0.001) then + file_writer_information%contents(i)%previous_tracked_write_point = & + file_writer_information%previous_write_time + end if allocate(timeseries_diag) timeseries_diag%variable_written=.false. timeseries_diag%num_entries=get_number_timeseries_entries(time_points, & file_writer_information%contents(i)%previous_tracked_write_point, & - file_writer_information%contents(i)%output_frequency, file_writer_information%contents(i)%timestep_frequency, & - termination_write, timeseries_diag%last_write_point) + file_writer_information%contents(i)%output_frequency, & + file_writer_information%contents(i)%timestep_frequency, & + termination_write, time_basis, file_writer_information%title, & + timeseries_diag%last_write_point) call lock_mpi() call check_netcdf_status(nf90_def_dim(file_state%ncid, dim_key, timeseries_diag%num_entries, & timeseries_diag%netcdf_dim_id)) @@ -871,7 +934,10 @@ subroutine define_time_series_dimensions(file_state, file_writer_information, ti generic=>timeseries_diag call c_put_generic(file_state%timeseries_dimension, dim_key, generic, .false.) end if - file_writer_information%contents(i)%previous_tracked_write_point=timeseries_diag%last_write_point + + ! Only update previous_tracked_write_point when entries are found. Retain value if zero entries found. + if (timeseries_diag%num_entries .gt. 0) & + file_writer_information%contents(i)%previous_tracked_write_point=timeseries_diag%last_write_point end do end subroutine define_time_series_dimensions @@ -881,33 +947,61 @@ end subroutine define_time_series_dimensions !! @param previous_write_time When the field was previously written !! @param frequency The frequency of outputs of the field integer function get_number_timeseries_entries(time_points, previous_write_time, output_frequency, timestep_frequency, & - termination_write, last_write_entry) + termination_write, time_basis, title, last_write_entry) type(map_type), intent(inout) :: time_points real, intent(in) :: output_frequency, previous_write_time integer, intent(in) :: timestep_frequency logical, intent(in) :: termination_write + logical, intent(in) :: time_basis + character(len=STRING_LENGTH), intent(in) :: title real, intent(out) :: last_write_entry - integer :: ts + integer :: ts,tm real :: tp_entry, write_point type(iterator_type) :: iterator type(mapentry_type) :: map_entry - logical :: include_item + logical :: include_item, select_item, is_checkpoint + is_checkpoint = (conv_to_lowercase(trim(title)) == 'checkpoint') get_number_timeseries_entries=0 write_point=previous_write_time iterator=c_get_iterator(time_points) do while (c_has_next(iterator)) map_entry=c_next_mapentry(iterator) ts=conv_to_integer(map_entry%key) + tm=nint(c_get_real(map_entry)) if (timestep_frequency .gt. 0) then - include_item=mod(ts, timestep_frequency) == 0 - else + if (time_basis) then ! compare to time + include_item=mod(tm, timestep_frequency) == 0 + else ! compare to timestep + include_item=mod(ts, timestep_frequency) == 0 + end if + else ! Screen out zero-frequency requests (commonly checkpoints) include_item=.false. end if + + ! Ensure that checkpoint files only consider the most recent interval-matching time entry + ! even when working with a non-zero sample interval. + ! This negates any others that were found to match the interval. + if (is_checkpoint .and. c_has_next(iterator)) include_item=.false. + + ! if the time entry is a factor of the requested sample interval (include_item) or + ! this is the last time point entry during any termination write or checkpoint file... + ! then it may be considered for a time record entry in the netcdf file if (include_item .or. (.not. c_has_next(iterator) .and. termination_write)) then tp_entry=c_get_real(map_entry) - if (tp_entry .ge. write_point+output_frequency) then + ! if the included item is a factor of the output interval (or beyond the due interval)... + ! then count it as a time series entry for file dimension allocation + if (time_basis) then + select_item = nint(tp_entry) .ge. nint(write_point+output_frequency) & + .and. mod(nint(tp_entry),nint(output_frequency)) == 0 + ! second condition is needed for actual output because of a condition on the time manipulation routines. + ! time_basis requires (mod(nint(time), nint(output_frequency)) == 0) to enforce regularity. + else + select_item = tp_entry .ge. write_point+output_frequency + end if + + if (select_item) then get_number_timeseries_entries=get_number_timeseries_entries+1 write_point=tp_entry last_write_entry=tp_entry @@ -965,7 +1059,9 @@ subroutine define_variables(io_configuration, file_state, file_writer_informatio class(*), pointer :: generic type(iterator_type) :: iterator type(mapentry_type) :: map_entry + logical :: l_horiz_field + l_horiz_field = .false. l_nc_dim = .false. l_nd_dim = .false. @@ -986,7 +1082,7 @@ subroutine define_variables(io_configuration, file_state, file_writer_informatio do i=1, size(file_writer_information%contents) if (.not. file_writer_information%contents(i)%enabled) cycle if (file_writer_information%contents(i)%data_type == DOUBLE_DATA_TYPE) then - data_type=NF90_DOUBLE + data_type = file_writer_information%write_precision else if (file_writer_information%contents(i)%data_type == INTEGER_DATA_TYPE) then data_type=NF90_INT else if (file_writer_information%contents(i)%data_type == STRING_DATA_TYPE) then @@ -1012,13 +1108,20 @@ subroutine define_variables(io_configuration, file_state, file_writer_informatio l_nd_dim = .true. end if + !> Determine if this is a 2d-horizontal field, which can be written more efficiently with NF90_COLLECTIVE + if (file_writer_information%contents(i)%dimensions .eq. 2) then + if (any(dimension_ids .eq. x_dim_id) .and. any(dimension_ids .eq. y_dim_id)) & + l_horiz_field = file_writer_information%contents(i)%collective_write .and. & + io_configuration%number_of_io_servers .gt. 1 + end if + call lock_mpi() call check_netcdf_status(nf90_def_var(file_state%ncid, variable_key, & data_type, dimension_ids, field_id)) - if (file_writer_information%contents(i)%collective_write .and. & + if ((file_writer_information%contents(i)%collective_write .and. & file_writer_information%contents(i)%collective_contiguous_optimisation .and. & - io_configuration%number_of_io_servers .gt. 1) then + io_configuration%number_of_io_servers .gt. 1) .or. (l_horiz_field) ) then call check_netcdf_status(nf90_def_var_fill(file_state%ncid, field_id, 1, 1)) call check_netcdf_status(nf90_var_par_access(file_state%ncid, field_id, NF90_COLLECTIVE)) end if @@ -1119,7 +1222,7 @@ function get_specific_timeseries_dimension(file_state, output_frequency, timeste if (output_frequency .lt. 0.0) then dim_key="time_series_"//trim(conv_to_string(timestep_frequency)) else - dim_key="time_series_"//trim(conv_to_string(timestep_frequency))//"_"// trim(conv_to_string(output_frequency)) + dim_key="time_series_"//trim(conv_to_string(timestep_frequency))//"_"// trim(conv_to_string(nint(output_frequency))) end if generic=>c_get_generic(file_state%timeseries_dimension, dim_key) @@ -1162,6 +1265,12 @@ subroutine define_dimensions(file_state, dimension_sizing) if (map_entry%key == "number_options") then nopt_dim_id=ncdf_dimid end if + if (map_entry%key == "x") then + x_dim_id=ncdf_dimid + end if + if (map_entry%key == "y") then + y_dim_id=ncdf_dimid + end if end if end do call check_netcdf_status(nf90_def_dim(file_state%ncid, "string", STRING_LENGTH, file_state%string_dim_id)) @@ -1217,6 +1326,8 @@ end function get_field_key !> Generates a unique filename based upon the base one specified and the number !! of completed timesteps !! @param old_name The existing name that is used as a base + !! This is the base ' The IO server state module which will write out the current state of the IO server to a NetCDF file module io_server_state_writer_mod - use iso_c_binding, only: c_int, c_char, c_null_char, c_size_t, c_ptrdiff_t, c_ptr, c_loc, c_sizeof, c_long + use iso_c_binding, only: c_int, c_char, c_null_char, c_size_t, c_intptr_t, c_ptr, c_loc, c_sizeof, c_long use datadefn_mod, only : DEFAULT_PRECISION use netcdf, only : NF90_CHAR, NF90_BYTE, NF90_INT, nf90_def_var, nf90_put_var, nf90_def_dim use configuration_parser_mod, only : io_configuration_type @@ -373,7 +373,7 @@ subroutine write_state_storage(netcdf_file, writer_entry_start_point, my_io_rank integer(kind=c_int) :: cncid, cvarid, cndims, cstat1, cstatus integer(kind=c_size_t), target :: cstart(1), ccounts(1) - integer(kind=c_ptrdiff_t), target :: cstrides(1) + integer(kind=c_intptr_t), target :: cstrides(1) integer(kind=c_long) :: c_writer_corrected_start_point type(c_ptr) :: cstartptr, ccountsptr, cstridesptr diff --git a/io/src/writers/time_manipulation/instantaneous_manipulation.F90 b/io/src/writers/time_manipulation/instantaneous_manipulation.F90 index 3dad96a5..ca04fd31 100644 --- a/io/src/writers/time_manipulation/instantaneous_manipulation.F90 +++ b/io/src/writers/time_manipulation/instantaneous_manipulation.F90 @@ -10,6 +10,7 @@ module instantaneous_time_manipulation_mod use data_utils_mod, only : unpack_scalar_integer_from_bytedata, unpack_scalar_string_from_bytedata, & unpack_scalar_dp_real_from_bytedata use io_server_client_mod, only : pack_scalar_field + implicit none #ifndef TEST_MODE @@ -18,6 +19,7 @@ module instantaneous_time_manipulation_mod integer, volatile :: existing_instantaneous_writes_mutex type(hashmap_type), volatile :: existing_instantaneous_writes + real(kind=DEFAULT_PRECISION) :: model_initial_time public init_instantaneous_manipulation, finalise_instantaneous_manipulation, perform_instantaneous_time_manipulation, & is_instantaneous_time_manipulation_ready_to_write, serialise_instantaneous_state, unserialise_instantaneous_state, & @@ -25,7 +27,10 @@ module instantaneous_time_manipulation_mod contains !> Initialises the instantaneous time manipulation - subroutine init_instantaneous_manipulation() + subroutine init_instantaneous_manipulation(reconfig_initial_time) + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time + + model_initial_time = reconfig_initial_time call check_thread_status(forthread_mutex_init(existing_instantaneous_writes_mutex, -1)) end subroutine init_instantaneous_manipulation @@ -39,7 +44,7 @@ logical function is_instantaneous_time_manipulation_ready_to_write(latest_time, real, intent(in) :: latest_time, output_frequency, write_time integer, intent(in) :: latest_timestep, write_timestep - is_instantaneous_time_manipulation_ready_to_write=latest_time + output_frequency .gt. write_time + is_instantaneous_time_manipulation_ready_to_write=latest_time + output_frequency .ge. write_time end function is_instantaneous_time_manipulation_ready_to_write !> Performs the instantaneous time manipulation and returns data only if this is to be written to the @@ -50,18 +55,24 @@ end function is_instantaneous_time_manipulation_ready_to_write !! @param field_name The field name !! @param timestep The timestep !! @param time The model time + !! @param time_basis True for diagnostics interval in time coordinates, False for timestep coordinates !! @returns An allocated array of reals if data is to be stored, otherwise this is unallocated type(data_values_type) function perform_instantaneous_time_manipulation(instant_values, output_frequency, & - field_name, timestep, time) + field_name, timestep, time, time_basis) real(kind=DEFAULT_PRECISION), dimension(:), intent(in) :: instant_values real, intent(in) :: output_frequency real(kind=DEFAULT_PRECISION), intent(in) :: time character(len=*), intent(in) :: field_name integer, intent(in) :: timestep + logical, intent(in) :: time_basis - if (deduce_whether_to_issue_values(field_name, output_frequency, time)) then + integer :: i + + if (deduce_whether_to_issue_values(field_name, output_frequency, time, time_basis)) then allocate(perform_instantaneous_time_manipulation%values(size(instant_values))) - perform_instantaneous_time_manipulation%values=instant_values + do i=1,size(instant_values) + perform_instantaneous_time_manipulation%values(i)=instant_values(i) + end do end if end function perform_instantaneous_time_manipulation @@ -69,23 +80,34 @@ end function perform_instantaneous_time_manipulation !! @param field_name The field name that we are manipulating !! @param output_frequency Configured output time frequency !! @param time The current model time + !! @param time_basis True for diagnostics interval in time coordinates, False for timestep coordinates !! @returns Whether or not one should issue the instantaneous values to write - logical function deduce_whether_to_issue_values(field_name, output_frequency, time) + logical function deduce_whether_to_issue_values(field_name, output_frequency, time, time_basis) character(len=*), intent(in) :: field_name real, intent(in) :: output_frequency real(kind=DEFAULT_PRECISION), intent(in) :: time + logical, intent(in) :: time_basis - real(kind=DEFAULT_PRECISION) :: previous_time_write, time_difference + real :: previous_time_write, time_difference + logical :: select_value call check_thread_status(forthread_mutex_lock(existing_instantaneous_writes_mutex)) if (c_contains(existing_instantaneous_writes, field_name)) then - previous_time_write=c_get_real(existing_instantaneous_writes, field_name) - time_difference=(aint(time*10000000.0)-aint(previous_time_write*10000000.0))/10000000.0 + previous_time_write=real(c_get_real(existing_instantaneous_writes, field_name)) + else ! Typically at first use of function + previous_time_write = real(model_initial_time) - mod(real(model_initial_time), output_frequency) + end if + + time_difference = real(time) - previous_time_write + + ! time_basis requires regular-interval entries. Timestep requires time .ge. previous_output_time+output_frequency + if (time_basis) then + select_value = mod(nint(time), nint(output_frequency)) == 0 else - ! Rethink this as only works if started at time=0 - time_difference=time + select_value = time_difference .ge. real(output_frequency) end if - if (time_difference .ge. output_frequency) then + + if (select_value) then deduce_whether_to_issue_values=.true. call c_put_real(existing_instantaneous_writes, field_name, time) else diff --git a/io/src/writers/time_manipulation/none_manipulation.F90 b/io/src/writers/time_manipulation/none_manipulation.F90 index b2215c81..4b4442de 100644 --- a/io/src/writers/time_manipulation/none_manipulation.F90 +++ b/io/src/writers/time_manipulation/none_manipulation.F90 @@ -29,16 +29,22 @@ end function is_none_time_manipulation_ready_to_write !! @param field_name The field name !! @param timestep The timestep !! @param time The model time + !! @param time_basis True for diagnostics interval in time coordinates, False for timestep coordinates !! @returns An allocated array of reals if data is to be stored, otherwise this is unallocated type(data_values_type) function perform_none_time_manipulation(instant_values, output_frequency, & - field_name, timestep, time) + field_name, timestep, time, time_basis) real(kind=DEFAULT_PRECISION), dimension(:), intent(in) :: instant_values real, intent(in) :: output_frequency real(kind=DEFAULT_PRECISION), intent(in) :: time character(len=*), intent(in) :: field_name integer, intent(in) :: timestep + logical, intent(in) :: time_basis + + integer :: i allocate(perform_none_time_manipulation%values(size(instant_values))) - perform_none_time_manipulation%values=instant_values + do i=1,size(instant_values) + perform_none_time_manipulation%values(i)=instant_values(i) + end do end function perform_none_time_manipulation end module none_time_manipulation_mod diff --git a/io/src/writers/time_manipulation/timeaveraged_manipulation.F90 b/io/src/writers/time_manipulation/timeaveraged_manipulation.F90 index 23606b7e..6a5278ab 100644 --- a/io/src/writers/time_manipulation/timeaveraged_manipulation.F90 +++ b/io/src/writers/time_manipulation/timeaveraged_manipulation.F90 @@ -12,8 +12,11 @@ module timeaveraged_time_manipulation_mod use io_server_client_mod, only : pack_scalar_field, pack_array_field use data_utils_mod, only : unpack_scalar_integer_from_bytedata, unpack_scalar_dp_real_from_bytedata, & unpack_scalar_logical_from_bytedata + implicit none + real(kind=DEFAULT_PRECISION) :: model_initial_time + #ifndef TEST_MODE private #endif @@ -36,7 +39,10 @@ module timeaveraged_time_manipulation_mod contains !> Initialises the reduction action - subroutine init_time_averaged_manipulation() + subroutine init_time_averaged_manipulation(reconfig_initial_time) + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time + + model_initial_time = reconfig_initial_time call check_thread_status(forthread_rwlock_init(timeaveraged_value_rw_lock, -1)) end subroutine init_time_averaged_manipulation @@ -51,7 +57,7 @@ logical function is_time_averaged_time_manipulation_ready_to_write(latest_time, real, intent(in) :: latest_time, output_frequency, write_time integer, intent(in) :: latest_timestep, write_timestep - is_time_averaged_time_manipulation_ready_to_write=latest_time + output_frequency .gt. write_time + is_time_averaged_time_manipulation_ready_to_write=latest_time + output_frequency .ge. write_time end function is_time_averaged_time_manipulation_ready_to_write !> Performs the time averaged manipulation and only returns values if these are to be stored (i.e. past an output frequency) @@ -60,23 +66,34 @@ end function is_time_averaged_time_manipulation_ready_to_write !! @param field_name The field name !! @param timestep The timestep !! @param time The model time + !! @param time_basis True for diagnostics interval in time coordinates, False for timestep coordinates !! @returns An allocated array of reals if data is to be stored, otherwise this is unallocated type(data_values_type) function perform_timeaveraged_time_manipulation(instant_values, output_frequency, & - field_name, timestep, time) + field_name, timestep, time, time_basis) real(kind=DEFAULT_PRECISION), dimension(:), intent(in) :: instant_values real, intent(in) :: output_frequency real(kind=DEFAULT_PRECISION), intent(in) :: time character(len=*), intent(in) :: field_name integer, intent(in) :: timestep + logical, intent(in) :: time_basis type(time_averaged_completed_type), pointer :: timeaveraged_value + logical :: select_value - timeaveraged_value=>find_or_add_timeaveraged_value(timestep, field_name) + timeaveraged_value=>find_or_add_timeaveraged_value(timestep, field_name, output_frequency) call check_thread_status(forthread_mutex_lock(timeaveraged_value%mutex)) call time_average(timeaveraged_value, instant_values, time) - if ((aint(time*10000000.0)-aint(timeaveraged_value%previous_output_time*10000000.0))/10000000.0 .ge. output_frequency) then + ! time_basis requires regular-interval entries. Timestep requires time .ge. previous_output_time+output_frequency + if (time_basis) then + select_value = mod(nint(time), nint(output_frequency)) == 0 + else + ! these are 'reals' to be consistent with other such calculations elsewhere + select_value = real(time)-real(timeaveraged_value%previous_output_time) .ge. real(output_frequency) + end if + + if (select_value) then timeaveraged_value%previous_output_time=time allocate(perform_timeaveraged_time_manipulation%values(size(timeaveraged_value%time_averaged_values))) perform_timeaveraged_time_manipulation%values=timeaveraged_value%time_averaged_values @@ -92,6 +109,13 @@ end function perform_timeaveraged_time_manipulation !! @param timeaveraged_value The time averaged value to update !! @param instant_values The instant values to integrate in !! @param time The model time + !! Map: + ! start_time previous_time time + ! | | | + ! |------------------------------------|-------| + ! | | + ! timeav timedg + ! subroutine time_average(timeaveraged_value, instant_values, time) type(time_averaged_completed_type), intent(inout) :: timeaveraged_value real(kind=DEFAULT_PRECISION), dimension(:), intent(in) :: instant_values @@ -100,9 +124,9 @@ subroutine time_average(timeaveraged_value, instant_values, time) integer :: i real(kind=DEFAULT_PRECISION) :: timeav, timedg, combined_add - timeav=time-timeaveraged_value%start_time - timedg=time-timeaveraged_value%previous_time - combined_add=timeav+timedg + timedg = time - timeaveraged_value%previous_time + timeav = timeaveraged_value%previous_time - timeaveraged_value%start_time + combined_add = timeav + timedg if (.not. allocated(timeaveraged_value%time_averaged_values)) then allocate(timeaveraged_value%time_averaged_values(size(instant_values))) @@ -277,9 +301,10 @@ end function unserialise_time_averaged_completed_value !! @param timestep The corresponding timestep !! @param field_name The corresponding field name !! @returns A matching or new time averaged value - function find_or_add_timeaveraged_value(timestep, field_name) + function find_or_add_timeaveraged_value(timestep, field_name, output_frequency) integer, intent(in) :: timestep character(len=*), intent(in) :: field_name + real, intent(in) :: output_frequency type(time_averaged_completed_type), pointer :: find_or_add_timeaveraged_value class(*), pointer :: generic @@ -292,10 +317,11 @@ function find_or_add_timeaveraged_value(timestep, field_name) if (.not. associated(find_or_add_timeaveraged_value)) then allocate(new_entry) new_entry%field_name=field_name - new_entry%start_time=0.0_DEFAULT_PRECISION - new_entry%previous_time=0.0_DEFAULT_PRECISION + new_entry%start_time=model_initial_time + new_entry%previous_time=model_initial_time new_entry%empty_values=.true. - new_entry%previous_output_time=0.0_DEFAULT_PRECISION + new_entry%previous_output_time = real(model_initial_time) & + - mod(real(model_initial_time), output_frequency) call check_thread_status(forthread_mutex_init(new_entry%mutex, -1)) generic=>new_entry call c_put_generic(timeaveraged_values, field_name, generic, .false.) diff --git a/io/src/writers/writer_federator.F90 b/io/src/writers/writer_federator.F90 index 27f629f8..5316bd41 100644 --- a/io/src/writers/writer_federator.F90 +++ b/io/src/writers/writer_federator.F90 @@ -13,6 +13,7 @@ module writer_federator_mod perform_timeaveraged_time_manipulation, is_time_averaged_time_manipulation_ready_to_write use collections_mod, only : queue_type, list_type, map_type, hashmap_type, hashset_type, iterator_type, mapentry_type, & c_contains, c_size, c_get_string, c_get_generic, c_get_integer, c_add_string, c_free, c_put_real, c_put_generic, & + c_get_logical, c_put_logical, & c_key_at, c_is_empty, c_remove, c_push_generic, c_pop_generic, c_real_at, c_get_real, c_get_iterator, & c_has_next, c_next_mapentry, c_next_string, c_get_real, c_put_integer, c_add_generic, c_add_string use conversions_mod, only : conv_to_string, conv_single_real_to_double, conv_to_integer, conv_to_real @@ -22,9 +23,12 @@ module writer_federator_mod use threadpool_mod, only : check_thread_status use logging_mod, only : LOG_DEBUG, LOG_ERROR, LOG_WARN, log_log, log_master_log, log_get_logging_level, log_is_master use writer_types_mod, only : writer_type, writer_field_type, write_field_collective_values_type, pending_write_type, & - collective_q_field_representation_type, write_field_collective_descriptor_type, write_field_collective_monc_info_type + collective_q_field_representation_type, collective_tracer_representation_type, & + write_field_collective_descriptor_type, write_field_collective_monc_info_type, & + netcdf_diagnostics_timeseries_type, netcdf_diagnostics_type use netcdf_filetype_writer_mod, only : initialise_netcdf_filetype, finalise_netcdf_filetype, define_netcdf_file, & - write_variable, close_netcdf_file, store_io_server_state, get_writer_entry_from_netcdf + write_variable, close_netcdf_file, store_io_server_state, get_writer_entry_from_netcdf, & + get_file_state, get_specific_timeseries_dimension use global_callback_inter_io_mod, only : perform_global_callback use data_utils_mod, only : get_scalar_integer_from_monc, get_scalar_real_from_monc, get_scalar_logical_from_monc, & is_field_present @@ -32,6 +36,7 @@ module writer_federator_mod use io_server_state_writer_mod, only : is_io_server_state_writer_ready use io_server_state_reader_mod, only : reactivate_writer_federator_state use grids_mod, only : Z_INDEX, Y_INDEX, X_INDEX + use optionsdatabase_mod, only : options_get_logical, options_get_integer use mpi, only : MPI_INT, MPI_MAX use mpi_communication_mod, only : lock_mpi, unlock_mpi implicit none @@ -41,37 +46,51 @@ module writer_federator_mod #endif type(writer_type), volatile, dimension(:), allocatable :: writer_entries - type(hashset_type), volatile :: used_field_names, q_field_names - type(hashmap_type), volatile :: time_points, q_field_splits, collective_q_field_dims + type(hashset_type), volatile :: used_field_names, q_field_names, tracer_names + type(hashmap_type), volatile :: time_points, q_field_splits, collective_q_field_dims, tracer_splits, collective_tracer_dims integer, volatile :: time_points_rwlock, collective_contiguous_initialisation_mutex, currently_writing_mutex logical, volatile :: currently_writing + logical :: time_basis, force_output_on_interval + real(kind=DEFAULT_PRECISION) :: model_initial_time + public initialise_writer_federator, finalise_writer_federator, provide_ordered_field_to_writer_federator, & - check_writer_for_trigger, issue_actual_write, is_field_used_by_writer_federator, inform_writer_federator_fields_present, & - inform_writer_federator_time_point, provide_q_field_names_to_writer_federator, is_field_split_on_q + check_writer_for_trigger, is_field_used_by_writer_federator, inform_writer_federator_fields_present, & + inform_writer_federator_time_point, provide_q_field_names_to_writer_federator, is_field_split_on_q, & + provide_tracer_names_to_writer_federator, is_field_split_on_tracer, any_pending contains !> Initialises the write federator and configures it based on the user configuration. Also initialises the time manipulations !! @param io_configuration The IO server configuration - subroutine initialise_writer_federator(io_configuration, diagnostic_generation_frequency, continuation_run) + subroutine initialise_writer_federator(io_configuration, diagnostic_generation_frequency, continuation_run, & + reconfig_initial_time, sample_output_pairs) type(io_configuration_type), intent(inout) :: io_configuration type(hashmap_type), intent(inout) :: diagnostic_generation_frequency logical, intent(in) :: continuation_run + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time + integer, dimension(:,:), allocatable, intent(out) :: sample_output_pairs - integer :: i, j, number_contents, current_field_index + integer :: i, j, number_contents, current_field_index, total_number, sj, nfound + integer, dimension(:,:), allocatable :: value_pairs, out_value_pairs + logical :: match type(hashset_type) :: writer_field_names, duplicate_field_names + model_initial_time = reconfig_initial_time + time_basis = options_get_logical(io_configuration%options_database,"time_basis") + force_output_on_interval = options_get_logical(io_configuration%options_database,"force_output_on_interval") + call check_thread_status(forthread_rwlock_init(time_points_rwlock, -1)) call check_thread_status(forthread_mutex_init(collective_contiguous_initialisation_mutex, -1)) call check_thread_status(forthread_mutex_init(currently_writing_mutex, -1)) currently_writing=.false. - call init_time_averaged_manipulation() - call init_instantaneous_manipulation() + call init_time_averaged_manipulation(reconfig_initial_time) + call init_instantaneous_manipulation(reconfig_initial_time) call initialise_netcdf_filetype() - + + total_number = 0 allocate(writer_entries(io_configuration%number_of_writers)) do i=1, io_configuration%number_of_writers current_field_index=0 @@ -80,21 +99,28 @@ subroutine initialise_writer_federator(io_configuration, diagnostic_generation_f writer_entries(i)%filename=io_configuration%file_writers(i)%file_name writer_entries(i)%title=io_configuration%file_writers(i)%title writer_entries(i)%write_on_terminate=io_configuration%file_writers(i)%write_on_terminate + writer_entries(i)%write_precision=io_configuration%file_writers(i)%write_precision writer_entries(i)%include_in_io_state_write=io_configuration%file_writers(i)%include_in_io_state_write call check_thread_status(forthread_mutex_init(writer_entries(i)%trigger_and_write_mutex, -1)) call check_thread_status(forthread_mutex_init(writer_entries(i)%num_fields_to_write_mutex, -1)) call check_thread_status(forthread_mutex_init(writer_entries(i)%pending_writes_mutex, -1)) + writer_entries(i)%time_basis_override=io_configuration%file_writers(i)%time_basis_override writer_entries(i)%write_on_model_time=io_configuration%file_writers(i)%write_on_model_time if (writer_entries(i)%write_on_model_time) then writer_entries(i)%write_timestep_frequency=0 writer_entries(i)%write_time_frequency=io_configuration%file_writers(i)%write_time_frequency else - writer_entries(i)%write_time_frequency=0 + writer_entries(i)%write_time_frequency=0.0 writer_entries(i)%write_timestep_frequency=io_configuration%file_writers(i)%write_timestep_frequency end if - writer_entries(i)%previous_write_time=0 - writer_entries(i)%defined_write_time=io_configuration%file_writers(i)%write_time_frequency - writer_entries(i)%latest_pending_write_time=0 + if (writer_entries(i)%write_time_frequency .gt. 0 ) then + writer_entries(i)%previous_write_time = real(reconfig_initial_time) & + - mod(real(reconfig_initial_time),writer_entries(i)%write_time_frequency) + else + writer_entries(i)%previous_write_time = 0.0 + end if + writer_entries(i)%defined_write_time = writer_entries(i)%previous_write_time + writer_entries(i)%write_time_frequency + writer_entries(i)%latest_pending_write_time = writer_entries(i)%previous_write_time writer_entries(i)%latest_pending_write_timestep=0 writer_entries(i)%contains_io_status_dump=.false. do j=1, number_contents @@ -112,12 +138,50 @@ subroutine initialise_writer_federator(io_configuration, diagnostic_generation_f if (.not. c_is_empty(duplicate_field_names)) call handle_duplicate_field_names(writer_entries(i), duplicate_field_names) call c_free(writer_field_names) call c_free(duplicate_field_names) + total_number = total_number + current_field_index end do if (continuation_run) then call reactivate_writer_federator_state(io_configuration, writer_entries, time_points) end if + + ! Collect sampling intervals and output intervals from all fields + allocate(value_pairs(total_number,2)) + sj=1 + do i=1, io_configuration%number_of_writers + number_contents=size(writer_entries(i)%contents(:)%timestep_frequency) + value_pairs(sj:sj+number_contents-1,1) = writer_entries(i)%contents(:)%timestep_frequency + value_pairs(sj:sj+number_contents-1,2) = nint(writer_entries(i)%contents(:)%output_frequency) + sj=sj+number_contents + end do + + ! Save the unique sample_output_pairs + allocate(out_value_pairs(total_number,2)) + out_value_pairs(:,:) = 0 + do i=1,total_number + nfound = count(out_value_pairs(:,1) .gt. 0) + if (any(value_pairs(i,:) .eq. 0)) cycle + if (nfound .eq. 0) then + out_value_pairs(1,:) = value_pairs(i,:) + else + match=.false. + do sj=1,nfound + if (all(out_value_pairs(sj,:) .eq. value_pairs(i,:))) then + match = .true. + exit ! break test if already found + end if + end do + if (.not. match) then + out_value_pairs(nfound+1,:) = value_pairs(i,:) + end if + end if + end do + allocate(sample_output_pairs(count(out_value_pairs(:,1) .gt. 0),2)) + sample_output_pairs(:,:) = out_value_pairs(1:count(out_value_pairs(:,1) .gt. 0),:) + deallocate(value_pairs,out_value_pairs) + end subroutine initialise_writer_federator + !> Finalises the write federator and the manipulations subroutine finalise_writer_federator() call check_thread_status(forthread_rwlock_destroy(time_points_rwlock)) @@ -128,6 +192,7 @@ subroutine finalise_writer_federator() call finalise_netcdf_filetype() end subroutine finalise_writer_federator + !> Registers receipt of data for a new time_point subroutine inform_writer_federator_time_point(io_configuration, source, data_id, data_dump) type(io_configuration_type), intent(inout) :: io_configuration integer, intent(in) :: source, data_id @@ -136,12 +201,19 @@ subroutine inform_writer_federator_time_point(io_configuration, source, data_id, real(kind=DEFAULT_PRECISION) :: time integer :: timestep character(len=STRING_LENGTH) :: timestep_key + logical :: terminated if (is_field_present(io_configuration, source, data_id, "time") .and. & is_field_present(io_configuration, source, data_id, "timestep")) then time=get_scalar_real_from_monc(io_configuration, source, data_id, data_dump, "time") timestep=get_scalar_integer_from_monc(io_configuration, source, data_id, data_dump, "timestep") + if (is_field_present(io_configuration, source, data_id, "terminated")) then + terminated=get_scalar_logical_from_monc(io_configuration, source, data_id, data_dump, "terminated") + else + terminated=.false. + end if + timestep_key=conv_to_string(timestep) call check_thread_status(forthread_rwlock_rdlock(time_points_rwlock)) @@ -150,12 +222,104 @@ subroutine inform_writer_federator_time_point(io_configuration, source, data_id, call check_thread_status(forthread_rwlock_wrlock(time_points_rwlock)) if (.not. c_contains(time_points, timestep_key)) then call c_put_real(time_points, timestep_key, time) - end if + end if end if call check_thread_status(forthread_rwlock_unlock(time_points_rwlock)) end if + + call check_write_criteria(io_configuration, real(time, kind=4), timestep, terminated) + end subroutine inform_writer_federator_time_point + + subroutine check_write_criteria(io_configuration, time, timestep, terminated) + type(io_configuration_type), intent(inout) :: io_configuration + real, intent(in) :: time + integer, intent(in) :: timestep + logical, intent(in) :: terminated + real :: time_difference + integer :: i + logical :: issue_write, issue_terminated_write + + do i=1,size(writer_entries) + + issue_write = .false. + issue_terminated_write = .false. + call check_thread_status(forthread_mutex_lock(writer_entries(i)%trigger_and_write_mutex)) + + ! Prevent issuing a write twice for the same instance + if (writer_entries(i)%latest_pending_write_timestep .ne. timestep) then + issue_terminated_write=writer_entries(i)%write_on_terminate .and. terminated + if (writer_entries(i)%write_on_model_time) then ! + if (writer_entries(i)%write_time_frequency .gt. 0) then + time_difference=time-writer_entries(i)%latest_pending_write_time + issue_write=time_difference .ge. writer_entries(i)%write_time_frequency + end if + else + ! Case for all checkpoint requests + if (writer_entries(i)%write_timestep_frequency .gt. 0) then + issue_write = mod(timestep, writer_entries(i)%write_timestep_frequency) == 0 + end if + end if + end if + + if (issue_write .or. issue_terminated_write) then + writer_entries(i)%latest_pending_write_time=time + writer_entries(i)%latest_pending_write_timestep=timestep + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%trigger_and_write_mutex)) + call log_master_log(LOG_DEBUG, "INITIAL PENDING! core: "//& + trim(conv_to_string(io_configuration%my_io_rank))//& + " (IO): Register pending write for "//& + trim(writer_entries(i)%filename)//& + " at time="//trim(conv_to_string(time))//"/"//& + trim(conv_to_string(timestep))) + call register_pending_file_write(i, timestep, time, & + writer_entries(i)%write_on_terminate .and. terminated) + else + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%trigger_and_write_mutex)) + end if + + end do ! loop over writer_entries + + end subroutine check_write_criteria + + + !> Simple check on pending status. + ! Used to signal completion of the IOserver + logical function any_pending() + integer :: i + + ! Initialise + any_pending = .false. + + ! Lock activity on critical items + call check_thread_status(forthread_mutex_lock(currently_writing_mutex)) + do i=1,size(writer_entries) + call check_thread_status(forthread_mutex_lock(writer_entries(i)%pending_writes_mutex)) + end do + + ! Only look for files to write if no files are being written. + if (.not. currently_writing) then + + ! Find next pending write timestep + do i=1,size(writer_entries) + if (.not. c_is_empty(writer_entries(i)%pending_writes)) then + any_pending = .true. + end if + end do + else ! Something is still going on if it's writing. + any_pending = .true. + end if ! currently_writing + + ! Unlock critical items + do i=size(writer_entries),1,-1 + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%pending_writes_mutex)) + end do + call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) + + end function any_pending + + !> Informs the writer federator that specific fields are present and should be reflected in the diagnostics output !! @param field_names The set of field names that are present subroutine inform_writer_federator_fields_present(io_configuration, field_names, diag_field_names_and_roots) @@ -165,7 +329,7 @@ subroutine inform_writer_federator_fields_present(io_configuration, field_names, type(iterator_type) :: iterator character(len=STRING_LENGTH) :: specific_name - integer :: i, number_q_fields, expected_io + integer :: i, number_q_fields, number_tracers, expected_io logical :: field_found, expected_here, diagnostics_mode iterator=c_get_iterator(used_field_names) @@ -214,6 +378,33 @@ subroutine inform_writer_federator_fields_present(io_configuration, field_names, end do end if end do + iterator=c_get_iterator(tracer_names) + do while (c_has_next(iterator)) + specific_name=c_next_string(iterator) + if (present(field_names)) then + field_found=c_contains(field_names, specific_name) + diagnostics_mode=.false. + else if (present(diag_field_names_and_roots)) then + field_found=c_contains(diag_field_names_and_roots, specific_name) + if (field_found) expected_io=c_get_integer(diag_field_names_and_roots, specific_name) + diagnostics_mode=.true. + else + field_found=.false. + end if + if (field_found) then + expected_here=expected_io == -1 .or. expected_io == io_configuration%my_io_rank + number_tracers=c_get_integer(io_configuration%dimension_sizing, "tfields") + do i=1, number_tracers + if (c_size(io_configuration%tracer_names) .ge. i) then + call enable_specific_field_by_name(trim(specific_name)//"_"//trim(c_get_string(io_configuration%tracer_names, i)), & + diagnostics_mode, expected_here) + else + call enable_specific_field_by_name(trim(specific_name)//"_udef"//trim(conv_to_string(i)), & + diagnostics_mode, expected_here) + end if + end do + end if + end do end subroutine inform_writer_federator_fields_present !> Determines whether a field is used by the writer federator or not @@ -242,6 +433,15 @@ logical function is_field_split_on_q(field_name) is_field_split_on_q=c_contains(q_field_names, field_name) end function is_field_split_on_q + !> Determines whether a field is split on tracer or not + !! @param field_name The field name to check whether it is being used or not + !! @returns Whether this field is used or not (and then further split to be constituient parts of tracer) + logical function is_field_split_on_tracer(field_name) + character(len=*), intent(in) :: field_name + + is_field_split_on_tracer=c_contains(tracer_names, field_name) + end function is_field_split_on_tracer + !> Enables a specific field by its name, this will locate all the fields with this name and enable them !! @param field_name The name of the field to enable subroutine enable_specific_field_by_name(field_name, diagnostics_mode, expected_here) @@ -308,6 +508,44 @@ subroutine provide_q_field_names_to_writer_federator(q_provided_field_names) end do end subroutine provide_q_field_names_to_writer_federator + + !> Provides the tracer field names to the write federator, this is required as on initialisation we don't know what these are and + !! only when MONC register do they inform the IO server of the specifics + !! @param tracer_field_names An ordered list of tracer field names + subroutine provide_tracer_names_to_writer_federator(tracer_provided_field_names) + type(list_type), intent(inout) :: tracer_provided_field_names + + type(iterator_type) :: iterator, tracer_iterator + logical :: continue_search + integer :: writer_index, contents_index, i + character(len=STRING_LENGTH) :: search_field, field_name, specific_name + + iterator=c_get_iterator(tracer_names) + do while (c_has_next(iterator)) + specific_name=c_next_string(iterator) + tracer_iterator=c_get_iterator(tracer_provided_field_names) + i=1 + do while (c_has_next(tracer_iterator)) + search_field=trim(specific_name)//"_udef"//trim(conv_to_string(i)) + field_name=trim(specific_name)//"_"//trim(c_next_string(tracer_iterator)) + continue_search=.true. + writer_index=1 + contents_index=0 + do while (continue_search) + contents_index=contents_index+1 + continue_search=get_next_applicable_writer_entry(search_field, writer_index_point=writer_index, & + contents_index_point=contents_index) + if (continue_search) then + writer_entries(writer_index)%contents(contents_index)%field_name=field_name + end if + end do + i=i+1 + call c_add_string(used_field_names, field_name) + call c_remove(used_field_names, search_field) + end do + end do + end subroutine provide_tracer_names_to_writer_federator + subroutine provide_ordered_field_to_writer_federator(io_configuration, field_name, field_namespace, field_values, & timestep, time, source) type(io_configuration_type), intent(inout) :: io_configuration @@ -337,16 +575,16 @@ subroutine provide_ordered_field_to_writer_federator(io_configuration, field_nam continue_search=get_next_applicable_writer_entry(field_name, field_namespace, writer_index, contents_index) if (continue_search) then if (.not. writer_entries(writer_index)%contents(contents_index)%enabled) then - call log_log(LOG_WARN, "Received data for previously un-enabled field '"//& - writer_entries(writer_index)%contents(contents_index)%field_name//"'") + call log_log(LOG_WARN, "Received data for previously un-enabled field (ordered_field)'"//& + trim(writer_entries(writer_index)%contents(contents_index)%field_name)//"'") end if writer_entries(writer_index)%contents(contents_index)%enabled=.true. writer_entries(writer_index)%contents(contents_index)%latest_timestep_values=timestep if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "[WRITE FED VALUE STORE] Storing value for field "//trim(field_name)//" ts="//& - trim(conv_to_string(timestep))// " t="//trim(conv_to_string(time))) + call log_log(LOG_DEBUG, "[WRITE FED VALUE STORE] Storing value for field (ordered_field)"//& + trim(field_name)//" ts="//trim(conv_to_string(timestep))// " t="//trim(conv_to_string(time))) end if - call check_thread_status(forthread_mutex_lock(writer_entries(writer_index)%contents(contents_index)%values_mutex)) + call check_thread_status(forthread_mutex_lock(writer_entries(writer_index)%contents(contents_index)%values_mutex)) call c_put_generic(writer_entries(writer_index)%contents(contents_index)%values_to_write, conv_to_string(time), & generic, .false.) call check_thread_status(forthread_mutex_unlock(writer_entries(writer_index)%contents(contents_index)%values_mutex)) @@ -399,6 +637,25 @@ subroutine provide_ordered_field_to_writer_federator_real_values(io_configuratio timestep, time, source) index=index+individual_size end do + else if (c_contains(tracer_names, field_name)) then + + if (c_contains(tracer_splits, field_name)) then + individual_size=c_get_integer(tracer_splits, field_name) + else if (source .gt. -1) then + individual_size=get_size_of_collective_tracer(io_configuration, field_name, source) + else + call log_log(LOG_WARN, & + "Can not find tracer split field in tracer field names or collective field names with source, ignoring") + return + end if + iterator=c_get_iterator(io_configuration%tracer_names) + index=1 + do while (c_has_next(iterator)) + call provide_ordered_single_field_to_writer_federator(io_configuration, & + trim(field_name)//"_"//trim(c_next_string(iterator)), field_namespace, field_values(index:index+individual_size-1), & + timestep, time, source) + index=index+individual_size + end do end if end subroutine provide_ordered_field_to_writer_federator_real_values @@ -427,6 +684,31 @@ integer function get_size_of_collective_q(io_configuration, field_name, source) end select end function get_size_of_collective_q + !> Retrieves the data size for each tracer entry of a collective tracer field for the specific source MONC that has sent data + !! @param io_configuration The IO server configuration + !! @param field_name The field name to write (if appropriate) + !! @param source MONC source for the communicated fields + !! @returns The size (elements) per tracer split field + integer function get_size_of_collective_tracer(io_configuration, field_name, source) + type(io_configuration_type), intent(inout) :: io_configuration + character(len=*), intent(in) :: field_name + integer, intent(in) :: source + + class(*), pointer :: generic + integer :: i, monc_index + + get_size_of_collective_tracer=1 + monc_index=get_monc_location(io_configuration, source) + generic=>c_get_generic(collective_tracer_dims, field_name) + select type(generic) + type is(collective_tracer_representation_type) + do i=1, size(generic%dimensions) + get_size_of_collective_tracer=& + get_size_of_collective_tracer*io_configuration%registered_moncs(monc_index)%local_dim_sizes(generic%dimensions(i)) + end do + end select + end function get_size_of_collective_tracer + !> Provides a single ordered field, i.e. Q fields have been split by this point !! @param io_configuration The IO server configuration !! @param field_name The field name to write (if appropriate) @@ -451,14 +733,15 @@ subroutine provide_ordered_single_field_to_writer_federator(io_configuration, fi continue_search=.true. writer_index=1 contents_index=0 + if (c_contains(used_field_names, field_name)) then do while (continue_search) contents_index=contents_index+1 continue_search=get_next_applicable_writer_entry(field_name, field_namespace, writer_index, contents_index) if (continue_search) then if (.not. writer_entries(writer_index)%contents(contents_index)%enabled) then - call log_log(LOG_WARN, "Received data for previously un-enabled field '"//& - writer_entries(writer_index)%contents(contents_index)%field_name//"'") + call log_log(LOG_WARN, "Received data for previously un-enabled field (single_field)'"//& + trim(writer_entries(writer_index)%contents(contents_index)%field_name)//"'") end if writer_entries(writer_index)%contents(contents_index)%enabled=.true. if (.not. c_contains(typed_result_values, conv_to_string(& @@ -467,11 +750,12 @@ subroutine provide_ordered_single_field_to_writer_federator(io_configuration, fi if (writer_entries(writer_index)%contents(contents_index)%collective_write .and. source .gt. -1) then result_values=writer_entries(writer_index)%contents(contents_index)%time_manipulation(field_values, & writer_entries(writer_index)%contents(contents_index)%output_frequency, & - trim(field_name)//"#"//conv_to_string(source), timestep, time) + trim(field_name)//"#"//conv_to_string(source), timestep, time, & + time_basis .or. force_output_on_interval) else result_values=writer_entries(writer_index)%contents(contents_index)%time_manipulation(field_values, & writer_entries(writer_index)%contents(contents_index)%output_frequency, & - field_name, timestep, time) + field_name, timestep, time, time_basis .or. force_output_on_interval) end if generic=>result_values call c_put_generic(typed_result_values, conv_to_string(& @@ -483,8 +767,8 @@ subroutine provide_ordered_single_field_to_writer_federator(io_configuration, fi if (allocated(result_values%values)) then writer_entries(writer_index)%contents(contents_index)%latest_timestep_values=timestep if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "[WRITE FED VALUE STORE] Storing value for field "//trim(field_name)//" ts="//& - trim(conv_to_string(timestep))// " t="//trim(conv_to_string(time))) + call log_log(LOG_DEBUG, "[WRITE FED VALUE STORE] Storing value for field (single_field) "//& + trim(field_name)//" ts="//trim(conv_to_string(timestep))// " t="//trim(conv_to_string(time))) end if call check_thread_status(forthread_mutex_lock(writer_entries(writer_index)%contents(contents_index)%values_mutex)) if (writer_entries(writer_index)%contents(contents_index)%collective_write .and. source .gt. -1) then @@ -535,7 +819,7 @@ subroutine write_collective_write_value(result_values, writer_index, contents_in call c_put_generic(stored_monc_values%monc_values, conv_to_string(source), generic, .false.) end subroutine write_collective_write_value - !> For a specific field wil determine and handle any outstanding fields writes until an outstanding write + !> For a specific field, will determine and handle any outstanding field writes until an outstanding write !! can not be performed or the outstanding list is empty !! @param specific_field The specific field that we are concerned with subroutine determine_if_outstanding_field_can_be_written(io_configuration, writer_entry, specific_field) @@ -550,8 +834,11 @@ subroutine determine_if_outstanding_field_can_be_written(io_configuration, write writer_entry%previous_write_timestep, writer_entry%write_time, writer_entry%previous_write_time, field_write_success) if (field_write_success) then if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Flushed outstanding field ts="//conv_to_string(writer_entry%write_timestep)//& - " write time="//conv_to_string(writer_entry%write_time)) + call log_log(LOG_DEBUG, "Flushed outstanding field '"//trim(specific_field%field_name)//& + "' ts="//conv_to_string(writer_entry%write_timestep)//& + " write time="//conv_to_string(writer_entry%write_time)//& + ", my_io_rank="//trim(conv_to_string(io_configuration%my_io_rank))//& + ", num_fields_to_write"//trim(conv_to_string(writer_entry%num_fields_to_write-1)) ) end if call check_thread_status(forthread_mutex_lock(writer_entry%num_fields_to_write_mutex)) writer_entry%num_fields_to_write=writer_entry%num_fields_to_write-1 @@ -564,7 +851,7 @@ subroutine determine_if_outstanding_field_can_be_written(io_configuration, write end if end subroutine determine_if_outstanding_field_can_be_written - !> Determines if a file can be written to its overarching write representation. If so then a write is issued, otherwise + !> Determines if a field can be written to its overarching write representation. If so then a write is issued, otherwise !! an outstanding write point is registered which will be checked frequency to do a write later on !! @param specific_field The specific field we are checking and going to write if possible !! @param timestep The current timestep that we are at for this write @@ -581,15 +868,16 @@ subroutine determine_if_field_can_be_written(io_configuration, writer_entry, spe real :: value_to_test, largest_value_found integer :: num_matching - logical :: entry_beyond_this_write type(iterator_type) :: iterator type(mapentry_type) :: map_entry type(write_field_collective_values_type), pointer :: multi_monc_entries + type(netcdf_diagnostics_type), pointer :: file_state + type(netcdf_diagnostics_timeseries_type), pointer :: timeseries_diag + class(*), pointer :: generic num_matching=0 largest_value_found=0.0 - entry_beyond_this_write=.false. call check_thread_status(forthread_mutex_lock(specific_field%values_mutex)) if (.not. c_is_empty(specific_field%values_to_write)) then iterator=c_get_iterator(specific_field%values_to_write) @@ -604,18 +892,24 @@ subroutine determine_if_field_can_be_written(io_configuration, writer_entry, spe end select if (c_size(multi_monc_entries%monc_values) .ne. io_configuration%number_of_moncs) cycle end if - if (value_to_test .gt. write_time) entry_beyond_this_write=.true. - if (value_to_test .le. write_time .and. value_to_test .gt. previous_write_time) then + if (value_to_test .le. write_time .and. value_to_test .gt. previous_write_time) then num_matching=num_matching+1 if (largest_value_found .lt. value_to_test) largest_value_found=value_to_test end if end do end if - if (num_matching .gt. 0 .and. (specific_field%ready_to_write(largest_value_found, specific_field%output_frequency, write_time, & - specific_field%latest_timestep_values, timestep) .or. entry_beyond_this_write)) then + ! Obtain the correct expected number of time entries for this writer file. + file_state=>get_file_state(writer_entry%filename, timestep, .true.) + timeseries_diag=>get_specific_timeseries_dimension(& + file_state, specific_field%output_frequency, specific_field%timestep_frequency) + ! Only write the variable when the found count matches the expected count + if ((num_matching .eq. timeseries_diag%num_entries)) then if (.not. specific_field%collective_write .or. .not. specific_field%collective_contiguous_optimisation) then - if (specific_field%issue_write) then + ! When counts are both zero (as can happen in some edge cases, particularly when reconfiguring with + ! --retain_model_time=.true.), skip the writing call, but still allow updates to previous_write_time, + ! pending_to_write, and field_written for the writer_entry. + if (specific_field%issue_write .and. num_matching .ne. 0) then call write_variable(io_configuration, specific_field, writer_entry%filename, timestep, write_time) end if specific_field%previous_write_time=writer_entry%write_time @@ -624,10 +918,12 @@ subroutine determine_if_field_can_be_written(io_configuration, writer_entry, spe if (present(field_written)) field_written=.true. else if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Setting outstanding field ts="//conv_to_string(writer_entry%write_timestep)//& + call log_log(LOG_DEBUG, "Setting outstanding field '"//trim(specific_field%field_name)//& + "'ts="//conv_to_string(writer_entry%write_timestep)//& " write time="//conv_to_string(writer_entry%write_time)//" prev="//conv_to_string(previous_write_time)//& - " largest entry="//conv_to_string(largest_value_found)//" num matching="//conv_to_string(num_matching)) - end if + " largest entry="//conv_to_string(largest_value_found)//" num matching="//conv_to_string(num_matching)//& + " num_entries in writer="//conv_to_string(timeseries_diag%num_entries) ) + end if specific_field%pending_to_write=.true. if (present(field_written)) field_written=.false. end if @@ -647,6 +943,7 @@ subroutine check_writer_for_trigger(io_configuration, source, data_id, data_dump integer :: i, timestep real(kind=DEFAULT_PRECISION) :: time logical :: terminated + character(len=STRING_LENGTH) :: timestep_key if (is_field_present(io_configuration, source, data_id, "timestep") .and. & is_field_present(io_configuration, source, data_id, "time")) then @@ -658,68 +955,182 @@ subroutine check_writer_for_trigger(io_configuration, source, data_id, data_dump else terminated=.false. end if - do i=1, size(writer_entries) - call check_writer_trigger(io_configuration, i, timestep, real(time, kind=4), terminated) - end do + + ! Call out to evaluate pending writer entries if not currently_writing + call check_thread_status(forthread_mutex_lock(currently_writing_mutex)) + if (.not. currently_writing) then + call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) + call evaluate_writer_issue(io_configuration) + else + call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) + end if end if + end subroutine check_writer_for_trigger - !> Checks a writer trigger and issues a file creation along with field write if the conditions (time or timestep) are met. - !! This will either create and write to the file or store a pending state if one is already open (required due to - !! NetCDF/HDF5 limitations with thread safety and parallel access.) - !! @param io_configuration The IO server configuration - !! @param writer_entry_index Index of the writer we are concerned with - !! @param timestep The corresponding timestep - !! @param time The corresponding model time - subroutine check_writer_trigger(io_configuration, writer_entry_index, timestep, time, terminated) - type(io_configuration_type), intent(inout) :: io_configuration - integer, intent(in) :: writer_entry_index, timestep - real, intent(in) :: time - logical, intent(in) :: terminated - real :: time_difference - integer :: i - logical :: issue_write, issue_terminated_write + !> Considers the situation to determine the index of the writer entry to issue, if any + !! @param chain_override Allows determination to proceed when currently_writing=.true. + subroutine evaluate_writer_issue(io_configuration, chain_override) + type(io_configuration_type), intent(inout) :: io_configuration + logical, intent(in), optional :: chain_override + + integer :: timestep, index_to_issue + logical :: terminated, regular_pending_exists, non_io_dump_pending_exists, & + non_io_regular_exists, override, first_instance + type(iterator_type) :: iterator + type(mapentry_type) :: map_entry + integer :: i, next_pending_timestep + type(pending_write_type), pointer :: ptr + class(*), pointer :: generic + + ! Initialise + index_to_issue = 0 + next_pending_timestep = huge(next_pending_timestep) + regular_pending_exists = .false. + non_io_dump_pending_exists = .false. + non_io_regular_exists = .false. + override = .false. + first_instance = .true. + if (present(chain_override)) override = chain_override - call check_thread_status(forthread_mutex_lock(writer_entries(writer_entry_index)%trigger_and_write_mutex)) - issue_terminated_write=writer_entries(writer_entry_index)%write_on_terminate .and. terminated - if (writer_entries(writer_entry_index)%write_on_model_time) then - time_difference=time-writer_entries(writer_entry_index)%latest_pending_write_time - issue_write=time_difference .ge. writer_entries(writer_entry_index)%write_time_frequency - else - if (writer_entries(writer_entry_index)%write_timestep_frequency .gt. 0) then - issue_write=writer_entries(writer_entry_index)%latest_pending_write_timestep .ne. timestep .and. & - mod(timestep, writer_entries(writer_entry_index)%write_timestep_frequency) == 0 - else - issue_write=.false. - end if - issue_terminated_write=issue_terminated_write .and. & - writer_entries(writer_entry_index)%latest_pending_write_timestep .ne. timestep - end if + ! Lock activity on critical items + call check_thread_status(forthread_mutex_lock(currently_writing_mutex)) + do i=1,size(writer_entries) + call check_thread_status(forthread_mutex_lock(writer_entries(i)%pending_writes_mutex)) + end do + + ! Only look for files to write if no files are being written. + if ((.not. currently_writing) .or. override) then + + ! Find next pending write timestep + do i=1,size(writer_entries) + if (.not. c_is_empty(writer_entries(i)%pending_writes)) then + generic=>c_get_generic(writer_entries(i)%pending_writes,1) + select type(generic) + type is (pending_write_type) + next_pending_timestep = min(next_pending_timestep, generic%timestep) + if (.not. writer_entries(i)%write_on_terminate) regular_pending_exists = .true. + + if (.not. writer_entries(i)%contains_io_status_dump) then + non_io_dump_pending_exists = .true. + if (.not. writer_entries(i)%write_on_terminate) then + non_io_regular_exists = .true. + end if + end if + + end select + end if + end do + + ! Only proceed if there is some pending write + if (next_pending_timestep .lt. huge(next_pending_timestep)) then - if (issue_write .or. issue_terminated_write) then - writer_entries(writer_entry_index)%latest_pending_write_time=time - writer_entries(writer_entry_index)%latest_pending_write_timestep=timestep + ! Evaluate each writer entry by looping over them + do i=1,size(writer_entries) + + ! Only look for files to write where there are pending writes + if (.not. c_is_empty(writer_entries(i)%pending_writes)) then + + ! Get information for 1st pending write in the queue + generic=>c_get_generic(writer_entries(i)%pending_writes,1) + select type(generic) + type is (pending_write_type) + + ! Determine if this pending write is ready to be issued [(t)tp_complete = true] + timestep = generic%timestep + terminated = generic%terminated_write + end select + + !Writer order is: + ! 1. regular writes without dumps + ! 2. terminated writes without dumps + ! 3. regular writes with dumps + ! 4. terminated writes with dumps + + ! Skip writers with contains_io_status_dump when a non_io_dump_pending_exists + if (writer_entries(i)%contains_io_status_dump .and. & + non_io_dump_pending_exists) cycle + ! Allows 1 & 2 ahead of 3 & 4. + + ! --- At this point, exclusively io_dump or non-io_dump writes --- + ! --- are being evaluated this time through the subroutine --- + + if (non_io_dump_pending_exists) then + if (terminated .and. non_io_regular_exists) cycle + ! allows 1 (regular) ahead of 2 (terminated) + else ! only io_dump writers exist + if (terminated .and. regular_pending_exists) cycle + ! allows 3 (regular) ahead of 4 (terminated) + end if + + ! --- At this point, exclusively terminated or regular writes --- + ! --- are being evaluated this time through the subroutine --- + ! --- We want to lock onto the first such pending writer in --- + ! --- the loop that has the next_pending_timestep. --- + + ! Only evaluate this writer if it is the first match of the next_pending_timestep + if (timestep .eq. next_pending_timestep .and. first_instance) then + + ! Here, this is the first match of this kind of write. Prevent further evaluation. + first_instance = .false. + index_to_issue = i ! This is the index of the writer we shall issue now. - call check_thread_status(forthread_mutex_lock(currently_writing_mutex)) + exit ! found next writer index, exit writer loop to write - if (currently_writing) then + end if ! timestep matches next_pending_timestep, check next writer + + end if ! pending writes exist, check next writer + if (.not. first_instance) exit + end do ! Loop to evaluate each writer entry + end if ! condition that some pending write exists + + + ! Issue pending write when a set of tests succeeds and an appropriate writer is found + if (index_to_issue .gt. 0) then + + ! Ensure writing mode change and remove entry from pending list + currently_writing = .true. + generic=>c_pop_generic(writer_entries(index_to_issue)%pending_writes) + + ! Unlock critical items + do i=size(writer_entries),1,-1 + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%pending_writes_mutex)) + end do call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) - call check_thread_status(forthread_mutex_unlock(writer_entries(writer_entry_index)%trigger_and_write_mutex)) - call register_pending_file_write(writer_entry_index, timestep, time, & - writer_entries(writer_entry_index)%write_on_terminate .and. terminated) - else - currently_writing=.true. + + ! Unhash the generic and issue a write. + select type(generic) + type is (pending_write_type) + + call issue_actual_write(io_configuration, writer_entries(index_to_issue), & + generic%timestep, generic%write_time, generic%terminated_write) + ptr => generic + deallocate(ptr) + end select + + else ! no writer was found + currently_writing = .false. + + ! Unlock critical items + do i=size(writer_entries),1,-1 + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%pending_writes_mutex)) + end do call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) - call check_thread_status(forthread_mutex_unlock(writer_entries(writer_entry_index)%trigger_and_write_mutex)) - call issue_actual_write(io_configuration, writer_entries(writer_entry_index), timestep, time, & - writer_entries(writer_entry_index)%write_on_terminate .and. terminated) - end if - else - call check_thread_status(forthread_mutex_unlock(writer_entries(writer_entry_index)%trigger_and_write_mutex)) - end if - end subroutine check_writer_trigger - + end if ! ready to issue write + + else ! is currently_writing + ! Basically, do nothing. + ! Unlock critical items + do i=size(writer_entries),1,-1 + call check_thread_status(forthread_mutex_unlock(writer_entries(i)%pending_writes_mutex)) + end do + call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) + end if ! .not. currently_writing + + end subroutine evaluate_writer_issue + + !> Issues the actual file creation, write of available fields and closure if all completed. !! @param io_configuration The IO server configuration !! @param writer_entry_index Index of the writer we are concerned with @@ -736,6 +1147,9 @@ subroutine issue_actual_write(io_configuration, writer_entry, timestep, time, te logical :: field_written type(map_type) :: applicable_time_points + call log_log(LOG_DEBUG, "File "//trim(writer_entry%filename)//" started. "//& + trim(conv_to_string(io_configuration%my_global_rank))) + call check_thread_status(forthread_mutex_lock(collective_contiguous_initialisation_mutex)) do i=1, size(writer_entry%contents) if (writer_entry%contents(i)%enabled .and. writer_entry%contents(i)%collective_write) then @@ -749,7 +1163,8 @@ subroutine issue_actual_write(io_configuration, writer_entry, timestep, time, te writer_entry%write_time=time writer_entry%write_timestep=timestep applicable_time_points=extract_applicable_time_points(writer_entry%previous_write_time, time) - call define_netcdf_file(io_configuration, writer_entry, timestep, time, applicable_time_points, terminated_write) + call define_netcdf_file(io_configuration, writer_entry, timestep, time, applicable_time_points, terminated_write, & + time_basis) call c_free(applicable_time_points) total_outstanding=0 total_flds=0 @@ -774,6 +1189,7 @@ subroutine issue_actual_write(io_configuration, writer_entry, timestep, time, te //" total="//trim(conv_to_string(total_flds))//" written="//trim(conv_to_string(num_written))//& " outstanding="//trim(conv_to_string(total_outstanding))) end if + if (total_outstanding == 0) then call close_diagnostics_file(io_configuration, writer_entry, timestep, time) end if @@ -883,9 +1299,14 @@ subroutine close_diagnostics_file(io_configuration, writer_entry, timestep, time integer, intent(in) :: timestep real, intent(in) :: time + if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Issue close for NetCDF file at timestep "//trim(conv_to_string(timestep))) + call log_log(LOG_DEBUG, "Issue close for NetCDF file: "//& + trim(writer_entry%filename)//& + ", "//trim(conv_to_string(io_configuration%my_io_rank))//& + ", "//trim(conv_to_string(timestep))) end if + call perform_global_callback(io_configuration, writer_entry%filename, timestep, handle_close_diagnostics_globalcallback) end subroutine close_diagnostics_file @@ -894,19 +1315,19 @@ end subroutine close_diagnostics_file !! pending file writes to process any others that are waiting in the queue !! @param io_configuration The IO server configuration !! @param values The inter IO resulting values, we don't care about these - !! @param field_name The field name that is being communicated + !! @param filename The name of the file that is being closed !! @param timestep The write timestep - subroutine handle_close_diagnostics_globalcallback(io_configuration, values, field_name, timestep) + subroutine handle_close_diagnostics_globalcallback(io_configuration, values, filename, timestep) type(io_configuration_type), intent(inout) :: io_configuration real(DEFAULT_PRECISION), dimension(:) :: values - character(len=STRING_LENGTH) :: field_name + character(len=STRING_LENGTH) :: filename integer :: timestep type(writer_type), pointer :: writer_entry integer :: i - logical :: terminated, done_chain_run + logical :: terminated - writer_entry=>get_writer_entry_from_netcdf(field_name, timestep, terminated) + writer_entry=>get_writer_entry_from_netcdf(filename, timestep, terminated) do i=1, size(writer_entry%contents) if (writer_entry%contents(i)%enabled .and. writer_entry%contents(i)%collective_write .and. & @@ -934,56 +1355,15 @@ subroutine handle_close_diagnostics_globalcallback(io_configuration, values, fie call check_thread_status(forthread_rwlock_unlock(time_points_rwlock)) end if - call close_netcdf_file(io_configuration, field_name, timestep) + call close_netcdf_file(io_configuration, filename, timestep) - done_chain_run=.false. - do i=1, size(writer_entries) - if (writer_entries(i)%filename .ne. writer_entry%filename) then - done_chain_run=check_for_and_issue_chain_write(io_configuration, writer_entries(i)) - if (done_chain_run) exit - end if - end do - if (.not. done_chain_run) done_chain_run=check_for_and_issue_chain_write(io_configuration, writer_entry) + ! At this point, currently_writing=.true. + ! We want to see if any more writes exist, and issue them if they do exist. + ! If none, we're done. If some exist, the process writes and loops back to this point. + call evaluate_writer_issue(io_configuration, chain_override=.true.) - if (.not. done_chain_run) then - call check_thread_status(forthread_mutex_lock(currently_writing_mutex)) - currently_writing=.false. - call check_thread_status(forthread_mutex_unlock(currently_writing_mutex)) - if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "No more pending entries to chain to at ts= "//trim(conv_to_string(timestep))) - end if - end if end subroutine handle_close_diagnostics_globalcallback - !> Will check whether there are any pending writes and if so will issue a chain write for this - !! @param io_configuration The IO server configuration - !! @param writer_entry The specific writer entry - !! @returns Whether a chain write was issued or not - logical function check_for_and_issue_chain_write(io_configuration, writer_entry) - type(io_configuration_type), intent(inout) :: io_configuration - type(writer_type), intent(inout) :: writer_entry - - class(*), pointer :: generic - - call check_thread_status(forthread_mutex_lock(writer_entry%pending_writes_mutex)) - if (.not. c_is_empty(writer_entry%pending_writes)) then - check_for_and_issue_chain_write=.true. - generic=>c_pop_generic(writer_entry%pending_writes) - call check_thread_status(forthread_mutex_unlock(writer_entry%pending_writes_mutex)) - select type(generic) - type is (pending_write_type) - if (log_get_logging_level() .ge. LOG_DEBUG) then - call log_log(LOG_DEBUG, "Chain to next pending entry ts= "//trim(conv_to_string(generic%timestep))) - end if - call issue_actual_write(io_configuration, writer_entry, generic%timestep, & - generic%write_time, generic%terminated_write) - deallocate(generic) - end select - else - check_for_and_issue_chain_write=.false. - call check_thread_status(forthread_mutex_unlock(writer_entry%pending_writes_mutex)) - end if - end function check_for_and_issue_chain_write !> Registers a pending file write which will be actioned later on !! @param writer_entry_index Index of the writer entry @@ -1051,10 +1431,11 @@ integer function get_total_number_writer_fields(io_configuration, writer_entry_i type(io_configuration_type), intent(inout) :: io_configuration integer, intent(in) :: writer_entry_index - integer :: i, number_contents, group_index, number_q_fields + integer :: i, number_contents, group_index, number_q_fields, number_tracers get_total_number_writer_fields=0 number_q_fields=c_get_integer(io_configuration%dimension_sizing, "qfields") + number_tracers=c_get_integer(io_configuration%dimension_sizing, "tfields") number_contents=io_configuration%file_writers(writer_entry_index)%number_of_contents do i=1, number_contents @@ -1064,12 +1445,12 @@ integer function get_total_number_writer_fields(io_configuration, writer_entry_i if (group_index == 0) call log_log(LOG_ERROR, "Can not find group '"//trim(& io_configuration%file_writers(writer_entry_index)%contents(i)%facet_name)//"'") get_total_number_writer_fields=get_total_number_writer_fields+& - get_group_number_of_fields(io_configuration, io_configuration%groups(group_index)%members, number_q_fields, & - io_configuration%groups(group_index)%namespace) + get_group_number_of_fields(io_configuration, io_configuration%groups(group_index)%members, & + number_q_fields, number_tracers, io_configuration%groups(group_index)%namespace) else if (io_configuration%file_writers(writer_entry_index)%contents(i)%facet_type == FIELD_TYPE) then ! NSE get_total_number_writer_fields=get_total_number_writer_fields+get_field_number_of_fields(io_configuration, & - io_configuration%file_writers(writer_entry_index)%contents(i)%facet_name, "", number_q_fields) + io_configuration%file_writers(writer_entry_index)%contents(i)%facet_name, "", number_q_fields, number_tracers) end if end do end function get_total_number_writer_fields @@ -1078,11 +1459,12 @@ end function get_total_number_writer_fields !! @param io_configuration The IO server configuration !! @param group_members The members of the group !! @param num_q_fields The number of Q fields + !! @param num_tracers The number of tracer fields !! @returns The number of fields that make up this group - integer function get_group_number_of_fields(io_configuration, group_members, num_q_fields, namespace) + integer function get_group_number_of_fields(io_configuration, group_members, num_q_fields, num_tracers, namespace) type(io_configuration_type), intent(inout) :: io_configuration type(list_type) :: group_members - integer, intent(in) :: num_q_fields + integer, intent(in) :: num_q_fields, num_tracers character(len=STRING_LENGTH), intent(in) :: namespace type(iterator_type) :: iterator @@ -1093,20 +1475,21 @@ integer function get_group_number_of_fields(io_configuration, group_members, num do while (c_has_next(iterator)) field_name=c_next_string(iterator) get_group_number_of_fields=get_group_number_of_fields+get_field_number_of_fields(io_configuration, field_name, namespace, & - num_q_fields) + num_q_fields, num_tracers) end do end function get_group_number_of_fields - !> Retrieves the number of fields that make up this field, if it is a Q field then it will be split into many subfields + !> Retrieves the number of fields that make up this field, if it is a Q or tracer field then it will be split into many subfields !! hence it is not a simple 1-1 mapping !! @param io_configuration The IO server configuration !! @param field_name The name of the field !! @param num_q_fields The number of Q fields + !! @param num_tracers The number of tracer fields !! @returns The number of fields that make up this field - integer function get_field_number_of_fields(io_configuration, field_name, field_namespace, num_q_fields) + integer function get_field_number_of_fields(io_configuration, field_name, field_namespace, num_q_fields, num_tracers) type(io_configuration_type), intent(inout) :: io_configuration - character(len=STRING_LENGTH), intent(in) :: field_name, field_namespace - integer, intent(in) :: num_q_fields + character(len=*), intent(in) :: field_name, field_namespace + integer, intent(in) :: num_q_fields, num_tracers type(io_configuration_field_type) :: prognostic_field_configuration type(io_configuration_data_definition_type) :: prognostic_containing_data_defn @@ -1117,6 +1500,9 @@ integer function get_field_number_of_fields(io_configuration, field_name, field_ if (diagnostic_field_configuration%dim_size_defns(diagnostic_field_configuration%dimensions) .eq. "qfields") then get_field_number_of_fields=num_q_fields return + else if (diagnostic_field_configuration%dim_size_defns(diagnostic_field_configuration%dimensions) .eq. "tfields") then + get_field_number_of_fields=num_tracers + return end if end if get_field_number_of_fields=1 @@ -1126,6 +1512,9 @@ integer function get_field_number_of_fields(io_configuration, field_name, field_ if (prognostic_field_configuration%dim_size_defns(prognostic_field_configuration%dimensions) .eq. "qfields") then get_field_number_of_fields=num_q_fields return + else if (prognostic_field_configuration%dim_size_defns(prognostic_field_configuration%dimensions) .eq. "tfields") then + get_field_number_of_fields=num_tracers + return end if end if get_field_number_of_fields=1 @@ -1167,7 +1556,8 @@ integer function add_group_of_fields_to_writer_entry(io_configuration, writer_en end do end function add_group_of_fields_to_writer_entry - !> Adds a field to the writer entry, this will split the Q fields. However at initialisation we don't know what the Q + !> Adds a field to the writer entry, this will split the Q and tracer fields. + !! However at initialisation we don't know what the Q and tracer !! fields are called, hence place a marker which will be replaced later on !! @param io_configuration The IO server configuration !! @param writer_entry_index Index of the writer entry that we are dealing with @@ -1175,7 +1565,7 @@ end function add_group_of_fields_to_writer_entry !! @param my_facet_index The current field index in this internal module representation of the structure !! @param field_name The name of the field that we are constructing !! @param writer_field_names The field names in the writer (for duplication checking) - !! @param duplicate_field_names Duplicate field names in the wrier, for duplication checking + !! @param duplicate_field_names Duplicate field names in the writer, for duplication checking !! @param diagnostic_generation_frequency Generation frequency of the diagnostics !! @returns Location for next field to be written to integer function add_field_to_writer_entry(io_configuration, writer_entry_index, io_config_facet_index, & @@ -1186,11 +1576,12 @@ integer function add_field_to_writer_entry(io_configuration, writer_entry_index, type(hashset_type), intent(inout) :: writer_field_names, duplicate_field_names type(hashmap_type), intent(inout) :: diagnostic_generation_frequency - integer :: i, number_q_fields, tot_size + integer :: i, number_q_fields, number_tracers, tot_size type(io_configuration_field_type) :: prognostic_field_configuration type(io_configuration_data_definition_type) :: prognostic_containing_data_defn type(io_configuration_diagnostic_field_type) :: diagnostic_field_configuration type(collective_q_field_representation_type), pointer :: collective_q_field + type(collective_tracer_representation_type), pointer :: collective_tracer class(*), pointer :: generic if (get_diagnostic_field_configuration(io_configuration, field_name, field_namespace, diagnostic_field_configuration)) then @@ -1209,6 +1600,20 @@ integer function add_field_to_writer_entry(io_configuration, writer_entry_index, call c_put_integer(q_field_splits, field_name, tot_size) add_field_to_writer_entry=number_q_fields return + else if (diagnostic_field_configuration%dim_size_defns(diagnostic_field_configuration%dimensions) .eq. "tfields") then + number_tracers=c_get_integer(io_configuration%dimension_sizing, "tfields") + do i=1, number_tracers + call add_specific_field_to_writer_entry(io_configuration, writer_entry_index, io_config_facet_index, & + my_facet_index+i, trim(field_name)//"_udef"//trim(conv_to_string(i)), field_namespace, writer_field_names, & + duplicate_field_names, c_get_integer(diagnostic_generation_frequency, field_name), diagnostic_field_configuration) + end do + tot_size=1 + do i=1, writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dimensions + tot_size=tot_size*writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%actual_dim_size(i) + end do + call c_put_integer(tracer_splits, field_name, tot_size) + add_field_to_writer_entry=number_tracers + return end if end if call add_specific_field_to_writer_entry(io_configuration, writer_entry_index, io_config_facet_index, & @@ -1231,7 +1636,8 @@ integer function add_field_to_writer_entry(io_configuration, writer_entry_index, allocate(collective_q_field%dimensions(& writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dimensions)) do i=1, writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dimensions - if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dim_size_defns(i)) == "z") then + if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dim_size_defns(i)) == "z" .or. & + trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dim_size_defns(i)) == "zn" ) then collective_q_field%dimensions(i)=1 else if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_q_fields)%dim_size_defns(i)) & == "y") then @@ -1253,6 +1659,43 @@ integer function add_field_to_writer_entry(io_configuration, writer_entry_index, call c_add_string(q_field_names, field_name) add_field_to_writer_entry=number_q_fields return + else if (prognostic_field_configuration%dim_size_defns(prognostic_field_configuration%dimensions) .eq. "tfields") then + number_tracers=c_get_integer(io_configuration%dimension_sizing, "tfields") + do i=1, number_tracers + + call add_specific_field_to_writer_entry(io_configuration, writer_entry_index, io_config_facet_index, & + my_facet_index+i, trim(field_name)//"_udef"//trim(conv_to_string(i)), field_namespace, writer_field_names, & + duplicate_field_names, prognostic_containing_data_defn%frequency, & + prognostic_field_configuration=prognostic_field_configuration) + end do + if (prognostic_field_configuration%collective) then + allocate(collective_tracer) + allocate(collective_tracer%dimensions(& + writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dimensions)) + do i=1, writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dimensions + if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dim_size_defns(i)) == "z" .or. & + trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dim_size_defns(i)) == "zn" ) then + collective_tracer%dimensions(i)=1 + else if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dim_size_defns(i)) & + == "y") then + collective_tracer%dimensions(i)=2 + else if (trim(writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dim_size_defns(i)) & + == "x") then + collective_tracer%dimensions(i)=3 + end if + end do + generic=>collective_tracer + call c_put_generic(collective_tracer_dims, field_name, generic, .false.) + else + tot_size=1 + do i=1, writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%dimensions + tot_size=tot_size*writer_entries(writer_entry_index)%contents(my_facet_index+number_tracers)%actual_dim_size(i) + end do + call c_put_integer(tracer_splits, field_name, tot_size) + end if + call c_add_string(tracer_names, field_name) + add_field_to_writer_entry=number_tracers + return end if end if call add_specific_field_to_writer_entry(io_configuration, writer_entry_index, io_config_facet_index, & @@ -1317,7 +1760,9 @@ subroutine add_specific_field_to_writer_entry(io_configuration, writer_entry_ind writer_entries(writer_entry_index)%contents(my_facet_index)%output_frequency=& io_configuration%file_writers(writer_entry_index)%contents(io_config_facet_index)%output_time_frequency writer_entries(writer_entry_index)%contents(my_facet_index)%previous_write_time=0.0 - writer_entries(writer_entry_index)%contents(my_facet_index)%previous_tracked_write_point=0.0 + writer_entries(writer_entry_index)%contents(my_facet_index)%previous_tracked_write_point = & + real(model_initial_time) & + - mod(real(model_initial_time), writer_entries(writer_entry_index)%contents(my_facet_index)%output_frequency) writer_entries(writer_entry_index)%contents(my_facet_index)%duplicate_field_name=.false. writer_entries(writer_entry_index)%contents(my_facet_index)%pending_to_write=.false. writer_entries(writer_entry_index)%contents(my_facet_index)%enabled=.false. @@ -1369,11 +1814,34 @@ subroutine add_specific_field_to_writer_entry(io_configuration, writer_entry_ind writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions=& writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions-1 end if + if (writer_entries(writer_entry_index)%contents(my_facet_index)%dim_size_defns(& + writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions) .eq. "tfields") then + writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions=& + writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions-1 + end if do i=1, writer_entries(writer_entry_index)%contents(my_facet_index)%dimensions writer_entries(writer_entry_index)%contents(my_facet_index)%actual_dim_size(i)=c_get_integer(& io_configuration%dimension_sizing, writer_entries(writer_entry_index)%contents(my_facet_index)%dim_size_defns(i)) end do end if + + if (writer_entries(writer_entry_index)%contents(my_facet_index)%output_frequency .gt. 0) then + if ( time_basis) then + if (mod( nint(writer_entries(writer_entry_index)%contents(my_facet_index)%output_frequency), & + writer_entries(writer_entry_index)%contents(my_facet_index)%timestep_frequency) .ne. 0 ) then + call log_log(LOG_ERROR, "The output interval for '"//trim(field_name)// & + "' must be a multiple of its sampling interval when using time_basis=.true.") + end if + end if + if ( (time_basis .or. force_output_on_interval) & + .and. mod( nint(writer_entries(writer_entry_index)%write_time_frequency), & + nint(writer_entries(writer_entry_index)%contents(my_facet_index)%output_frequency)) .ne. 0 ) then + call log_log(LOG_ERROR, "The file writing interval for the file containing '"//trim(field_name)// & + "' must be a multiple of its output interval when using "//& + "time_basis=.true. or force_output_on_interval=.true.") + end if + end if + call check_thread_status(forthread_mutex_init(writer_entries(writer_entry_index)%contents(my_facet_index)%values_mutex, -1)) end subroutine add_specific_field_to_writer_entry diff --git a/io/src/writers/writer_field_manager.F90 b/io/src/writers/writer_field_manager.F90 index fb53045d..0f84d16e 100644 --- a/io/src/writers/writer_field_manager.F90 +++ b/io/src/writers/writer_field_manager.F90 @@ -17,8 +17,9 @@ module writer_field_manager_mod use io_server_client_mod, only : DOUBLE_DATA_TYPE, INTEGER_DATA_TYPE, STRING_DATA_TYPE, SCALAR_FIELD_TYPE, MAP_FIELD_TYPE use logging_mod, only : LOG_WARN, LOG_ERROR, log_log use writer_federator_mod, only : is_field_used_by_writer_federator, provide_ordered_field_to_writer_federator, & - is_field_split_on_q + is_field_split_on_q, is_field_split_on_tracer use writer_types_mod, only : prepare_to_serialise_data_values_type, serialise_data_values_type, unserialise_data_values_type + use optionsdatabase_mod, only : options_get_logical use io_server_client_mod, only : pack_scalar_field use io_server_state_writer_mod, only : set_serialise_write_field_manager_state use io_server_state_reader_mod, only : reactivate_writer_field_manager_state @@ -37,7 +38,7 @@ module writer_field_manager_mod type field_ordering_type type(hashmap_type) :: timestep_to_value - integer :: access_mutex, last_timestep_access, frequency + integer :: access_mutex, last_timestep_access, frequency, last_time_access end type field_ordering_type interface provide_field_to_writer_federator @@ -47,6 +48,8 @@ module writer_field_manager_mod integer, volatile :: field_lock type(hashmap_type), volatile :: field_orderings + logical :: time_basis + real(kind=DEFAULT_PRECISION) :: model_initial_time public initialise_writer_field_manager, finalise_writer_field_manager, provide_monc_data_to_writer_federator, & provide_field_to_writer_federator, is_write_field_manager_up_to_date @@ -55,9 +58,13 @@ module writer_field_manager_mod !> Initialises the writer field manager !! @param io_configuration Configuration of the IO server !! @param continuation_run Whether or not this is a continuation run - subroutine initialise_writer_field_manager(io_configuration, continuation_run) + subroutine initialise_writer_field_manager(io_configuration, continuation_run, reconfig_initial_time) type(io_configuration_type), intent(inout) :: io_configuration logical, intent(in) :: continuation_run + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time + + model_initial_time = reconfig_initial_time + time_basis = options_get_logical(io_configuration%options_database,"time_basis") call check_thread_status(forthread_rwlock_init(field_lock, -1)) call set_serialise_write_field_manager_state(serialise_field_manager_state, prepare_to_serialise_field_manager_state, & @@ -135,7 +142,8 @@ subroutine provide_monc_data_to_writer_federator(io_configuration, source, data_ field_name=io_configuration%data_definitions(data_id)%fields(i)%name field_namespace=io_configuration%data_definitions(data_id)%fields(i)%namespace if (is_field_present(io_configuration, source, data_id, field_name) .and. & - (is_field_used_by_writer_federator(field_name, field_namespace) .or. is_field_split_on_q(field_name))) then + (is_field_used_by_writer_federator(field_name, field_namespace) .or. & + is_field_split_on_q(field_name) .or. is_field_split_on_tracer(field_name))) then monc_value=get_value_from_monc_data(io_configuration, source, data_id, data_dump, field_name, field_namespace) call provide_field_to_writer_federator_src(io_configuration, field_name, field_namespace, monc_value, timestep, time, & io_configuration%data_definitions(data_id)%frequency, source, terminated_case) @@ -167,6 +175,7 @@ function get_value_from_monc_data(io_configuration, source, data_id, data_dump, integer :: field_data_type, field_field_type, i integer, dimension(:), allocatable :: int_values + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: real_values call get_type_of_field(io_configuration%data_definitions(data_id)%fields, field_name, field_namespace, & field_field_type, field_data_type) @@ -175,8 +184,13 @@ function get_value_from_monc_data(io_configuration, source, data_id, data_dump, end if if (field_data_type == DOUBLE_DATA_TYPE) then - get_value_from_monc_data%values=get_array_double_from_monc(io_configuration, source, data_id, data_dump, field_name) + real_values=get_array_double_from_monc(io_configuration, source, data_id, data_dump, field_name) + allocate(get_value_from_monc_data%values(size(real_values))) + do i=1,size(real_values) + get_value_from_monc_data%values(i)=real_values(i) + end do get_value_from_monc_data%data_type=DOUBLE_DATA_TYPE + deallocate(real_values) else if (field_data_type == INTEGER_DATA_TYPE) then get_value_from_monc_data%data_type=DOUBLE_DATA_TYPE int_values=get_array_integer_from_monc(io_configuration, source, data_id, data_dump, field_name) @@ -285,7 +299,7 @@ subroutine provide_field_to_writer_federator_src(io_configuration, field_name, f type(field_ordering_type), pointer :: field_ordering class(*), pointer :: generic - logical :: this_is_termination + logical :: this_is_termination, ready_to_provide if (present(terminated_case)) then this_is_termination=terminated_case @@ -294,15 +308,29 @@ subroutine provide_field_to_writer_federator_src(io_configuration, field_name, f end if field_ordering=>get_or_add_field_ordering(field_name, field_namespace, frequency, source) + + if (time_basis) then + ready_to_provide = (nint(time) == field_ordering%last_time_access + frequency) + else + ready_to_provide = (timestep == field_ordering%last_timestep_access + frequency) + end if + call check_thread_status(forthread_mutex_lock(field_ordering%access_mutex)) - if (timestep == field_ordering%last_timestep_access + frequency .or. this_is_termination) then - if (.not. this_is_termination) field_ordering%last_timestep_access=timestep + if (ready_to_provide .or. this_is_termination) then + if (.not. this_is_termination) then + field_ordering%last_timestep_access=timestep + field_ordering%last_time_access=nint(time) + end if call provide_ordered_field_to_writer_federator(io_configuration, field_name, field_namespace, & field_values, timestep, time, source) - if (allocated(field_values%values)) deallocate(field_values%values) + if (allocated(field_values%values)) deallocate(field_values%values) else generic=>generate_value_container(field_name, field_namespace, field_values, timestep, time, frequency, source) - call c_put_generic(field_ordering%timestep_to_value, conv_to_string(timestep), generic, .false.) + if (time_basis) then + call c_put_generic(field_ordering%timestep_to_value, conv_to_string(nint(time)), generic, .false.) + else + call c_put_generic(field_ordering%timestep_to_value, conv_to_string(timestep), generic, .false.) + end if end if call process_queued_items(io_configuration, field_ordering) call check_thread_status(forthread_mutex_unlock(field_ordering%access_mutex)) @@ -320,11 +348,16 @@ subroutine process_queued_items(io_configuration, field_ordering) type(field_ordering_value_type), pointer :: field_ordering_value_at_timestep do while (.not. c_is_empty(field_ordering%timestep_to_value)) - next_timestep=field_ordering%last_timestep_access + field_ordering%frequency + if (time_basis) then + next_timestep=field_ordering%last_time_access + field_ordering%frequency + else + next_timestep=field_ordering%last_timestep_access + field_ordering%frequency + end if if (c_contains(field_ordering%timestep_to_value, conv_to_string(next_timestep))) then field_ordering_value_at_timestep=>get_field_ordering_value_at_timestep(field_ordering%timestep_to_value, next_timestep) call c_remove(field_ordering%timestep_to_value, conv_to_string(next_timestep)) - field_ordering%last_timestep_access=next_timestep + field_ordering%last_timestep_access=field_ordering_value_at_timestep%timestep + field_ordering%last_time_access=nint(field_ordering_value_at_timestep%time) call provide_ordered_field_to_writer_federator(io_configuration, field_ordering_value_at_timestep%field_name, & field_ordering_value_at_timestep%field_namespace, field_ordering_value_at_timestep%field_values, & field_ordering_value_at_timestep%timestep, field_ordering_value_at_timestep%time, & @@ -415,6 +448,10 @@ function get_or_add_field_ordering(field_name, field_namespace, frequency, sourc if (.not. associated(get_or_add_field_ordering)) then allocate(get_or_add_field_ordering) get_or_add_field_ordering%last_timestep_access=0 + get_or_add_field_ordering%last_time_access = merge( & + nint(model_initial_time - mod(real(model_initial_time),real(frequency))), & + 0, & + frequency .gt. 0 ) get_or_add_field_ordering%frequency=frequency call check_thread_status(forthread_mutex_init(get_or_add_field_ordering%access_mutex, -1)) generic=>get_or_add_field_ordering @@ -579,6 +616,7 @@ subroutine serialise_specific_field_ordering(specific_field_ordering, byte_data, class(*), pointer :: generic current_data_point=pack_scalar_field(byte_data, current_data_point, specific_field_ordering%last_timestep_access) + current_data_point=pack_scalar_field(byte_data, current_data_point, specific_field_ordering%last_time_access) current_data_point=pack_scalar_field(byte_data, current_data_point, specific_field_ordering%frequency) current_data_point=pack_scalar_field(byte_data, current_data_point, c_size(specific_field_ordering%timestep_to_value)) @@ -620,6 +658,7 @@ function unserialise_specific_field_ordering(byte_data) current_data_point=1 unserialise_specific_field_ordering%last_timestep_access=unpack_scalar_integer_from_bytedata(byte_data, current_data_point) + unserialise_specific_field_ordering%last_time_access=unpack_scalar_integer_from_bytedata(byte_data, current_data_point) unserialise_specific_field_ordering%frequency=unpack_scalar_integer_from_bytedata(byte_data, current_data_point) number_of_values=unpack_scalar_integer_from_bytedata(byte_data, current_data_point) diff --git a/io/src/writers/writer_types.F90 b/io/src/writers/writer_types.F90 index 60b8aa0e..bf77d700 100644 --- a/io/src/writers/writer_types.F90 +++ b/io/src/writers/writer_types.F90 @@ -18,13 +18,15 @@ module writer_types_mod abstract interface !> Time manipulation interface which is implemented by the instantaneous and time averaged manipulations - type(data_values_type) function perform_time_manipulation(instant_values, output_frequency, field_name, timestep, time) + type(data_values_type) function perform_time_manipulation(instant_values, output_frequency, field_name, timestep, & + time, time_basis) import DEFAULT_PRECISION, data_values_type real(kind=DEFAULT_PRECISION), dimension(:), intent(in) :: instant_values real, intent(in) :: output_frequency real(kind=DEFAULT_PRECISION), intent(in) :: time character(len=*), intent(in) :: field_name integer, intent(in) :: timestep + logical, intent(in) :: time_basis end function perform_time_manipulation logical function is_field_ready_to_write(latest_time, output_frequency, write_time, latest_timestep, write_timestep) @@ -76,10 +78,12 @@ end function is_field_ready_to_write type writer_type character(len=STRING_LENGTH) :: filename, title type(writer_field_type), dimension(:), allocatable :: contents - integer :: trigger_and_write_mutex, write_timestep, previous_write_timestep, num_fields_to_write, & - num_fields_to_write_mutex, pending_writes_mutex, write_timestep_frequency, latest_pending_write_timestep + integer :: trigger_and_write_mutex, write_timestep, previous_write_timestep, num_fields_to_write, & + num_fields_to_write_mutex, pending_writes_mutex, write_timestep_frequency, latest_pending_write_timestep, & + write_precision real :: write_time_frequency, previous_write_time, latest_pending_write_time, write_time, defined_write_time - logical :: write_on_model_time, contains_io_status_dump, write_on_terminate, include_in_io_state_write + logical :: write_on_model_time, contains_io_status_dump, write_on_terminate, include_in_io_state_write, & + time_basis_override type(queue_type) :: pending_writes end type writer_type @@ -88,6 +92,11 @@ end function is_field_ready_to_write integer, dimension(:), allocatable :: dimensions end type collective_q_field_representation_type + !< Represents the dimension information associated with a tracer field that is written collectively + type collective_tracer_representation_type + integer, dimension(:), allocatable :: dimensions + end type collective_tracer_representation_type + type netcdf_diagnostics_timeseries_type integer :: netcdf_dim_id, netcdf_var_id, num_entries real :: last_write_point @@ -104,7 +113,8 @@ end function is_field_ready_to_write end type netcdf_diagnostics_type public writer_type, writer_field_type, write_field_collective_values_type, pending_write_type, & - perform_time_manipulation, collective_q_field_representation_type, netcdf_diagnostics_timeseries_type, & + perform_time_manipulation, collective_q_field_representation_type, collective_tracer_representation_type, & + netcdf_diagnostics_timeseries_type, & netcdf_diagnostics_type, serialise_writer_type, unserialise_writer_type, serialise_data_values_type, & unserialise_data_values_type, write_field_collective_descriptor_type, write_field_collective_monc_info_type, & prepare_to_serialise_data_values_type, prepare_to_serialise_writer_type @@ -122,7 +132,6 @@ integer(kind=8) function prepare_to_serialise_writer_type(writer_to_serialise) (kind(writer_to_serialise%previous_write_time) * 4) + & c_size(writer_to_serialise%pending_writes) * (kind(writer_to_serialise%write_timestep) + & kind(writer_to_serialise%previous_write_time)) - call check_thread_status(forthread_mutex_lock(writer_to_serialise%num_fields_to_write_mutex)) if (size(writer_to_serialise%contents) .gt. 0) then diff --git a/misc/continuation.sh b/misc/continuation.sh index 814d262d..76a3fef6 100644 --- a/misc/continuation.sh +++ b/misc/continuation.sh @@ -1,29 +1,29 @@ determine_if_finished() { - terminated_run=0 - local search_line=`grep "Model run complete due to model time" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $9 }'` - echo "Terminating chain run as MONC has exceeded termination time, model time is $mtime seconds" - terminated_run=1 - else - local search_line=`grep "messages file containing termination command" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $15 }'` - echo "Terminating chain run as MONC was instructed to finish, model time is $mtime seconds" - terminated_run=1 - else - local search_line=`grep "timestep completion" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $12 }'` - echo "Terminating chain run as MONC exceeded timestep limit, model time is $mtime seconds" - terminated_run=1 - fi - fi - fi + terminated_run=0 + local search_line=`grep "Model run complete due to model time" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $9 }'` + echo "Terminating chain run as MONC has exceeded termination time, model time is $mtime seconds" + terminated_run=1 + else + local search_line=`grep "messages file containing termination command" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $15 }'` + echo "Terminating chain run as MONC was instructed to finish, model time is $mtime seconds" + terminated_run=1 + else + local search_line=`grep "timestep completion" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $12 }'` + echo "Terminating chain run as MONC exceeded timestep limit, model time is $mtime seconds" + terminated_run=1 + fi + fi + fi } RUN_MONC_CONFIG=0 @@ -31,58 +31,106 @@ RUN_MONC_CP=0 outputid=0 run_monc() { - if [ ! -f $MONC_EXEC ]; then - echo "Error - executable $MONC_EXEC does not exist" - exit - fi - if [ ! -z "$crun" ] && [ $crun -ge $MAX_CONTINUATION_RUNS ]; then - echo "This has been run $crun times which exceeds your configured maximum number of runs" - exit - fi - - local output_filename=`ls -rt1 $STDOUT_DIR/output_$RUN_NAME* 2> /dev/null | tail -1` - local checkpoint_filename=`ls -rt1 $CP_DIR/$RUN_NAME*.nc 2> /dev/null | tail -1` - - if [ ! -z "$output_filename" ] && [ ! -z "$checkpoint_filename" ]; then - determine_if_finished $output_filename - if [ $terminated_run -eq 0 ]; then - outputid=`sed 's/.*_//' <<< "$output_filename"` - if [ -z "$crun" ] || [ $crun -ne $outputid ]; then - if [ -z "$cpfile" ] || [ "$cpfile" != "$checkpoint_filename" ]; then - RUN_MONC_CP=1 - else - echo "Not running MONC as the latest checkpoint file is the same that the previous run executed with" - exit - fi - else - echo "Not running MONC as there is no new output from the previous run, there was probably a submission error" - exit - fi - fi - else - if [ -z "$crun" ]; then - RUN_MONC_CONFIG=1 - else - echo "Error, this is configured as a continuation run but output and/or checkpoint file not found, check your script parameters" - exit - fi - fi - - if [ $RUN_MONC_CONFIG -eq 1 ] || [ $RUN_MONC_CP -eq 1 ]; then - export OMP_NUM_THREADS=1 - export MPICH_MAX_THREAD_SAFETY=multiple - - local submittedId=$(qsub -W depend=afterany:$PBS_JOBID -v crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME) - - ((outputid++)) - local outputfn=$STDOUT_DIR"/output_"$RUN_NAME$outputid - - if [ $RUN_MONC_CONFIG -eq 1 ]; then - echo "Start MONC with configuration file $config" - eval 'aprun -B $MONC_EXEC --config=$TESTCASE &> $outputfn' - else - echo "Restarting MONC with checkpoint file $checkpoint_filename" - eval 'aprun -B $MONC_EXEC --checkpoint=$checkpoint_filename &> $outputfn' - fi + + # Check for executable + if [ ! -f $MONC_EXEC ]; then + echo "Error - executable $MONC_EXEC does not exist" + exit + fi + + # Check crun limit + if [ ! -z "$crun" ] && [ $crun -ge $MAX_CONTINUATION_RUNS ]; then + echo "This has been run $crun times which exceeds your configured maximum number of runs" + exit + fi + + # Check contents of directories to determine what to submit + local output_filename=`ls -rt1 $STDOUT_DIR/output_$RUN_NAME* 2> /dev/null | tail -1` + local checkpoint_filename=`ls -rt1 $CP_DIR/$RUN_NAME*.nc 2> /dev/null | tail -1` + + # Action on BOTH file types present + if [ ! -z "$output_filename" ] && [ ! -z "$checkpoint_filename" ]; then + determine_if_finished $output_filename + if [ $terminated_run -eq 0 ]; then + outputid=`sed 's/.*_//' <<< "$output_filename"` + if [ -z "$crun" ] || [ $crun -ne $outputid ]; then + # Check whether present checkpoint matches that previously used ($cpfile is saved) + if [ -z "$cpfile" ] || [ "$cpfile" != "$checkpoint_filename" ]; then + RUN_MONC_CP=1 + else + echo "Not running MONC as the latest checkpoint file is the same that the previous run executed with" + exit + fi + else + echo "Not running MONC as there is no new output from the previous run, there was probably a submission error" + exit + fi + fi + elif [ ! -z "$checkpoint_filename" ] && [ -z "$crun" ] && [ -z "$cpfile" ]; then + RUN_MONC_CONFIG=2 + else + if [ -z "$crun" ]; then + RUN_MONC_CONFIG=1 + else + echo "Error, this is configured as a continuation run but output and/or checkpoint file not found, check your script parameters" + exit + fi + fi + + if [ $RUN_MONC_CONFIG -ge 1 ] || [ $RUN_MONC_CP -eq 1 ]; then + export OMP_NUM_THREADS=1 + export MPICH_MAX_THREAD_SAFETY=multiple + + # Configure submission based on local machine scheduler + # pbs + if [ -x "$(command -v qsub)" ] ; then + local submittedId=$(qsub -W depend=afterany:$PBS_JOBID -v crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME) + local jobId=$PBS_JOBID + local jobName=$PBS_JOBNAME + local cmd="aprun -B" + + # Slurm + elif [ -x "$(command -v sbatch)" ] ; then + local submittedId=$(sbatch --parsable --dependency=afterany:$SLURM_JOB_ID --export=crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME) + local jobId=$SLURM_JOB_ID + local jobName=$SLURM_JOB_NAME + sb_flags='--unbuffered --cpu-bind=cores --distribution=block:block --hint=nomultithread' + local cmd="srun $sb_flags" + else + echo "Error. Unknown batch submission protocol." + exit + fi + + # Increment the stdout suffix + ((outputid++)) + local outputfn=$STDOUT_DIR"/output_"$RUN_NAME$outputid + + # Write job information to stdout + echo "This cycle is controlled by:$SUBMISSION_SCRIPT_NAME" > $outputfn + echo "This cycle job:$jobId:$jobName" >> $outputfn + echo "Next cycle job:$submittedId" >> $outputfn + echo "" >> $outputfn + + echo "" + + + # Cold start + if [ $RUN_MONC_CONFIG -eq 1 ]; then + echo "Start MONC with configuration file $TESTCASE" + eval '$cmd $MONC_EXEC --config=$TESTCASE >> $outputfn 2>&1' + + # Reconfiguration + elif [ $RUN_MONC_CONFIG -eq 2 ]; then + echo "Reconfigure MONC with configuration file:" + echo " $TESTCASE and its linked xml file." + echo "Starting from checkpoint file:" + echo " $checkpoint_filename" + eval '$cmd $MONC_EXEC --reconfig=$TESTCASE --checkpoint=$checkpoint_filename --retain_model_time=.false. >> $outputfn 2>&1' + + # Restart + else + echo "Restarting MONC with checkpoint file $checkpoint_filename" + eval '$cmd $MONC_EXEC --checkpoint=$checkpoint_filename >> $outputfn 2>&1' + fi fi } diff --git a/misc/trim_checkpoint.sh b/misc/trim_checkpoint.sh new file mode 100755 index 00000000..49df2003 --- /dev/null +++ b/misc/trim_checkpoint.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# ------------------------------------------------------------------------------------- # +# Routine to remove stored diagnostic data (serialised fields) and configuration +# information from checkpoints. +# Good for saving space (if the eliminated data is not needed). +# Good for creating tidy reconfiguration starter checkpoints. +# +# Script tested on Monsoon. +# +# Prerequisites: +# nco module available +# script expected to be run from directory containing checkpoint file to be trimmed +# Input: +# checkpoint file name from working directory +# Output: +# trimmed file written to working directory +# +# Example usage: +# host:.../checkpoint_files> ../misc/trim_checkpoint.sh RCE_dump_7950.nc +# RESULT: RCE_dump_trimmed_7950.nc +# ------------------------------------------------------------------------------------- # + + +# Load nco +#module load nco # (available on JASMIN) +module load nco/4.6.7-netcdf_4.4.1.1.3 # better, available on Monsoon + +# Receive input +data=$1 # checkpoint file name from an old run + +# Create trimmed checkpoint name +stamp=`echo $data | rev | cut -f 2 -d '.' | cut -f 1 -d '_' | rev` +ndata=${data/$stamp/trimmed_$stamp} + +# Report +echo "Trimming $data to $ndata" + +# Set up variable exclusion list (those not to be overwritten) + # The configuration fields +excluded=io_configuration,options_database + # The serial terms (not always the same/present, so handle on fly) +serial=`ncks -m $data | grep 'type' | cut -f 1 -d ':' | grep 'serialised_'` +for snc in $serial +do + excluded=$snc,$excluded +done + +# Report +echo "Excluding ${excluded}" + +# (-A)ppend all terms e(-x)cept the (-v)ariables in the $excluded list +# +ncks -A -x -v $excluded $data $ndata #> quiet ; rm quiet + +# Make sure it has a 'created' global attribute +cdate=`date` +ncatted -h -a created,global,c,c,"${cdate}" $ndata + +# All done +echo "Good to go!" + +exit 0 diff --git a/model_core/src/communication/communicationtypes.F90 b/model_core/src/communication/communicationtypes.F90 index 913ddff4..291bf178 100644 --- a/model_core/src/communication/communicationtypes.F90 +++ b/model_core/src/communication/communicationtypes.F90 @@ -3,7 +3,7 @@ !! multiple areas of the code base which might otherwise result in circular dependencies if !! they lived in a specific module of functionality module communication_types_mod - use datadefn_mod, only : DEFAULT_PRECISION + use datadefn_mod, only : DEFAULT_PRECISION, SINGLE_PRECISION implicit none #ifndef TEST_MODE @@ -13,7 +13,11 @@ module communication_types_mod ! A wrapper type (as F doesn't allow an array of 3D arrays) to point to field data type field_data_wrapper_type real(kind=DEFAULT_PRECISION), dimension(:,:,:), pointer :: data - end type field_data_wrapper_type + end type field_data_wrapper_type + + type field_data_wrapper_single_prec_type + real(kind=SINGLE_PRECISION), dimension(:,:,:), pointer :: data + end type field_data_wrapper_single_prec_type !> Describes the neighbours of a process in a specific dimension and contains the !! communication buffers associated with these @@ -24,6 +28,15 @@ module communication_types_mod recv_halo_buffer, send_corner_buffer, recv_corner_buffer end type neighbour_description_type +!> Describes the neighbours of a process in a specific dimension and contains the + !! communication buffers associated with these + type neighbour_description_single_prec_type + integer :: pid, halo_pages=0, halo_corners=0, dimension, recv_size, send_size, & + recv_corner_size, send_corner_size + real(kind=SINGLE_PRECISION), dimension(:,:,:), allocatable :: send_halo_buffer, & + recv_halo_buffer, send_corner_buffer, recv_corner_buffer + end type neighbour_description_single_prec_type + !> Maintains the state of a halo swap and contains buffers, neighbours etc type halo_communication_type integer :: number_distinct_neighbours, fields_per_cell, halo_depth, cell_match(3,4) @@ -32,5 +45,14 @@ module communication_types_mod logical :: initialised = .false., swap_in_progress=.false., involve_corners=.false. end type halo_communication_type - public halo_communication_type, neighbour_description_type, field_data_wrapper_type + type halo_communication_single_prec_type + integer :: number_distinct_neighbours, fields_per_cell, halo_depth, cell_match(3,4) + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + integer, dimension(:), allocatable :: send_requests, recv_requests + logical :: initialised = .false., swap_in_progress=.false., involve_corners=.false. + end type halo_communication_single_prec_type + + public halo_communication_type, neighbour_description_type, field_data_wrapper_type, & + field_data_wrapper_single_prec_type, neighbour_description_single_prec_type, & + halo_communication_single_prec_type end module communication_types_mod diff --git a/model_core/src/communication/halocommunication.F90 b/model_core/src/communication/halocommunication.F90 index 65e39927..34fdd645 100644 --- a/model_core/src/communication/halocommunication.F90 +++ b/model_core/src/communication/halocommunication.F90 @@ -298,7 +298,7 @@ subroutine init_halo_communication(current_state, get_fields_per_halo_cell, halo integer, intent(in) :: halo_depth type(halo_communication_type), intent(out) :: halo_state - integer :: number_comm_requests + integer :: number_comm_requests, i halo_state%involve_corners = involve_corners halo_state%halo_depth = halo_depth @@ -306,8 +306,13 @@ subroutine init_halo_communication(current_state, get_fields_per_halo_cell, halo current_state%local_grid, current_state%parallel%my_rank, involve_corners) if (halo_state%number_distinct_neighbours .gt. 0) then allocate(halo_state%halo_swap_neighbours(halo_state%number_distinct_neighbours)) - halo_state%halo_swap_neighbours = populate_halo_swap_neighbours(current_state%local_grid, & - current_state%parallel%my_rank, halo_state%number_distinct_neighbours, involve_corners) + call populate_halo_swap_neighbours(current_state%local_grid, & + current_state%parallel%my_rank, halo_state%number_distinct_neighbours, & + involve_corners, halo_state) + do i=1, halo_state%number_distinct_neighbours + halo_state%halo_swap_neighbours%halo_corners =0 + halo_state%halo_swap_neighbours%halo_pages =0 + end do call deduce_halo_pages_per_neighbour(current_state, halo_state%halo_swap_neighbours, & halo_state%number_distinct_neighbours, get_fields_per_halo_cell, & halo_state%fields_per_cell, halo_depth) @@ -643,14 +648,13 @@ end function get_number_of_processes_involved_in_communication !! @param my_rank My global PID !! @param number_distinct_neighbours The number of distinct neighbours that I have !! @param include_corners Whether to include corners or not - function populate_halo_swap_neighbours(local_grid, my_rank, number_distinct_neighbours, & - involve_corners) + subroutine populate_halo_swap_neighbours(local_grid, my_rank, number_distinct_neighbours, & + involve_corners, halo_swap_state) type(local_grid_type), intent(inout) :: local_grid integer, intent(in) :: my_rank, number_distinct_neighbours logical, intent(in) :: involve_corners + type(halo_communication_type), intent(inout) :: halo_swap_state - type(neighbour_description_type), dimension(number_distinct_neighbours) :: & - populate_halo_swap_neighbours integer :: i, j, current_pid_location, temp_neighbour_pids(merge(16, 8, involve_corners)) current_pid_location=0 @@ -661,9 +665,9 @@ function populate_halo_swap_neighbours(local_grid, my_rank, number_distinct_neig has_pid_already_been_seen(temp_neighbour_pids, & local_grid%neighbours(i,j))) then current_pid_location=current_pid_location+1 - populate_halo_swap_neighbours(current_pid_location)%pid=local_grid%neighbours(i,j) + halo_swap_state%halo_swap_neighbours(current_pid_location)%pid=local_grid%neighbours(i,j) temp_neighbour_pids(current_pid_location)=local_grid%neighbours(i,j) - populate_halo_swap_neighbours(current_pid_location)%dimension=i + halo_swap_state%halo_swap_neighbours(current_pid_location)%dimension=i end if end do end do @@ -675,15 +679,15 @@ function populate_halo_swap_neighbours(local_grid, my_rank, number_distinct_neig has_pid_already_been_seen(temp_neighbour_pids, & local_grid%corner_neighbours(j,i))) then current_pid_location=current_pid_location+1 - populate_halo_swap_neighbours(current_pid_location)%pid = & + halo_swap_state%halo_swap_neighbours(current_pid_location)%pid = & local_grid%corner_neighbours(j,i) temp_neighbour_pids(current_pid_location)=local_grid%corner_neighbours(j,i) - populate_halo_swap_neighbours(current_pid_location)%dimension=0 + halo_swap_state%halo_swap_neighbours(current_pid_location)%dimension=0 end if end do end do end if - end function populate_halo_swap_neighbours + end subroutine populate_halo_swap_neighbours !> Deduces the number of halo pages per neighbour halo swap and places this information in the appropriate data !! structures. We call a "page" of data the contiguous data of a field that we are going to send, such as @@ -760,6 +764,19 @@ subroutine allocate_halo_buffers_for_each_neighbour(local_grid, number_distinct_ halo_swap_neighbours integer :: i + + !! AH - test code to see if this corrects the allocation error on restart with gcc 7 + !! do i=1,number_distinct_neighbours + !! if (allocated(halo_swap_neighbours(i)%send_halo_buffer)) & + !! deallocate(halo_swap_neighbours(i)%send_halo_buffer) + !! if (allocated(halo_swap_neighbours(i)%recv_halo_buffer)) & + !! deallocate(halo_swap_neighbours(i)%recv_halo_buffer) + !! if (allocated(halo_swap_neighbours(i)%send_corner_buffer)) & + !! deallocate(halo_swap_neighbours(i)%send_corner_buffer) + !! if (allocated(halo_swap_neighbours(i)%recv_corner_buffer)) & + !! deallocate(halo_swap_neighbours(i)%recv_corner_buffer) + !! end do + !! do i=1,number_distinct_neighbours if (halo_swap_neighbours(i)%halo_pages .gt. 0) then diff --git a/model_core/src/communication/halocommunication_single_prec.F90 b/model_core/src/communication/halocommunication_single_prec.F90 new file mode 100644 index 00000000..db4bd100 --- /dev/null +++ b/model_core/src/communication/halocommunication_single_prec.F90 @@ -0,0 +1,1248 @@ +!> Provides the mechanism for halo swapping. This module contains the functionality required to +!! determine what messages get sent where, pack data up en mass, send and receive from +!! neighbouring processes and unpack into the appropriate data locations. There is also some +!! functionality to help local copying of data to corresponding locations. The idea is that the +!! caller will determine the policy (i.e. exactly what fields are to be communicated) through +!! procedure arguments and this mechanism can be used again and again. It implements bulk sending +!! of all field data in one large message to reduce communication overhead +module halo_communication_single_mod + use datadefn_mod, only : SINGLE_PRECISION, SINGLE_PRECISION_TYPE + use communication_types_mod, only : halo_communication_single_prec_type, & + neighbour_description_single_prec_type, & + field_data_wrapper_single_prec_type + use prognostics_mod, only : prognostic_field_type + use state_mod, only : model_state_type + use conversions_mod, only : conv_to_string + use logging_mod, only : LOG_ERROR, LOG_WARN, log_log,LOG_DEBUG + use grids_mod, only : local_grid_type, X_INDEX, Y_INDEX, Z_INDEX + use mpi, only : MPI_REQUEST_NULL, MPI_STATUSES_IGNORE + implicit none + +#ifndef TEST_MODE + private +#endif + + !> Procedure interfaces used to determine the policy (i.e. the fields) of halo swapping and + ! data copying + interface + integer function get_fields_per_halo_cell_proc_interface(current_state) + import model_state_type + type(model_state_type), intent(inout) :: current_state + end function get_fields_per_halo_cell_proc_interface + + subroutine copy_fields_to_halo_buffer_proc_interface(current_state, neighbour_description, & + dim, source_index, & + pid_location, current_page, source_data) + import model_state_type, neighbour_description_single_prec_type, field_data_wrapper_single_prec_type + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, pid_location, source_index + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + end subroutine copy_fields_to_halo_buffer_proc_interface + + subroutine copy_corners_to_halo_buffer_proc_interface(current_state, neighbour_description, & + dim, x_source_index, & + y_source_index, pid_location, current_page, source_data) + import model_state_type, neighbour_description_single_prec_type, field_data_wrapper_single_prec_type + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, pid_location, x_source_index, y_source_index + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + end subroutine copy_corners_to_halo_buffer_proc_interface + + subroutine copy_halo_buffer_to_field_proc_interface(current_state, neighbour_description, & + dim, target_index, & + neighbour_location, current_page, source_data) + import model_state_type, neighbour_description_single_prec_type, field_data_wrapper_single_prec_type + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: dim, target_index, neighbour_location + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + end subroutine copy_halo_buffer_to_field_proc_interface + + subroutine copy_halo_buffer_to_corner_proc_interface(current_state, neighbour_description,& + corner_loc, x_target_index, & + y_target_index, neighbour_location, current_page, source_data) + import model_state_type, neighbour_description_single_prec_type, field_data_wrapper_single_prec_type + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: corner_loc, x_target_index, y_target_index, neighbour_location + integer, intent(inout) :: current_page(:) + type(neighbour_description_single_prec_type), intent(inout) :: neighbour_description + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + end subroutine copy_halo_buffer_to_corner_proc_interface + + subroutine perform_local_data_copy_proc_interface(current_state, halo_depth, & + involve_corners, source_data) + import model_state_type, field_data_wrapper_single_prec_type + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: halo_depth + logical, intent(in) :: involve_corners + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + end subroutine perform_local_data_copy_proc_interface + end interface + + public copy_buffer_to_field, copy_field_to_buffer, copy_corner_to_buffer, & + copy_buffer_to_corner, perform_local_data_copy_for_field, init_halo_communication, & + finalise_halo_communication, initiate_nonblocking_halo_swap, & + complete_nonblocking_halo_swap, blocking_halo_swap, get_single_field_per_halo_cell +contains + + !> Performs the entire halo swap operation, this is simply a wrapper around the nonblocking + !! initiate and complete procedures and saves the programmer from calling these directly if + !! they do not wish to interleave any computation + !! @param current_state The current model state + !! @param halo_swap_state The halo swapping state + !! @param copy_to_halo_buffer Procedure pointer which is called to copy the data into the + !! halo send buffer + !! @param perform_local_data_copy Procedure pointer which performs local data copying + !! (where the neighbour is the local process) + !! @param copy_from_halo_buffer Procedure pointer which copies received data from the halo + !! buffer into the field + !! @param copy_corners_to_halo_buffer Optional procedure pointer which copies data in corners + !! to the halo send buffer + !! @param copy_from_halo_buffer_to_corner Optional procedure pointer which copies + !! received data into halo corners + !! @param source_data Optional source data which is read from into send buffers and written + !! into by receieve buffers + subroutine blocking_halo_swap(current_state, halo_swap_state, copy_to_halo_buffer, & + perform_local_data_copy, copy_from_halo_buffer, copy_corners_to_halo_buffer, & + copy_from_halo_buffer_to_corner, source_data) + + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + procedure(copy_fields_to_halo_buffer_proc_interface) :: copy_to_halo_buffer + procedure(copy_halo_buffer_to_field_proc_interface) :: copy_from_halo_buffer + procedure(perform_local_data_copy_proc_interface) :: perform_local_data_copy + procedure(copy_corners_to_halo_buffer_proc_interface), optional :: & + copy_corners_to_halo_buffer + procedure(copy_halo_buffer_to_corner_proc_interface), optional :: & + copy_from_halo_buffer_to_corner + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + if ((present(copy_corners_to_halo_buffer) .and. .not. & + present(copy_from_halo_buffer_to_corner)) .or. & + (.not. present(copy_corners_to_halo_buffer) .and. & + present(copy_from_halo_buffer_to_corner))) then + call log_log(LOG_ERROR, "You must either provie no or both corner optional arguments to the halo swap function") + end if + + if (present(source_data)) then + if (present(copy_corners_to_halo_buffer)) then + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, & + copy_to_halo_buffer, copy_corners_to_halo_buffer, source_data) + else + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, & + copy_to_halo_buffer, source_data=source_data) + end if + if (present(copy_from_halo_buffer_to_corner)) then + call complete_nonblocking_halo_swap(current_state, halo_swap_state, & + perform_local_data_copy, copy_from_halo_buffer, copy_from_halo_buffer_to_corner, & + source_data) + else + call complete_nonblocking_halo_swap(current_state, halo_swap_state, & + perform_local_data_copy, copy_from_halo_buffer, source_data=source_data) + end if + else + if (present(copy_corners_to_halo_buffer)) then + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, copy_to_halo_buffer,& + copy_corners_to_halo_buffer) + else + call initiate_nonblocking_halo_swap(current_state, halo_swap_state, copy_to_halo_buffer) + end if + if (present(copy_from_halo_buffer_to_corner)) then + call complete_nonblocking_halo_swap(current_state, halo_swap_state, & + perform_local_data_copy, & + copy_from_halo_buffer, copy_from_halo_buffer_to_corner) + else + call complete_nonblocking_halo_swap(current_state, halo_swap_state, & + perform_local_data_copy, copy_from_halo_buffer) + end if + end if + end subroutine blocking_halo_swap + + !> This completes a nonblocking halo swap and it is only during this call that the data fields + !! themselves are modified. This will perform local data copying, wait for all outstanding + !! receives to complete, copy the received buffer data into the data and then wait for all + !! outstanding sends to complete + !! @param current_state The current model state + !! @param halo_swap_state The halo swapping state + !! @param perform_local_data_copy Procedure pointer which performs local data copying (where + !! the neighbour is the local process) + !! @param copy_from_halo_buffer Procedure pointer which copies received data from the halo + !! buffer into the field + !! @param copy_from_halo_buffer_to_corner Optional procedure pointer which copies halo data + !! into field corners + !! @param source_data Optional source data which is read from into send buffers and written + !! into by receieve buffers + subroutine complete_nonblocking_halo_swap(current_state, halo_swap_state, & + perform_local_data_copy, copy_from_halo_buffer, copy_from_halo_buffer_to_corner, & + source_data) + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + procedure(copy_halo_buffer_to_field_proc_interface) :: copy_from_halo_buffer + procedure(perform_local_data_copy_proc_interface) :: perform_local_data_copy + procedure(copy_halo_buffer_to_corner_proc_interface), optional :: & + copy_from_halo_buffer_to_corner + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + integer :: ierr + + if ((present(copy_from_halo_buffer_to_corner) .and. .not. halo_swap_state%involve_corners) & + .or. (.not. present(copy_from_halo_buffer_to_corner) .and. & + halo_swap_state%involve_corners)) then + call log_log(LOG_WARN, "Inconsistent halo swap corner state and corner subroutine call arguments") + end if + + if (present(source_data)) then + call perform_local_data_copy(current_state, halo_swap_state%halo_depth, & + halo_swap_state%involve_corners, source_data) + else + call perform_local_data_copy(current_state, halo_swap_state%halo_depth, & + halo_swap_state%involve_corners) + end if + if (halo_swap_state%number_distinct_neighbours .gt. 0) then + call mpi_waitall(size(halo_swap_state%recv_requests), halo_swap_state%recv_requests, & + MPI_STATUSES_IGNORE, ierr) + if (present(source_data)) then + if (halo_swap_state%involve_corners .and. present(copy_from_halo_buffer_to_corner)) then + call copy_buffer_data_for_prognostics(current_state, halo_swap_state, & + copy_from_halo_buffer, copy_from_halo_buffer_to_corner, source_data) + else + call copy_buffer_data_for_prognostics(current_state, halo_swap_state, & + copy_from_halo_buffer, source_data=source_data) + end if + else + if (halo_swap_state%involve_corners .and. present(copy_from_halo_buffer_to_corner)) then + call copy_buffer_data_for_prognostics(current_state, halo_swap_state, & + copy_from_halo_buffer, copy_from_halo_buffer_to_corner) + else + call copy_buffer_data_for_prognostics(current_state, halo_swap_state, & + copy_from_halo_buffer) + end if + end if + call mpi_waitall(size(halo_swap_state%send_requests), halo_swap_state%send_requests, & + MPI_STATUSES_IGNORE, ierr) + end if + halo_swap_state%swap_in_progress=.false. + end subroutine complete_nonblocking_halo_swap + + !> Initiates a non blocking halo swap, this registers the receive requests, copies data into + !! the send buffer and then registers send requests for these. As far as this call is + !! concerned, the data is immutable - no modifications will take place to it until the + !! matching completion call is made + !! @param current_state The current model state + !! @param halo_swap_state The halo swapping state + !! @param copy_to_halo_buffer Procedure pointer which is called to copy the data into the halo + !! send buffer + !! @param copy_corners_to_halo_buffer Optional procedure pointer which copies field corners + !! into halo buffer + !! @param source_data Optional source data which is read from into send buffers and written + !! into by receieve buffers + subroutine initiate_nonblocking_halo_swap(current_state, halo_swap_state, copy_to_halo_buffer, & + copy_corners_to_halo_buffer, source_data) + + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + procedure(copy_fields_to_halo_buffer_proc_interface) :: copy_to_halo_buffer + procedure(copy_corners_to_halo_buffer_proc_interface), optional :: copy_corners_to_halo_buffer + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + halo_swap_state%swap_in_progress = .true. + if (halo_swap_state%number_distinct_neighbours .gt. 0) then + halo_swap_state%send_requests(:) = MPI_REQUEST_NULL + halo_swap_state%recv_requests(:) = MPI_REQUEST_NULL + + if ((present(copy_corners_to_halo_buffer) .and. .not. halo_swap_state%involve_corners) & + .or. (.not. present(copy_corners_to_halo_buffer) .and. & + halo_swap_state%involve_corners)) then + call log_log(LOG_WARN, "Inconsistent halo swap corner state and corner subroutine call arguments") + end if + + ! we call recv before send + call recv_all_halos(current_state, halo_swap_state) + + if (present(source_data)) then + if (halo_swap_state%involve_corners .and. present(copy_corners_to_halo_buffer)) then + call send_all_halos(current_state, halo_swap_state, copy_to_halo_buffer, & + copy_corners_to_halo_buffer, source_data) + else + call send_all_halos(current_state, halo_swap_state, copy_to_halo_buffer, & + source_data=source_data) + end if + else + if (halo_swap_state%involve_corners .and. present(copy_corners_to_halo_buffer)) then + call send_all_halos(current_state, halo_swap_state, copy_to_halo_buffer, & + copy_corners_to_halo_buffer) + else + call send_all_halos(current_state, halo_swap_state, copy_to_halo_buffer) + end if + end if + end if + end subroutine initiate_nonblocking_halo_swap + + !> Initialises a halo swapping state, by determining the neighbours, size of data in each swap + !! and allocating the required memory - which are communication buffers and request handles. + !! All this information is placed into the returned state + !! @param current_state The current model state + !! @param get_fields_per_halo_cell Procedure pointer to the procedure which determines how many + !! fields per halo cell there are + !! @param involve_corners Whether this involves corners or not + !! @returns A halo swapping state which can be used for halo swapping operations + subroutine init_halo_communication(current_state, get_fields_per_halo_cell, halo_state, & + halo_depth, involve_corners) + type(model_state_type), intent(inout) :: current_state + procedure(get_fields_per_halo_cell_proc_interface) :: get_fields_per_halo_cell + logical, intent(in) :: involve_corners + integer, intent(in) :: halo_depth + type(halo_communication_single_prec_type), intent(out) :: halo_state + + integer :: number_comm_requests + + halo_state%involve_corners = involve_corners + halo_state%halo_depth = halo_depth + halo_state%number_distinct_neighbours = get_number_of_processes_involved_in_communication(& + current_state%local_grid, current_state%parallel%my_rank, involve_corners) + if (halo_state%number_distinct_neighbours .gt. 0) then + allocate(halo_state%halo_swap_neighbours(halo_state%number_distinct_neighbours)) + halo_state%halo_swap_neighbours = populate_halo_swap_neighbours(current_state%local_grid, & + current_state%parallel%my_rank, halo_state%number_distinct_neighbours, involve_corners) + call deduce_halo_pages_per_neighbour(current_state, halo_state%halo_swap_neighbours, & + halo_state%number_distinct_neighbours, get_fields_per_halo_cell, & + halo_state%fields_per_cell, halo_depth) + if (involve_corners) call deduce_halo_corners_per_neighbour(current_state, & + halo_state%halo_swap_neighbours, & + halo_state%number_distinct_neighbours, halo_state%fields_per_cell) + call allocate_halo_buffers_for_each_neighbour(current_state%local_grid, & + halo_state%number_distinct_neighbours, & + halo_state%halo_swap_neighbours) + call determine_recv_and_send_sizes(current_state%local_grid, & + halo_state%halo_swap_neighbours, & + halo_state%number_distinct_neighbours, involve_corners) + call generate_recv_field_buffer_matches(current_state, halo_state%halo_depth, & + halo_state%cell_match) + + ! required for nonblocking MPI communcations + number_comm_requests = get_number_communication_requests(halo_state%halo_swap_neighbours, & + halo_state%number_distinct_neighbours) + allocate(halo_state%send_requests(number_comm_requests), & + halo_state%recv_requests(number_comm_requests)) + halo_state%send_requests(:) = MPI_REQUEST_NULL + halo_state%recv_requests(:) = MPI_REQUEST_NULL + end if + halo_state%initialised = .true. + end subroutine init_halo_communication + + !> Finalises the halo swap represented by the state by freeing up all the allocated memory + !! @param halo_swap_state State of the specific halo swap + subroutine finalise_halo_communication(halo_swap_state) + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + + integer :: i + + ! TODO - issue cancel of outstanding requests here + if (allocated(halo_swap_state%send_requests)) deallocate(halo_swap_state%send_requests) + if (allocated(halo_swap_state%recv_requests)) deallocate(halo_swap_state%recv_requests) + + do i=1,halo_swap_state%number_distinct_neighbours + if (allocated(halo_swap_state%halo_swap_neighbours(i)%send_halo_buffer)) & + deallocate(halo_swap_state%halo_swap_neighbours(i)%send_halo_buffer) + if (allocated(halo_swap_state%halo_swap_neighbours(i)%recv_halo_buffer)) & + deallocate(halo_swap_state%halo_swap_neighbours(i)%recv_halo_buffer) + end do + if (allocated(halo_swap_state%halo_swap_neighbours)) deallocate(halo_swap_state%halo_swap_neighbours) + halo_swap_state%initialised=.false. + end subroutine finalise_halo_communication + + !> Copies the received buffer for a specific field to the corresponding corner of that field + !! @param local_grid Description of the local grid + !! @param halo_buffer Raw halo buffer data + !! @param field_data Raw prognostic field data + !! @param corner_loc Location of the corner + !! @param x_target_index The X target index that we copy into + !! @param y_target_index The Y target index that we copy into + !! @param halo_page The halo page to read from + subroutine copy_buffer_to_corner(local_grid, halo_buffer, field_data, corner_loc, & + x_target_index, y_target_index, halo_page) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: corner_loc, x_target_index, y_target_index, halo_page + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: halo_buffer + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index, x_target_index)=halo_buffer(:,4,halo_page) + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + merge(y_target_index-1, y_target_index+1, corner_loc .lt. 3), x_target_index)=& + halo_buffer(:,3,halo_page) + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index, merge(x_target_index-1, x_target_index+1, corner_loc == 1 .or.& + corner_loc == 3))= halo_buffer(:,2,halo_page) + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + merge(y_target_index-1, y_target_index+1, corner_loc .lt. 3), & + merge(x_target_index-1, x_target_index+1, corner_loc == 1 .or.& + corner_loc == 3))= halo_buffer(:,1,halo_page) + end subroutine copy_buffer_to_corner + + !> Copies the received buffer for a specific field to the corresponding halo data of that + !! prognostic field + !! @param local_grid Description of the local grid + !! @param halo_buffer Raw halo buffer data + !! @param field_data Raw prognostic field data + !! @param dim The dimension to copy into + !! @param target_index The target index in the dimension that we copy into + !! @param halo_page The halo page to read from + subroutine copy_buffer_to_field(local_grid, halo_buffer, field_data, dim, target_index, & + halo_page) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: dim, target_index, halo_page + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: halo_buffer + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + + ! If the neighbours are the same then reverse our placement of the data due to wrapping + ! around and order of + ! messages being sent. This is not an issue if the neighbours are different + if (dim == X_INDEX) then + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + local_grid%local_domain_start_index(Y_INDEX):& + local_grid%local_domain_end_index(Y_INDEX), & + target_index) = halo_buffer(:,:,halo_page) + else + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX), target_index, & + local_grid%local_domain_start_index(X_INDEX):& + local_grid%local_domain_end_index(X_INDEX)) = & + halo_buffer(:,:,halo_page) + end if + end subroutine copy_buffer_to_field + + !> Copies prognostic field data to send buffer for specific field, dimension, halo cell + !! @param local_grid Description of the local grid + !! @param halo_buffer Raw halo_buffer data that is written to + !! @param field_data Raw prognostic field data that is read from + !! @param dim Dimension that we are reading from + !! @param source_index The index in the read dimension + !! @param halo_page The halo buffer page to write to + subroutine copy_field_to_buffer(local_grid, halo_buffer, field_data, dim, source_index, & + halo_page) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: dim, source_index, halo_page + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: halo_buffer + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + + if (dim == X_INDEX) then + halo_buffer(:,:,halo_page) = field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX), & + local_grid%local_domain_start_index(Y_INDEX):& + local_grid%local_domain_end_index(Y_INDEX), source_index) + else + halo_buffer(:,:,halo_page)=field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX), source_index, & + local_grid%local_domain_start_index(X_INDEX):& + local_grid%local_domain_end_index(X_INDEX)) + end if + end subroutine copy_field_to_buffer + + !> Copies prognostic field corner data to send buffer for specific field + !! @param local_grid Description of the local grid + !! @param halo_buffer Raw halo_buffer data that is written to + !! @param field_data Raw prognostic field data that is read from + !! @param corner_loc Location of the corner + !! @param x_source_index The X index in the read dimension + !! @param y_source_index The Y index in the read dimension + !! @param halo_page The halo buffer page to write to + subroutine copy_corner_to_buffer(local_grid, halo_buffer, field_data, corner_loc, & + x_source_index, y_source_index, halo_page) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: corner_loc, x_source_index, y_source_index, halo_page + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: halo_buffer + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + + !! TODO: hardcoded size of the corners + halo_buffer(:,1,halo_page) = field_data(:,y_source_index,x_source_index) + halo_buffer(:,2,halo_page) = field_data(:, merge(y_source_index-1, y_source_index+1, & + corner_loc .lt. 3), x_source_index) + halo_buffer(:,3,halo_page) = field_data(:, y_source_index, & + merge(x_source_index-1,x_source_index+1, corner_loc == 1 .or. corner_loc == 3)) + halo_buffer(:,4,halo_page) = field_data(:, merge(y_source_index-1, y_source_index+1, & + corner_loc .lt. 3), merge(x_source_index-1,x_source_index+1, corner_loc == 1 .or. & + corner_loc == 3)) + end subroutine copy_corner_to_buffer + + !> Will perform a a local copy for the halo data of a field + !! @param field_data The field data to perform the copy for + !! @param local_grid Local grid information + !! @param my_rank My process id + subroutine perform_local_data_copy_for_field(field_data, local_grid, my_rank, halo_depth, & + involve_corners) + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: my_rank, halo_depth + logical, intent(in) :: involve_corners + + call perform_local_data_copy_for_dimension(Y_INDEX, my_rank, halo_depth, local_grid, & + field_data) + call perform_local_data_copy_for_dimension(X_INDEX, my_rank, halo_depth, local_grid, & + field_data) + if (involve_corners) call perform_local_data_copy_for_corners(my_rank, local_grid, field_data) + end subroutine perform_local_data_copy_for_field + + !-------------------------------------------------------------------------- + ! Private procedures acting as helpers + !-------------------------------------------------------------------------- + + !> Determines the overall number of communication requests, which is made up of normal halo + !! swaps and potentially corner + !! swaps too if that is enabled + !! @param halo_swap_neighbours Neighbouring halo swap state + !! @param number_distinct_neighbours The number of distinct neighours that I will swap with + !! @returns The number of communication requests + integer function get_number_communication_requests(halo_swap_neighbours, & + number_distinct_neighbours) + integer, intent(in) :: number_distinct_neighbours + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + + integer :: i + + get_number_communication_requests=0 + do i=1, number_distinct_neighbours + if (halo_swap_neighbours(i)%recv_size .gt. 0) & + get_number_communication_requests=get_number_communication_requests+1 + if (halo_swap_neighbours(i)%recv_corner_size .gt. 0)& + get_number_communication_requests=get_number_communication_requests+1 + end do + end function get_number_communication_requests + + !> Determines the amount (in elements) of data that each neighbour will be sent and I will + !! receive from in a halo swap + !! @param local_grid The local grid + !! @param halo_swap_neighbours Structure describing state of halo swap neighbours + !! @param number_distinct_neighbours The number of distinct neighbours I swap with + !! @param involve_corners Whether or not to involve corners in a halo swap + subroutine determine_recv_and_send_sizes(local_grid, halo_swap_neighbours, & + number_distinct_neighbours, involve_corners) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: number_distinct_neighbours + logical, intent(in) :: involve_corners + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + + integer :: i, normal_size, corner_size + + do i=1, number_distinct_neighbours + if (halo_swap_neighbours(i)%halo_pages .gt. 0) then + if (halo_swap_neighbours(i)%dimension == 0) then + call log_log(LOG_ERROR, "Halo swapping with neighbour needed but dimension is 0 which suggests corner only") + end if + normal_size=local_grid%size(Z_INDEX) * merge(local_grid%size(Y_INDEX), local_grid%size(X_INDEX), & + halo_swap_neighbours(i)%dimension==X_INDEX)*halo_swap_neighbours(i)%halo_pages + else + normal_size=0 + end if + halo_swap_neighbours(i)%recv_size=normal_size + halo_swap_neighbours(i)%send_size=normal_size + if (involve_corners .and. halo_swap_neighbours(i)%halo_corners .gt. 0) then + ! For the moment assume both halos are the same neighbour - hence the 4, otherwise should call determine_halo_corner_element_sizes + corner_size=local_grid%size(Z_INDEX)*4*halo_swap_neighbours(i)%halo_corners + else + corner_size=0 + end if + halo_swap_neighbours(i)%recv_corner_size=corner_size + halo_swap_neighbours(i)%send_corner_size=corner_size + end do + end subroutine determine_recv_and_send_sizes + + !> Determine the halo corner size in elements + !! @param local_grid The local grid + !! @param pid The process id that this calculation is based upon + !! @reterns The number of elements involved in a specific corner halo swap + integer function determine_halo_corner_size(local_grid) + type(local_grid_type), intent(inout) :: local_grid + + determine_halo_corner_size = local_grid%halo_size(X_INDEX)*local_grid%halo_size(Y_INDEX)*& + local_grid%size(Z_INDEX) + end function determine_halo_corner_size + + !> For a specific process id this determines the number of halo swap corner elements to involve + !! in a communication + !! @param local_grid The local grid + !! @param pid The process id that this calculation is based upon + !! @reterns The number of elements involved in a specific corner halo swap + integer function determine_halo_corner_element_sizes(local_grid, pid) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: pid + + integer :: i,j + determine_halo_corner_element_sizes=0 + + do i=1,size(local_grid%corner_neighbours, 2) + do j=1,size(local_grid%corner_neighbours, 1) + if (local_grid%corner_neighbours(j,i) == pid) then + determine_halo_corner_element_sizes=& + determine_halo_corner_element_sizes+local_grid%size(Z_INDEX) + ! If second halo then there are 3 corner elements, therefore add extra two to this + if (i==2) determine_halo_corner_element_sizes=determine_halo_corner_element_sizes+& + local_grid%size(Z_INDEX)*2 + end if + end do + end do + end function determine_halo_corner_element_sizes + + !> Deduces the number of distinct neighbours that will be involved in a halo swap. This + !! information is used to then allocate the appropriate amount of memory to store the + !! neighbour halo swapping data structure + !! @param local_grid Description of the local grid + !! @param my_rank My global PID + !! @param include_corners Whether to include corners or not + integer function get_number_of_processes_involved_in_communication(local_grid, my_rank, & + include_corners) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: my_rank + logical, intent(in) :: include_corners + + integer :: i, j, temp_neighbour_pids(merge(16, 8, include_corners)) + + temp_neighbour_pids(:)=-1 + get_number_of_processes_involved_in_communication=0 + do i=2,3 + do j=1,4 + if (local_grid%neighbours(i,j) .ne. my_rank .and. .not. & + has_pid_already_been_seen(temp_neighbour_pids, & + local_grid%neighbours(i,j))) then + get_number_of_processes_involved_in_communication = & + get_number_of_processes_involved_in_communication+1 + temp_neighbour_pids(get_number_of_processes_involved_in_communication) = & + local_grid%neighbours(i,j) + end if + end do + end do + + if (include_corners) then + do i=1,size(local_grid%corner_neighbours, 2) + do j=1,size(local_grid%corner_neighbours, 1) + if (local_grid%corner_neighbours(j,i) .ne. my_rank .and. .not. & + has_pid_already_been_seen(temp_neighbour_pids, & + local_grid%corner_neighbours(j,i))) then + get_number_of_processes_involved_in_communication = & + get_number_of_processes_involved_in_communication+1 + temp_neighbour_pids(get_number_of_processes_involved_in_communication) = & + local_grid%corner_neighbours(j,i) + end if + end do + end do + end if + end function get_number_of_processes_involved_in_communication + + !> Will populate the halo swap neighbour data strutures with appropriate neighbour + !! pid and dimension numbers + !! @param local_grid Description of the local grid + !! @param my_rank My global PID + !! @param number_distinct_neighbours The number of distinct neighbours that I have + !! @param include_corners Whether to include corners or not + function populate_halo_swap_neighbours(local_grid, my_rank, number_distinct_neighbours, & + involve_corners) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: my_rank, number_distinct_neighbours + logical, intent(in) :: involve_corners + + type(neighbour_description_single_prec_type), dimension(number_distinct_neighbours) :: & + populate_halo_swap_neighbours + integer :: i, j, current_pid_location, temp_neighbour_pids(merge(16, 8, involve_corners)) + + current_pid_location=0 + temp_neighbour_pids(:)=-1 + do i=2,3 + do j=1,4 + if (local_grid%neighbours(i,j) .ne. my_rank .and. .not. & + has_pid_already_been_seen(temp_neighbour_pids, & + local_grid%neighbours(i,j))) then + current_pid_location=current_pid_location+1 + populate_halo_swap_neighbours(current_pid_location)%pid=local_grid%neighbours(i,j) + temp_neighbour_pids(current_pid_location)=local_grid%neighbours(i,j) + populate_halo_swap_neighbours(current_pid_location)%dimension=i + end if + end do + end do + + if (involve_corners) then + do i=1,size(local_grid%corner_neighbours, 2) + do j=1,size(local_grid%corner_neighbours, 1) + if (local_grid%corner_neighbours(j,i) .ne. my_rank .and. .not. & + has_pid_already_been_seen(temp_neighbour_pids, & + local_grid%corner_neighbours(j,i))) then + current_pid_location=current_pid_location+1 + populate_halo_swap_neighbours(current_pid_location)%pid = & + local_grid%corner_neighbours(j,i) + temp_neighbour_pids(current_pid_location)=local_grid%corner_neighbours(j,i) + populate_halo_swap_neighbours(current_pid_location)%dimension=0 + end if + end do + end do + end if + end function populate_halo_swap_neighbours + + !> Deduces the number of halo pages per neighbour halo swap and places this information in the appropriate data + !! structures. We call a "page" of data the contiguous data of a field that we are going to send, such as + !! halo 1 of w, halo 1 of zw and halo 2 of w (assuming these go to the same neighbour as 1) + !! @param current_state The current model state + !! @param halo_swap_neighbours My neighbouring PIDs + !! @param number_distinct_neighbours The number of distinct neighbours that I have + !! @param get_fields_per_halo_cell Procedure pointer to get the number of fields per halo cell + !! @param fields_per_cell The number of fields per cell is written into here + subroutine deduce_halo_pages_per_neighbour(current_state, halo_swap_neighbours, & + number_distinct_neighbours, get_fields_per_halo_cell, fields_per_cell, halo_depth) + type(model_state_type), intent(inout) :: current_state + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + integer, intent(in) :: number_distinct_neighbours, halo_depth + procedure(get_fields_per_halo_cell_proc_interface) :: get_fields_per_halo_cell + integer, intent(out) :: fields_per_cell + + integer :: i, j, pid_location, halo_start, halo_end + + fields_per_cell = get_fields_per_halo_cell(current_state) + halo_start = merge(2, 1, halo_depth==1) + halo_end = merge(3, 4, halo_depth==1) + + ! i moves in x and y. z is 1 + do i = 2, 3 + do j = halo_start, halo_end + if (current_state%parallel%my_rank .ne. current_state%local_grid%neighbours(i,j)) then + pid_location = get_pid_neighbour_location(halo_swap_neighbours, & + current_state%local_grid%neighbours(i,j), number_distinct_neighbours) + halo_swap_neighbours(pid_location)%halo_pages = & + halo_swap_neighbours(pid_location)%halo_pages + fields_per_cell + end if + end do + end do + end subroutine deduce_halo_pages_per_neighbour + + !> Determines the number of halo corners to swap between specific neighours, this is similar + !! to deducing the number of halo + !! pages per neighbour, only it is for corners + !! @param current_state The current model state + !! @param halo_swap_neighbours Description of neighbouring halo swap state + !! @param number_distinct_neighbours The number of distinct neighbours that I swap with + !! @param fields_per_cell The number of fields per cell is written into here + subroutine deduce_halo_corners_per_neighbour(current_state, halo_swap_neighbours, & + number_distinct_neighbours, fields_per_cell) + type(model_state_type), intent(inout) :: current_state + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + integer, intent(in) :: number_distinct_neighbours, fields_per_cell + + integer :: i, j, pid_location + ! i moves in x ,j in y + do i=1,size(current_state%local_grid%corner_neighbours, 2) + do j=1,size(current_state%local_grid%corner_neighbours, 1) + if (current_state%parallel%my_rank .ne. & + current_state%local_grid%corner_neighbours(j,i)) then + pid_location = get_pid_neighbour_location(halo_swap_neighbours, & + current_state%local_grid%corner_neighbours(j,i), number_distinct_neighbours) + halo_swap_neighbours(pid_location)%halo_corners = & + halo_swap_neighbours(pid_location)%halo_corners + fields_per_cell + end if + end do + end do + end subroutine deduce_halo_corners_per_neighbour + + !> Allocates the locally stored halo buffers (send and receive) for each neighbouring process + !! @param local_grid Description of the local grid + !! @param halo_swap_neighbours My neighbouring PIDs + !! @param number_distinct_neighbours The number of distinct neighbours that I have + subroutine allocate_halo_buffers_for_each_neighbour(local_grid, number_distinct_neighbours, & + halo_swap_neighbours) + type(local_grid_type), intent(inout) :: local_grid + integer, intent(in) :: number_distinct_neighbours + type(neighbour_description_single_prec_type), dimension(:), allocatable, intent(inout) :: & + halo_swap_neighbours + + integer :: i + + !! AH - test code to see if this corrects the allocation error on restart with gcc 7 + do i=1,number_distinct_neighbours + if (allocated(halo_swap_neighbours(i)%send_halo_buffer)) & + deallocate(halo_swap_neighbours(i)%send_halo_buffer) + if (allocated(halo_swap_neighbours(i)%recv_halo_buffer)) & + deallocate(halo_swap_neighbours(i)%recv_halo_buffer) + if (allocated(halo_swap_neighbours(i)%send_corner_buffer)) & + deallocate(halo_swap_neighbours(i)%send_corner_buffer) + if (allocated(halo_swap_neighbours(i)%recv_corner_buffer)) & + deallocate(halo_swap_neighbours(i)%recv_corner_buffer) + end do + !! + + do i=1,number_distinct_neighbours + if (halo_swap_neighbours(i)%halo_pages .gt. 0) then + !depending on the direction of the swapping, the send and recv buffer size would change + allocate(halo_swap_neighbours(i)%send_halo_buffer(local_grid%size(Z_INDEX), & + merge(local_grid%size(Y_INDEX), local_grid%size(X_INDEX), & + halo_swap_neighbours(i)%dimension==X_INDEX), halo_swap_neighbours(i)%halo_pages)) + allocate(halo_swap_neighbours(i)%recv_halo_buffer(local_grid%size(Z_INDEX), & + merge(local_grid%size(Y_INDEX), local_grid%size(X_INDEX), & + halo_swap_neighbours(i)%dimension==X_INDEX), halo_swap_neighbours(i)%halo_pages)) + end if + if (halo_swap_neighbours(i)%halo_corners .gt. 0) then + ! is 4 because of the 4 cells to swap since the halo_depth is 2(2 in x and 2 in y)?? + allocate(halo_swap_neighbours(i)%send_corner_buffer(local_grid%size(Z_INDEX), 4, & + halo_swap_neighbours(i)%halo_corners)) + allocate(halo_swap_neighbours(i)%recv_corner_buffer(local_grid%size(Z_INDEX), 4, & + halo_swap_neighbours(i)%halo_corners)) + end if + end do + end subroutine allocate_halo_buffers_for_each_neighbour + + !> Precalculates the received buffer to field halo cell matches for each dimension and called + !! from the initialisation stage + !! @param current_state The current model state + !! @param halo_depth The halo depth + !! @param cell_match The matching cells are written into here + subroutine generate_recv_field_buffer_matches(current_state, halo_depth, cell_match) + type(model_state_type), intent(inout) :: current_state + integer, intent(in) :: halo_depth + integer, intent(out) :: cell_match(:,:) + + logical, dimension(3) :: same_neighbours + integer :: i,j + + same_neighbours = retrieve_same_neighbour_information(current_state%local_grid) + + do i = 2,3 + if (halo_depth == 1) then + cell_match(i,1)=1 + cell_match(i,2)=merge(2, 3, .not. same_neighbours(i)) + cell_match(i,3)=merge(3, 2, .not. same_neighbours(i)) + cell_match(i,4)=4 + else + do j = 1, halo_depth + cell_match(i,j) = merge(j, j+halo_depth, .not. same_neighbours(i)) + cell_match(i,j+halo_depth) = merge(j+halo_depth, j, .not. same_neighbours(i)) + end do + ! cell_match(i,j) = merge(2, 4, .not. same_neighbours(i)) + ! cell_match(i,j) = merge(3, 1, .not. same_neighbours(i)) +! cell_match(i,j) = merge(4, 2, .not. same_neighbours(i)) + end if + end do + end subroutine generate_recv_field_buffer_matches + + !> Registers receive requests for all prognostic fields from the appropriate neighbouring + !! processes (that we have already deduced in the initialisation stage.) + !! @param current_state The current model state + !! @param halo_swap_state The halo swap state + subroutine recv_all_halos(current_state, halo_swap_state) + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + + integer :: i, request_counter, ierr + + request_counter = 1 + + do i = 1, halo_swap_state%number_distinct_neighbours + if (halo_swap_state%halo_swap_neighbours(i)%recv_size .gt. 0) then + call mpi_irecv(halo_swap_state%halo_swap_neighbours(i)%recv_halo_buffer, & + halo_swap_state%halo_swap_neighbours(i)%recv_size, SINGLE_PRECISION_TYPE, & + halo_swap_state%halo_swap_neighbours(i)%pid, 0, & + current_state%parallel%neighbour_comm, & + halo_swap_state%recv_requests(request_counter), ierr) + request_counter = request_counter + 1 + end if + if (halo_swap_state%halo_swap_neighbours(i)%recv_corner_size .gt. 0) then + call mpi_irecv(halo_swap_state%halo_swap_neighbours(i)%recv_corner_buffer, & + halo_swap_state%halo_swap_neighbours(i)%recv_corner_size, SINGLE_PRECISION_TYPE, & + halo_swap_state%halo_swap_neighbours(i)%pid, 0, & + current_state%parallel%neighbour_comm, & + halo_swap_state%recv_requests(request_counter), ierr) + request_counter = request_counter + 1 + end if + end do + end subroutine recv_all_halos + + !> Copies all applicable bits of the prognostics into a send buffer for each neighbour and + !! then issues asynchronous sends of this data + !! @param current_state The current model state + !! @param halo_swap_state The halo swap state + !! @param copy_fields_to_halo_buffer Procedure pointer to copy the data from the fields into + !! the send buffer + !! @param copy_corner_fields_to_halo_buffer Optional procedure pointer to copy corner fields + !! into halo send buffer + !! @param source_data Optional field data that can be copied from (passed to the user procedure) + subroutine send_all_halos(current_state, halo_swap_state, copy_fields_to_halo_buffer, & + copy_corner_fields_to_halo_buffer, source_data) + + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + procedure(copy_fields_to_halo_buffer_proc_interface) :: copy_fields_to_halo_buffer + procedure(copy_corners_to_halo_buffer_proc_interface), optional :: & + copy_corner_fields_to_halo_buffer + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + integer :: i, j, ierr,hstart, hend, pid_location, source_index, request_number, & + x_source_index, y_source_index, current_page(halo_swap_state%number_distinct_neighbours),& + halo_depth + ! halo_size(Y_INDEX) = halo_size(X_INDEX), just pick one + halo_depth = current_state%local_grid%halo_size(Y_INDEX) + current_page(:) = 1 + request_number = 1 + ! TODO: hardcoded to halodepth 1 or 2 + hstart = merge(2, 1, halo_swap_state%halo_depth==1) + hend = merge(3, halo_depth*2, halo_swap_state%halo_depth==1) + + do i=2, 3 + do j=hstart, hend + if (current_state%parallel%my_rank .ne. current_state%local_grid%neighbours(i,j)) then + + if (j==1) then + source_index = current_state%local_grid%local_domain_start_index(i) + else if (j==2) then + source_index = current_state%local_grid%local_domain_start_index(i) + & + merge(1, 0, halo_swap_state%halo_depth .ne. 1) + else if (j==3) then + source_index = current_state%local_grid%local_domain_end_index(i) - & + merge(1, 0, halo_swap_state%halo_depth .ne. 1) + else if (j==4) then + source_index = current_state%local_grid%local_domain_end_index(i) + end if + + pid_location = get_pid_neighbour_location(halo_swap_state%halo_swap_neighbours, & + current_state%local_grid%neighbours(i,j), & + halo_swap_state%number_distinct_neighbours) + + if (present(source_data)) then + call copy_fields_to_halo_buffer(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), i, source_index, & + pid_location, current_page, source_data) + else + call copy_fields_to_halo_buffer(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), i, source_index, & + pid_location, current_page) + end if + ! call log_log(LOG_DEBUG, "PID ="//trim(conv_to_String(& + !current_state%parallel%my_rank))//" source_index = "//& + ! trim(conv_to_string(source_index))//" PID location ="//trim(& + !conv_to_string(pid_location))//& + ! " i= "//trim(conv_to_string(i))//" j="//trim(conv_to_string(j))) + end if + end do + end do + + if (present(copy_corner_fields_to_halo_buffer)) then + current_page(:)=1 + do j = 1, size(current_state%local_grid%corner_neighbours, 1) + if (current_state%parallel%my_rank .ne. & + current_state%local_grid%corner_neighbours(j,1)) then + x_source_index = merge(current_state%local_grid%local_domain_start_index(X_INDEX)+1,& + current_state%local_grid%local_domain_end_index(X_INDEX)-1, j==1 .or. j==3) + y_source_index =merge(current_state%local_grid%local_domain_start_index(Y_INDEX)+1,& + current_state%local_grid%local_domain_end_index(Y_INDEX)-1, j==1 .or. j==2) + pid_location = get_pid_neighbour_location(halo_swap_state%halo_swap_neighbours, & + current_state%local_grid%corner_neighbours(j,1), & + halo_swap_state%number_distinct_neighbours) + if (present(source_data)) then + call copy_corner_fields_to_halo_buffer(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), j, & + x_source_index, y_source_index, pid_location, current_page, source_data) + else + call copy_corner_fields_to_halo_buffer(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), j, & + x_source_index, y_source_index, pid_location, current_page) + end if + end if + end do + end if + + do i=1,halo_swap_state%number_distinct_neighbours + if (halo_swap_state%halo_swap_neighbours(i)%send_size .gt. 0) then + call mpi_isend(halo_swap_state%halo_swap_neighbours(i)%send_halo_buffer, & + halo_swap_state%halo_swap_neighbours(i)%send_size, SINGLE_PRECISION_TYPE, & + halo_swap_state%halo_swap_neighbours(i)%pid, 0, & + current_state%parallel%neighbour_comm, & + halo_swap_state%send_requests(request_number), ierr) + request_number = request_number+1 + end if + if (halo_swap_state%halo_swap_neighbours(i)%send_corner_size .gt. 0) then + call mpi_isend(halo_swap_state%halo_swap_neighbours(i)%send_corner_buffer, & + halo_swap_state%halo_swap_neighbours(i)%send_corner_size, SINGLE_PRECISION_TYPE, & + halo_swap_state%halo_swap_neighbours(i)%pid, 0, & + current_state%parallel%neighbour_comm, & + halo_swap_state%send_requests(request_number), ierr) + request_number = request_number+1 + end if + end do + end subroutine send_all_halos + + !> Copies the received data (held in buffers) from neighbours into the correct halo location + !! in the prognostic fields + !! @param current_state The current model state + !! @param halo_swap_state The halo swapping state + !! @param copy_halo_buffer_to_field Procedure pointer which copies the halo buffer into the data field + !! @param copy_halo_buffer_to_corner Optional procedure pointer to copy halo buffer into field corners + !! @param source_data Optional source data which is read from into send buffers and written into by receieve buffers + subroutine copy_buffer_data_for_prognostics(current_state, halo_swap_state, copy_halo_buffer_to_field, & + copy_halo_buffer_to_corner, source_data) + type(model_state_type), intent(inout) :: current_state + type(halo_communication_single_prec_type), intent(inout) :: halo_swap_state + procedure(copy_halo_buffer_to_field_proc_interface) :: copy_halo_buffer_to_field + procedure(copy_halo_buffer_to_corner_proc_interface), optional :: copy_halo_buffer_to_corner + type(field_data_wrapper_single_prec_type), dimension(:), intent(in), optional :: source_data + + integer :: i, j, hstart, hend, pid_location, target_index, x_target_index, & + y_target_index, current_page(halo_swap_state%number_distinct_neighbours) + + hstart=merge(2, 1, halo_swap_state%halo_depth==1) + hend=merge(3, 4, halo_swap_state%halo_depth==1) + + current_page(:)=1 + do i=2, 3 + do j=hstart, hend + if (current_state%parallel%my_rank .ne. current_state%local_grid%neighbours(i,j)) then + if (j==halo_swap_state%cell_match(i, 1)) then + target_index=1 + else if (j==halo_swap_state%cell_match(i, 2)) then + target_index=2 + else if (j==halo_swap_state%cell_match(i, 3)) then + target_index=current_state%local_grid%local_domain_end_index(i)+1 + else if (j==halo_swap_state%cell_match(i, 4)) then + target_index=current_state%local_grid%local_domain_end_index(i)+2 + end if + pid_location=get_pid_neighbour_location(halo_swap_state%halo_swap_neighbours, & + current_state%local_grid%neighbours(i,j),& + halo_swap_state%number_distinct_neighbours) + if (present(source_data)) then + call copy_halo_buffer_to_field(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), i, target_index,& + pid_location, current_page, source_data) + else + call copy_halo_buffer_to_field(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), i, target_index,& + pid_location, current_page) + end if + end if + end do + end do + if (present(copy_halo_buffer_to_corner)) then + current_page(:)=1 + do j=size(current_state%local_grid%corner_neighbours, 1),1,-1 + if (current_state%parallel%my_rank .ne. & + current_state%local_grid%corner_neighbours(j,1)) then + x_target_index=merge(2, current_state%local_grid%local_domain_end_index(X_INDEX)+1,& + j==1 .or. j==3) + y_target_index=merge(2, current_state%local_grid%local_domain_end_index(Y_INDEX)+1, & + j==1 .or. j==2) + pid_location=get_pid_neighbour_location(halo_swap_state%halo_swap_neighbours, & + current_state%local_grid%corner_neighbours(j,1), & + halo_swap_state%number_distinct_neighbours) + if (present(source_data)) then + call copy_halo_buffer_to_corner(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), j, & + x_target_index, y_target_index, pid_location, current_page, source_data) + else + call copy_halo_buffer_to_corner(current_state, & + halo_swap_state%halo_swap_neighbours(pid_location), j, & + x_target_index, y_target_index, pid_location, current_page) + end if + end if + end do + end if + end subroutine copy_buffer_data_for_prognostics + + !> Performs a local data copy for corners when the neighbour is local (me) + !! @param my_rank My global rank + !! @param local_grid The local grid + !! @param field_data The field data top copy into + subroutine perform_local_data_copy_for_corners(my_rank, local_grid, field_data) + type(local_grid_type), intent(inout) :: local_grid + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + integer, intent(in) :: my_rank + + integer :: i, y_source_index, x_source_index, y_target_index, x_target_index + + do i=1,size(local_grid%corner_neighbours, 1) + if (my_rank .eq. local_grid%corner_neighbours(i,1)) then + if (i==1) then + y_source_index=local_grid%local_domain_end_index(Y_INDEX)-1 + x_source_index=local_grid%local_domain_end_index(X_INDEX)-1 + y_target_index=1 + x_target_index=1 + else if (i==2) then + y_source_index=local_grid%local_domain_end_index(Y_INDEX)-1 + x_source_index=local_grid%local_domain_start_index(X_INDEX) + y_target_index=1 + x_target_index=local_grid%local_domain_end_index(X_INDEX)+1 + else if (i==3) then + y_source_index=local_grid%local_domain_start_index(Y_INDEX) + x_source_index=local_grid%local_domain_end_index(X_INDEX)-1 + y_target_index=local_grid%local_domain_end_index(Y_INDEX)+1 + x_target_index=1 + else if (i==4) then + y_source_index=local_grid%local_domain_start_index(Y_INDEX) + x_source_index=local_grid%local_domain_start_index(X_INDEX) + y_target_index=local_grid%local_domain_end_index(Y_INDEX)+1 + x_target_index=local_grid%local_domain_end_index(X_INDEX)+1 + end if + + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index, x_target_index)=& + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),y_source_index, x_source_index) + + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index+1, x_target_index)=& + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),y_source_index+1, x_source_index) + + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index, x_target_index+1)=& + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),y_source_index, x_source_index+1) + + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + y_target_index+1, x_target_index+1)=& + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),y_source_index+1, x_source_index+1) + end if + end do + end subroutine perform_local_data_copy_for_corners + + !> Performs a local data copy for a specific dimension of a prognostic field + !! @param dim The dimension + !! @param my_rank My process Id + !! @param local_grid The local grid description + !! @param field_data The field data that we are going to copy from and to + subroutine perform_local_data_copy_for_dimension(dim, my_rank, halo_depth, local_grid, & + field_data) + type(local_grid_type), intent(inout) :: local_grid + real(kind=SINGLE_PRECISION), dimension(:,:,:), intent(inout) :: field_data + integer, intent(in) :: dim, my_rank, halo_depth + + integer i, target_index, source_index, hstart, hend + + hstart=merge(2,1, halo_depth==1) + hend=merge(3,4, halo_depth==1) + + do i=hstart, hend + if (local_grid%neighbours(dim,i) .eq. my_rank) then + if (i==1) then + target_index=1 + source_index=local_grid%local_domain_end_index(dim)-1 + else if (i==2) then + target_index=2 + source_index=local_grid%local_domain_end_index(dim) + else if (i==3) then + target_index=local_grid%local_domain_end_index(dim)+1 + source_index=local_grid%local_domain_start_index(dim) + else if (i==4) then + target_index=local_grid%local_domain_end_index(dim)+2 + source_index=local_grid%local_domain_start_index(dim)+1 + end if + if (dim == X_INDEX) then + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + local_grid%local_domain_start_index(Y_INDEX):& + local_grid%local_domain_end_index(Y_INDEX), target_index) = & + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + local_grid%local_domain_start_index(Y_INDEX):& + local_grid%local_domain_end_index(Y_INDEX), source_index) + else + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + target_index, local_grid%local_domain_start_index(X_INDEX):& + local_grid%local_domain_end_index(X_INDEX)) = & + field_data(local_grid%local_domain_start_index(Z_INDEX):& + local_grid%local_domain_end_index(Z_INDEX),& + source_index, local_grid%local_domain_start_index(X_INDEX):& + local_grid%local_domain_end_index(X_INDEX)) + end if + end if + end do + end subroutine perform_local_data_copy_for_dimension + + !> Retrieves whether we have the same neighbours for L and R halo swaps in each dimension + !! + !! This is because if we do then the data storage needs to be reversed - i.e. the first two + !! messages sent to this process are Left and the second two are Right, but due to wrapping + !! around, the L messages need to be put on the right halo and R messages on the left halo + !! @param neighbours The neighbouring processes in each dimension + function retrieve_same_neighbour_information(local_grid) + type(local_grid_type), intent(inout) :: local_grid +! integer, dimension(:,:), intent(in) :: neighbours + logical, dimension(3) :: retrieve_same_neighbour_information + + integer :: i, nd1, nd2 + + retrieve_same_neighbour_information=(/.true., .true., .true./) + + ! halo_size in X and Y are the same, therefore it does not matter which one we take + ! we multiply by 2 since there are 2 sides Up&Down or Left&Right + do i = 1,local_grid%halo_size(Y_INDEX)*2 + if (i==1) then + nd1=local_grid%neighbours(Y_INDEX,i) + nd2=local_grid%neighbours(X_INDEX,i) + else + if (local_grid%neighbours(Y_INDEX,i) .ne. nd1) & + retrieve_same_neighbour_information(Y_INDEX) = .false. + if (local_grid%neighbours(X_INDEX,i) .ne. nd2) & + retrieve_same_neighbour_information(X_INDEX) = .false. + end if + end do + end function retrieve_same_neighbour_information + + !> Returns whether or not a specific process id has already been "seen" by searching a list + !! of already seen process ids. + !! @param temp_neighbour_pids The process Ids already seen + !! @param pid The PID to search for + logical function has_pid_already_been_seen(temp_neighbour_pids, pid) + integer, intent(in) :: pid, temp_neighbour_pids(8) + + integer :: i + + has_pid_already_been_seen=.true. + do i=1,8 + if (temp_neighbour_pids(i) == pid) return + if (temp_neighbour_pids(i) == -1) then + has_pid_already_been_seen=.false. + return + end if + end do + has_pid_already_been_seen=.false. + end function has_pid_already_been_seen + + !> Given the process id of a neighbour this determines the location in the data structure + !! of corresponding data for that. Note that this is an O(n) operation so ideally call once + !! and reuse the results. If no process id is found then returns -1 + !! @param halo_swap_neighbours PIDs of the neighbouring processes to me + !! @param pid The process id to find + !! @param number_distinct_neighbours The number of distinct neighbours I have + integer function get_pid_neighbour_location(halo_swap_neighbours, pid, & + number_distinct_neighbours) + type(neighbour_description_single_prec_type), dimension(:), allocatable :: halo_swap_neighbours + integer, intent(in) :: pid, number_distinct_neighbours + + integer :: i + + do i=1, number_distinct_neighbours + if (halo_swap_neighbours(i)%pid == pid) then + get_pid_neighbour_location = i + return + end if + end do + ! Not found + get_pid_neighbour_location=-1 + end function get_pid_neighbour_location + + !> A very common function, which returns a single field per halo cell which is used to halo + !! swap just one field + !! @param current_state The current model state + integer function get_single_field_per_halo_cell(current_state) + type(model_state_type), intent(inout) :: current_state + + get_single_field_per_halo_cell=1 + end function get_single_field_per_halo_cell +end module halo_communication_single_mod diff --git a/model_core/src/components/monc_component.F90 b/model_core/src/components/monc_component.F90 index e426d04b..069498b9 100644 --- a/model_core/src/components/monc_component.F90 +++ b/model_core/src/components/monc_component.F90 @@ -30,9 +30,29 @@ module monc_component_mod type, public :: component_field_information_type integer :: field_type, data_type, number_dimensions, dimension_sizes(4) - logical :: enabled + logical :: enabled=.false. end type component_field_information_type + type, public :: pointer_wrapper_value_type + procedure(component_get_field_value), nopass, pointer :: ptr + end type pointer_wrapper_value_type + + type, public :: pointer_wrapper_info_type + procedure(component_get_field_information), nopass, pointer :: ptr + end type pointer_wrapper_info_type + +! type, public :: pointer_wrapper_init_type +! procedure(component_initialisation), nopass, pointer :: ptr +! end type pointer_wrapper_init_type + +! type, public :: pointer_wrapper_timestep_type +! procedure(component_timestep), nopass, pointer :: ptr +! end type pointer_wrapper_timestep_type + +! type, public :: pointer_wrapper_finalisation_type +! procedure(component_finalisation), nopass, pointer :: ptr +! end type pointer_wrapper_finalisation_type + !> Description of a component !! !! Provided to the registry to register a component. It is also used by the registry to store information @@ -98,5 +118,6 @@ end subroutine component_get_field_value end interface public COMPONENT_SCALAR_FIELD_TYPE, COMPONENT_ARRAY_FIELD_TYPE, COMPONENT_INTEGER_DATA_TYPE, COMPONENT_DOUBLE_DATA_TYPE, & - component_initialisation, component_timestep, component_finalisation, component_get_description + component_initialisation, component_timestep, component_finalisation, component_get_description, & + component_get_field_information, component_get_field_value end module monc_component_mod diff --git a/model_core/src/components/registry.F90 b/model_core/src/components/registry.F90 index bc65c86d..b11b5e2f 100644 --- a/model_core/src/components/registry.F90 +++ b/model_core/src/components/registry.F90 @@ -6,13 +6,16 @@ module registry_mod use datadefn_mod, only : STRING_LENGTH use collections_mod, only : list_type, hashmap_type, map_type, iterator_type, c_size, c_generic_at, c_key_at, c_get_integer, & c_get_string, c_get_generic, c_remove, c_put_generic, c_put_string, c_put_integer, c_put_real, c_is_empty, & - c_contains, c_add_generic, c_add_string, c_free, c_get_iterator, c_has_next, c_next_mapentry + c_contains, c_add_generic, c_add_string, c_free, c_get_iterator, c_has_next, c_next_mapentry, mapentry_type use monc_component_mod, only : component_descriptor_type, component_field_value_type, component_field_information_type, & - FINALISATION_PRIORITY_INDEX, INIT_PRIORITY_INDEX, TIMESTEP_PRIORITY_INDEX + FINALISATION_PRIORITY_INDEX, INIT_PRIORITY_INDEX, TIMESTEP_PRIORITY_INDEX, & + pointer_wrapper_value_type, pointer_wrapper_info_type use conversions_mod, only : conv_to_string use state_mod, only : model_state_type use optionsdatabase_mod, only : options_has_key, options_get_string, options_get_logical, options_get_array_size - use logging_mod, only : LOG_INFO, LOG_ERROR, LOG_WARN, log_master_log + use logging_mod, only : LOG_INFO, LOG_ERROR, LOG_WARN, log_master_log, log_is_master + use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX + implicit none #ifndef TEST_MODE @@ -150,7 +153,7 @@ function get_component_field_value(current_state, name) if (c_contains(field_procedure_retrievals, name)) then data=>c_get_generic(field_procedure_retrievals, name) select type(data) - type is (pointer_wrapper_type) + type is (pointer_wrapper_value_type) call data%ptr(current_state, name, get_component_field_value) end select else @@ -168,10 +171,10 @@ function get_component_field_information(current_state, name) class(*), pointer :: data - if (c_contains(field_procedure_retrievals, name)) then + if (c_contains(field_procedure_sizings, name)) then data=>c_get_generic(field_procedure_sizings, name) select type(data) - type is (pointer_wrapper_type) + type is (pointer_wrapper_info_type) call data%ptr(current_state, name, get_component_field_information) end select else @@ -194,7 +197,8 @@ subroutine load_published_fields(descriptor) integer :: i class(*), pointer :: field_generic_description - type(pointer_wrapper_type), pointer :: wrapper + type(pointer_wrapper_info_type), pointer :: wrapper_info + type(pointer_wrapper_value_type), pointer :: wrapper_value class(*), pointer :: genericwrapper if (associated(descriptor%published_fields) .and. associated(descriptor%field_value_retrieval) .and. & @@ -202,13 +206,15 @@ subroutine load_published_fields(descriptor) do i=1, size(descriptor%published_fields) field_generic_description=>descriptor%published_fields(i) call c_add_generic(field_information, field_generic_description, .false.) - allocate(wrapper) ! We allocate our own copy of the descriptor here to ensure the consistency of registry information - wrapper%ptr => descriptor%field_value_retrieval - genericwrapper=>wrapper + + allocate(wrapper_value) ! We allocate our own copy of the descriptor here to ensure the consistency of registry information + wrapper_value%ptr => descriptor%field_value_retrieval + genericwrapper=>wrapper_value call c_put_generic(field_procedure_retrievals, descriptor%published_fields(i), genericwrapper, .false.) - allocate(wrapper) - wrapper%ptr => descriptor%field_information_retrieval - genericwrapper=>wrapper + + allocate(wrapper_info) + wrapper_info%ptr => descriptor%field_information_retrieval + genericwrapper=>wrapper_info call c_put_generic(field_procedure_sizings, descriptor%published_fields(i), genericwrapper, .false.) end do @@ -274,7 +280,7 @@ end function get_all_registered_components subroutine execute_initialisation_callbacks(current_state) type(model_state_type), intent(inout) :: current_state - call execute_callbacks(init_callbacks, current_state) + call execute_callbacks(init_callbacks, current_state, "initialisation_callback") end subroutine execute_initialisation_callbacks !> Calls all timestep callbacks with the specified state @@ -284,7 +290,7 @@ subroutine execute_timestep_callbacks(current_state, group_id) integer :: group_id if (.not. c_is_empty(timestep_callbacks(group_id))) then - call execute_callbacks(timestep_callbacks(group_id), current_state) + call execute_callbacks(timestep_callbacks(group_id), current_state, "timestep_callback") end if end subroutine execute_timestep_callbacks @@ -293,7 +299,7 @@ end subroutine execute_timestep_callbacks subroutine execute_finalisation_callbacks(current_state) type(model_state_type), intent(inout) :: current_state - call execute_callbacks(finalisation_callbacks, current_state) + call execute_callbacks(finalisation_callbacks, current_state, "finalisation_callback") end subroutine execute_finalisation_callbacks !> Orders all callbacks in the prospective stages based upon the priorities of each descriptor. @@ -440,7 +446,8 @@ subroutine display_callbacks_in_order(stage_callbacks, stagetitle) entries = c_size(stage_callbacks) do i=1,entries - call log_master_log(LOG_INFO, "Stage: "//stagetitle//" at: "//trim(conv_to_string(i))//" "//c_key_at(stage_callbacks, i)) + call log_master_log(LOG_INFO, "Stage: "//stagetitle//" at: "//trim(conv_to_string(i))//& + " "//trim(c_key_at(stage_callbacks, i)) ) end do end subroutine display_callbacks_in_order @@ -622,19 +629,110 @@ end function get_highest_callback_priority !> Will execute the appropriate callbacks in a specific map_type given the current state !! @param callbackmap_type The map_type of callback hooks to execute !! @param currentState The model state which may be (and likely is) modified in callbacks - subroutine execute_callbacks(callback_map, current_state) + subroutine execute_callbacks(callback_map, current_state, debug_label) type(map_type), intent(inout) :: callback_map + character(len=*), intent(in) :: debug_label type(model_state_type), intent(inout) :: current_state class(*), pointer :: data type(iterator_type) :: iterator + type(mapentry_type) :: map_entry + integer :: k,j,i iterator=c_get_iterator(callback_map) do while (c_has_next(iterator)) - data=>c_get_generic(c_next_mapentry(iterator)) + map_entry=c_next_mapentry(iterator) + data=>c_get_generic(map_entry) select type(data) - type is (pointer_wrapper_type) - call data%ptr(current_state) + type is (pointer_wrapper_type) + call data%ptr(current_state) + + ! Debugging prognostic print block to track prognostic modifications from component to component + ! Only active on one MONC (determined in simplesetup) + if (current_state%print_debug_data) then + + ! Continue for all initialisation and finalisation callbacks or if column_global matches the + ! requested coordinate + if ((trim(debug_label) .eq. "initialisation_callback") .or. & + (trim(debug_label) .eq. "finalisation_callback") .or. & + (current_state%column_global_x == current_state%pdd_x .and. & + current_state%column_global_y == current_state%pdd_y)) then + + ! Convert to local MONC array indices + k = current_state%pdd_z + i = current_state%pdd_x - current_state%local_grid%start(X_INDEX) + 1 + j = current_state%pdd_y - current_state%local_grid%start(Y_INDEX) + 1 + + ! Actual printing + print *, trim(debug_label),':',trim(map_entry%key),', (k,j,i):',k,j,i, & + ', (g_y,g_x)', current_state%column_global_y, current_state%column_global_x, & + ', timestep: ', current_state%timestep, ', global_rank: ', current_state%parallel%my_global_rank, & + ', MONC rank: ', current_state%parallel%my_rank + print "(a15,3i10)", & + ' stepping ', current_state%scalar_stepping, current_state%momentum_stepping, & + current_state%field_stepping + if (allocated(current_state%zu%data) .and. allocated(current_state%u%data) .and. & + allocated(current_state%su%data) .and. allocated(current_state%savu%data)) then + print "(a15,4es25.15)", & + ' u ', current_state%zu%data(k,j,i), current_state%u%data(k,j,i), & + current_state%su%data(k,j,i), current_state%savu%data(k,j,i) + endif + if (allocated(current_state%zv%data) .and. allocated(current_state%v%data) .and. & + allocated(current_state%sv%data) .and. allocated(current_state%savv%data)) then + print "(a15,4es25.15)", & + ' v ', current_state%zv%data(k,j,i), current_state%v%data(k,j,i), & + current_state%sv%data(k,j,i), current_state%savv%data(k,j,i) + endif + if (allocated(current_state%zw%data) .and. allocated(current_state%w%data) .and. & + allocated(current_state%sw%data) .and. allocated(current_state%savw%data)) then + print "(a15,4es25.15)", & + ' w ', current_state%zw%data(k,j,i), current_state%w%data(k,j,i), & + current_state%sw%data(k,j,i), current_state%savw%data(k,j,i) + endif + if (allocated(current_state%zth%data) .and. allocated(current_state%th%data) .and. & + allocated(current_state%sth%data)) then + print "(a15,3es25.15)", & + ' th ', current_state%zth%data(k,j,i), current_state%th%data(k,j,i), & + current_state%sth%data(k,j,i) + endif + if (allocated(current_state%zq(1)%data) .and. allocated(current_state%q(1)%data) .and. & + allocated(current_state%sq(1)%data)) then + print "(a15,3es25.15)", & + ' qv ', current_state%zq(1)%data(k,j,i), current_state%q(1)%data(k,j,i), & + current_state%sq(1)%data(k,j,i) + endif + if (allocated(current_state%p%data)) then + print "(a15,es25.15)", & + ' p ', current_state%p%data(k,j,i) + endif + if (allocated(current_state%vis_coefficient%data) .and. & + allocated(current_state%diff_coefficient%data)) then + print "(a15,2es25.15)", & + ' coeff ', current_state%vis_coefficient%data(k,j,i), & + current_state%diff_coefficient%data(k,j,i) + endif + if (allocated(current_state%global_grid%configuration%vertical%olzthbar) .and.& + allocated(current_state%global_grid%configuration%vertical%olthbar) ) then + print "(a15,2es25.15)", & + ' olth(z)bar ', current_state%global_grid%configuration%vertical%olzthbar(k), & + current_state%global_grid%configuration%vertical%olthbar(k) + endif + if (allocated(current_state%global_grid%configuration%vertical%olzqbar) .and.& + allocated(current_state%global_grid%configuration%vertical%olqbar) ) then + print "(a15,2es25.15)", & + ' olq(z)bar ', current_state%global_grid%configuration%vertical%olzqbar(k,1), & + current_state%global_grid%configuration%vertical%olqbar(k,1) + endif + end if ! test i and j or init/final callback + end if ! test print_debug_data + + +! type is (pointer_wrapper_init_type) +! call data%ptr(current_state) +! type is (pointer_wrapper_timestep_type) +! call data%ptr(current_state) +! type is (pointer_wrapper_finalisation_type) +! call data%ptr(current_state) end select end do end subroutine execute_callbacks @@ -656,4 +754,47 @@ subroutine add_callback(callback_map, name, procedure_pointer) genericwrapper=>wrapper call c_put_generic(callback_map, name, genericwrapper, .false.) end subroutine add_callback + +! subroutine add_callback_init(callback_map, name, procedure_pointer) +! type(map_type), intent(inout) :: callback_map +! procedure(component_initialisation), pointer :: procedure_pointer +! character(len=*), intent(in) :: name + +! type(pointer_wrapper_init_type), pointer :: wrapper +! class(*), pointer :: genericwrapper + +! allocate(wrapper) ! We allocate our own copy of the descriptor here to ensure the consistency of registry information +! wrapper%ptr => procedure_pointer +! genericwrapper=>wrapper +! call c_put_generic(callback_map, name, genericwrapper, .false.) +! end subroutine add_callback_init + +! subroutine add_callback_timestep(callback_map, name, procedure_pointer) +! type(map_type), intent(inout) :: callback_map +! procedure(component_timestep), pointer :: procedure_pointer +! character(len=*), intent(in) :: name + +! type(pointer_wrapper_timestep_type), pointer :: wrapper +! class(*), pointer :: genericwrapper + +! allocate(wrapper) +! wrapper%ptr => procedure_pointer +! genericwrapper=>wrapper +! call c_put_generic(callback_map, name, genericwrapper, .false.) +! end subroutine add_callback_timestep + +! subroutine add_callback_finalisation(callback_map, name, procedure_pointer) +! type(map_type), intent(inout) :: callback_map +! procedure(component_finalisation), pointer :: procedure_pointer +! character(len=*), intent(in) :: name + +! type(pointer_wrapper_finalisation_type), pointer :: wrapper +! class(*), pointer :: genericwrapper + +! allocate(wrapper) +! wrapper%ptr => procedure_pointer +! genericwrapper=>wrapper +! call c_put_generic(callback_map, name, genericwrapper, .false.) +! end subroutine add_callback_finalisation + end module registry_mod diff --git a/model_core/src/components/timestepper.F90 b/model_core/src/components/timestepper.F90 index 1ecbaf86..7119439a 100644 --- a/model_core/src/components/timestepper.F90 +++ b/model_core/src/components/timestepper.F90 @@ -6,6 +6,9 @@ module timestepper_mod use grids_mod, only : X_INDEX, Y_INDEX use registry_mod, only : GROUP_TYPE_WHOLE, GROUP_TYPE_COLUMN, group_descriptor_type, get_ordered_groups, & execute_timestep_callbacks + use optionsdatabase_mod, only : options_get_integer + use registry_mod, only : is_component_enabled + implicit none #ifndef TEST_MODE @@ -14,13 +17,21 @@ module timestepper_mod type(group_descriptor_type), dimension(:), allocatable :: group_descriptors !< Prefetched ordered group descriptors + integer :: radiation_interval + logical :: socrates_enabled + public init_timestepper, timestep, finalise_timestepper contains !> Initialises the timestepper by prefetching the groups in the order that they will be executed, this is for optimised !! execution in the timestep calls - subroutine init_timestepper() + !! @param current_state The current model state + subroutine init_timestepper(current_state) + type(model_state_type), intent(inout) :: current_state + call get_ordered_groups(group_descriptors) + radiation_interval=options_get_integer(current_state%options_database, "rad_interval") + socrates_enabled=is_component_enabled(current_state%options_database, "socrates_couple") end subroutine init_timestepper !> Performs a timestep, which is comprised of executing each group of components in the order that they have been configured @@ -31,6 +42,8 @@ subroutine timestep(current_state) integer :: i + call handle_sampling(current_state) + do i=1,size(group_descriptors) if (group_descriptors(i)%type == GROUP_TYPE_WHOLE) then call timestep_whole(current_state, group_descriptors(i)) @@ -78,6 +91,12 @@ subroutine timestep_whole(current_state, group_descriptor) type(model_state_type), intent(inout) :: current_state type(group_descriptor_type), intent(in) :: group_descriptor + ! For print_debug_data, the column_global fields must match the requested coordinate. + ! This is already handled for the timestep_column, but needs to be specially set for timestep_whole. + if (current_state%print_debug_data) then + current_state%column_global_x = current_state%pdd_x + current_state%column_global_y = current_state%pdd_y + end if call execute_timestep_callbacks(current_state, group_descriptor%id) end subroutine timestep_whole @@ -100,4 +119,56 @@ subroutine update_state_sitation_flags(current_state) current_state%column_local_y .gt. current_state%local_grid%local_domain_end_index(Y_INDEX) .or.& current_state%column_local_x .gt. current_state%local_grid%local_domain_end_index(X_INDEX) end subroutine update_state_sitation_flags + + !> Updates the diagnostic sampling flag for the new timestep + !! @param state The current model state + subroutine handle_sampling(current_state) + type(model_state_type), intent(inout) :: current_state + + integer :: i + + current_state%diagnostic_sample_timestep = .false. + current_state%sampling(:)%active = .false. + current_state%radiation_timestep = .false. ! for computation timing under time_basis + + if (.not. current_state%only_compute_on_sample_timestep) then + ! always compute the diagnostic in this case + current_state%diagnostic_sample_timestep = .true. + end if + + ! The following three cases will only compute diangnostics at requested intervals. + ! However, it does ALL diagnostics regardless of specific request. + ! MONC isn't STATSH-smart...though radiation diagnostics come close + if (current_state%time_basis) then + ! enable calculations and sampling at specified step only + ! (at sampling time interval, which is also an output or write interval) + do i=1, size(current_state%sampling) + if (current_state%timestep .eq. current_state%sampling(i)%next_step) then + if (current_state%sampling(i)%radiation) then + ! Only possible when socrates_enabled and radiation_interval .gt. 0 (iobridge) + ! Permits radiation without needing to do all diagnostics + ! Never set %active for the %radiation case - does not denote a iob data_definition + current_state%radiation_timestep = .true. + else + current_state%diagnostic_sample_timestep = .true. + current_state%sampling(i)%active = .true. + end if + end if + end do + else ! timestep basis or force_output_on_interval + ! enable radiation calculation + if (socrates_enabled .and. radiation_interval .gt. 0) then + if (mod(current_state%timestep, radiation_interval) == 0) & + current_state%radiation_timestep = .true. + end if + ! enable diagnostic calculation and sampling on the sampling timestep interval. + do i=1,size(current_state%sampling) + if (mod(current_state%timestep, current_state%sampling(i)%interval) == 0) then + current_state%diagnostic_sample_timestep = .true. + current_state%sampling(i)%active = .true. + end if + end do + end if + end subroutine handle_sampling + end module timestepper_mod diff --git a/model_core/src/configuration/checkpointnetcdfparser.F90 b/model_core/src/configuration/checkpointnetcdfparser.F90 index 3a4d75fa..3c251751 100644 --- a/model_core/src/configuration/checkpointnetcdfparser.F90 +++ b/model_core/src/configuration/checkpointnetcdfparser.F90 @@ -1,12 +1,12 @@ !> Loads in the configuration stored in a NetCDF checkpoint file for the model to start from module configuration_checkpoint_netcdf_parser_mod - use datadefn_mod, only : STRING_LENGTH + use datadefn_mod, only : STRING_LENGTH, l_config_double use collections_mod, only : hashmap_type use netcdf, only : NF90_NOWRITE, NF90_NETCDF4, NF90_MPIIO, NF90_NOERR, nf90_strerror, nf90_open, nf90_close, & nf90_inq_dimid, nf90_inquire_dimension, nf90_inq_varid, nf90_get_var use logging_mod, only : LOG_ERROR, log_master_log use conversions_mod, only : conv_is_integer, conv_to_integer, conv_is_real, conv_to_real, conv_is_logical, conv_to_logical, & - conv_single_real_to_double + conv_single_real_to_double, string_to_double use optionsdatabase_mod, only : options_add use mpi, only : MPI_INFO_NULL use netcdf_misc_mod, only : check_netcdf_status @@ -60,7 +60,11 @@ subroutine load_options(options_database, ncid) if (conv_is_integer(trim(value))) then call options_add(options_database, trim(key), conv_to_integer(trim(value))) else if (conv_is_real(trim(value))) then - call options_add(options_database, trim(key), conv_single_real_to_double(conv_to_real(trim(value)))) + if (.not. l_config_double) then + call options_add(options_database, trim(key), conv_single_real_to_double(conv_to_real(trim(value)))) + else + call options_add(options_database, trim(key), string_to_double(trim(value))) + end if else if (conv_is_logical(trim(value))) then call options_add(options_database, trim(key), conv_to_logical(trim(value))) else diff --git a/model_core/src/configuration/configurationfileparser.F90 b/model_core/src/configuration/configurationfileparser.F90 index 1faf562b..1e1f2577 100644 --- a/model_core/src/configuration/configurationfileparser.F90 +++ b/model_core/src/configuration/configurationfileparser.F90 @@ -1,11 +1,13 @@ !> Parses a configuration file and loads the contents into the options database which can !! then be interogated by components in the model module configuration_file_parser_mod + use datadefn_mod, only : l_config_double use collections_mod, only : hashmap_type use conversions_mod, only : conv_to_logical, conv_to_integer, conv_to_real, & - conv_is_logical, conv_is_integer, conv_is_real, conv_single_real_to_double + conv_is_logical, conv_is_integer, conv_is_real, conv_single_real_to_double, & + string_to_double use optionsdatabase_mod, only : options_add, options_get_string, options_has_key, & - options_get_array_size, options_remove_key + options_get_array_size, options_remove_key, options_check_precision use logging_mod, only : LOG_ERROR, log_master_log implicit none @@ -305,6 +307,9 @@ subroutine store_configuration(options_database, config_key, config_value, array parsed_value=config_value end if + ! Skip option if no values provided. + if (len(trim(parsed_value)) .eq. 0) return + if (conv_is_logical(trim(parsed_value))) then if (present(array_index)) then call options_add(options_database, trim(config_key), & @@ -324,11 +329,23 @@ subroutine store_configuration(options_database, config_key, config_value, array conv_to_integer(trim(parsed_value))) end if else if (conv_is_real(parsed_value)) then + call options_check_precision(config_key, config_value) if (present(array_index)) then - call options_add(options_database, trim(config_key), & - conv_single_real_to_double(conv_to_real(trim(parsed_value))), array_index=array_index) + if (.not. l_config_double) then + call options_add(options_database, trim(config_key), & + conv_single_real_to_double(conv_to_real(trim(parsed_value))), & + array_index=array_index) + else + call options_add(options_database, trim(config_key), & + string_to_double(trim(parsed_value)), array_index=array_index) + end if else - call options_add(options_database, trim(config_key), conv_single_real_to_double(conv_to_real(trim(parsed_value)))) + if (.not. l_config_double) then + call options_add(options_database, trim(config_key), & + conv_single_real_to_double(conv_to_real(trim(parsed_value)))) + else + call options_add(options_database, trim(config_key), string_to_double(trim(parsed_value))) + end if end if else if (present(array_index)) then diff --git a/model_core/src/configuration/optionsdatabase.F90 b/model_core/src/configuration/optionsdatabase.F90 index 4c7b09c4..fb35a4fb 100644 --- a/model_core/src/configuration/optionsdatabase.F90 +++ b/model_core/src/configuration/optionsdatabase.F90 @@ -5,12 +5,13 @@ !! Note that the options database should be entirely agnostic of where or now the database is stored (in our !! case in the state.) module optionsdatabase_mod - use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH, LONG_STRING_LENGTH + use datadefn_mod, only : DEFAULT_PRECISION, STRING_LENGTH, LONG_STRING_LENGTH, l_config_double, & + config_precision, config_range use collections_mod, only : list_type, hashmap_type, c_size, c_get_integer, c_get_string, c_get_real, c_get_logical, c_contains, & c_generic_at, c_key_at, c_put_integer, c_put_real, c_put_string, c_put_logical, c_remove use conversions_mod, only : conv_to_logical, conv_to_integer, conv_to_real, conv_is_logical, conv_is_integer, & - conv_is_real, conv_to_string, conv_single_real_to_double - use logging_mod, only: LOG_ERROR, log_log + conv_is_real, conv_to_string, conv_single_real_to_double, string_to_double, count_significant_digits + use logging_mod, only: LOG_ERROR, LOG_WARN, log_log, log_master_log, LOG_INFO, log_master_newline, log_is_master implicit none #ifndef TEST_MODE @@ -32,7 +33,8 @@ module optionsdatabase_mod public load_command_line_into_options_database, options_has_key, options_get_logical, options_get_integer, & options_get_string, options_get_real, options_add, options_size, options_key_at, options_value_at, & options_get_array_size, options_get_integer_array, options_get_real_array, & - options_get_string_array, options_get_logical_array, options_remove_key + options_get_string_array, options_get_logical_array, options_remove_key, & + options_compare_profile_arrays, options_check_precision contains @@ -353,8 +355,9 @@ end function options_get_array_size !> Loads in the command line arguments and stores them in the options database !! @returns hashmap_type of option-value pairs - subroutine load_command_line_into_options_database(options_database) + subroutine load_command_line_into_options_database(options_database, report_option) type(hashmap_type), intent(inout) :: options_database + logical, intent(in), optional :: report_option integer :: i, arguments, equals_posn, type_of_config character(len=LONG_STRING_LENGTH) :: specific_arg @@ -373,6 +376,12 @@ subroutine load_command_line_into_options_database(options_database) type_of_config = LOGICAL_TYPE end if call add_specific_option_key_value_pair(type_of_config, options_database, specific_arg) + if (present(report_option)) then + if (report_option) then + call log_master_log(LOG_INFO, "Command line option applied: "//trim(specific_arg)) + call log_master_newline() + end if + end if end if end do end subroutine load_command_line_into_options_database @@ -385,20 +394,19 @@ subroutine options_remove_key(options_database, key) character(len=*), intent(in) :: key integer :: array_size, i - - if (options_has_key(options_database, key)) then - array_size=options_get_array_size(options_database, key) - if (array_size .gt. 0) then - do i=1,array_size - if (options_has_key(options_database, get_options_array_key(key, i))) then - call c_remove(options_database, get_options_array_key(key, i)) - end if - end do - call c_remove(options_database, trim(key)//"a_size") - end if - else - call c_remove(options_database, key) + + ! When retrieved size is 0, option is already absent: do nothing + array_size=options_get_array_size(options_database, key) + if (array_size .eq. 1) call c_remove(options_database, key) + if (array_size .ge. 2) then + do i=1,array_size + if (options_has_key(options_database, get_options_array_key(key, i))) then + call c_remove(options_database, get_options_array_key(key, i)) + end if + end do + call c_remove(options_database, trim(key)//"a_size") end if + end subroutine options_remove_key !-------------------------------------------------------------------------- @@ -414,7 +422,7 @@ subroutine check_options_key_exists(options_database, key) character(len=*), intent(in) :: key if (.not. options_has_key(options_database, key)) then - call log_log(LOG_ERROR, "No configuration option with key "//trim(key)//" present") + call log_master_log(LOG_ERROR, "No configuration option with key "//trim(key)//" present") end if end subroutine check_options_key_exists @@ -657,8 +665,15 @@ subroutine add_specific_option_key_value_pair(type_of_config, parse_options, spe call set_options_integer_value(parse_options, specific_arg(3:equals_posn-1), & conv_to_integer(specific_arg(equals_posn+1:len(specific_arg)))) else if (type_of_config == REAL_TYPE) then - call set_options_real_value(parse_options, specific_arg(3:equals_posn-1), & - conv_single_real_to_double(conv_to_real(specific_arg(equals_posn+1:len(specific_arg))))) + call options_check_precision(specific_arg(3:equals_posn-1), & + specific_arg(equals_posn+1:len(specific_arg))) + if (l_config_double) then + call set_options_real_value(parse_options, specific_arg(3:equals_posn-1), & + string_to_double(specific_arg(equals_posn+1:len(specific_arg)))) + else + call set_options_real_value(parse_options, specific_arg(3:equals_posn-1), & + conv_single_real_to_double(conv_to_real(specific_arg(equals_posn+1:len(specific_arg))))) + end if else if (type_of_config == STRING_TYPE) then call set_options_string_value(parse_options, specific_arg(3:equals_posn-1), specific_arg(equals_posn+1:len(specific_arg))) end if @@ -703,4 +718,70 @@ subroutine set_options_string_value(optionhashmap_type, key, str_value) write_value = str_value call c_put_string(optionhashmap_type, key, write_value) end subroutine set_options_string_value + + + !> Checks that the length of two option_database arrays are equal and raise error if they are not. + !! @param options_database The options database + !! @param key1 The height key to look up in the options database + !! @param key2 The value key to look up in the options database + !! @param label A description of the kind of array pair being compared. + subroutine options_compare_profile_arrays(options_database, key1, key2, label) + type(hashmap_type), intent(inout) :: options_database + character(len=*), intent(in) :: key1, key2, label + + integer :: len1=0, len2=0 + + len1 = options_get_array_size(options_database, trim(key1)) + len2 = options_get_array_size(options_database, trim(key2)) + + if (len1 .ne. len2) then + call log_master_log(LOG_ERROR, "There is a mismatch between the number of "//trim(label)//" heights, "// & + "size("//trim(key1)//")="//trim(conv_to_string(len1))// & + ", and "//trim(label)//" values, "// & + "size("//trim(key2)//")="//trim(conv_to_string(len2))// & + ". These should be equal.") + end if + end subroutine options_compare_profile_arrays + + + !> Routine confirms that real value strings parsed from configuration do not exceed expected precision + ! This is used when the configuration is read from a config file or from the command line + ! but not when read from the checkpoint (at which point it should have already been reviewed). + subroutine options_check_precision(key, string) + character(len=*), intent(in) :: key, string + character(len=16) :: exp_prec + integer :: in_precision, in_range, e_posn + + ! Obtain the default precision parameters (determined in datadefn.F90 via l_config_double) + if (l_config_double) then + exp_prec = "DOUBLE_PRECISION" + else + exp_prec = "SINGLE_PRECISION" + end if + + ! Set initial lower value + in_precision = 0 + in_range = 0 + + ! Obtain number of significant digits in input string + in_precision = count_significant_digits(string) + + ! Obtain any input exponent + e_posn = index(string, "e") + if (e_posn .ne. 0) e_posn = index(string, "E") + if (e_posn .ne. 0) in_range = conv_to_integer(trim(string(e_posn+1:))) + + ! Perform the precision check to raise error + if (in_precision .gt. config_precision .or. & + in_range .gt. config_precision .or. & + in_range .gt. config_range) then + call log_master_log(LOG_WARN, "The configuration option, "//trim(key)//"="//& + trim(string)//", exceeds the expected precison ("//trim(exp_prec)//& + ", precision="//trim(conv_to_string(config_precision))//& + ", range="//trim(conv_to_string(config_range))//"). Reduce the number of "//& + "significant figures for this value, otherwise it may be truncated.") + end if + + end subroutine options_check_precision + end module optionsdatabase_mod diff --git a/model_core/src/datadefn.F90 b/model_core/src/datadefn.F90 index 85631bdb..7cdf70e4 100644 --- a/model_core/src/datadefn.F90 +++ b/model_core/src/datadefn.F90 @@ -10,13 +10,29 @@ module datadefn_mod integer, public, parameter :: STRING_LENGTH=150 !< Default length of strings integer, public, parameter :: LONG_STRING_LENGTH=STRING_LENGTH + 50!< Length of longer strings - integer, public, parameter :: SINGLE_PRECISION = selected_real_kind(6,30) !< Single precision (32 bit) kind - integer, public, parameter :: DOUBLE_PRECISION = selected_real_kind(15,307) !< Double precision (64 bit) kind + !< Single precision (32 bit) kind + integer, public, parameter :: SINGLE_P = 6 !< precision (significant figures) + integer, public, parameter :: SINGLE_R = 30 !< range (exponent) + integer, public, parameter :: SINGLE_PRECISION = selected_real_kind(SINGLE_P, SINGLE_R) + + !< Double precision (64 bit) kind + integer, public, parameter :: DOUBLE_P = 15 !< precision (significant figures) + integer, public, parameter :: DOUBLE_R = 307 !< range (exponent) + integer, public, parameter :: DOUBLE_PRECISION = selected_real_kind(DOUBLE_P, DOUBLE_R) !< Default precision which is used for prognostic data and calculations - integer, public, parameter :: DEFAULT_PRECISION = DOUBLE_PRECISION + integer, public, parameter :: DEFAULT_PRECISION = DOUBLE_PRECISION + !< Solver precision is used in the interative solver + integer, public, parameter :: SOLVER_PRECISION = DOUBLE_PRECISION !< MPI communication type which we use for the prognostic and calculation data - integer, public :: PRECISION_TYPE + integer, public :: PRECISION_TYPE, SINGLE_PRECISION_TYPE, DOUBLE_PRECISION_TYPE + + + ! Configuration precision toggle + ! ---- HARD-CODED ONLY ---- + logical, public, parameter :: l_config_double = .true. ! read config reals as DOUBLE_PRECISION + !logical, public, parameter :: l_config_double = .false. ! read config reals as fortran reals (old) + integer, public :: config_precision, config_range public init_data_defn @@ -29,5 +45,18 @@ subroutine init_data_defn() else PRECISION_TYPE = MPI_REAL endif + !> Initialise single and double precision type for use of mixed precision, e.g + !> in the iterative solver + SINGLE_PRECISION_TYPE = MPI_REAL + DOUBLE_PRECISION_TYPE = MPI_DOUBLE_PRECISION + + !> Record the expected configuration precision for verification + if (l_config_double) then + config_precision = DOUBLE_P + config_range = DOUBLE_R + else + config_precision = SINGLE_P + config_range = SINGLE_R + end if end subroutine init_data_defn end module datadefn_mod diff --git a/model_core/src/grid/grids.F90 b/model_core/src/grid/grids.F90 index 31f0b0c2..46c9d25c 100644 --- a/model_core/src/grid/grids.F90 +++ b/model_core/src/grid/grids.F90 @@ -3,7 +3,7 @@ !! !! Currently MONC supports the Arakawa C grid module grids_mod - use datadefn_mod, only : DEFAULT_PRECISION + use datadefn_mod, only : DEFAULT_PRECISION, SINGLE_PRECISION implicit none #ifndef TEST_MODE @@ -88,8 +88,6 @@ module grids_mod real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: q_force !< Profiles of forcing terms for q variables real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: olqbar,olzqbar - ! time varying forcing terms - real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: wsubs_time_vary real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: hgd real(kind=DEFAULT_PRECISION) :: czn, zlogm, zlogth, vk_on_zlogm @@ -126,4 +124,5 @@ module grids_mod integer, dimension(:,:), allocatable :: neighbours , corner_neighbours !< Neighbouring process Id per dimension integer :: dimensions = 0 !< Number of active dimensions end type local_grid_type + end module grids_mod diff --git a/model_core/src/grid/interpolation.F90 b/model_core/src/grid/interpolation.F90 index e29924dc..83419330 100644 --- a/model_core/src/grid/interpolation.F90 +++ b/model_core/src/grid/interpolation.F90 @@ -123,17 +123,17 @@ subroutine interpolate_point_linear_1d(zvals, vals, z, f, extrapolate) end subroutine interpolate_point_linear_1d !> Does a simple 1d linear interpolation to a point - !! @param zvals input z nodes - !! @param vals input nodal values - !! @param z location to interpolate onto + !! @param zvals_in input z nodes + !! @param vals_in input nodal values + !! @param z_out location to interpolate onto !! @param f output interpolated value - subroutine piecewise_linear_2d(zvals, time_vals, vals, z, field) + subroutine piecewise_linear_2d(zvals_in, time_vals, vals_in, z_out, field) ! Assumes input variables (vals) are 2-D, with dims (z, time) - real(kind=DEFAULT_PRECISION), intent(in) :: zvals(:), time_vals(:) - real(kind=DEFAULT_PRECISION), intent(in) :: vals(:,:) - real(kind=DEFAULT_PRECISION), intent(in) :: z(:) + real(kind=DEFAULT_PRECISION), intent(in) :: zvals_in(:), time_vals(:) + real(kind=DEFAULT_PRECISION), intent(in) :: vals_in(:,:) + real(kind=DEFAULT_PRECISION), intent(in) :: z_out(:) real(kind=DEFAULT_PRECISION), intent(out) :: field(:,:) real(kind=DEFAULT_PRECISION) :: scale_tmp @@ -141,18 +141,33 @@ subroutine piecewise_linear_2d(zvals, time_vals, vals, z, field) integer :: nn, k_monc, k_force ! loop counter integer :: nz_force, nt_force, nz_monc, nt_monc ! time and height array sizes for forcing and monc grids integer :: nnodes ! number of input values - - nz_force = size(zvals) + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: zvals, z + real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: vals + logical :: pressure + + pressure = .false. + + nz_force = size(zvals_in) nt_force = size(time_vals) - nz_monc = size(z) + nz_monc = size(z_out) nt_monc = size(time_vals) ! time is intepolated in the timestep callback - if ( zvals(1) .GT. zvals(nz_force) ) then ! pressure - call log_master_log(LOG_ERROR, "Input forcing uses pressure, this has not been coded"// & - " - please modify your forcing file to using height coordinates or modify the" // & - " interpolation routine in model_core to work with pressure coords - STOP") + allocate(zvals(nz_force),z(nz_monc),vals(nz_force,nt_force)) + + zvals=zvals_in + + if ( zvals(1) .GT. zvals(nz_force) ) then ! detect pressure coordinates: flip and scale + zvals=log10(zvals_in(nz_force:1:-1)) + z=log10(z_out(nz_monc:1:-1)) + vals=vals_in(nz_force:1:-1,:) + pressure = .true. else - do k_monc=2,nz_monc + zvals=zvals_in + z=z_out + vals=vals_in + end if + + do k_monc=1,nz_monc do k_force=1,nz_force-1 if( z(k_monc) >= zvals(k_force) .AND. z(k_monc) < zvals(k_force+1) ) then scale_tmp = ( z(k_monc) - zvals(k_force) ) / & @@ -168,8 +183,8 @@ subroutine piecewise_linear_2d(zvals, time_vals, vals, z, field) ! now examine the cases below and above forlevs(1) and forlevs(ktmfor ! uses the local vertical gradient in the forcing to determine the ! new values - do k_monc=2,nz_monc - if ( z(k_monc) >= zvals(nt_force) ) then + do k_monc=1,nz_monc + if ( z(k_monc) >= zvals(nz_force) ) then scale_tmp = ( z(k_monc) - zvals(nz_force) ) & / ( zvals(nz_force) - zvals(nz_force-1) ) do nn=1,nt_force @@ -188,17 +203,26 @@ subroutine piecewise_linear_2d(zvals, time_vals, vals, z, field) endif enddo ! - endif ! pressure or height + if ( pressure ) then ! pressure (revert flipped coordinates) + field=field(nz_monc:1:-1,:) + endif end subroutine piecewise_linear_2d + + + ! "extrapolate" is a bad name for this option, as extrapolate is only used to determine how to + ! do the interpolation so that it is either linear or constant (not actually interpolation) + ! Actual extrapolation is only constant and automatic, it's just constantly replicated. Oy. + ! Pleasantly, the default is to do internal linear interpolation. + ! See interpolate_point_linear_1d for what looks to be the intended implementation. subroutine interpolate_point_linear_2d(zvals, vals, z, f, extrapolate) ! 2-d because the "vals" array is 2d, probably height and time - real(kind=DEFAULT_PRECISION), intent(in) :: zvals(:), vals(:,:) - real(kind=DEFAULT_PRECISION), intent(in) :: z - real(kind=DEFAULT_PRECISION), intent(out) :: f(:) ! height + real(kind=DEFAULT_PRECISION), intent(in) :: zvals(:), vals(:,:) ! forcing_times(:),forcing_values(height,time) + real(kind=DEFAULT_PRECISION), intent(in) :: z ! time to interpolate to + real(kind=DEFAULT_PRECISION), intent(out) :: f(:) ! output profile(height) character(*), intent(in), optional :: extrapolate integer :: nn ! loop counter diff --git a/model_core/src/monc.F90 b/model_core/src/monc.F90 index 9dd2dada..a61747d8 100644 --- a/model_core/src/monc.F90 +++ b/model_core/src/monc.F90 @@ -11,14 +11,21 @@ module monc_mod display_callbacks_in_order_at_each_stage use timestepper_mod, only : init_timestepper, timestep, finalise_timestepper use logging_mod, only : LOG_INFO, LOG_WARN, LOG_ERROR, LOG_DEBUG, log_log, log_get_logging_level, log_set_logging_level, & - log_master_log, initialise_logging + log_master_log, initialise_logging, log_master_newline use optionsdatabase_mod, only : load_command_line_into_options_database, options_get_integer, options_has_key, & - options_get_string, options_get_logical, options_add + options_get_string, options_get_logical, options_add, options_remove_key use configuration_file_parser_mod, only : parse_configuration_file use configuration_checkpoint_netcdf_parser_mod, only : parse_configuration_checkpoint_netcdf use science_constants_mod, only : initialise_science_constants use mpi, only : MPI_COMM_WORLD, MPI_THREAD_MULTIPLE, MPI_THREAD_SERIALIZED, MPI_THREAD_SINGLE, MPI_THREAD_FUNNELED, mpi_wtime use datadefn_mod, only : DEFAULT_PRECISION, init_data_defn +#ifndef TEST_MODE + use netcdf, only : nf90_nowrite, nf90_open, nf90_inq_varid, nf90_get_var, nf90_close +#else + use dummy_netcdf_mod, only : nf90_nowrite, nf90_open, nf90_inq_varid, nf90_get_var, nf90_close +#endif + use checkpointer_common_mod, only : TIME_KEY, check_status + implicit none #ifndef TEST_MODE @@ -29,11 +36,13 @@ module monc_mod !! @param io_communicator_arg The IO communicator !! @param io_xml_configuration The IO server textual configuration subroutine io_server_run_procedure(options_database, io_communicator_arg, provided_threading, & - total_global_processes, continuation_run, io_configuration_file) - import hashmap_type, LONG_STRING_LENGTH + total_global_processes, continuation_run, reconfig_initial_time, io_configuration_file, & + my_global_rank) + import hashmap_type, LONG_STRING_LENGTH, DEFAULT_PRECISION type(hashmap_type), intent(inout) :: options_database - integer, intent(in) :: io_communicator_arg, provided_threading, total_global_processes + integer, intent(in) :: io_communicator_arg, provided_threading, total_global_processes, my_global_rank logical, intent(in) :: continuation_run + real(kind=DEFAULT_PRECISION), intent(in) :: reconfig_initial_time character(len=LONG_STRING_LENGTH), intent(in) :: io_configuration_file end subroutine io_server_run_procedure end interface @@ -55,30 +64,38 @@ subroutine monc_core_bootstrap(component_descriptions, io_server_run) type(model_state_type) :: state integer :: ierr, myrank, size, io_server_placement_period, provided_threading, selected_threading_mode logical :: i_am_monc_process + logical :: io_continuation + real(kind=DEFAULT_PRECISION) :: reconfig_initial_time character(len=LONG_STRING_LENGTH) :: io_server_config_file - + + ! Initialise MPI selected_threading_mode=get_mpi_threading_mode() call mpi_init_thread(selected_threading_mode, provided_threading, ierr) + + call init_data_defn() + + ! Set up the logging with comm world PIDs initially for logging from the configuration parsing + call mpi_comm_rank(MPI_COMM_WORLD, myrank, ierr) + state%parallel%my_global_rank = myrank + call initialise_logging(myrank) + call log_master_log(LOG_INFO, "Starting MONC...") + call log_master_newline() + if (selected_threading_mode .gt. provided_threading) then call log_master_log(LOG_ERROR, "You have selected to thread at level '"//& trim(mpi_threading_level_to_string(selected_threading_mode))//& "' but the maximum level your MPI implementation can provide is '"//& trim(mpi_threading_level_to_string(provided_threading))//"'") - end if - call load_model_configuration(state, state%options_database) + end if - state%io_server_enabled=determine_if_io_server_enabled(state%options_database) - - call init_data_defn() - ! Set up the logging with comm world PIDs initially for logging from the configuration parsing - call mpi_comm_rank(MPI_COMM_WORLD, myrank, ierr) - call initialise_logging(myrank) - + ! Load model configuration + reconfig_initial_time = 0.0_DEFAULT_PRECISION ! set locally, should precede load_model_configuration + call load_model_configuration(state, state%options_database, io_continuation, reconfig_initial_time) call log_set_logging_level(options_get_integer(state%options_database, "logging")) + call perform_options_compatibility_checks(state%options_database) - ! Check options_database for conflicts - !call perform_options_compatibility_checks(state%options_database) - + ! Check on io_server settings and start MONC + state%io_server_enabled=determine_if_io_server_enabled(state%options_database) if (state%io_server_enabled) then call mpi_comm_size(MPI_COMM_WORLD, size, ierr) if (size==1) call log_log(LOG_ERROR, & @@ -88,7 +105,7 @@ subroutine monc_core_bootstrap(component_descriptions, io_server_run) state%parallel%io_communicator, i_am_monc_process, state%parallel%corresponding_io_server_process) if (.not. i_am_monc_process) then call io_server_run(state%options_database, state%parallel%io_communicator, provided_threading, & - size, state%continuation_run, io_server_config_file) + size, io_continuation, reconfig_initial_time, io_server_config_file, myrank) else call monc_run(component_descriptions, state) end if @@ -114,26 +131,80 @@ end function determine_if_io_server_enabled !> Loads the configuration into the options database, either from a file or checkpoint !! @param options_database The options database - subroutine load_model_configuration(state, options_database) + !! @param io_continuation Whether the io_server should be reinitialized from the checkpoint. + subroutine load_model_configuration(state, options_database, io_continuation, reconfig_initial_time) type(model_state_type), intent(inout) :: state type(hashmap_type), intent(inout) :: options_database + logical, intent(out) :: io_continuation + real(kind=DEFAULT_PRECISION), intent(inout) :: reconfig_initial_time call load_command_line_into_options_database(options_database) + + ! Cold start from mcf config file. if (options_has_key(options_database, "config")) then state%continuation_run=.false. + io_continuation=.false. + call log_master_log(LOG_INFO, "This cycle is a cold start using config: '"//& + trim(options_get_string(options_database, "config"))//"'") + call log_master_newline() call parse_configuration_file(options_database, options_get_string(options_database, "config")) + + ! Reconfiguration reads configuration from mcf and data from netcdf checkpoint. + ! Calling it reconfig allows this startup option. + ! This is a continuation run for MONCs, but not for the IOserver. + else if (options_has_key(options_database, "reconfig") .and. & + options_has_key(options_database, "checkpoint")) then + state%reconfig_run=.true. ! this is specific to the initial cycle of this kind of run + state%continuation_run=.true. + io_continuation=.false. + call log_master_log(LOG_INFO, "This cycle is a reconfigured start using config: '"//& + trim(options_get_string(options_database, "reconfig"))//& + "' from checkpoint: '"//trim(options_get_string(options_database, "checkpoint"))//"'") + + ! Check to see if retain_model_time was loaded in via command line options + if (options_has_key(options_database, "retain_model_time")) then + if (options_get_logical(options_database, "retain_model_time")) then + call extract_time_from_checkpoint_file(options_get_string(options_database, "checkpoint"),& + reconfig_initial_time) + state%retain_model_time = .true. + end if + end if + call log_master_log(LOG_INFO, "Reconfiguration starting from time: "//trim(conv_to_string(reconfig_initial_time))) + call log_master_newline() + + call parse_configuration_file(options_database, & + options_get_string(options_database, "reconfig")) + + ! Continuation else if (options_has_key(options_database, "checkpoint")) then state%continuation_run=.true. + io_continuation=.true. + call log_master_log(LOG_INFO, "This cycle is a continuation from checkpoint: '"//& + trim(options_get_string(options_database, "checkpoint"))//"'") call parse_configuration_checkpoint_netcdf(options_database, & - options_get_string(options_database, "checkpoint"), MPI_COMM_WORLD) + options_get_string(options_database, "checkpoint"), MPI_COMM_WORLD) + call log_master_log(LOG_INFO, "Continuation uses config: '"//& + trim(options_get_string(options_database, "config"))//"'") + call log_master_newline() + + ! Error - appropriate start conditions not met. else - call log_master_log(LOG_ERROR, "You must either provide a configuration file or checkpoint to restart from") + call log_master_log(LOG_ERROR, "You must provide a configuration file for a cold start,"//& + " a checkpoint to restart from, or a reconfig file and a checkpoint to reconfigure from.") call mpi_barrier(MPI_COMM_WORLD) ! All other processes barrier here to ensure 0 displays the message before quit stop end if ! Reload command line arguments to override any stuff in the configuration files - call load_command_line_into_options_database(options_database) + call load_command_line_into_options_database(options_database, .true.) + + ! In the case of reconfig, we won't want it to do this again on a later continuation cycle, so we'll remove + ! the reconfig key, after recording the source file as config. + if (options_has_key(options_database, "reconfig")) then + call options_add(options_database, "config", options_get_string(options_database, "reconfig")) + call options_remove_key(options_database, "reconfig") + call options_remove_key(options_database, "retain_model_time") + end if end subroutine load_model_configuration @@ -155,6 +226,18 @@ subroutine perform_options_compatibility_checks(options_database) call log_master_log(LOG_INFO, "We assume you would like conditional_diagnostics enabled so have enabled the other, too.") end if + !> In order to use time_basis or force_output_on_interval as intended, the cfltest and iobridge + ! components need to be enabled, and the io_server must be enabled. + if (is_present_and_true(options_database, "time_basis") .or. & + is_present_and_true(options_database, "force_output_on_interval") ) then + if ( .not. (is_present_and_true(options_database, "iobridge_enabled") .and. & + is_present_and_true(options_database, "cfltest_enabled") .and. & + is_present_and_true(options_database, "enable_io_server") )) & + call log_master_log(LOG_ERROR, "In order to use time_basis or force_output_on_interval"//& + " as intended, the cfltest and iobridge components need to be enabled, and the"//& + " io_server must be enabled (to permit full function of iobridge).") + end if + end subroutine perform_options_compatibility_checks !> Called by MONC processes to run the MONC model @@ -220,7 +303,7 @@ subroutine perform_model_steps(state, timestepping_time, modeldump_time) timestepping_time=0.0_DEFAULT_PRECISION modeldump_time=0.0_DEFAULT_PRECISION - call init_timestepper() + call init_timestepper(state) logging_mod_level = log_get_logging_level() call execute_initialisation_callbacks(state) @@ -454,4 +537,25 @@ character(len=STRING_LENGTH) function mpi_threading_level_to_string(lvl) mpi_threading_level_to_string="unknown" end if end function mpi_threading_level_to_string + + !> Reads the NetCDF checkpoint file to obtain model time + !! @param filename The filename of the checkpoint file to load + !! @param checkpoint_time The model time from the the checkpoint file + subroutine extract_time_from_checkpoint_file(filename, checkpoint_time) + character(len=*), intent(in) :: filename + real(kind=DEFAULT_PRECISION), intent(out) :: checkpoint_time + + integer :: ncid, variable_id + real(kind=DEFAULT_PRECISION) :: r_data(1) + + call check_status(nf90_open(path = filename, mode = nf90_nowrite, ncid = ncid)) + call check_status(nf90_inq_varid(ncid, TIME_KEY, variable_id)) + call check_status(nf90_get_var(ncid, variable_id, r_data)) + + checkpoint_time = r_data(1) + + call check_status(nf90_close(ncid)) + end subroutine extract_time_from_checkpoint_file + + end module monc_mod diff --git a/model_core/src/state.F90 b/model_core/src/state.F90 index 93362f2e..627cc786 100644 --- a/model_core/src/state.F90 +++ b/model_core/src/state.F90 @@ -20,7 +20,8 @@ module state_mod !> Information about the parallel aspects of the system type, public :: parallel_state_type integer :: processes, & !> Total number of processes - my_rank,& !> My process rank in the system + my_rank,& !> My process rank in the MONC system + my_global_rank,& !> My process rank in the global system neighbour_comm,& !> Neighbour communicator monc_communicator=-1, io_communicator=-1, corresponding_io_server_process integer, dimension(3) :: & @@ -29,7 +30,22 @@ module state_mod logical, dimension(3,2) :: wrapped_around procedure(), nopass, pointer :: decomposition_procedure => null() !> The decomposition procedure to use end type parallel_state_type - + + + !> Information about the non-zero sampling intervals + !! Also used to track radiation timings when time_basis=.true. + type, public :: sampling_interval_type + integer :: interval = 0 ! sampling interval [ts, s if time_basis] + integer, dimension(:), allocatable :: output ! output intervals associated with %interval [s] + ! nint(output_frequency) + integer :: next_time = 0 ! if time_basis, the next sample time for this %interval [s] + ! if force_output_on_interval, the next output time for + ! this %interval [s] + integer :: next_step = 0 ! the next sample timestep for this %interval [ts] + logical :: active = .false. ! .true.: sampling for this %interval on the current timestep + logical :: radiation = .false. ! .true.: this %interval is used to track radiation calculations + end type sampling_interval_type + !> The ModelState which represents the current state of a run !! !! This state is provided to each callback and may be used and modified as required by @@ -38,8 +54,29 @@ module state_mod !! and reactivating MONC. type, public :: model_state_type logical :: continue_timestep=.true., initialised=.false., continuation_run=.false. + + logical :: reconfig_run=.false. ! whether this is the first cycle of a reconfigured + ! continuation run + logical :: retain_model_time=.false. ! by default, reconfigurations have model time + ! reset to zero + logical :: only_compute_on_sample_timestep=.false. ! by default, diagnostics are available + ! on every timestep. When .true., certain diagnostics are only + ! computed on specified diagnostic_sample_timesteps + logical :: diagnostic_sample_timestep=.false. ! diagnostics should be computed on the + ! current timestep + logical :: normal_step=.true. ! the current timestep is a typical timestep, not a special, + ! shortened timestep due to proximity to a + ! diagnostic_sample_timestep + logical :: force_output_on_interval=.false. ! allows the model to adjust the dtm to + ! ensure that samples are sent to the IO + ! server on the output_frequency + ! time_basis=.true. does this automatically + logical :: radiation_timestep=.false. ! The current timestep is used for radiation + ! calculations (determination is time_basis-sensitive) + logical :: print_debug_data=.false. ! Prints data for specific variables/points for + ! debugging. See registry.F90:execute_callbacks logical :: use_viscosity_and_diffusion=.true., & - use_surface_boundary_conditions=.true., backscatter=.true. + use_surface_boundary_conditions=.false., backscatter=.true. type(hashmap_type) :: options_database type(global_grid_type) :: global_grid @@ -51,9 +88,11 @@ module state_mod ! Heating rates from socrates sth_lw, sth_sw type(prognostic_field_type), dimension(:), allocatable :: q, zq, sq, disq + type(prognostic_field_type), dimension(:), allocatable :: tracer, ztracer, stracer ! longwave and shortwave downwelling flux at the surface real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: sw_down_surf, lw_down_surf type(halo_communication_type) :: viscosity_halo_swap_state, diffusion_halo_swap_state + type(sampling_interval_type), dimension(:), allocatable :: sampling real(kind=DEFAULT_PRECISION) :: time=.0_DEFAULT_PRECISION,& ! Model time in seconds dtm,& ! Modeltimestep (s) absolute_new_dtm, & @@ -71,18 +110,26 @@ module state_mod real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: lookup_table_velocity, & lookup_table_ustr, cq, abswmax real(kind=DEFAULT_PRECISION), dimension(:,:), allocatable :: psrce_recv_buffer_x, psrce_recv_buffer_y + real(kind=DEFAULT_PRECISION), dimension(:), allocatable :: tracer_decay_rate, tracer_surf_bc integer :: timestep=1, column_global_x, column_global_y, column_local_x, column_local_y, field_stepping, scalar_stepping, & momentum_stepping, number_q_fields=0, start_timestep=1, type_of_surface_boundary_conditions, lookup_table_entries, & - cfl_frequency, termination_reason + cfl_frequency, termination_reason, last_cfl_timestep=0, reconfig_timestep_offset=0 integer :: water_vapour_mixing_ratio_index=0, liquid_water_mixing_ratio_index=0, & rain_water_mixing_ratio_index=0, ice_water_mixing_ratio_index=0, & snow_water_mixing_ratio_index=0, graupel_water_mixing_ratio_index=0, & + ! integer index for number concentrations + liquid_water_nc_index=0, & + rain_water_nc_index=0, ice_water_nc_index=0, & + snow_water_nc_index=0, graupel_water_nc_index=0, & psrce_x_hs_send_request, psrce_y_hs_send_request, psrce_x_hs_recv_request, psrce_y_hs_recv_request + integer :: n_tracers=0, n_radioactive_tracers=0 + integer :: traj_tracer_index=0, radioactive_tracer_index=0 + integer, dimension(:), allocatable:: tracer_surf_bc_opt logical :: first_timestep_column, last_timestep_column, halo_column, first_nonhalo_timestep_column, & passive_q=.false., passive_th=.false., & use_time_varying_surface_values, use_anelastic_equations, & ! use_anelastic_equations or use Boussinesq saturated_surface, update_dtm=.false., calculate_th_and_q_init, origional_vertical_grid_setup=.true., & - io_server_enabled + io_server_enabled, reinit_tracer=.false., time_basis=.false. logical, allocatable :: l_forceq(:) double precision :: model_start_wtime @@ -90,6 +137,8 @@ module state_mod real(kind=DEFAULT_PRECISION) :: ugal=0.,vgal=0. ! SOCRATES time variables are included in state since they need to be dumped real(kind=DEFAULT_PRECISION) :: rad_last_time=0.0 + ! Global grid location for print_debug_data + integer :: pdd_z=-999, pdd_y=-999, pdd_x=-999 end type model_state_type end module state_mod diff --git a/model_core/src/utils/collections.F90 b/model_core/src/utils/collections.F90 index 92178f87..d8925577 100644 --- a/model_core/src/utils/collections.F90 +++ b/model_core/src/utils/collections.F90 @@ -1033,6 +1033,7 @@ subroutine map_remove(specificmap, key) integer :: key_location class(*), pointer :: raw_map_node + type(mapnode_type), pointer :: ptr raw_map_node=>map_getnode(specificmap, key, key_location) @@ -1042,7 +1043,8 @@ subroutine map_remove(specificmap, key) if (raw_map_node%memory_allocation_automatic) then if (associated(raw_map_node%value)) deallocate(raw_map_node%value) end if - deallocate(raw_map_node) + ptr => raw_map_node + deallocate(ptr) end select call list_remove(specificmap%map_ds, key_location) end if @@ -1411,7 +1413,7 @@ logical function hashmap_contains_key(specificmap, key) end function hashmap_contains_key !> Retrieves the key currently being held at a specific index in the hashmap or "" if the index > map elements. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1436,7 +1438,7 @@ character(len=STRING_LENGTH) function hashmap_key_at(specificmap, i) end function hashmap_key_at !> Retrieves the value held at the specific hashmap index. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1455,7 +1457,7 @@ function hashmap_integer_at(specificmap, i) end function hashmap_integer_at !> Retrieves the value held at the specific hashmap index. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1474,7 +1476,7 @@ function hashmap_string_at(specificmap, i) end function hashmap_string_at !> Retrieves the value held at the specific hashmap index. Converts between precision and from int. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1500,7 +1502,7 @@ function hashmap_real_at(specificmap, i) end function hashmap_real_at !> Retrieves the value held at the specific hashmap index. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1519,7 +1521,7 @@ function hashmap_logical_at(specificmap, i) end function hashmap_logical_at !> Retrieves the value held at the specific hashmap index or null if index > map elements. Note - !! that this is an expensive operation has it has to potentially process all internal hashed lists so avoid if can + !! that this is an expensive operation as it has to potentially process all internal hashed lists so avoid if can !! !! Do not call directly from external module, this is called via the appropriate interface !! @param specificmap The specific hashmap involved @@ -1670,6 +1672,7 @@ subroutine hashmap_remove(specificmap, key) integer :: key_location class(*), pointer :: raw_map_node + type(mapnode_type), pointer :: ptr raw_map_node=>hashmap_getnode(specificmap, key, key_location) @@ -1679,7 +1682,8 @@ subroutine hashmap_remove(specificmap, key) if (raw_map_node%memory_allocation_automatic) then if (associated(raw_map_node%value)) deallocate(raw_map_node%value) end if - deallocate(raw_map_node) + ptr => raw_map_node + deallocate(ptr) end select call list_remove(specificmap%map_ds(get_hashkey(key)), key_location) specificmap%size=specificmap%size-1 @@ -3216,8 +3220,13 @@ character(len=STRING_LENGTH) function iterator_get_next_string(iterator) select type(generic) type is (setnode_type) iterator_get_next_string=generic%key + type is (character(len=*)) + iterator_get_next_string = generic class default - iterator_get_next_string=conv_to_string(generic, .false., STRING_LENGTH) + ! Intel compiler complains about the below line + ! iterator_get_next_string=conv_to_string(generic, .false., STRING_LENGTH) + ! Workaround to make Intel compiler happy + iterator_get_next_string = "" end select else call log_log(LOG_ERROR, "Can not get next string in iterator as iterator has reached end of collection") diff --git a/model_core/src/utils/conversions.F90 b/model_core/src/utils/conversions.F90 index 38e99bd7..c37e11b4 100644 --- a/model_core/src/utils/conversions.F90 +++ b/model_core/src/utils/conversions.F90 @@ -4,6 +4,7 @@ !! easier when handling common inbuilt type conversions. module conversions_mod use datadefn_mod, only : DEFAULT_PRECISION, SINGLE_PRECISION, DOUBLE_PRECISION + implicit none #ifndef TEST_MODE @@ -102,7 +103,8 @@ module conversions_mod end interface conv_is_logical public conv_to_generic, conv_to_string, conv_to_integer, conv_to_real, conv_to_logical, & - conv_is_integer, conv_is_real, conv_is_logical, conv_single_real_to_double, generic_to_double_real + conv_is_integer, conv_is_real, conv_is_logical, conv_single_real_to_double, generic_to_double_real, & + conv_to_uppercase, conv_to_lowercase, string_to_double, count_significant_digits contains @@ -258,19 +260,19 @@ function real_double_to_string(input, decimal_places, exponent, exponent_small_n if (present(exponent)) then if (exponent) then - write(real_double_to_string, '(es30.10)' ) input + write(real_double_to_string, '(es30.15)' ) input transformed=.true. end if end if if (present(exponent_small_numbers)) then if (exponent_small_numbers) then - write(real_double_to_string, '(g30.10)' ) input + write(real_double_to_string, '(g30.15)' ) input transformed=.true. end if end if if (.not. transformed) then - write(real_double_to_string, '(f30.10)' ) input - if (scan(real_double_to_string, "*") .ne. 0) write(real_double_to_string, '(es30.10)' ) input + write(real_double_to_string, '(f30.15)' ) input + if (scan(real_double_to_string, "*") .ne. 0) write(real_double_to_string, '(es30.15)' ) input end if call trim_trailing_zeros(real_double_to_string, 2) if (present(decimal_places)) then @@ -303,7 +305,7 @@ subroutine limit_to_decimal_places(string_to_parse, decimal_places) end if end subroutine limit_to_decimal_places - !> A helper subroutine which trims training zeros from the string after a decimal place + !> A helper subroutine which trims trailing zeros from the string after a decimal place !! this is to make the string more readable when printed out !! @param stringToParse The string to parse which is modified to replace trailing zeros !! @param zerosToRetain The number of trailing (after decimal) zeros to retain @@ -326,11 +328,92 @@ subroutine trim_trailing_zeros(string_to_parse, zeros_to_retain) end if end do if (zero_count .gt. zeros_to_retain) then - string_to_parse(nonzero_hit+zeros_to_retain:)="" + string_to_parse(nonzero_hit+zeros_to_retain+1:)="" end if end if end subroutine trim_trailing_zeros + !> A helper subroutine which counts the number of significant figures in a given string + !! this is to make sure the user is aware if they try to pass in more significant figures + !! than we can represent. + !! @param string_to_parse The string to parse + function count_significant_digits(in_string) + character(len=*), intent(in) :: in_string + character(len=len(in_string)) :: string_to_parse + integer :: count_significant_digits + integer :: decimal_posn, i, zero_count, nonzero_hit, e_posn, n_posn + + ! Initialise + string_to_parse = trim(in_string) + + ! Trim any trailing zeros + call trim_trailing_zeros(string_to_parse, 0) + + ! Remove any exponential notation + e_posn = index(string_to_parse, "e") + if (e_posn .ne. 0) e_posn = index(string_to_parse, "E") + if (e_posn .ne. 0) string_to_parse = string_to_parse(:e_posn-1) + + ! Remove any negative notation + n_posn = index(string_to_parse, "-") + if (n_posn .ne. 0) string_to_parse = string_to_parse(2:) + + ! Remove leading zeros ahead of decimal point + zero_count=0 + decimal_posn=index(string_to_parse, ".") + if (decimal_posn .ne. 0 .and. decimal_posn .lt. len(string_to_parse)) then + do i=1, decimal_posn + if (string_to_parse(i:i) .ne. "0") then + nonzero_hit=i + exit + else + zero_count=zero_count+1 + end if + end do + if (zero_count .gt. 0) then + string_to_parse = string_to_parse(nonzero_hit:) + end if + end if + + + ! If we encountered a non-zero before the decimal, complete calculation + if (nonzero_hit .lt. decimal_posn) then + count_significant_digits = len(trim(string_to_parse)) - 1 + return + end if + + ! Trim remaining decimal from string, if present + if (index(string_to_parse, ".") .eq. 1) then + string_to_parse = string_to_parse(2:) + end if + + ! Remove any remaining leading zeros + zero_count = 0 + do i=1, len(trim(string_to_parse)) + if (string_to_parse(i:i) .ne. "0") then + nonzero_hit=i + exit + else + zero_count=zero_count+1 + end if + end do + if (zero_count .gt. 0) then + string_to_parse = string_to_parse(nonzero_hit:) + end if + + count_significant_digits = len(trim(string_to_parse)) + + end function count_significant_digits + + subroutine check_precision(string) + character(len=*), intent(in) :: string + integer :: options_precision + + options_precision = precision(0.0_DEFAULT_PRECISION) + + + end subroutine check_precision + !> Converts a logical to a string !! @param input The logical to convert into a string !! @returns The string of length 5 characters @@ -459,11 +542,25 @@ real function string_to_real(string) if (scan(string, "E") .ne. 0 .or. scan(string, "e") .ne. 0) then read(string, '(es30.10)' ) string_to_real - else + else read(string, '(f11.2)' ) string_to_real end if end function string_to_real + !> Converts a string to a double precision real + !! @param string The string to convert into a double precision real + !! @returns The double precision real + real(kind=DOUBLE_PRECISION) function string_to_double(string) + character(len=*), intent(in) :: string + + if (scan(string, "E") .ne. 0 .or. scan(string, "e") .ne. 0) then + read(string, '(es30.15)' ) string_to_double + else + read(string, '(f30.15)' ) string_to_double + end if + end function string_to_double + + !> Converts an integer to a real !! @param input The integer to convert into a real !! @returns The real @@ -617,4 +714,46 @@ function logical_to_generic(input, makecopy) logical_to_generic=>input end if end function logical_to_generic + + + !> Converts all lowercase alphabetic characters in a character string to UPPERCASE + !! Other types of characters are returned unchanged + !! @param instring The input string + !! returns a string of the same length as instring + function conv_to_uppercase(instring) result(outstring) + character(len=*), intent(in) :: instring + character(len=len(instring)) :: outstring + character :: single + integer :: inc,jnc + + do inc = 1 , len(instring) + jnc = iachar(instring(inc:inc)) + if ( jnc .ge. iachar("a") .and. jnc .le. iachar("z") ) then + outstring(inc:inc) = achar(iachar(instring(inc:inc)) - 32) + else + outstring(inc:inc) = instring(inc:inc) + end if + end do + end function conv_to_uppercase + + !> CONVERTS ALL UPPERCASE ALPHABETIC CHARACTERS IN A CHARACTER STRING TO lowercase + !! Other types of characters are returned unchanged + !! @param instring The input string + !! returns a string of the same length as instring + function conv_to_lowercase(instring) result(outstring) + character(len=*), intent(in) :: instring + character(len=len(instring)) :: outstring + character :: single + integer :: inc,jnc + + do inc = 1 , len(instring) + jnc = iachar(instring(inc:inc)) + if ( jnc .ge. iachar("A") .and. jnc .le. iachar("Z") ) then + outstring(inc:inc) = achar(iachar(instring(inc:inc)) + 32) + else + outstring(inc:inc) = instring(inc:inc) + end if + end do + end function conv_to_lowercase + end module conversions_mod diff --git a/model_core/src/utils/maths.F90 b/model_core/src/utils/maths.F90 index a55aec24..15f1cd97 100644 --- a/model_core/src/utils/maths.F90 +++ b/model_core/src/utils/maths.F90 @@ -10,7 +10,7 @@ module maths_mod integer(k4b), parameter :: ia=16807,im=2147483647 integer(k4b), parameter :: iq=127773,ir=2836 - public random + public random, sort_1d contains !> returns a scalar random number, the initial seed idum must be negative @@ -39,4 +39,77 @@ real(kind=DEFAULT_PRECISION) function random(idum) if(iy < 0) iy = iy + im random = am*ior(iand(im,ieor(ix,iy)),1) end function random + + + !> Combines with MergeSortMerge sorting algorithm taken from: + ! https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort#Fortran + ! and modified to match local type + !! @A array of values to be sorted, returned sorted + !! @N size of A + !! @T I don't really understand T + recursive subroutine sort_1d(A,N,T) + + integer, intent(in) :: N + real(kind=DEFAULT_PRECISION), dimension(N), intent(in out) :: A + real(kind=DEFAULT_PRECISION), dimension((N+1)/2), intent (out) :: T + + integer :: NA,NB + real(kind=DEFAULT_PRECISION) :: V + + if (N < 2) return + if (N == 2) then + if (A(1) > A(2)) then + V = A(1) + A(1) = A(2) + A(2) = V + endif + return + endif + NA=(N+1)/2 + NB=N-NA + + call sort_1d(A,NA,T) + call sort_1d(A(NA+1),NB,T) + + if (A(NA) > A(NA+1)) then + T(1:NA)=A(1:NA) + call MergeSortMerge(T,NA,A(NA+1),NB,A,N) + endif + return + + end subroutine sort_1d + + + !> Combines with sort_1d sorting algorithm taken from: + ! https://rosettacode.org/wiki/Sorting_algorithms/Merge_sort#Fortran + ! and modified to match local type and renamed to avoid confusion with intrinsic merge + ! All parameters based on sort_1d. No need to modify anything. + subroutine MergeSortMerge(A,NA,B,NB,C,NC) + + integer, intent(in) :: NA,NB,NC ! Normal usage: NA+NB = NC + real(kind=DEFAULT_PRECISION), intent(in out) :: A(NA) ! B overlays C(NA+1:NC) + real(kind=DEFAULT_PRECISION), intent(in) :: B(NB) + real(kind=DEFAULT_PRECISION), intent(in out) :: C(NC) + + integer :: I,J,K + + I = 1; J = 1; K = 1; + do while(I <= NA .and. J <= NB) + if (A(I) <= B(J)) then + C(K) = A(I) + I = I+1 + else + C(K) = B(J) + J = J+1 + endif + K = K + 1 + enddo + do while (I <= NA) + C(K) = A(I) + I = I + 1 + K = K + 1 + enddo + return + + end subroutine MergeSortMerge end module maths_mod diff --git a/submonc.pbs b/submonc.pbs index 53e89797..74ffd37d 100644 --- a/submonc.pbs +++ b/submonc.pbs @@ -1,7 +1,7 @@ #!/bin/bash --login #PBS -N MONC -#PBS -l select=33 -#PBS -l walltime=01:00:00 +#PBS -l select=1 +#PBS -l walltime=00:20:00 #PBS -j oe #PBS -q normal @@ -26,7 +26,6 @@ export TESTCASE=testcases/stable/Fog_Porson2011.mcf export STDOUT_DIR=monc_stdout export CP_DIR=checkpoint_files export RUN_NAME=fog_dump_ -export NPES=np export MAX_CONTINUATION_RUNS=200 ulimit -c unlimited diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_NdFix b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_NdFix index f9a3f06b..2f24c346 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_NdFix +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_NdFix @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt3 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt3 index 7ceac70d..c608a13e 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt3 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt3 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt5 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt5 index 69241be4..a1cd743d 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt5 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_fullproc_iopt5 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt3 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt3 index 2f5cdc5a..c89f9d23 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt3 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt3 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt5 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt5 index 85e52687..ec4855ae 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt5 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_noproc_iopt5 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt3 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt3 index 7fe2e3cd..b912d447 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt3 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt3 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt5 b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt5 index 220b5e71..2aa01ccd 100644 --- a/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt5 +++ b/test_harness/casim_aerosol_processing/lem_bomex/CuNoDamp_2M_passiveproc_iopt5 @@ -44,7 +44,7 @@ diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=1 +check_walltime_frequency=50 walltime_limit=00:20:00 # Advection choices @@ -64,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -112,6 +112,7 @@ z0th=0.0002 # Coriolis fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. geostrophic_wind_rate_of_change_in_x=0.0018 geostrophic_wind_rate_of_change_in_y=0.0 surface_geostrophic_wind_x=-10. @@ -185,8 +186,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -202,8 +203,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_NdFix b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_NdFix index c89e19a7..de742d13 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_NdFix +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_NdFix @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt3 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt3 index f419c68d..29d4ba34 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt3 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt3 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt5 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt5 index 6dc65303..f9a4fbe1 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt5 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_fullproc_iopt5 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt3 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt3 index 61b0d009..880e40ef 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt3 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt3 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt5 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt5 index 2742ea7a..f563b1af 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt5 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_noproc_iopt5 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt3 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt3 index 833b0d48..4b1e49be 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt3 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt3 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt5 b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt5 index c4823654..7652c760 100644 --- a/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt5 +++ b/test_harness/casim_aerosol_processing/rce_deep/RCENoDamp_2M_passiveproc_iopt5 @@ -42,7 +42,7 @@ diag_write_freq=10800. # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="add_checkpoint_file" -check_walltime_frequency=100 +check_walltime_frequency=50 walltime_limit=00:40:00 # limit for defining cloud @@ -72,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_NdFix b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_NdFix index 4cbcf11e..f907aaa4 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_NdFix +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_NdFix @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt3 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt3 index 463eea8c..3ad5de12 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt3 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt3 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt5 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt5 index 7995f718..ffc637d9 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt5 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_fullproc_iopt5 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt3 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt3 index 7b06fd43..f8963db9 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt3 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt3 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt5 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt5 index 7a98acb0..21a932c4 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt5 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_noproc_iopt5 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt3 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt3 index 06cbb233..7010e6c8 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt3 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt3 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt5 b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt5 index b2f956aa..5dafb181 100644 --- a/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt5 +++ b/test_harness/casim_aerosol_processing/stratus_hilletal/ScFull_2M_passiveproc_iopt5 @@ -19,7 +19,7 @@ simplecloud_enabled=.false. casim_enabled=.true. casim_profile_dgs_enabled=.true. coriolis_enabled=.true. -damping_enabled=.true. +damping_enabled=.false. forcing_enabled=.true. galilean_transformation=.true. # Needs debugging randomnoise_enabled=.true. @@ -72,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -93,7 +93,7 @@ use_viscosity_and_diffusion=.true. # Initialization of fields l_init_pl_theta=.true. z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 -f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 l_init_pl_u=.true. z_init_pl_u=0.0, 1601.0 f_init_pl_u=5.0, 5.0 @@ -101,7 +101,7 @@ l_init_pl_v=.false. l_init_pl_q=.true. names_init_pl_q=vapour,accum_sol_mass,accum_sol_number z_init_pl_q=0.0, 600.0, 601.0, 1600.0 -f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 6.1e-3, 1.0e-8, 1.0e-8, 1.0e-8, 1.0e-8, 100.e6, 100.e6, 100.e6, 100.e6 l_matchthref=.false. @@ -167,8 +167,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -184,8 +184,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/continuation.sh b/test_harness/continuation.sh index 081889af..085afcb3 100644 --- a/test_harness/continuation.sh +++ b/test_harness/continuation.sh @@ -1,29 +1,29 @@ determine_if_finished() { - terminated_run=0 - local search_line=`grep "Model run complete due to model time" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $9 }'` - echo "Terminating chain run as MONC has exceeded termination time, model time is $mtime seconds" - terminated_run=1 - else - local search_line=`grep "messages file containing termination command" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $15 }'` - echo "Terminating chain run as MONC was instructed to finish, model time is $mtime seconds" - terminated_run=1 - else - local search_line=`grep "timestep completion" $1` - local found_cont=`echo "$search_line" | wc -c` - if [ $found_cont -gt 1 ]; then - local mtime=`echo "$search_line" | awk '{ print $12 }'` - echo "Terminating chain run as MONC exceeded timestep limit, model time is $mtime seconds" - terminated_run=1 - fi - fi - fi + terminated_run=0 + local search_line=`grep "Model run complete due to model time" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $9 }'` + echo "Terminating chain run as MONC has exceeded termination time, model time is $mtime seconds" + terminated_run=1 + else + local search_line=`grep "messages file containing termination command" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $15 }'` + echo "Terminating chain run as MONC was instructed to finish, model time is $mtime seconds" + terminated_run=1 + else + local search_line=`grep "timestep completion" $1` + local found_cont=`echo "$search_line" | wc -c` + if [ $found_cont -gt 1 ]; then + local mtime=`echo "$search_line" | awk '{ print $12 }'` + echo "Terminating chain run as MONC exceeded timestep limit, model time is $mtime seconds" + terminated_run=1 + fi + fi + fi } RUN_MONC_CONFIG=0 @@ -31,58 +31,110 @@ RUN_MONC_CP=0 outputid=0 run_monc() { - if [ ! -f $MONC_EXEC ]; then - echo "Error - executable $MONC_EXEC does not exist" - exit - fi - if [ ! -z "$crun" ] && [ $crun -ge $MAX_CONTINUATION_RUNS ]; then - echo "This has been run $crun times which exceeds your configured maximum number of runs" - exit - fi - - local output_filename=`ls -rt1 $STDOUT_DIR/output_$RUN_NAME* 2> /dev/null | tail -1` - local checkpoint_filename=`ls -rt1 $CP_DIR/$RUN_NAME*.nc 2> /dev/null | tail -1` - - if [ ! -z "$output_filename" ] && [ ! -z "$checkpoint_filename" ]; then - determine_if_finished $output_filename - if [ $terminated_run -eq 0 ]; then - outputid=`sed 's/.*_//' <<< "$output_filename"` - if [ -z "$crun" ] || [ $crun -ne $outputid ]; then - if [ -z "$cpfile" ] || [ "$cpfile" != "$checkpoint_filename" ]; then - RUN_MONC_CP=1 - else - echo "Not running MONC as the latest checkpoint file is the same that the previous run executed with" - exit - fi - else - echo "Not running MONC as there is no new output from the previous run, there was probably a submission error" - exit - fi - fi - else - if [ -z "$crun" ]; then - RUN_MONC_CONFIG=1 - else - echo "Error, this is configured as a continuation run but output and/or checkpoint file not found, check your script parameters" - exit - fi - fi - - if [ $RUN_MONC_CONFIG -eq 1 ] || [ $RUN_MONC_CP -eq 1 ]; then - export OMP_NUM_THREADS=1 - export MPICH_MAX_THREAD_SAFETY=multiple - - local submittedId=$(qsub -W depend=afterany:$PBS_JOBID -v crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME) - - ((outputid++)) - local outputfn=$STDOUT_DIR"/output_"$RUN_NAME$outputid - - if [ $RUN_MONC_CONFIG -eq 1 ]; then - echo "Start MONC with configuration file $config" - eval 'aprun -n $NPES $MONC_EXEC --config=$TESTCASE &> $outputfn' - else - echo "Restarting MONC with checkpoint file $checkpoint_filename" - eval 'aprun -n $NPES $MONC_EXEC --checkpoint=$checkpoint_filename &> $outputfn' - fi + + # Check for executable + if [ ! -f $MONC_EXEC ]; then + echo "Error - executable $MONC_EXEC does not exist" + exit + fi + + # Check crun limit + if [ ! -z "$crun" ] && [ $crun -ge $MAX_CONTINUATION_RUNS ]; then + echo "This has been run $crun times which exceeds your configured maximum number of runs" + exit + fi + + # Check contents of directories to determine what to submit + local output_filename=`ls -rt1 $STDOUT_DIR/output_$RUN_NAME* 2> /dev/null | tail -1` + local checkpoint_filename=`ls -rt1 $CP_DIR/$RUN_NAME*.nc 2> /dev/null | tail -1` + + # Action on BOTH file types present + if [ ! -z "$output_filename" ] && [ ! -z "$checkpoint_filename" ]; then + determine_if_finished $output_filename + if [ $terminated_run -eq 0 ]; then + outputid=`sed 's/.*_//' <<< "$output_filename"` + if [ -z "$crun" ] || [ $crun -ne $outputid ]; then + # Check whether present checkpoint matches that previously used ($cpfile is saved) + if [ -z "$cpfile" ] || [ "$cpfile" != "$checkpoint_filename" ]; then + RUN_MONC_CP=1 + else + echo "Not running MONC as the latest checkpoint file is the same that the previous run executed with" + exit + fi + else + echo "Not running MONC as there is no new output from the previous run, there was probably a submission error" + exit + fi + fi + elif [ ! -z "$checkpoint_filename" ] && [ -z "$crun" ] && [ -z "$cpfile" ]; then + RUN_MONC_CONFIG=2 + else + if [ -z "$crun" ]; then + RUN_MONC_CONFIG=1 + else + echo "Error, this is configured as a continuation run but output and/or checkpoint file not found, check your script parameters" + exit + fi + fi + + if [ $RUN_MONC_CONFIG -ge 1 ] || [ $RUN_MONC_CP -eq 1 ]; then + export OMP_NUM_THREADS=1 + export MPICH_MAX_THREAD_SAFETY=multiple + + # Configure submission based on local machine scheduler + # pbs + if [ -x "$(command -v qsub)" ] ; then + local submittedId=$(qsub -W depend=afterany:$PBS_JOBID -v crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME) + local jobId=$PBS_JOBID + local jobName=$PBS_JOBNAME + local cmd="aprun -n ${NPES}" + local atpWait="" + + # Slurm + elif [ -x "$(command -v sbatch)" ] ; then + local submittedId=$(sbatch --dependency=afterany:$SLURM_JOB_ID --export=crun=$outputid,cpfile=$checkpoint_filename $SUBMISSION_SCRIPT_NAME | awk '{ print $4 }') + local jobId=$SLURM_JOB_ID + local jobName=$SLURM_JOB_NAME + sb_flags='--unbuffered --cpu-bind=cores --distribution=block:block --hint=nomultithread' + local cmd="srun $sb_flags" + local atpWait=" & ; wait" + else + echo "Error. Unknown batch submission protocol." + exit + fi + + # Increment the stdout suffix + ((outputid++)) + local outputfn=$STDOUT_DIR"/output_"$RUN_NAME$outputid + + # Write job information to stdout + echo "This cycle is controlled by:$SUBMISSION_SCRIPT_NAME" > $outputfn + echo "This cycle job:$jobId:$jobName" >> $outputfn + echo "Next cycle job:$submittedId" >> $outputfn + echo "" >> $outputfn + + echo "" + + + # Cold start + if [ $RUN_MONC_CONFIG -eq 1 ]; then + echo "Start MONC with configuration file $TESTCASE" + eval '$cmd $MONC_EXEC --config=$TESTCASE >> $outputfn 2>&1 $atpWait' + + # Reconfiguration + elif [ $RUN_MONC_CONFIG -eq 2 ]; then + echo "Reconfigure MONC with configuration file:" + echo " $TESTCASE and its linked xml file." + echo "Starting from checkpoint file:" + echo " $checkpoint_filename" + echo "[ERROR] Reconfiguration shouldn't be run in the test_harness" + echo "[ERROR] Reconfiguration shouldn't be run in the test_harness" >> $outputfn +# eval '$cmd $MONC_EXEC --reconfig=$TESTCASE --checkpoint=$checkpoint_filename --retain_model_time=.true. >> $outputfn 2>&1 $atpWait' + + # Restart + else + echo "Restarting MONC with checkpoint file $checkpoint_filename" + eval '$cmd $MONC_EXEC --checkpoint=$checkpoint_filename >> $outputfn 2>&1 $atpWait' + fi fi } diff --git a/test_harness/monc_casim_socrates/rce/RCENoDampForce_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCENoDampForce_2M_Ndfix index 98beb21e..9256b04f 100644 --- a/test_harness/monc_casim_socrates/rce/RCENoDampForce_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCENoDampForce_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -71,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -166,7 +167,7 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/rce/RCENoDampNoUVforce_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCENoDampNoUVforce_2M_Ndfix index 14aac973..08cd5150 100644 --- a/test_harness/monc_casim_socrates/rce/RCENoDampNoUVforce_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCENoDampNoUVforce_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -71,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -166,7 +167,7 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/rce/RCENoDampSocrates_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCENoDampSocrates_2M_Ndfix index 1175a9cc..0efc4b36 100644 --- a/test_harness/monc_casim_socrates/rce/RCENoDampSocrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCENoDampSocrates_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -72,8 +73,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -192,8 +193,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +210,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/rce/RCENoDamp_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCENoDamp_2M_Ndfix index b50a73b4..d5225e1e 100644 --- a/test_harness/monc_casim_socrates/rce/RCENoDamp_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCENoDamp_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -71,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -166,7 +167,7 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/rce/RCESocrates_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCESocrates_2M_Ndfix index 69b2d5a6..1eadd236 100644 --- a/test_harness/monc_casim_socrates/rce/RCESocrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCESocrates_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -72,8 +73,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -193,8 +194,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -210,8 +211,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/rce/RCE_2M_Ndfix b/test_harness/monc_casim_socrates/rce/RCE_2M_Ndfix index bb8dff1d..cdff2575 100644 --- a/test_harness/monc_casim_socrates/rce/RCE_2M_Ndfix +++ b/test_harness/monc_casim_socrates/rce/RCE_2M_Ndfix @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -71,8 +72,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=83 dxx=500 dyy=500 @@ -166,7 +167,7 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/shallow_convection/CuFull_2M_Ndfix b/test_harness/monc_casim_socrates/shallow_convection/CuFull_2M_Ndfix index 7da0ff3d..daab92ec 100644 --- a/test_harness/monc_casim_socrates/shallow_convection/CuFull_2M_Ndfix +++ b/test_harness/monc_casim_socrates/shallow_convection/CuFull_2M_Ndfix @@ -4,6 +4,7 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -63,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -141,7 +142,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_2M_Ndfix b/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_2M_Ndfix index f2e09ee7..39c95de5 100644 --- a/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_2M_Ndfix +++ b/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_2M_Ndfix @@ -4,6 +4,7 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -63,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -141,7 +142,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_Socrates_2M_Ndfix b/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_Socrates_2M_Ndfix index 5f6c1799..e68764ee 100644 --- a/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_Socrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/shallow_convection/CuNoDamp_Socrates_2M_Ndfix @@ -4,6 +4,7 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -64,8 +65,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -186,8 +187,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -203,8 +204,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/shallow_convection/CuNoSubDamp_2M_Ndfix b/test_harness/monc_casim_socrates/shallow_convection/CuNoSubDamp_2M_Ndfix index e854d659..67b49c11 100644 --- a/test_harness/monc_casim_socrates/shallow_convection/CuNoSubDamp_2M_Ndfix +++ b/test_harness/monc_casim_socrates/shallow_convection/CuNoSubDamp_2M_Ndfix @@ -4,6 +4,7 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -63,8 +64,8 @@ cfl_dtmmin=0.001 thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=76 dxx=100 dyy=100 @@ -141,7 +142,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_casim_socrates/stratus/ScFull_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScFull_2M_Ndfix index 235b1b42..fbad2880 100644 --- a/test_harness/monc_casim_socrates/stratus/ScFull_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScFull_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 diff --git a/test_harness/monc_casim_socrates/stratus/ScFull_Socrates_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScFull_Socrates_2M_Ndfix index 71a1b62c..33d763c3 100644 --- a/test_harness/monc_casim_socrates/stratus/ScFull_Socrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScFull_Socrates_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -164,8 +164,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix index be82af66..3c8d6f12 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 diff --git a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_2M_Ndfix index 1fc8f944..cc33279c 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -164,8 +164,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_clearsky_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_clearsky_2M_Ndfix index 6a463866..d0c2e173 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_clearsky_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_clearsky_2M_Ndfix @@ -70,8 +70,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -165,8 +165,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 5 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_cloudysky_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_cloudysky_2M_Ndfix index 9efcd844..37d93064 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_cloudysky_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoDamp_Socrates_cloudysky_2M_Ndfix @@ -70,8 +70,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -165,8 +165,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_2M_Ndfix index 833247fa..29f26b19 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 diff --git a/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_Socrates_2M_Ndfix b/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_Socrates_2M_Ndfix index 62f29ed6..390c67e5 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_Socrates_2M_Ndfix +++ b/test_harness/monc_casim_socrates/stratus/ScNoSubDamp_Socrates_2M_Ndfix @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -164,8 +164,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix_diurnal b/test_harness/monc_casim_socrates/stratus_diurnal/ScNoDamp_2M_Ndfix_diurnal similarity index 95% rename from test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix_diurnal rename to test_harness/monc_casim_socrates/stratus_diurnal/ScNoDamp_2M_Ndfix_diurnal index 55857f46..9fbac8c7 100644 --- a/test_harness/monc_casim_socrates/stratus/ScNoDamp_2M_Ndfix_diurnal +++ b/test_harness/monc_casim_socrates/stratus_diurnal/ScNoDamp_2M_Ndfix_diurnal @@ -69,8 +69,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=50 dxx=50 dyy=50 @@ -164,8 +164,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,8 +181,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/test_harness/monc_ecse/bubble/WarmPw b/test_harness/monc_ecse/bubble/WarmPw new file mode 100644 index 00000000..5b8d47d6 --- /dev/null +++ b/test_harness/monc_ecse/bubble/WarmPw @@ -0,0 +1,139 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +cfltest_enabled=.true. +checkpointer_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. +pw_advection_enabled=.true. +tvd_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.false. +coriolis_enabled=.false. +damping_enabled=.false. +forcing_enabled=.false. +galilean_transformation=.true. # Needs debugging +randomnoise_enabled=.false. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. + +# Test case source code +tank_experiments_enabled=.true. + +# Add bubble to initialisation +initialisation_stage_ordering+=tank_experiments +dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields + +# Decomposition configuration +decomposition_method = twodim + +#Advection +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# Control configuration + +display_synopsis_frequency=100 +termination_time=3700. +dtm=2.0 +nsmth=20 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=20 +3d_sampling_frequency=300 +mm=600.0 +mm1=20.0 +diag_write_freq=3600.0 + + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=1 +walltime_limit=00:05:00 + +# iterative solver +tolerance=1.e-4 +max_iterations=500 +preconditioner_iterations=0 +include_top_level=.true. +symm_prob=.false. + +# roughness length so the same as LEM +z0=2.0e-4 +z0th=2.0e-4 + +# CFL configuration +cfl_frequency=1000 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=2.0 +cfl_dtmmin=0.1 + +# Simple setup configuration +thref0=300.0 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=81 +dxx=100 +dyy=100 +zztop=4000.0 +kgd=1,81 +hgd=0.0,4000.0 + +enable_theta=.true. +number_q_fields=0 +use_anelastic_equations=.false. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.true. +backscatter=.false. +use_viscosity_and_diffusion=.true. +use_surface_fluxes=.false. +use_time_varying_surface_values=.false. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 4000. +f_init_pl_theta=300.0, 300.0 +l_init_pl_u=.false. +l_init_pl_v=.false. +l_init_pl_q=.false. + +l_matchthref=.false. + +# Set up the tank + +l_bubbles=.true. +l_splittank=.false. +l_sources=.false. + +bubble_x_cen=3200.0 +bubble_y_cen=3200.0 +bubble_z_cen=1000.0 +bubble_x_rad=600.0 +bubble_y_rad=600.0 +bubble_z_rad=600.0 +bubble_th_pert=+0.1 +bubble_edge=0.25 +bubble_lrandom=.false. +bubble_lmoist=.false. diff --git a/test_harness/monc_ecse/rce/RCENoDampSocrates_2M_Ndfix b/test_harness/monc_ecse/rce/RCENoDampSocrates_2M_Ndfix new file mode 100644 index 00000000..0c793690 --- /dev/null +++ b/test_harness/monc_ecse/rce/RCENoDampSocrates_2M_Ndfix @@ -0,0 +1,230 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.false. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +casim_enabled=.true. +th_advection_enabled=.true. +iobridge_enabled=.true. +profile_diagnostics_enabled=.true. +scalar_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. +socrates_couple_enabled=.true. + +# Control configuration +display_synopsis_frequency=2000 +termination_time=22000. +dtm=0.75 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=100 +3d_sampling_frequency=1200 +mm=1800.0 +mm1=120.0 +diag_write_freq=10800.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=50 +walltime_limit=00:20:00 + +# limit for defining cloud +qlcrit = 1.e-5 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=100 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.75 +cfl_dtmmin=.001 + +# not convinced this works as fixing the gal +# adds the gal to the wind, this is not correct. +# Set as false for now +fix_ugal=.false. +ugal=-5.0 +fix_vgal=.false. +vgal=0.0 + +# Simple setup configuration +thref0=298.7259 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=83 +dxx=500 +dyy=500 +zztop=20000.0 +kgd=9,17,75,83 +hgd=500.,1500.,16000.,20000. +nsmth=20 +galilean_transformation=.true. + +enable_theta=.true. +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0., 800., 1200.,3500.,4100.,8200.,12500.,13500.,14200.,16000.,20000. +f_init_pl_theta=297.0,297.0,300.0,306.5,311.0,318.0,328.5, 333.0, 340.0, 371.0, 483.0 +l_init_pl_u=.true. +z_init_pl_u=0.0, 20000. +f_init_pl_u=-5.0, -5.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., 8150., 9500., 10500., 11500., 12250., 13000., 14000., 18000., 20000. +f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 + +l_matchthref=.true. +l_thref_zero_buoy=.false. + +# Smagorinsky configuration +# Default values for the smagorinsky subgrid constants +# smag-subb=40.0 +# smag-subc=16.0 +# The subgrid constant values for the 'conventional' subgrid model +# of Brown (1999) +smag-subb=1.43 +smag-subc=1.43 + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 7000.0, 7001.0, 20000. +f_rand_pl_theta=0.1, 0.1, 0.0000, 0.0000 +names_rand_pl_q=vapour +z_rand_pl_q=0.0, 7000.0, 7001.0, 20000. +f_rand_pl_q=0.025e-3, 0.025e-3, 0.0000, 0.0000 + +# Simple cloud +max_height_cloud=30000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +fcoriol=0.0000376 +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-5.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.0002 +zdmp=17000.0 +hdmp=5000.0 + +# Subsidence profile +l_subs_pl_theta=.false. +l_subs_pl_q=.false. + +# Large-scale forcing +# Add om a component to force theta +l_constant_forcing_theta=.false. +l_constant_forcing_q=.false. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=1 +constant_forcing_type_v=1 + +relax_to_initial_u_profile=.true. +relax_to_initial_v_profile=.true. + +forcing_timescale_u=21600. +forcing_timescale_v=21600. + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 1 +surface_boundary_input_times = 0 +surface_temperatures = 300. +surface_latent_heat_flux = 0. +surface_sensible_heat_flux = 0. + +#CASIM options +number_q_fields=11 +option=22222 +l_warm=.false. + +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. + +# SOCRATES inputs +mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.t.nc +mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc +mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc +# Add options for rad_cntrl +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 + +# 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) +i_cloud_representation = 2 + +## Time and location variables for socrates +l_360 = .true. # 360 days in year as opposed to 365 (a UM thing + # in the LEM, is this still required??) +l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed +l_no_solar = .true. +solar_fixed = 1361.0 # prescribed insolation value +sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) +latitude = 33.0 # latitude for the location of radiation calc +longitude = -123.0 # longitude for the location of radiation calc +rad_start_year = 1987.0 # simulation year for earth sun distance +rad_start_day = 180.0 # day number from January 1st +rad_start_time = 10.0 # Start time for the radiation +rad_interval = 100 # Radiation calculation interval [integer, unit depends on time_basis] + +## Surface albedo variables for socrates +l_variable_srf_albedo = .false. # not coded yet but will allow variable + # surface albedo with solar zenith angle +surface_albedo = 0.04 # surface albedo (fixed in time) + +mphys_nq_l=1 # cloud liquid mass +mphys_nd_l=0 # cloud drop number +mphys_nq_r=1 # rain mass +mphys_nq_i=1 # ice mass +mphys_nq_s=1 # snow mass +mphys_nq_g=1 # graupel mass + +l_fix_re = .true. +fixed_cloud_re = 10.0 # effective radius for cloud droplets 10 microns +fixed_ice_re = 30.0 # effective radius for ice 30 microns diff --git a/test_harness/monc_ecse/shallow_convection/CuNoDamp b/test_harness/monc_ecse/shallow_convection/CuNoDamp new file mode 100644 index 00000000..a09bf3f5 --- /dev/null +++ b/test_harness/monc_ecse/shallow_convection/CuNoDamp @@ -0,0 +1,174 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +checkpointer_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.false. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. + +# Control configuration +display_synopsis_frequency=100 +termination_time=21610. +dtm=0.4 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=20 +3d_sampling_frequency=4500 +mm=1800.0 +mm1=20.0 +diag_write_freq=10800.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=20 +walltime_limit=00:20:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=10 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.001 + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=298.7 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=76 +dxx=100 +dyy=100 +zztop=3000.0 +kgd=1,76 +hgd=0.0,3000.0 +nsmth=80 +galilean_transformation=.true. + +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 520.0, 1480., 2000., 3000. +f_init_pl_theta=298.7, 298.7, 302.4, 308.2, 311.85 +l_init_pl_u=.true. +z_init_pl_u=0.0, 700.0, 3000. +f_init_pl_u=-8.75, -8.75, -4.61 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 520.0, 1480., 2000., 3000. +f_init_pl_q=17.0e-3, 16.3e-3, 10.7e-3, 4.2e-3, 3.0e-3 + +l_matchthref=.false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 500.0, 501.0, 3000. +f_rand_pl_theta=0.5, 0.5, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=3000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. +geostrophic_wind_rate_of_change_in_x=0.0018 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-10. +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=2300.0 +hdmp=2000.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1500.0, 2100.0, 3000. +f_subs_pl=0.0, -0.0065, 0.0, 0.0 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=1 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# Large-scale forcing +l_constant_forcing_theta=.true. +l_constant_forcing_q=.true. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# Unit options are K/s or K/day +units_theta_force=K/day +l_constant_forcing_theta_height=.true. +z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. +f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 + +names_constant_forcing_q=vapour +z_force_pl_q=0.0, 300.0, 500.0, 3000. +f_force_pl_q=-1.2e-5, -1.2e-5, 0.0, 0.0 +# Unit options are kg/kg/s, kg/kg/day, g/kg/s or g/kg/day +units_q_force=g/kg/s + +convert_input_theta_from_temperature=.true. + +convert_input_specific_to_mixingratio=.true. # Not yet implemented + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=0 +constant_forcing_type_v=0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 0 +surface_boundary_input_times = 0 +surface_latent_heat_flux = 130.052 +surface_sensible_heat_flux = 8.04 diff --git a/test_harness/monc_ecse/shallow_convection/CuNoDamp_2M_Ndfix b/test_harness/monc_ecse/shallow_convection/CuNoDamp_2M_Ndfix new file mode 100644 index 00000000..39c95de5 --- /dev/null +++ b/test_harness/monc_ecse/shallow_convection/CuNoDamp_2M_Ndfix @@ -0,0 +1,183 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +checkpointer_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.false. +casim_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.false. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. + +# Control configuration +display_synopsis_frequency=100 +termination_time=21610. +dtm=0.4 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=75 +3d_sampling_frequency=450 +mm=1800.0 +mm1=60.0 +diag_write_freq=10800.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=50 +walltime_limit=00:20:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=10 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.001 + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=298.7 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=76 +dxx=100 +dyy=100 +zztop=3000.0 +kgd=1,76 +hgd=0.0,3000.0 +nsmth=80 +galilean_transformation=.true. + +enable_theta=.true. +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 520.0, 1480., 2000., 3000. +f_init_pl_theta=298.7, 298.7, 302.4, 308.2, 311.85 +l_init_pl_u=.true. +z_init_pl_u=0.0, 700.0, 3000. +f_init_pl_u=-8.75, -8.75, -4.61 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 520.0, 1480., 2000., 3000. +f_init_pl_q=17.0e-3, 16.3e-3, 10.7e-3, 4.2e-3, 3.0e-3 + +l_matchthref=.false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 500.0, 501.0, 3000. +f_rand_pl_theta=0.5, 0.5, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=3000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +fcoriol=0.0000376 +baroclinicity_use_geostrophic_shear=.true. +geostrophic_wind_rate_of_change_in_x=0.0018 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-10. +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=2300.0 +hdmp=2000.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1500.0, 2100.0, 3000. +f_subs_pl=0.0, -0.0065, 0.0, 0.0 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=1 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# Large-scale forcing +l_constant_forcing_theta=.true. +l_constant_forcing_q=.true. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# Unit options are K/s or K/day +units_theta_force=K/day +l_constant_forcing_theta_height=.true. +z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. +f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 + +names_constant_forcing_q=vapour +z_force_pl_q=0.0, 300.0, 500.0, 3000. +f_force_pl_q=-1.2e-5, -1.2e-5, 0.0, 0.0 +# Unit options are kg/kg/s, kg/kg/day, g/kg/s or g/kg/day +units_q_force=g/kg/s + +convert_input_theta_from_temperature=.true. + +convert_input_specific_to_mixingratio=.true. # Not yet implemented + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=0 +constant_forcing_type_v=0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 0 +surface_boundary_input_times = 0 +surface_latent_heat_flux = 130.052 +surface_sensible_heat_flux = 8.04 + +#CASIM options +number_q_fields=5 +option=22000 +l_warm=.true. + +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. diff --git a/test_harness/monc_ecse/stratus/ScNoDamp b/test_harness/monc_ecse/stratus/ScNoDamp new file mode 100644 index 00000000..afc218bd --- /dev/null +++ b/test_harness/monc_ecse/stratus/ScNoDamp @@ -0,0 +1,157 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +cfltest_enabled=.true. +checkpointer_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.false. +forcing_enabled=.true. +galilean_transformation=.true. # Needs debugging +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.false. +lwrad_exponential_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. + +# Control configuration + +display_synopsis_frequency=100 +nn_consolidation=1 +termination_time=7500. +dtm=0.4 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=20 +3d_sampling_frequency=4500 +mm=1800.0 +mm1=20.0 +diag_write_freq=7260.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=20 +walltime_limit=00:05:00 +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=1000 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.001 + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=288.0 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=50 +dxx=50 +dyy=50 +zztop=1600.0 +kgd=10, 30, 40, 50 +hgd=300., 700., 1000., 1600. +nsmth=40 +rmlmax=6.9 +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.false. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 +f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +l_init_pl_u=.true. +z_init_pl_u=0.0, 1601.0 +f_init_pl_u=5.0, 5.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 600.0, 601.0, 1600.0 +f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3 + +l_matchthref=.false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 600.0, 601.0, 1600. +f_rand_pl_theta=0.1, 0.1, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=1600. + +# physical constants +z0=0.002 +z0th=0.0002 + +# Coriolis +fcoriol=0.00007 +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=5.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=1000.0 +hdmp=650.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1600.0 +f_subs_pl=0.000005,0.000005 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=0 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +# type_of_surface_boundary_conditions=PRESCRIBED_SURFACE_VALUE=1 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 1 +surface_boundary_input_times = 0 +surface_temperatures = 288.2 +#surface_latent_heat_flux = 130.052 +#surface_sensible_heat_flux = 8.04 + +# Radiation settings - variables and switches for exponential radiation (LWEXP) +longwave_exp_decay = 130.0 # longwave rad exponential decay factor +cltop_longwave_flux = 70.0 # cloud top longwave flux (Wm-2) +clbase_longwave_flux = 0.0 # cloud base longwave flux (Wm-2) + + diff --git a/test_harness/monc_ecse/stratus/ScNoDamp_2M_Ndfix b/test_harness/monc_ecse/stratus/ScNoDamp_2M_Ndfix new file mode 100644 index 00000000..3c8d6f12 --- /dev/null +++ b/test_harness/monc_ecse/stratus/ScNoDamp_2M_Ndfix @@ -0,0 +1,162 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +cfltest_enabled=.true. +checkpointer_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.false. +casim_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.false. +forcing_enabled=.true. +galilean_transformation=.true. # Needs debugging +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.false. +lwrad_exponential_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. +socrates_couple_enabled=.false. + +# Control configuration + +display_synopsis_frequency=100 +nn_consolidation=1 +termination_time=7500. +dtm=0.4 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="add_diagnostic_file" +moncs_per_io_server=8 +sampling_frequency=75 +3d_sampling_frequency=4500 +mm=1800.0 +mm1=60.0 +diag_write_freq=7260.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="add_checkpoint_file" +check_walltime_frequency=50 +walltime_limit=00:20:00 +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=1000 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.001 + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=288.0 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=50 +dxx=50 +dyy=50 +zztop=1600.0 +kgd=10, 30, 40, 50 +hgd=300., 700., 1000., 1600. +nsmth=40 +rmlmax=6.9 +enable_theta=.true. +use_anelastic_equations=.false. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 +f_init_pl_theta=287.75, 287.75, 299.75, 306.45 +l_init_pl_u=.true. +z_init_pl_u=0.0, 1601.0 +f_init_pl_u=5.0, 5.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 600.0, 601.0, 1600.0 +f_init_pl_q=9.1e-3, 9.1e-3, 6.1e-3, 5.6e-3 + +l_matchthref=.false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 600.0, 601.0, 1600. +f_rand_pl_theta=0.1, 0.1, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=1600. + +# physical constants +z0=0.002 +z0th=0.0002 + +# Coriolis +fcoriol=0.00007 +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=5.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=1000.0 +hdmp=650.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1600.0 +f_subs_pl=0.000005,0.000005 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=0 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +# type_of_surface_boundary_conditions=PRESCRIBED_SURFACE_VALUE=1 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 1 +surface_boundary_input_times = 0 +surface_temperatures = 288.2 +#surface_latent_heat_flux = 130.052 +#surface_sensible_heat_flux = 8.04 + +#CASIM options +number_q_fields=5 +option=22000 +l_warm=.true. + +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. + + diff --git a/test_harness/monc_main/bubble/ColdNoSmagGalAdv b/test_harness/monc_main/bubble/ColdNoSmagGalAdv index 2767a225..be132270 100644 --- a/test_harness/monc_main/bubble/ColdNoSmagGalAdv +++ b/test_harness/monc_main/bubble/ColdNoSmagGalAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.false. tvd_advection_enabled=.false. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdNoSmagGalMomAdv b/test_harness/monc_main/bubble/ColdNoSmagGalMomAdv index ea54a014..85e84c90 100644 --- a/test_harness/monc_main/bubble/ColdNoSmagGalMomAdv +++ b/test_harness/monc_main/bubble/ColdNoSmagGalMomAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.false. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdPw b/test_harness/monc_main/bubble/ColdPw index 790e4205..6d02658d 100644 --- a/test_harness/monc_main/bubble/ColdPw +++ b/test_harness/monc_main/bubble/ColdPw @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdPwNoSmag b/test_harness/monc_main/bubble/ColdPwNoSmag index 26b29259..532fcbff 100644 --- a/test_harness/monc_main/bubble/ColdPwNoSmag +++ b/test_harness/monc_main/bubble/ColdPwNoSmag @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdPwNoSmagGal b/test_harness/monc_main/bubble/ColdPwNoSmagGal index 406133c3..2dbd26a4 100644 --- a/test_harness/monc_main/bubble/ColdPwNoSmagGal +++ b/test_harness/monc_main/bubble/ColdPwNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdPwNoSmagGalScalAdv b/test_harness/monc_main/bubble/ColdPwNoSmagGalScalAdv index 64452613..26302af7 100644 --- a/test_harness/monc_main/bubble/ColdPwNoSmagGalScalAdv +++ b/test_harness/monc_main/bubble/ColdPwNoSmagGalScalAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.false. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdPwScalMomNoSmagGal b/test_harness/monc_main/bubble/ColdPwScalMomNoSmagGal index 4dbb70f2..3d30b8b8 100644 --- a/test_harness/monc_main/bubble/ColdPwScalMomNoSmagGal +++ b/test_harness/monc_main/bubble/ColdPwScalMomNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdTvd b/test_harness/monc_main/bubble/ColdTvd index 7fe9e236..549b553c 100644 --- a/test_harness/monc_main/bubble/ColdTvd +++ b/test_harness/monc_main/bubble/ColdTvd @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdTvdNoSmag b/test_harness/monc_main/bubble/ColdTvdNoSmag index a29b8ad7..e9917302 100644 --- a/test_harness/monc_main/bubble/ColdTvdNoSmag +++ b/test_harness/monc_main/bubble/ColdTvdNoSmag @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/ColdTvdNoSmagGal b/test_harness/monc_main/bubble/ColdTvdNoSmagGal index fb256653..e88f8ec4 100644 --- a/test_harness/monc_main/bubble/ColdTvdNoSmagGal +++ b/test_harness/monc_main/bubble/ColdTvdNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/IterColdPwNoSmagGal b/test_harness/monc_main/bubble/IterColdPwNoSmagGal index d40bd6a2..4c4f2863 100644 --- a/test_harness/monc_main/bubble/IterColdPwNoSmagGal +++ b/test_harness/monc_main/bubble/IterColdPwNoSmagGal @@ -4,8 +4,10 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. checkpointer_enabled=.true. -fftsolver_enabled=.false. -iterativesolver_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -71,7 +73,7 @@ walltime_limit=00:05:00 tolerance=1.e-6 max_iterations=999 preconditioner_iterations=2 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/IterColdTvdNoSmagGal b/test_harness/monc_main/bubble/IterColdTvdNoSmagGal index 8b197f19..379e3a68 100644 --- a/test_harness/monc_main/bubble/IterColdTvdNoSmagGal +++ b/test_harness/monc_main/bubble/IterColdTvdNoSmagGal @@ -4,8 +4,10 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. checkpointer_enabled=.true. -fftsolver_enabled=.false. -iterativesolver_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -71,7 +73,7 @@ walltime_limit=00:05:00 tolerance=1.e-6 max_iterations=999 preconditioner_iterations=2 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/IterWarmPwNoSmagGal b/test_harness/monc_main/bubble/IterWarmPwNoSmagGal index 7b8b7589..3cbb2606 100644 --- a/test_harness/monc_main/bubble/IterWarmPwNoSmagGal +++ b/test_harness/monc_main/bubble/IterWarmPwNoSmagGal @@ -4,8 +4,10 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. checkpointer_enabled=.true. -fftsolver_enabled=.false. -iterativesolver_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -71,7 +73,7 @@ walltime_limit=00:05:00 tolerance=1.e-6 max_iterations=999 preconditioner_iterations=2 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/IterWarmTvdNoSmagGal b/test_harness/monc_main/bubble/IterWarmTvdNoSmagGal index 9b2afa7b..18f1fb42 100644 --- a/test_harness/monc_main/bubble/IterWarmTvdNoSmagGal +++ b/test_harness/monc_main/bubble/IterWarmTvdNoSmagGal @@ -4,8 +4,10 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. checkpointer_enabled=.true. -fftsolver_enabled=.false. -iterativesolver_enabled=.true. +fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -71,7 +73,7 @@ walltime_limit=00:05:00 tolerance=1.e-6 max_iterations=999 preconditioner_iterations=2 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmNoSmagGalAdv b/test_harness/monc_main/bubble/WarmNoSmagGalAdv index 1ef74c92..12f6c4ee 100644 --- a/test_harness/monc_main/bubble/WarmNoSmagGalAdv +++ b/test_harness/monc_main/bubble/WarmNoSmagGalAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.false. tvd_advection_enabled=.false. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmNoSmagGalMomAdv b/test_harness/monc_main/bubble/WarmNoSmagGalMomAdv index 679a196b..de94beb9 100644 --- a/test_harness/monc_main/bubble/WarmNoSmagGalMomAdv +++ b/test_harness/monc_main/bubble/WarmNoSmagGalMomAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.false. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmPw b/test_harness/monc_main/bubble/WarmPw index 81660762..5b8d47d6 100644 --- a/test_harness/monc_main/bubble/WarmPw +++ b/test_harness/monc_main/bubble/WarmPw @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmPwNoSmag b/test_harness/monc_main/bubble/WarmPwNoSmag index 9a520154..e27dd5f5 100644 --- a/test_harness/monc_main/bubble/WarmPwNoSmag +++ b/test_harness/monc_main/bubble/WarmPwNoSmag @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmPwNoSmagGal b/test_harness/monc_main/bubble/WarmPwNoSmagGal index 9538bbc2..10eef4f9 100644 --- a/test_harness/monc_main/bubble/WarmPwNoSmagGal +++ b/test_harness/monc_main/bubble/WarmPwNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmPwNoSmagGalScalAdv b/test_harness/monc_main/bubble/WarmPwNoSmagGalScalAdv index 443a6243..889eefa7 100644 --- a/test_harness/monc_main/bubble/WarmPwNoSmagGalScalAdv +++ b/test_harness/monc_main/bubble/WarmPwNoSmagGalScalAdv @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.false. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmPwScalMomNoSmagGal b/test_harness/monc_main/bubble/WarmPwScalMomNoSmagGal index 73699099..42da3b84 100644 --- a/test_harness/monc_main/bubble/WarmPwScalMomNoSmagGal +++ b/test_harness/monc_main/bubble/WarmPwScalMomNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=pw @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmTvd b/test_harness/monc_main/bubble/WarmTvd index 42106333..b588a018 100644 --- a/test_harness/monc_main/bubble/WarmTvd +++ b/test_harness/monc_main/bubble/WarmTvd @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmTvdNoSmag b/test_harness/monc_main/bubble/WarmTvdNoSmag index c6818815..68e657b2 100644 --- a/test_harness/monc_main/bubble/WarmTvdNoSmag +++ b/test_harness/monc_main/bubble/WarmTvdNoSmag @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/bubble/WarmTvdNoSmagGal b/test_harness/monc_main/bubble/WarmTvdNoSmagGal index 2b15bca8..69843655 100644 --- a/test_harness/monc_main/bubble/WarmTvdNoSmagGal +++ b/test_harness/monc_main/bubble/WarmTvdNoSmagGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. @@ -36,7 +38,7 @@ initialisation_stage_ordering+=tank_experiments dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, tank_experiments, lwrad_exponential, simplecloud, casim,diverr, psrce, flux_budget, diagnostics, subgrid_profile_diagnostics, profile_diagnostics, scalar_diagnostics, stepfields # Decomposition configuration -decomposition_method = onedim +decomposition_method = twodim #Advection advection_flow_fields=tvd @@ -68,10 +70,10 @@ check_walltime_frequency=1 walltime_limit=00:05:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/test_harness/monc_main/drybl/DryBlFull b/test_harness/monc_main/drybl/DryBlFull index 3d1f6158..93f4fa43 100644 --- a/test_harness/monc_main/drybl/DryBlFull +++ b/test_harness/monc_main/drybl/DryBlFull @@ -5,6 +5,9 @@ global_configuration=global_config checkpointer_enabled=.true. coriolis_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/drybl/DryBlFull1d b/test_harness/monc_main/drybl/DryBlFull1d index 9f49c20d..50a08793 100644 --- a/test_harness/monc_main/drybl/DryBlFull1d +++ b/test_harness/monc_main/drybl/DryBlFull1d @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults coriolis_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -13,7 +16,7 @@ mean_profiles_enabled=.true. #This must be set to true if running with damping randomnoise_enabled=.true. th_advection_enabled=.false. -decomposition_method = onedim +decomposition_method = twodim # Control configuration nn_timesteps=500000 diff --git a/test_harness/monc_main/drybl/DryBlNoGal b/test_harness/monc_main/drybl/DryBlNoGal index ca84535d..aff24bff 100644 --- a/test_harness/monc_main/drybl/DryBlNoGal +++ b/test_harness/monc_main/drybl/DryBlNoGal @@ -5,6 +5,9 @@ global_configuration=global_config checkpointer_enabled=.true. coriolis_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/drybl/DryBlNoSmagGal b/test_harness/monc_main/drybl/DryBlNoSmagGal index 03b860b4..96a24616 100644 --- a/test_harness/monc_main/drybl/DryBlNoSmagGal +++ b/test_harness/monc_main/drybl/DryBlNoSmagGal @@ -5,6 +5,9 @@ global_configuration=global_config coriolis_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.false. diff --git a/test_harness/monc_main/shallow_convection/CuFull b/test_harness/monc_main/shallow_convection/CuFull index 947d9517..1d95644d 100644 --- a/test_harness/monc_main/shallow_convection/CuFull +++ b/test_harness/monc_main/shallow_convection/CuFull @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/shallow_convection/CuNoDamp b/test_harness/monc_main/shallow_convection/CuNoDamp index 77831ddf..a09bf3f5 100644 --- a/test_harness/monc_main/shallow_convection/CuNoDamp +++ b/test_harness/monc_main/shallow_convection/CuNoDamp @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/shallow_convection/CuNoGalSrfForceSubDamp b/test_harness/monc_main/shallow_convection/CuNoGalSrfForceSubDamp index 5349f8a9..c34deba3 100644 --- a/test_harness/monc_main/shallow_convection/CuNoGalSrfForceSubDamp +++ b/test_harness/monc_main/shallow_convection/CuNoGalSrfForceSubDamp @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/shallow_convection/CuNoSrfForceSubDamp b/test_harness/monc_main/shallow_convection/CuNoSrfForceSubDamp index e6a5d0af..582f6e64 100644 --- a/test_harness/monc_main/shallow_convection/CuNoSrfForceSubDamp +++ b/test_harness/monc_main/shallow_convection/CuNoSrfForceSubDamp @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/shallow_convection/CuNoSrfSubDamp b/test_harness/monc_main/shallow_convection/CuNoSrfSubDamp index 71296e25..9a26d690 100644 --- a/test_harness/monc_main/shallow_convection/CuNoSrfSubDamp +++ b/test_harness/monc_main/shallow_convection/CuNoSrfSubDamp @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/shallow_convection/CuNoSubDamp b/test_harness/monc_main/shallow_convection/CuNoSubDamp index 481f6358..83d92ceb 100644 --- a/test_harness/monc_main/shallow_convection/CuNoSubDamp +++ b/test_harness/monc_main/shallow_convection/CuNoSubDamp @@ -4,6 +4,9 @@ global_configuration=global_config # Override global component defaults checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +144,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/test_harness/monc_main/stratus/ScFixFluxNoSubDamp b/test_harness/monc_main/stratus/ScFixFluxNoSubDamp index 0b18bb03..10c80eb2 100644 --- a/test_harness/monc_main/stratus/ScFixFluxNoSubDamp +++ b/test_harness/monc_main/stratus/ScFixFluxNoSubDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScFull b/test_harness/monc_main/stratus/ScFull index a5630d07..a4d092a9 100644 --- a/test_harness/monc_main/stratus/ScFull +++ b/test_harness/monc_main/stratus/ScFull @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoDamp b/test_harness/monc_main/stratus/ScNoDamp index 6b0f4450..afc218bd 100644 --- a/test_harness/monc_main/stratus/ScNoDamp +++ b/test_harness/monc_main/stratus/ScNoDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoGalSrfRadSubDamp b/test_harness/monc_main/stratus/ScNoGalSrfRadSubDamp index 18fc787b..ef210e67 100644 --- a/test_harness/monc_main/stratus/ScNoGalSrfRadSubDamp +++ b/test_harness/monc_main/stratus/ScNoGalSrfRadSubDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoRad b/test_harness/monc_main/stratus/ScNoRad index 4410d0eb..4bff3c7d 100644 --- a/test_harness/monc_main/stratus/ScNoRad +++ b/test_harness/monc_main/stratus/ScNoRad @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoRadGal b/test_harness/monc_main/stratus/ScNoRadGal index 63afff7b..876a3733 100644 --- a/test_harness/monc_main/stratus/ScNoRadGal +++ b/test_harness/monc_main/stratus/ScNoRadGal @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoSrfRadSubDamp b/test_harness/monc_main/stratus/ScNoSrfRadSubDamp index 0ad4aff1..c0fc72af 100644 --- a/test_harness/monc_main/stratus/ScNoSrfRadSubDamp +++ b/test_harness/monc_main/stratus/ScNoSrfRadSubDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoSrfSubDamp b/test_harness/monc_main/stratus/ScNoSrfSubDamp index 43d8ce04..38177834 100644 --- a/test_harness/monc_main/stratus/ScNoSrfSubDamp +++ b/test_harness/monc_main/stratus/ScNoSrfSubDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoSubDamp b/test_harness/monc_main/stratus/ScNoSubDamp index 7320b72d..e3b46b73 100644 --- a/test_harness/monc_main/stratus/ScNoSubDamp +++ b/test_harness/monc_main/stratus/ScNoSubDamp @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/monc_main/stratus/ScNoSubDamp_test b/test_harness/monc_main/stratus/ScNoSubDamp_test index 7bfe616a..df136aec 100644 --- a/test_harness/monc_main/stratus/ScNoSubDamp_test +++ b/test_harness/monc_main/stratus/ScNoSubDamp_test @@ -6,6 +6,8 @@ cfltest_enabled=.true. checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. diff --git a/test_harness/submonc_template.pbs b/test_harness/submonc_template.pbs index 7b84e5e6..026e0491 100644 --- a/test_harness/submonc_template.pbs +++ b/test_harness/submonc_template.pbs @@ -1,9 +1,9 @@ #!/bin/bash --login -#PBS -N MONC +#PBS -N add_jobname #PBS -l select=1 #PBS -l walltime=01:00:00 +#PBS -o add_pbs_dir #PBS -j oe -#PBS -P asci #PBS -q normal # Make sure any symbolic links are resolved to absolute path @@ -13,13 +13,13 @@ export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) cd $PBS_O_WORKDIR export SUBMISSION_SCRIPT_NAME=add_scriptname -export MONC_EXEC=./build/bin/monc_driver.exe +export MONC_EXEC=add_build_exec export TESTCASE=add_testcase_mcf export STDOUT_DIR=add_stdout_dirname export CP_DIR=add_checkpoint_dirname export RUN_NAME=add_testsuite_jobname -export NPES=np +export NPES=add_np export MAX_CONTINUATION_RUNS=200 ulimit -c unlimited diff --git a/test_harness/submonc_template.sb b/test_harness/submonc_template.sb new file mode 100644 index 00000000..e2e969c2 --- /dev/null +++ b/test_harness/submonc_template.sb @@ -0,0 +1,47 @@ +#!/bin/bash +#SBATCH --job-name=add_jobname +#SBATCH --output=add_pbs_dir%x.o%j +#SBATCH --open-mode=append +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=128 +#SBATCH --ntasks=add_np +#SBATCH --time=01:00:00 +#SBATCH --partition=standard +#SBATCH --qos=taskfarm +#SBATCH --account=add_account + + +# Make sure any symbolic links are resolved to absolute path +export SLURM_SUBMIT_DIR=$(readlink -f $SLURM_SUBMIT_DIR) + +# Change to the direcotry that the job was submitted from +cd $SLURM_SUBMIT_DIR + +# MODULES +module load atp +export ATP_ENABLED=1 + +# Recommended ARCHER2 I/O settings +export FI_OFI_RXM_SAR_LIMIT=64K + +export SUBMISSION_SCRIPT_NAME=add_scriptname +export MONC_EXEC=add_build_exec + +export TESTCASE=add_testcase_mcf +export STDOUT_DIR=add_stdout_dirname +export CP_DIR=add_checkpoint_dirname +export RUN_NAME=add_testsuite_jobname +export MAX_CONTINUATION_RUNS=200 + +ulimit -c unlimited + +echo -e "\nSubmission time: $(date)\n" +echo -e "Submitting from: $(pwd)\n" + +. test_harness/continuation.sh +run_monc + +# Output job statistics +echo -e "\nCompletion time: $(date)\n" +scontrol show job $SLURM_JOB_ID +sstat $SLURM_JOB_ID --format="AveRSS,MaxRSS" diff --git a/testcases/ARCHER2_example/README b/testcases/ARCHER2_example/README new file mode 100644 index 00000000..96fd2c43 --- /dev/null +++ b/testcases/ARCHER2_example/README @@ -0,0 +1,11 @@ +This example is taken from a MONC test_harness configuration. + +See https://code.metoffice.gov.uk/trac/monc/wiki/ticket/369/TicketSummary#:~:text=dev/toddjones/r6206_test_harness_consolidation-,Setting%20up%20%C2%B6,-FCM%2C%20MOSRS%2C%20and for details about execution on ARCHER2, including FCM, MOSRS, and xxdiff setup. + +Build MONC on ARCHER2 as: + fcm make -j4 -f fcm-make/monc-cray-gnu.cfg -f fcm-make/casim_socrates.cfg --new + +This job can be run on ARCHER2 as: + sbatch testcases/ARCHER2_example/submonc.sb + + diff --git a/testcases/ARCHER2_example/ScFull_128.mcf b/testcases/ARCHER2_example/ScFull_128.mcf new file mode 100644 index 00000000..3dc27f24 --- /dev/null +++ b/testcases/ARCHER2_example/ScFull_128.mcf @@ -0,0 +1,168 @@ +# Global configuration +global_configuration=global_config + +logging=4 + +l_thoff=.true. + + +# Override global component defaults +cfltest_enabled=.true. +checkpointer_enabled=.true. + +fftsolver_enabled=.true. + +iterativesolver_enabled=.false. + +iterativesolver_single_prec_enabled=.false. +petsc_solver_enabled=.false. + +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.true. +forcing_enabled=.true. +galilean_transformation=.true. # Needs debugging +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.false. +lwrad_exponential_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. + +# Control configuration + +display_synopsis_frequency=1 +nn_consolidation=1 +termination_time=17500. +dtm=0.4 + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="diagnostic_files/slurm_gnu_test_ScFull_diagnostics.nc" +moncs_per_io_server=15 # ARCHER2 values: 63, 31, 15, 7, 3 +sampling_frequency=20 +3d_sampling_frequency=4500 +mm=1800.0 +mm1=20.0 +diag_write_freq=7260.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/slurm_gnu_test_ScFull_dump.nc" + +check_walltime_frequency=20 +walltime_limit=00:15:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=1000 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.001 + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=288.0 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=128 +y_size=128 +z_size=50 +dxx=50 +dyy=50 +zztop=1600.0 +kgd=10, 30, 40, 50 +hgd=300., 700., 1000., 1600. +nsmth=40 +rmlmax=6.9 +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.false. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 600.0, 601.0, 1600.0 +f_init_pl_theta=287.2, 287.2, 297.2, 300.2 +l_init_pl_u=.true. +z_init_pl_u=0.0, 1601.0 +f_init_pl_u=5.0, 5.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 600.0, 601.0, 1600.0 +f_init_pl_q=9.2e-3, 9.2e-3, 6.2e-3, 6.2e-3 + +l_matchthref=.false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 600.0, 601.0, 1600. +f_rand_pl_theta=0.1, 0.1, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=1600. + +# physical constants +z0=0.002 +z0th=0.0002 + +# Coriolis +fcoriol=0.00007 +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=5.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=1000.0 +hdmp=650.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1600.0 +f_subs_pl=0.000005,0.000005 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=0 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +# type_of_surface_boundary_conditions=PRESCRIBED_SURFACE_VALUE=1 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 1 +surface_boundary_input_times = 0 +surface_temperatures = 288.2 +#surface_latent_heat_flux = 130.052 +#surface_sensible_heat_flux = 8.04 + +# Radiation settings - variables and switches for exponential radiation (LWEXP) +longwave_exp_decay = 130.0 # longwave rad exponential decay factor +cltop_longwave_flux = 70.0 # cloud top longwave flux (Wm-2) +clbase_longwave_flux = 0.0 # cloud base longwave flux (Wm-2) + + diff --git a/testcases/ARCHER2_example/submonc.sb b/testcases/ARCHER2_example/submonc.sb new file mode 100644 index 00000000..d63bf0e1 --- /dev/null +++ b/testcases/ARCHER2_example/submonc.sb @@ -0,0 +1,72 @@ +#!/bin/bash +#SBATCH --job-name=slurm_gnu_test_ScFull +#SBATCH --output=%x.o%j + # %x gives job-name (SLURM_JOB_NAME) + # %j gives jobid (individual SLURM_JOB_ID) + # %A gives jobid (master SLURM_ARRAY_JOB_ID) + # %a gives array task id number + # https://slurm.schedmd.com/sbatch.html +#SBATCH --open-mode=append +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=128 +#SBATCH --ntasks=128 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:20:00 +#SBATCH --account=n02-REVCON +#SBATCH --partition=standard +### #SBATCH --qos=standard + +### Push to development queue +#SBATCH --qos=short + +# Make sure any symbolic links are resolved to absolute path +export SLURM_SUBMIT_DIR=$(readlink -f $SLURM_SUBMIT_DIR) + +# Change to the direcotry that the job was submitted from +cd $SLURM_SUBMIT_DIR + +# Allow multi-threading on cray +export MPICH_MAX_THREAD_SAFETY=multiple + +# Request multi-threading in MONC +export MONC_THREAD_MULTIPLE=.false. + +# MODULES +module load atp +export ATP_ENABLED=1 +. env/archer_gnu_mod +module list + +# Recommended ARCHER2 I/O settings +export FI_OFI_RXM_SAR_LIMIT=64K + +# Allow core dumps +ulimit -c unlimited + +# set variables for submission command---------------------- +# NOTE: use of ${SLURM_JOB_NAME} keeps things consistent but is not an original MONC example +export SUBMISSION_SCRIPT_NAME=testcases/ARCHER2_example/submonc.sb +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/ARCHER2_example/ScFull_128.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=${SLURM_JOB_NAME}_dump_ +sed -i "/diagnostic_file=/c\diagnostic_file=\"diagnostic_files/${SLURM_JOB_NAME}_diagnostics.nc\"" ${TESTCASE} +sed -i "/checkpoint_file=/c\checkpoint_file=\"checkpoint_files/${SLURM_JOB_NAME}_dump.nc\"" ${TESTCASE} +export MAX_CONTINUATION_RUNS=200 +# ---------------------------------------------------------- + +# Make record of submission information +echo -e "\nSubmission time: $(date)\n" +echo -e "Submitting from: $(pwd)\n" + +# Continuation-type execution +. misc/continuation.sh +run_monc + +# output job statisitcs to .o (%x.o%j) +echo -e "\nCompletion time: $(date)\n" +scontrol show job $SLURM_JOB_ID +sstat $SLURM_JOB_ID --format="AveRSS,MaxRSS" +# For more information, run after batch job concludes: seff $SLURM_JOB_ID diff --git a/testcases/GASS_diurnal/PECAN.mcf b/testcases/GASS_diurnal/PECAN.mcf new file mode 100644 index 00000000..bb65c28c --- /dev/null +++ b/testcases/GASS_diurnal/PECAN.mcf @@ -0,0 +1,333 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.true. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +casim_enabled=.true. +casim_profile_dgs_enabled=.true. +socrates_couple_enabled=.true. +th_advection_enabled=.true. +iobridge_enabled=.true. +profile_diagnostics_enabled=.true. +scalar_diagnostics_enabled=.true. +conditional_diagnostics_column_enabled=.true. +conditional_diagnostics_whole_enabled=.true. +pdf_analysis_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. +l_lem_dissipation_rate=.false. + +registered=.true. # Print registered components and their version numbers to stdout +showcallbacks=.true. # Print registered callbacks in calling order to stdout + +cfl_monitor=.false. # Print dtm changes and cfl info to stdout + +# Specific diagnostic switches +l_cloud_mask=.true. # Enables 3d binary SOCRATES-based total cloud mask diagnostic +cloud_mask_method=DEFAULT # Cloud mask/fraction calculation method [ DEFAULT, SOCRATES ] + # DEFAULT is based on exceeding qlcrit and qicrit +l_partial_liq_ice=.true. # Calculate partial cloud fracions of liquid and ice, otherwise homogeneous binary + +# -------------------------------------------------- +# Parameters used to compute conditional diagnostics +# -------------------------------------------------- +# ncond: (automatically calculated) number of conditions entered under cond_request +# ndiag: (automatically calculated) number of diagnostics entered under diag_request +# : MUST include 'area' +# Resulting diagnostic array dimensions are (time, ndiag, ncond*2, nz) +# from 1:ncond cond=.true.; ncond+1:ncond*2 cond=.false. +# Debugging: when running the model, built with the cray debugger, the model will fail at the point of the +# IO reduction if ncond*2*ndiag > ~830. Just run with fewer to get past this. +cond_request=ALL, BYu, BCu, NrBCu, AC, ACu, ACd, WG1, WL1, ALu, ALd, CLu, CLd, AH, AL, AI, PPd, VPd, PVd, MO, BM, AA, AV +diag_request=area, W, W2, TH, WTH, THP, WTHP, THVP, WTHVP, THP2, WTHSG, W3, RH, U, V, WU, WV, WUSG, WVSG, TEMP, THL, THLP, THLP2, QVLI, QVLIP, QVLIP2, QRSG, QRSGP, QRSGP2, WQVLIP, WQRSGP +# critical thv and up/downdraft thresholds +thvprcrit=0.0 +wSupcrit=1.0 +wSdwncrit=-1.0 +wupcrit=0.0 +wdwncrit=0.0 +# critical ql, qi and q_hydrometeor for conditional sampling +# Cloud liquid water mixing ratio critical minimum to define cloud [kg/kg] +qlcrit= 1.e-5 # also affects cloud diagnostics elsewhere in model +qicrit= 1.e-5 # also affects cloud diagnostics elsewhere in model +qpptcrit= 1.e-5 +vpptcrit= 1.e-4 +# Diff calculations of thv; .false. means thv=th(1+0.61qv) and .true. mean thv=th(1+0.61qv-(ql+qi)) +thv_from_th_with_liqice=.true. +# -------------------------------------------------- + +# ----------------------------------------------------------------- +# Parameters used to compute vertical velocity critical thresholds +# ----------------------------------------------------------------- +# used only when pdf_analysis_enabled=.true. +# fractional percentiles: +# uppercrit=0.05 --> set updraft threshold at top 5% of w +# dwnpercrit=0.05 --> set downdraft threshold at bottom 5% of w +show_critical_w=.false. # Diagnostic printing +uppercrit=0.05 +dwnpercrit=0.05 + +# vertical velocity histogram parameters +n_w_bins=750 # number of bins (max-min)/bin_size + # - max determined by these parameters +w_bin_size=0.1 # size of bin [m/s] +w_bin_min=-25.0 # lower bound of historgram [m/s] +# ----------------------------------------------------------------- + + +# Control configuration +display_synopsis_frequency=20 # Status output write frequency [ts] +termination_time=86400. # Model run end time [s] +dtm=1.0 # Initial model time step [s] + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/paracon_multi.xml" +moncs_per_io_server=8 # Set to 8 for MetOffice machines + +time_basis=.true. # logical for sampling and output intervals + # [ .false. (timestep, DEFAULT) | .true. (time) ] + # - both treated as integers (no fractional-s time intervals) +sampling_frequency=90 # Sampling interval for time averaging, integer [ ts | s ] +3d_sampling_frequency=360 # 3d Sampling interval for time averaging, integer [ ts | s ] +mm=90. # An output interval, real [ s ] +mm1=360. # An output interval, real [ s ] +diag_write_freq=360. # Reinitialization interval for diagnostic files, real [ s ] + +diagnostic_file_3d="diagnostic_files/PECAN_diagnostic_3d.nc" +diagnostic_file_2d="diagnostic_files/PECAN_diagnostic_2d.nc" +diagnostic_file_1d="diagnostic_files/PECAN_diagnostic_1d.nc" +diagnostic_file_0d="diagnostic_files/PECAN_diagnostic_0d.nc" +diagnostic_file_sd="diagnostic_files/PECAN_diagnostic_sd.nc" +diagnostic_file_cd="diagnostic_files/PECAN_diagnostic_cd.nc" + +# Checkpoint configuration +checkpoint_frequency=0 # Checkpoint file creation frequency [ts] +checkpoint_file="checkpoint_files/PECAN_dump.nc" # Checkpoint file location and prefix + +# Internal walltime configuration +check_walltime_frequency=100 # Frequency to check wall clock against walltime_limit [ts] +walltime_limit=00:10:00 # Internal wall clock time limit on simulation [hh:mm:ss] + +# Advection choices (choose pw or tvd component schemes for flow, theta, and q advection) +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=17 # Frequency for checking CFL conditions [ts] +cfl_cvismax=0.4 # 'worst case' viscous stability parameter (eq 153 of lemdoc2.pdf) +cfl_cvelmax=0.4 # Largest advective Courant number (eq 152 of lemdoc2.pdf) +cfl_dtmmax=10.0 # Maximum time step [s] +cfl_dtmmin=0.001 # Minimum time step [s] + +# not convinced this works as fixing the gal +# adds the gal to the wind, this is not correct. +# Set as false for now +fix_ugal=.false. +ugal=-5.0 +fix_vgal=.false. +vgal=0.0 + +# Simple setup configuration +thref0=298.7259 +surface_pressure=96000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=99 +dxx=1000 +dyy=1000 +zztop=40000.0 +kgd=9,17,75,99 +hgd=500.,1500.,16000.,40000. +nsmth=20 +galilean_transformation=.false. + +enable_theta=.true. +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0., 800., 1200.,3500.,4100.,8200.,12500.,13500.,14200.,16000.,20000.,24000.,28000.,32000.,36000.,40000. +f_init_pl_theta=297.0,297.0,300.0,306.5,311.0,318.0,328.5, 333.0, 340.0, 371.0, 483.0, 610.0, 738.0, 928.0, 1227.0,1447.0 +l_init_pl_u=.true. +z_init_pl_u=0.0, 40000. +f_init_pl_u=-5.0, -5.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., 8150., 9500., 10500., 11500., 12250., 13000., 14000., 18000., 40000. +f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 + +l_matchthref=.true. + +# Smagorinsky configuration +# Default values for the smagorinsky subgrid constants +# smag-subb=40.0 +# smag-subc=16.0 +# The subgrid constant values for the 'conventional' subgrid model +# of Brown (1999) +smag-subb=1.43 +smag-subc=1.43 + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 7000.0, 7001.0, 40000. +f_rand_pl_theta=0.1, 0.1, 0.0000, 0.0000 +names_rand_pl_q=vapour +z_rand_pl_q=0.0, 7000.0, 7001.0, 40000. +f_rand_pl_q=0.025e-3, 0.025e-3, 0.0000, 0.0000 + +# Simple cloud +max_height_cloud=30000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +fcoriol=9.07875e-5 # f = 2 * 7.292e-5 * sin(latitude_deg) [see radiation latitude for consistency] +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-5.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.0002 +zdmp=20000.0 +hdmp=5000.0 + +# Time-varying forcing -------------------------------------------------------------------------------------------- +# enter files as the base directory-relative path to file +# specify the vertical coordinate of the forcing as 'height' [m] or 'pressure' [Pa] +# - expecting NetCDF variable names to be "wsubs", "theta_tendency", or "q_tendency" for +# subsidence, theta, and water vapour forcing time-height profiles, respectively. +# - expecting temporal coordinate variable/dimension to be called "time". +# - expecting wsubs as m/s +# - This is a subsidence velocity only, not divergence rate. +# - When using use_time_varying_subsidence=.true., subsidence_input_type is ignored. +# - expecting theta_tendency as K/s +# - Allowed to be temperature (instead of theta), but requires convert_input_theta_from_temperature=.true. +# - convert_input_theta_from_temperature will also apply to any additional constant forcing. +# - expecting q_tendecy as kg/kg/s +use_time_varying_subsidence=.false. +varying_subsidence_file= +varying_subsidence_coordinate= # 'height' [m] or 'pressure' [Pa] + +use_time_varying_theta=.true. +varying_theta_file=testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc +varying_theta_coordinate=pressure # 'height' [m] or 'pressure' [Pa] +convert_input_theta_from_temperature=.true. + +use_time_varying_q=.true. +varying_q_file=testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc +varying_q_coordinate=pressure # 'height' [m] or 'pressure' [Pa] + + +# Subsidence profile +l_subs_pl_theta=.false. +l_subs_pl_q=.false. + +# Large-scale forcing +# Add om a component to force theta +l_constant_forcing_theta=.false. +l_constant_forcing_q=.false. +l_constant_forcing_u=.true. +l_constant_forcing_v=.true. + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=1 +constant_forcing_type_v=1 + +relax_to_initial_u_profile=.true. +relax_to_initial_v_profile=.true. + +forcing_timescale_u=21600. +forcing_timescale_v=21600. + +# Forcing profiles + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0, PRESCRIBED_VALUES=1 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .true. +surface_conditions_file=testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc +type_of_surface_boundary_conditions = 0 + +#CASIM options +option=22222 +l_warm=.false. +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. +number_q_fields=11 + + +#---------------------------------------------------------------------------------------------- +# SOCRATES inputs +mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/mls.t.nc +mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/mls.q.nc +mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/mls.o3.nc +# Add options for rad_cntrl +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 + +# 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) +i_cloud_representation = 2 + +## Time and location variables for socrates +l_360 = .false. # 360 days in year as opposed to 365 (a UM thing + # in the LEM, is this still required??) +l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed +l_no_solar = .false. +solar_fixed = 1361.0 # prescribed insolation value +sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) +latitude = 38.5 # latitude for the location of radiation calc [match to coriolis!] +longitude = -98.75 # longitude for the location of radiation calc + # Collectively, the next 3 times, rad_start_(year, day time), will constitute the model start + # date, as far as the insolation is concerned. Model times will be seconds from that date. +rad_start_year = 2015.0 # simulation year for earth sun distance +rad_start_day = 152.0 # day number from January 1st +rad_start_time = 0.0 # Start time [hour] for the radiation +rad_interval = 30 # If time_basis=.true.: time [ s ] between radiation calls + # If time_basis=.false.: timesteps [ ts ] between radiation calls + # If .le. zero, radiation called every timestep, otherwise (gt than 0) + # radiation will be called less frequently + +## Surface albedo variables for socrates +l_variable_srf_albedo = .false. # not coded yet but will allow variable + # surface albedo with solar zenith angle +surface_albedo = 0.04 # surface albedo (fixed in time) + +mphys_nq_l=1 # cloud liquid mass +mphys_nd_l=0 # cloud drop number +mphys_nq_r=1 # rain mass +mphys_nq_i=1 # ice mass +mphys_nq_s=1 # snow mass +mphys_nq_g=1 # graupel mass + +l_fix_re = .true. +fixed_cloud_re = 10.0 # effective radius for cloud droplets 10 microns +fixed_ice_re = 30.0 # effective radius for ice 30 microns +#--------------------------------------------------------------------------------------------- diff --git a/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000.cdf b/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000.cdf new file mode 100644 index 00000000..c438b6d4 Binary files /dev/null and b/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000.cdf differ diff --git a/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc b/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc new file mode 100644 index 00000000..99a9f484 Binary files /dev/null and b/testcases/GASS_diurnal/pecan60varanaPECANC1.c1.20150601.000000_reformed.nc differ diff --git a/testcases/GASS_diurnal/prepare_input_data.sh b/testcases/GASS_diurnal/prepare_input_data.sh new file mode 100755 index 00000000..4eeb7230 --- /dev/null +++ b/testcases/GASS_diurnal/prepare_input_data.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Script works on Monsoon. +# Input only input data file and base day value +# Output written to working directory. + + +#module load nco +module load nco/4.6.7-netcdf_4.4.1.1.3 # better, available on Monsoon + + +data=$1 # input GASS data file +base_day=$2 # day of year value to become zero time + +stamp=`echo $data | rev | cut -f 2- -d '.' | rev ` +ndata=${stamp}_reformed_${base_day}.nc + +echo "Upgrading $data to $ndata" + +ncap2 -s 'lev=lev*100;theta_tendency=(T_adv_h+s_adv_v)/3600.;q_tendency=(q_adv_h+q_adv_v)/3600./1000.;surface_temperature=T_skin+273.15;' $data temp_$ndata +[ -f $ndata ] && rm $ndata +[ -f B$ndata ] && rm B$ndata +ncks -O -v time,lev,theta_tendency,q_tendency,surface_temperature,SH,LH,RH_srf temp_$ndata $ndata +ncrename -v RH_srf,surface_humidity -v SH,surface_sensible_heat_flux -v LH,surface_latent_heat_flux $ndata + +ncatted -h -a long_name,time,o,c,"time since - day ${base_day} -" $ndata +ncatted -h -a units,time,o,c,"seconds since - day ${base_day} -" $ndata + +ncatted -h -a units,lev,o,c,"Pa" $ndata + +ncatted -h -a long_name,q_tendency,o,c,"total advective water vapour tendency" $ndata +ncatted -h -a units,q_tendency,o,c,"kg/kg/s" $ndata + +ncatted -h -a units,surface_temperature,o,c,"K" $ndata + +ncatted -h -a units,theta_tendency,o,c,"K/s" $ndata + + + +ncap2 -O -s 'time=(time-'${base_day}')*86400.;' $ndata B$ndata + + + +rm temp_$ndata +mv B$ndata $ndata + +#All done +echo "Good to go!" + +exit 0 diff --git a/testcases/GASS_diurnal/submonc_scripts/PECAN.pbs b/testcases/GASS_diurnal/submonc_scripts/PECAN.pbs new file mode 100644 index 00000000..c775a893 --- /dev/null +++ b/testcases/GASS_diurnal/submonc_scripts/PECAN.pbs @@ -0,0 +1,39 @@ +#!/bin/bash --login +#PBS -N PECAN +#PBS -l select=1 +#PBS -l walltime=00:20:00 +#PBS -j oe +#####PBS -P project_code +#PBS -q normal + + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A CHECKPOINT JOB WITH THE CONTINUATION SCRIPT #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +# Make sure any symbolic links are resolved to absolute path +export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) + +# Change to the direcotry that the job was submitted from +cd $PBS_O_WORKDIR + +export SUBMISSION_SCRIPT_NAME=testcases/GASS_diurnal/submonc_scripts/PECAN.pbs +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/GASS_diurnal/PECAN.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=PECAN_dump_ +export NPES=np +export MAX_CONTINUATION_RUNS=10 + +ulimit -c unlimited + +. misc/continuation.sh + +run_monc + diff --git a/testcases/arm_diurnal_cycle/arm_traj.mcf b/testcases/arm_diurnal_cycle/arm_traj.mcf new file mode 100644 index 00000000..50053715 --- /dev/null +++ b/testcases/arm_diurnal_cycle/arm_traj.mcf @@ -0,0 +1,189 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.true. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. +tracers_enabled=.true. +trajectories_enabled=.true. +radioactive_tracers_enabled=.true. +showcallbacks=.true. + + +# Control configuration +display_synopsis_frequency=100 +termination_time=86400. +dtm=0.4 + +#Tracer configuration +n_radioactive_tracers=2 +tracer_decay_rate=4.0, 1.0 + +# IO server configuration +ioserver_configuration_file="testcases/arm_diurnal_cycle/traj_test.xml" +diagnostic_file="diagnostic_files/diagnostics_ts.nc" +moncs_per_io_server=8 +sampling_frequency=10 +3d_sampling_frequency=60 +mm=60.0 +mm1=60.0 +mm2=60.0 +diag_write_freq=600.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/arm_dump.nc" +check_walltime_frequency=60 +walltime_limit=00:05:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=10 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=0.4 +cfl_dtmmin=0.1 +cfl_monitor=.true. # enable writing of cfl and dtm change information to stdout + +# Diagnostic sampling basis (unit selection) +time_basis=.true. # logical for sampling and output intervals [ .false. (timestep, DEFAULT) | .true. (time) ] + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=-9999.0 +surface_pressure=97000. +surface_reference_pressure=100000. +x_size=64 +y_size=64 +z_size=100 +dxx=200 +dyy=200 +zztop=4400.0 +kgd=1,100 +hgd=0.0,4400.0 +nsmth=1 +galilean_transformation=.false. + +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 50.0, 350.0, 650., 700., 1300., 2500., 5500. +f_init_pl_theta=299.0, 301.5, 302.5, 303.53, 303.7, 307.13, 314.0, 343.2 +l_init_pl_u=.true. +z_init_pl_u=0.0, 50.0, 350.0, 650.0, 700.0, 1300.0, 2500.0, 5500.0 +f_init_pl_u=10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 50.0, 350.0, 650.0, 700.0, 1300.0, 2500.0, 5500.0 +f_init_pl_q=15.2e-3, 15.17e-3, 14.98e-3, 14.8e-3, 14.7e-3, 13.5e-3, 3.0e-3, 3.0e-3 +l_matchthref=.false. +l_thref=.true. +z_thref=0.001, 5000.0 +f_thref=300.0, 330.0 + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 200.0, 501.0, 4400. +f_rand_pl_theta=0.1, 0.0001, 0.0, 0.0 + +# Simple cloud +max_height_cloud=5000. + +# physical constants +z0=0.035 +z0th=0.002 + +# Coriolis +fcoriol=0.000085 +#baroclinicity_use_geostrophic_shear=.true. +# Set to .false. in Tom's runs - needs checking. +baroclinicity_use_geostrophic_shear=.false. +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=10. +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.005 +zdmp=3500.0 +hdmp=750.0 + +# Subsidence profile +l_subs_pl_theta=.false. +z_subs_pl=0.0, 1500.0, 2100.0, 3000. +f_subs_pl=0.0, 0.0, 0.0, 0.0 +l_subs_pl_q=.false. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=0 +subsidence_local_theta=.false. +subsidence_local_q=.false. + +# Large-scale forcing +l_constant_forcing_theta=.false. +l_constant_forcing_q=.false. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# Unit options are K/s or K/day +units_theta_force=K/day +z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. +f_force_pl_theta=0.0, 0.0, 0.0, 0.0 + +names_constant_forcing_q=vapour +z_force_pl_q=0.0, 300.0, 500.0, 3000. +f_force_pl_q=0.0, 0.0, 0.0, 0.0 +# Unit options are kg/kg/s, kg/kg/day, g/kg/s or g/kg/day +units_q_force=g/kg/s + +convert_input_theta_from_temperature=.true. + +convert_input_specific_to_mixingratio=.true. # Not yet implemented + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=0 +constant_forcing_type_v=0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .true. +type_of_surface_boundary_conditions = 0 +surface_boundary_input_times = 0, 14400., 23400., 27000., 36000., 45000., 52200. +surface_latent_heat_flux = 5., 250., 450., 500., 420., 180., 0. +surface_sensible_heat_flux = -30., 90., 140., 140., 100., -10., -10. + + diff --git a/testcases/arm_diurnal_cycle/submonc_scripts/arm_traj.pbs b/testcases/arm_diurnal_cycle/submonc_scripts/arm_traj.pbs new file mode 100644 index 00000000..e80b13de --- /dev/null +++ b/testcases/arm_diurnal_cycle/submonc_scripts/arm_traj.pbs @@ -0,0 +1,37 @@ +#!/bin/bash --login +#PBS -N arm_traj +#PBS -l select=1 +#PBS -l walltime=00:30:00 +#PBS -j oe +#####PBS -P project_code +#PBS -q normal + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A CHECKPOINT JOB WITH THE CONTINUATION SCRIPT #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +# Make sure any symbolic links are resolved to absolute path +export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) + +# Change to the direcotry that the job was submitted from +cd $PBS_O_WORKDIR + +export SUBMISSION_SCRIPT_NAME=testcases/arm_diurnal_cycle/submonc_scripts/arm_traj.pbs +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/arm_diurnal_cycle/arm_traj.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=arm_dump_ +export NPES=np +export MAX_CONTINUATION_RUNS=10 + +ulimit -c unlimited + +. misc/continuation.sh + +run_monc diff --git a/testcases/arm_diurnal_cycle/traj_test.xml b/testcases/arm_diurnal_cycle/traj_test.xml new file mode 100644 index 00000000..4f116f70 --- /dev/null +++ b/testcases/arm_diurnal_cycle/traj_test.xml @@ -0,0 +1,22 @@ + + + + +#include "io/io_cfg_files/profile_fields.xml" +#include "io/io_cfg_files/3d_fields.xml" +#include "io/io_cfg_files/paracon_tracers.xml" + +#include "io/io_cfg_files/checkpoint.xml" + + + + + + + + + + + + + diff --git a/testcases/course_examples/bomex_casim.mcf b/testcases/course_examples/bomex_casim.mcf index fdc97712..d00ed257 100644 --- a/testcases/course_examples/bomex_casim.mcf +++ b/testcases/course_examples/bomex_casim.mcf @@ -135,7 +135,7 @@ l_constant_forcing_u=.false. l_constant_forcing_v=.false. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. # Unit options are K/s or K/day units_theta_force=K/day diff --git a/testcases/kidtestcase/casim_testing-Cu-4-0.mcf b/testcases/kidtestcase/casim_testing-Cu-4-0.mcf index 4890fc41..920631da 100644 --- a/testcases/kidtestcase/casim_testing-Cu-4-0.mcf +++ b/testcases/kidtestcase/casim_testing-Cu-4-0.mcf @@ -12,6 +12,7 @@ diffusion_enabled=.false. diverr_enabled=.false. fftsolver_enabled=.false. iterativesolver_enabled=.false. +mean_profiles_enabled=.true. psrce_enabled=.false. pstep_enabled=.false. pw_advection_enabled=.false. @@ -23,15 +24,16 @@ smagorinsky_enabled=.false. tvd_advection_enabled=.true. viscosity_enabled=.false. casim_enabled=.true. +casim_profile_dgs_enabled=.true. lateral_bcs_enabled=.true. iobridge_enabled=.true. -scalar_diagnostics_enabled=.false. +scalar_diagnostics_enabled=.true. profile_diagnostics_enabled=.true. -checkpointer_enabled=.false. +checkpointer_enabled=.true. # Add to initialisation -initialisation_stage_ordering+=kid_testcase -start_group_contents+=kid_testcase +initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, mean_profiles, swap_smooth, termination_check, simplecloud, casim, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential,th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, kid_testcase, iobridge +start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, setfluxlook, kid_testcase #finalisation_stage_ordering+=kid_testcase #Step fields buffer @@ -39,42 +41,49 @@ step_ibuffer = 3 step_jbuffer = 0 # Control configuration -display_synopsis_frequency=1000 +display_synopsis_frequency=10 cfl_frequency=2 termination_time=3700. -dtm=2. +dtm=2.0 # IO server configuration -ioserver_configuration_file="testcases/course_examples/test_description.xml" +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="diagnostic_files/kid_casim_Cu.nc" moncs_per_io_server=11 sampling_frequency=10 -3d_sampling_frequency=30 -mm=120.0 +3d_sampling_frequency=10 +mm=60.0 mm1=60.0 diag_write_freq=3600.0 +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/kid_casim_Cu.nc" +check_walltime_frequency=1000 +walltime_limit=00:30:00 + # Simple setup configuration rhobous=1.0 thref0=300.0 surface_pressure=100000. surface_reference_pressure=100000. x_size=96 -y_size=2 -z_size=56 +y_size=1 +z_size=61 dxx=100 dyy=100 -zztop=2750.0 -kgd=1,56 -hgd=0.0, 2750.0 +zztop=3000.0 +kgd=1,61 +hgd=0.0, 3000.0 rmlmax=15.0 enable_theta=.true. -use_anelastic_equations=.false. +use_anelastic_equations=.true. origional_vertical_grid_setup=.true. passive_th=.false. passive_q=.false. backscatter=.false. -use_viscosity_and_diffusion=.false. -use_surface_fluxes=.false. +use_viscosity_and_diffusion=.true. +use_surface_fluxes=.true. use_time_varying_surface_values=.false. type_of_surface_boundary_conditions=0 @@ -82,23 +91,18 @@ type_of_surface_boundary_conditions=0 l_init_pl_theta=.false. l_init_pl_rh=.false. -# Checkpoint configuration -checkpoint_frequency=2500 -checkpoint_file="casim_testing-Cu-4-0.nc" -checkpoint_unique_per_dump=.true. - advection_flow_fields=pw advection_theta_field=tvd advection_q_fields=tvd # Kinematic options case_number=1 -l_cu_cold=.true. +l_cu_cold=.false. #CASIM options -option=22222 -l_warm=.false. +option=22000 +l_warm=.true. aerosol_option=0 iopt_act=0 @@ -106,6 +110,6 @@ iopt_inuc=0 process_level=0 l_override_checks = .true. -number_q_fields=11 +number_q_fields=5 diff --git a/testcases/kidtestcase/kidtestcase-Cu.mcf b/testcases/kidtestcase/kidtestcase-Cu.mcf index 8a9bc55b..9b2b0f0c 100644 --- a/testcases/kidtestcase/kidtestcase-Cu.mcf +++ b/testcases/kidtestcase/kidtestcase-Cu.mcf @@ -12,31 +12,51 @@ diffusion_enabled=.false. diverr_enabled=.false. fftsolver_enabled=.false. iterativesolver_enabled=.false. -lateral_bcs_enabled=.true. +mean_profiles_enabled=.true. psrce_enabled=.false. pstep_enabled=.false. pw_advection_enabled=.false. lower_bc_enabled=.false. setfluxlook_enabled=.false. -simplecloud_enabled=.true. +simplecloud_enabled=.false. simplesetup_enabled=.true. smagorinsky_enabled=.false. tvd_advection_enabled=.true. viscosity_enabled=.false. +casim_enabled=.true. +casim_profile_dgs_enabled=.true. +lateral_bcs_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +checkpointer_enabled=.true. # Add to initialisation -initialisation_stage_ordering+=kid_testcase -start_group_contents+=kid_testcase +initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, mean_profiles, swap_smooth, termination_check, simplecloud, casim, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential,th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, kid_testcase, iobridge +start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, setfluxlook, kid_testcase #finalisation_stage_ordering+=kid_testcase - # Control configuration -nn_timesteps=1000 -display_synopsis_frequency=100 +display_synopsis_frequency=10 cfl_frequency=2 -nn_consolidation=1 -termination_time=3600. -dtm=1. +termination_time=3700. +dtm=2. + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="diagnostic_files/kid_Cu.nc" +moncs_per_io_server=11 +sampling_frequency=10 +3d_sampling_frequency=10 +mm=60.0 +mm1=60.0 +diag_write_freq=3600.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/kid_Cu.nc" +check_walltime_frequency=1000 +walltime_limit=00:30:00 # Simple setup configuration rhobous=1.0 @@ -53,7 +73,6 @@ kgd=1,27 hgd=0.0, 2700.0 rmlmax=15.0 enable_theta=.true. -number_q_fields=5 use_anelastic_equations=.true. origional_vertical_grid_setup=.true. passive_th=.false. @@ -68,13 +87,21 @@ type_of_surface_boundary_conditions=0 l_init_pl_theta=.false. l_init_pl_rh=.false. -# Checkpoint configuration -checkpoint_frequency=10 -checkpoint_file="kid_testcase.nc" -checkpoint_unique_per_dump=.true. - advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd # Kinematic options case_number=1 +#CASIM options +number_q_fields=11 +option=22222 +l_warm=.false. + +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. + diff --git a/testcases/kidtestcase/kidtestcase-Sc.mcf b/testcases/kidtestcase/kidtestcase-Sc.mcf index 22b16937..bbba34aa 100644 --- a/testcases/kidtestcase/kidtestcase-Sc.mcf +++ b/testcases/kidtestcase/kidtestcase-Sc.mcf @@ -8,30 +8,54 @@ kid_testcase_enabled=.true. buoyancy_enabled=.false. cfltest_enabled=.false. coriolis_enabled=.false. +diffusion_enabled=.false. +diverr_enabled=.false. fftsolver_enabled=.false. iterativesolver_enabled=.false. +mean_profiles_enabled=.true. +psrce_enabled=.false. +pstep_enabled=.false. pw_advection_enabled=.false. -tvd_advection_enabled=.true. -simplesetup_enabled=.true. -smagorinsky_enabled=.false. lower_bc_enabled=.false. setfluxlook_enabled=.false. -viscosity_enabled=.false. -diffusion_enabled=.false. simplecloud_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.false. +tvd_advection_enabled=.true. +viscosity_enabled=.false. +casim_enabled=.false. +lateral_bcs_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +checkpointer_enabled=.true. # Add to initialisation -initialisation_stage_ordering+=kid_testcase -start_group_contents+=kid_testcase +initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, mean_profiles, swap_smooth, termination_check, simplecloud, casim, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential,th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, kid_testcase, iobridge +start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, setfluxlook, kid_testcase #finalisation_stage_ordering+=kid_testcase # Control configuration -nn_timesteps=3000 -display_synopsis_frequency=100 +display_synopsis_frequency=10 cfl_frequency=2 -nn_consolidation=1 -termination_time=3600. -dtm=1. +termination_time=3700. +dtm=2. + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="diagnostic_files/kid_Sc.nc" +moncs_per_io_server=11 +sampling_frequency=10 +3d_sampling_frequency=10 +mm=60.0 +mm1=60.0 +diag_write_freq=3600.0 + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/kid_Sc.nc" +check_walltime_frequency=1000 +walltime_limit=00:30:00 # Simple setup configuration rhobous=1.0 @@ -40,12 +64,12 @@ surface_pressure=100000. surface_reference_pressure=100000. x_size=40 y_size=1 -z_size=21 +z_size=53 dxx=100 dyy=100 -zztop=2000.0 -kgd=1,21 -hgd=0.0, 2000.0 +zztop=1300.0 +kgd=1,53 +hgd=0.0, 1300.0 rmlmax=15.0 enable_theta=.true. number_q_fields=5 @@ -63,12 +87,9 @@ type_of_surface_boundary_conditions=0 l_init_pl_theta=.false. l_init_pl_rh=.false. -# Checkpoint configuration -checkpoint_frequency=100 -checkpoint_file="kid_testcase.nc" -checkpoint_unique_per_dump=.true. - advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd # Kinematic options case_number=3 diff --git a/testcases/kidtestcase/kidtestcase-squall.mcf b/testcases/kidtestcase/kidtestcase-squall.mcf index 768589e5..787cb34c 100644 --- a/testcases/kidtestcase/kidtestcase-squall.mcf +++ b/testcases/kidtestcase/kidtestcase-squall.mcf @@ -8,62 +8,70 @@ kid_testcase_enabled=.true. buoyancy_enabled=.false. cfltest_enabled=.false. coriolis_enabled=.false. +diffusion_enabled=.false. +diverr_enabled=.false. fftsolver_enabled=.false. iterativesolver_enabled=.false. +mean_profiles_enabled=.true. +psrce_enabled=.false. +pstep_enabled=.false. pw_advection_enabled=.false. -tvd_advection_enabled=.true. -simplesetup_enabled=.true. -smagorinsky_enabled=.false. lower_bc_enabled=.false. setfluxlook_enabled=.false. +simplecloud_enabled=.false. +simplesetup_enabled=.true. +smagorinsky_enabled=.false. +tvd_advection_enabled=.true. viscosity_enabled=.false. -diffusion_enabled=.false. -simplecloud_enabled=.true. +casim_enabled=.true. +casim_profile_dgs_enabled=.true. +lateral_bcs_enabled=.true. iobridge_enabled=.true. -scalar_diagnostics_enabled=.false. -profile_diagnostics_enabled=.false. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +checkpointer_enabled=.true. # Add to initialisation -initialisation_stage_ordering+=kid_testcase -start_group_contents+=kid_testcase +initialisation_stage_ordering=decomposition, kidreader, kidtestcase, checkpointer, simplesetup, grid_manager, mean_profiles, swap_smooth, termination_check, simplecloud, casim, coriolis, buoyancy, cfltest, damping, diverr, fftsolver, halo_swapper, iterativesolver, setfluxlook, lower_bc, physicsa, psrce, pw_advection, diffusion, set_consistent_lowbc, viscosity, smagorinsky, stepfields, stepping_direction, tvd_advection, model_synopsis, socrates_couple, lwrad_exponential,th_advection, randomnoise, forcing, flux_budget, diagnostics_3d, profile_diagnostics, casim_profile_dgs, conditional_diagnostics_column, conditional_diagnostics_whole, pdf_analysis, subgrid_profile_diagnostics, scalar_diagnostics, lateral_bcs, petsc_solver, pstep, kid_testcase, iobridge +start_group_contents=clearsourceterms, stepping_direction, halo_swapper, lateral_bcs, setfluxlook, kid_testcase #finalisation_stage_ordering+=kid_testcase # Control configuration -display_synopsis_frequency=100 -termination_time=660. -dtm=1. +display_synopsis_frequency=10 +termination_time=3700. +dtm=2. # IO server configuration ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +diagnostic_file="diagnostic_files/kid_casim_squall.nc" moncs_per_io_server=11 -sampling_frequency=2 -3d_sampling_frequency=30 -mm=60.0 -mm1=5.0 -diag_write_freq=600.0 +sampling_frequency=30 +3d_sampling_frequency=60 +mm=120.0 +mm1=60.0 +diag_write_freq=3600.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="kid_squall_dump.nc" -check_walltime_frequency=10 -walltime_limit=00:30:00 +check_walltime_frequency=100 +walltime_limit=01:30:00 # Simple setup configuration rhobous=1.0 thref0=300.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=240 -y_size=1 -z_size=121 -dxx=1000 -dyy=1000 +x_size=120 +y_size=2 +z_size=61 +dxx=2000 +dyy=2000 zztop=12000.0 -kgd=1,121 +kgd=1,61 hgd=0.0, 12000.0 rmlmax=15.0 enable_theta=.true. -number_q_fields=5 use_anelastic_equations=.true. origional_vertical_grid_setup=.true. passive_th=.false. @@ -78,10 +86,24 @@ type_of_surface_boundary_conditions=0 l_init_pl_theta=.false. l_init_pl_rh=.false. - - advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd # Kinematic options case_number=4 +#CASIM options + +option=22222 +l_warm=.false. + +aerosol_option=0 +iopt_act=0 +iopt_inuc=0 +process_level=0 +l_override_checks = .true. + +number_q_fields=11 + + diff --git a/testcases/kidtestcase/src/kidtestcase.F90 b/testcases/kidtestcase/src/kidtestcase.F90 index b9dde7f3..25341d49 100644 --- a/testcases/kidtestcase/src/kidtestcase.F90 +++ b/testcases/kidtestcase/src/kidtestcase.F90 @@ -53,9 +53,9 @@ subroutine initialise_callback(current_state) case (CASE_EGG) call set_2D_Eggs(current_state) case (CASE_SC) - call set_2D_Sc(current_state) + call set_Sc_profiles(current_state) case (CASE_SQUALL) - call set_2D_squall(current_state) + call set_SQUALL_profiles(current_state) case (CASE_HILL_FLOW) call set_2D_hills(current_state) end select @@ -130,7 +130,7 @@ subroutine set_Cu_profiles(current_state) rh_cu(k) = pqv(k)/qsaturation(temp_cu(k),press_cu(k)) end do - temp_cu=temp_cu-20 ! reduce temperature for testing ice + temp_cu=temp_cu-20.0 ! reduce temperature for testing ice do k=1,nlevs pqv(k) = rh_cu(k)*qsaturation(temp_cu(k),press_cu(k)) @@ -194,12 +194,161 @@ subroutine set_Cu_profiles(current_state) end subroutine set_Cu_profiles + subroutine set_Sc_profiles(current_state) + type(model_state_type), target, intent(inout) :: current_state + + real(DEFAULT_PRECISION) :: maxZ, maxX + real(DEFAULT_PRECISION) :: z0=1520. + + integer :: iq, i, j, k, k_top, x_size, y_size + + k_top = current_state%local_grid%size(Z_INDEX) + y_size=current_state%local_grid%size(Y_INDEX) !+ current_state%local_grid%halo_size(Y_INDEX) * 2 + x_size=current_state%local_grid%size(X_INDEX) !+ current_state%local_grid%halo_size(X_INDEX) * 2 + + iq=get_q_index(standard_q_names%VAPOUR, 'kidtestcase-Sc') + do i=1, x_size + do j=1, y_size + do k=1, k_top + current_state%global_grid%configuration%vertical%thref(k) = 289.0_DEFAULT_PRECISION + current_state%global_grid%configuration%vertical%q_init(k,iq) = 7.5e-3 + current_state%q(iq)%data(k,j,i) = current_state%global_grid%configuration%vertical%q_init(k,iq) + enddo + enddo + enddo + current_state%th%data=0.0 + current_state%global_grid%configuration%vertical%theta_init = current_state%global_grid%configuration%vertical%thref + + end subroutine set_Sc_profiles + + subroutine set_SQUALL_profiles(current_state) + ! + ! Set up the 2D field for GATE + ! + type(model_state_type), target, intent(inout) :: current_state + + real(DEFAULT_PRECISION), allocatable :: & + pHeight(:) & ! height + ,pTheta(:) & ! theta + ,pqv(:) ! qv + + ! local allocatable arrays for temperature and presssure + real(DEFAULT_PRECISION), allocatable :: & + press_cu(:) & ! pressure (mb) + ,temp_cu(:) ! temperature (C) + + + real(kind=DEFAULT_PRECISION), allocatable :: zgrid(:) ! z grid to use in interpolation + + real(DEFAULT_PRECISION) :: tempk, tempkm, delz, delt, tavi + + integer :: nlevs, km1, iq, i, j, k + + real(kind=DEFAULT_PRECISION) :: zztop ! top of the domain + + zztop = current_state%global_grid%top(Z_INDEX) + + nlevs = 23 + + allocate(pHeight(nlevs)) + allocate(pTheta(nlevs)) + allocate(pqv(nlevs)) + + allocate(press_cu(nlevs)) + allocate(temp_cu(nlevs)) + + allocate(zgrid(current_state%local_grid%local_domain_end_index(Z_INDEX))) + + ! pqv in g/kg + pqv=(/.178E+02, 0.172E+02, 0.156E+02, 0.134E+02, 0.111E+02, & + .888E+01, 0.631E+01, 0.487E+01, 0.396E+01, 0.200E+01, & + .984E+00, 0.806E+00, 0.370E+00, 0.135E+00, 0.599E-01, & + .258E-01, 0.123E-01, 0.582E-02, 0.367E-02, 0.589E-02, & + .104E-02, 0.247E-02, 0.585E-02/) + + press_cu=(/1008.00, 991.25, 945.50, 893.79, 836.06, 772.82, 705.22, & + 635.05, 564.48, 495.73, 430.71, 370.78, 316.72, 268.82, & + 226.98, 190.82, 159.87, 133.55, 111.29, 92.56, 52.31, & + 22.08, 9.32/) + + temp_cu=(/25.26, 24.13, 21.04, 18.66, 16.50, 13.41, 9.06, & + 3.73, -1.51, -6.97, -14.09, -22.44, -30.57, -39.60, & + -48.69, -57.40, -65.21, -72.58, -76.71, -74.98, -74.98, & + -74.98, -74.98/) + + ! set temp K + temp_cu=temp_cu + 273.15 + + ! set qv kg/kg + pqv(:) = pqv(:)*1.e-3 + + ! calculate theta from temp_cu + do k = 1, nlevs + ptheta(k) = temp_cu(k)*(1.e3/press_cu(k))**r_over_cp + enddo + + ! calculate approximate height from pressure + pheight(1) = 0.0 + do k = 2, nlevs + km1 = k-1 + tempk = ptheta(k) * (1.e3/press_cu(k))**(-r_over_cp) & + * (1. + .6*pqv(k)) + tempkm = ptheta(km1) * (1.e3/press_cu(km1))**(-r_over_cp) & + * (1. + .6*pqv(km1)) + + delt=tempk-tempkm + if(delt.gt.1.e-4) then + tavi=log(tempk/tempkm)/delt + else + tavi=1./tempk + endif + + delz=-Ru/(tavi*g)*log(press_cu(k)/press_cu(km1)) + pheight(k) = pheight(km1) + delz + enddo + + call check_top(zztop, pheight(nlevs), 'kid_case:setup squall') + + print *, zztop, pheight(nlevs) + + zgrid=current_state%global_grid%configuration%vertical%zn(:) + + call piecewise_linear_1d(pheight, ptheta, zgrid, & + current_state%global_grid%configuration%vertical%thref) + + current_state%global_grid%configuration%vertical%theta_init = current_state%global_grid%configuration%vertical%thref + current_state%th%data=0.0 + + iq=get_q_index(standard_q_names%VAPOUR, 'kidtestcase-Squall') + + call piecewise_linear_1d(pheight, pqv, zgrid, & + current_state%global_grid%configuration%vertical%q_init(:,iq)) + + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%q(iq)%data(:,j,i) = current_state%global_grid%configuration%vertical%q_init(:, iq) + end do + end do + + deallocate(pqv) + deallocate(pTheta) + deallocate(pHeight) + + deallocate(press_cu) + deallocate(temp_cu) + + end subroutine set_SQUALL_profiles + subroutine timestep_callback(current_state) type(model_state_type), target, intent(inout) :: current_state select case(case_number) case(CASE_CU) call set_2D_Cu_wind_field(current_state) + case (CASE_SC) + call set_2D_Sc(current_state) + case (CASE_SQUALL) + call set_2D_squall(current_state) end select end subroutine timestep_callback @@ -352,7 +501,7 @@ subroutine set_2D_Cu_wind_field(current_state) zscale1=1.7*1.e3 zscale2=2.7*1.e3 - maxW=1.0 + maxW=2.0 ! CALCULATE X AND Z DISTANCES (IN METERS) dzp=current_state%global_grid%configuration%vertical%dz diff --git a/testcases/radiative_convective_equilibrium/RCEMIP_small_295.mcf b/testcases/radiative_convective_equilibrium/RCEMIP_small_295.mcf new file mode 100644 index 00000000..b3a6156c --- /dev/null +++ b/testcases/radiative_convective_equilibrium/RCEMIP_small_295.mcf @@ -0,0 +1,346 @@ +# + + + + + + ### ### ### ## ## ## # # # NOTICE # # # ## ## ## ### ### ### + ### ### + ### For running RCEMIP small case with SST=295 K ### + ### Very short walltime specified. ### + ### ### + ### --- (initialised from analytic profile formula) --- ### + ### --- function of SST equal to one of: 295, 300, 305 --- ### + ### ### + ### Dual SST specification: ### + ### surface_temperatures=295. # real ### + ### rcemip_sst=295 # integer ### + ### ### + ### --- This configuration uses non-RCEMIP diagnostics --- ### + ### ### + ### To run multiple cases at once (3 SSTs), see setup_suite.sh ### + ### in MONC branch: main/branches/dev/toddjones/vn0.9.0_RCEMIP ### + ### To most precisely follow RCEMIP specifications, multiple model ### + ### constants should be changed with respect to the MONC branch above. ### + ### - To enable these changes in MONC see the "MONC CONSTANTS" section ### + ### below. ### + ### - See tickets #349 and #376 for notes on how to do this using: ### + ### - Build with fcm-make/rcemip_cs.cfg of the above branch ### + ### - This points to a CASIM branch showing constant values. ### + ### - Other CASIM versions might be used. ### + ### - Use a SOCRATES branch for consistent constants (ticket notes). ### + ### - Essential for correct radiative forcing ### + ### To enable frozen moist static energy diagnostics, see notes in ticket ### + ### #376 and enable options under "FMSE AS TRACER" below. ### + ### To enable CF-compliant diagnostic names, see notes in ticket #376 for ### + ### specific code/XML changes, and set diagnostics_3d_enabled=.true. ### + ### - Similarly, implementation of the specified regularity is also ### + ### showed in that ticket/branch. ### + ### ### + ### ### ### ## ## ## # # # NOTICE # # # ## ## ## ### ### ### + + +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. # This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +coriolis_enabled=.false. # Same as fcoriol=0.0 +damping_enabled=.true. +forcing_enabled=.false. # No idealised external forcing +socrates_couple_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. # This must be set to true if running with damping +casim_enabled=.true. +casim_profile_dgs_enabled=.true. +th_advection_enabled=.true. +iobridge_enabled=.true. +profile_diagnostics_enabled=.true. +scalar_diagnostics_enabled=.true. +l_lem_dissipation_rate=.false. + + +diagnostics_3d_enabled=.false. + +# Diagnostic printing +registered=.false. # Print registered components and their version numbers to stdout +showcallbacks=.false. # Print registered callbacks in calling order to stdout +cfl_monitor=.false. # Print dtm changes and cfl info to stdout +logging=3 # Logging level (>=4 - DEBUG) +display_synopsis_frequency=20 # Status output write frequency [ts] +print_debug_data=.false. + +# Control configuration +termination_time=8661700. # Model run end time [s], 100.25 days +dtm=1.0 # Initial model time step [s] + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +moncs_per_io_server=8 # Set to 8 for MetOffice machines + +time_basis=.true. # logical for sampling and output intervals + # [ .false. (timestep, DEFAULT) | .true. (time) ] + # - both treated as integers (no fractional-s time intervals) +sampling_frequency=300 # Sampling interval for time averaging, integer [ ts | s ] +3d_sampling_frequency=900 # 3d Sampling interval for time averaging, integer [ ts | s ] +mm=900. # An output interval, real [ s ] +mm1=300. # An output interval, real [ s ] +diag_write_freq=1800. # Reinitialization interval for diagnostic files, real [ s ] + +diagnostic_file="diagnostic_files/RCEMIP_small_295_diagnostic.nc" + +# Checkpoint configuration +checkpoint_frequency=0 # Checkpoint file creation frequency [ts] +checkpoint_file="checkpoint_files/RCEMIP_small_295_dump.nc" # Checkpoint file location and prefix + +# Internal walltime configuration +check_walltime_frequency=20 # Frequency to check wall clock against walltime_limit [ts] +walltime_limit=00:05:00 # Internal wall clock time limit on simulation [hh:mm:ss] + +# Advection choices (choose pw or tvd component schemes for flow, theta, and q advection) +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd + +# CFL configuration +cfl_frequency=17 # Frequency for checking CFL conditions [ts] +cfl_cvismax=0.4 # 'worst case' viscous stability parameter (eq 153 of lemdoc2.pdf) +cfl_cvelmax=0.4 # Largest advective Courant number (eq 152 of lemdoc2.pdf) +cfl_dtmmax=2.0 # Maximum time step [s] +cfl_dtmmin=0.001 # Minimum time step [s] + +# not convinced this works as fixing the gal +# adds the gal to the wind, this is not correct. +# Set as false for now +fix_ugal=.false. +ugal=0.0 +fix_vgal=.false. +vgal=0.0 + +# Simple setup configuration +surface_pressure=101480. +surface_reference_pressure=100000. +x_size=100 +y_size=100 +z_size=99 +dxx=1000 +dyy=1000 +zztop=40000.0 + +origional_vertical_grid_setup=.true. + # z-level indices (kgd) and height values (hgd) +## THIS IS exactly the UM RCE level set +kgd=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99 +hgd=0.00,63.22,126.99,192.03,259.35,330.24,406.21,488.72,578.95,677.66,785.19,901.81,1028.05,1165.00,1314.33,1477.87,1657.01,1852.15,2062.34,2285.47,2518.70,2759.08,3004.04,3251.63,3500.60,3750.20,4000.06,4250.01,4500.00,4750.00,5000.00,5250.00,5500.00,5750.00,6000.00,6250.00,6500.00,6750.00,7000.00,7250.00,7500.00,7750.00,8000.00,8250.00,8500.00,8750.00,9000.00,9250.00,9500.00,9750.00,10000.00,10250.00,10500.00,10750.00,11000.00,11250.00,11500.00,11750.00,12000.00,12250.00,12500.00,12750.00,13000.02,13250.09,13500.34,13751.18,14003.59,14259.81,14524.24,14804.49,15112.19,15462.76,15873.86,16362.29,16940.28,17612.29,18373.86,19212.76,20112.19,21054.49,22024.24,23009.81,24003.59,25001.18,26000.34,27000.09,28000.02,29000.00,30000.00,31000.00,32000.00,33000.00,34000.00,35000.00,36000.00,37000.00,38000.00,39000.00,40000.00 +nsmth=0 +galilean_transformation=.false. + +enable_theta=.true. +use_anelastic_equations=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.false. +l_init_pl_u=.false. +l_init_pl_v=.false. +l_init_pl_q=.false. +l_init_pl_rh=.false. # Don't use with RCEMIP +names_init_pl_q=vapour +l_matchthref=.true. # Reference theta profile matches initial profile. + +# Special RCEMIP settings +# These have also been updated in CASIM and SOCRATES branches, as needed. +# - extract/casim/src/mphys_constants.F90 +# - extract/socrates/src/modules_core/rad_ccf.F90 +l_rcemip_initial=.true. # Compute analytical theta and vapour profiles, f(SST) +l_rcemip_ozone=.true. # Use analytical ozone profile based on pressure profile +l_rcemip_gases=.true. # Use RCEMIP-specified trace gas concentrations +l_rcemip_lowerbc=.true. # Use RCEMIP-specified "effective" surface wind minimum in flux calculations +rcemip_sst=295 # set single integer value to match single real value given to surface_temperatures + +# RCEMIP CONSTANTS (change in CASIM and SOCRATES for consistency) +#G=9.79764 # mean surface gravity [m/s**2] +#r=287.04 # Rd; gas constant for dry air [J/kg/K] +#cp=1004.64 # specific heat capacity for dry air [J/kg/K] +#rlvap=2.501e6 # latent heat of vaporization at 0C +#pi=3.141592653589793 ! pi +#ratio_mol_wts=1.607789855 # Molecular weight of dry air/ molecular weight of water, 28.964/18.015 + # Alternatively, Rv/Rd + +# FMSE AS TRACER (REQUIRES CODE CHANGES AS OUTLINED IN TICKET #376 STATED IN ABOVE NOTICE) +#L_rcemip_tracers=.true. +#tracers_enabled=.true. +#radioactive_tracers_enabled=.true. +#n_radioactive_tracers=1 +#tracer_decay_rate = 0.0 # (no decay) +#tracer_surface_bc_option = 1 # (specified flux) +#tracer_surface_bc = 0.0 # (no surface flux) +#rlsub=2.834e6 # latent heat of sublimation at 0C +## Note: rlfus = rlsub - rlvap # latent heat of fusion at 0C, computed internally (3.337e5) + + +# Smagorinsky configuration +# Default values for the smagorinsky subgrid constants (UM "standard") +# smag-subb=40.0 +# smag-subc=16.0 +# The subgrid constant values for the 'conventional' subgrid model of Brown (1999) +# - Per UM help, conventional has significantly less mixing. +smag-subb=1.43 +smag-subc=1.43 + +# Random noise (only in theta for RCEMIP) +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 400.0, 401.0, 40000. +f_rand_pl_theta=0.1, 0.02, 0.0000, 0.0000 + +# Simple cloud +max_height_cloud=30000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +fcoriol=0.0 +geostrophic_wind_rate_of_change_in_x=0.0 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=0.0 +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.0002 +zdmp=16000.0 +hdmp=5000.0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +# type_of_surface_boundary_conditions=PRESCRIBED_SURFACE_VALUE=1 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 1 +surface_boundary_input_times = 0 +#sst SST +surface_temperatures = 295. +surface_latent_heat_flux = 0. +surface_sensible_heat_flux = 0. + +#CASIM options +option=22222 +l_warm=.false. +aerosol_option=0 +iopt_act=0 # 0 means fixed cloud option for aerosol activation +iopt_inuc=0 +process_level=0 +l_override_checks = .true. +number_q_fields=11 + +# Cloud diagnostic options +l_cloud_mask=.true. # Enables 3d binary SOCRATES-based total cloud mask diagnostic +cloud_mask_method=RCEMIP # Cloud mask/fraction calculation method [ DEFAULT, SOCRATES ] + # DEFAULT is based on exceeding qlcrit and qicrit + # SOCRATES method considers condensate, threshold: >0 + # RCEMIP 1e-5 g/g, or 1 % of the saturation mixing ratio over + # water, whichever is smaller +l_partial_liq_ice=.true. # Calculate partial cloud fracions of liquid and ice, + # otherwise homogeneous binary +# Cloud liquid water mixing ratio critical minimum to define cloud [kg/kg] +# (DEFAULT case and used as only option in other diagnostics: cltop, clbas, conditional fields) +qlcrit= 1.e-6 +qicrit= 1.e-6 + + + + +### SOCRATES inputs (These are consistent with suite u-ay022, the UM idealised RCEMIP case) +### It's likely you'll want to change some of these. +# Add paths for the mcclatchey profiles +mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.t.nc +mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc +mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc +# Add options for rad_cntrl +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +i_gas_overlap_lw = 4 +i_water_lw = 5 +# 11 = baran, 8 = aggregate for the above spectral file, dependent on iwc and temperature +i_ice_lw = 11 +i_scatter_method_lw = 1 + +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 +i_gas_overlap_sw = 4 +i_water_sw = 5 +i_ice_sw = 11 + +# 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) +i_cloud_representation = 2 + + +## Time and location variables for socrates +l_360 = .true. # 360 days in year as opposed to 365 (a UM thing + # in the LEM, is this still required??) +l_solar_fixed = .true. # true equals fixed insolation using value in + # sol_fixed +l_no_solar = .false. # Only use longwave rad by setting lit_fraction = 0.0 +default_solar_constant = 1361. # Default solar constant +solar_fixed = 409.6 # prescribed insolation value +sec_fixed = 1.0 # prescribed 1/cos(solar_zenith_angle) + # ^^ could also use solar_fixed=551.58, and sec_fixed=1.3466914060479671 # RCEMIP + # ^^ which is based on solar zenith angle of 42.05 degrees. +latitude = 0.0 # latitude for the location of radiation calc +longitude = 0.0 # longitude for the location of radiation calc +rad_start_year = 2000.0 # simulation year for earth sun distance +rad_start_day = 0.0 # starting day of the year (0 is jan 1st, Dec 31st is 365, except leap obviously) +rad_start_time = 0.0 # Start time for the radiation calc, hours after 0Z +rad_interval = 300 # Radiation calculation interval [integer] + # - If time_basis=.true., this is the time [ s ] between each radiation + # call. + # - If time_basis=.false., this is the number of timesteps [ ts ] + # between each radiation call. + # - If .le. zero, radiation called every timestep, otherwise (gt than 0) + # radiation will be called less frequently + +#surface albedo variables for socrates +l_variable_srf_albedo = .false. # not coded yet but will allow variable + # surface albedo with solar zenith angle +surface_albedo = 0.07 # surface albedo (fixed in time) + +# set the hydrometeors used in socrates +# 0 is not used, 1 is used. +# If a hydrometeor is selected, it must be available in the +# chosen microphysics scheme otherwise the model will stop +mphys_nq_l=1 # cloud liquid mass +mphys_nd_l=0 # cloud drop number +mphys_nq_r=1 # rain mass +mphys_nq_i=1 # ice mass +mphys_nq_s=1 # snow mass +mphys_nq_g=1 # graupel mass + +### configuration for effective radius calculation +## Fixed cloud effective radius settings for socrates +## NOTE: default is to set effective radius to fixed values (as in LEM) +l_fix_re = .true. +fixed_cloud_re = 10.0 # effective radius for cloud droplets 10 microns +fixed_ice_re = 30.0 # effective radius for ice 30 microns +# Use number of drops to derive re. Will not work is l_fix_re = .true +l_use_ndrop = .false. +## Liu scheme, used in ESM +l_use_liu_spec = .false. +# Cloud number used in the radiation, should be consistent with microphys assumption +# - extract/casim/src/mphys_constants.F90 +fixed_cloud_number = 50.0 # cloud number /cm3 +# Density of water, consistent with CASIM in mphys_parameters +rho_water = 997.0 +# KPARAM_* is the ratio of the cubes of the volume-mean radius and the effective radius +# used to calc effective radius, kparam = 0.67 for land (polluted) and 0.80 sea (clean) (martin 94) +kparam = 0.80 + + diff --git a/testcases/radiative_convective_equilibrium/RCE_casim.mcf b/testcases/radiative_convective_equilibrium/RCE_casim.mcf index 5e948fd5..283a710a 100644 --- a/testcases/radiative_convective_equilibrium/RCE_casim.mcf +++ b/testcases/radiative_convective_equilibrium/RCE_casim.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -27,14 +28,14 @@ socrates_couple_enabled=.false. # Control configuration display_synopsis_frequency=2000 termination_time=96100. -dtm=1.00 +dtm=0.75 # IO server configuration ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" diagnostic_file="diagnostic_files/RCE_casim_dg.nc" moncs_per_io_server=8 -sampling_frequency=100 -3d_sampling_frequency=100 +sampling_frequency=200 +3d_sampling_frequency=2400 mm=3600. mm1=300. diag_write_freq=10800. @@ -57,7 +58,7 @@ advection_q_fields=tvd cfl_frequency=100 cfl_cvismax=0.4 cfl_cvelmax=0.4 -cfl_dtmmax=2.0 +cfl_dtmmax=0.75 cfl_dtmmin=.001 # not convinced this works as fixing the gal @@ -105,7 +106,6 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -167,9 +167,9 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day -z_force_pl_theta=0., 12000., 16000, 40000.0 +z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 # surface flux config @@ -179,11 +179,11 @@ use_time_varying_surface_values= .false. type_of_surface_boundary_conditions = 1 surface_boundary_input_times = 0 surface_temperatures = 300. -surface_latent_heat_flux = 0. +surface_latent_heat_flux = 0. surface_sensible_heat_flux = 0. #CASIM options - +number_q_fields=11 option=22222 l_warm=.false. @@ -192,5 +192,3 @@ iopt_act=0 iopt_inuc=0 process_level=0 l_override_checks = .true. - -number_q_fields=11 diff --git a/testcases/radiative_convective_equilibrium/RCE_casim_noice.mcf b/testcases/radiative_convective_equilibrium/RCE_casim_noice.mcf index c02e728a..7a655795 100644 --- a/testcases/radiative_convective_equilibrium/RCE_casim_noice.mcf +++ b/testcases/radiative_convective_equilibrium/RCE_casim_noice.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -26,15 +27,15 @@ socrates_couple_enabled=.false. # Control configuration display_synopsis_frequency=2000 -termination_time=432000 -dtm=1.00 +termination_time=96100. +dtm=0.75 # IO server configuration ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" diagnostic_file="diagnostic_files/RCE_casim_noice_dg.nc" moncs_per_io_server=8 -sampling_frequency=100 -3d_sampling_frequency=100 +sampling_frequency=200 +3d_sampling_frequency=2400 mm=3600. mm1=300. diag_write_freq=10800. @@ -57,7 +58,7 @@ advection_q_fields=tvd cfl_frequency=100 cfl_cvismax=0.4 cfl_cvelmax=0.4 -cfl_dtmmax=2.0 +cfl_dtmmax=0.75 cfl_dtmmin=.001 # not convinced this works as fixing the gal @@ -105,7 +106,6 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -167,9 +167,9 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day -z_force_pl_theta=0., 12000., 16000, 40000.0 +z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 # surface flux config diff --git a/testcases/radiative_convective_equilibrium/RCE_casim_socrates.mcf b/testcases/radiative_convective_equilibrium/RCE_casim_socrates.mcf index 75f6729f..3bd3a807 100644 --- a/testcases/radiative_convective_equilibrium/RCE_casim_socrates.mcf +++ b/testcases/radiative_convective_equilibrium/RCE_casim_socrates.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -105,7 +106,6 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -192,8 +192,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,8 +209,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 200 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/radiative_convective_equilibrium/RCE_nocasim.mcf b/testcases/radiative_convective_equilibrium/RCE_nocasim.mcf index 69d48ab2..7a27f567 100644 --- a/testcases/radiative_convective_equilibrium/RCE_nocasim.mcf +++ b/testcases/radiative_convective_equilibrium/RCE_nocasim.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -106,7 +107,6 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -168,9 +168,9 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day -z_force_pl_theta=0., 12000., 16000, 40000.0 +z_force_pl_theta=0., 12000., 16000, 20000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 # surface flux config diff --git a/testcases/radiative_convective_equilibrium/makefile b/testcases/radiative_convective_equilibrium/makefile new file mode 100644 index 00000000..79a2fd2d --- /dev/null +++ b/testcases/radiative_convective_equilibrium/makefile @@ -0,0 +1,15 @@ +SRCSF = src/rcemip.F90 + +BUILDDIR=build +NETCDF_DIR?=/usr +COREDIR=../../model_core/build +FFLAGS=-I $(BUILDDIR) -I $(COREDIR) -I $(NETCDF_DIR)/include $(COMPILERFFLAGS) +OBJS = $(patsubst %.F90,$(BUILDDIR)/%.o,$(SRCSF)) + +all: create-build-dirs $(OBJS) + +create-build-dirs: + mkdir -p $(BUILDDIR) + +$(OBJS) : $(BUILDDIR)/%.o : %.F90 + $(FTN) $(OPT) $(FFLAGS) $< -o $(BUILDDIR)/$(notdir $@) diff --git a/testcases/radiative_convective_equilibrium/paracon/RCE_conditional_diagnostics_cray.mcf b/testcases/radiative_convective_equilibrium/paracon/RCE_conditional_diagnostics_cray.mcf index 9dc5c073..b1964465 100644 --- a/testcases/radiative_convective_equilibrium/paracon/RCE_conditional_diagnostics_cray.mcf +++ b/testcases/radiative_convective_equilibrium/paracon/RCE_conditional_diagnostics_cray.mcf @@ -139,7 +139,6 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants @@ -201,7 +200,7 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day z_force_pl_theta=0., 12000., 16000, 40000.0 f_force_pl_theta=-1.5, -2.33, 0.0, 0.0 diff --git a/testcases/radiative_convective_equilibrium/paracon/RCE_merge.mcf b/testcases/radiative_convective_equilibrium/paracon/RCE_merge.mcf index 5305ffe9..b0c89287 100644 --- a/testcases/radiative_convective_equilibrium/paracon/RCE_merge.mcf +++ b/testcases/radiative_convective_equilibrium/paracon/RCE_merge.mcf @@ -1,3 +1,21 @@ +# + + + + + + ### ### ### ## ## ## # # # NOTICE # # # ## ## ## ### ### ### + ### ### + ### THIS CONFIGURATION IS SUITABLE FOR RUNNING QUICKLY IN DEBUG MODE. ### + ### (especially if output intervals are divided by 10) ### + ### ### + ### MANY COMPONENTS ARE TESTED HERE...BUT NOT SOCRATES. ### + ### ### + ### ### ### ## ## ## # # # NOTICE # # # ## ## ## ### ### ### + + + + # Global configuration global_configuration=global_config @@ -24,6 +42,12 @@ scalar_diagnostics_enabled=.true. conditional_diagnostics_column_enabled=.true. conditional_diagnostics_whole_enabled=.true. pdf_analysis_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +tracers_enabled=.true. +trajectories_enabled=.true. +radioactive_tracers_enabled=.true. +showcallbacks=.true. +l_lem_dissipation_rate=.false. registered=.true. # Print registered components and their version numbers to stdout showcallbacks=.true. # Print registered callbacks in calling order to stdout @@ -32,9 +56,11 @@ cfl_monitor=.false. # Print dtm changes and cfl info to stdout # Specific diagnostic switches l_cloud_mask=.true. # Enables 3d binary SOCRATES-based total cloud mask diagnostic -cloud_mask_method= SOCRATES # Cloud mask/fraction calculation method [ DEFAULT, SOCRATES ] +cloud_mask_method=DEFAULT # Cloud mask/fraction calculation method [ DEFAULT, SOCRATES ] # DEFAULT is based on exceeding qlcrit and qicrit -l_partial_liq_ice= .true. # Calculate partial cloud fracions of liquid and ice, otherwise homogeneous binary +l_partial_liq_ice=.true. # Calculate partial cloud fracions of liquid and ice, otherwise homogeneous binary + +logging=4 # -------------------------------------------------- # Parameters used to compute conditional diagnostics @@ -43,24 +69,31 @@ l_partial_liq_ice= .true. # Calculate partial cloud fracions of liquid # ndiag: (automatically calculated) number of diagnostics entered under diag_request # : MUST include 'area' # Resulting diagnostic array dimensions are (time, ndiag, ncond*2, nz) -# from 1:ncond cond=.true.; ncond+1:ncond*2 cond=.false. -# Debugging: when running the model, built with the cray debugger, the model will fail at the point of the -# IO reduction if ncond*2*ndiag > ~830. Just run with fewer to get past this. +# [1:ncond] condition=.true. +# [ncond+1:ncond*2] condition=.false. +# Debugging: when running the model, built with the cray debugger, the model might fail at the +# point of the IO reduction if ncond*2*ndiag > ~830. +# Run with fewer of these requests to get past this. (comment everything after ALL) cond_request=ALL, BYu, BCu, NrBCu, AC, ACu, ACd, WG1, WL1, ALu, ALd, CLu, CLd, AH, AL, AI, PPd, VPd, PVd, MO, BM, AA, AV diag_request=area, W, W2, TH, WTH, THP, WTHP, THVP, WTHVP, THP2, WTHSG, W3, RH, U, V, WU, WV, WUSG, WVSG, TEMP, THL, THLP, THLP2, QVLI, QVLIP, QVLIP2, QRSG, QRSGP, QRSGP2, WQVLIP, WQRSGP -# critical thv and up/downdraft thresholds + +# Critical thv and up/downdraft thresholds thvprcrit=0.0 wSupcrit=1.0 wSdwncrit=-1.0 wupcrit=0.0 wdwncrit=0.0 -# critical ql, qi and q_hydrometeor for conditional sampling + +# Critical ql, qi and q_hydrometeor for conditional sampling # Cloud liquid water mixing ratio critical minimum to define cloud [kg/kg] qlcrit= 1.e-5 # also affects cloud diagnostics elsewhere in model qicrit= 1.e-5 # also affects cloud diagnostics elsewhere in model qpptcrit= 1.e-5 vpptcrit= 1.e-4 -# Diff calculations of thv; .false. means thv=th(1+0.61qv) and .true. mean thv=th(1+0.61qv-(ql+qi)) + +# Calculation of thv: +# .false. --> thv=th(1+0.61qv) +# .true. --> thv=th(1+0.61qv-(ql+qi)) thv_from_th_with_liqice=.true. # -------------------------------------------------- @@ -68,39 +101,52 @@ thv_from_th_with_liqice=.true. # Parameters used to compute vertical velocity critical thresholds # ----------------------------------------------------------------- # used only when pdf_analysis_enabled=.true. -# fractional percentiles: -# uppercrit=0.05 --> set updraft threshold at top 5% of w -# dwnpercrit=0.05 --> set downdraft threshold at bottom 5% of w -show_critical_w=.false. # Diagnostic printing +# fractional percentiles, e.g.: +# uppercrit = 0.05 --> set updraft threshold at top 5% of w +# dwnpercrit = 0.05 --> set downdraft threshold at bottom 5% of w +show_critical_w=.false. # Diagnostic printing uppercrit=0.05 dwnpercrit=0.05 -# ----------------------------------------------------------------- +# vertical velocity histogram parameters +n_w_bins=750 # number of bins = (max-min)/bin_size + # - max determined by these parameters. +w_bin_size=0.1 # size of bin [m/s] +w_bin_min=-25.0 # lower bound of historgram [m/s] +# ----------------------------------------------------------------- # Control configuration -display_synopsis_frequency=200 # Status output write frequency [ts] -termination_time=108000. # Model run end time [s] -dtm=1.0 # Initial model time step [s] +display_synopsis_frequency=20 # Status output write frequency [ts] +termination_time=30000. # Model run end time [s] +dtm=1.0 # Initial model time step [s] # IO server configuration -ioserver_configuration_file="io/io_cfg_files/data_write_with_conditionals.xml" -moncs_per_io_server=11 # Set to 11 for MetOffice machines -sampling_frequency=50 # Sampling frequency for time averaging [ts] -3d_sampling_frequency=50 # 3d Sampling frequency for time averaging [ts] -mm=1000. # An output frequency [s] -mm1=1000. # An output frequency [s] -diag_write_freq=3600. # Reinitialization frequency for diagnostic files [s] - -# CRMStyle configuration -crms_file="diagnostic_files/crmstyle_ts.nc" # CRMStyle file location and prefix +ioserver_configuration_file="io/io_cfg_files/paracon_multi.xml" +moncs_per_io_server=8 # Set to 8 for MetOffice machines + +time_basis=.true. # logical for sampling and output intervals + # [ .false. (timestep, DEFAULT) | .true. (time) ] + # - both treated as integers (no fractional-s time intervals) +sampling_frequency=300 # Sampling interval for time averaging, integer [ ts | s ] +3d_sampling_frequency=1800 # 3d Sampling interval for time averaging, integer [ ts | s ] +mm=900. # An output interval, real [ s ] +mm1=1800. # An output interval, real [ s ] +diag_write_freq=1800. # Reinitialization interval for diagnostic files, real [ s ] + +diagnostic_file_3d="diagnostic_files/RCE_diagnostic_3d.nc" +diagnostic_file_2d="diagnostic_files/RCE_diagnostic_2d.nc" +diagnostic_file_1d="diagnostic_files/RCE_diagnostic_1d.nc" +diagnostic_file_0d="diagnostic_files/RCE_diagnostic_0d.nc" +diagnostic_file_sd="diagnostic_files/RCE_diagnostic_sd.nc" +diagnostic_file_cd="diagnostic_files/RCE_diagnostic_cd.nc" # Checkpoint configuration checkpoint_frequency=0 # Checkpoint file creation frequency [ts] checkpoint_file="checkpoint_files/RCE_dump.nc" # Checkpoint file location and prefix # Internal walltime configuration -check_walltime_frequency=100 # Frequency to check wall clock against walltime_limit [ts] -walltime_limit=00:15:00 # Internal wall clock time limit on simulation [hh:mm:ss] +check_walltime_frequency=20 # Frequency to check wall clock against walltime_limit [ts] +walltime_limit=00:07:00 # Internal wall clock time limit on simulation [hh:mm:ss] # Advection choices (choose pw or tvd component schemes for flow, theta, and q advection) advection_flow_fields=pw @@ -108,11 +154,11 @@ advection_theta_field=tvd advection_q_fields=tvd # CFL configuration -cfl_frequency=10 # Frequency for checking CFL conditions [ts] -cfl_cvismax=0.4 # 'worst case' viscous stability parameter (eq 153 of lemdoc2.pdf) -cfl_cvelmax=0.4 # Largest advective Courant number (eq 152 of lemdoc2.pdf) -cfl_dtmmax=10.0 # Maximum time step [s] -cfl_dtmmin=0.2 # Minimum time step [s] +cfl_frequency=17 # Frequency for checking CFL conditions [ts] +cfl_cvismax=0.4 # 'worst case' viscous stability parameter (eq 153 of lemdoc2.pdf) +cfl_cvelmax=0.4 # Largest advective Courant number (eq 152 of lemdoc2.pdf) +cfl_dtmmax=10.0 # Maximum time step [s] +cfl_dtmmin=0.001 # Minimum time step [s] # not convinced this works as fixing the gal # adds the gal to the wind, this is not correct. @@ -126,8 +172,8 @@ vgal=0.0 thref0=298.7259 surface_pressure=100000. surface_reference_pressure=100000. -x_size=66 -y_size=66 +x_size=64 +y_size=64 z_size=99 dxx=1000 dyy=1000 @@ -159,14 +205,12 @@ z_init_pl_q=0., 680., 1300., 3500., 4150., 4850., 5200., 6100., 7000., f_init_pl_q=13.0e-3,12.5e-3,8.5e-3,4.3e-3,2.44e-3,1.52e-3,1.31e-3,0.75e-3,0.48e-3,0.28e-3,0.080e-3,0.038e-3,0.012e-3,0.008e-3,0.003e-3,0.0005e-3,0.0, 0.0 l_matchthref=.true. -l_thref_zero_buoy=.false. # Smagorinsky configuration # Default values for the smagorinsky subgrid constants # smag-subb=40.0 # smag-subc=16.0 -# The subgrid constant values for the 'conventional' subgrid model -# of Brown (1999) +# The subgrid constant values for the 'conventional' subgrid model of Brown (1999) smag-subb=1.43 smag-subc=1.43 @@ -202,7 +246,7 @@ l_subs_pl_theta=.false. l_subs_pl_q=.false. # Large-scale forcing -# Add om a component to force theta +# Add on a component to force theta l_constant_forcing_theta=.true. l_constant_forcing_q=.false. l_constant_forcing_u=.true. @@ -221,31 +265,39 @@ forcing_timescale_u=21600. forcing_timescale_v=21600. # Forcing profiles -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. units_theta_force=K/day -z_force_pl_theta=0., 12000., 16000, 40000.0 +z_force_pl_theta=0., 1000., 2200., 4100., 9500., 11500., 13000., 14000., 40000.0 convert_input_theta_from_temperature=.true. -f_force_pl_theta=-1.5, -1,5, 0.0, 0.0 +f_force_pl_theta=-1.7, -1.0, -0.85, -0.85, -1.3, -0.85, -0.1, 0.0, 0.0 # surface flux config # type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +# type_of_surface_boundary_conditions=PRESCRIBED_SURFACE_VALUE=1 use_surface_boundary_conditions=.true. use_time_varying_surface_values= .false. type_of_surface_boundary_conditions = 1 surface_boundary_input_times = 0 surface_temperatures = 300. -surface_latent_heat_flux = 0. +surface_latent_heat_flux = 0. surface_sensible_heat_flux = 0. #CASIM options - option=22222 l_warm=.false. - aerosol_option=0 iopt_act=0 iopt_inuc=0 process_level=0 l_override_checks = .true. - number_q_fields=11 + +#Tracer configuration +traj_interval=mm1 +n_radioactive_tracers=3 +tracer_decay_rate=4.0, 1.0, 1.2345e-6 +tracer_surface_bc_option=0, 1, 2 # tracer surface BC option + # 0 = flux computed from decay rate. + # 1 = specified flux. + # 2 = specified value. +tracer_surface_bc=0.0, 1.0, 10.0 # tracer surface bc value. diff --git a/testcases/radiative_convective_equilibrium/src/rcemip.F90 b/testcases/radiative_convective_equilibrium/src/rcemip.F90 new file mode 100644 index 00000000..2dac3b53 --- /dev/null +++ b/testcases/radiative_convective_equilibrium/src/rcemip.F90 @@ -0,0 +1,173 @@ +module rcemip_mod + + ! This module provides routines to assist in conforming to the RCEMIP specifications of + ! Wing et al. (2018) Geosci. Model Dev., 11, 793-813, 2018 + ! https://doi.org/10.5194/gmd-11-793-2018 + ! For use with testcases/radiative_convective_equilibrium/RCEMIP.mcf + + use datadefn_mod, only : DEFAULT_PRECISION + use monc_component_mod, only : component_descriptor_type + use state_mod, only : model_state_type + use grids_mod, only : X_INDEX, Y_INDEX, Z_INDEX + use science_constants_mod, only : r_over_cp, r, g + use optionsdatabase_mod, only : options_get_real_array, options_get_real, & + options_get_logical, options_get_integer, options_get_array_size, options_get_string_array + use logging_mod, only: log_master_log, LOG_ERROR, LOG_INFO, log_is_master + use q_indices_mod, only: get_q_index, standard_q_names + use def_merge_atm, only: str_merge_atm + + implicit none + +#ifndef TEST_MODE + private +#endif + + public rcemip_get_descriptor, rcemip_init, rcemip_ozone +contains + + type(component_descriptor_type) function rcemip_get_descriptor() + rcemip_get_descriptor%name="rcemip" + rcemip_get_descriptor%version=0.1 + rcemip_get_descriptor%initialisation=>initialisation_callback + rcemip_get_descriptor%timestep=>timestep_callback + end function rcemip_get_descriptor + + !! Note that this is not the most efficient way to iterate through theta (j heavy), but it is the same as the LEM set up + !! so directly comparable and probably doesn't matter too much as it is just called onec in the initialisation + subroutine initialisation_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + + end subroutine initialisation_callback + + subroutine timestep_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + + end subroutine timestep_callback + + !> Called by gridmanager.F90's calculate_initial_profiles routine for proper order placement + !! Creates RCEMIP analytic sounding approximating the moist tropical sounding of Dunion (2011) + !! @param current_state The current model state_mod + subroutine rcemip_init(current_state) + type(model_state_type), intent(inout) :: current_state + + real(kind=DEFAULT_PRECISION), allocatable :: zngrid(:), qv(:), tv(:), tabs(:), p(:) + integer :: i, j, k, nz, iq + + ! Analytic sounding paramters + real(kind=DEFAULT_PRECISION), parameter :: & + zt = 15000.0_DEFAULT_PRECISION, & ! [ m ] (approximate tropopause height) + q0_295 = 12.00e-3_DEFAULT_PRECISION, & ! [ kg/kg ] (specific humidity) + q0_300 = 18.65e-3_DEFAULT_PRECISION, & ! [ kg/kg ] (specific humidity) + q0_305 = 24.00e-3_DEFAULT_PRECISION, & ! [ kg/kg ] (specific humidity) + qt = 1E-14_DEFAULT_PRECISION, & ! [ kg/kg ] (specific humidity) + zq1 = 4000.0_DEFAULT_PRECISION, & ! [ m ] + zq2 = 7500.0_DEFAULT_PRECISION, & ! [ m ] + gamma = 0.0067_DEFAULT_PRECISION, & ! [ K/m ] + p0 = 1014.8_DEFAULT_PRECISION, & ! [ hPa ] + const = 0.608_DEFAULT_PRECISION + real(kind=DEFAULT_PRECISION) :: q0, tv0, tvt, pt + integer :: sst + logical :: l_matchthref + + call log_master_log(LOG_INFO, "RCEMIP-specified analytical profiles will be applied.") + + l_matchthref = options_get_logical(current_state%options_database, "l_matchthref") + sst = options_get_integer(current_state%options_database, "rcemip_sst") + + ! Set surface values (specific humidity, virtual temperature) + if (sst .eq. 295) q0 = q0_295 + if (sst .eq. 300) q0 = q0_300 + if (sst .eq. 305) q0 = q0_305 + tv0 = real(sst,DEFAULT_PRECISION) * (1.0_DEFAULT_PRECISION + const * q0) + tvt = tv0 - gamma * zt ! (virtual temperature at zt) + pt = p0 * (tvt/tv0) ** (G/(r*gamma)) + + nz = current_state%global_grid%size(Z_INDEX) + allocate(zngrid(nz),qv(nz),tv(nz),tabs(nz),p(nz)) + zngrid(:)=current_state%global_grid%configuration%vertical%zn(:) + + ! Compute profiles + do k=2,nz + if (zngrid(k) .ge. 0.0_DEFAULT_PRECISION .and. zngrid(k) .le. zt) then + qv(k) = q0 * exp(-zngrid(k)/zq1) * exp(-(zngrid(k)/zq2)**2) ! (specific humidity) + tv(k) = tv0 - gamma * zngrid(k) + p(k) = p0*((tv0 -(gamma *zngrid(k)))/tv0)**(G/(r *gamma)) + else if (zngrid(k) .gt. zt) then + qv(k) = qt ! (specific humidity) + tv(k) = tvt + p(k) = pt * exp(-( G*(zngrid(k)-zt)/(r*tvt) )) + end if + tabs(k) = tv(k) / (1.0_DEFAULT_PRECISION + const * qv(k)) + end do + qv(1)=qv(2) + tv(1)=tv(2) + p(1)=p(2) + tabs(1)=tabs(2) + + ! Conversion: q = w/(1+w) <===> w = q/(1-q) + ! Specific humidity to mixing ratio, store in q_init + iq = get_q_index("vapour","rcemip_mod") + current_state%global_grid%configuration%vertical%q_init(:, iq) & + = qv(:)/(1.0_DEFAULT_PRECISION - qv(:)) + ! Convert absolute temperature to potential temperature + ! Pressure used in mb [hPa] + current_state%global_grid%configuration%vertical%theta_init(:) & + = tabs(:)*(1000.0_DEFAULT_PRECISION/p(:))**r_over_cp + + ! Handle mixing ratio initialisation + if (.not. current_state%continuation_run) then + do i=current_state%local_grid%local_domain_start_index(X_INDEX), & + current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), & + current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%q(iq)%data(:,j,i) & + = current_state%global_grid%configuration%vertical%q_init(:, iq) + end do + end do + end if + + ! Handle theta initialisation + if (.not. current_state%continuation_run) then + if (l_matchthref) then + if(.not. current_state%use_anelastic_equations) then + call log_master_log(LOG_ERROR, "Non-anelastic equation set and l_maththref are incompatible") + end if + current_state%global_grid%configuration%vertical%thref = current_state%global_grid%configuration%vertical%theta_init + end if + + ! Fill theta data + do i=current_state%local_grid%local_domain_start_index(X_INDEX), current_state%local_grid%local_domain_end_index(X_INDEX) + do j=current_state%local_grid%local_domain_start_index(Y_INDEX), current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%th%data(:,j,i) = & + current_state%global_grid%configuration%vertical%theta_init(:) - & + current_state%global_grid%configuration%vertical%thref(:) + end do + end do + end if + end subroutine rcemip_init + + + ! Routine to set the ozone profile by overwriting mcc values. + ! @param merge_fields: merged model/mcc fields for SOCRATES + subroutine rcemip_ozone(merge_fields) + type (str_merge_atm), intent(inout) :: merge_fields + + real(kind=DEFAULT_PRECISION), parameter :: & + mmr_fac = 1e-6, & ! conversion factor (ppmv --> mmr) + hPa_fac = 1e-2, & ! conversion factor (Pa --> hPa) + g1 = 3.6478, & ! O_3 fit parameter g1, [ppmv hPa**-g2] + g2 = 0.83209, & ! O_3 fit parameter g2, [] + g3 = 11.3515, & ! O_3 fit parameter g3, [hPa] + mma = 28.97, & ! mean molar mass of dry air + mmo = 47.997 ! mean molar mass of ozone + integer :: k + + do k=1,size(merge_fields%pres_n) !size is mcc%irad_levs + merge_fields%o3_n(k) = (g1 * ((merge_fields%pres_n(k)*hPa_fac)**g2) & + * exp(-((merge_fields%pres_n(k)*hPa_fac)/g3)) ) & + * mmr_fac * (mmo/mma) ! convert from ppmv to mmr + end do + + end subroutine rcemip_ozone + +end module rcemip_mod diff --git a/testcases/radiative_convective_equilibrium/submonc_scripts/csubmonc.pbs b/testcases/radiative_convective_equilibrium/submonc_scripts/csubmonc.pbs index a179bda0..ceba5827 100644 --- a/testcases/radiative_convective_equilibrium/submonc_scripts/csubmonc.pbs +++ b/testcases/radiative_convective_equilibrium/submonc_scripts/csubmonc.pbs @@ -3,7 +3,6 @@ #PBS -l select=1 #PBS -l walltime=00:20:00 #PBS -j oe -#PBS -A paracon #PBS -q development diff --git a/testcases/shallow_convection/bomex.mcf b/testcases/shallow_convection/bomex.mcf index b23e44c5..aa4052ce 100644 --- a/testcases/shallow_convection/bomex.mcf +++ b/testcases/shallow_convection/bomex.mcf @@ -2,7 +2,9 @@ global_configuration=global_config # Override global component defaults +checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -35,8 +37,8 @@ moncs_per_io_server=8 sampling_frequency=20 3d_sampling_frequency=4500 mm=1800.0 -mm1=60.0 -diag_write_freq=7200.0 +mm1=20.0 +diag_write_freq=10800.0 # Checkpoint configuration checkpoint_frequency=0 @@ -140,7 +142,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/testcases/shallow_convection/bomex_casim.mcf b/testcases/shallow_convection/bomex_casim.mcf index 266584ee..408b3acd 100644 --- a/testcases/shallow_convection/bomex_casim.mcf +++ b/testcases/shallow_convection/bomex_casim.mcf @@ -2,7 +2,9 @@ global_configuration=global_config # Override global component defaults +checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -140,7 +142,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/testcases/shallow_convection/bomex_casim_socrates.mcf b/testcases/shallow_convection/bomex_casim_socrates.mcf index 00e60474..a9ad5e03 100644 --- a/testcases/shallow_convection/bomex_casim_socrates.mcf +++ b/testcases/shallow_convection/bomex_casim_socrates.mcf @@ -2,7 +2,9 @@ global_configuration=global_config # Override global component defaults +checkpointer_enabled=.true. fftsolver_enabled=.true. +iterativesolver_enabled=.false. pw_advection_enabled=.true. simplesetup_enabled=.true. smagorinsky_enabled=.true. @@ -141,7 +143,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day -l_constant_forcing_theta_z2pressure=.true. +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 @@ -186,8 +188,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -203,8 +205,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/shallow_convection/makefile b/testcases/shallow_convection/makefile new file mode 100644 index 00000000..caa1d888 --- /dev/null +++ b/testcases/shallow_convection/makefile @@ -0,0 +1,15 @@ +SRCSF = src/shallow_convection.F90 + +BUILDDIR=build +NETCDF_DIR?=/usr +COREDIR=../../model_core/build +FFLAGS=-I $(BUILDDIR) -I $(COREDIR) -I $(NETCDF_DIR)/include $(COMPILERFFLAGS) +OBJS = $(patsubst %.F90,$(BUILDDIR)/%.o,$(SRCSF)) + +all: create-build-dirs $(OBJS) + +create-build-dirs: + mkdir -p $(BUILDDIR) + +$(OBJS) : $(BUILDDIR)/%.o : %.F90 + $(FTN) $(OPT) $(FFLAGS) $< -o $(BUILDDIR)/$(notdir $@) diff --git a/testcases/shallow_convection/paracon/bomex_4631.mcf b/testcases/shallow_convection/paracon/bomex_4631.mcf index 8e5caf94..941a6604 100644 --- a/testcases/shallow_convection/paracon/bomex_4631.mcf +++ b/testcases/shallow_convection/paracon/bomex_4631.mcf @@ -21,35 +21,36 @@ iobridge_enabled=.true. scalar_diagnostics_enabled=.true. profile_diagnostics_enabled=.true. subgrid_profile_diagnostics_enabled=.true. -flux_budget_enabled=.true. -Circle_A_enabled=.true. +flux_budget_enabled=.false. showcallbacks=.true. +checkpointer_enabled=.true. # Control configuration -display_synopsis_frequency=100 +display_synopsis_frequency=150 termination_time=86400. dtm=0.4 # IO server configuration -ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" -moncs_per_io_server=11 -sampling_frequency=50 -3d_sampling_frequency=50 -mm=100.0 -mm1=100.0 -diag_write_freq=600.0 +#ioserver_configuration_file="io/io_cfg_files/data_write_1file.xml" +ioserver_configuration_file="io/io_cfg_files/paracon_level0_control.xml" +diagnostic_file="diagnostic_files/BOMEX_m0025_g0600_all.nc" +moncs_per_io_server=8 +sampling_frequency=25 +3d_sampling_frequency=150 +mm=600.0 +mm1=600.0 +diag_write_freq=1800.0 # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="checkpoint_files/BOMEX_dump.nc" check_walltime_frequency=100 -walltime_limit=02:45:00 +walltime_limit=01:00:00 # Advection choices advection_flow_fields=pw advection_theta_field=tvd advection_q_fields=tvd -advection_CA_fields=tvd # CFL configuration cfl_frequency=10 @@ -57,24 +58,41 @@ cfl_cvismax=0.4 cfl_cvelmax=0.4 cfl_dtmmax=0.4 cfl_dtmmin=0.001 +cfl_monitor=.false. + + +#diag switches +l_cloud_mask=.true. +cloud_mask_method= DEFAULT #CA +l_partial_liq_ice=.false. + +#up/down thresholds +thvprcrit=0.0 +wSupcrit=1.0 + +#cloud water mixing ratio +qlcrit=1.e-5 +qicrit=1.e-5 + +#show_critical_w=.false. #diagnostic printing + # Simple setup configuration # We'll want to change this reference profile later thref0=298.7 surface_pressure=100000. surface_reference_pressure=100000. -x_size=256 -y_size=256 -z_size=76 -dxx=100 -dyy=100 +x_size=600 +y_size=600 +z_size=121 +dxx=25 +dyy=25 zztop=3000.0 -kgd=1,76 +kgd=1,121 hgd=0.0,3000.0 nsmth=80 galilean_transformation=.false. - enable_theta=.true. number_q_fields=2 use_anelastic_equations=.true. @@ -144,6 +162,7 @@ l_constant_forcing_v=.false. # Unit options are K/s or K/day units_theta_force=K/day +l_constant_forcing_theta_height=.true. z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 diff --git a/testcases/shallow_convection/paracon/bomex_tracer.mcf b/testcases/shallow_convection/paracon/bomex_tracer.mcf new file mode 100644 index 00000000..841537d3 --- /dev/null +++ b/testcases/shallow_convection/paracon/bomex_tracer.mcf @@ -0,0 +1,213 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.true. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.false. +showcallbacks=.true. +tracers_enabled=.true. +trajectories_enabled=.true. +radioactive_tracers_enabled=.true. + +# Test case source code +shallow_convection_enabled=.true. + +# Add initial values to tracers. +initialisation_stage_ordering+=shallow_convection +dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, socrates_couple, lwrad_exponential, simplecloud, casim, shallow_convection, tracers, flux_budget, subgrid_profile_diagnostics, diverr, psrce, diagnostics_3d, profile_diagnostics, casim_profile_dgs, scalar_diagnostics, stepfields + + +# Control configuration +display_synopsis_frequency=100 +#termination_time=86400. +termination_time=1300. +dtm=0.4 +logging=3 #4=DEBUG level logging 3= INFO level logging + +#Tracer configuration +traj_interval=mm2 +n_radioactive_tracers=3 +tracer_decay_rate=4.0, 1.0, 1.0 +tracer_surface_bc_option=0, 1, 2 # tracer surface BC option + # 0 = flux computed from decay rate. + # 1 = specified flux. + # 2 = specified value. +tracer_surface_bc=0.0, 1.0, 10.0 # tracer surface bc value. + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/paracon_data_write_2file_tracer.xml" +diagnostic_file="diagnostic_files/diagnostics_ts.nc" +moncs_per_io_server=8 +sampling_frequency=10 +3d_sampling_frequency=60 +mm=60.0 +mm1=60.0 +mm2=60.0 +diag_write_freq=600.0 + + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/bomex_dump.nc" +check_walltime_frequency=60 +walltime_limit=00:30:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd +#advection_CA_fields=tvd + +# CFL configuration +cfl_frequency=10 +cfl_cvismax=0.4 +cfl_cvelmax=0.4 +cfl_dtmmax=1.0 +cfl_dtmmin=0.001 + +cfl_monitor=.false. # enable writing of cfl and dtm change information to stdout + +# Diagnostic sampling basis (unit selection) +time_basis=.true. # logical for sampling and output intervals [ .false. (timestep, DEFAULT) | .true. (time) ] + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=298.7 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=256 +y_size=256 +z_size=76 +dxx=100 +dyy=100 +zztop=3000.0 +kgd=1,76 +hgd=0.0,3000.0 +nsmth=80 +galilean_transformation=.false. + + +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 520.0, 1500., 2000., 3000. +f_init_pl_theta=298.7, 298.7, 302.4, 308.2, 311.85 +l_init_pl_u=.true. +z_init_pl_u=0.0, 700.0, 3000. +f_init_pl_u=-8.75, -8.75, -4.61 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 520.0, 1500., 2000., 3000. +f_init_pl_q=17.0e-3, 16.3e-3, 10.7e-3, 4.2e-3, 3.0e-3 + + +l_matchthref=.true. +l_lem_dissipation_rate = .false. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 500.0, 501.0, 3000. +f_rand_pl_theta=0.5, 0.5, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=3000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +baroclinicity_use_geostrophic_shear=.false. +fcoriol=0.0000376 +geostrophic_wind_rate_of_change_in_x=0.0018 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-10. +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=2300.0 +hdmp=2000.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1500.0, 2500.0, 3000. +f_subs_pl=0.0, -0.0065, 0.0, 0.0 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=1 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# Large-scale forcing +l_constant_forcing_theta=.true. +l_constant_forcing_q=.true. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# Unit options are K/s or K/day +units_theta_force=K/day +l_constant_forcing_theta_height=.true. +z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. +f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 + +names_constant_forcing_q=vapour +z_force_pl_q=0.0, 300.0, 500.0, 3000. +f_force_pl_q=-1.2e-5, -1.2e-5, 0.0, 0.0 +# Unit options are kg/kg/s, kg/kg/day, g/kg/s or g/kg/day +units_q_force=g/kg/s + +convert_input_theta_from_temperature=.true. + +convert_input_specific_to_mixingratio=.true. # Not yet implemented + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=0 +constant_forcing_type_v=0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 0 +surface_boundary_input_times = 0 +surface_latent_heat_flux = 130.052 +surface_sensible_heat_flux = 8.04 + +#shallow_convection (BOMEX) settings +bl_height=520.0 +bl_tracer_value=1.0 +cl_height=2000.0 +cl_tracer_value=1.0 +include_blob=.true. + diff --git a/testcases/shallow_convection/paracon/bomex_tracer_fxts.mcf b/testcases/shallow_convection/paracon/bomex_tracer_fxts.mcf new file mode 100644 index 00000000..310f7bfc --- /dev/null +++ b/testcases/shallow_convection/paracon/bomex_tracer_fxts.mcf @@ -0,0 +1,222 @@ +# Global configuration +global_configuration=global_config + +# Override global component defaults +fftsolver_enabled=.true. +pw_advection_enabled=.true. +simplesetup_enabled=.true. +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc +viscosity_enabled=.true. +diffusion_enabled=.true. +simplecloud_enabled=.true. +coriolis_enabled=.true. +damping_enabled=.true. +forcing_enabled=.true. +randomnoise_enabled=.true. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. +iobridge_enabled=.true. +scalar_diagnostics_enabled=.true. +profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. +showcallbacks=.true. +tracers_enabled=.true. +trajectories_enabled=.true. +radioactive_tracers_enabled=.true. + +l_lem_dissipation_rate = .false. + +# Test case source code +shallow_convection_enabled=.true. + +# Add initial values to tracers. +initialisation_stage_ordering+=shallow_convection +dynamics_group_contents=kidtestcase, pw_advection, tvd_advection, th_advection, diffusion, viscosity, coriolis, buoyancy, damping, forcing, set_consistent_lowbc, socrates_couple, lwrad_exponential, simplecloud, casim, shallow_convection, tracers, flux_budget, subgrid_profile_diagnostics, diverr, psrce, diagnostics_3d, profile_diagnostics, casim_profile_dgs, scalar_diagnostics, stepfields + + +#shallow_convection (BOMEX) settings +bl_height=520.0 +bl_tracer_value=1.0 +cl_height=2000.0 +cl_tracer_value=1.0 +include_blob=.true. + +# Diagnostic sampling basis (unit selection) +time_basis=.false. +retain_model_time=.false. +only_compute_on_sample_timestep=.true. +force_output_on_interval=.true. +l_constant_dtm=.true. + + +# Control configuration +display_synopsis_frequency=1 +#termination_time=86400. +termination_time=50500. +#termination_time=1300. +dtm=0.4 +logging=4 #4=DEBUG level logging 3= INFO level logging + +#Tracer configuration +traj_interval=mm # name of config variable used to set 3d_tracers output_frequency + # ensures trajectory reinitialization at data write time +n_radioactive_tracers=3 +tracer_decay_rate=4.0, 1.0, 1.0123456e1 +tracer_surface_bc_option=0, 1, 2 # tracer surface BC option + # 0 = flux computed from decay rate. + # 1 = specified flux. + # 2 = specified value. +tracer_surface_bc=0.0, 1.0, 10.0 # tracer surface bc value. + +# IO server configuration +ioserver_configuration_file="io/io_cfg_files/testing.xml" +diagnostic_file="diagnostic_files/diagnostics_ts.nc" +diagnostic_file2="diagnostic_files/diagnosticx_ts.nc" +moncs_per_io_server=8 +sampling_frequency=10 +3d_sampling_frequency=150 +mm=600.0 +mm1=200.0 +mm2=300.0 +diag_write_freq=1200.0 + + +# Checkpoint configuration +checkpoint_frequency=0 +checkpoint_file="checkpoint_files/bomex_dump.nc" +check_walltime_frequency=20 +walltime_limit=00:07:00 + +# Advection choices +advection_flow_fields=pw +advection_theta_field=tvd +advection_q_fields=tvd +#advection_CA_fields=tvd + +# CFL configuration +cfl_frequency=100 #1000000 +cfl_cvismax=0.5 +cfl_cvelmax=0.5 +cfl_dtmmax=10.0 #40000.000000000002345e-5 +cfl_dtmmin=0.0001 #40000.000000000002345e-5 + +cfl_monitor=.true. # enable writing of cfl and dtm change information to stdout + +# Simple setup configuration +# We'll want to change this reference profile later +thref0=298.7 +surface_pressure=100000. +surface_reference_pressure=100000. +x_size=256 +y_size=256 +z_size=76 +dxx=100 +dyy=100 +zztop=3000.0 +kgd=1,76 +hgd=0.0,3000.0 +nsmth=80 +galilean_transformation=.false. + + +enable_theta=.true. +number_q_fields=2 +use_anelastic_equations=.true. +origional_vertical_grid_setup=.true. +passive_th=.false. +passive_q=.false. +backscatter=.false. +use_viscosity_and_diffusion=.true. + +# Initialization of fields +l_init_pl_theta=.true. +z_init_pl_theta=0.0, 520.0, 1500., 2000., 3000. +f_init_pl_theta=298.7, 298.7, 302.4, 308.2, 311.85 +l_init_pl_u=.true. +z_init_pl_u=0.0, 700.0, 3000. +f_init_pl_u=-8.75, -8.75, -4.61 +l_init_pl_v=.false. +l_init_pl_q=.true. +names_init_pl_q=vapour +z_init_pl_q=0.0, 520.0, 1500., 2000., 3000. +f_init_pl_q=17.0e-3, 16.3e-3, 10.7e-3, 4.2e-3, 3.0e-3 + +l_matchthref=.true. + +# Random noise +l_rand_pl_theta=.true. +z_rand_pl_theta=0.0, 500.0, 501.0, 3000. +f_rand_pl_theta=0.5, 0.5, 0.0001, 0.0001 + +# Simple cloud +max_height_cloud=3000. + +# physical constants +z0=0.0002 +z0th=0.0002 + +# Coriolis +baroclinicity_use_geostrophic_shear=.false. +fcoriol=0.0000376 +geostrophic_wind_rate_of_change_in_x=0.0018 +geostrophic_wind_rate_of_change_in_y=0.0 +surface_geostrophic_wind_x=-10. +surface_geostrophic_wind_y=0.0 + +# Damping configuration +dmptim=0.001 +zdmp=2300.0 +hdmp=2000.0 + +# Subsidence profile +l_subs_pl_theta=.true. +z_subs_pl=0.0, 1500.0, 2500.0, 3000. +f_subs_pl=0.0, -0.0065, 0.0, 0.0 +l_subs_pl_q=.true. + +#SUBSIDENCE=1, DIVERGENCE=0 +subsidence_input_type=1 +subsidence_local_theta=.true. +subsidence_local_q=.true. + +# Large-scale forcing +l_constant_forcing_theta=.true. +l_constant_forcing_q=.true. +l_constant_forcing_u=.false. +l_constant_forcing_v=.false. + +# Unit options are K/s or K/day +units_theta_force=K/day +l_constant_forcing_theta_height=.true. +z_force_pl_theta=0.0, 1500.0, 2500.0, 3000. +f_force_pl_theta=-2.0, -2.0, 0.0, 0.0 + +names_constant_forcing_q=vapour +z_force_pl_q=0.0, 300.0, 500.0, 3000. +f_force_pl_q=-1.2e-5, -1.2e-5, 0.0, 0.0 +# Unit options are kg/kg/s, kg/kg/day, g/kg/s or g/kg/day +units_q_force=g/kg/s + +convert_input_theta_from_temperature=.true. + +convert_input_specific_to_mixingratio=.true. # Not yet implemented + +# TENDENCY=0, RELAXATION=1, INCREMENTS=2 +constant_forcing_type_theta=0 +constant_forcing_type_q=0 +constant_forcing_type_u=0 +constant_forcing_type_v=0 + +# surface flux config +# type_of_surface_boundary_conditions=PRESCRIBED_FLUX=0 +use_surface_boundary_conditions=.true. +use_time_varying_surface_values= .false. +type_of_surface_boundary_conditions = 0 +surface_boundary_input_times = 0 +surface_latent_heat_flux = 130.052 +surface_sensible_heat_flux = 8.04 + + diff --git a/testcases/shallow_convection/src/shallow_convection.F90 b/testcases/shallow_convection/src/shallow_convection.F90 new file mode 100644 index 00000000..624e2630 --- /dev/null +++ b/testcases/shallow_convection/src/shallow_convection.F90 @@ -0,0 +1,144 @@ +module shallow_convection_mod + + ! This module provides an example of tracer initialization for the BOMEX case + + use datadefn_mod, only : DEFAULT_PRECISION + use logging_mod, only : LOG_INFO, LOG_ERROR, log_master_log + use monc_component_mod, only : component_descriptor_type + use state_mod, only : model_state_type + use grids_mod, only : vertical_grid_configuration_type, X_INDEX, Y_INDEX, Z_INDEX + use conversions_mod, only : conv_to_string + use optionsdatabase_mod, only : options_get_real, options_get_logical + + implicit none + +#ifndef TEST_MODE + private +#endif + + real(kind=DEFAULT_PRECISION) :: bl_height + real(kind=DEFAULT_PRECISION) :: bl_tracer_value + real(kind=DEFAULT_PRECISION) :: cl_height + real(kind=DEFAULT_PRECISION) :: cl_tracer_value + logical :: include_blob + + public shallow_convection_get_descriptor +contains + + type(component_descriptor_type) function shallow_convection_get_descriptor() + shallow_convection_get_descriptor%name="shallow_convection" + shallow_convection_get_descriptor%version=0.1 + shallow_convection_get_descriptor%initialisation=>initialisation_callback + shallow_convection_get_descriptor%timestep=>timestep_callback + end function shallow_convection_get_descriptor + + !> Initialise radioactive tracers: this is an example. + !! @param current_state The current model state + subroutine initialisation_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + type(vertical_grid_configuration_type) :: vertical + + integer :: n, i_tracer, i, j, k, x_offset, y_offset + REAL :: x_factor, y_factor ! x_pos = x_factor * (x_offset +i) etc. + REAL :: x_pos, y_pos ! x and y in m. + REAL :: x_size, y_size + REAL, PARAMETER :: sz = 100.0, sy = 1000.0, sx = 1000.0 + REAL :: rsq + REAL :: init_time + + vertical=current_state%global_grid%configuration%vertical + + if (.not. current_state%continuation_run) then + + ! Read in parameters from options database + bl_height=options_get_real(current_state%options_database, "bl_height") + bl_tracer_value=options_get_real(current_state%options_database, "bl_tracer_value") + cl_height=options_get_real(current_state%options_database, "cl_height") + cl_tracer_value=options_get_real(current_state%options_database, "cl_tracer_value") + include_blob=options_get_logical(current_state%options_database, "include_blob") + + if (current_state%timestep == 1) then + init_time = current_state%time + else + init_time = current_state%time + current_state%dtm + end if + + call log_master_log(LOG_INFO, "[SHALLOW CONVECTION] Initialise tracers"// & + " timestep: "//trim(conv_to_string(current_state%timestep))// & + " time: "//trim(conv_to_string(init_time,5)) ) + + x_factor = current_state%global_grid%configuration%horizontal%dx + y_factor = current_state%global_grid%configuration%horizontal%dy + + x_size = current_state%global_grid%size(X_INDEX) * x_factor + y_size = current_state%global_grid%size(Y_INDEX) * y_factor + + do n = 1, current_state%n_radioactive_tracers + + i_tracer = n + current_state%radioactive_tracer_index - 1 + current_state%tracer(i_tracer)%data(:,:,:) = 0.0_DEFAULT_PRECISION + current_state%ztracer(i_tracer)%data(:,:,:) = 0.0_DEFAULT_PRECISION + + ! Start at 0 + x_offset = current_state%local_grid%start(X_INDEX) - 1 - (1 + current_state%local_grid%halo_size(X_INDEX)) + y_offset = current_state%local_grid%start(Y_INDEX) - 1 - (1 + current_state%local_grid%halo_size(Y_INDEX)) + + do i = current_state%local_grid%local_domain_start_index(X_INDEX) - current_state%local_grid%halo_size(X_INDEX), & + current_state%local_grid%local_domain_end_index(X_INDEX) + current_state%local_grid%halo_size(X_INDEX) + + x_pos = x_factor * (x_offset + i) + + do j = current_state%local_grid%local_domain_start_index(Y_INDEX) - current_state%local_grid%halo_size(Y_INDEX), & + current_state%local_grid%local_domain_end_index(Y_INDEX) + current_state%local_grid%halo_size(Y_INDEX) + + y_pos = y_factor * (y_offset + j) + + do k = 1, current_state%global_grid%size(Z_INDEX) + + if (n .eq. 1) then + + ! Set tracer 1 to 1 in BL + if (vertical%zn(k) .le. bl_height) then + current_state%tracer(i_tracer)%data(k, j, i) = bl_tracer_value + current_state%ztracer(i_tracer)%data(k, j, i) = bl_tracer_value + end if + + else if (n .eq. 2) then + + ! Set tracer 2 to 1 in cloud layer + if (vertical%zn(k) .gt. bl_height .and. & + vertical%zn(k) .le. cl_height) then + current_state%tracer(i_tracer)%data(k, j, i) = bl_tracer_value + current_state%ztracer(i_tracer)%data(k, j, i) = bl_tracer_value + end if + + else if (include_blob .and. (n .eq. 3)) then + + ! Set tracer 3 to blob in inversion layer + rsq = ((vertical%zn(k) - 0.5 * (bl_height+cl_height))/sz)**2 + & + ((y_pos - 0.5 * y_size)/sy)**2 + ((x_pos - 0.5 * x_size)/sx)**2 + + current_state%tracer(i_tracer)%data(k, j, i) = EXP(-rsq/2.0) + current_state%ztracer(i_tracer)%data(k, j, i) = EXP(-rsq/2.0) + + end if ! case n + + end do ! k + + end do ! j + + end do ! i + + end do ! n + + endif + + end subroutine initialisation_callback + + subroutine timestep_callback(current_state) + type(model_state_type), intent(inout), target :: current_state + +! Do nothing! + end subroutine timestep_callback + +end module shallow_convection_mod diff --git a/testcases/shallow_convection/submonc_scripts/bomex_4631.pbs b/testcases/shallow_convection/submonc_scripts/bomex_4631.pbs new file mode 100644 index 00000000..312c7b11 --- /dev/null +++ b/testcases/shallow_convection/submonc_scripts/bomex_4631.pbs @@ -0,0 +1,37 @@ +#!/bin/bash --login +#PBS -N bomex_4631 +#PBS -l select=2 +#PBS -l walltime=01:20:00 +#PBS -j oe +#####PBS -P project_code +#PBS -q normal + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A CHECKPOINT JOB WITH THE CONTINUATION SCRIPT #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +# Make sure any symbolic links are resolved to absolute path +export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) + +# Change to the direcotry that the job was submitted from +cd $PBS_O_WORKDIR + +export SUBMISSION_SCRIPT_NAME=testcases/shallow_convection/submonc_scripts/bomex_4631.pbs +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/shallow_convection/paracon/bomex_4631.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=bomex_dump_ +export NPES=np +export MAX_CONTINUATION_RUNS=100 + +ulimit -c unlimited + +. misc/continuation.sh + +run_monc diff --git a/testcases/shallow_convection/submonc_scripts/bomex_tracer.pbs b/testcases/shallow_convection/submonc_scripts/bomex_tracer.pbs new file mode 100644 index 00000000..83681225 --- /dev/null +++ b/testcases/shallow_convection/submonc_scripts/bomex_tracer.pbs @@ -0,0 +1,37 @@ +#!/bin/bash --login +#PBS -N bomex_tracer +#PBS -l select=2 +#PBS -l walltime=01:20:00 +#PBS -j oe +####PBS -P project_code +#PBS -q normal + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A CHECKPOINT JOB WITH THE CONTINUATION SCRIPT #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +# Make sure any symbolic links are resolved to absolute path +export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) + +# Change to the direcotry that the job was submitted from +cd $PBS_O_WORKDIR + +export SUBMISSION_SCRIPT_NAME=testcases/shallow_convection/submonc_scripts/bomex_tracer.pbs +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/shallow_convection/paracon/bomex_tracer.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=bomex_dump_ +export NPES=np +export MAX_CONTINUATION_RUNS=100 + +ulimit -c unlimited + +. misc/continuation.sh + +run_monc diff --git a/testcases/shallow_convection/submonc_scripts/bomex_tracer_fxts.pbs b/testcases/shallow_convection/submonc_scripts/bomex_tracer_fxts.pbs new file mode 100644 index 00000000..ca1b4d1f --- /dev/null +++ b/testcases/shallow_convection/submonc_scripts/bomex_tracer_fxts.pbs @@ -0,0 +1,37 @@ +#!/bin/bash --login +#PBS -N bomex_tracer +#PBS -l select=2 +#PBS -l walltime=00:20:00 +#PBS -j oe +#PBS -P nexcs-n06 +#PBS -q nexcs + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A CHECKPOINT JOB WITH THE CONTINUATION SCRIPT #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +# Make sure any symbolic links are resolved to absolute path +export PBS_O_WORKDIR=$(readlink -f $PBS_O_WORKDIR) + +# Change to the direcotry that the job was submitted from +cd $PBS_O_WORKDIR + +export SUBMISSION_SCRIPT_NAME=testcases/shallow_convection/submonc_scripts/bomex_tracer_fxts.pbs +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/shallow_convection/paracon/bomex_tracer_fxts.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=bomex_dump_ +export NPES=np +export MAX_CONTINUATION_RUNS=30 + +ulimit -c unlimited + +. misc/continuation.sh + +run_monc diff --git a/testcases/stable/Fog_Porson2011.mcf b/testcases/stable/Fog_Porson2011.mcf index 2edeb8a7..57d41cf8 100644 --- a/testcases/stable/Fog_Porson2011.mcf +++ b/testcases/stable/Fog_Porson2011.mcf @@ -55,6 +55,8 @@ mm=300.0 mm1=60.0 diag_write_freq=1800.0 +diagnostic_file="diagnostic_files/diagnostics_FOG_ts.nc" + # Checkpoint configuration checkpoint_frequency=0 checkpoint_file="checkpoint_files/fog_dump.nc" @@ -78,8 +80,8 @@ cfl_dtmmin=0.001 thref0=279.75 surface_pressure=103190.0 surface_reference_pressure=100000. -x_size=4 -y_size=4 +x_size=64 +y_size=64 z_size=270 dxx=2.0 dyy=2.0 @@ -164,12 +166,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -#spectral_file_lw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 5 @@ -181,12 +179,12 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 52.0 # latitude for the location of radiation calc -longitude = 0.0 # longitude for the location of radiation calc +longitude = 0.0 # longitude for the location of radiation calc rad_start_year = 2008.0 # simulation year for earth sun distance -rad_start_day = 43.0 # day number from January 1st -rad_int_time = 60.0 # Radiation integration timestep -#rad_start_time = 14.00 # Start time for the radiation -rad_start_time = 17.50 # Start time for the radiation +rad_start_day = 43.0 # day number from January 1st +#rad_start_time = 14.00 # Start time for the radiation +rad_start_time = 17.50 # Start time for the radiation +rad_interval = 50 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/stable/lanfex_IOP1_casim.mcf b/testcases/stable/lanfex_IOP1_casim.mcf index c94b5cbd..dee20b14 100644 --- a/testcases/stable/lanfex_IOP1_casim.mcf +++ b/testcases/stable/lanfex_IOP1_casim.mcf @@ -80,8 +80,8 @@ cfl_dtmmin=0.001 thref0=275.5 surface_pressure=102350.0 surface_reference_pressure=100000. -x_size=768 -y_size=768 +x_size=64 +y_size=64 z_size=250 dxx=1.0 dyy=1.0 @@ -175,10 +175,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/m mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.o3.nc # Add options for rad_cntrl -spectral_file_lw = /data/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /data/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -193,8 +191,8 @@ latitude = 52.10 # latitude for the location of radiation calc longitude = -0.42 # longitude for the location of radiation calc rad_start_year = 2014.0 # simulation year for earth sun distance rad_start_day = 328.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep rad_start_time = 17.00 # Start time for the radiation +rad_interval = 300 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/stratus/mbl_sc.mcf b/testcases/stratus/mbl_sc.mcf index 24002f73..cb6046df 100644 --- a/testcases/stratus/mbl_sc.mcf +++ b/testcases/stratus/mbl_sc.mcf @@ -5,6 +5,7 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. @@ -45,7 +46,7 @@ moncs_per_io_server=8 sampling_frequency=75 3d_sampling_frequency=4500 mm=1800.0 -mm1=60.0 +mm1=20.0 diag_write_freq=7260.0 # Checkpoint configuration @@ -60,7 +61,7 @@ advection_theta_field=tvd advection_q_fields=tvd # CFL configuration -cfl_frequency=100 +cfl_frequency=1000 cfl_cvismax=0.4 cfl_cvelmax=0.4 cfl_dtmmax=0.4 @@ -71,8 +72,8 @@ cfl_dtmmin=0.001 thref0=288.0 surface_pressure=100000. surface_reference_pressure=100000. -x_size=128 -y_size=128 +x_size=64 +y_size=64 z_size=100 dxx=50 dyy=50 @@ -156,8 +157,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -173,8 +174,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/stratus/mbl_sc_casim.mcf b/testcases/stratus/mbl_sc_casim.mcf index c33a908a..fe2a60b6 100644 --- a/testcases/stratus/mbl_sc_casim.mcf +++ b/testcases/stratus/mbl_sc_casim.mcf @@ -5,6 +5,7 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. @@ -29,7 +30,7 @@ iobridge_enabled=.true. scalar_diagnostics_enabled=.true. profile_diagnostics_enabled=.true. subgrid_profile_diagnostics_enabled=.true. -flux_budget_enabled=.true. +flux_budget_enabled=.false. socrates_couple_enabled=.true. # Control configuration @@ -53,7 +54,7 @@ diag_write_freq=7260.0 checkpoint_frequency=0 checkpoint_file="checkpoint_files/mbl_sc_casim_dump.nc" check_walltime_frequency=100 -walltime_limit=00:30:00 +walltime_limit=00:20:00 # Advection choices advection_flow_fields=pw @@ -61,7 +62,7 @@ advection_theta_field=tvd advection_q_fields=tvd # CFL configuration -cfl_frequency=100 +cfl_frequency=1000 cfl_cvismax=0.4 cfl_cvelmax=0.4 cfl_dtmmax=0.4 @@ -74,7 +75,7 @@ surface_pressure=100000. surface_reference_pressure=100000. x_size=128 y_size=128 -z_size=100 +z_size=50 dxx=50 dyy=50 zztop=1600.0 @@ -108,7 +109,7 @@ l_matchthref=.false. # Random noise l_rand_pl_theta=.true. z_rand_pl_theta=0.0, 600.0, 601.0, 1600. -f_rand_pl_theta=0.1, 0.1, 0.000, 0.000 +f_rand_pl_theta=0.1, 0.1, 0.0001, 0.0001 # Simple cloud max_height_cloud=1600. @@ -157,9 +158,9 @@ cltop_longwave_flux = 70.0 # cloud top longwave flux (Wm-2) clbase_longwave_flux = 0.0 # cloud base longwave flux (Wm-2) #CASIM options -number_q_fields=11 -option=22222 -l_warm=.false. +number_q_fields=5 +option=22000 +l_warm=.true. aerosol_option=0 iopt_act=0 @@ -172,8 +173,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -189,8 +190,8 @@ latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/stratus/mbl_sc_diurnal.mcf b/testcases/stratus/mbl_sc_diurnal.mcf index cf4bd575..ac1443d7 100644 --- a/testcases/stratus/mbl_sc_diurnal.mcf +++ b/testcases/stratus/mbl_sc_diurnal.mcf @@ -5,6 +5,7 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. @@ -47,7 +48,7 @@ sampling_frequency=75 3d_sampling_frequency=4500 mm=1800.0 mm1=60.0 -diag_write_freq=7260.0 +diag_write_freq=7200.0 # Checkpoint configuration checkpoint_frequency=0 @@ -107,7 +108,7 @@ l_matchthref=.false. # Random noise l_rand_pl_theta=.true. z_rand_pl_theta=0.0, 600.0, 601.0, 1600. -f_rand_pl_theta=0.1, 0.1, 0.000, 0.000 +f_rand_pl_theta=0.1, 0.1, 0.0001, 0.0001 # Simple cloud max_height_cloud=1600. @@ -156,9 +157,9 @@ cltop_longwave_flux = 70.0 # cloud top longwave flux (Wm-2) clbase_longwave_flux = 0.0 # cloud base longwave flux (Wm-2) #CASIM options -number_q_fields=11 -option=22222 -l_warm=.false. +number_q_fields=5 +option=22000 +l_warm=.true. aerosol_option=0 iopt_act=0 @@ -171,8 +172,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /projects/monc/fra23/socrates_spectra/ga7/sp_lw_ga7 -spectral_file_sw = /projects/monc/fra23/socrates_spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -181,15 +182,15 @@ i_cloud_representation = 2 l_360 = .true. # 360 days in year as opposed to 365 (a UM thing # in the LEM, is this still required??) l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed -l_no_solar = .false. # no solar, only longwave +l_no_solar = .false. # no solar, only longwave solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 33.0 # latitude for the location of radiation calc longitude = -123.0 # longitude for the location of radiation calc rad_start_year = 1987.0 # simulation year for earth sun distance rad_start_day = 180.0 # day number from January 1st -rad_int_time = 180.0 # Radiation integration timestep rad_start_time = 10.0 # Start time for the radiation +rad_interval = 75 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/tank_experiments/cold_bubble.mcf b/testcases/tank_experiments/cold_bubble.mcf index 54050f6f..a0a56fc4 100644 --- a/testcases/tank_experiments/cold_bubble.mcf +++ b/testcases/tank_experiments/cold_bubble.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. @@ -66,10 +67,10 @@ check_walltime_frequency=100 walltime_limit=00:30:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/testcases/tank_experiments/src/tank_experiments.F90 b/testcases/tank_experiments/src/tank_experiments.F90 index d805d796..6954dc38 100644 --- a/testcases/tank_experiments/src/tank_experiments.F90 +++ b/testcases/tank_experiments/src/tank_experiments.F90 @@ -234,7 +234,7 @@ subroutine generate_bubbles(current_state) end if if (l_moist)then - TdegK=(current_state%global_grid%configuration%vertical%thref(k)+current_state%th%data(k,j,i))*exner + TdegK=(current_state%global_grid%configuration%vertical%thref(k)+current_state%th%data(k,j,i))*exner qsat=qsaturation(TdegK, current_state%global_grid%configuration%vertical%prefn(k)/100.) RH_tank=RH if (l_splittank)then @@ -280,7 +280,7 @@ subroutine generate_bubbles(current_state) current_state%th%data(k,j,i) = current_state%th%data(k,j,i)+th_pert_loc * xi * xi end if if (l_moist)then - TdegK=(current_state%global_grid%configuration%vertical%thref(k)+current_state%th%data(k,j,i))*exner + TdegK=(current_state%global_grid%configuration%vertical%thref(k)+current_state%th%data(k,j,i))*exner qsat=qsaturation(TdegK, current_state%global_grid%configuration%vertical%prefn(k)/100.) current_state%q(iqv)%data(k,j,i) = qsat*bubble_RH(ibub)/100. do n=1,nq_bubbles diff --git a/testcases/tank_experiments/up_down_bubble.mcf b/testcases/tank_experiments/up_down_bubble.mcf index edf6e2d7..6c07a85d 100644 --- a/testcases/tank_experiments/up_down_bubble.mcf +++ b/testcases/tank_experiments/up_down_bubble.mcf @@ -2,27 +2,31 @@ global_configuration=global_config # Override global component defaults +cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. tvd_advection_enabled=.true. simplesetup_enabled=.true. -smagorinsky_enabled=.false. -lower_bc_enabled=.false. -setfluxlook_enabled=.false. #This must be set to true if running with lower_bc +smagorinsky_enabled=.true. +lower_bc_enabled=.true. +setfluxlook_enabled=.true. #This must be set to true if running with lower_bc viscosity_enabled=.true. diffusion_enabled=.true. simplecloud_enabled=.false. coriolis_enabled=.false. damping_enabled=.false. forcing_enabled=.false. -galilean_transformation=.false. # Needs debugging +galilean_transformation=.true. # Needs debugging randomnoise_enabled=.false. -mean_profiles_enabled=.true. #This must be set to true if running with damping or profile_diagnostics -th_advection_enabled=.false. +mean_profiles_enabled=.true. #This must be set to true if running with damping +th_advection_enabled=.true. iobridge_enabled=.true. scalar_diagnostics_enabled=.true. profile_diagnostics_enabled=.true. +subgrid_profile_diagnostics_enabled=.true. +flux_budget_enabled=.true. # Test case source code tank_experiments_enabled=.true. @@ -58,10 +62,10 @@ check_walltime_frequency=100 walltime_limit=00:30:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # CFL configuration diff --git a/testcases/tank_experiments/warm_bubble.mcf b/testcases/tank_experiments/warm_bubble.mcf index 2d48b8b7..84162e85 100644 --- a/testcases/tank_experiments/warm_bubble.mcf +++ b/testcases/tank_experiments/warm_bubble.mcf @@ -3,6 +3,7 @@ global_configuration=global_config # Override global component defaults cfltest_enabled=.true. +checkpointer_enabled=.true. fftsolver_enabled=.true. iterativesolver_enabled=.false. pw_advection_enabled=.true. @@ -66,10 +67,10 @@ check_walltime_frequency=100 walltime_limit=00:30:00 # iterative solver -tolerance=1.e-5 +tolerance=1.e-4 max_iterations=500 preconditioner_iterations=0 -include_top_level=.false. +include_top_level=.true. symm_prob=.false. # roughness length so the same as LEM diff --git a/testcases/testcaseheaders.static b/testcases/testcaseheaders.static index 610585e0..e2c2f24a 100644 --- a/testcases/testcaseheaders.static +++ b/testcases/testcaseheaders.static @@ -2,3 +2,5 @@ use drybl_mod, only : drybl_get_descriptor use ideal_squall_mod, only : ideal_squall_get_descriptor use kidtestcase_mod, only : kidtestcase_get_descriptor use tank_experiments_mod, only : tank_experiments_get_descriptor +use shallow_convection_mod, only : shallow_convection_get_descriptor +use rcemip_mod, only : rcemip_get_descriptor diff --git a/testcases/testcaseregistrations.static b/testcases/testcaseregistrations.static index 1bb36ab3..afe0e84e 100644 --- a/testcases/testcaseregistrations.static +++ b/testcases/testcaseregistrations.static @@ -2,3 +2,5 @@ call add_component(component_descriptions, drybl_get_descriptor()) call add_component(component_descriptions, ideal_squall_get_descriptor()) call add_component(component_descriptions, kidtestcase_get_descriptor()) call add_component(component_descriptions, tank_experiments_get_descriptor()) +call add_component(component_descriptions, shallow_convection_get_descriptor()) +call add_component(component_descriptions, rcemip_get_descriptor()) diff --git a/testcases/transition/constrain_1000m_96km.mcf b/testcases/transition/constrain_1000m_96km.mcf index b083a893..d93a4e7d 100644 --- a/testcases/transition/constrain_1000m_96km.mcf +++ b/testcases/transition/constrain_1000m_96km.mcf @@ -84,8 +84,8 @@ surface_reference_pressure=100000. x_size=96 y_size=96 z_size=150 -dxx=50.0 -dyy=50.0 +dxx=1000.0 +dyy=1000.0 zztop=5000.0 kgd=100, 130, 150 hgd=2000.0, 3500.0, 5000.0 @@ -196,12 +196,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/m mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -213,11 +209,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 120 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_250m_96km.mcf b/testcases/transition/constrain_250m_96km.mcf index cb83036a..af599ef5 100644 --- a/testcases/transition/constrain_250m_96km.mcf +++ b/testcases/transition/constrain_250m_96km.mcf @@ -84,8 +84,8 @@ surface_reference_pressure=100000. x_size=384 y_size=384 z_size=150 -dxx=50.0 -dyy=50.0 +dxx=250.0 +dyy=250.0 zztop=5000.0 kgd=100, 130, 150 hgd=2000.0, 3500.0, 5000.0 @@ -196,12 +196,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/m mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -213,11 +209,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 120 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_500m_96km.mcf b/testcases/transition/constrain_500m_96km.mcf index 3ef39eb3..c7a7d2a5 100644 --- a/testcases/transition/constrain_500m_96km.mcf +++ b/testcases/transition/constrain_500m_96km.mcf @@ -84,8 +84,8 @@ surface_reference_pressure=100000. x_size=192 y_size=192 z_size=150 -dxx=50.0 -dyy=50.0 +dxx=500.0 +dyy=500.0 zztop=5000.0 kgd=100, 130, 150 hgd=2000.0, 3500.0, 5000.0 @@ -196,12 +196,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/m mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/mlw.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -213,11 +209,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 120 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_res1000m.mcf b/testcases/transition/original_constrain_mcf/constrain_res1000m.mcf similarity index 89% rename from testcases/transition/constrain_res1000m.mcf rename to testcases/transition/original_constrain_mcf/constrain_res1000m.mcf index ee6e8c27..ae0c63b0 100644 --- a/testcases/transition/constrain_res1000m.mcf +++ b/testcases/transition/original_constrain_mcf/constrain_res1000m.mcf @@ -188,16 +188,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -209,11 +201,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 30 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_res100m.mcf b/testcases/transition/original_constrain_mcf/constrain_res100m.mcf similarity index 89% rename from testcases/transition/constrain_res100m.mcf rename to testcases/transition/original_constrain_mcf/constrain_res100m.mcf index e816404a..d7a36a94 100644 --- a/testcases/transition/constrain_res100m.mcf +++ b/testcases/transition/original_constrain_mcf/constrain_res100m.mcf @@ -187,16 +187,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -208,11 +200,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 30 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_res250m.mcf b/testcases/transition/original_constrain_mcf/constrain_res250m.mcf similarity index 89% rename from testcases/transition/constrain_res250m.mcf rename to testcases/transition/original_constrain_mcf/constrain_res250m.mcf index 9c12eb77..ba9b40e5 100644 --- a/testcases/transition/constrain_res250m.mcf +++ b/testcases/transition/original_constrain_mcf/constrain_res250m.mcf @@ -187,16 +187,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -208,11 +200,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 30 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/testcases/transition/constrain_res500m.mcf b/testcases/transition/original_constrain_mcf/constrain_res500m.mcf similarity index 89% rename from testcases/transition/constrain_res500m.mcf rename to testcases/transition/original_constrain_mcf/constrain_res500m.mcf index 03823641..be38fdb7 100644 --- a/testcases/transition/constrain_res500m.mcf +++ b/testcases/transition/original_constrain_mcf/constrain_res500m.mcf @@ -187,16 +187,8 @@ mcc_temperature_profile = components/socrates_couple/data/mcc_profiles/one_km/t mcc_vapour_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.q.nc mcc_ozone_profile = components/socrates_couple/data/mcc_profiles/one_km/tro.o3.nc # Add options for rad_cntrl -spectral_file_lw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -spectral_file_sw = /home/d04/fra23/socrates_trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /projects/monc/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /data/local/fra23/socrates/trunk/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 -#spectral_file_lw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_lw_ga7 -#spectral_file_sw = /home/vagrant/models/socrates_trunk/data/spectra/ga7/sp_sw_ga7 +spectral_file_lw = components/socrates_couple/data/spectra/ga7/sp_lw_ga7 +spectral_file_sw = components/socrates_couple/data/spectra/ga7/sp_sw_ga7 # 5 is clear sky, 2 is cloud (ice and liquid no overlap), 1 (ice and liquid full overlap) i_cloud_representation = 2 @@ -208,11 +200,11 @@ l_solar_fixed = .false. # true equals fixed insolation using value in sol_fixed solar_fixed = 1361.0 # prescribed insolation value sec_fixed = 1.15470054 # prescribed 1/cos(solar_zenith_angle) latitude = 65.0 # latitude for the location of radiation calc -longitude = -10. # longitude for the location of radiation calc +longitude = -10. # longitude for the location of radiation calc rad_start_year = 2010.0 # simulation year for earth sun distance -rad_start_day = 31.0 # day number from January 1st -rad_int_time = 30.0 # Radiation integration timestep +rad_start_day = 31.0 # day number from January 1st rad_start_time = 6.00 # Start time for the radiation +rad_interval = 30 # Radiation calculation interval [integer, unit depends on time_basis] ## Surface albedo variables for socrates l_variable_srf_albedo = .false. # not coded yet but will allow variable diff --git a/utils/arc/monc_compile_arc.sh b/utils/arc/monc_compile_arc.sh new file mode 100755 index 00000000..925b5f6a --- /dev/null +++ b/utils/arc/monc_compile_arc.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +#Script to compile Monc on ARC4: + +module purge +module load user +module switch intel gnu/8.3.0 +#module switch openmpi mvapich2 +module load fftw netcdf hdf5 fcm + +fcm make -j4 -f fcm-make/monc-arc4-gnu.cfg diff --git a/utils/arc/submonc.sge b/utils/arc/submonc.sge new file mode 100644 index 00000000..97412899 --- /dev/null +++ b/utils/arc/submonc.sge @@ -0,0 +1,47 @@ +#!/bin/bash +#$ -pe ib 4 +#$ -l h_rt=0:30:0 +#$ -l h_vmem=1G +#$ -l placement=scatter +#$ -cwd -V + +############################################################## +#### THIS IS AN EXAMPLE SCRIPT TO DEMONSTRATE HOW TO #### +#### SUBMIT A STANDARD monc JOB WITHOUT A RESTART #### +#### Script assumes that there are directories called #### +#### monc_stdout , checkpoint_files and diagnostic_files #### +#### If these do not exist, MONC will fail #### +############################################################## + +echo Starting job + +module purge +module load user +module switch intel gnu/8.3.0 +#module switch openmpi mvapich2 +module load netcdf hdf5 fftw fcm + +module list + +if [ ! -d checkpoint_files ]; then mkdir checkpoint_files; fi +if [ ! -d monc_stdout ]; then mkdir monc_stdout; fi +if [ ! -d diagnostic_files ]; then mkdir diagnostic_files; fi + +# MVAPICH2 RUNTIME VARIABLES +#MONC_THREAD_MULTIPLE=0 +#MV2_ENABLE_AFFINITY=0 +#MV2_SHOW_CPU_BINDING=1 +#MV2_USE_THREAD_WARNING=0 +#export MONC_THREAD_MULTIPLE MV2_ENABLE_AFFINITY MV2_SHOW_CPU_BINDING \ +# MV2_USE_THREAD_WARNING + +# Set the number of threads to 1 +# This prevents any system libraries from automatically +# using threading. +export OMP_NUM_THREADS=1 + +# set env variables for submission command +config_path='testcases/tank_experiments/straka.mcf' +checkpoint_fn="checkpoint_files/straka_dump.nc" + +mpirun -np 4 ./build/bin/monc_driver.exe --config=$config_path --checkpoint_file=$checkpoint_fn &> monc_stdout/output_straka_dump_1 diff --git a/utils/archer2/asubmonc.sb b/utils/archer2/asubmonc.sb new file mode 100644 index 00000000..1bd62dc5 --- /dev/null +++ b/utils/archer2/asubmonc.sb @@ -0,0 +1,88 @@ +#!/bin/bash +#SBATCH --job-name=MONC_bomex_Casim_Socrates_128core_new +#SBATCH --output=%x.o%j +#SBATCH --open-mode=append +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=128 +#SBATCH --ntasks=128 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:20:00 +#SBATCH --account=n02-NEP013406 +#SBATCH --partition=standard +#SBATCH --reservation=shortqos +#SBATCH --qos=short + +compiler=gnu +#compiler=cray + +# MODULES +module purge +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pyvenvs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pymods +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-utils +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-libs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-apps +module use --append /opt/cray/pe/perftools/20.10.0/modulefiles +module use --append /opt/cray/pe/perftools/20.09.0/modulefiles +module use --append /opt/cray/pe/craype/2.7.0/modulefiles +module use --append /usr/local/Modules/modulefiles +module use --append /opt/cray/pe/cpe-prgenv/7.0.0 +module use --append /opt/cray/pe/modulefiles +module use --append /opt/cray/pe/craype-targets/default/modulefiles +module use --append /opt/modulefiles +module use --append /opt/cray/modulefiles +if [ $compiler == "gnu" ]; then + module load cpe-gnu + module load gcc/9.3.0 +elif [ $compiler == "cray" ]; then + module load cpe-cray + module load cce +fi +module load craype +module load craype-x86-rome +module load --notuasked libfabric +module load craype-network-ofi +module load cray-dsmml +module load perftools-base +module load xpmem +module load cray-mpich +module load cray-libsci +module load --notuasked bolt +module load --notuasked /work/y07/shared/archer2-modules/modulefiles-cse/epcc-setup-env +module load /usr/local/share/epcc-module/epcc-module-loader +module load cray-netcdf-hdf5parallel +module load cray-hdf5-parallel +module load cray-fftw/3.3.8.7 +module load petsc/3.13.3 +module load atp +export ATP_ENABLED=1 +export OMP_NUM_THREADS=1 + +module list +pwd + +ulimit -c unlimited + +# set variables for submission command---------------------- +export SUBMISSION_SCRIPT_NAME=./utils/archer2/asubmonc.sb +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=testcases/shallow_convection/bomex_casim_socrates.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=${SLURM_JOB_NAME}_dump_ +export NPES=${SLURM_NTASKS} +export MAX_CONTINUATION_RUNS=200 +# ---------------------------------------------------------- + +echo -e "\nSubmission time: $(date)\n" + +. misc/continuation.sbatch.sh + +run_monc + +# output job statisitcs to .o (%x.o%j) +echo -e "\nCompletion time: $(date)\n" +scontrol show job $SLURM_JOB_ID +sstat $SLURM_JOB_ID --format="AveRSS,MaxRSS" +# Run after batch job concludes: seff $SLURM_JOB_ID diff --git a/utils/archer2/monc_compile_archer2.sh b/utils/archer2/monc_compile_archer2.sh new file mode 100644 index 00000000..2bd2b76c --- /dev/null +++ b/utils/archer2/monc_compile_archer2.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +keywrdfile=$( sed "s|= |= $( pwd -P )\/fcm-make\/|g" fcm-make/keyword.cfg ) +if [ ! -f ~/.metomi/fcm/keyword.cfg ]; then + mkdir -p ~/.metomi/fcm + echo ${keywrdfile} > ~/.metomi/fcm/keyword.cfg +else + if cat ~/.metomi/fcm/keyword.cfg | grep -q -v "${keywrdfile}"; then + echo ${keywrdfile} >> ~/.metomi/fcm/keyword.cfg + fi +fi + +compiler=gnu +#compiler=cray + +#export PATH=$PATH:/work/y07/shared/umshared/bin +#export PATH=$PATH:/work/y07/shared/umshared/software/bin +. mosrs-setup-gpg-agent + +#module purge +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pyvenvs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pymods +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-utils +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-libs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-apps +module use --append /opt/cray/pe/perftools/20.10.0/modulefiles +module use --append /opt/cray/pe/perftools/20.09.0/modulefiles +module use --append /opt/cray/pe/craype/2.7.0/modulefiles +module use --append /usr/local/Modules/modulefiles +module use --append /opt/cray/pe/cpe-prgenv/7.0.0 +module use --append /opt/cray/pe/modulefiles +module use --append /opt/cray/pe/craype-targets/default/modulefiles +module use --append /opt/modulefiles +module use --append /opt/cray/modulefiles +if [ $compiler == "gnu" ]; then + module load PrgEnv-gnu +# module load cpe-gnu + module load gcc/9.3.0 +elif [ $compiler == "cray" ]; then + module load cpe-cray + module load cce +fi +module load craype +module load craype-x86-rome +module load --notuasked libfabric +module load craype-network-ofi +module load cray-dsmml +module load perftools-base +module load xpmem +module load cray-mpich +module load cray-libsci +module load load-epcc-module +module load epcc-setup-env +module load bolt +#module load --notuasked bolt +#module load --notuasked /work/y07/shared/archer2-modules/modulefiles-cse/epcc-setup-env +#module load /usr/local/share/epcc-module/epcc-module-loader +module load cray-netcdf-hdf5parallel +module load cray-hdf5-parallel +module load cray-fftw #/3.3.8.9 +module load petsc +module load atp +export ATP_ENABLED=1 + +if [ $compiler == "gnu" ]; then + fcmconfig="fcm-make/monc-cray-gnu-archer.cfg" +elif [ $compiler == "cray" ]; then + fcmconfig="fcm-make/monc-cray-cray-archer.cfg" +fi + +echo "Compile options: " +echo "(1) MONC Standalone," +echo "(2) MONC with CASIM," +echo "(3) MONC with SOCRATES," +echo "(4) MONC with CASIM and SOCRATES" +echo "" +echo "Select which option [1-4]: " +read compileoption + +case $compileoption in +1) + fcm make -j4 -f $fcmconfig + ;; +2) + fcm make -j4 -f $fcmconfig -f fcm-make/casim.cfg + ;; +3) + fcm make -j4 -f $fcmconfig -f fcm-make/socrates.cfg + ;; +4) + fcm make --new --ignore-lock -j4 -f $fcmconfig -f fcm-make/casim_socrates.cfg + ;; +*) + echo "Unexpected compilation option. Should be an integer in the range 1-4" + ;; +esac diff --git a/utils/archer2/submonc.slurm b/utils/archer2/submonc.slurm new file mode 100644 index 00000000..26a46d87 --- /dev/null +++ b/utils/archer2/submonc.slurm @@ -0,0 +1,79 @@ +#!/bin/bash +#SBATCH --job-name=MONC_straka_4core +#SBATCH --output=%x.o%j + # %x gives job-name (SLURM_JOB_NAME) + # %j gives jobid (individual SLURM_JOB_ID) + # %A gives jobid (master SLURM_ARRAY_JOB_ID) + # %a gives array task id number + # https://slurm.schedmd.com/sbatch.html +#SBATCH --open-mode=append +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=4 +#SBATCH --ntasks=4 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:10:00 +#SBATCH --account=n02-NEP013406 +#SBATCH --partition=standard +#SBATCH --reservation=shortqos +#SBATCH --qos=short + +echo Starting job + +compiler=gnu +#compiler=cray + +# set up default ARCHER2 job environment +module purge +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pyvenvs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pymods +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-utils +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-libs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-apps +module use --append /opt/cray/pe/perftools/20.10.0/modulefiles +module use --append /opt/cray/pe/perftools/20.09.0/modulefiles +module use --append /opt/cray/pe/craype/2.7.0/modulefiles +module use --append /usr/local/Modules/modulefiles +module use --append /opt/cray/pe/cpe-prgenv/7.0.0 +module use --append /opt/cray/pe/modulefiles +module use --append /opt/cray/pe/craype-targets/default/modulefiles +module use --append /opt/modulefiles +module use --append /opt/cray/modulefiles +if [ $compiler == "gnu" ]; then + module load cpe-gnu + module load gcc/9.3.0 +elif [ $compiler == "cray" ]; then + module load cpe-cray + module load cce +fi +module load craype +module load craype-x86-rome +module load --notuasked libfabric +module load craype-network-ofi +module load cray-dsmml +module load perftools-base +module load xpmem +module load cray-mpich +module load cray-libsci +module load --notuasked bolt +module load --notuasked /work/y07/shared/archer2-modules/modulefiles-cse/epcc-setup-env +module load /usr/local/share/epcc-module/epcc-module-loader +module load cray-netcdf-hdf5parallel +module load cray-hdf5-parallel +module load cray-fftw/3.3.8.7 +module load petsc/3.13.3 +module load atp +export ATP_ENABLED=1 +export OMP_NUM_THREADS=1 +ulimit -c unlimited + +module list + +if [ ! -d checkpoint_files ]; then mkdir checkpoint_files; fi +if [ ! -d monc_stdout ]; then mkdir monc_stdout; fi +if [ ! -d diagnostic_files ]; then mkdir diagnostic_files; fi + +# set env variables for submission command +config_path='tests/straka_short.mcf' +checkpoint_fn="checkpoint_files/straka_dump.nc" + +srun --unbuffered --cpu-bind=cores --distribution=block:block --hint=nomultithread ./build/bin/monc_driver.exe --config=$config_path --checkpoint_file=$checkpoint_fn diff --git a/utils/archer2/submonc_dephy.sb b/utils/archer2/submonc_dephy.sb new file mode 100644 index 00000000..593f11dc --- /dev/null +++ b/utils/archer2/submonc_dephy.sb @@ -0,0 +1,88 @@ +#!/bin/bash +#SBATCH --job-name=MONC_dephy_CASIM +#SBATCH --output=%x.o%j +#SBATCH --open-mode=append +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=128 +#SBATCH --ntasks=128 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:20:00 +#SBATCH --account=n02-NEP013406 +#SBATCH --partition=standard +#SBATCH --reservation=shortqos +#SBATCH --qos=short + +compiler=gnu +#compiler=cray + +# MODULES +module purge +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pyvenvs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-pymods +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-utils +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-libs +module use --append /work/y07/shared/archer2-modules/modulefiles-cse-apps +module use --append /opt/cray/pe/perftools/20.10.0/modulefiles +module use --append /opt/cray/pe/perftools/20.09.0/modulefiles +module use --append /opt/cray/pe/craype/2.7.0/modulefiles +module use --append /usr/local/Modules/modulefiles +module use --append /opt/cray/pe/cpe-prgenv/7.0.0 +module use --append /opt/cray/pe/modulefiles +module use --append /opt/cray/pe/craype-targets/default/modulefiles +module use --append /opt/modulefiles +module use --append /opt/cray/modulefiles +if [ $compiler == "gnu" ]; then + module load cpe-gnu + module load gcc/9.3.0 +elif [ $compiler == "cray" ]; then + module load cpe-cray + module load cce +fi +module load craype +module load craype-x86-rome +module load --notuasked libfabric +module load craype-network-ofi +module load cray-dsmml +module load perftools-base +module load xpmem +module load cray-mpich +module load cray-libsci +module load --notuasked bolt +module load --notuasked /work/y07/shared/archer2-modules/modulefiles-cse/epcc-setup-env +module load /usr/local/share/epcc-module/epcc-module-loader +module load cray-netcdf-hdf5parallel +module load cray-hdf5-parallel +module load cray-fftw/3.3.8.7 +module load petsc/3.13.3 +module load atp +export ATP_ENABLED=1 +export OMP_NUM_THREADS=1 + +module list +pwd + +ulimit -c unlimited + +# set variables for submission command---------------------- +export SUBMISSION_SCRIPT_NAME=./utils/archer2/asubmonc.sb +export MONC_EXEC=./build/bin/monc_driver.exe + +export TESTCASE=dephy_20191209_12_casim.mcf +export STDOUT_DIR=monc_stdout +export CP_DIR=checkpoint_files +export RUN_NAME=${SLURM_JOB_NAME}_dump_ +export NPES=${SLURM_NTASKS} +export MAX_CONTINUATION_RUNS=200 +# ---------------------------------------------------------- + +echo -e "\nSubmission time: $(date)\n" + +. misc/continuation.sbatch.sh + +run_monc + +# output job statisitcs to .o (%x.o%j) +echo -e "\nCompletion time: $(date)\n" +scontrol show job $SLURM_JOB_ID +sstat $SLURM_JOB_ID --format="AveRSS,MaxRSS" +# Run after batch job concludes: seff $SLURM_JOB_ID